1 #include <stdio.h>
2
3 #define CF 0x100
4 #define HF 0x200
5 #define DF 0x400
6
7 int dab[0x800];
8
main(int ac,char ** av)9 int main(int ac, char **av)
10 {
11 int i, result;
12
13 for (i = 0; i < DF; i++) {
14 if (i & CF) {
15 if (i & 0x0f < 0x0a)
16 dab[i] = CF | ((i + 0x60) & 0xff);
17 else
18 dab[i] = CF | ((i + 0x66) & 0xff);
19 } else {
20 if (i & HF) {
21 if (i & 0xf0 < 0xa0)
22 dab[i] = ((i + 0x06) & 0xff);
23 else
24 dab[i] = CF | ((i + 0x66) & 0xff);
25 } else {
26 if ((i & 0xf0) < 0xa0 && (i & 0x0f) < 0x0a)
27 dab[i] = i & 0xff;
28 else if ((i & 0xf0) < 0x90 && (i & 0x0f) >= 0x0a)
29 dab[i] = ((i + 0x06) & 0xff);
30 else if ((i & 0xf0) >= 0xa0 && (i & 0x0f) < 0x0a)
31 dab[i] = CF | ((i + 0x60) & 0xff);
32 else if ((i & 0xf0) >= 0x90 && (i & 0x0f) >= 0x0a)
33 dab[i] = CF | ((i + 0x66) & 0xff);
34 else {
35 fprintf(stderr, "unhandled $%04x\n", i);
36 return 1;
37 }
38
39 }
40 }
41
42 if (i & CF) {
43 if (i & HF) {
44 dab[DF+i] = CF | ((i + 0x9a) & 0xff);
45 } else {
46 dab[DF+i] = CF | ((i + 0xa0) & 0xff);
47 }
48 } else {
49 if (i & HF) {
50 dab[DF+i] = CF | ((i + 0xfa) & 0xff);
51 } else {
52 dab[DF+i] = (i & 0xff);
53 }
54 }
55 }
56
57 log_cb(RETRO_LOG_DEBUG, LOGPRE "/************************************************ \n");
58 log_cb(RETRO_LOG_DEBUG, LOGPRE " * Result table for Z8000 DAB instruction \n");
59 log_cb(RETRO_LOG_DEBUG, LOGPRE " * \n");
60 log_cb(RETRO_LOG_DEBUG, LOGPRE " * bits description \n");
61 log_cb(RETRO_LOG_DEBUG, LOGPRE " * ---------------------------------------------- \n");
62 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 0..7 destination value \n");
63 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 8 carry flag before \n");
64 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 9 half carry flag before \n");
65 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 10 D flag (0 add/adc, 1 sub/sbc) \n");
66 log_cb(RETRO_LOG_DEBUG, LOGPRE " * \n");
67 log_cb(RETRO_LOG_DEBUG, LOGPRE " * result description \n");
68 log_cb(RETRO_LOG_DEBUG, LOGPRE " * ---------------------------------------------- \n");
69 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 0..7 result value \n");
70 log_cb(RETRO_LOG_DEBUG, LOGPRE " * 8 carry flag after \n");
71 log_cb(RETRO_LOG_DEBUG, LOGPRE " ************************************************/\n");
72 log_cb(RETRO_LOG_DEBUG, LOGPRE "static UINT16 Z8000_dab[0x800] = {\n");
73 for (i = 0; i < 0x800; i++) {
74 if ((i & 0x3ff) == 0) {
75 if (i & 0x400)
76 log_cb(RETRO_LOG_DEBUG, LOGPRE "\t/* sub/sbc results */\n");
77 else
78 log_cb(RETRO_LOG_DEBUG, LOGPRE "\t/* add/adc results */\n");
79 }
80 if ((i & 7) == 0) log_cb(RETRO_LOG_DEBUG, LOGPRE "\t");
81 log_cb(RETRO_LOG_DEBUG, LOGPRE "0x%03x,",dab[i]);
82 if ((i & 7) == 7) log_cb(RETRO_LOG_DEBUG, LOGPRE "\n");
83 }
84 log_cb(RETRO_LOG_DEBUG, LOGPRE "};\n");
85
86 return 0;
87 }
88