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;
 }