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