summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2002-03-24 00:23:28 +0000
committerJose Antonio Ortega Ruiz <jao@gnu.org>2002-03-24 00:23:28 +0000
commit49e90a3bde782e564118d5673f3a86de7489a62b (patch)
treeab80be6a1704dc03ac6df3c343febd7142e885d9
parentbcea0b1b22b0cb56fcc58a33147ebb5555a171d0 (diff)
downloadmdk-49e90a3bde782e564118d5673f3a86de7489a62b.tar.gz
mdk-49e90a3bde782e564118d5673f3a86de7489a62b.tar.bz2
wrapping up location pointer when address 3999 is reached
-rw-r--r--mixlib/xmix_vm.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/mixlib/xmix_vm.h b/mixlib/xmix_vm.h
index 60185df..019dfd6 100644
--- a/mixlib/xmix_vm.h
+++ b/mixlib/xmix_vm.h
@@ -2,9 +2,9 @@
* This file contains internal declarations used in the implementation
* of the mix_vm_t type.
* ------------------------------------------------------------------
- * $Id: xmix_vm.h,v 1.6 2001/09/16 22:38:43 jao Exp $
+ * $Id: xmix_vm.h,v 1.7 2002/03/24 00:23:28 jao Exp $
* ------------------------------------------------------------------
- * Copyright (C) 2000 Free Software Foundation, Inc.
+ * Copyright (C) 2000, 2002 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
@@ -35,7 +35,13 @@
#include "mix_vm.h"
/* The mix_vm_t type */
-enum {IREG_NO_ = 6, BD_NO_ = 21, MEM_CELLS_NO_ = MIX_VM_CELL_NO};
+enum {
+ IREG_NO_ = 6,
+ BD_NO_ = 21,
+ MEM_CELLS_NO_ = MIX_VM_CELL_NO,
+ MEM_CELLS_MAX_ = MIX_VM_CELL_NO - 1
+};
+
struct mix_vm_t
{
mix_word_t reg[IREG_NO_+3];
@@ -98,14 +104,14 @@ do { \
#define set_cmp_(vm,x) (vm)->cmpflag = (x)
#define set_over_(vm,x) (vm)->overflow = (x)
-#define set_loc_(vm,x) (vm)->loc_count = (x)&MIX_SHORT_MAX
+#define set_loc_(vm,x) (vm)->loc_count = (MEMOK_(x)? (x) : MIX_SHORT_ZERO)
#define set_status_(vm,s) ((vm)->status = (s))
-#define inc_loc_(vm) \
+#define inc_loc_(vm) \
do { \
- vm->loc_count++; \
- vm->loc_count &= MIX_SHORT_MAX; \
+ if (vm->loc_count++ == MEM_CELLS_MAX_) \
+ vm->loc_count = MIX_SHORT_ZERO; \
} while(FALSE)
#define is_halted_(vm) ((vm)->status == MIX_VM_HALT)