summaryrefslogtreecommitdiff
path: root/mixlib/xmix_vm.c
diff options
context:
space:
mode:
authorPeter Pentchev <roam@debian.org>2020-10-25 14:06:17 +0200
committerPeter Pentchev <roam@debian.org>2020-10-25 14:06:17 +0200
commit5422fd264e0ad6144af8fd8a59adca44991220a5 (patch)
treeeaf5b93289ebfb4c5daec11c890e23b2e9c71feb /mixlib/xmix_vm.c
parent2864b7d715ecf25bfb990fbaa0ed133316d04fac (diff)
New upstream version 1.2.11
Diffstat (limited to 'mixlib/xmix_vm.c')
-rw-r--r--mixlib/xmix_vm.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/mixlib/xmix_vm.c b/mixlib/xmix_vm.c
index cf20ee1..1b8d80a 100644
--- a/mixlib/xmix_vm.c
+++ b/mixlib/xmix_vm.c
@@ -1,7 +1,7 @@
/* ---------------------- xmix_vm.c :
* Implementation of the functions declared in xmix_vm.h
* ------------------------------------------------------------------
- * Copyright (C) 2000, 2003, 2004, 2007, 2010, 2013 Free Software Foundation, Inc.
+ * Copyright (C) 2000, 2003, 2004, 2007, 2010, 2013, 2019 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -303,6 +303,7 @@ ioc_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
{
mix_address_t addr;
mix_device_t *dev;
+ mix_word_t val;
g_assert (ins->opcode == mix_opIOC);
@@ -312,7 +313,8 @@ ioc_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
dev = get_dev_ (vm, ins->fspec);
fail_if_not_ (vm, dev != NULL, MIX_VM_ERROR_BAD_DEVICE_NO);
- fail_if_not_ (vm, mix_device_ioc (dev, addr), MIX_VM_ERROR_DEV_CTL);
+ val = get_rX_ (vm);
+ fail_if_not_ (vm, mix_device_ioc (dev, addr, val), MIX_VM_ERROR_DEV_CTL);
inc_loc_ (vm);
return TRUE;
@@ -333,7 +335,7 @@ inp_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
dev = get_dev_ (vm, ins->fspec);
fail_if_not_ (vm, dev != NULL, MIX_VM_ERROR_BAD_DEVICE_NO);
- fail_if_not_ (vm, MEM_CELLS_NO_ - addr > mix_device_block_size (dev),
+ fail_if_not_ (vm, MEM_CELLS_NO_ - addr >= mix_device_block_size (dev),
MIX_VM_ERROR_BAD_ACCESS);
fail_if_not_ (vm, mix_device_read (dev, get_cell_ptr_ (vm, addr)),
@@ -359,7 +361,7 @@ out_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
dev = get_dev_ (vm, ins->fspec);
fail_if_not_ (vm, dev != NULL, MIX_VM_ERROR_BAD_DEVICE_NO);
- fail_if_not_ (vm, MEM_CELLS_NO_ - addr > mix_device_block_size (dev),
+ fail_if_not_ (vm, MEM_CELLS_NO_ - addr >= mix_device_block_size (dev),
MIX_VM_ERROR_BAD_ACCESS);
fail_if_not_ (vm, mix_device_write (dev, get_cell_ptr_ (vm, addr)),