comparison trace.c @ 22:10e33568b38a

clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 09 Jul 2018 14:07:30 +0900
parents 1925cfa982fe
children 5217f23f2f9e
comparison
equal deleted inserted replaced
21:1925cfa982fe 22:10e33568b38a
98 ); 98 );
99 } 99 }
100 100
101 101
102 void setbreak(int adr,int count) ; 102 void setbreak(int adr,int count) ;
103 void nexti(void); 103 int nexti(void);
104 104
105 void do_escape(void) { 105 void do_escape(void) {
106 char s[80]; 106 char s[80];
107 int adr,skip; 107 int adr,skip;
108 if (bpskip) { // skip unbreak instruction 108 if (bpskip) { // skip unbreak instruction
109 bpskip--; 109 bpskip--;
110 int lpc = paddr(pcreg,mmu); 110 int lpc = paddr(pcreg,mmu);
111 BPTR *prev = &breakpoint; 111 BPTR *prev = &breakpoint;
112 for(BPTR b = breakpoint; b ; b=b->next, prev=prev->next) { 112 for(BPTR b = breakpoint; b ; prev=&b->next, b=b->next ) {
113 if (lpc==b->address) { 113 if (lpc==b->address) {
114 if (b->count==-1) { // temporaly break point 114 if (b->count==-1) { // temporaly break point
115 BPTR next = b->next; 115 BPTR next = b->next;
116 free(b); 116 free(b);
117 prev->next = next; 117 *prev = next;
118 goto restart0; 118 goto restart0;
119 } 119 }
120 if (b->count) b->count--; 120 if (b->count) b->count--;
121 if (b->count==0) { 121 if (b->count==0) {
122 goto restart0; 122 goto restart0;
189 goto restart; 189 goto restart;
190 case 'd': // delte break point list 190 case 'd': // delte break point list
191 if (s[1]) { 191 if (s[1]) {
192 int trskip = getarg(s+1,0); 192 int trskip = getarg(s+1,0);
193 BPTR *prev = &breakpoint; 193 BPTR *prev = &breakpoint;
194 for(BPTR bp = breakpoint; bp ; bp = bp->next) { 194 for(BPTR bp = breakpoint; bp ; prev=&bp->next, bp = bp->next) {
195 if (trskip-- == 0) { 195 if (trskip-- == 0) {
196 BPTR next = b->next; 196 BPTR next = bp->next;
197 free(bp); 197 free(bp);
198 prev->next = next; 198 *prev = next;
199 break; 199 break;
200 } 200 }
201 prev = &bp->next; 201 prev = &bp->next;
202 } 202 }
203 } 203 }
346 void setbreak(int adr, int count) { 346 void setbreak(int adr, int count) {
347 BPTR bp = calloc(1,sizeof(BP)); 347 BPTR bp = calloc(1,sizeof(BP));
348 bp->next = breakpoint; 348 bp->next = breakpoint;
349 breakpoint = bp; 349 breakpoint = bp;
350 bp->count = count; 350 bp->count = count;
351 if (s[1]) { 351 bp->laddr = adr;
352 char *next; 352 bp->address = paddr(adr,mmu);
353 bp->laddr = getarg(s+0,&next);
354 bp->address = paddr((bp->laddr,&next),mmu);
355 if (next[0]) {
356 bp->count = getarg(next,&next);
357 }
358 } else {
359 bp->laddr = pcreg;
360 bp->address = paddr(pcreg,mmu);
361 }
362 } 353 }
363 354
364 int nexti(void) { 355 int nexti(void) {
365 int op1 = phymem[mem1(pcreg)]; 356 #ifdef USE_MMU
357 int op1 = *mem0(phymem,pcreg,mmu);
358 int op2 = *mem0(phymem,pcreg+1,mmu);
359 #else
360 int op1 = mem[pcreg];
361 int op2 = mem[pcreg+1];
362 #endif
366 int ofs = 0; 363 int ofs = 0;
367 switch(op1) { 364 switch(op1) {
368 case 0x17: // LBSR 365 case 0x17: // LBSR
369 case 0xbd: // JSR extended 366 case 0xbd: // JSR extended
370 ofs=3; beak; 367 ofs=3; break;
371 case 0x10: // page2 368 case 0x10: // page2
372 { 369 {
373 int op2 = phymem[mem1(pcreg+1)];
374 if (op2==0x3f) { // os9 system call 370 if (op2==0x3f) { // os9 system call
375 ofs=3; beak; 371 ofs=3; break;
376 } 372 }
377 } 373 }
378 case 0x11: // page3 374 case 0x11: // page3
379 { 375 {
380 int op2 = phymem[mem1(pcreg+1)];
381 if (op2==0x3f) { // SWI3 376 if (op2==0x3f) { // SWI3
382 ofs=2; beak; 377 ofs=2; break;
383 } 378 }
384 } 379 }
385 case 0x3f: // SWI 380 case 0x3f: // SWI
386 ofs=1; beak; 381 ofs=1; break;
387 case 0x3c: // CWAI 382 case 0x3c: // CWAI
388 case 0x8d: // BSR 383 case 0x8d: // BSR
389 case 0x9d: // JSR direct 384 case 0x9d: // JSR direct
390 ofs=2; beak; 385 ofs=2; break;
391 case 0xad: // JSR index 386 case 0xad: // JSR index
392 { 387 {
393 int op2 = phymem[mem1(pcreg+1)];
394 if (op2<0x80) ofs = 2; // 5bit ofs 388 if (op2<0x80) ofs = 2; // 5bit ofs
395 else switch (op2&0xf) { 389 else switch (op2&0xf) {
396 case 8: case 0xc: 390 case 8: case 0xc:
397 ofs = 3; break; 391 ofs = 3; break;
398 case 9: case 0xd: case 0xf: 392 case 9: case 0xd: case 0xf:
401 ofs = 2; break; 395 ofs = 2; break;
402 } 396 }
403 } 397 }
404 break; 398 break;
405 } 399 }
406 if (ofs) setbreak(pc+ofs,-1); 400 if (ofs) setbreak(pcreg+ofs,-1);
407 retrun ofs; 401 return ofs;
408 } 402 }
409 403
410 404
411 405
412 406
413 407
414 408
415 409
416 410