This source file includes following definitions.
- dumpmemory
- dspregister
- dsp_trace_dump
1 #include "exec.h"
2 #include "struct.h"
3 #include "disassemble.h"
4
5
6 void dumpmemory(WORD start, WORD end)
7 {
8 const WORD col = 0x10;
9 WORD mod = 0;
10
11 fprintf(stdout, "#%04X: adr :", sys->cpu->pr);
12 if(end > sys->memsize) {
13 end = sys->memsize;
14 }
15 for(int i = 0; i < sys->memsize && i < col; i++) {
16 fprintf(stdout, " %04X", i);
17 }
18 fprintf(stdout, "\n");
19 fprintf(stdout, " -------------------------------------------------------------------------------------\n");
20
21 for(int i = start; i < end; i++) {
22 mod = i % col;
23 if(mod == 0 || i == start) {
24 fprintf(stdout, "#%04X: %04X: ", sys->cpu->pr, i);
25 }
26 if(i == start) {
27 for(int j = 0; j < mod; j++) {
28 fprintf(stdout, " ");
29 }
30 }
31 fprintf(stdout, "%04X", sys->memory[i]);
32 if((i > 0 && (i + 1) % col == 0) || (i + 1) == end) {
33 fprintf(stdout, "\n");
34 } else {
35 fprintf(stdout, " ");
36 }
37 }
38 }
39
40 void dspregister()
41 {
42 char *sp = word2bit(sys->cpu->sp);
43 char *pr = word2bit(sys->cpu->pr);
44 char *fr = word2bit(sys->cpu->fr);
45 enum {
46 L3BIT = 16 - 3,
47 };
48 for(int i = 0; i < GRSIZE; i++ ) {
49 fprintf(stdout, "#%04X: GR%d: ", sys->cpu->pr, i);
50 print_dumpword(sys->cpu->gr[i], execmode.logical);
51 fprintf(stdout, "\n");
52 }
53 fprintf(stdout, "#%04X: SP: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->sp, sys->cpu->sp, sp);
54 fprintf(stdout, "#%04X: PR: %6d = #%04X = %s\n", sys->cpu->pr, sys->cpu->pr, sys->cpu->pr, pr);
55 fprintf(stdout, "#%04X: FR (OF SF ZF): %s\n", sys->cpu->pr, fr + L3BIT);
56 FREE(sp);
57 FREE(pr);
58 FREE(fr);
59 }
60
61 void dsp_trace_dump()
62 {
63 if(execptr->stop == false && (execmode.dump == true || execmode.trace == true || execmode.reverse == true)) {
64 if(sys->cpu->pr == execptr->start && execmode.reverse == true) {
65 disassemble_memory(sys->memory, execptr->start, (execptr->end)-1);
66 }
67 if(execmode.trace == true) {
68 fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr);
69 dspregister();
70 }
71 if(execmode.dump == true) {
72 fprintf(stdout, "#%04X: Memory::::\n", sys->cpu->pr);
73 dumpmemory(execmode.dump_start, execmode.dump_end);
74 }
75 if(execmode.reverse == true) {
76 fprintf(stdout, "#%04X: Disassemble::::", sys->cpu->pr);
77 disassemble_memory(sys->memory, sys->cpu->pr, sys->cpu->pr + code2cmdwordlen(sys->memory[sys->cpu->pr] & 0xFF00) - 1);
78 }
79 fprintf(stdout, "\n");
80 }
81 }