Annotation of uae/debug.cc, revision 1.1.1.1

1.1       root        1:  /* 
                      2:   * UAE - The Unusable Amiga Emulator
                      3:   * 
                      4:   * debugger v0.0
                      5:   * 
                      6:   * (c) 1995 Bernd Schmidt
                      7:   * 
                      8:   */
                      9: 
                     10: #include <ctype.h>
                     11: #include <iostream.h>
                     12: #include <iomanip.h>
                     13: 
                     14: #include "amiga.h"
                     15: #include "memory.h"
                     16: #include "cpu.h"
                     17: #include "custom.h"
                     18: #include "cia.h"
                     19: 
                     20: void ignore_ws(char *&c)
                     21: {
                     22:   while (isspace(*c)) c++;
                     23: }
                     24: 
                     25: ULONG readhex(char *&c)
                     26: {
                     27:   ULONG val = 0;
                     28:   char nc;
                     29: 
                     30:   ignore_ws(c);
                     31: 
                     32:   while (isxdigit(nc = *c++)){
                     33:     val *= 16;
                     34:     nc = toupper(nc);
                     35:     if (isdigit(nc)) {
                     36:       val += nc - '0';
                     37:     } else {
                     38:       val += nc - 'A' + 10;
                     39:     }
                     40:   }
                     41:   return val;
                     42: }
                     43: 
                     44: char getchar(char *&c)
                     45: {
                     46:   ignore_ws(c);
                     47:   return *c++;
                     48: }
                     49: 
                     50: bool more_params(char *&c)
                     51: {
                     52:   ignore_ws(c);
                     53:   return (*c) != 0;
                     54: }
                     55: 
                     56: void dumpmem(CPTR addr,CPTR &nxmem,int lines)
                     57: {
                     58:   for (;lines--;){
                     59:     cout << hex << setfill('0') << setw(8) << addr << " ";
                     60:     for(int i=0; i< 16; i++) {
                     61:       cout << setw(4) << mem.get_word(addr) << " "; addr += 2;
                     62:     }
                     63:     cout << "\n";
                     64:   }
                     65:   nxmem = addr;
                     66: }
                     67: 
                     68: void debug()
                     69: {
                     70:   char input[80],c;
                     71:   CPTR nextpc,nxdis,nxmem;
                     72: 
                     73:   cout << "debugging...\n";
                     74:   MC68000_dumpstate(nextpc);
                     75:   nxdis = nextpc; nxmem = 0;
                     76:   for(;;){
                     77:     char cmd,*inptr;
                     78:     cout << ">";
                     79:     cin.get(input,80,'\n');
                     80:     cin.get(c);
                     81:     inptr = input;
                     82:     cmd = getchar(inptr);
                     83:     switch(cmd){
                     84:     case 'q': 
                     85:       return;
                     86:     case 'c':
                     87:       dumpcia(); dumpcustom(); break;
                     88:     case 'r':
                     89:       MC68000_dumpstate(nextpc); break;
                     90:     case 'd': 
                     91:       {
                     92:        ULONG daddr;
                     93:        int count;
                     94:        
                     95:        if (more_params(inptr)) daddr = readhex(inptr); else daddr = nxdis;
                     96:        if (more_params(inptr)) count = readhex(inptr); else count = 10;
                     97:        MC68000_disasm(daddr,nxdis,count);
                     98:       }
                     99:       break;
                    100:     case 't': 
                    101:       MC68000_step(); MC68000_dumpstate(nextpc); break;
                    102:     case 'z': 
                    103:       MC68000_skip(nextpc); MC68000_dumpstate(nextpc); nxdis = nextpc; break;
                    104:     case 'f': 
                    105:       MC68000_skip(readhex(inptr)); MC68000_dumpstate(nextpc); break;
                    106:     case 'm':
                    107:       {
                    108:        ULONG maddr; int lines;
                    109:        if (more_params(inptr)) maddr = readhex(inptr); else maddr = nxmem;
                    110:        if (more_params(inptr)) lines = readhex(inptr); else lines = 16;
                    111:        dumpmem(maddr,nxmem,lines);
                    112:       }
                    113:       break;
                    114:     }
                    115:   }
                    116: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.