# HG changeset patch # User Shinji KONO # Date 1531010074 -32400 # Node ID 807141dc5ee861904df8491b2e58176738454e84 # Parent bb6a2a9f59f155f3ce6ef6dd6c4b0f928f3b989d sysgo fork diff -r bb6a2a9f59f1 -r 807141dc5ee8 engine.c --- 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(;;){ diff -r bb6a2a9f59f1 -r 807141dc5ee8 os9/Makefile --- 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 diff -r bb6a2a9f59f1 -r 807141dc5ee8 os9/level2/boot.asm --- 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 diff -r bb6a2a9f59f1 -r 807141dc5ee8 v09.c --- 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; } diff -r bb6a2a9f59f1 -r 807141dc5ee8 v09.h --- 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