# HG changeset patch # User Shinji KONO # Date 1531344325 -32400 # Node ID 7b1b25ff010a081e9764c04c281b57ed9ab8e8a9 # Parent 3c14d647bb5162dfb5a52d96a5726897aab4029e disk io for mmu diff -r 3c14d647bb51 -r 7b1b25ff010a io.c --- 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; diff -r 3c14d647bb51 -r 7b1b25ff010a os9/Makefile --- 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 diff -r 3c14d647bb51 -r 7b1b25ff010a os9/level2/boot.asm --- 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 diff -r 3c14d647bb51 -r 7b1b25ff010a os9/level2/sysgo.asm --- 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 . diff -r 3c14d647bb51 -r 7b1b25ff010a os9/makerom.c --- 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; }