# HG changeset patch # User Shinji KONO # Date 1530891444 -32400 # Node ID 111e5defb8ab8017834ce29e662e140cff98a9a6 # Parent ce7323f9b937ce9fd69e91a0f70a4debad20e706 boot is called, rti failed diff -r ce7323f9b937 -r 111e5defb8ab a09.c --- a/a09.c Fri Jul 06 18:31:38 2018 +0900 +++ b/a09.c Sat Jul 07 00:37:24 2018 +0900 @@ -933,11 +933,11 @@ break; case 4: case 6: offs=(unsigned short)operand-loccounter-codeptr-2; if(offs<-128||offs>=128||opsize==3||unknown||!certain) { - if((!unknown)&&opsize==2&&(offs<-128||offs>=128) ) - error|=16; - // offs--; - // opsize=3; - // postbyte++; + if((!unknown)&&opsize==2&&(offs<-128||offs>=128) ) + error|=16; + offs--; + opsize=3; + postbyte++; } putbyte(postbyte); if (debug) fprintf(stderr,"DEBUG: doaddress: mode=%d, opsize=%d, error=%d, postbyte=%02X, operand=%04X offs=%d\n",mode,opsize,error,postbyte,operand,offs); diff -r ce7323f9b937 -r 111e5defb8ab io.c --- a/io.c Fri Jul 06 18:31:38 2018 +0900 +++ b/io.c Sat Jul 07 00:37:24 2018 +0900 @@ -98,7 +98,7 @@ FILE *disk[] = {0,0}; extern void hexadump( unsigned char *b, int l, int loc, int w); -extern void disasm(int,int); +extern int disasm(int,int); #ifdef USE_MMU extern char *prog ; // for disass extern Byte * mem0(Byte *iphymem, Word adr, Byte *immu) ; @@ -489,12 +489,15 @@ len = getarg(next,&next); } if (skip==2 && s[1]=='i') { - for(int i=0; len > 0 ; i+=16, len-=16) { + Word end = adr + len; + while(adr < end) { #ifdef USE_MMU - Byte *phyadr = mem0(phymem,adr+i,mmu); - prog = (char*)phyadr - adr; + Byte *phyadr = mem0(phymem,adr,mmu); + prog = (char*)phyadr - adr ; + if (phyadr > phymem+memsize) goto restart; #endif - disasm(adr+i,adr+i+(len>16?16:len)); + int len = adr+16>8; adr[1] = vec&0xff; adr += 2; @@ -120,8 +121,8 @@ if (level == 1) top = 0xf800; // OS9p1 else { - top = 0x10000-(m->size+0x80); - rewrite_vector(m,top,m->mod+getword(m->mod+2),7); + top = 0x10000-(m->size+0x100); + rewrite_vector(m,m->size,m->mod+getword(m->mod+2),7); } } if (level==1 && !(( top+m->size < IOBASE ) || ( IOBASE+IOSIZE < top)) ) { @@ -155,7 +156,7 @@ if (*av[i]=='-') { if (av[i][1] =='2') { // for level 2 level = 2; - IOBASE = 0xff00; + IOBASE = LV2ROMEND; } else if (av[i][1] =='o') { outfile = av[i+1]; i += 1; @@ -202,8 +203,8 @@ fputc(0xff,romfile); } } else { - int pend = 0x10000-( cur->size +0x80); - for(; pos < pend ; pos++) { // os9p1 ends 0xff7f + int pend = 0x10000-( cur->size +0x100); + for(; pos < pend ; pos++) { // os9p1 ends 0xfeff fputc(0xff,romfile); } } diff -r ce7323f9b937 -r 111e5defb8ab os9/os9disass.c --- a/os9/os9disass.c Fri Jul 06 18:31:38 2018 +0900 +++ b/os9/os9disass.c Sat Jul 07 00:37:24 2018 +0900 @@ -1591,7 +1591,7 @@ return ""; } -void disasm(start, end) +int disasm(start, end) int start; int end; { @@ -1615,6 +1615,7 @@ pc += (*optable[code].display)(&optable[code], code, pc, " "); fprintf(fp,"\n"); } + return pc; } #ifndef NO_MAIN diff -r ce7323f9b937 -r 111e5defb8ab v09.c --- a/v09.c Fri Jul 06 18:31:38 2018 +0900 +++ b/v09.c Sat Jul 07 00:37:24 2018 +0900 @@ -87,6 +87,7 @@ mem = phymem + memsize - 0x10000 ; mmu = mem + 0xffa0; romstart = memsize - 0x2000; + memsize = memsize + len - 0x2000; #else romstart = 0x10000 - len; #endif