Mercurial > hg > Members > kono > os9 > sbc09
comparison io.c @ 11:ce7323f9b937
fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 06 Jul 2018 18:31:38 +0900 |
parents | 2a1338b218bf |
children | 111e5defb8ab |
comparison
equal
deleted
inserted
replaced
10:2a1338b218bf | 11:ce7323f9b937 |
---|---|
99 | 99 |
100 extern void hexadump( unsigned char *b, int l, int loc, int w); | 100 extern void hexadump( unsigned char *b, int l, int loc, int w); |
101 extern void disasm(int,int); | 101 extern void disasm(int,int); |
102 #ifdef USE_MMU | 102 #ifdef USE_MMU |
103 extern char *prog ; // for disass | 103 extern char *prog ; // for disass |
104 extern Byte * mem1(Byte *iphymem, Word adr, Byte *immu) ; | 104 extern Byte * mem0(Byte *iphymem, Word adr, Byte *immu) ; |
105 #endif | 105 #endif |
106 | 106 |
107 | 107 |
108 void do_timer(int,int); | 108 void do_timer(int,int); |
109 void do_disk(int,int); | 109 void do_disk(int,int); |
251 fwrite(xmbuf + 3, 1, 128, xfile); | 251 fwrite(xmbuf + 3, 1, 128, xfile); |
252 } | 252 } |
253 xidx = 0; | 253 xidx = 0; |
254 } | 254 } |
255 } | 255 } |
256 } else if (a >= 0x40+(IOPAGE&0xff)) { /* disk */ | |
257 do_disk(a,c); | |
258 } else if (a >= 0x30+(IOPAGE&0xff)) { /* timer */ | |
259 do_timer(a,c); | |
256 } else if (a >= 0x10+(IOPAGE&0xff)) { /* mmu */ | 260 } else if (a >= 0x10+(IOPAGE&0xff)) { /* mmu */ |
257 do_mmu(a,c); | 261 do_mmu(a,c); |
258 } else if (a >= 0x30+(IOPAGE&0xff)) { /* timer */ | |
259 do_timer(a,c); | |
260 } else if (a >= 0x40+(IOPAGE&0xff)) { /* disk */ | |
261 do_disk(a,c); | |
262 } | 262 } |
263 } | 263 } |
264 | 264 |
265 void restore_term(void) { | 265 void restore_term(void) { |
266 tcsetattr(0, TCSAFLUSH, &termsetting); | 266 tcsetattr(0, TCSAFLUSH, &termsetting); |
329 if (c&0) { | 329 if (c&0) { |
330 mmu = phymem+memsize-0x10000+0xffa0; | 330 mmu = phymem+memsize-0x10000+0xffa0; |
331 } else { | 331 } else { |
332 mmu = phymem+memsize-0x10000+0xffa8; | 332 mmu = phymem+memsize-0x10000+0xffa8; |
333 } | 333 } |
334 mem[(IOPAGE&0xff00)+a] = c; | |
335 } if (0x20+(IOPAGE&0xff) <= a && a <= 0x2f+(IOPAGE&0xff)) { | |
336 mem[(IOPAGE&0xff00)+a] = c; | |
337 } | 334 } |
338 | 335 mem[(IOPAGE&0xff00)+a] = c; // other register such as 0xffa0-0xffaf |
339 #endif | 336 #endif |
340 } | 337 } |
341 | 338 |
342 typedef struct bp { | 339 typedef struct bp { |
343 int address; | 340 int address; |
402 } | 399 } |
403 restart0: | 400 restart0: |
404 stkskip = 0; | 401 stkskip = 0; |
405 restore_term(); | 402 restore_term(); |
406 #ifdef USE_MMU | 403 #ifdef USE_MMU |
407 Byte *phyadr = mem1(phymem,pcreg,mmu); | 404 Byte *phyadr = mem0(phymem,pcreg,mmu); |
408 prog = (char*)phyadr - pcreg; | 405 prog = (char*)phyadr - pcreg; |
409 #endif | 406 #endif |
410 do_trace(stdout); | 407 do_trace(stdout); |
411 if (trskip>1) { // show trace and step | 408 if (trskip>1) { // show trace and step |
412 trskip--; | 409 trskip--; |
492 len = getarg(next,&next); | 489 len = getarg(next,&next); |
493 } | 490 } |
494 if (skip==2 && s[1]=='i') { | 491 if (skip==2 && s[1]=='i') { |
495 for(int i=0; len > 0 ; i+=16, len-=16) { | 492 for(int i=0; len > 0 ; i+=16, len-=16) { |
496 #ifdef USE_MMU | 493 #ifdef USE_MMU |
497 Byte *phyadr = mem1(phymem,adr+i,mmu); | 494 Byte *phyadr = mem0(phymem,adr+i,mmu); |
498 prog = (char*)phyadr - adr; | 495 prog = (char*)phyadr - adr; |
499 #endif | 496 #endif |
500 disasm(adr,adr+i-(len<16?16-len:0)); | 497 disasm(adr+i,adr+i+(len>16?16:len)); |
501 } | 498 } |
502 } else { | 499 } else { |
503 #ifdef USE_MMU | 500 #ifdef USE_MMU |
504 for(int i=0; len > 0 ; i+=16, len-=16) { | 501 for(int i=0; len > 0 ; i+=16, len-=16) { |
505 if (skip==2 && s[1]=='p') { | 502 if (skip==2 && s[1]=='p') { |
506 if (adr+i > memsize) goto restart; | 503 if (adr+i > memsize) goto restart; |
507 hexadump(phymem+adr+i,len>16?16:len,adr+i,16); | 504 hexadump(phymem+adr+i,len>16?16:len,adr+i,16); |
508 } else { | 505 } else { |
509 Byte *phyadr = mem1(phymem,adr+i,mmu); | 506 Byte *phyadr = mem0(phymem,adr+i,mmu); |
510 if (phyadr > phymem+memsize) goto restart; | 507 if (phyadr > phymem+memsize) goto restart; |
511 hexadump(phyadr,len>16?16:len,adr+i,16); | 508 hexadump(phyadr,len>16?16:len,adr+i,16); |
512 } | 509 } |
513 } | 510 } |
514 #else | 511 #else |