# HG changeset patch # User Shinji KONO # Date 1533978964 -32400 # Node ID 9b661787d5ed647f2ffddff9ff98de3569bbe771 # Parent 2e3d4b54ec2d19e0e71c51b32bb47b6bb4d06637 2Mbyte diff -r 2e3d4b54ec2d -r 9b661787d5ed src/engine.c --- a/src/engine.c Sat Aug 11 14:06:43 2018 +0900 +++ b/src/engine.c Sat Aug 11 18:16:04 2018 +0900 @@ -56,7 +56,7 @@ #else int paddr(Word adr, Byte *immu) { - if ((adr&0xfe00)==(IOPAGE&0xfe00)) return memsize-0x10000+adr; + if ((adr&0xfe00)==(IOPAGE&0xfe00)) return adr; return (immu[ (adr) >> 13 ] <<13 ) + ((adr) & 0x1fff ); } diff -r 2e3d4b54ec2d -r 9b661787d5ed src/os9/makerom.c --- a/src/os9/makerom.c Sat Aug 11 14:06:43 2018 +0900 +++ b/src/os9/makerom.c Sat Aug 11 18:16:04 2018 +0900 @@ -32,6 +32,9 @@ * 0xffd0 - 0xffef boot code * 0xfff0 - 0xffff intr vector * ... next few blocks as extended ROM + * lv2 6809 memory check routine destroys 0x200 on page 0x40 + * sta >-$6000,x + * avoid 0x200 * */ @@ -329,9 +332,11 @@ if ( cur->ioflag ==0) continue; bootsize += cur->size; } + bootsize += 0x300-2; // to avoid 0x200 bombing fputc(bootsize>>8,romfile); fputc(bootsize&0xff,romfile); pos += 2; + for( int i = 0; i<0x300-2; i++) fputc(0xff,romfile); for(struct os9module *cur = root.next; cur ; cur = cur->next ) { if ( cur->ioflag ==0) continue; cur->location = pos; diff -r 2e3d4b54ec2d -r 9b661787d5ed src/trace.c --- a/src/trace.c Sat Aug 11 14:06:43 2018 +0900 +++ b/src/trace.c Sat Aug 11 18:16:04 2018 +0900 @@ -142,7 +142,7 @@ } -void setbreak(int adr,int count) ; +void setbreak(int adr,int count, int page) ; int nexti(void); void do_escape(void) { @@ -225,20 +225,27 @@ stkskip = sreg + 2; attention = escape = 1; break; - case 'b': // set break point - if (s[1]) { - char *next; + case 'b': { // set break point + char *next = s; + int page = -1; + if (next[1]=='p') { + next++; + if (next[1]) + page = getarg(next+1,&next); + } + if (next[1]) { int count = 0; - int adr = getarg(s+1,&next); + int adr = getarg(next+1,&next); if (next[0]) { count = getarg(next,&next); } - setbreak(adr,count); + setbreak(adr,count,page); } else { - setbreak(pcreg,0); + setbreak(pcreg,0,page); } bpskip = -1; goto restart; + } case 'B': // break point list for(BPTR bp = breakpoint; bp ; bp = bp->next) { #ifdef USE_MMU @@ -291,8 +298,8 @@ if (next[0]) { adr = getarg(next,&next); #ifdef USE_MMU - adr -= adr &0xf; - // if (p=='p') adr -= adr&0x1fff; + if (d!='i') // disassembler may fail on page boundary + adr -= adr &0xf; #endif if (next[0]) { len = getarg(next,&next); @@ -432,14 +439,17 @@ /* * keep break point / watch point in a list */ -void setbreak(int adr, int count) { +void setbreak(int adr, int count, int page) { BPTR bp = calloc(1,sizeof(BP)); bp->count = count; bp->laddr = adr; bp->address = paddr(adr,mmu); #ifdef USE_MMU + if (page!=-1) { + bp->address = page*0x2000 + adr; + } if (bp->address >= memsize) { free(bp); return; } - bp->watch = *mem0(phymem,adr,mmu); + bp->watch = phymem[bp->address]; #else bp->watch = mem[adr]; #endif @@ -500,7 +510,7 @@ } break; } - if (ofs) setbreak(pcreg+ofs,-1); + if (ofs) setbreak(pcreg+ofs,-1,-1); return ofs; } diff -r 2e3d4b54ec2d -r 9b661787d5ed src/v09.c --- a/src/v09.c Sat Aug 11 14:06:43 2018 +0900 +++ b/src/v09.c Sat Aug 11 18:16:04 2018 +0900 @@ -103,26 +103,25 @@ * In case of Coco, there is no ROM (switched out after boot ) * 0x00000-0x0fdff normal mem * 0x0fe00-0x0ffff ram fixed address ram including io - * 0x10000-0x7ffff ram (512Kb memory current implementation) - * it should have 2MB memory - * 0x10000-0xfffff ram - * >0x100000 lapround + * 0x10000-0x1fffff ram (2MB memory ) + * >0x200000 lapround * * discless boot - * rom image will be copyied from 0xed00-0x1xxxx (all ram) - * boot copies 0x10000-0x1xxxx to os9's boot memory (ususally done by rel.asm ) - * after that 0x10000-0x1xxx will be all free + * rom image will be copyied from 0x7eed00-0x7fxxxx (all ram) + * boot copies 0x800000-0x8xxxx to os9's boot memory (ususally done by rel.asm ) + * (original system copies it from fd or hd) + * after that 0x800000-0x8xxxx will be all free */ - phymem = malloc(memsize + len - 0x2000); - rommemsize = memsize + len - 0x2000; - mem = phymem + memsize - 0x10000 ; + phymem = malloc(memsize ); + rommemsize = memsize ; + mem = phymem + 0x38*0x2000; mmu = &mem[0xffa0]; prog = (char*)mem; if (romstart==0x8000) { - // romstart = memsize - 0x10000 + 0xed00 ; romstart = memsize ; // full 512kb mem } - fread(mem+ 0xe000,len,1,image); + fread(mem+ 0xe000,len,1,image); + mem[0xff90] = 0; mem[0xffa7] = 0x3f; #else if (romstart==0x8000) { @@ -154,7 +153,7 @@ int i; int setterm = 1; timerirq = 2; // use FIRQ default - memsize = 512*1024; // full 2 mbute + memsize = 512*1024*4; // full 2 mbute escchar='\x1d'; tracelo=0;tracehi=0xffff; for(i=1;i