changeset 16:807141dc5ee8

sysgo fork
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 08 Jul 2018 09:34:34 +0900
parents bb6a2a9f59f1
children 67046a9431a0
files engine.c os9/Makefile os9/level2/boot.asm v09.c v09.h
diffstat 5 files changed, 20 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/engine.c	Sat Jul 07 19:57:39 2018 +0900
+++ b/engine.c	Sun Jul 08 09:34:34 2018 +0900
@@ -49,7 +49,7 @@
 static Byte mem1(Byte *iphymem, Word adr, Byte *immu) {
     if ((adr&0xff00)==(IOPAGE&0xff00)) return do_input(adr&0xff);
     Byte *p = mem0(iphymem, adr, immu);
-    if(!(p-phymem>=memsize)) {
+    if(!(p-phymem>=rommemsize)) {
         return *p;
     } else {
         return 0xff;
@@ -225,9 +225,7 @@
  Byte tb;Word tw;
  Byte *immu = 0; 
 #ifdef USE_MMU
- const int imemsize = memsize;
  Byte *iphymem = (Byte *)phymem;
- immu = iphymem + imemsize - 0x10000 + 0xffa0;
 #endif 
  LOADREGS
  for(;;){
--- a/os9/Makefile	Sat Jul 07 19:57:39 2018 +0900
+++ b/os9/Makefile	Sun Jul 08 09:34:34 2018 +0900
@@ -25,4 +25,4 @@
 	./makerom -o os9d.rom  modules/Shell modules/init.b modules/mdir modules/dir.b modules/SysGo modules/IOMan modules/pty-dd.b modules/pty.b modules/pdisk.b modules/d0.b modules/d1.b modules/clock.b modules/SCF modules/rbf.b modules/OS9p2 modules/OS9
    
 os9lv2.rom : makerom level2/init
-	./makerom -o os9lv2.rom -2  level2/Shell level2/mdir level2/dir level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman modules/SysGo level2/scf level2/rbf level2/os9p2 level2/pdisk level2/pty level2/term level2/init level2/boot level2/os9p1 
+	./makerom -o os9lv2.rom -2  level2/Shell   level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman modules/SysGo level2/scf level2/rbf level2/os9p2 level2/pdisk level2/pty level2/term level2/init level2/boot level2/os9p1 
--- a/os9/level2/boot.asm	Sat Jul 07 19:57:39 2018 +0900
+++ b/os9/level2/boot.asm	Sun Jul 08 09:34:34 2018 +0900
@@ -39,11 +39,12 @@
      **  read boot rom file size
          os9    F$LDDDXY 
          bcs    last
+         std   ,s       size return as d
          addb   #$ff
-         adca   #$1f
+         adda   #$2f     request +0x2000
          clrb
          anda   #$e0
-         std   ,s       size return as d
+         addd   #-1
          os9    F$BtMem
          bcs    last
      **  u points the memory
--- 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;
 }
--- a/v09.h	Sat Jul 07 19:57:39 2018 +0900
+++ b/v09.h	Sun Jul 08 09:34:34 2018 +0900
@@ -19,6 +19,7 @@
 extern Byte *breg,*areg;
 
 engine long memsize;
+engine long rommemsize;
 engine Byte * mmu;
 /* 6809 memory space */
 #ifdef USE_MMU