Mercurial > hg > Members > kono > os9 > sbc09
diff v09.c @ 16:807141dc5ee8
sysgo fork
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 08 Jul 2018 09:34:34 +0900 |
parents | 111e5defb8ab |
children | e3b08716aa53 |
line wrap: on
line diff
--- a/v09.c Sat Jul 07 19:57:39 2018 +0900 +++ b/v09.c Sun Jul 08 09:34:34 2018 +0900 @@ -42,6 +42,7 @@ extern FILE *fp; // for disasm extern char *prog; // for disasm extern void disasm(int,int); +extern void do_mmu(Word,Byte); void do_trace(FILE *tracefile) { @@ -54,7 +55,6 @@ fprintf(tracefile,"x=%04x y=%04x u=%04x s=%04x a=%02x b=%02x cc=%02x pc=", xreg,yreg,ureg,sreg,*areg,*breg,ccreg); fp = tracefile; - prog = (char*)mem; disasm(pc,pc); } @@ -81,19 +81,25 @@ exit(2); } long len = filesize(image); +#ifdef USE_MMU + phymem = malloc(memsize + len - 0x2000); + rommemsize = memsize + len - 0x2000; + mem = phymem + memsize - 0x10000 ; + prog = (char*)mem; if (romstart==0x8000) { -#ifdef USE_MMU - phymem = malloc(memsize + len - 0x2000); - mem = phymem + memsize - 0x10000 ; - mmu = mem + 0xffa0; romstart = memsize - 0x2000; - memsize = memsize + len - 0x2000; + } #else + if (romstart==0x8000) { romstart = 0x10000 - len; + } #endif - } fread(mem+(romstart&0xffff),len,1,image); fclose(image); +#ifdef USE_MMU + do_mmu(0x91,0); // set mmu + do_mmu(0xa7,0x3f); // initial mmu value +#endif } void usage(void) @@ -164,6 +170,7 @@ read_image(); if (setterm) set_term(escchar); pcreg=(mem[0xfffe]<<8)+mem[0xffff]; + prog = (char*)mem; // for disasm interpr(); return 0; }