Mercurial > hg > Members > kono > os9 > sbc09
diff engine.c @ 21:1925cfa982fe
fixing trace
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 09 Jul 2018 11:25:28 +0900 |
parents | e3b08716aa53 |
children | 5217f23f2f9e |
line wrap: on
line diff
--- a/engine.c Mon Jul 09 09:29:33 2018 +0900 +++ b/engine.c Mon Jul 09 11:25:28 2018 +0900 @@ -39,12 +39,29 @@ static int tracetrick=0; extern long romstart; -#ifdef USE_MMU +#ifndef USE_MMU + +static Byte mem1(Word adr) { + if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff); + return mem[adr]; +} + +static void SETBYTE1(Word a,Byte n) { + if ((a&0xfe00)==(IOPAGE&0xfe00)) do_output(a&0x1ff,n); + if(!(a>=romstart))mem[a]=n; +} +#define mem(a) mem1(a) +#define SETBYTE(a,n) SETBYTE1(a,n); + +#else + +int paddr(Word adr, Byte *immu) { + if ((adr&0xfe00)==(IOPAGE&0xfe00)) return memsize-0x10000+adr; + return (immu[ (adr) >> 13 ] <<13 ) + ((adr) & 0x1fff ); +} Byte * mem0(Byte *iphymem, Word adr, Byte *immu) { - if ((adr&0xfe00)==(IOPAGE&0xfe00)) return &mem[adr]; - int addr = (immu[ (adr) >> 13 ] <<13 ) + ((adr) & 0x1fff ); - return & iphymem[ addr ]; + return & iphymem[ paddr(adr,immu) ]; } static Byte mem1(Byte *iphymem, Word adr, Byte *immu) { @@ -72,21 +89,6 @@ } \ } - -#else - -static Byte mem1(Word adr) { - if ((adr&0xfe00)==(IOPAGE&0xfe00)) return do_input(adr&0x1ff); - return mem[adr]; -} - -static void SETBYTE1(Word a,Byte n) { - if ((a&0xfe00)==(IOPAGE&0xfe00)) do_output(a&0x1ff,n); - if(!(a>=romstart))mem[a]=n; -} -#define mem(a) mem1(a) -#define SETBYTE(a,n) SETBYTE1(a,n); - #endif #define GETWORD(a) (mem(a)<<8|mem((a)+1))