diff --git a/CPM Tools/README.md b/CPM Tools/README.md index 092ba9e..2fd604b 100644 --- a/CPM Tools/README.md +++ b/CPM Tools/README.md @@ -48,6 +48,36 @@ This assembler can only produce Intel HEX files for object code, therefore you m > [!TIP] > Don't forget to rename the source files from .ASM to .A86. +## TRANS86 +This is a reconstruction of the SCP Z80 to 8086 Translator shipped together with ASM86. Like ASM86, original copies are long gone and this is the 8086 version from 86-DOS 0.11 translated back to Z80. + +TRANS86 takes the following parameters: [x:]TRANS86 [y:]name.ext + +where + + + + + + + + + + + + + + + + + + + + +
xis an optional disk drive specifier indicating the location of the TRANS86.COM file. This parameter is required only if the COM file is NOT located on either drive A or the current drive. Legal values are A, B, C, and D.
yis an optional disk drive specifier indicating the location of the Z80 source file. This paramter may be omitted if the source file is on the current drive.
name.extis the name of the Z80 assembly language source file, with the 3-letter extension.
+ +The output 8086 source file will have the same name as the Z80 source file, but with the extension .A86. + ## DOSGEN This is a tool I wrote to copy 86-DOS system files to the system area of IBM 8" SSSD floppies. It works in a similar way to CP/M's SYSGEN utility. diff --git a/CPM Tools/TRANS86.COM b/CPM Tools/TRANS86.COM new file mode 100644 index 0000000..55a9320 Binary files /dev/null and b/CPM Tools/TRANS86.COM differ diff --git a/CPM Tools/TRANS86.Z80 b/CPM Tools/TRANS86.Z80 new file mode 100644 index 0000000..d8c4d49 --- /dev/null +++ b/CPM Tools/TRANS86.Z80 @@ -0,0 +1,1126 @@ +; Z80 to 8086 Translator version 2.0 +; Runs on the Z80 under CP/M +; by Tim Paterson +; + ORG 100H +EOF: EQU 1AH ;End of file +EOL: EQU 0DH +FCB: EQU 5CH +SYSTEM: EQU 5 +OPEN: EQU 15 +CLOSE: EQU 16 +SETDMA: EQU 26 +CREATE: EQU 22 +DELETE: EQU 19 +READ: EQU 20 +WRITE: EQU 21 +PRNBUF: EQU 9 + LD SP,STACK + LD DE,HEADER + LD C,9 + CALL SYSTEM + LD HL,FCB+12 + XOR A + LD B,4 +CLRFCB: + LD (HL),A + INC HL + DJNZ CLRFCB + LD (FCB+32),A + LD HL,FCB + LD DE,PUTFCB + LD BC,16 + LDIR + LD (PUTFCB+32),A + LD HL,'A'+3800H ;"A8" + LD (PUTFCB+9),HL + LD A,'6' + LD (PUTFCB+11),A + LD DE,FCB + LD C,OPEN + CALL SYSTEM + INC A + LD DE,NOFILE + JR Z,ABORTJ + LD DE,PUTFCB + LD C,DELETE + CALL SYSTEM + LD DE,PUTFCB + LD C,CREATE + CALL SYSTEM + INC A + LD DE,NOROOM +ABORTJ: + JR Z,ABORT + LD DE,PUTFCB + LD C,OPEN + CALL SYSTEM + LD HL,PUTBUF + LD (PUTPT),HL + LD HL,GETBUF+80H + LD (GETPT),HL +TRANLN: + XOR A + LD (OP1),A + LD (OP2),A + LD HL,OPCODE + CALL LOAD + LD HL,OP1 + CALL GETOP + LD (HL),0 + LD HL,OP2 + CALL GETOP +DOLIN: + LD (HL),0 + CALL FINDOP +ENLIN: + LD SP,STACK + LD A,(CHAR) + CP ';' + JR NZ,NOCOM + LD A,9 + CALL PUTCH + LD A,';' +NOCOM: + CALL PUTCH +PUTLIN: + CP EOF + JR Z,END + CALL GETCH + CALL PUTCH + CP 10 + JR NZ,PUTLIN + JR TRANLN +END: + LD B,127 + LD A,1AH +FILL: + CALL PUTCH + DJNZ FILL + LD DE,PUTFCB + LD C,CLOSE + CALL SYSTEM + LD DE,ENDMES +ABORT: + LD C,PRNBUF + CALL SYSTEM + JP 0 +DELIM: + CALL GETCH +DELCHK: + CP EOL + JR Z,DOLIN + CP EOF + JR Z,DOLIN + CP ';' + JR Z,DOLIN + CP ' ' + RET Z + CP ':' + RET Z + CP ',' + RET Z + CP 9 + RET +HEX: + AND 0FH + ADD A,90H + DAA + ADC A,40H + DAA +PUTCH: + PUSH HL + PUSH DE + PUSH BC + PUSH AF + AND 7FH + LD HL,(PUTPT) + LD (HL),A + INC HL + LD (PUTPT),HL + PUSH DE + PUSH HL + LD DE,PUTBUF+80H + OR A + SBC HL,DE + POP HL + POP DE + JR NZ,POPRET + LD DE,PUTBUF + LD (PUTPT),DE + LD C,SETDMA + CALL SYSTEM + LD DE,PUTFCB + LD C,WRITE + CALL SYSTEM + OR A + LD DE,WRTERR + JR NZ,ABORT +POPRET: + POP AF +NOTAF: + POP BC + POP DE + POP HL + RET +; +; Get character from source file. +; +GETCH: + PUSH HL + PUSH DE + PUSH BC + LD HL,(GETPT) ; Get buffer pointer. + PUSH DE + PUSH HL + LD DE,GETBUF+80H + OR A + SBC HL,DE ; Past end-of-buffer? + POP HL + POP DE + JR NZ,GETIT ; Jump if not. + LD DE,GETBUF ; Set `DMA address'. + LD C,SETDMA + CALL SYSTEM + LD DE,FCB ; Read the next record from source file. + LD C,READ + CALL SYSTEM + OR A ; Entire record read OK? + LD A,EOF ; Force end-of-file character in case + JR NZ,TESEND ; there is nothing in the record. + LD HL,GETBUF ; Reset buffer pointer. +GETIT: + LD A,(HL) ; Get next character from buffer. + INC HL ; Point to next character. + LD (GETPT),HL ; Save new pointer. +TESEND: + LD (CHAR),A + JR NOTAF ; Pop registers and return. +LOAD: + CALL DELIM + JR Z,LOADOP +EATLAB: + CALL PUTCH + CALL DELIM + JR NZ,EATLAB +ENLAB: + LD A,':' + CALL PUTCH +LOADOP: + LD HL,OPCODE +EATEM: + CALL DELIM + JR Z,EATEM +LOADLP: + CALL IDCHK + JP C,OPERR + LD (HL),A + INC HL + CALL DELIM + JR NZ,LOADLP + LD (HL),0 + CP ':' + RET NZ + LD HL,OPCODE + CALL TRANS + JR ENLAB +GETOP: + XOR A + EX AF,AF' +GETLP: + CALL DELIM + JR Z,GETLP +OPCHAR: + CP '(' + JR NZ,NOTLEF + EX AF,AF' + INC A + EX AF,AF' + LD (HL),'[' + JR NEXCH +NOTLEF: + CP ')' + JR NZ,NOTRIT + EX AF,AF' + DEC A + EX AF,AF' + LD (HL),']' + JR NEXCH +NOTRIT: + LD (HL),A + CP '''' + JR Z,EATQUO + CALL IDCHK + JR NC,GETID +NEXCH: + INC HL + CALL GETCH +IDRET: + CALL DELCHK + JR NZ,OPCHAR + CP ' ' + JR Z,OPCHAR + RET +EATQUO: + INC HL + CALL GETCH + LD (HL),A + CP ';' + CALL NZ,DELCHK + CP '''' + JR NZ,EATQUO + JR NEXCH +IDCHK: + CP '0' + RET C + CP '9'+1 + CCF + RET NC + CP 40H + RET C + AND 5FH + CP 'A' + RET C + CP 'Z'+1 + CCF + RET +GETID: + LD (HL),A + LD B,1 +LODID: + INC HL + CALL GETCH + CALL IDCHK + JR C,RWCHK + LD (HL),A + INC B + JR LODID +RWCHK: + PUSH AF + PUSH HL + DEC HL + DEC B + LD E,B + JR Z,LOOKRW + LD E,(HL) + DEC HL + DJNZ NORW +LOOKRW: + LD A,(HL) + LD D,A + PUSH HL + LD HL,RWTAB + LD BC,LENRW +RWLK: + CPIR + JR NZ,NOTRW + PUSH HL + PUSH BC + LD BC,LENRW-1 + ADD HL,BC + LD A,(HL) + POP BC + POP HL + CP E + JR Z,HAVRW + LD A,C + OR A + LD A,D + JR NZ,RWLK +NOTRW: + POP HL +NORW: + POP HL +ENDRW: + POP AF + JR IDRET +HAVRW: + POP HL + INC C + LD (HL),C + INC HL + POP DE + PUSH HL + LD A,C + LD HL,IXSI + CP RSI + JR Z,IXIY + LD HL,IYDI + CP RDI + JR NZ,NORW +IXIY: + EX AF,AF' + JR Z,NOTENC + EX AF,AF' + CALL OUTSTR + JR NORW +NOTENC: + EX AF,AF' + POP HL + DEC HL + LD (HL),'[' + INC HL + ADD A,RIX-1 + LD (HL),A + INC HL + LD (HL),']' + INC HL + JR ENDRW + RET +FINDOP: + LD HL,OPCODE + LD BC,5 + XOR A + CPIR + JR NZ,OPERR + LD A,4 + SUB C + RET Z + DEC A + JR Z,OPERR + LD C,A + DEC HL + DEC HL + SET 7,(HL) + LD A,(OPCODE) + SUB 'A' + JR C,OPERR + ADD A,A + LD E,A + LD D,0 + LD HL,OPTAB + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL + LD A,9 + CALL PUTCH +LOOKOP: + LD A,(HL) + OR A + JR Z,OPERR + LD DE,OPCODE+1 + LD B,C +LOOKLP: + LD A,(DE) + CP (HL) + JR NZ,NEXOP + INC DE + INC HL + DJNZ LOOKLP + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH DE + LD E,(HL) + INC HL + LD D,(HL) + LD H,D + LD L,E + POP DE + PUSH DE + POP IX + JP (IX) +NEXOP: + BIT 7,(HL) + INC HL + JR Z,NEXOP + LD DE,4 + ADD HL,DE + JR LOOKOP +OPERR: + LD HL,OPCODE + CALL OUTSTR + CALL TWOOPS + LD HL,OPCDER + CALL OUTSTR + JP ENLIN +LD: + CALL OUTSTR + LD HL,OP1 + LD DE,OP2+1 + CALL LCHECK + JP Z,LDAX + EX DE,HL + DEC HL + INC DE + CALL LCHECK + JP Z,STAX +;If immediate move, check for byte memory reference + LD A,(OP1) + CP '[' ;Memory reference? + JR NZ,TWOOPS + LD A,(OP1+1) ;Referencing IX as a word? + CP RIX + JR Z,TWOOPS + CP RIY + JR Z,TWOOPS + LD A,(OP2) + CP 20H ;Could be immediate? + LD A,9 + CALL NC,BFLAG ;Add "B," + CALL TRAN1 + JR TRNOP2 +TWOOPS: + CALL TRNOP1 +TRNOP2: + LD A,',' +TRAN2: + LD HL,OP2 +PTRANS: + CALL PUTCH +TRANS: + LD A,(HL) + INC HL + OR A + RET Z + CALL TRNTOK + JR TRANS +LCHECK: + LD A,(HL) + CP RAL + RET NZ + LD A,(DE) + CP RCX + RET Z + CP RDX + RET + +ONEOP: + CALL OUTSTR + +TRNOP1: + LD A,9 +TRAN1: + LD HL,OP1 + JR PTRANS +IN: + LD A,(OP1) + CP RAL + EX DE,HL + LD HL,OP2 + JR Z,GETPORT + LD HL,SAVEAX + CALL OUTSTR + CALL OUTSTR + LD HL,OP2 + CALL GETPORT + LD HL,MOV0 + CALL ONEOP + LD A,',' + CALL PUTCH + LD A,RAL + CALL TRNTOK +IODONE: + LD HL,RESTAX + JP OUTSTR +OUT: + LD A,(OP2) + EX DE,HL + LD HL,OP1 + CP RAL + JR Z,GETOUT + LD HL,SAVEAX + CALL OUTSTR + LD HL,MOVAL + CALL OUTSTR + CALL TRNOP2 + LD HL,CRLFTB + CALL OUTSTR + LD HL,OP1 + CALL GETOUT + JR IODONE +GETPORT: + LD A,(HL) + CP '[' + JR NZ,NOBRAK + INC HL + PUSH HL + LD BC,80 + LD A,']' + CPIR + DEC HL + LD (HL),0 + POP HL +NOBRAK: + LD A,(HL) + CP RGCL + JR NZ,FIXPOR + LD HL,IO1 + CALL OUTSTR + EX DE,HL + CALL OUTSTR + LD A,RDX + CALL TRNTOK + LD HL,IO2 + JR OUTSTR +GETOUT: + CALL GETPORT + RET NC + LD HL,BADIO + JR OUTSTR +FIXPOR: + EX DE,HL + CALL OUTSTR + EX DE,HL + JP TRANS +LDAX: + LD HL,LDAX1 +LSAX: + CALL OUTSTR + LD A,(DE) + CALL TRNTOK + JR OUTSTR +STAX: + LD HL,STAX1 + JR LSAX +TRNTOK: + CP ' ' + JP NC,PUTCH + PUSH HL + PUSH BC + LD C,A + LD B,0 + LD HL,TOKTAB-2 + ADD HL,BC + ADD HL,BC + LD A,(HL) + CALL PUTCH + INC HL + LD A,(HL) + POP BC + POP HL + OR A + RET Z + JP PUTCH +PUSH: + LD DE,PUSHAF + JR AFCHK +POP: + LD DE,POPAF +AFCHK: + LD A,(OP1) + CP RAX + JP NZ,ONEOP + EX DE,HL +OUTSTR: + LD A,(HL) + OR A + CALL Z,NEWOP + CALL PUTCH + INC HL + ADD A,A + JR NC,OUTSTR + RET +NEWOP: + LD A,13 + CALL PUTCH + LD A,10 + CALL PUTCH + LD A,9 + RET +LDDR: + CALL OUTSTR + LD HL,BLMOVE + JR OUTSTR +CPDR: + CALL OUTSTR + LD HL,CMPREP + JR OUTSTR +ADD: + LD A,(OP1) + CP RBX + JR Z,DAD +ARITH: + CALL OUTSTR + LD A,(OP2) + OR A + JP NZ,TWOOPS + LD A,9 + CALL PUTCH + LD A,RAL + CALL TRNTOK + LD A,',' + JP TRAN1 +ACCUM: + CALL OUTSTR + LD A,9 + CALL PUTCH + LD A,RAL + JP TRNTOK + JP ONEOP + +DAD: + LD HL,DAD1 + CALL OUTSTR + CALL TWOOPS + LD HL,DAD2 + JR OUTSTR + +INCDEC: + LD A,(OP1) + CP RCX+1 ;16-bit? + JP NC,ONEOP + LD HL,LAHF + CALL OUTSTR + EX DE,HL + LD HL,OPCODE-1 + CALL ONEOP + EX DE,HL + JR OUTSTR +JUMP: + LD A,(OP1) + CP '[' + JR NZ,DIRECT + LD A,(OP1+1) + LD (OP1),A + XOR A + LD (OP1+1),A +DIRECT: + LD A,(OP2) + OR A + JP Z,ONEOP + CALL FIXCON + LD HL,OP2 +OUTCON: + LD B,A + LD A,'J' + CALL PUTCH + LD A,B + CALL TRNTOK + LD A,9 + CALL PTRANS + LD A,B + CP ODDPAR + LD HL,WARNPA + JP Z,OUTSTR + CP EVEPAR + JP Z,OUTSTR + RET +FIXCON: + LD A,(OP1) + CP RGCL + RET NZ + LD A,CY + RET +RETURN: + LD A,(OP1) + OR A + JP Z,OUTSTR + LD HL,'R'+4500H ;"RE" + LD (OP2),HL + LD HL,'T' + LD (OP2+2),HL + JR DIRECT + JP ONEOP +DOCALL: + LD A,(OP2) + OR A + JP Z,ONEOP + CALL FIXCON + DEC A + XOR 1 + INC A + LD HL,LABEL + CALL OUTCON + LD HL,OPCODE-1 + CALL OUTSTR + LD A,(OP2) + OR A + LD A,9 + LD HL,OP2 + CALL NZ,PTRANS + LD HL,CRLF + CALL OUTSTR + CALL TRANS + CALL OUTSTR + LD HL,LABEL+4 +NEXLAB: + INC (HL) + LD A,(HL) + CP '9'+1 + RET NZ + LD (HL),'0' + DEC HL + JR NEXLAB +EX: + LD A,(OP1) + CP RAX + JP Z,OUTSTR + LD A,(OP1+1) + CP STP + JR Z,XTHL + LD HL,XCHG + CALL OUTSTR + JP TWOOPS +XTHL: + LD HL,XTHL1 + CALL OUTSTR + CALL TRNOP2 + LD HL,XTHL2 + JP OUTSTR +PSEUDO: + CALL ONEOP + LD A,(OP2) + OR A + RET Z + JP TRNOP2 + RET +BITSET: + LD C,0 + JR SETRES +RES: + LD C,-1 +SETRES: + CALL OUTSTR + PUSH HL + LD A,(OP2) + CP '[' + LD A,9 + CALL Z,BFLAG + CALL TRAN2 + LD A,',' + CALL PUTCH + CALL GETBIT + LD HL,BITERR + CALL C,OUTSTR + POP HL + JP OUTSTR + +BFLAG: + CALL PUTCH + LD A,'B' + CALL PUTCH + LD A,',' + RET + +GETBIT: + LD A,(OP1+1) + OR A + SCF + RET NZ + LD A,(OP1) + SUB '0' + RET C + CP 8 + CCF + RET C + LD B,A + INC B + XOR A + SCF +SHFT: + RLA + DJNZ SHFT + XOR C + LD B,A + LD A,'0' + CALL PUTCH + LD A,B + RRA + RRA + RRA + RRA + CALL HEX + LD A,B + CALL HEX + LD A,'H' + JP PUTCH +OPTAB: + DW AOPS,BOPS,COPS,DOPS,EOPS + DW FOPS,GOPS,HOPS,IOPS,JOPS + DW KOPS,LOPS,MOPS,NOPS,OOPS + DW POPS,QOPS,ROPS,SOPS,TOPS + DW UOPS,VOPS,WOPS,XOPS,YOPS + DW ZOPS +AOPS: + DM 'DD' + DW ADD,OPCODE + DM 'DC' + DW ARITH,OPCODE + DM 'ND' + DW ARITH,OPCODE + DB 0 +BOPS: + DM 'IT' + DW BITSET,TESBIT + DB 0 +COPS: + DM 'ALL' + DW DOCALL,OPCODE + DM 'P' + DW ARITH,CMP + DM 'PL' + DW ACCUM,NOT + DM 'PIR' + DW OUTSTR,CPIR + DM 'PDR' + DW CPDR,DOWN + DM 'CF' + DW OUTSTR,CMC + DB 0 +DOPS: + DM 'EC' + DW INCDEC,OPCODE + DM 'JNZ' + DW ONEOP,DJNZ + DM 'AA' + DW OUTSTR,OPCODE + DM 'I' + DW OUTSTR,OPCODE + DM 'W' + DW PSEUDO,OPCODE + DM 'B' + DW PSEUDO,OPCODE + DM 'M' + DW PSEUDO,OPCODE + DM 'S' + DW ONEOP,OPCODE + DB 0 +EOPS: + DM 'X' + DW EX,EXAF + DM 'I' + DW OUTSTR,OPCODE + DM 'XX' + DW OUTSTR,EXX + DM 'QU' + DW ONEOP,OPCODE + DM 'NDIF' + DW OUTSTR,OPCODE + DB 0 +FOPS: + DB 0 +GOPS: + DB 0 +HOPS: + DM 'ALT' + DW OUTSTR,HLT + DB 0 +IOPS: + DM 'NC' + DW INCDEC,OPCODE + DM 'N' + DW IN,INB + DM 'F' + DW ONEOP,OPCODE + DB 0 +JOPS: + DM 'R' + DW JUMP,JR + DM 'P' + DW JUMP,JMP + DB 0 +KOPS: + DB 0 +LOPS: + DM 'D' + DW LD,MOV + DM 'DIR' + DW OUTSTR,UP + DM 'DDR' + DW LDDR,DOWN + DB 0 +MOPS: + DB 0 +NOPS: + DM 'EG' + DW ACCUM,OPCODE + DB 0 +OOPS: + DM 'R' + DW ARITH,OPCODE + DM 'UT' + DW OUT,OUTB + DM 'RG' + DW ONEOP,OPCODE + DB 0 +POPS: + DM 'OP' + DW POP,OPCODE + DM 'USH' + DW PUSH,OPCODE + DB 0 +QOPS: + DB 0 +ROPS: + DM 'ET' + DW RETURN,OPCODE + DM 'LA' + DW ACCUM,RCL + DM 'RA' + DW ACCUM,RCR + DM 'LCA' + DW ACCUM,ROL + DM 'RCA' + DW ACCUM,ROR + DM 'L' + DW ONEOP,RCL + DM 'R' + DW ONEOP,RCR + DM 'LC' + DW ONEOP,ROL + DM 'RC' + DW ONEOP,ROR + DM 'ES' + DW RES,RESBIT + DM 'ETI' + DW OUTSTR,IRET + DM 'ETN' + DW OUTSTR,IRET + DM 'ST' + DW ONEOP,CALL + DB 0 +SOPS: + DM 'UB' + DW ARITH,OPCODE + DM 'BC' + DW ARITH,SBB + DM 'LA' + DW ONEOP,SAL + DM 'RA' + DW ONEOP,SAR + DM 'RL' + DW ONEOP,SHR + DM 'CF' + DW OUTSTR,STC + DM 'ET' + DW BITSET,SETBIT + DB 0 +TOPS: + DB 0 +UOPS: + DB 0 +VOPS: + DB 0 +WOPS: + DB 0 +XOPS: + DM 'OR' + DW ARITH,OPCODE + DB 0 +YOPS: + DB 0 +ZOPS: + DB 0 +LDAX1: DM 9,'SI,' + DM 0,'LODB' +STAX1: DM 9,'DI,' + DM 0,'STOB' +PUSHAF: DB 'LAHF',0,'XCHG',9,'AH,AL',0,'PUSH',9,'AX',0 + DM 'XCHG',9,'AH,AL' +POPAF: DM 'POP',9,'AX',0,'XCHG',9,'AH,AL',0,'SAHF' +DOWN: DM 'DOWN' +UP: DB 'UP' +BLMOVE: DB 0,'MOV',9,'SI,BX',0,'MOV',9,'DI,DX' + DB 0,'REP',0,'MOVB',0,'MOV',9,'DX,DI' + DM 0,'MOV',9,'BX,SI' +CPIR: DB 'UP' +CMPREP: DB 0,'MOV',9,'DI,BX',0,'REPNZ',0,'SCAB' + DM 0,'MOV',9,'BX,DI' +DAD1: DM 'LAHF',0,'ADD' +DAD2: DM 0,'RCR',9,'SI',0,'SAHF',0,'RCL',9,'SI' +LAHF: DM 'LAHF' + DM 0,'SAHF' +DJNZ: DB 'DEC',9,'CH',13,10 + DB '; *** WARNING: DJNZ does not affect flags - DEC does.',0 + DM 'JNZ' +WARNPA: DM 13,10,'; *** WARNING: Parity flag not always same as Z80.' +IO1: DB 'MOV',9,'DI,DX',0,'MOV',9,'DL,CL',0 + DM 'XOR',9,'DH,DH',13,10,9 +IO2: DM 0,'MOV',9,'DX,DI' +BADIO: DM 13,10,'; *** WARNING: Flags not same as Z80.' +BITERR: DM 13,10,' *** ERROR: Cannot determine bit number.' +SETBIT: DM 'LAHF',0,'OR' + DM 0,'SAHF' +RESBIT: DM 'LAHF',0,'AND' + DM 0,'SAHF' +TESBIT: DM 'RCR',9,'SI',0,'TEST' + DM 0,'RCL',9,'SI' +XTHL1: DM 'POP',9,'SI',0,'XCHG',9,'SI' +XTHL2: DM 0,'PUSH',9,'SI' +EXX: DB 'XCHG',9,'BX,[HL]',0,'XCHG',9,'DX,[DE]',0 + DM 'XCHG',9,'CX,[BC]' +EXAF: DM 'LAHF',0,'XCHG',9,'AX,BP',0,'SAHF' +MOVAL: DM 0,'MOV',9,'AL' +IXSI: DM 9,'MOV',9,'SI,[IX]',13,10 +IYDI: DM 9,'MOV',9,'DI,[IY]',13,10 +RESTAX: DB 0 +SAVEAX: DM 'XCHG',9,'AX,SI' +CRLFTB: DM 13,10,9 +INB: DM 'INB',9 +OUTB: DM 'OUTB',9 +XCHG: DM 'XCHG' +JMP: DM 'JMP' +JR: DM 'JP' +RCL: DM 'RCL' +RCR: DM 'RCR' +ROL: DM 'ROL' +ROR: DM 'ROR' +SAL: DM 'SAL' +SAR: DM 'SAR' +SHR: DM 'SHR' +STC: DM 'STC' +IRET: DM 'IRET' +HLT: DM 'HLT' +CMC: DM 'CMC' +NOT: DM 'NOT' +MOV0: DB 0 +MOV: DM 'MOV' +CMP: DM 'CMP' +SBB: DM 'SBB' +CALL: DM 'CALL' +TOKTAB: + DB 'SIDI' + DB 'PEPOS',0,'NSNZZ',0,'NCC',0 + DB 'AXSPBXDXCX' + DB 'BLBHDLDHCLCHALIXIY' +RWTAB: + DB 'ABCDEHLBDHSACNZNPMPPII' +LENRW: EQU $-RWTAB + DB 0,0,0,0,0,0,0,'CELPF',0,'C',0,'Z',0,0,'OEYX' +HEADER: DB 13,10,'Z80 to 8086 Translator version 2.0',13,10,'$' +NOROOM: DB 13,10,'Insufficient directory space to create file',13,10,'$' +NOFILE: DB 13,10,'File not found',13,10,'$' +ENDMES: DB 13,10,'Translation complete',13,10,'$' +WRTERR: DB 13,10,'Out of disk space',13,10,'$' +OPCDER: DM 13,10,'*** Opcode Error ' +CRLF: DM 13,10 +LABEL: DB 'L0000',0 + DM ':',9 +PUTPT: DS 2 +GETPT: DS 2 +CHAR: DS 1 + DB 0 +OPCODE: DS 80 +OP1: DS 80 +OP2: DS 80 +PUTBUF: DS 128 +GETBUF: DS 128 +PUTFCB: DS 33 + DS 50 +STACK: EQU $ + ORG 1 ;This is really just for equates without EQU +RSI: DS 1 +RDI: DS 1 +ODDPAR: DS 1 +EVEPAR: DS 1 + DS 5 ;MINUS,PLUS,NOT ZERO,ZERO,NOT CARRY +CY: DS 1 +RAX: DS 1 +STP: DS 1 +RBX: DS 1 +RDX: DS 1 +RCX: DS 1 +RBL: DS 1 +RBH: DS 1 +RDL: DS 1 +RDH: DS 1 +RGCL: DS 1 +RCH: DS 1 +RAL: DS 1 +RIX: DS 1 +RIY: DS 1 + \ No newline at end of file