»·······T·······T·······T·······T·······T·······T·······T·······T·······T·····T INCDIR EXTERNASM: INCLUDE EXTERNASSEMBLER.I Q ASMHEAD ASM,DISASM,ENDOFASM,z80,"Z80-ASSEMBLER V1.0, DONE BY DEFTRONIC" ASM DR.W CHK68000 ;@ DR.W CHARA+02 ;A DR.W CHARB+04 ;B DR.W CHARC+06 ;C DR.W CHARD+08 ;D DR.W CHARE+10 ;E DR.W CHK68000+12 ;F DR.W CHK68000+14 ;G DR.W CHARH+16 ;H DR.W CHARI+18 ;I DR.W CHARJ+20 ;J DR.W CHARK+22 ;K DR.W CHARL+24 ;L DR.W CHARM+26 ;M DR.W CHARN+28 ;N DR.W CHARO+30 ;O DR.W CHARP+32 ;P DR.W CHARQ+34 ;Q DR.W CHARR+36 ;R DR.W CHARS+38 ;S DR.W CHART+40 ;T DR.W CHARU+42 ;U DR.W CHARV+44 ;V DR.W CHARW+46 ;W DR.W CHARX+48 ;X DR.W CHARY+50 ;Y DR.W CHARZ+52 ;Z DR.W CHK68000+54 ;_ CHARA CXD.S 'AD', .AD CXD.S 'AN', .AN NOCXD .AD GET ECXDS 'D', ASSEM_CMDADD ECXDS 'C', ASSEM_CMDADC NOCXD .AN GET ECXDS 'D', ASSEM_CMDAND NOCXD CHARB CXD 'BI', .BI NOCXD .BI GET ECXDS 'T', ASSEM_CMDBIT NOCXD CHARC CXD.S 'CA', .CA ECXD 'CP', ASSEM_CMDCP CXD.S 'CP', .CP CXD.S 'CC', .CC NOCXD .CA GET ECXD 'LL', ASSEM_CMDCALL NOCXD .CC GET ECXDS 'F', ASSEM_CMDCCF NOCXD .CP GET ECXDS 'D', ASSEM_CMDCPD ECXDS 'I', ASSEM_CMDCPI ECXDS 'L', ASSEM_CMDCPL ECXD 'DR', ASSEM_CMDCPDR ECXD 'IR', ASSEM_CMDCPIR NOCXD CHARD CXD.S 'DA', .DA CXD.S 'DE', .DE ECXD 'DI', ASSEM_CMDDI CXD.S 'DJ', .DJ NOCXD .DA GET ECXDS 'A', ASSEM_CMDDAA NOCXD .DE GET ECXDS 'C', ASSEM_CMDDEC NOCXD .DJ GET ECXD 'NZ', ASSEM_CMDDJNZ NOCXD CHARE ECXD 'EI', ASSEM_CMDEI ECXD 'EX', ASSEM_CMDEX CXD.S 'EX', .EX NOCXD .EX GET ECXDS 'X', ASSEM_CMDEXX NOCXD CHARH CXD.S 'HA', .HA NOCXD .HA GET ECXD 'LT', ASSEM_CMDHALT NOCXD CHARI CXD.S 'IN', .IN ECXD 'IN', ASSEM_CMDIN ECXD 'IM', ASSEM_CMDIM NOCXD .IN GET ECXDS 'C', ASSEM_CMDINC ECXDS 'D', ASSEM_CMDIND ECXD 'DR', ASSEM_CMDINDR ECXDS 'I', ASSEM_CMDINI ECXD 'IR', ASSEM_CMDINIR NOCXD CHARJ ECXD 'JP', ASSEM_CMDJP ECXD 'JR', ASSEM_CMDJR NOCXD CHARK NOCXD CHARL ECXD 'LD', ASSEM_CMDLD CXD.S 'LD', .LD NOCXD .LD GET ECXDS 'D', ASSEM_CMDLDD ECXDS 'I', ASSEM_CMDLDI ECXD 'DR', ASSEM_CMDLDDR ECXD 'IR', ASSEM_CMDLDIR NOCXD CHARM NOCXD CHARN CXD.S 'NE', .NE CXD.S 'NO', .NO NOCXD .NE GET ECXDS 'G', ASSEM_CMDNEG NOCXD .NO GET ECXDS 'P', ASSEM_CMDNOP NOCXD CHARO ECXD 'OR', ASSEM_CMDOR CXD.S 'OT', .OT CXD.S 'OU', .OU NOCXD .OT GET ECXD 'DR', ASSEM_CMDOTDR ECXD 'IR', ASSEM_CMDOTIR NOCXD .OU GET ECXDS 'T', ASSEM_CMDOUT ECXD 'TD', ASSEM_CMDOUTD ECXD 'TI', ASSEM_CMDOUTI NOCXD CHARP CXD 'PO', .PO CXD 'PU', .PU NOCXD .PO GET ECXDS 'P', ASSEM_CMDPOP NOCXD .PU GET ECXD 'SH', ASSEM_CMDPUSH NOCXD CHARQ NOCXD CHARR CXD.S 'RE', .RE ECXD 'RL', ASSEM_CMDRL ECXD 'RR', ASSEM_CMDRR CXD.S 'RL', .RL CXD.S 'RR', .RR CXD.S 'RS', .RS NOCXD .RE GET ECXDS 'S', ASSEM_CMDRES ECXDS 'T', ASSEM_CMDRET ECXD 'TI', ASSEM_CMDRETI ECXD 'TN', ASSEM_CMDRETN NOCXD .RL GET ECXDS 'A', ASSEM_CMDRLA ECXDS 'C', ASSEM_CMDRLC ECXD 'CA', ASSEM_CMDRLCA ECXDS 'D', ASSEM_CMDRLD NOCXD .RR GET ECXDS 'A', ASSEM_CMDRRA ECXDS 'C', ASSEM_CMDRRC ECXD 'CA', ASSEM_CMDRRCA ECXDS 'D', ASSEM_CMDRRD NOCXD .RS GET ECXDS 'T', ASSEM_CMDRST NOCXD CHARS CXD.S 'SB', .SB CXD.S 'SC', .SC CXD.S 'SE', .SE CXD.S 'SL', .SL CXD.S 'SR', .SR CXD.S 'SU', .SU NOCXD .SB GET ECXDS 'C', ASSEM_CMDSBC NOCXD .SC GET ECXDS 'F', ASSEM_CMDSCF NOCXD .SE GET ECXDS 'T', ASSEM_CMDSET NOCXD .SL GET ECXDS 'A', ASSEM_CMDSLA NOCXD .SR GET ECXDS 'A', ASSEM_CMDSRA ECXDS 'L', ASSEM_CMDSRL NOCXD .SU GET ECXDS 'B', ASSEM_CMDSUB NOCXD CHART NOCXD CHARU NOCXD CHARV NOCXD CHARW NOCXD CHARX CXD.S 'XO', .XO NOCXD .XO GET ECXDS 'R', ASSEM_CMDXOR NOCXD CHARY NOCXD CHARZ NOCXD ASSEM_CMDADC NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET CMP.W #'HL'+$8000, D0 BNE.S .BYTE BSR PARSE_GET_KOMMA MOVE.W #"HL"+$8000, D2 BSR PARSE_WORDREGISTER ADD.B #$4A,D1 SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVE.B D1,D3 SENDBYTE SENDEND CXDRTS .BYTE CMP.W #"A"<<8+$8000, D0 BNE.W ERROR_ILLEGAL_OPERAND BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$88,D1 SENDBYTEREGADC SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 SENDBYTE .NEXT MOVE.B D1,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT SENDEND CXDRTS ASSEM_CMDADD SENDBEGIN NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS.S 'A', .BYTE ECXD.S 'HL', .HL MOVEQ #-$23, D3 ECXD.S 'IX', .IX MOVEQ #-$03, D3 ECXD.S 'IY', .IY BRA.W ERROR_ILLEGAL_OPERAND .HL BSR PARSE_GET_KOMMA MOVE.W #"HL"+$8000, D2 BSR PARSE_WORDREGISTER BRA.S .SENDIT .IX MOVE.W #'IX'+$8000, D2 BRA.S .I .IY MOVE.W #'IY'+$8000, D2 .I BSR PARSE_GET_KOMMA BSR PARSE_WORDREGISTER MOVE.B D3,D3 SENDBYTE .SENDIT ADD.B #$9,D1 MOVE.B D1,D3 SENDBYTE SENDEND CXDRTS .BYTE BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$80,D1 BRA.W SENDBYTEREGADC ASSEM_CMDAND BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$A0,D1 BRA.W SENDBYTEREGADC ASSEM_CMDBIT BSR GET_VALUE MOVE.L D3,D0 AND.L #7,D0 CMP.L D3,D0 BNE.W ERROR_OUT_OF_RANGE_3BIT MOVE.B D3,-(SP) BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVE.B (SP)+,D3 LSL.B #3,D3 ADD.B #$40,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCALL BSR PARSE_GETFLAG SENDBEGIN ADD.B #$C4,D1 SENDCALL MOVE.B D1,D3 SENDBYTE MOVE.B D0,D3 SENDBYTE ROR.W #8,D0 MOVE.B D0,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCCF SENDBEGIN MOVEQ #$3F,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCP BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$B8,D1 BRA.W SENDBYTEREGADC ASSEM_CMDCPD SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVEQ #-$57,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCPDR SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVEQ #-$47,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCPI SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVEQ #-$5F,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCPIR SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVEQ #-$4F,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDCPL SENDBEGIN MOVEQ #$2F,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDDAA SENDBEGIN MOVEQ #$27,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDDEC BSR GETINCDEC SENDBEGIN TST.B D1 BEQ.S .NOTHING MOVE.B D1,D3 SENDBYTE .NOTHING MOVE.B D0,D3 SENDBYTE TST.B D5 BEQ.S .SLAM MOVE.B D2,D3 SENDBYTE .SLAM SENDEND CXDRTS GETINCDEC MOVEQ #0, D5 CMP.B #"(", (A6) BEQ .PARAN NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS.S 'A', .A ECXDS.S 'B', .B ECXD.S 'BC', .BC ECXDS.S 'C', .C ECXDS.S 'D', .D ECXD.S 'DE', .DE ECXDS.S 'E', .E ECXDS.S 'H', .H ECXD.S 'HL', .HL ECXD.S 'IX', .IX ECXD.S 'IY', .IY ECXDS.S 'L', .L ECXD.S 'SP', .SP ECXD.S 'HX', .HX ECXD.S 'HY', .HY ECXD.S 'LX', .LX ECXD.S 'LY', .LY BRA ERROR_ILLEGAL_OPERAND .A MOVEQ #$3D, D0 BRA.S .NOEND .B MOVEQ #$05, D0 BRA.S .NOEND .BC MOVEQ #$0B, D0 BRA.S .NOEND .C MOVEQ #$0D, D0 BRA.S .NOEND .D MOVEQ #$15, D0 BRA.S .NOEND .DE MOVEQ #$1B, D0 BRA.S .NOEND .E MOVEQ #$1D, D0 BRA.S .NOEND .H MOVEQ #$25, D0 BRA.S .NOEND .HL MOVEQ #$2B, D0 .NOEND MOVEQ #0, D1 RTS .IX MOVEQ #$2B, D0 .XEND MOVEQ #-$23, D1 RTS .IY MOVEQ #$2B, D0 .YEND MOVEQ #-$03, D1 RTS .L MOVEQ #$2D, D0 BRA.S .NOEND .SP MOVEQ #$3B, D0 BRA.S .NOEND .HX MOVEQ #$25, D0 BRA.S .XEND .HY MOVEQ #$25, D0 BRA.S .YEND .LX MOVEQ #$2D, D0 BRA.S .XEND .LY MOVEQ #$2D, D0 BRA.S .YEND .PARAN ADDQ.W #1, A6 NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .AHL ECXD.S 'IX', .AIX ECXD.S 'IY', .AIY BRA ERROR_ILLEGAL_OPERAND .AHL CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND MOVEQ #$35, D0 BRA.S .NOEND .AIX BSR .GETIXIY MOVE.B #$35, D0 BRA.S .XEND .AIY BSR .GETIXIY MOVE.B #$35, D0 BRA.S .YEND .GETIXIY MOVE.B (A6), D0 CMP.B #"+", D0 BEQ.S .GETVALUE CMP.B #"-", D0 BNE ERROR_ILLEGAL_OPERAND .GETVALUE BSR GET_VALUE MOVE.L D3, D2 EXT.W D2 EXT.L D2 CMP.L D3, D2 BNE.W ERROR_OUT_OF_RANGE_8BIT CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND ST D5 RTS ASSEM_CMDDI SENDBEGIN MOVEQ #-$0D,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDDJNZ BSR GET_VALUE MOVE.L D3, -(SP) MOVEQ #$10, D3 BSR SENDABYTE MOVE.L (SP)+, D3 BRA ASSEM_CMDJR\.SENDLORT ASSEM_CMDEI MOVEQ #-$05,D3 BSR SENDABYTE CXDRTS ASSEM_CMDEX BSR.S .0 SENDBEGIN TST.B D1 BEQ.S .1 MOVE.B D1,D3 SENDBYTE .1 MOVE.B D0,D3 SENDBYTE SENDEND CXDRTS .0 CMP.B #"(", (A6) BEQ.S .PARA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'AF', .AF ECXD.S 'DE', .DE BRA ERROR_ILLEGAL_OPERAND .AF BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'AF', .AF2 BRA ERROR_ILLEGAL_OPERAND .AF2 CMP.B #"'", (A6)+ BNE ERROR_ILLEGAL_OPERAND MOVEQ #$08, D0 MOVEQ #0, D1 RTS .DE BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .DEHL BRA ERROR_ILLEGAL_OPERAND .DEHL MOVEQ #-$15, D0 MOVEQ #0, D1 RTS .PARA ADDQ.W #1, A6 NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'SP', .SP BRA ERROR_ILLEGAL_OPERAND .SP CMP.B #")", (A6)+ BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .HL ECXD.S 'IX', .IX ECXD.S 'IY', .IY BRA ERROR_ILLEGAL_OPERAND .HL MOVEQ #-$1D, D0 MOVEQ #0, D1 RTS .IX MOVEQ #-$1D, D0 MOVEQ #-$23, D1 RTS .IY MOVEQ #-$1D, D0 MOVEQ #-$03, D1 RTS ASSEM_CMDEXX MOVEQ #-$27,D3 BSR SENDABYTE CXDRTS ASSEM_CMDHALT MOVEQ #$76,D3 BSR SENDABYTE CXDRTS ASSEM_CMDIM BSR GET_VALUE CMP.L #2, D3 BHI.W ERROR_MUST_0_2 MOVE.B .TAB(PC,D3.W), D1 BSR SEND_ED MOVE.B D1, D3 BSR SENDABYTE CXDRTS .TAB DC.B $46,$56,$5E EVEN ASSEM_CMDIN BSR .GETIN SENDBEGIN MOVE.B D1, D3 SENDBYTE MOVE.B D0, D3 SENDBYTE SENDEND CXDRTS .GETIN NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS 'A', .A ECXDS 'B', .B ECXDS 'C', .C ECXDS 'D', .D ECXDS 'E', .E ECXDS 'H', .H ECXDS 'L', .L BRA ERROR_ILLEGAL_OPERAND .A MOVEQ #$78, D0 MOVEQ #-$13, D1 BRA.S .GOON1 .B MOVEQ #$40, D0 BRA.S .GOON .C MOVEQ #$48, D0 BRA.S .GOON .D MOVEQ #$50, D0 BRA.S .GOON .E MOVEQ #$58, D0 BRA.S .GOON .H MOVEQ #$60, D0 BRA.S .GOON .L MOVEQ #$68, D0 .GOON MOVEQ #-$13, D1 MOVEM.W D0-D1, -(SP) BSR PARSE_GET_KOMMA CMP.B #"(", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS 'C', .GOTC BRA ERROR_ILLEGAL_OPERAND .GOON1 MOVEM.W D0-D1, -(SP) BSR PARSE_GET_KOMMA CMP.B #"(", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS 'C', .GOTC NEXTLABEL CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVEM.W (SP)+, D0-D1 MOVE.L D3, D0 MOVEQ #-$25, D1 RTS .GOTC CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVEM.W (SP)+, D0-D1 RTS ASSEM_CMDINC BSR GETINCDEC SENDBEGIN TST.B D1 BEQ.S .NOTHING MOVE.B D1,D3 SENDBYTE .NOTHING MOVE.B D0,D3 AND.B #%11,D0 CMP.B #%11,D0 BNE.S .SUB EOR.B #8,D3 BRA.S .GOON .SUB SUBQ.B #1,D3 .GOON SENDBYTE TST.B D5 BEQ.S .SLAM MOVE.B D2,D3 SENDBYTE .SLAM SENDEND CXDRTS ASSEM_CMDIND BSR.S SEND_ED MOVEQ #-$56,D3 BSR SENDABYTE CXDRTS ASSEM_CMDINDR BSR.S SEND_ED MOVEQ #-$46,D3 BSR SENDABYTE CXDRTS SEND_ED MOVEQ #-$13,D3 BSR SENDABYTE RTS ASSEM_CMDINI BSR.S SEND_ED MOVEQ #-$5E,D3 BSR SENDABYTE CXDRTS ASSEM_CMDINIR BSR.S SEND_ED MOVEQ #-$4E,D3 BSR SENDABYTE CXDRTS ASSEM_CMDJP CMP.B #"(", (A6) BEQ.S .PARA BSR PARSE_GETFLAG SENDBEGIN CMP.B #$CD-$C4,D1 BNE.S .OK MOVEQ #1,D1 .OK ADD.B #$C2,D1 BRA SENDCALL .PARA ADDQ.W #1, A6 NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .HL ECXD.S 'IX', .IX ECXD.S 'IY', .IY BRA ERROR_ILLEGAL_OPERAND .IX CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND SENDBEGIN MOVEQ #-$23, D3 SENDBYTE BRA.S .LAST .HL CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND SENDBEGIN .LAST MOVEQ #-$17, D3 SENDBYTE SENDEND CXDRTS .IY CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND SENDBEGIN MOVEQ #-3, D3 SENDBYTE BRA.S .LAST ASSEM_CMDJR NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .AVALUE NEXTSYMBOLBUFFER A3 GET ECXDS.S 'C', .C ECXD.S 'NC', .NC ECXD.S 'NZ', .NZ ECXDS.S 'Z', .Z MOVEQ #$18, D3 BSR SENDABYTE NEXTLABEL BRA.S .SENDLORT .AVALUE MOVE.L D3, -(SP) MOVEQ #$18, D3 BSR SENDABYTE MOVE.L (SP)+, D3 BRA.S .SENDLORT .C MOVEQ #$38, D3 BSR SENDABYTE BRA.S .GETKOMMA .NC MOVEQ #$30, D3 BSR SENDABYTE BRA.S .GETKOMMA .NZ MOVEQ #$20, D3 BSR SENDABYTE BRA.S .GETKOMMA .Z MOVEQ #$28, D3 BSR SENDABYTE .GETKOMMA NEXTKOMMA .GETLABEL BSR GET_VALUE .SENDLORT BSR GET_ADDR D1-D2 ARE KILLED TST.W D7 BMI.S .PASS1 SUB.L D0, D3 SUBQ.W #1, D3 MOVE.W D3, D0 EXT.W D0 EXT.L D0 CMP.L D0, D3 BNE.W ERROR_OUT_OF_RANGE_8BIT .PASS1 BSR SENDABYTE CXDRTS SENDABYTE SENDBEGIN SENDBYTE SENDEND RTS ASSEM_CMDLD BSR .0 SENDBEGIN MOVE.W D3,-(SP) TST.B D2 BEQ.S .NOTHING MOVE.B D2,D3 SENDBYTE .NOTHING MOVE.B D1,D3 SENDBYTE TST.B D6 BEQ.S .NOTD6 MOVE.B D0,D3 SENDBYTE .NOTD6 MOVE.W (SP)+,D3 TST.B D5 BEQ.S .NOTD5 SENDBYTE .NOTD5 SENDEND CXDRTS .0 MOVEQ #0, D5 MOVEQ #0, D6 CMP.B #"(", (A6) BEQ.W .PARA BSR GETFIRSTWORD ECXDS.S 'A', .LDA ECXDS.S 'B', .LDB ECXD 'BC', .LDBC ECXDS 'C', .LDC ECXDS 'D', .LDD ECXD 'DE', .LDDE ECXDS 'E', .LDE ECXDS 'H', .LDH ECXD 'HL', .LDHL ECXDS 'I', .LDI ECXD 'IX', .LDIX ECXD 'IY', .LDIY ECXDS 'L', .LDL ECXDS 'R', .LDR ECXD 'SP', .LDSP BRA ERROR_ILLEGAL_OPERAND .LDA BSR PARSE_GET_KOMMA BSR PARSE_LDABYTE EOR.B #$78, D1 RTS .LDB BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$40, D1 RTS .LDBC BSR GETAWORDVALUE ST D6 TST.B D5 BNE.S .LDBCP ST D5 MOVEQ #$01, D1 MOVEQ #0, D2 RTS .LDBCP MOVEQ #$4B, D1 MOVEQ #-$13, D2 RTS .LDC BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$48, D1 RTS .LDD BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$50, D1 RTS .LDDE BSR GETAWORDVALUE ST D6 TST.B D5 BNE.S .LDDEP ST D5 MOVEQ #$11, D1 MOVEQ #0, D2 RTS .LDDEP MOVEQ #$5B, D1 MOVEQ #-$13, D2 RTS .LDE BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$58, D1 RTS .LDH BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$60, D1 RTS .LDHL BSR GETAWORDVALUE ST D6 TST.B D5 BNE.S .LDHLP ST D5 MOVEQ #$21, D1 MOVEQ #0, D2 RTS .LDHLP MOVEQ #$2A, D1 MOVEQ #0, D2 RTS .LDI BSR CHECKA MOVEQ #-$13, D2 MOVEQ #$47, D1 RTS .LDIX BSR .LDHL MOVEQ #-$23, D2 RTS .LDIY BSR .LDHL MOVEQ #-$03, D2 RTS .LDL BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER EOR.B #$68, D1 RTS .LDR BSR CHECKA MOVEQ #-$13, D2 MOVEQ #$4F, D1 RTS .LDSP BSR PARSE_GET_KOMMA CMP.B #"(", (A6) BEQ.S .LDSPP NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .LDSPVAL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .LDSPHL ECXD.S 'IX', .LDSPIX ECXD.S 'IY', .LDSPIY NEXTLABEL .LDSPVAL MOVE.L D3, D0 AND.L #$FFFF, D0 CMP.L D3, D0 BNE.W ERROR_OUT_OF_RANGE_16BIT LSR.W #8, D3 MOVEQ #$31, D1 MOVEQ #0, D2 ST D5 ST D6 RTS .LDSPP ADDQ.W #1, A6 BSR GET_VALUE BSR.S .LDSPVAL CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND MOVEQ #$7B, D1 MOVEQ #-$13, D2 RTS .LDSPHL MOVEQ #-7, D1 MOVEQ #0, D2 RTS .LDSPIX MOVEQ #-7, D1 MOVEQ #-$23, D2 RTS .LDSPIY MOVEQ #-7, D1 MOVEQ #-$03, D2 RTS .PARA ADDQ.W #1, A6 NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .AVALUE NEXTSYMBOLBUFFER A3 GET ECXD 'BC', .BC ECXD 'DE', .DE ECXD 'HL', .HL ECXD 'IX', .IX ECXD 'IY', .IY NEXTLABEL BRA.s .AVALUE1 .AVALUE GETLABEL .AVALUE1 CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND MOVE.L D3, D0 AND.L #$FFFF, D0 CMP.L D3, D0 BNE.W ERROR_OUT_OF_RANGE_16BIT LSR.W #8, D3 MOVE.W D0, -(SP) ST D5 ST D6 BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS.S 'A', .NNA ECXD.S 'BC', .NNBC ECXD.S 'DE', .NNDE ECXD.S 'HL', .NNHL ECXD.S 'IX', .NNIX ECXD.S 'IY', .NNIY ECXD.S 'SP', .NNSP BRA ERROR_ILLEGAL_OPERAND .NNA MOVEQ #0, D2 MOVEQ #$32, D1 MOVE.W (SP)+, D0 RTS .NNBC MOVEQ #-$13, D2 MOVEQ #$43, D1 MOVE.W (SP)+, D0 RTS .NNDE MOVEQ #-$13, D2 MOVEQ #$53, D1 MOVE.W (SP)+, D0 RTS .NNHL MOVEQ #0, D2 MOVEQ #$22, D1 MOVE.W (SP)+, D0 RTS .NNIX MOVEQ #-$23, D2 MOVEQ #$22, D1 MOVE.W (SP)+, D0 RTS .NNIY MOVEQ #-$03, D2 MOVEQ #$22, D1 MOVE.W (SP)+, D0 RTS .NNSP MOVEQ #-$13, D2 MOVEQ #$73, D1 MOVE.W (SP)+, D0 RTS .BC CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND BSR.W CHECKA MOVEQ #$02, D1 RTS .DE CMP.B #")", (A6)+ BNE ERROR_ILLEGAL_OPERAND BSR.W CHECKA MOVEQ #$12, D1 RTS .HL CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #6, D1 BEQ ERROR_ILLEGAL_OPERAND EOR.B #$70, D1 RTS .IY BSR.S .IX MOVEQ #-$03, D2 RTS .IX MOVE.B (A6), D0 CMP.B #"+", D0 BEQ.S .IX1 CMP.B #"-", D0 BNE.W ERROR_ILLEGAL_OPERAND .IX1 BSR GET_VALUE CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVE.L D3, D0 EXT.W D0 EXT.L D0 CMP.L D0, D3 BNE.W ERROR_OUT_OF_RANGE_8BIT MOVE.W D0, -(SP) BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #6, D1 BEQ ERROR_ILLEGAL_OPERAND MOVE.W (SP)+, D0 ST D6 MOVE.B #$DD, D2 EOR.B #$70, D1 RTS CHECKA BSR GETNEXTWORD CMP.W #"A"<<8+$8000, D0 BNE.W ERROR_ILLEGAL_OPERAND RTS GETAWORDVALUE BSR PARSE_GET_KOMMA MOVEQ #0, D5 CMP.B #"(", (A6) BNE.S .GETVAL ADDQ.W #1, A6 BSR.S .GETVAL CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVEQ #-1, D5 RTS .GETVAL BSR GET_VALUE MOVE.L D3, D0 AND.L #$FFFF, D0 CMP.L D3, D0 BNE.W ERROR_OUT_OF_RANGE_16BIT LSR.W #8, D3 RTS ;D0=I STEP ;D1=COMMAND ;D2=$DD,$FD ;D3=COMMAND VAL ;A=7 ;B=0,0 ;C=1,0 ;D=2,0 ;E=3,0 ;H=4,0 ;HX=4,$DD ;HY=4,$FD ;L=5,0 ;LX=5,$DD ;LY=5,$FD ;(HL)=6,0 ;(IX,N)=6,$DD,# ;(IY,N)=6,$FD,# ;#=$46 GETNEXTWORD BSR PARSE_GET_KOMMA GETFIRSTWORD NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET RTS ASSEM_CMDLDD BSR SEND_ED MOVEQ #-$58, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDLDDR BSR SEND_ED MOVEQ #-$48, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDLDI BSR SEND_ED MOVEQ #-$60, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDLDIR BSR SEND_ED MOVEQ #-$50, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDNEG BSR SEND_ED MOVEQ #$44, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDNOP MOVEQ #$00, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDOR BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$B0,D1 BRA.W SENDBYTEREGADC ASSEM_CMDOTDR BSR SEND_ED MOVEQ #-$78, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDOTIR BSR SEND_ED MOVEQ #-$7D, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDOUT BSR .GETOUT SENDBEGIN MOVE.B D1, D3 SENDBYTE MOVE.B D0, D3 SENDBYTE SENDEND CXDRTS .GETOUT CMP.B #"(", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS 'C', .GOTC NEXTLABEL MOVE.L D3, D0 MOVE.W D0, -(SP) CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET CMP.W #'A'<<8+$8000, D0 BNE.W ERROR_ILLEGAL_OPERAND MOVE.W (SP)+, D0 MOVEQ #-$2D, D1 RTS .GOTC CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND BSR PARSE_GET_KOMMA NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS 'A', .A ECXDS 'B', .B ECXDS 'C', .C ECXDS 'D', .D ECXDS 'E', .E ECXDS 'H', .H ECXDS 'L', .L BRA ERROR_ILLEGAL_OPERAND .A MOVEQ #$79, D0 MOVEQ #-$13, D1 RTS .B MOVEQ #$41, D0 MOVEQ #-$13, D1 RTS .C MOVEQ #$49, D0 MOVEQ #-$13, D1 RTS .D MOVEQ #$51, D0 MOVEQ #-$13, D1 RTS .E MOVEQ #$59, D0 MOVEQ #-$13, D1 RTS .H MOVEQ #$61, D0 MOVEQ #-$13, D1 RTS .L MOVEQ #$69, D0 MOVEQ #-$13, D1 RTS ASSEM_CMDOUTD BSR SEND_ED MOVEQ #-$55, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDOUTI BSR SEND_ED MOVEQ #-$5D, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDPOP BSR GETPUSHPOP TST.B D1 BEQ.S .0 MOVE.B D1,D3 BSR SENDABYTE .0 MOVE.B D0,D3 BSR SENDABYTE CXDRTS ASSEM_CMDPUSH BSR GETPUSHPOP TST.B D1 BEQ.S .0 MOVE.B D1,D3 BSR SENDABYTE .0 ADDQ.B #4,D0 MOVE.B D0,D3 BSR SENDABYTE CXDRTS GETPUSHPOP NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD 'AF', .AF ECXD 'BC', .BC ECXD 'DE', .DE ECXD 'HL', .HL ECXD 'IX', .IX ECXD 'IY', .IY BRA ERROR_ILLEGAL_OPERAND .AF MOVEQ #-$0F, D0 MOVEQ #0, D1 RTS .BC MOVE.W #-$3F, D0 MOVEQ #0, D1 RTS .DE MOVE.W #-$2F, D0 MOVEQ #0, D1 RTS .HL MOVE.W #-$1F, D0 MOVEQ #0, D1 RTS .IX MOVE.W #-$1F, D0 MOVEQ #-$23, D1 RTS .IY MOVE.W #-$1F, D0 MOVEQ #-$03, D1 RTS ASSEM_CMDRES BSR GET_VALUE MOVE.L D3,D0 AND.L #7,D0 CMP.L D3,D0 BNE.W ERROR_OUT_OF_RANGE_3BIT MOVE.B D3,-(SP) BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVE.B (SP)+,D3 LSL.B #3,D3 ADD.B #$80,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDRET BSR .GETIT BSR SENDABYTE CXDRTS .GETIT TST.B (A6) BEQ.S .NOTHING NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXDS.S 'C', .C ECXDS.S 'M', .M ECXD.S 'NC', .NC ECXD.S 'NZ', .NZ ECXDS.S 'P', .P ECXD.S 'PE', .PE ECXD.S 'PO', .PO ECXDS.S 'Z', .Z .NOTHING MOVE.W #$C9, D3 RTS .C MOVE.W #$D8, D3 RTS .M MOVE.W #$F8, D3 RTS .NC MOVE.W #$D0, D3 RTS .NZ MOVE.W #$C0, D3 RTS .P MOVE.W #$F0, D3 RTS .PE MOVE.W #$E8, D3 RTS .PO MOVE.W #$E0, D3 RTS .Z MOVE.W #$C8, D3 RTS ASSEM_CMDRETI BSR SEND_ED MOVEQ #$4D,D3 BSR SENDABYTE CXDRTS ASSEM_CMDRETN BSR SEND_ED MOVEQ #$45,D3 BSR SENDABYTE CXDRTS ASSEM_CMDRL BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$10,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDRLA MOVEQ #$17, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRLC BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVE.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDRLCA MOVEQ #$07, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRLD BSR SEND_ED MOVEQ #$6F, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRR BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$18,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDRRA MOVEQ #$1F, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRRC BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$08,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDRRCA MOVEQ #$0F, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRRD BSR SEND_ED MOVEQ #$67, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDRST BSR GET_VALUE MOVE.L D3, D0 AND.L #$38, D0 CMP.L D3, D0 BNE.W ERROR_MUST_BE_AND38 ADD.B #$C7, D3 BSR SENDABYTE CXDRTS ASSEM_CMDSCF MOVEQ #$37, D3 BSR.W SENDABYTE CXDRTS ASSEM_CMDSBC NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET CMP.W #'HL'+$8000, D0 BNE.S .BYTE BSR PARSE_GET_KOMMA MOVE.W #"HL"+$8000, D2 BSR PARSE_WORDREGISTER ADD.B #$42,D1 SENDBEGIN MOVEQ #-$13,D3 SENDBYTE MOVE.B D1,D3 SENDBYTE SENDEND CXDRTS .BYTE CMP.W #"A"<<8+$8000, D0 BNE.W ERROR_ILLEGAL_OPERAND BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$98,D1 BRA.W SENDBYTEREGADC ASSEM_CMDSET BSR GET_VALUE MOVE.L D3,D0 AND.L #7,D0 CMP.L D3,D0 BNE.W ERROR_OUT_OF_RANGE_3BIT MOVE.B D3,-(SP) BSR PARSE_GET_KOMMA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVE.B (SP)+,D3 LSL.B #3,D3 ADD.B #$C0,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDSLA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$20,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDSRA BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$28,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDSRL BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHS.W ERROR_ILLEGAL_OPERAND SENDBEGIN TST.B D2 BEQ.S .NEXT MOVE.B D2,D3 TST.B D5 BEQ.W ERROR_ILLEGAL_OPERAND SENDBYTE .NEXT MOVE.B #-$35,D3 SENDBYTE TST.B D5 BEQ.S .NOEXT MOVE.B D0,D3 SENDBYTE .NOEXT MOVEQ #$38,D3 ADD.B D1,D3 SENDBYTE SENDEND CXDRTS ASSEM_CMDSUB BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$90,D1 BRA.W SENDBYTEREGADC ASSEM_CMDXOR BSR PARSE_BYTEREGISTER CMP.B #$46,D1 BHI.W ERROR_ILLEGAL_OPERAND ADD.B #$A8,D1 BRA.W SENDBYTEREGADC PARSE_GETFLAG NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .AVALUE NEXTSYMBOLBUFFER A3 GET ECXDS.S 'C', .C ECXDS.S 'M', .M ECXD.S 'NC', .NC ECXD.S 'NZ', .NZ ECXDS.S 'P', .P ECXD.S 'PE', .PE ECXD.S 'PO', .PO ECXDS.S 'Z', .Z MOVE.W #$CD-$C4, -(SP) .GET_LABEL2 NEXTSYMBOLBUFFER A3 NEXTLABEL MOVE.W (SP)+, D1 .0 TST.W D2 BNE.W ERROR_RELATIVE_MODE MOVE.L D3,D0 AND.L #$FFFF,D0 CMP.L D3,D0 BNE.W ERROR_OUT_OF_RANGE_16BIT RTS .AVALUE GETLABEL MOVE.W #$CD-$C4, D1 BRA.S .0 .C MOVE.W #$DC-$C4, -(SP) BRA.S .GET_LABEL .M MOVE.W #$FC-$C4, -(SP) BRA.S .GET_LABEL .NC MOVE.W #$D4-$C4, -(SP) BRA.S .GET_LABEL .NZ MOVE.W #$C4-$C4, -(SP) BRA.S .GET_LABEL .P MOVE.W #$F4-$C4, -(SP) BRA.S .GET_LABEL .PE MOVE.W #$EC-$C4, -(SP) BRA.S .GET_LABEL .PO MOVE.W #$E4-$C4, -(SP) BRA.S .GET_LABEL .Z MOVE.W #$CC-$C4, -(SP) .GET_LABEL BSR PARSE_GET_KOMMA NEXTSYMBOL BRA.S .GET_LABEL2 ;A=7 ;B=0,0 ;C=1,0 ;D=2,0 ;E=3,0 ;H=4,0 ;HX=4,$DD ;HY=4,$FD ;L=5,0 ;LX=5,$DD ;LY=5,$FD ;(HL)=6,0 ;(IX,N)=6,$DD,# ;(IY,N)=6,$FD,# ;#=$46 PARSE_WORDREGISTER NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET CMP.W D2, D0 BNE.S .B MOVEQ #$20, D1 RTS .B CMP.W #"BC"+$8000, D0 BNE.S .D MOVEQ #$00, D1 RTS .D CMP.W #"DE"+$8000, D0 BNE.S .S MOVEQ #$10, D1 RTS .S CMP.W #"SP"+$8000, D0 BNE.W ERROR_ILLEGAL_OPERAND MOVEQ #$30, D1 RTS PARSE_LDABYTE CMP.B #"(", (A6) BEQ.S .GOTPARAN NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.W PARSE_BYTEREGISTER\.AVALUE NEXTSYMBOLBUFFER A3 GET ECXDS.S 'I', .I ECXDS.S 'R', .R BRA.W PARSE_BYTEREGISTER\.000 .I MOVEQ #$78~$57, D1 MOVEQ #-$13, D2 MOVEQ #0, D5 RTS .R MOVEQ #$78~$5F, D1 MOVEQ #-$13, D2 MOVEQ #0, D5 RTS .GOTPARAN ADDQ.W #1, A6 NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .AVALUE NEXTSYMBOLBUFFER A3 GET ECXD.S 'BC', .BC ECXD.S 'DE', .DE ECXD 'HL', PARSE_BYTEREGISTER\.HL MOVEQ #-$23, D2 ECXD 'IX', PARSE_BYTEREGISTER\.I MOVEQ #-$03, D2 ECXD 'IY', PARSE_BYTEREGISTER\.I NEXTLABEL BRA.s .AVALUE1 .AVALUE GETLABEL .AVALUE1 CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVE.L D3, D0 AND.L #$FFFF, D0 CMP.L D3, D0 BNE ERROR_OUT_OF_RANGE_16BIT LSR.W #8, D3 ST D5 ST D6 MOVEQ #$3A~$78, D1 MOVEQ #0, D2 RTS .BC CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVEQ #$A~$78, D1 MOVEQ #0, D2 MOVEQ #0, D5 RTS .DE CMP.B #")", (A6)+ BNE.W ERROR_ILLEGAL_OPERAND MOVEQ #$1A~$78, D1 MOVEQ #0, D2 MOVEQ #0, D5 RTS PARSE_BYTEREGISTER CMP.B #"(", (A6) BEQ.W .GOTPARAN NEXTSYMBOL CMP.B #NS_ALABEL, D1 BNE.S .AVALUE NEXTSYMBOLBUFFER A3 GET .000 ECXDS "A", .A ECXDS "B", .B ECXDS "C", .C ECXDS "D", .D ECXDS "E", .E ECXDS "H", .H ECXDS "L", .L ECXD "HX", .HX ECXD "LX", .LX ECXD "HY", .HY ECXD "LY", .LY NEXTLABEL BRA.S .AVALUE1 .AVALUE GETLABEL .AVALUE1 TST.W D2 BNE.W ERROR_RELATIVE_MODE MOVE.L D3, D0 AND.L #$FF, D0 CMP.L D3, D0 BNE.W ERROR_OUT_OF_RANGE_8BIT MOVEQ #$46, D1 MOVEQ #0, D2 ST D5 RTS .A MOVEQ #7, D1 .LIM MOVEQ #0, D2 MOVEQ #0, D5 RTS .B MOVEQ #0, D1 BRA.S .LIM .C MOVEQ #1, D1 BRA.S .LIM .D MOVEQ #2, D1 BRA.S .LIM .E MOVEQ #3, D1 BRA.S .LIM .H MOVEQ #4, D1 BRA.S .LIM .L MOVEQ #5, D1 BRA.S .LIM .HX MOVEQ #4, D1 MOVEQ #-$23, D2 MOVEQ #0, D5 RTS .LX MOVEQ #5, D1 MOVEQ #-$23, D2 MOVEQ #0, D5 RTS .HY MOVEQ #4, D1 MOVEQ #-$3, D2 MOVEQ #0, D5 RTS .LY MOVEQ #5, D1 MOVEQ #-$3, D2 MOVEQ #0, D5 RTS .GOTPARAN ADDQ.W #1, A6 NEXTSYMBOL NEXTSYMBOLBUFFER A3 GET ECXD.S 'HL', .HL MOVEQ #-$23, D2 ECXD.S 'IX', .I MOVEQ #-$03, D2 ECXD.S 'IY', .I BRA.S ERROR_ILLEGAL_OPERAND .HL CMP.B #")", (A6)+ BNE.S ERROR_ILLEGAL_OPERAND MOVEQ #6, D1 BRA.S .LIM .I MOVE.B (A6), D0 CMP.B #"-", D0 BEQ.S .MINUS CMP.B #"+", D0 BNE.S ERROR_ILLEGAL_OPERAND .MINUS MOVE.W D2,-(SP) BSR GET_VALUE TST.W D2 BNE.W ERROR_RELATIVE_MODE MOVE.W (SP)+,D2 MOVE.B D3, D0 EXT.W D0 EXT.L D0 CMP.L D3, D0 BNE.S ERROR_OUT_OF_RANGE_8BIT CMP.B #")", (A6)+ BNE.W ERROR_PARENTES_EXPECTED ST D5 MOVEQ #6, D1 RTS ERROR_ILLEGAL_OPERAND ERROR "Illegal operand" ERROR_OUT_OF_RANGE_3BIT ERROR "Out of 3 bit range" ERROR_OUT_OF_RANGE_8BIT ERROR "Out of 8 bit range" ERROR_OUT_OF_RANGE_16BIT ERROR "Out of 16 bit range" ERROR_PARENTES_EXPECTED ERROR "Right parenthes expected" ERROR_RELATIVE_MODE ERROR "Relative Mode Error" ERROR_MUST_0_2 ERROR "Must be a value between 0-2" ERROR_MUST_BE_AND38 ERROR "Must be andable with 38" DISASM RTS ENDOFASM