home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assemblers / trashm20.lha / EXTERNASM / Z80ASM / Z80ExternAssembler.s next >
Encoding:
Text File  |  1993-10-28  |  30.6 KB  |  1,814 lines

  1. »·······T·······T·······T·······T·······T·······T·······T·······T·······T·····T
  2.  
  3.         INCDIR    EXTERNASM:
  4.         INCLUDE    EXTERNASSEMBLER.I
  5.     
  6. Q        ASMHEAD    ASM,DISASM,ENDOFASM,z80,"Z80-ASSEMBLER V1.0, DONE BY DEFTRONIC"
  7.  
  8. ASM        DR.W    CHK68000    ;@
  9.         DR.W    CHARA+02    ;A
  10.         DR.W    CHARB+04    ;B
  11.         DR.W    CHARC+06    ;C
  12.         DR.W    CHARD+08    ;D
  13.         DR.W    CHARE+10    ;E
  14.         DR.W    CHK68000+12    ;F
  15.         DR.W    CHK68000+14    ;G
  16.         DR.W    CHARH+16    ;H
  17.         DR.W    CHARI+18    ;I
  18.         DR.W    CHARJ+20    ;J
  19.         DR.W    CHARK+22    ;K
  20.         DR.W    CHARL+24    ;L
  21.         DR.W    CHARM+26    ;M
  22.         DR.W    CHARN+28    ;N
  23.         DR.W    CHARO+30    ;O
  24.         DR.W    CHARP+32    ;P
  25.         DR.W    CHARQ+34    ;Q
  26.         DR.W    CHARR+36    ;R
  27.         DR.W    CHARS+38    ;S
  28.         DR.W    CHART+40    ;T
  29.         DR.W    CHARU+42    ;U
  30.         DR.W    CHARV+44    ;V
  31.         DR.W    CHARW+46    ;W
  32.         DR.W    CHARX+48    ;X
  33.         DR.W    CHARY+50    ;Y
  34.         DR.W    CHARZ+52    ;Z
  35.         DR.W    CHK68000+54    ;_
  36.  
  37. CHARA        CXD.S    'AD',        .AD
  38.         CXD.S    'AN',        .AN
  39.         NOCXD
  40. .AD        GET
  41.         ECXDS    'D',        ASSEM_CMDADD
  42.         ECXDS    'C',        ASSEM_CMDADC
  43.         NOCXD
  44. .AN        GET
  45.         ECXDS    'D',        ASSEM_CMDAND
  46.         NOCXD
  47. CHARB        CXD    'BI',        .BI
  48.         NOCXD
  49. .BI        GET
  50.         ECXDS    'T',        ASSEM_CMDBIT
  51.         NOCXD
  52. CHARC        CXD.S    'CA',        .CA
  53.         ECXD    'CP',        ASSEM_CMDCP
  54.         CXD.S    'CP',        .CP
  55.         CXD.S    'CC',        .CC
  56.         NOCXD
  57. .CA        GET
  58.         ECXD    'LL',        ASSEM_CMDCALL
  59.         NOCXD
  60. .CC        GET
  61.         ECXDS    'F',        ASSEM_CMDCCF
  62.         NOCXD
  63. .CP        GET
  64.         ECXDS    'D',        ASSEM_CMDCPD
  65.         ECXDS    'I',        ASSEM_CMDCPI
  66.         ECXDS    'L',        ASSEM_CMDCPL
  67.         ECXD    'DR',        ASSEM_CMDCPDR
  68.         ECXD    'IR',        ASSEM_CMDCPIR
  69.         NOCXD
  70. CHARD        CXD.S    'DA',        .DA
  71.         CXD.S    'DE',        .DE
  72.         ECXD    'DI',        ASSEM_CMDDI
  73.         CXD.S    'DJ',        .DJ
  74.         NOCXD
  75. .DA        GET
  76.         ECXDS    'A',        ASSEM_CMDDAA
  77.         NOCXD
  78. .DE        GET
  79.         ECXDS    'C',        ASSEM_CMDDEC
  80.         NOCXD
  81. .DJ        GET
  82.         ECXD    'NZ',        ASSEM_CMDDJNZ
  83.         NOCXD
  84. CHARE        ECXD    'EI',        ASSEM_CMDEI
  85.         ECXD    'EX',        ASSEM_CMDEX
  86.         CXD.S    'EX',        .EX
  87.         NOCXD
  88. .EX        GET
  89.         ECXDS    'X',        ASSEM_CMDEXX
  90.         NOCXD
  91. CHARH        CXD.S    'HA',        .HA
  92.         NOCXD
  93. .HA        GET
  94.         ECXD    'LT',        ASSEM_CMDHALT
  95.         NOCXD
  96. CHARI        CXD.S    'IN',        .IN
  97.         ECXD    'IN',        ASSEM_CMDIN
  98.         ECXD    'IM',        ASSEM_CMDIM
  99.         NOCXD
  100. .IN        GET
  101.         ECXDS    'C',        ASSEM_CMDINC
  102.         ECXDS    'D',        ASSEM_CMDIND
  103.         ECXD    'DR',        ASSEM_CMDINDR
  104.         ECXDS    'I',        ASSEM_CMDINI
  105.         ECXD    'IR',        ASSEM_CMDINIR
  106.         NOCXD
  107. CHARJ        ECXD    'JP',        ASSEM_CMDJP
  108.         ECXD    'JR',        ASSEM_CMDJR
  109.         NOCXD
  110. CHARK        NOCXD
  111. CHARL        ECXD    'LD',        ASSEM_CMDLD
  112.         CXD.S    'LD',        .LD
  113.         NOCXD
  114. .LD        GET
  115.         ECXDS    'D',        ASSEM_CMDLDD
  116.         ECXDS    'I',        ASSEM_CMDLDI
  117.         ECXD    'DR',        ASSEM_CMDLDDR
  118.         ECXD    'IR',        ASSEM_CMDLDIR
  119.         NOCXD
  120. CHARM        NOCXD
  121. CHARN        CXD.S    'NE',        .NE
  122.         CXD.S    'NO',        .NO
  123.         NOCXD
  124. .NE        GET
  125.         ECXDS    'G',        ASSEM_CMDNEG
  126.         NOCXD
  127. .NO        GET
  128.         ECXDS    'P',        ASSEM_CMDNOP
  129.         NOCXD
  130. CHARO        ECXD    'OR',        ASSEM_CMDOR
  131.         CXD.S    'OT',        .OT
  132.         CXD.S    'OU',        .OU
  133.         NOCXD
  134. .OT        GET
  135.         ECXD    'DR',        ASSEM_CMDOTDR
  136.         ECXD    'IR',        ASSEM_CMDOTIR
  137.         NOCXD
  138. .OU        GET
  139.         ECXDS    'T',        ASSEM_CMDOUT
  140.         ECXD    'TD',        ASSEM_CMDOUTD
  141.         ECXD    'TI',        ASSEM_CMDOUTI
  142.         NOCXD
  143. CHARP        CXD    'PO',        .PO
  144.         CXD    'PU',        .PU
  145.         NOCXD
  146. .PO        GET
  147.         ECXDS    'P',        ASSEM_CMDPOP
  148.         NOCXD
  149. .PU        GET
  150.         ECXD    'SH',        ASSEM_CMDPUSH
  151.         NOCXD
  152.  
  153. CHARQ        NOCXD
  154. CHARR        CXD.S    'RE',        .RE
  155.         ECXD    'RL',        ASSEM_CMDRL
  156.         ECXD    'RR',        ASSEM_CMDRR
  157.         CXD.S    'RL',        .RL
  158.         CXD.S    'RR',        .RR
  159.         CXD.S    'RS',        .RS
  160.         NOCXD
  161. .RE        GET
  162.         ECXDS    'S',        ASSEM_CMDRES
  163.         ECXDS    'T',        ASSEM_CMDRET
  164.         ECXD    'TI',        ASSEM_CMDRETI
  165.         ECXD    'TN',        ASSEM_CMDRETN
  166.         NOCXD
  167. .RL        GET
  168.         ECXDS    'A',        ASSEM_CMDRLA
  169.         ECXDS    'C',        ASSEM_CMDRLC
  170.         ECXD    'CA',        ASSEM_CMDRLCA
  171.         ECXDS    'D',        ASSEM_CMDRLD
  172.         NOCXD
  173. .RR        GET
  174.         ECXDS    'A',        ASSEM_CMDRRA
  175.         ECXDS    'C',        ASSEM_CMDRRC
  176.         ECXD    'CA',        ASSEM_CMDRRCA
  177.         ECXDS    'D',        ASSEM_CMDRRD
  178.         NOCXD
  179. .RS        GET
  180.         ECXDS    'T',        ASSEM_CMDRST
  181.         NOCXD
  182. CHARS        CXD.S    'SB',        .SB
  183.         CXD.S    'SC',        .SC
  184.         CXD.S    'SE',        .SE
  185.         CXD.S    'SL',        .SL
  186.         CXD.S    'SR',        .SR
  187.         CXD.S    'SU',        .SU
  188.         NOCXD
  189. .SB        GET
  190.         ECXDS    'C',        ASSEM_CMDSBC
  191.         NOCXD
  192. .SC        GET
  193.         ECXDS    'F',        ASSEM_CMDSCF
  194.         NOCXD
  195. .SE        GET
  196.         ECXDS    'T',        ASSEM_CMDSET
  197.         NOCXD
  198. .SL        GET
  199.         ECXDS    'A',        ASSEM_CMDSLA
  200.         NOCXD
  201. .SR        GET
  202.         ECXDS    'A',        ASSEM_CMDSRA
  203.         ECXDS    'L',        ASSEM_CMDSRL
  204.         NOCXD
  205. .SU        GET
  206.         ECXDS    'B',        ASSEM_CMDSUB
  207.         NOCXD
  208. CHART        NOCXD
  209. CHARU        NOCXD
  210. CHARV        NOCXD
  211. CHARW        NOCXD
  212. CHARX        CXD.S    'XO',        .XO
  213.         NOCXD
  214. .XO        GET
  215.         ECXDS    'R',        ASSEM_CMDXOR
  216.         NOCXD
  217. CHARY        NOCXD
  218. CHARZ        NOCXD
  219.  
  220. ASSEM_CMDADC    NEXTSYMBOL
  221.         NEXTSYMBOLBUFFER    A3
  222.         GET
  223.         CMP.W    #'HL'+$8000,    D0
  224.         BNE.S    .BYTE
  225.         BSR    PARSE_GET_KOMMA
  226.         MOVE.W    #"HL"+$8000,    D2
  227.         BSR    PARSE_WORDREGISTER
  228.         ADD.B    #$4A,D1
  229.         SENDBEGIN
  230.         MOVEQ    #-$13,D3
  231.         SENDBYTE
  232.         MOVE.B    D1,D3
  233.         SENDBYTE
  234.         SENDEND
  235.         CXDRTS        
  236. .BYTE        CMP.W    #"A"<<8+$8000,    D0
  237.         BNE.W    ERROR_ILLEGAL_OPERAND
  238.         BSR    PARSE_GET_KOMMA
  239.         BSR    PARSE_BYTEREGISTER
  240.         CMP.B    #$46,D1
  241.         BHI.W    ERROR_ILLEGAL_OPERAND
  242.         ADD.B    #$88,D1
  243.  
  244. SENDBYTEREGADC    SENDBEGIN
  245.         TST.B    D2
  246.         BEQ.S    .NEXT
  247.         MOVE.B    D2,D3
  248.         SENDBYTE
  249. .NEXT        MOVE.B    D1,D3
  250.         SENDBYTE
  251.         TST.B    D5
  252.         BEQ.S    .NOEXT
  253.         MOVE.B    D0,D3
  254.         SENDBYTE
  255. .NOEXT        SENDEND
  256.         CXDRTS
  257. ASSEM_CMDADD    SENDBEGIN
  258.         NEXTSYMBOL
  259.         NEXTSYMBOLBUFFER    A3
  260.         GET
  261.         ECXDS.S    'A',        .BYTE
  262.         ECXD.S    'HL',        .HL
  263.         MOVEQ    #-$23,        D3
  264.         ECXD.S    'IX',        .IX
  265.         MOVEQ    #-$03,        D3
  266.         ECXD.S    'IY',        .IY
  267.         BRA.W    ERROR_ILLEGAL_OPERAND
  268. .HL        BSR    PARSE_GET_KOMMA
  269.         MOVE.W    #"HL"+$8000,    D2
  270.         BSR    PARSE_WORDREGISTER
  271.         BRA.S    .SENDIT
  272. .IX        MOVE.W    #'IX'+$8000,    D2
  273.         BRA.S    .I
  274. .IY        MOVE.W    #'IY'+$8000,    D2
  275. .I        BSR    PARSE_GET_KOMMA
  276.         BSR    PARSE_WORDREGISTER
  277.         MOVE.B    D3,D3
  278.         SENDBYTE
  279. .SENDIT        ADD.B    #$9,D1
  280.         MOVE.B    D1,D3
  281.         SENDBYTE
  282.         SENDEND
  283.         CXDRTS        
  284. .BYTE        BSR    PARSE_GET_KOMMA
  285.         BSR    PARSE_BYTEREGISTER
  286.         CMP.B    #$46,D1
  287.         BHI.W    ERROR_ILLEGAL_OPERAND
  288.         ADD.B    #$80,D1
  289.         BRA.W    SENDBYTEREGADC
  290. ASSEM_CMDAND    BSR    PARSE_BYTEREGISTER
  291.         CMP.B    #$46,D1
  292.         BHI.W    ERROR_ILLEGAL_OPERAND
  293.         ADD.B    #$A0,D1
  294.         BRA.W    SENDBYTEREGADC
  295. ASSEM_CMDBIT    BSR    GET_VALUE
  296.         MOVE.L    D3,D0
  297.         AND.L    #7,D0
  298.         CMP.L    D3,D0
  299.         BNE.W    ERROR_OUT_OF_RANGE_3BIT
  300.         MOVE.B    D3,-(SP)
  301.         BSR    PARSE_GET_KOMMA
  302.         BSR    PARSE_BYTEREGISTER
  303.         CMP.B    #$46,D1
  304.         BHS.W    ERROR_ILLEGAL_OPERAND
  305.         SENDBEGIN
  306.         TST.B    D2
  307.         BEQ.S    .NEXT
  308.         MOVE.B    D2,D3
  309.         TST.B    D5
  310.         BEQ.W    ERROR_ILLEGAL_OPERAND
  311.         SENDBYTE
  312. .NEXT        MOVE.B    #-$35,D3
  313.         SENDBYTE
  314.         TST.B    D5
  315.         BEQ.S    .NOEXT
  316.         MOVE.B    D0,D3
  317.         SENDBYTE
  318. .NOEXT        MOVE.B    (SP)+,D3
  319.         LSL.B    #3,D3
  320.         ADD.B    #$40,D3
  321.         ADD.B    D1,D3
  322.         SENDBYTE
  323.         SENDEND
  324.         CXDRTS
  325. ASSEM_CMDCALL    BSR    PARSE_GETFLAG
  326.         SENDBEGIN
  327.         ADD.B    #$C4,D1
  328. SENDCALL    MOVE.B    D1,D3
  329.         SENDBYTE
  330.         MOVE.B    D0,D3
  331.         SENDBYTE
  332.         ROR.W    #8,D0
  333.         MOVE.B    D0,D3
  334.         SENDBYTE
  335.         SENDEND
  336.         CXDRTS
  337. ASSEM_CMDCCF    SENDBEGIN
  338.         MOVEQ    #$3F,D3
  339.         SENDBYTE
  340.         SENDEND
  341.         CXDRTS
  342. ASSEM_CMDCP    BSR    PARSE_BYTEREGISTER
  343.         CMP.B    #$46,D1
  344.         BHI.W    ERROR_ILLEGAL_OPERAND
  345.         ADD.B    #$B8,D1
  346.         BRA.W    SENDBYTEREGADC
  347. ASSEM_CMDCPD    SENDBEGIN
  348.         MOVEQ    #-$13,D3
  349.         SENDBYTE
  350.         MOVEQ    #-$57,D3
  351.         SENDBYTE
  352.         SENDEND
  353.         CXDRTS
  354. ASSEM_CMDCPDR    SENDBEGIN
  355.         MOVEQ    #-$13,D3
  356.         SENDBYTE
  357.         MOVEQ    #-$47,D3
  358.         SENDBYTE
  359.         SENDEND
  360.         CXDRTS
  361. ASSEM_CMDCPI    SENDBEGIN
  362.         MOVEQ    #-$13,D3
  363.         SENDBYTE
  364.         MOVEQ    #-$5F,D3
  365.         SENDBYTE
  366.         SENDEND
  367.         CXDRTS
  368. ASSEM_CMDCPIR    SENDBEGIN
  369.         MOVEQ    #-$13,D3
  370.         SENDBYTE
  371.         MOVEQ    #-$4F,D3
  372.         SENDBYTE
  373.         SENDEND
  374.         CXDRTS
  375. ASSEM_CMDCPL    SENDBEGIN
  376.         MOVEQ    #$2F,D3
  377.         SENDBYTE
  378.         SENDEND
  379.         CXDRTS
  380. ASSEM_CMDDAA    SENDBEGIN
  381.         MOVEQ    #$27,D3
  382.         SENDBYTE
  383.         SENDEND
  384.         CXDRTS
  385. ASSEM_CMDDEC    BSR    GETINCDEC
  386.         SENDBEGIN
  387.         TST.B    D1
  388.         BEQ.S    .NOTHING
  389.         MOVE.B    D1,D3
  390.         SENDBYTE
  391. .NOTHING    MOVE.B    D0,D3
  392.         SENDBYTE
  393.         TST.B    D5
  394.         BEQ.S    .SLAM
  395.         MOVE.B    D2,D3
  396.         SENDBYTE
  397. .SLAM        SENDEND
  398.         CXDRTS
  399. GETINCDEC    MOVEQ    #0,        D5
  400.         CMP.B    #"(",        (A6)
  401.         BEQ    .PARAN
  402.         NEXTSYMBOL
  403.         NEXTSYMBOLBUFFER    A3
  404.         GET
  405.         ECXDS.S    'A',        .A
  406.         ECXDS.S    'B',        .B
  407.         ECXD.S    'BC',        .BC
  408.         ECXDS.S    'C',        .C
  409.         ECXDS.S    'D',        .D
  410.         ECXD.S    'DE',        .DE
  411.         ECXDS.S    'E',        .E
  412.         ECXDS.S    'H',        .H
  413.         ECXD.S    'HL',        .HL
  414.         ECXD.S    'IX',        .IX
  415.         ECXD.S    'IY',        .IY
  416.         ECXDS.S    'L',        .L
  417.         ECXD.S    'SP',        .SP
  418.         ECXD.S    'HX',        .HX
  419.         ECXD.S    'HY',        .HY
  420.         ECXD.S    'LX',        .LX
  421.         ECXD.S    'LY',        .LY
  422.         BRA    ERROR_ILLEGAL_OPERAND
  423. .A        MOVEQ    #$3D,        D0
  424.         BRA.S    .NOEND
  425. .B        MOVEQ    #$05,        D0
  426.         BRA.S    .NOEND
  427. .BC        MOVEQ    #$0B,        D0
  428.         BRA.S    .NOEND
  429. .C        MOVEQ    #$0D,        D0
  430.         BRA.S    .NOEND
  431. .D        MOVEQ    #$15,        D0
  432.         BRA.S    .NOEND
  433. .DE        MOVEQ    #$1B,        D0
  434.         BRA.S    .NOEND
  435. .E        MOVEQ    #$1D,        D0
  436.         BRA.S    .NOEND
  437. .H        MOVEQ    #$25,        D0
  438.         BRA.S    .NOEND
  439. .HL        MOVEQ    #$2B,        D0
  440. .NOEND        MOVEQ    #0,        D1
  441.         RTS
  442. .IX        MOVEQ    #$2B,        D0
  443. .XEND        MOVEQ    #-$23,        D1
  444.         RTS
  445. .IY        MOVEQ    #$2B,        D0
  446. .YEND        MOVEQ    #-$03,        D1
  447.         RTS
  448. .L        MOVEQ    #$2D,        D0
  449.         BRA.S    .NOEND
  450. .SP        MOVEQ    #$3B,        D0
  451.         BRA.S    .NOEND
  452. .HX        MOVEQ    #$25,        D0
  453.         BRA.S    .XEND
  454. .HY        MOVEQ    #$25,        D0
  455.         BRA.S    .YEND
  456. .LX        MOVEQ    #$2D,        D0
  457.         BRA.S    .XEND
  458. .LY        MOVEQ    #$2D,        D0
  459.         BRA.S    .YEND
  460. .PARAN        ADDQ.W    #1,        A6
  461.         NEXTSYMBOL
  462.         NEXTSYMBOLBUFFER    A3
  463.         GET
  464.         ECXD.S    'HL',        .AHL
  465.         ECXD.S    'IX',        .AIX
  466.         ECXD.S    'IY',        .AIY
  467.         BRA    ERROR_ILLEGAL_OPERAND
  468. .AHL        CMP.B    #")",        (A6)+
  469.         BNE    ERROR_ILLEGAL_OPERAND
  470.         MOVEQ    #$35,        D0
  471.         BRA.S    .NOEND
  472. .AIX        BSR    .GETIXIY
  473.         MOVE.B    #$35,        D0
  474.         BRA.S    .XEND
  475. .AIY        BSR    .GETIXIY
  476.         MOVE.B    #$35,        D0
  477.         BRA.S    .YEND
  478. .GETIXIY    MOVE.B    (A6),        D0
  479.         CMP.B    #"+",        D0
  480.         BEQ.S    .GETVALUE
  481.         CMP.B    #"-",        D0
  482.         BNE    ERROR_ILLEGAL_OPERAND
  483. .GETVALUE    BSR    GET_VALUE
  484.         MOVE.L    D3,        D2
  485.         EXT.W    D2
  486.         EXT.L    D2
  487.         CMP.L    D3,        D2
  488.         BNE.W    ERROR_OUT_OF_RANGE_8BIT
  489.         CMP.B    #")",        (A6)+
  490.         BNE    ERROR_ILLEGAL_OPERAND
  491.         ST    D5
  492.         RTS
  493. ASSEM_CMDDI    SENDBEGIN
  494.         MOVEQ    #-$0D,D3
  495.         SENDBYTE
  496.         SENDEND
  497.         CXDRTS
  498. ASSEM_CMDDJNZ    BSR    GET_VALUE
  499.         MOVE.L    D3,        -(SP)
  500.         MOVEQ    #$10,        D3
  501.         BSR    SENDABYTE
  502.         MOVE.L    (SP)+,        D3
  503.         BRA    ASSEM_CMDJR\.SENDLORT
  504. ASSEM_CMDEI    MOVEQ    #-$05,D3
  505.         BSR    SENDABYTE
  506.         CXDRTS
  507. ASSEM_CMDEX    BSR.S    .0
  508.         SENDBEGIN
  509.         TST.B    D1
  510.         BEQ.S    .1
  511.         MOVE.B    D1,D3
  512.         SENDBYTE
  513. .1        MOVE.B    D0,D3
  514.         SENDBYTE
  515.         SENDEND
  516.         CXDRTS
  517. .0        CMP.B    #"(",        (A6)
  518.         BEQ.S    .PARA
  519.         NEXTSYMBOL
  520.         NEXTSYMBOLBUFFER    A3
  521.         GET
  522.         ECXD.S    'AF',        .AF
  523.         ECXD.S    'DE',        .DE
  524.         BRA    ERROR_ILLEGAL_OPERAND
  525. .AF        BSR    PARSE_GET_KOMMA
  526.         NEXTSYMBOL
  527.         NEXTSYMBOLBUFFER    A3
  528.         GET
  529.         ECXD.S    'AF',        .AF2
  530.         BRA    ERROR_ILLEGAL_OPERAND
  531. .AF2        CMP.B    #"'",        (A6)+
  532.         BNE    ERROR_ILLEGAL_OPERAND
  533.         MOVEQ    #$08,        D0
  534.         MOVEQ    #0,        D1
  535.         RTS
  536. .DE        BSR    PARSE_GET_KOMMA
  537.         NEXTSYMBOL
  538.         NEXTSYMBOLBUFFER    A3
  539.         GET
  540.         ECXD.S    'HL',        .DEHL
  541.         BRA    ERROR_ILLEGAL_OPERAND        
  542. .DEHL        MOVEQ    #-$15,        D0
  543.         MOVEQ    #0,        D1
  544.         RTS
  545. .PARA        ADDQ.W    #1,        A6
  546.         NEXTSYMBOL
  547.         NEXTSYMBOLBUFFER    A3
  548.         GET
  549.         ECXD.S    'SP',        .SP
  550.         BRA    ERROR_ILLEGAL_OPERAND
  551. .SP        CMP.B    #")",        (A6)+
  552.         BSR    PARSE_GET_KOMMA
  553.         NEXTSYMBOL
  554.         NEXTSYMBOLBUFFER    A3
  555.         GET
  556.         ECXD.S    'HL',        .HL
  557.         ECXD.S    'IX',        .IX
  558.         ECXD.S    'IY',        .IY
  559.         BRA    ERROR_ILLEGAL_OPERAND
  560. .HL        MOVEQ    #-$1D,        D0
  561.         MOVEQ    #0,        D1
  562.         RTS
  563. .IX        MOVEQ    #-$1D,        D0
  564.         MOVEQ    #-$23,        D1
  565.         RTS
  566. .IY        MOVEQ    #-$1D,        D0
  567.         MOVEQ    #-$03,        D1
  568.         RTS
  569.  
  570. ASSEM_CMDEXX    MOVEQ    #-$27,D3
  571.         BSR    SENDABYTE
  572.         CXDRTS
  573. ASSEM_CMDHALT    MOVEQ    #$76,D3
  574.         BSR    SENDABYTE
  575.         CXDRTS
  576. ASSEM_CMDIM    BSR    GET_VALUE
  577.         CMP.L    #2,        D3
  578.         BHI.W    ERROR_MUST_0_2
  579.         MOVE.B    .TAB(PC,D3.W),    D1
  580.         BSR    SEND_ED
  581.         MOVE.B    D1,        D3
  582.         BSR    SENDABYTE
  583.         CXDRTS
  584. .TAB        DC.B    $46,$56,$5E
  585.         EVEN
  586. ASSEM_CMDIN    BSR    .GETIN
  587.         SENDBEGIN
  588.         MOVE.B    D1,        D3
  589.         SENDBYTE
  590.         MOVE.B    D0,        D3
  591.         SENDBYTE
  592.         SENDEND
  593.         CXDRTS
  594. .GETIN        NEXTSYMBOL
  595.         NEXTSYMBOLBUFFER    A3
  596.         GET
  597.         ECXDS    'A',        .A
  598.         ECXDS    'B',        .B
  599.         ECXDS    'C',        .C
  600.         ECXDS    'D',        .D
  601.         ECXDS    'E',        .E
  602.         ECXDS    'H',        .H
  603.         ECXDS    'L',        .L
  604.         BRA    ERROR_ILLEGAL_OPERAND
  605. .A        MOVEQ    #$78,        D0
  606.         MOVEQ    #-$13,        D1
  607.         BRA.S    .GOON1
  608. .B        MOVEQ    #$40,        D0
  609.         BRA.S    .GOON
  610. .C        MOVEQ    #$48,        D0
  611.         BRA.S    .GOON
  612. .D        MOVEQ    #$50,        D0
  613.         BRA.S    .GOON
  614. .E        MOVEQ    #$58,        D0
  615.         BRA.S    .GOON
  616. .H        MOVEQ    #$60,        D0
  617.         BRA.S    .GOON
  618. .L        MOVEQ    #$68,        D0
  619. .GOON        MOVEQ    #-$13,        D1
  620.         MOVEM.W    D0-D1,        -(SP)
  621.         BSR    PARSE_GET_KOMMA
  622.         CMP.B    #"(",        (A6)+
  623.         BNE.W    ERROR_ILLEGAL_OPERAND
  624.         NEXTSYMBOL
  625.         NEXTSYMBOLBUFFER    A3
  626.         GET
  627.         ECXDS    'C',        .GOTC
  628.         BRA    ERROR_ILLEGAL_OPERAND
  629. .GOON1        MOVEM.W    D0-D1,        -(SP)
  630.         BSR    PARSE_GET_KOMMA
  631.         CMP.B    #"(",        (A6)+
  632.         BNE.W    ERROR_ILLEGAL_OPERAND
  633.         NEXTSYMBOL
  634.         NEXTSYMBOLBUFFER    A3
  635.         GET
  636.         ECXDS    'C',        .GOTC
  637.         NEXTLABEL
  638.         CMP.B    #")",        (A6)+
  639.         BNE.W    ERROR_ILLEGAL_OPERAND
  640.         MOVEM.W    (SP)+,        D0-D1
  641.         MOVE.L    D3,        D0
  642.         MOVEQ    #-$25,        D1
  643.         RTS
  644. .GOTC        CMP.B    #")",        (A6)+
  645.         BNE.W    ERROR_ILLEGAL_OPERAND
  646.         MOVEM.W    (SP)+,        D0-D1
  647.         RTS
  648. ASSEM_CMDINC    BSR    GETINCDEC
  649.         SENDBEGIN
  650.         TST.B    D1
  651.         BEQ.S    .NOTHING
  652.         MOVE.B    D1,D3
  653.         SENDBYTE
  654. .NOTHING    MOVE.B    D0,D3
  655.         AND.B    #%11,D0
  656.         CMP.B    #%11,D0
  657.         BNE.S    .SUB
  658.         EOR.B    #8,D3
  659.         BRA.S    .GOON
  660. .SUB        SUBQ.B    #1,D3
  661. .GOON        SENDBYTE
  662.         TST.B    D5
  663.         BEQ.S    .SLAM
  664.         MOVE.B    D2,D3
  665.         SENDBYTE
  666. .SLAM        SENDEND
  667.         CXDRTS
  668. ASSEM_CMDIND    BSR.S    SEND_ED
  669.         MOVEQ    #-$56,D3
  670.         BSR    SENDABYTE
  671.         CXDRTS
  672. ASSEM_CMDINDR    BSR.S    SEND_ED
  673.         MOVEQ    #-$46,D3
  674.         BSR    SENDABYTE
  675.         CXDRTS
  676. SEND_ED        MOVEQ    #-$13,D3
  677.         BSR    SENDABYTE
  678.         RTS
  679. ASSEM_CMDINI    BSR.S    SEND_ED
  680.         MOVEQ    #-$5E,D3
  681.         BSR    SENDABYTE
  682.         CXDRTS
  683. ASSEM_CMDINIR    BSR.S    SEND_ED
  684.         MOVEQ    #-$4E,D3
  685.         BSR    SENDABYTE
  686.         CXDRTS
  687. ASSEM_CMDJP    CMP.B    #"(",        (A6)
  688.         BEQ.S    .PARA
  689.         BSR    PARSE_GETFLAG
  690.         SENDBEGIN
  691.         CMP.B    #$CD-$C4,D1
  692.         BNE.S    .OK
  693.         MOVEQ    #1,D1
  694. .OK        ADD.B    #$C2,D1
  695.         BRA    SENDCALL
  696. .PARA        ADDQ.W    #1,        A6
  697.         NEXTSYMBOL
  698.         NEXTSYMBOLBUFFER    A3
  699.         GET
  700.         ECXD.S    'HL',        .HL
  701.         ECXD.S    'IX',        .IX
  702.         ECXD.S    'IY',        .IY
  703.         BRA    ERROR_ILLEGAL_OPERAND
  704. .IX        CMP.B    #")",        (A6)+
  705.         BNE    ERROR_ILLEGAL_OPERAND
  706.         SENDBEGIN
  707.         MOVEQ    #-$23,        D3
  708.         SENDBYTE
  709.         BRA.S    .LAST
  710. .HL        CMP.B    #")",        (A6)+
  711.         BNE    ERROR_ILLEGAL_OPERAND
  712.         SENDBEGIN
  713. .LAST        MOVEQ    #-$17,        D3
  714.         SENDBYTE
  715.         SENDEND
  716.         CXDRTS
  717. .IY        CMP.B    #")",        (A6)+
  718.         BNE    ERROR_ILLEGAL_OPERAND
  719.         SENDBEGIN
  720.         MOVEQ    #-3,        D3
  721.         SENDBYTE
  722.         BRA.S    .LAST
  723.  
  724. ASSEM_CMDJR    NEXTSYMBOL
  725.         CMP.B    #NS_ALABEL,    D1
  726.         BNE.S    .AVALUE
  727.         NEXTSYMBOLBUFFER    A3
  728.         GET
  729.         ECXDS.S    'C',        .C
  730.         ECXD.S    'NC',        .NC
  731.         ECXD.S    'NZ',        .NZ
  732.         ECXDS.S    'Z',        .Z
  733.         MOVEQ    #$18,        D3
  734.         BSR    SENDABYTE
  735.         NEXTLABEL
  736.         BRA.S    .SENDLORT
  737. .AVALUE        MOVE.L    D3,        -(SP)
  738.         MOVEQ    #$18,        D3
  739.         BSR    SENDABYTE
  740.         MOVE.L    (SP)+,        D3
  741.         BRA.S    .SENDLORT
  742. .C        MOVEQ    #$38,        D3
  743.         BSR    SENDABYTE
  744.         BRA.S    .GETKOMMA
  745. .NC        MOVEQ    #$30,        D3
  746.         BSR    SENDABYTE
  747.         BRA.S    .GETKOMMA
  748. .NZ        MOVEQ    #$20,        D3
  749.         BSR    SENDABYTE
  750.         BRA.S    .GETKOMMA
  751. .Z        MOVEQ    #$28,        D3
  752.         BSR    SENDABYTE
  753. .GETKOMMA    NEXTKOMMA
  754. .GETLABEL    BSR    GET_VALUE
  755. .SENDLORT    BSR    GET_ADDR        D1-D2 ARE KILLED
  756.         TST.W    D7
  757.         BMI.S    .PASS1
  758.         SUB.L    D0,        D3
  759.         SUBQ.W    #1,        D3
  760.         MOVE.W    D3,        D0
  761.         EXT.W    D0
  762.         EXT.L    D0
  763.         CMP.L    D0,        D3
  764.         BNE.W    ERROR_OUT_OF_RANGE_8BIT
  765. .PASS1        BSR    SENDABYTE
  766.         CXDRTS
  767. SENDABYTE    SENDBEGIN
  768.         SENDBYTE
  769.         SENDEND
  770.         RTS
  771.  
  772. ASSEM_CMDLD    BSR    .0
  773.         SENDBEGIN
  774.         MOVE.W    D3,-(SP)
  775.         TST.B    D2
  776.         BEQ.S    .NOTHING
  777.         MOVE.B    D2,D3
  778.         SENDBYTE
  779. .NOTHING    MOVE.B    D1,D3
  780.         SENDBYTE
  781.         TST.B    D6
  782.         BEQ.S    .NOTD6
  783.         MOVE.B    D0,D3
  784.         SENDBYTE
  785. .NOTD6        MOVE.W    (SP)+,D3
  786.         TST.B    D5
  787.         BEQ.S    .NOTD5
  788.         SENDBYTE
  789. .NOTD5        SENDEND
  790.         CXDRTS
  791.  
  792. .0        MOVEQ    #0,        D5
  793.         MOVEQ    #0,        D6
  794.         CMP.B    #"(",        (A6)
  795.         BEQ.W    .PARA
  796.         BSR    GETFIRSTWORD
  797.         ECXDS.S    'A',        .LDA
  798.         ECXDS.S    'B',        .LDB
  799.         ECXD    'BC',        .LDBC
  800.         ECXDS    'C',        .LDC
  801.         ECXDS    'D',        .LDD
  802.         ECXD    'DE',        .LDDE
  803.         ECXDS    'E',        .LDE
  804.         ECXDS    'H',        .LDH
  805.         ECXD    'HL',        .LDHL
  806.         ECXDS    'I',        .LDI
  807.         ECXD    'IX',        .LDIX
  808.         ECXD    'IY',        .LDIY
  809.         ECXDS    'L',        .LDL
  810.         ECXDS    'R',        .LDR
  811.         ECXD    'SP',        .LDSP
  812.         BRA    ERROR_ILLEGAL_OPERAND
  813. .LDA        BSR    PARSE_GET_KOMMA
  814.         BSR    PARSE_LDABYTE
  815.         EOR.B    #$78,        D1
  816.         RTS
  817. .LDB        BSR    PARSE_GET_KOMMA
  818.         BSR    PARSE_BYTEREGISTER
  819.         EOR.B    #$40,        D1
  820.         RTS
  821. .LDBC        BSR    GETAWORDVALUE
  822.         ST    D6
  823.         TST.B    D5
  824.         BNE.S    .LDBCP
  825.         ST    D5
  826.         MOVEQ    #$01,        D1
  827.         MOVEQ    #0,        D2
  828.         RTS
  829. .LDBCP        MOVEQ    #$4B,        D1
  830.         MOVEQ    #-$13,        D2
  831.         RTS
  832. .LDC        BSR    PARSE_GET_KOMMA
  833.         BSR    PARSE_BYTEREGISTER
  834.         EOR.B    #$48,        D1
  835.         RTS
  836. .LDD        BSR    PARSE_GET_KOMMA
  837.         BSR    PARSE_BYTEREGISTER
  838.         EOR.B    #$50,        D1
  839.         RTS
  840. .LDDE        BSR    GETAWORDVALUE
  841.         ST    D6
  842.         TST.B    D5
  843.         BNE.S    .LDDEP
  844.         ST    D5
  845.         MOVEQ    #$11,        D1
  846.         MOVEQ    #0,        D2
  847.         RTS
  848. .LDDEP        MOVEQ    #$5B,        D1
  849.         MOVEQ    #-$13,        D2
  850.         RTS
  851. .LDE        BSR    PARSE_GET_KOMMA
  852.         BSR    PARSE_BYTEREGISTER
  853.         EOR.B    #$58,        D1
  854.         RTS
  855. .LDH        BSR    PARSE_GET_KOMMA
  856.         BSR    PARSE_BYTEREGISTER
  857.         EOR.B    #$60,        D1
  858.         RTS
  859. .LDHL        BSR    GETAWORDVALUE
  860.         ST    D6
  861.         TST.B    D5
  862.         BNE.S    .LDHLP
  863.         ST    D5
  864.         MOVEQ    #$21,        D1
  865.         MOVEQ    #0,        D2
  866.         RTS
  867. .LDHLP        MOVEQ    #$2A,        D1
  868.         MOVEQ    #0,        D2
  869.         RTS
  870. .LDI        BSR    CHECKA
  871.         MOVEQ    #-$13,        D2
  872.         MOVEQ    #$47,        D1
  873.         RTS
  874. .LDIX        BSR    .LDHL
  875.         MOVEQ    #-$23,        D2
  876.         RTS
  877. .LDIY        BSR    .LDHL
  878.         MOVEQ    #-$03,        D2
  879.         RTS
  880.  
  881. .LDL        BSR    PARSE_GET_KOMMA
  882.         BSR    PARSE_BYTEREGISTER
  883.         EOR.B    #$68,        D1
  884.         RTS
  885. .LDR        BSR    CHECKA
  886.         MOVEQ    #-$13,        D2
  887.         MOVEQ    #$4F,        D1
  888.         RTS
  889. .LDSP        BSR    PARSE_GET_KOMMA
  890.         CMP.B    #"(",        (A6)
  891.         BEQ.S    .LDSPP
  892.         NEXTSYMBOL
  893.         CMP.B    #NS_ALABEL,    D1
  894.         BNE.S    .LDSPVAL
  895.         NEXTSYMBOLBUFFER    A3
  896.         GET
  897.         ECXD.S    'HL',        .LDSPHL
  898.         ECXD.S    'IX',        .LDSPIX
  899.         ECXD.S    'IY',        .LDSPIY
  900.         NEXTLABEL
  901. .LDSPVAL    MOVE.L    D3,        D0
  902.         AND.L    #$FFFF,        D0
  903.         CMP.L    D3,        D0
  904.         BNE.W    ERROR_OUT_OF_RANGE_16BIT
  905.         LSR.W    #8,        D3
  906.         MOVEQ    #$31,        D1
  907.         MOVEQ    #0,        D2
  908.         ST    D5
  909.         ST    D6
  910.         RTS
  911. .LDSPP        ADDQ.W    #1,        A6
  912.         BSR    GET_VALUE
  913.         BSR.S    .LDSPVAL
  914.         CMP.B    #")",        (A6)+
  915.         BNE    ERROR_ILLEGAL_OPERAND
  916.         MOVEQ    #$7B,        D1
  917.         MOVEQ    #-$13,        D2
  918.         RTS
  919. .LDSPHL        MOVEQ    #-7,        D1
  920.         MOVEQ    #0,        D2
  921.         RTS
  922. .LDSPIX        MOVEQ    #-7,        D1
  923.         MOVEQ    #-$23,        D2
  924.         RTS
  925. .LDSPIY        MOVEQ    #-7,        D1
  926.         MOVEQ    #-$03,        D2
  927.         RTS
  928.  
  929. .PARA        ADDQ.W    #1,        A6
  930.         NEXTSYMBOL
  931.         CMP.B    #NS_ALABEL,    D1
  932.         BNE.S    .AVALUE
  933.         NEXTSYMBOLBUFFER    A3
  934.         GET
  935.         ECXD    'BC',        .BC
  936.         ECXD    'DE',        .DE
  937.         ECXD    'HL',        .HL
  938.         ECXD    'IX',        .IX
  939.         ECXD    'IY',        .IY
  940.         NEXTLABEL
  941.         BRA.s    .AVALUE1
  942. .AVALUE        GETLABEL
  943. .AVALUE1    CMP.B    #")",        (A6)+
  944.         BNE    ERROR_ILLEGAL_OPERAND
  945.         MOVE.L    D3,        D0
  946.         AND.L    #$FFFF,        D0
  947.         CMP.L    D3,        D0
  948.         BNE.W    ERROR_OUT_OF_RANGE_16BIT
  949.         LSR.W    #8,        D3
  950.         MOVE.W    D0,        -(SP)
  951.         ST    D5
  952.         ST    D6
  953.         BSR    PARSE_GET_KOMMA
  954.         NEXTSYMBOL
  955.         NEXTSYMBOLBUFFER    A3
  956.         GET
  957.         ECXDS.S    'A',        .NNA
  958.         ECXD.S    'BC',        .NNBC
  959.         ECXD.S    'DE',        .NNDE
  960.         ECXD.S    'HL',        .NNHL
  961.         ECXD.S    'IX',        .NNIX
  962.         ECXD.S    'IY',        .NNIY
  963.         ECXD.S    'SP',        .NNSP
  964.         BRA    ERROR_ILLEGAL_OPERAND
  965. .NNA        MOVEQ    #0,        D2
  966.         MOVEQ    #$32,        D1
  967.         MOVE.W    (SP)+,        D0
  968.         RTS
  969. .NNBC        MOVEQ    #-$13,        D2
  970.         MOVEQ    #$43,        D1
  971.         MOVE.W    (SP)+,        D0
  972.         RTS
  973. .NNDE        MOVEQ    #-$13,        D2
  974.         MOVEQ    #$53,        D1
  975.         MOVE.W    (SP)+,        D0
  976.         RTS
  977. .NNHL        MOVEQ    #0,        D2
  978.         MOVEQ    #$22,        D1
  979.         MOVE.W    (SP)+,        D0
  980.         RTS
  981. .NNIX        MOVEQ    #-$23,        D2
  982.         MOVEQ    #$22,        D1
  983.         MOVE.W    (SP)+,        D0
  984.         RTS
  985. .NNIY        MOVEQ    #-$03,        D2
  986.         MOVEQ    #$22,        D1
  987.         MOVE.W    (SP)+,        D0
  988.         RTS
  989. .NNSP        MOVEQ    #-$13,        D2
  990.         MOVEQ    #$73,        D1
  991.         MOVE.W    (SP)+,        D0
  992.         RTS
  993. .BC        CMP.B    #")",        (A6)+
  994.         BNE    ERROR_ILLEGAL_OPERAND
  995.         BSR.W    CHECKA
  996.         MOVEQ    #$02,        D1
  997.         RTS
  998. .DE        CMP.B    #")",        (A6)+
  999.         BNE    ERROR_ILLEGAL_OPERAND
  1000.         BSR.W    CHECKA
  1001.         MOVEQ    #$12,        D1
  1002.         RTS
  1003. .HL        CMP.B    #")",        (A6)+
  1004.         BNE.W    ERROR_ILLEGAL_OPERAND
  1005.         BSR    PARSE_GET_KOMMA
  1006.         BSR    PARSE_BYTEREGISTER
  1007.         CMP.B    #6,        D1
  1008.         BEQ    ERROR_ILLEGAL_OPERAND
  1009.         EOR.B    #$70,        D1
  1010.         RTS
  1011. .IY        BSR.S    .IX
  1012.         MOVEQ    #-$03,        D2
  1013.         RTS
  1014. .IX        MOVE.B    (A6),        D0
  1015.         CMP.B    #"+",        D0
  1016.         BEQ.S    .IX1
  1017.         CMP.B    #"-",        D0
  1018.         BNE.W    ERROR_ILLEGAL_OPERAND
  1019. .IX1        BSR    GET_VALUE
  1020.         CMP.B    #")",        (A6)+
  1021.         BNE.W    ERROR_ILLEGAL_OPERAND
  1022.         MOVE.L    D3,        D0
  1023.         EXT.W    D0
  1024.         EXT.L    D0
  1025.         CMP.L    D0,        D3
  1026.         BNE.W    ERROR_OUT_OF_RANGE_8BIT
  1027.         MOVE.W    D0,        -(SP)
  1028.         BSR    PARSE_GET_KOMMA
  1029.         BSR    PARSE_BYTEREGISTER
  1030.         CMP.B    #6,        D1
  1031.         BEQ    ERROR_ILLEGAL_OPERAND
  1032.         MOVE.W    (SP)+,        D0
  1033.         ST    D6
  1034.         MOVE.B    #$DD,        D2
  1035.         EOR.B    #$70,        D1
  1036.         RTS
  1037.  
  1038. CHECKA        BSR    GETNEXTWORD
  1039.         CMP.W    #"A"<<8+$8000,    D0
  1040.         BNE.W    ERROR_ILLEGAL_OPERAND
  1041.         RTS
  1042.  
  1043. GETAWORDVALUE    BSR    PARSE_GET_KOMMA
  1044.         MOVEQ    #0,        D5
  1045.         CMP.B    #"(",        (A6)
  1046.         BNE.S    .GETVAL
  1047.         ADDQ.W    #1,        A6
  1048.         BSR.S    .GETVAL
  1049.         CMP.B    #")",        (A6)+
  1050.         BNE.W    ERROR_ILLEGAL_OPERAND
  1051.         MOVEQ    #-1,        D5
  1052.         RTS
  1053. .GETVAL        BSR    GET_VALUE
  1054.         MOVE.L    D3,        D0
  1055.         AND.L    #$FFFF,        D0
  1056.         CMP.L    D3,        D0
  1057.         BNE.W    ERROR_OUT_OF_RANGE_16BIT
  1058.         LSR.W    #8,        D3
  1059.         RTS
  1060. ;D0=I STEP
  1061. ;D1=COMMAND
  1062. ;D2=$DD,$FD
  1063. ;D3=COMMAND VAL
  1064.  
  1065. ;A=7
  1066. ;B=0,0
  1067. ;C=1,0
  1068. ;D=2,0
  1069. ;E=3,0
  1070. ;H=4,0
  1071. ;HX=4,$DD
  1072. ;HY=4,$FD
  1073. ;L=5,0
  1074. ;LX=5,$DD
  1075. ;LY=5,$FD
  1076. ;(HL)=6,0
  1077. ;(IX,N)=6,$DD,#
  1078. ;(IY,N)=6,$FD,#
  1079. ;#=$46
  1080.  
  1081. GETNEXTWORD    BSR    PARSE_GET_KOMMA
  1082. GETFIRSTWORD    NEXTSYMBOL
  1083.         NEXTSYMBOLBUFFER    A3
  1084.         GET
  1085.         RTS
  1086. ASSEM_CMDLDD    BSR    SEND_ED
  1087.         MOVEQ    #-$58,        D3
  1088.         BSR.W    SENDABYTE
  1089.         CXDRTS
  1090. ASSEM_CMDLDDR    BSR    SEND_ED
  1091.         MOVEQ    #-$48,        D3
  1092.         BSR.W    SENDABYTE
  1093.         CXDRTS
  1094. ASSEM_CMDLDI    BSR    SEND_ED
  1095.         MOVEQ    #-$60,        D3
  1096.         BSR.W    SENDABYTE
  1097.         CXDRTS
  1098. ASSEM_CMDLDIR    BSR    SEND_ED
  1099.         MOVEQ    #-$50,        D3
  1100.         BSR.W    SENDABYTE
  1101.         CXDRTS
  1102. ASSEM_CMDNEG    BSR    SEND_ED
  1103.         MOVEQ    #$44,        D3
  1104.         BSR.W    SENDABYTE
  1105.         CXDRTS
  1106. ASSEM_CMDNOP    MOVEQ    #$00,        D3
  1107.         BSR.W    SENDABYTE
  1108.         CXDRTS
  1109. ASSEM_CMDOR    BSR    PARSE_BYTEREGISTER
  1110.         CMP.B    #$46,D1
  1111.         BHI.W    ERROR_ILLEGAL_OPERAND
  1112.         ADD.B    #$B0,D1
  1113.         BRA.W    SENDBYTEREGADC
  1114. ASSEM_CMDOTDR    BSR    SEND_ED
  1115.         MOVEQ    #-$78,        D3
  1116.         BSR.W    SENDABYTE
  1117.         CXDRTS
  1118. ASSEM_CMDOTIR    BSR    SEND_ED
  1119.         MOVEQ    #-$7D,        D3
  1120.         BSR.W    SENDABYTE
  1121.         CXDRTS
  1122. ASSEM_CMDOUT    BSR    .GETOUT
  1123.         SENDBEGIN
  1124.         MOVE.B    D1,        D3
  1125.         SENDBYTE
  1126.         MOVE.B    D0,        D3
  1127.         SENDBYTE
  1128.         SENDEND
  1129.         CXDRTS
  1130.  
  1131. .GETOUT        CMP.B    #"(",        (A6)+
  1132.         BNE.W    ERROR_ILLEGAL_OPERAND
  1133.         NEXTSYMBOL
  1134.         NEXTSYMBOLBUFFER    A3
  1135.         GET
  1136.         ECXDS    'C',        .GOTC
  1137.         NEXTLABEL
  1138.         MOVE.L    D3,        D0
  1139.         MOVE.W    D0,        -(SP)
  1140.         CMP.B    #")",        (A6)+
  1141.         BNE.W    ERROR_ILLEGAL_OPERAND
  1142.         BSR    PARSE_GET_KOMMA
  1143.         NEXTSYMBOL
  1144.         NEXTSYMBOLBUFFER    A3
  1145.         GET
  1146.         CMP.W    #'A'<<8+$8000,    D0
  1147.         BNE.W    ERROR_ILLEGAL_OPERAND
  1148.         MOVE.W    (SP)+,        D0
  1149.         MOVEQ    #-$2D,        D1
  1150.         RTS
  1151. .GOTC        CMP.B    #")",        (A6)+
  1152.         BNE.W    ERROR_ILLEGAL_OPERAND
  1153.         BSR    PARSE_GET_KOMMA
  1154.         NEXTSYMBOL
  1155.         NEXTSYMBOLBUFFER    A3
  1156.         GET
  1157.         ECXDS    'A',        .A
  1158.         ECXDS    'B',        .B
  1159.         ECXDS    'C',        .C
  1160.         ECXDS    'D',        .D
  1161.         ECXDS    'E',        .E
  1162.         ECXDS    'H',        .H
  1163.         ECXDS    'L',        .L
  1164.         BRA    ERROR_ILLEGAL_OPERAND
  1165. .A        MOVEQ    #$79,        D0
  1166.         MOVEQ    #-$13,        D1
  1167.         RTS
  1168. .B        MOVEQ    #$41,        D0
  1169.         MOVEQ    #-$13,        D1
  1170.         RTS
  1171. .C        MOVEQ    #$49,        D0
  1172.         MOVEQ    #-$13,        D1
  1173.         RTS
  1174. .D        MOVEQ    #$51,        D0
  1175.         MOVEQ    #-$13,        D1
  1176.         RTS
  1177. .E        MOVEQ    #$59,        D0
  1178.         MOVEQ    #-$13,        D1
  1179.         RTS
  1180. .H        MOVEQ    #$61,        D0
  1181.         MOVEQ    #-$13,        D1
  1182.         RTS
  1183. .L        MOVEQ    #$69,        D0
  1184.         MOVEQ    #-$13,        D1
  1185.         RTS
  1186.  
  1187. ASSEM_CMDOUTD    BSR    SEND_ED
  1188.         MOVEQ    #-$55,        D3
  1189.         BSR.W    SENDABYTE
  1190.         CXDRTS
  1191. ASSEM_CMDOUTI    BSR    SEND_ED
  1192.         MOVEQ    #-$5D,        D3
  1193.         BSR.W    SENDABYTE
  1194.         CXDRTS
  1195. ASSEM_CMDPOP    BSR    GETPUSHPOP
  1196.         TST.B    D1
  1197.         BEQ.S    .0
  1198.         MOVE.B    D1,D3
  1199.         BSR    SENDABYTE
  1200. .0        MOVE.B    D0,D3
  1201.         BSR    SENDABYTE
  1202.         CXDRTS
  1203. ASSEM_CMDPUSH    BSR    GETPUSHPOP
  1204.         TST.B    D1
  1205.         BEQ.S    .0
  1206.         MOVE.B    D1,D3
  1207.         BSR    SENDABYTE
  1208. .0        ADDQ.B    #4,D0
  1209.         MOVE.B    D0,D3
  1210.         BSR    SENDABYTE
  1211.         CXDRTS
  1212. GETPUSHPOP    NEXTSYMBOL
  1213.         NEXTSYMBOLBUFFER    A3
  1214.         GET
  1215.         ECXD    'AF',        .AF
  1216.         ECXD    'BC',        .BC
  1217.         ECXD    'DE',        .DE
  1218.         ECXD    'HL',        .HL
  1219.         ECXD    'IX',        .IX
  1220.         ECXD    'IY',        .IY
  1221.         BRA    ERROR_ILLEGAL_OPERAND
  1222. .AF        MOVEQ    #-$0F,        D0
  1223.         MOVEQ    #0,        D1
  1224.         RTS
  1225. .BC        MOVE.W    #-$3F,        D0
  1226.         MOVEQ    #0,        D1
  1227.         RTS
  1228. .DE        MOVE.W    #-$2F,        D0
  1229.         MOVEQ    #0,        D1
  1230.         RTS
  1231. .HL        MOVE.W    #-$1F,        D0
  1232.         MOVEQ    #0,        D1
  1233.         RTS
  1234. .IX        MOVE.W    #-$1F,        D0
  1235.         MOVEQ    #-$23,        D1
  1236.         RTS
  1237. .IY        MOVE.W    #-$1F,        D0
  1238.         MOVEQ    #-$03,        D1
  1239.         RTS
  1240. ASSEM_CMDRES    BSR    GET_VALUE
  1241.         MOVE.L    D3,D0
  1242.         AND.L    #7,D0
  1243.         CMP.L    D3,D0
  1244.         BNE.W    ERROR_OUT_OF_RANGE_3BIT
  1245.         MOVE.B    D3,-(SP)
  1246.         BSR    PARSE_GET_KOMMA
  1247.         BSR    PARSE_BYTEREGISTER
  1248.         CMP.B    #$46,D1
  1249.         BHS.W    ERROR_ILLEGAL_OPERAND
  1250.         SENDBEGIN
  1251.         TST.B    D2
  1252.         BEQ.S    .NEXT
  1253.         MOVE.B    D2,D3
  1254.         TST.B    D5
  1255.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1256.         SENDBYTE
  1257. .NEXT        MOVE.B    #-$35,D3
  1258.         SENDBYTE
  1259.         TST.B    D5
  1260.         BEQ.S    .NOEXT
  1261.         MOVE.B    D0,D3
  1262.         SENDBYTE
  1263. .NOEXT        MOVE.B    (SP)+,D3
  1264.         LSL.B    #3,D3
  1265.         ADD.B    #$80,D3
  1266.         ADD.B    D1,D3
  1267.         SENDBYTE
  1268.         SENDEND
  1269.         CXDRTS
  1270. ASSEM_CMDRET    BSR    .GETIT
  1271.         BSR    SENDABYTE
  1272.         CXDRTS
  1273. .GETIT        TST.B    (A6)
  1274.         BEQ.S    .NOTHING
  1275.         NEXTSYMBOL
  1276.         NEXTSYMBOLBUFFER    A3
  1277.         GET
  1278.         ECXDS.S    'C',        .C
  1279.         ECXDS.S    'M',        .M
  1280.         ECXD.S    'NC',        .NC
  1281.         ECXD.S    'NZ',        .NZ
  1282.         ECXDS.S    'P',        .P
  1283.         ECXD.S    'PE',        .PE
  1284.         ECXD.S    'PO',        .PO
  1285.         ECXDS.S    'Z',        .Z
  1286. .NOTHING    MOVE.W    #$C9,        D3
  1287.         RTS
  1288. .C        MOVE.W    #$D8,        D3
  1289.         RTS
  1290. .M        MOVE.W    #$F8,        D3
  1291.         RTS
  1292. .NC        MOVE.W    #$D0,        D3
  1293.         RTS
  1294. .NZ        MOVE.W    #$C0,        D3
  1295.         RTS
  1296. .P        MOVE.W    #$F0,        D3
  1297.         RTS
  1298. .PE        MOVE.W    #$E8,        D3
  1299.         RTS
  1300. .PO        MOVE.W    #$E0,        D3
  1301.         RTS
  1302. .Z        MOVE.W    #$C8,        D3
  1303.         RTS
  1304. ASSEM_CMDRETI    BSR    SEND_ED
  1305.         MOVEQ    #$4D,D3
  1306.         BSR    SENDABYTE
  1307.         CXDRTS
  1308. ASSEM_CMDRETN    BSR    SEND_ED
  1309.         MOVEQ    #$45,D3
  1310.         BSR    SENDABYTE
  1311.         CXDRTS
  1312. ASSEM_CMDRL    BSR    PARSE_BYTEREGISTER
  1313.         CMP.B    #$46,D1
  1314.         BHS.W    ERROR_ILLEGAL_OPERAND
  1315.         SENDBEGIN
  1316.         TST.B    D2
  1317.         BEQ.S    .NEXT
  1318.         MOVE.B    D2,D3
  1319.         TST.B    D5
  1320.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1321.         SENDBYTE
  1322. .NEXT        MOVE.B    #-$35,D3
  1323.         SENDBYTE
  1324.         TST.B    D5
  1325.         BEQ.S    .NOEXT
  1326.         MOVE.B    D0,D3
  1327.         SENDBYTE
  1328. .NOEXT        MOVEQ    #$10,D3
  1329.         ADD.B    D1,D3
  1330.         SENDBYTE
  1331.         SENDEND
  1332.         CXDRTS
  1333. ASSEM_CMDRLA    MOVEQ    #$17,        D3
  1334.         BSR.W    SENDABYTE
  1335.         CXDRTS
  1336. ASSEM_CMDRLC    BSR    PARSE_BYTEREGISTER
  1337.         CMP.B    #$46,D1
  1338.         BHS.W    ERROR_ILLEGAL_OPERAND
  1339.         SENDBEGIN
  1340.         TST.B    D2
  1341.         BEQ.S    .NEXT
  1342.         MOVE.B    D2,D3
  1343.         TST.B    D5
  1344.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1345.         SENDBYTE
  1346. .NEXT        MOVE.B    #-$35,D3
  1347.         SENDBYTE
  1348.         TST.B    D5
  1349.         BEQ.S    .NOEXT
  1350.         MOVE.B    D0,D3
  1351.         SENDBYTE
  1352. .NOEXT        MOVE.B    D1,D3
  1353.         SENDBYTE
  1354.         SENDEND
  1355.         CXDRTS
  1356. ASSEM_CMDRLCA    MOVEQ    #$07,        D3
  1357.         BSR.W    SENDABYTE
  1358.         CXDRTS
  1359. ASSEM_CMDRLD    BSR    SEND_ED
  1360.         MOVEQ    #$6F,        D3
  1361.         BSR.W    SENDABYTE
  1362.         CXDRTS
  1363. ASSEM_CMDRR    BSR    PARSE_BYTEREGISTER
  1364.         CMP.B    #$46,D1
  1365.         BHS.W    ERROR_ILLEGAL_OPERAND
  1366.         SENDBEGIN
  1367.         TST.B    D2
  1368.         BEQ.S    .NEXT
  1369.         MOVE.B    D2,D3
  1370.         TST.B    D5
  1371.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1372.         SENDBYTE
  1373. .NEXT        MOVE.B    #-$35,D3
  1374.         SENDBYTE
  1375.         TST.B    D5
  1376.         BEQ.S    .NOEXT
  1377.         MOVE.B    D0,D3
  1378.         SENDBYTE
  1379. .NOEXT        MOVEQ    #$18,D3
  1380.         ADD.B    D1,D3
  1381.         SENDBYTE
  1382.         SENDEND
  1383.         CXDRTS
  1384. ASSEM_CMDRRA    MOVEQ    #$1F,        D3
  1385.         BSR.W    SENDABYTE
  1386.         CXDRTS
  1387. ASSEM_CMDRRC    BSR    PARSE_BYTEREGISTER
  1388.         CMP.B    #$46,D1
  1389.         BHS.W    ERROR_ILLEGAL_OPERAND
  1390.         SENDBEGIN
  1391.         TST.B    D2
  1392.         BEQ.S    .NEXT
  1393.         MOVE.B    D2,D3
  1394.         TST.B    D5
  1395.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1396.         SENDBYTE
  1397. .NEXT        MOVE.B    #-$35,D3
  1398.         SENDBYTE
  1399.         TST.B    D5
  1400.         BEQ.S    .NOEXT
  1401.         MOVE.B    D0,D3
  1402.         SENDBYTE
  1403. .NOEXT        MOVEQ    #$08,D3
  1404.         ADD.B    D1,D3
  1405.         SENDBYTE
  1406.         SENDEND
  1407.         CXDRTS
  1408. ASSEM_CMDRRCA    MOVEQ    #$0F,        D3
  1409.         BSR.W    SENDABYTE
  1410.         CXDRTS
  1411. ASSEM_CMDRRD    BSR    SEND_ED
  1412.         MOVEQ    #$67,        D3
  1413.         BSR.W    SENDABYTE
  1414.         CXDRTS
  1415. ASSEM_CMDRST    BSR    GET_VALUE
  1416.         MOVE.L    D3,        D0
  1417.         AND.L    #$38,        D0
  1418.         CMP.L    D3,        D0
  1419.         BNE.W    ERROR_MUST_BE_AND38
  1420.         ADD.B    #$C7,        D3
  1421.         BSR    SENDABYTE
  1422.         CXDRTS
  1423. ASSEM_CMDSCF    MOVEQ    #$37,        D3
  1424.         BSR.W    SENDABYTE
  1425.         CXDRTS
  1426. ASSEM_CMDSBC    NEXTSYMBOL
  1427.         NEXTSYMBOLBUFFER    A3
  1428.         GET
  1429.         CMP.W    #'HL'+$8000,    D0
  1430.         BNE.S    .BYTE
  1431.         BSR    PARSE_GET_KOMMA
  1432.         MOVE.W    #"HL"+$8000,    D2
  1433.         BSR    PARSE_WORDREGISTER
  1434.         ADD.B    #$42,D1
  1435.         SENDBEGIN
  1436.         MOVEQ    #-$13,D3
  1437.         SENDBYTE
  1438.         MOVE.B    D1,D3
  1439.         SENDBYTE
  1440.         SENDEND
  1441.         CXDRTS        
  1442. .BYTE        CMP.W    #"A"<<8+$8000,    D0
  1443.         BNE.W    ERROR_ILLEGAL_OPERAND
  1444.         BSR    PARSE_GET_KOMMA
  1445.         BSR    PARSE_BYTEREGISTER
  1446.         CMP.B    #$46,D1
  1447.         BHI.W    ERROR_ILLEGAL_OPERAND
  1448.         ADD.B    #$98,D1
  1449.         BRA.W    SENDBYTEREGADC
  1450. ASSEM_CMDSET    BSR    GET_VALUE
  1451.         MOVE.L    D3,D0
  1452.         AND.L    #7,D0
  1453.         CMP.L    D3,D0
  1454.         BNE.W    ERROR_OUT_OF_RANGE_3BIT
  1455.         MOVE.B    D3,-(SP)
  1456.         BSR    PARSE_GET_KOMMA
  1457.         BSR    PARSE_BYTEREGISTER
  1458.         CMP.B    #$46,D1
  1459.         BHS.W    ERROR_ILLEGAL_OPERAND
  1460.         SENDBEGIN
  1461.         TST.B    D2
  1462.         BEQ.S    .NEXT
  1463.         MOVE.B    D2,D3
  1464.         TST.B    D5
  1465.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1466.         SENDBYTE
  1467. .NEXT        MOVE.B    #-$35,D3
  1468.         SENDBYTE
  1469.         TST.B    D5
  1470.         BEQ.S    .NOEXT
  1471.         MOVE.B    D0,D3
  1472.         SENDBYTE
  1473. .NOEXT        MOVE.B    (SP)+,D3
  1474.         LSL.B    #3,D3
  1475.         ADD.B    #$C0,D3
  1476.         ADD.B    D1,D3
  1477.         SENDBYTE
  1478.         SENDEND
  1479.         CXDRTS
  1480. ASSEM_CMDSLA    BSR    PARSE_BYTEREGISTER
  1481.         CMP.B    #$46,D1
  1482.         BHS.W    ERROR_ILLEGAL_OPERAND
  1483.         SENDBEGIN
  1484.         TST.B    D2
  1485.         BEQ.S    .NEXT
  1486.         MOVE.B    D2,D3
  1487.         TST.B    D5
  1488.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1489.         SENDBYTE
  1490. .NEXT        MOVE.B    #-$35,D3
  1491.         SENDBYTE
  1492.         TST.B    D5
  1493.         BEQ.S    .NOEXT
  1494.         MOVE.B    D0,D3
  1495.         SENDBYTE
  1496. .NOEXT        MOVEQ    #$20,D3
  1497.         ADD.B    D1,D3
  1498.         SENDBYTE
  1499.         SENDEND
  1500.         CXDRTS
  1501. ASSEM_CMDSRA    BSR    PARSE_BYTEREGISTER
  1502.         CMP.B    #$46,D1
  1503.         BHS.W    ERROR_ILLEGAL_OPERAND
  1504.         SENDBEGIN
  1505.         TST.B    D2
  1506.         BEQ.S    .NEXT
  1507.         MOVE.B    D2,D3
  1508.         TST.B    D5
  1509.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1510.         SENDBYTE
  1511. .NEXT        MOVE.B    #-$35,D3
  1512.         SENDBYTE
  1513.         TST.B    D5
  1514.         BEQ.S    .NOEXT
  1515.         MOVE.B    D0,D3
  1516.         SENDBYTE
  1517. .NOEXT        MOVEQ    #$28,D3
  1518.         ADD.B    D1,D3
  1519.         SENDBYTE
  1520.         SENDEND
  1521.         CXDRTS
  1522. ASSEM_CMDSRL    BSR    PARSE_BYTEREGISTER
  1523.         CMP.B    #$46,D1
  1524.         BHS.W    ERROR_ILLEGAL_OPERAND
  1525.         SENDBEGIN
  1526.         TST.B    D2
  1527.         BEQ.S    .NEXT
  1528.         MOVE.B    D2,D3
  1529.         TST.B    D5
  1530.         BEQ.W    ERROR_ILLEGAL_OPERAND
  1531.         SENDBYTE
  1532. .NEXT        MOVE.B    #-$35,D3
  1533.         SENDBYTE
  1534.         TST.B    D5
  1535.         BEQ.S    .NOEXT
  1536.         MOVE.B    D0,D3
  1537.         SENDBYTE
  1538. .NOEXT        MOVEQ    #$38,D3
  1539.         ADD.B    D1,D3
  1540.         SENDBYTE
  1541.         SENDEND
  1542.         CXDRTS
  1543. ASSEM_CMDSUB    BSR    PARSE_BYTEREGISTER
  1544.         CMP.B    #$46,D1
  1545.         BHI.W    ERROR_ILLEGAL_OPERAND
  1546.         ADD.B    #$90,D1
  1547.         BRA.W    SENDBYTEREGADC
  1548. ASSEM_CMDXOR    BSR    PARSE_BYTEREGISTER
  1549.         CMP.B    #$46,D1
  1550.         BHI.W    ERROR_ILLEGAL_OPERAND
  1551.         ADD.B    #$A8,D1
  1552.         BRA.W    SENDBYTEREGADC
  1553.  
  1554.         
  1555. PARSE_GETFLAG    NEXTSYMBOL
  1556.         CMP.B    #NS_ALABEL,    D1
  1557.         BNE.S    .AVALUE
  1558.         NEXTSYMBOLBUFFER    A3
  1559.         GET
  1560.         ECXDS.S    'C',        .C
  1561.         ECXDS.S    'M',        .M
  1562.         ECXD.S    'NC',        .NC
  1563.         ECXD.S    'NZ',        .NZ
  1564.         ECXDS.S    'P',        .P
  1565.         ECXD.S    'PE',        .PE
  1566.         ECXD.S    'PO',        .PO
  1567.         ECXDS.S    'Z',        .Z
  1568.         MOVE.W    #$CD-$C4,    -(SP)
  1569. .GET_LABEL2    NEXTSYMBOLBUFFER    A3
  1570.         NEXTLABEL
  1571.         MOVE.W    (SP)+,        D1
  1572. .0        TST.W    D2
  1573.         BNE.W    ERROR_RELATIVE_MODE
  1574.         MOVE.L    D3,D0
  1575.         AND.L    #$FFFF,D0
  1576.         CMP.L    D3,D0
  1577.         BNE.W    ERROR_OUT_OF_RANGE_16BIT
  1578.         RTS
  1579. .AVALUE        GETLABEL
  1580.         MOVE.W    #$CD-$C4,    D1
  1581.         BRA.S    .0
  1582. .C        MOVE.W    #$DC-$C4,    -(SP)
  1583.         BRA.S    .GET_LABEL
  1584. .M        MOVE.W    #$FC-$C4,    -(SP)
  1585.         BRA.S    .GET_LABEL
  1586. .NC        MOVE.W    #$D4-$C4,    -(SP)
  1587.         BRA.S    .GET_LABEL
  1588. .NZ        MOVE.W    #$C4-$C4,    -(SP)
  1589.         BRA.S    .GET_LABEL
  1590. .P        MOVE.W    #$F4-$C4,    -(SP)
  1591.         BRA.S    .GET_LABEL
  1592. .PE        MOVE.W    #$EC-$C4,    -(SP)
  1593.         BRA.S    .GET_LABEL
  1594. .PO        MOVE.W    #$E4-$C4,    -(SP)
  1595.         BRA.S    .GET_LABEL
  1596. .Z        MOVE.W    #$CC-$C4,    -(SP)
  1597. .GET_LABEL    BSR    PARSE_GET_KOMMA
  1598.         NEXTSYMBOL
  1599.         BRA.S    .GET_LABEL2
  1600.  
  1601. ;A=7
  1602. ;B=0,0
  1603. ;C=1,0
  1604. ;D=2,0
  1605. ;E=3,0
  1606. ;H=4,0
  1607. ;HX=4,$DD
  1608. ;HY=4,$FD
  1609. ;L=5,0
  1610. ;LX=5,$DD
  1611. ;LY=5,$FD
  1612. ;(HL)=6,0
  1613. ;(IX,N)=6,$DD,#
  1614. ;(IY,N)=6,$FD,#
  1615. ;#=$46
  1616.  
  1617. PARSE_WORDREGISTER
  1618.         NEXTSYMBOL
  1619.         NEXTSYMBOLBUFFER    A3
  1620.         GET
  1621.         CMP.W    D2,        D0
  1622.         BNE.S    .B
  1623.         MOVEQ    #$20,        D1
  1624.         RTS
  1625. .B        CMP.W    #"BC"+$8000,    D0
  1626.         BNE.S    .D
  1627.         MOVEQ    #$00,        D1
  1628.         RTS            
  1629. .D        CMP.W    #"DE"+$8000,    D0
  1630.         BNE.S    .S
  1631.         MOVEQ    #$10,        D1
  1632.         RTS            
  1633. .S        CMP.W    #"SP"+$8000,    D0
  1634.         BNE.W    ERROR_ILLEGAL_OPERAND
  1635.         MOVEQ    #$30,        D1
  1636.         RTS
  1637.  
  1638. PARSE_LDABYTE    CMP.B    #"(",        (A6)
  1639.         BEQ.S    .GOTPARAN
  1640.         NEXTSYMBOL
  1641.         CMP.B    #NS_ALABEL,    D1
  1642.         BNE.W    PARSE_BYTEREGISTER\.AVALUE
  1643.         NEXTSYMBOLBUFFER    A3
  1644.         GET
  1645.         ECXDS.S    'I',        .I
  1646.         ECXDS.S    'R',        .R
  1647.         BRA.W    PARSE_BYTEREGISTER\.000
  1648. .I        MOVEQ    #$78~$57,    D1
  1649.         MOVEQ    #-$13,        D2
  1650.         MOVEQ    #0,        D5
  1651.         RTS
  1652. .R        MOVEQ    #$78~$5F,    D1
  1653.         MOVEQ    #-$13,        D2
  1654.         MOVEQ    #0,        D5
  1655.         RTS
  1656. .GOTPARAN    ADDQ.W    #1,        A6
  1657.         NEXTSYMBOL
  1658.         CMP.B    #NS_ALABEL,    D1
  1659.         BNE.S    .AVALUE
  1660.         NEXTSYMBOLBUFFER    A3
  1661.         GET
  1662.         ECXD.S    'BC',        .BC
  1663.         ECXD.S    'DE',        .DE
  1664.         ECXD    'HL',        PARSE_BYTEREGISTER\.HL
  1665.         MOVEQ    #-$23,        D2
  1666.         ECXD    'IX',        PARSE_BYTEREGISTER\.I
  1667.         MOVEQ    #-$03,        D2
  1668.         ECXD    'IY',        PARSE_BYTEREGISTER\.I
  1669.         NEXTLABEL
  1670.         BRA.s    .AVALUE1
  1671. .AVALUE        GETLABEL
  1672. .AVALUE1    CMP.B    #")",        (A6)+
  1673.         BNE.W    ERROR_ILLEGAL_OPERAND
  1674.         MOVE.L    D3,        D0
  1675.         AND.L    #$FFFF,        D0
  1676.         CMP.L    D3,        D0
  1677.         BNE    ERROR_OUT_OF_RANGE_16BIT
  1678.         LSR.W    #8,        D3
  1679.         ST    D5
  1680.         ST    D6
  1681.         MOVEQ    #$3A~$78,    D1
  1682.         MOVEQ    #0,        D2
  1683.         RTS
  1684. .BC        CMP.B    #")",        (A6)+
  1685.         BNE.W    ERROR_ILLEGAL_OPERAND
  1686.         MOVEQ    #$A~$78,    D1
  1687.         MOVEQ    #0,        D2
  1688.         MOVEQ    #0,        D5
  1689.         RTS
  1690. .DE        CMP.B    #")",        (A6)+
  1691.         BNE.W    ERROR_ILLEGAL_OPERAND
  1692.         MOVEQ    #$1A~$78,    D1
  1693.         MOVEQ    #0,        D2
  1694.         MOVEQ    #0,        D5
  1695.         RTS
  1696.  
  1697. PARSE_BYTEREGISTER
  1698.         CMP.B    #"(",        (A6)
  1699.         BEQ.W    .GOTPARAN
  1700.         NEXTSYMBOL
  1701.         CMP.B    #NS_ALABEL,    D1
  1702.         BNE.S    .AVALUE
  1703.         NEXTSYMBOLBUFFER    A3
  1704.         GET
  1705. .000        ECXDS    "A",        .A
  1706.         ECXDS    "B",        .B
  1707.         ECXDS    "C",        .C
  1708.         ECXDS    "D",        .D
  1709.         ECXDS    "E",        .E
  1710.         ECXDS    "H",        .H
  1711.         ECXDS    "L",        .L
  1712.         ECXD    "HX",        .HX
  1713.         ECXD    "LX",        .LX
  1714.         ECXD    "HY",        .HY
  1715.         ECXD    "LY",        .LY
  1716.         NEXTLABEL
  1717.         BRA.S    .AVALUE1
  1718. .AVALUE        GETLABEL
  1719. .AVALUE1    TST.W    D2
  1720.         BNE.W    ERROR_RELATIVE_MODE
  1721.         MOVE.L    D3,        D0
  1722.         AND.L    #$FF,        D0
  1723.         CMP.L    D3,        D0
  1724.         BNE.W    ERROR_OUT_OF_RANGE_8BIT
  1725.         MOVEQ    #$46,        D1
  1726.         MOVEQ    #0,        D2
  1727.         ST    D5
  1728.         RTS
  1729. .A        MOVEQ    #7,        D1
  1730. .LIM        MOVEQ    #0,        D2
  1731.         MOVEQ    #0,        D5
  1732.         RTS
  1733. .B        MOVEQ    #0,        D1
  1734.         BRA.S    .LIM
  1735. .C        MOVEQ    #1,        D1
  1736.         BRA.S    .LIM
  1737. .D        MOVEQ    #2,        D1
  1738.         BRA.S    .LIM
  1739. .E        MOVEQ    #3,        D1
  1740.         BRA.S    .LIM
  1741. .H        MOVEQ    #4,        D1
  1742.         BRA.S    .LIM
  1743. .L        MOVEQ    #5,        D1
  1744.         BRA.S    .LIM
  1745. .HX        MOVEQ    #4,        D1
  1746.         MOVEQ    #-$23,        D2
  1747.         MOVEQ    #0,        D5
  1748.         RTS
  1749. .LX        MOVEQ    #5,        D1
  1750.         MOVEQ    #-$23,        D2
  1751.         MOVEQ    #0,        D5
  1752.         RTS
  1753. .HY        MOVEQ    #4,        D1
  1754.         MOVEQ    #-$3,        D2
  1755.         MOVEQ    #0,        D5
  1756.         RTS
  1757. .LY        MOVEQ    #5,        D1
  1758.         MOVEQ    #-$3,        D2
  1759.         MOVEQ    #0,        D5
  1760.         RTS
  1761. .GOTPARAN    ADDQ.W    #1,        A6
  1762.         NEXTSYMBOL
  1763.         NEXTSYMBOLBUFFER    A3
  1764.         GET
  1765.         ECXD.S    'HL',        .HL
  1766.         MOVEQ    #-$23,        D2
  1767.         ECXD.S    'IX',        .I
  1768.         MOVEQ    #-$03,        D2
  1769.         ECXD.S    'IY',        .I
  1770.         BRA.S    ERROR_ILLEGAL_OPERAND
  1771. .HL        CMP.B    #")",        (A6)+
  1772.         BNE.S    ERROR_ILLEGAL_OPERAND
  1773.         MOVEQ    #6,        D1
  1774.         BRA.S    .LIM
  1775. .I        MOVE.B    (A6),        D0
  1776.         CMP.B    #"-",        D0
  1777.         BEQ.S    .MINUS
  1778.         CMP.B    #"+",        D0
  1779.         BNE.S    ERROR_ILLEGAL_OPERAND
  1780. .MINUS        MOVE.W    D2,-(SP)
  1781.         BSR    GET_VALUE
  1782.         TST.W    D2
  1783.         BNE.W    ERROR_RELATIVE_MODE
  1784.         MOVE.W    (SP)+,D2
  1785.         MOVE.B    D3,        D0
  1786.         EXT.W    D0
  1787.         EXT.L    D0
  1788.         CMP.L    D3,        D0
  1789.         BNE.S    ERROR_OUT_OF_RANGE_8BIT
  1790.         CMP.B    #")",        (A6)+
  1791.         BNE.W    ERROR_PARENTES_EXPECTED
  1792.         ST    D5
  1793.         MOVEQ    #6,        D1
  1794.         RTS
  1795.  
  1796. ERROR_ILLEGAL_OPERAND
  1797.         ERROR    "Illegal operand"
  1798. ERROR_OUT_OF_RANGE_3BIT
  1799.         ERROR    "Out of 3 bit range"
  1800. ERROR_OUT_OF_RANGE_8BIT
  1801.         ERROR    "Out of 8 bit range"
  1802. ERROR_OUT_OF_RANGE_16BIT
  1803.         ERROR    "Out of 16 bit range"
  1804. ERROR_PARENTES_EXPECTED
  1805.         ERROR    "Right parenthes expected"
  1806. ERROR_RELATIVE_MODE
  1807.         ERROR    "Relative Mode Error"
  1808. ERROR_MUST_0_2    ERROR    "Must be a value between 0-2"
  1809. ERROR_MUST_BE_AND38
  1810.         ERROR    "Must be andable with 38"
  1811. DISASM        RTS
  1812.  
  1813. ENDOFASM
  1814.