changeset 30:7b1b25ff010a

disk io for mmu
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 12 Jul 2018 06:25:25 +0900
parents 3c14d647bb51
children bd2b07db8917
files io.c os9/Makefile os9/level2/boot.asm os9/level2/sysgo.asm os9/makerom.c
diffstat 5 files changed, 27 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/io.c	Wed Jul 11 21:16:06 2018 +0900
+++ b/io.c	Thu Jul 12 06:25:25 2018 +0900
@@ -302,12 +302,17 @@
    int lsn = (mem[IOPAGE+0x42]<<16) + (mem[IOPAGE+0x43]<<8) + mem[IOPAGE+0x44];
    int buf = (mem[IOPAGE+0x45]<<8) + mem[IOPAGE+0x46];
    if (drv > 1 || disk[drv]==0) goto error;
+#ifdef USE_MMU
+   Byte *phy = mem0(phymem,buf,mmu);
+#else
+   Byte *phy = &mem[buf];
+#endif
    if (c==0x81) {
       if (lseek(fileno(disk[drv]),lsn*SECSIZE,SEEK_SET)==-1) goto error;
-      if (read(fileno(disk[drv]),&mem[buf],SECSIZE)==-1) goto error;
+      if (read(fileno(disk[drv]),phy,SECSIZE)==-1) goto error;
    } else if (c==0x55) {
       if (lseek(fileno(disk[drv]),lsn*SECSIZE,SEEK_SET)==-1) goto error;
-      if (write(fileno(disk[drv]),&mem[buf],SECSIZE)==-1) goto error;
+      if (write(fileno(disk[drv]),phy,SECSIZE)==-1) goto error;
    }
    mem[IOPAGE+0x40] = 0;
    return;
--- a/os9/Makefile	Wed Jul 11 21:16:06 2018 +0900
+++ b/os9/Makefile	Thu Jul 12 06:25:25 2018 +0900
@@ -22,5 +22,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/d1 level2/mdir  level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
-# ./makerom -o os9lv2.rom -2  level2/Shell  level2/d1 level2/dir level2/mdir level2/ioman   level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
+	./makerom -o os9lv2.rom -2  level2/Shell  level2/dir level2/d1 level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
--- a/os9/level2/boot.asm	Wed Jul 11 21:16:06 2018 +0900
+++ b/os9/level2/boot.asm	Thu Jul 12 06:25:25 2018 +0900
@@ -43,6 +43,12 @@
          adca   #0
          clrb
          std   ,s       size return as d
+     ** OS9 lv2 use $a000-$dfff as a temporary page
+     ** demand at least that size ( ROM start at $ed00 )
+         cmpa   #$ed-$a0
+         bhi    ok
+         lda    #$ed-$a0
+ok
          os9    F$BtMem
          bcs    last
      **  u points the memory
--- a/os9/level2/sysgo.asm	Wed Jul 11 21:16:06 2018 +0900
+++ b/os9/level2/sysgo.asm	Thu Jul 12 06:25:25 2018 +0900
@@ -19,6 +19,11 @@
 edition  set   $01
 
          mod   eom,name,tylg,atrv,start,size
+u0000    rmb   32
+u0020    rmb   42
+u004A    rmb   33
+u006B    rmb   6
+u0071    rmb   655
 
 size     equ   .
 
--- a/os9/makerom.c	Wed Jul 11 21:16:06 2018 +0900
+++ b/os9/makerom.c	Thu Jul 12 06:25:25 2018 +0900
@@ -287,12 +287,17 @@
 #endif 
         pos += cur->size;
      }
-     while(pos++ & 0x1fff) fputc(0xff,romfile);
+     while(pos++ & 0xff) fputc(0xff,romfile);
  }
  if (level==1) 
      printf("boot rom from 0x%lx\n",0x10000-ftell(romfile)); 
- else
-     printf("boot rom from 0xc000 size 0x%lx\n",ftell(romfile)); 
+ else {
+     long size;
+     printf("boot rom from 0xc000 size 0x%lx\n",(size=ftell(romfile))); 
+     if (size > 0x4d00 + 0x2000) {
+         printf(" was too big. make it less than 0x6d00\n");
+     } 
+ }
  fclose(romfile);
  return 0;
 }