comparison engine.c @ 23:5217f23f2f9e

break point
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 09 Jul 2018 14:54:43 +0900
parents 1925cfa982fe
children fe88cea67ef0
comparison
equal deleted inserted replaced
22:10e33568b38a 23:5217f23f2f9e
62 62
63 Byte * mem0(Byte *iphymem, Word adr, Byte *immu) { 63 Byte * mem0(Byte *iphymem, Word adr, Byte *immu) {
64 return & iphymem[ paddr(adr,immu) ]; 64 return & iphymem[ paddr(adr,immu) ];
65 } 65 }
66 66
67 static Byte mem1(Byte *iphymem, Word adr, Byte *immu) { 67 Byte mem1(Byte *iphymem, Word adr, Byte *immu) {
68 if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff); 68 if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff);
69 Byte *p = mem0(iphymem, adr, immu); 69 Byte *p = mem0(iphymem, adr, immu);
70 if(!(p-phymem>=rommemsize)) { 70 if(!(p-phymem>=rommemsize)) {
71 return *p; 71 return *p;
72 } else { 72 } else {
74 } 74 }
75 } 75 }
76 76
77 #define mem(a) mem1(iphymem,a,immu) 77 #define mem(a) mem1(iphymem,a,immu)
78 78
79 #define SETBYTE(a,n) { \ 79 Byte * SETBYTE1(Word a,Byte n, Byte *iphymem, Byte *immu) {
80 Word adr = a; \ 80 Word adr = a;
81 if ((adr&0xfe00)==(IOPAGE&0xfe00)) { \ 81 if ((adr&0xfe00)==(IOPAGE&0xfe00)) {
82 do_output(adr&0x1ff,n); \ 82 do_output(adr&0x1ff,n);
83 immu = mmu; \ 83 return mmu;
84 } else {\ 84 } else {
85 Byte *p = mem0(iphymem, adr,immu); \ 85 Byte *p = mem0(iphymem, adr,immu);
86 if(!(p-phymem>=romstart)) { \ 86 if(!(p-phymem>=romstart)) {
87 *p=n; \ 87 *p=n;
88 } \ 88 }
89 } \ 89 }
90 return immu;
90 } 91 }
92
93 #define SETBYTE(a,n) immu=SETBYTE1(a,n,iphymem,immu);
91 94
92 #endif 95 #endif
93 96
94 #define GETWORD(a) (mem(a)<<8|mem((a)+1)) 97 #define GETWORD(a) (mem(a)<<8|mem((a)+1))
95 #define SETWORD(a,n) {Word a1=a;SETBYTE(a1,n>>8);SETBYTE(a1+1,n);} 98 #define SETWORD(a,n) {Word a1=a;SETBYTE(a1,n>>8);SETBYTE(a1+1,n);}