ラベル表にプログラム名(prog)を追加
[YACASL2.git] / src / dump.c
1 #include "casl2.h"
2
3 /* WORD値を2進数表記に変換 */
4 char *word2bit(const WORD word)
5 {
6     WORD mask = 0x8000;
7     char *bit, *p;
8     bit = malloc(16 + 1);
9     p = bit;
10     do {
11         *p++ = (word & mask) ? '1' : '0';
12     } while((mask >>= 1) > 0);
13     *p = '\0';
14     return bit;
15 }
16
17 /* COMET IIのメモリを表示 */
18 void dumpmemory()
19 {
20     const int col = 16;
21     int i;
22     /* Header */
23     fprintf(stdout, "#%04X: adr :", PR);
24     for(i = 0; i < col; i++) {
25         fprintf(stdout, " %04X", i);
26     }
27     fprintf(stdout, "\n");
28     /* Memory */
29     for(i = 0; i < memsize; i++) {
30         if(i % col == 0) {
31             fprintf(stdout, "#%04X: %04X: ", PR, i);
32         }
33         fprintf(stdout, "%04X", memory[i]);
34         if(i > 0 && (i + 1) % col == 0) {
35             fprintf(stdout, "\n");
36         } else {
37             fprintf(stdout, " ");
38         }
39     }
40 }
41
42 /* COMET IIのレジスタを表示 */
43 void dspregister()
44 {
45     int i;
46     for(i = 0; i < REGSIZE; i++ ) {
47         if(logicalmode == true) {
48             fprintf(stdout, "#%04X: GR%d: %6d = #%04X = %s\n",
49                     PR, i, GR[i], GR[i], word2bit(GR[i]));
50         } else {
51             fprintf(stdout, "#%04X: GR%d: %6d = #%04X = %s\n",
52                     PR, i, (short)GR[i], GR[i], word2bit(GR[i]));
53         }
54     }
55     fprintf(stdout, "#%04X: SP:  %6d = #%04X = %s\n", PR, SP, SP, word2bit(SP));
56     fprintf(stdout, "#%04X: PR:  %6d = #%04X = %s\n", PR, PR, PR, word2bit(PR));
57     fprintf(stdout, "#%04X: FR (OF SF ZF): %s\n", PR, (word2bit(FR)+13));
58 }