7 static const char *token
[] = {
8 "A", "B" , "C", "D", "E", "H", "L", "I", "R", "XH", "XL", "YH", "YL", "IX", "IY", "AF'",
9 "AF", "HL", "DE", "BC", "M", "NC", "NV", "NZ", "P", "PE", "PO", "V", "Z", "SP", "{ ", "ORG ",
10 "PHASE ", "UNPHASE", "AND ", "ADC ", "SBC ", "ADD ", "SUB ", "XOR ", "OR ", "CP ", "LD ", "IM ", "RST ", "EI", "DI", "EXX",
11 "EXA", "INF", "LDIR", "LDDR", "OTIR", "OTDR", "OUTI", "OUTD", "RETI", "RETN", "INIR", "INDR", "CPIR", "CPDR", "NEG", "CPD",
12 "CPI", "IND", "INI", "LDD", "LDI", "CCF", "CPL", "DAA", "HALT", "NOP", "RLA", "RLCA", "RRA", "RRCA", "SCF", "RLD",
13 "RRD", "EX ", "RET", "CALL ", "JP ", "PUSH ", "POP ", "INC ", "DEC ", "OUT ", "IN ", "DJNZ ", "JR ", "BIT ", "RLC ", "RRC ",
14 "RL ", "RR ", "SLA ", "SRA ", "SLI ", "SRL ", "RES ", "SET ", "EQU ", "BEGIN ", "END", "INCBIN ", "INCLUDE ", "DB ", "DEFB ", "DEFS ",
15 "DEFW ", "DS ", "DW ", "DOWN", "UP", "SYSTEM", "STOPKEY", "?", "?", "?", "?", "?", "?", "?", "?", "?"
19 #define GETBYTE(_dst) do { \
20 if (--buflen < 0) { free(buf); return -1; } \
25 #define PUTCH(_ch) do { \
26 uint8_t _xch = (uint8_t)(_ch); \
27 if (fwrite(&_xch, 1, 1, fo) != 1) { free(buf); return -1; } \
31 static int extract (FILE *fo
, FILE *fi
) {
36 if ((buf
= loadWholeFile(fi
, &buflen
)) == NULL
) return -1;
37 if ((buflen
-= sizeof(HOBHeader
)) < 0) { free(buf
); return -1; }
39 from
= buf
+sizeof(HOBHeader
);
44 if (len
== 0xFF) break;
49 for (int i
= 0; i
< len
; ++i
) {
50 if (buflen
< 1) break;
52 if (*from
== 0x0A && i
!= len
-1) {
58 for (int j
= 0; j
< spc
; ++j
) PUTCH(' ');
62 } else if (*from
< 0x80) {
65 const char *ptr
= token
[*from
-0x80];
66 while (*ptr
) PUTCH(*ptr
++);
69 if (buflen
< 1) break;
72 if (buflen
< 1) break;
73 if (*from
!= len
) break;
81 static const int detect (FILE *fi
, const char *fname
, const HOBHeader
*hdr
) {
82 if (!(hdr
->type
== 'a' && (hdr
->start
== 38667)) &&
83 !(hdr
->type
== 'a' && (hdr
->start
== 38821))) return 0;
88 ////////////////////////////////////////////////////////////////////////////////
89 static CvtMethods mtlist
;
92 CvtMethods
*cvt_masm (void) {
93 mtlist
.name
= "Masm assembler";
94 mtlist
.fmtname
= "masm";
95 mtlist
.extract
= extract
;
96 mtlist
.detect
= detect
;