d07c40f37320a80d7c4f4e30f6b91cad4c11b39e
[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         while(mask > 0){
11             if((word & mask) == 0) {
12             *p++ = '0';
13         } else {
14             *p++ = '1';
15         }
16         mask = (mask >> 1);
17     }
18     *p = '\0';
19     return bit;
20 }
21
22 /* COMET IIのメモリを表示 */
23 void dumpmemory()
24 {
25     const int col = 16;
26     int i;
27     /* Header */
28     fprintf(stdout, "#%04X: adr :", PR);
29     for(i = 0; i < col; i++) {
30         fprintf(stdout, " %04X", i);
31     }
32     fprintf(stdout, "\n");
33     /* Memory */
34     for(i = 0; i < memsize; i++) {
35         if(i % col == 0) {
36             fprintf(stdout, "#%04X: %04X: ", PR, i);
37         }
38         fprintf(stdout, "%04X", memory[i]);
39         if(i > 0 && (i + 1) % col == 0) {
40             fprintf(stdout, "\n");
41         } else {
42             fprintf(stdout, " ");
43         }
44     }
45 }
46
47 /* COMET IIのレジスタを表示 */
48 void dspregister()
49 {
50     int i;
51     for(i = 0; i < REGSIZE; i++ ) {
52         if(logicalmode == true) {
53             fprintf(stdout, "#%04X: GR%d: %6d = #%04X = %s\n",
54                     PR, i, GR[i], GR[i], word2bit(GR[i]));
55         } else {
56             fprintf(stdout, "#%04X: GR%d: %6d = #%04X = %s\n",
57                     PR, i, (short)GR[i], GR[i], word2bit(GR[i]));
58         }
59     }
60     fprintf(stdout, "#%04X: SP:  %6d = #%04X = %s\n", PR, SP, SP, word2bit(SP));
61     fprintf(stdout, "#%04X: PR:  %6d = #%04X = %s\n", PR, PR, PR, word2bit(PR));
62     fprintf(stdout, "#%04X: FR (OF SF ZF): %s\n", PR, (word2bit(FR)+13));
63 }