summaryrefslogtreecommitdiffhomepage
path: root/mixgtk/mixgtk_device.c
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2019-04-09 02:40:05 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2019-04-09 02:40:05 +0100
commitb72dc79eec3d369a38202522165f5ef4cfa5b98b (patch)
tree82e9754139370a77b76549aa32a40855bce987cb /mixgtk/mixgtk_device.c
parent9ae59a93a74424e26045b749141cb238ec049a96 (diff)
downloadmdk-b72dc79eec3d369a38202522165f5ef4cfa5b98b.tar.gz
mdk-b72dc79eec3d369a38202522165f5ef4cfa5b98b.tar.bz2
Support IOC commands for disk/drum devices
Thanks to Kevin Brunelle There is a minor fix included with regards to tape devices. The test was failing if M == 0, when it should fail when M != 0. NOTICE: This patch changes the behavior of the VM and changes the function parameters for the ioc_ function. Documentation changes are included. Permits the following: LDX BLKNUM IOC 0(8) OUT ADDR(8) Write block from ADDR into disk[BLKNUM] IOC 0(8) IN ADDR(8) Read block from disk[BLKNUM] into ADDR ... BLKNUM CON 45000 Example possible block on disk I was having an issue writing a block to a drive and then reading back the same block. Because it is impossible to move the SEEK_CUR pointer backwards on a disk device, there was no way for a program to read back a block that it wrote to a disk without restarting or fiddling with ~/.mdk/disk?.dev files and symbolic links. I have added a function parameter to the ioc_ function and used it to pass the value of rX to ioc_. This permits us to use IOC commands to move the read/write head on a disk/drum device. I believe that this conforms to the potential meaning of Knuth's description of IOC for disk/drum devices. I have put in tests to verify that rX is positive and M = 0. I have updated the documentation to reflect this new behavior. This makes disks much more usable. Note: I won't be offended if this patch is rejected because it changed the behavior of the VM. I think it fits the spirit and enhances the functionality in a way that some might find useful. I wanted it for something I was working on, and I felt others might want the same. The thing with the paper-tape should be fixed, though.
Diffstat (limited to 'mixgtk/mixgtk_device.c')
-rw-r--r--mixgtk/mixgtk_device.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mixgtk/mixgtk_device.c b/mixgtk/mixgtk_device.c
index d3ce934..0cae037 100644
--- a/mixgtk/mixgtk_device.c
+++ b/mixgtk/mixgtk_device.c
@@ -272,9 +272,9 @@ read_ (mix_device_t *dev, mix_word_t *block)
}
static gboolean
-ioc_ (mix_device_t *dev, mix_short_t cmd)
+ioc_ (mix_device_t *dev, mix_short_t cmd, mix_word_t val)
{
- return (DEF_DEV_VTABLE_->ioc)(dev, cmd);
+ return (DEF_DEV_VTABLE_->ioc)(dev, cmd, val);
}
static gboolean