Annotation of gforth/arch/6502/asm.fs, revision 1.2

1.2     ! crook       1: \ asm.fs
        !             2: \
        !             3: \ postfix assembler/disassembler for 6502 and variants.
1.1       pazsan      4: 
1.2     ! crook       5: \ Generic routines for labels (forwards/backward references). The
        !             6: \ assembler-specific part is supplied as an xt in "std-resolver" below.
1.1       pazsan      7: HEX
                      8: require asm/numref.fs
                      9: HEX
                     10: 
                     11: also assembler definitions
                     12: 
1.2     ! crook      13: \ Select CPU variant
        !            14: VARIABLE CPU&
1.1       pazsan     15: 
1.2     ! crook      16: : 65N02    10 CPU& C! ; \ 0001xxxx
        !            17: : R65C02   80 CPU& C! ; \ 0010xxxx
        !            18: : 65SC02   40 CPU& C! ; \ 0100xxxx
        !            19: : 6511Q    20 CPU& C! ; \ 1000xxxx
        !            20: 
        !            21: 65N02 \ Set a default CPU type
        !            22: 
        !            23: \ Support for std-resolver
1.1       pazsan     24: : ABS/REL@                    \ ( Addr --- A/R )
1.2     ! crook      25:                               \ Addr is the Addr of the Opcode
        !            26:                               \ A/R is a flag: A=1 R=0
        !            27: \ RELative opcodes are 01, 03, 05, 07, 08, 09, 0B, 0D, 0F all other are ABS
        !            28:   X c@                        \ Get Opcode
        !            29:   dup 0F and 0=               \ 0000xxxx = 0
        !            30:   over 10 and 0<>             \ xxxxxxx1 = 0
        !            31:   and                         \ 0 0 => 1
        !            32:   swap 80 =                  \ !!JAW bugfix for bra
        !            33:   or 0= ;                     \ Flag: 1 = ABS 0 = Rel
1.1       pazsan     34: 
                     35: : ABS/REL!                    \ ( $-Addr $:-Addr A/R --- )
1.2     ! crook      36:   IF
        !            37:       swap 1+ X !             \ ABS
        !            38:   ELSE
        !            39:       over 2 + -              \ REL
        !            40:       dup 0 80 - < ABORT" branch out of range"
        !            41:       dup 7F > ABORT" branch out of range"
        !            42:       swap 1+ X C!
        !            43:   THEN ;
1.1       pazsan     44: 
                     45: : doresolve ( instruction-address -- )
                     46:   ref-adr @ over abs/rel@ abs/rel! ;
                     47:   
                     48: ' doresolve to std-resolver
                     49: 
                     50: \ Tokens used in ASMTAB:
                     51: \ ASMTAB consists of 256 entrys that are 16Bit wide
                     52: \
                     53: \ Opcode implemented on:
                     54: \ 1111xxxx Fx   65C02 & 65SC02 & 6511Q & 65N02   basic
                     55: \ 1011xxxx Bx   65C02 &          6511Q & 65N02   basic + 6511Q
                     56: \ 1101xxxx Dx   65C02 & 65SC02 &         65N02   basic + 65SC02
                     57: \
1.2     ! crook      58: \ Addressing:
1.1       pazsan     59: \ x0 = None      x1 = A.      x2 = C #.    x3 = C X)
                     60: \ x4 = C )Y      x5 = C ,X    x6 = C ,Y    x7 = C
                     61: \ x8 = N ,X      x9 = N ,Y    xA = N       xB = N ).
1.2     ! crook      62: \ xC = N X)      xD = C rel   xE = C ).    xF = C bit
1.1       pazsan     63: \
                     64: \ Opcodes:
                     65: \ 00 ADC   01 and   02 ASL   03 BBR   04 BBS   05 BCC
                     66: \ 06 BCS   07 BEQ   08 BIT   09 BMI   0A BNE   0B BPL
                     67: \ 0C BRA   0D BRK   0E BVC   0F BVS   10 CLC   11 CLD
                     68: \ 12 CLI   13 CLV   14 CMP   15 CPX   16 CPY   17 DEC
                     69: \ 18 DEX   19 DEY   1A Eor   1B INC   1C INX   1D INY
                     70: \ 1E JMP   1F JSR   20 LDA   21 LDX   22 LDY   23 LSR
                     71: \ 24 NOP   25 orA   26 PHA   27 PHP   28 PHX   29 PHY
                     72: \ 2A PLA   2B PLP   2C PLX   2D PLY   2E RMB   2F ROL
                     73: \ 30 Ror   31 RTI   32 RTS   33 SBC   34 SEC   35 SED
                     74: \ 36 SEI   37 SMB   38 STA   39 STX   3A STY   3B STZ
                     75: \ 3C TAX   3D TAY   3E TRB   3F TSB   40 TSX   41 TXA
                     76: \ 42 TXS   43 TYA   44 WAI   45 STP
                     77: \ 80 no Opcode
                     78: \
                     79: \ Position:   AABC
1.2     ! crook      80: \              ||| Addressing
1.1       pazsan     81: \              || CPU-Type
                     82: \              | Opcode
                     83: \
                     84: 
                     85: CREATE ASMTAB
                     86: 0DF0 , ( 00       BRK ) 25F3 , ( 01 C X>  orA )
                     87: 80F0 , ( 02           ) 08F0 , ( 03           )
                     88: 3FD7 , ( 04 C     TSB ) 25F7 , ( 05 C     orA )
                     89: 02F7 , ( 06 C     ASL ) 2EBF , ( 07 C C   RMB )
                     90: 27F0 , ( 08       PHP ) 25F2 , ( 09 C #.  orA )
                     91: 02F1 , ( 0A A.    ASL ) 80F0 , ( 0B           )
                     92: 3FDA , ( 0C N     TSB ) 25FA , ( 0D N     orA )
                     93: 02FA , ( 0E N     ASL ) 03BF , ( 0F C C   BBR )
                     94: 
                     95: 0BFD , ( 10 C rel BPL ) 25F4 , ( 11 C >Y  orA )
                     96: 25DE , ( 12 C >   orA ) 80F0 , ( 13           )
                     97: 3ED7 , ( 14 C     TRB ) 25F5 , ( 15 C ,X  orA )
                     98: 02F5 , ( 16 C ,X  orA ) 2EBF , ( 17 C C   RMB )
                     99: 10F0 , ( 18       CLC ) 25F9 , ( 19 N ,Y  orA )
                    100: 1BD1 , ( 1A A.    INC ) 80F0 , ( 1B           )
                    101: 3EDA , ( 1C N     TRB ) 25F8 , ( 1D N ,X  orA )
                    102: 02F8 , ( 1E N ,X  ASL ) 03BF , ( 1F C C   BBR )
                    103: 
                    104: 1FFA , ( 20 N     JSR ) 01F3 , ( 21 C X>  and )
                    105: 80F0 , ( 22           ) 80F0 , ( 23           )
                    106: 08F7 , ( 24 C     BIT ) 01F7 , ( 25 C     and )
                    107: 2FF7 , ( 26 C     ROL ) 2EBF , ( 27 C C   RMB )
                    108: 2BF0 , ( 28       PLP ) 01F2 , ( 29 C #.  and )
                    109: 2FF1 , ( 2A A.    ROL ) 80F0 , ( 2B           )
                    110: 08FA , ( 2C N     BIT ) 01FA , ( 2D N     and )
                    111: 2FFA , ( 2E N     ROL ) 03BF , ( 2F C C   BBR )
                    112: 
                    113: 09FD , ( 30 C rel BMI ) 01F4 , ( 31 C >Y  and )
                    114: 01DE , ( 32 C >   and ) 80F0 , ( 33           )
                    115: 08D5 , ( 34 C ,X  BIT ) 01F5 , ( 35 C ,X  BIT )
                    116: 2FF5 , ( 36 C ,X  ROL ) 2EBF , ( 37 C C   RMB )
                    117: 34F0 , ( 38       SEC ) 01F9 , ( 39 N ,Y  and )
                    118: 17D1 , ( 3A A.    DEC ) 80F0 , ( 3B           )
                    119: 08D8 , ( 3C N ,X  BIT ) 01F8 , ( 3D N ,X  and )
                    120: 2FF8 , ( 3E N ,X  ROL ) 03BF , ( 3F C C   BBR )
                    121: 
                    122: 31F0 , ( 40       RTI ) 1AF3 , ( 41 C X>  Eor )
                    123: 80F0 , ( 42           ) 80F0 , ( 43           )
                    124: 80F0 , ( 44           ) 1AF7 , ( 45 C     Eor )
                    125: 23F7 , ( 46 C     LSR ) 2EBF , ( 47 C C   RMB )
                    126: 26F0 , ( 48       PHA ) 1AF2 , ( 49 C #.  Eor )
                    127: 23F1 , ( 4A A.    LSR ) 80F0 , ( 4B           )
                    128: 1EFA , ( 4C N     JMP ) 1AFA , ( 4D N     Eor )
                    129: 23FA , ( 4E N     LSR ) 03BF , ( 4F C C   BBR )
                    130: 
                    131: 0EFD , ( 50 C rel BVC ) 1AF4 , ( 51 C >Y  Eor )
                    132: 1ADE , ( 52 C >   Eor ) 80F0 , ( 53           )
                    133: 80F0 , ( 54           ) 1AF5 , ( 55 C ,X  Eor )
                    134: 23F5 , ( 56 C ,X  Eor ) 2EBF , ( 57 C C   RMB )
                    135: 12F0 , ( 58       CLI ) 1AF9 , ( 59 N ,Y  Eor )
                    136: 29D0 , ( 5A       PHY ) 80F0 , ( 5B           )
                    137: 80F0 , ( 5C           ) 1AF8 , ( 5D N ,X  Eor )
                    138: 23F8 , ( 5E N ,X  LSR ) 03BF , ( 5F C C   BBR )
                    139: 
                    140: 32F0 , ( 60       RTS ) 00F3 , ( 61 C X>  ADC )
                    141: 80F0 , ( 62           ) 80F0 , ( 63           )
                    142: 3BD7 , ( 64 C     STZ ) 00F7 , ( 65 C     ADC )
                    143: 30F7 , ( 66 C     Ror ) 2EBF , ( 67 C C   RMB )
                    144: 2AF0 , ( 68       PLA ) 00F2 , ( 69 C #.  ADC )
                    145: 30F1 , ( 6A A.    Ror ) 80F0 , ( 6B           )
                    146: 1EFB , ( 6C N >   JMP ) 00FA , ( 6D N     ADC )
                    147: 30FA , ( 6E N     Ror ) 03BF , ( 6F C C   BBR )
                    148: 
                    149: 0FFD , ( 70 C rel BVS ) 00F4 , ( 71 C >Y  ADC )
                    150: 00DE , ( 72 C >   ADC ) 80F0 , ( 73           )
                    151: 3BD5 , ( 74 C ,X  STZ ) 00F5 , ( 75 C ,X  ADC )
                    152: 30F5 , ( 76 C ,X  Ror ) 2EBF , ( 77 C C   RMB )
                    153: 36F0 , ( 78       SEI ) 00F9 , ( 79 N ,Y  ADC )
                    154: 2DD0 , ( 7A       PLY ) 80F0 , ( 7B           )
                    155: 1EDC , ( 7C N X>  JMP ) 00F8 , ( 7D N ,X  ADC )
                    156: 30F8 , ( 7E N ,X  Ror ) 03BF , ( 7F C C   BBR )
                    157: 
                    158: 0CDD , ( 80 C rel BRA ) 38F3 , ( 81 C X>  STA )
                    159: 80F0 , ( 82           ) 80F0 , ( 83           )
                    160: 3AF7 , ( 84 C     STY ) 38F7 , ( 85 C     STA )
                    161: 39F7 , ( 86 C     STX ) 37BF , ( 87 C C   SMB )
                    162: 19F0 , ( 88       DEY ) 08D2 , ( 89 C #.  BIT )
                    163: 41F0 , ( 8A       TXA ) 80F0 , ( 8B           )
                    164: 3AFA , ( 8C N     STY ) 38FA , ( 8D N     STA )
                    165: 39FA , ( 8E N     STX ) 04BF , ( 8F C C   BBS )
                    166: 
                    167: 05FD , ( 90 C rel BCC ) 38F4 , ( 91 C >Y  STA )
                    168: 38DE , ( 92 C >   STA ) 80F0 , ( 93           )
                    169: 3AF5 , ( 94 C ,X  STY ) 38F5 , ( 95 C ,X  STA )
                    170: 39F6 , ( 96 C ,Y  STX ) 37BF , ( 97 C C   SMB )
                    171: 43F0 , ( 98       TYA ) 38F9 , ( 99 N ,Y  STA )
                    172: 42F0 , ( 9A       TXS ) 80F0 , ( 9B           )
                    173: 3BDA , ( 9C N     STZ ) 38F8 , ( 9D N ,X  STA )
                    174: 3BD8 , ( 9E N ,X  STZ ) 04BF , ( 9F C C   BBS )
                    175: 
                    176: 22F2 , ( A0 C #   LDY ) 20F3 , ( A1 C X>  LDA )
                    177: 21F2 , ( A2 C #   LDX ) 80F0 , ( A3           )
                    178: 22F7 , ( A4 C     LDY ) 20F7 , ( A5 C     LDA )
                    179: 21F7 , ( A6 C     LDX ) 37BF , ( A7 C C   SMB )
                    180: 3DF0 , ( A8       TAY ) 20F2 , ( A9 C #.  LDA )
                    181: 3CF0 , ( AA       TAX ) 80F0 , ( AB           )
                    182: 22FA , ( AC N     LDY ) 20FA , ( AD N     LDA )
                    183: 21FA , ( AE N     LDX ) 04BF , ( AF C C   BBS )
                    184: 
                    185: 06FD , ( B0 C rel BCS ) 20F4 , ( B1 C >Y  LDA )
                    186: 20DE , ( B2 C >   LDA ) 80F0 , ( B3           )
                    187: 22F5 , ( B4 C ,X  LDY ) 20F5 , ( B5 C ,X  LDA )
                    188: 21F6 , ( B6 C ,X  LDX ) 37BF , ( B7 C C   SMB )
                    189: 13F0 , ( B8       CLV ) 20F9 , ( B9 N ,Y  LDA )
                    190: 42F0 , ( BA       TSX ) 80F0 , ( BB           )
                    191: 22F8 , ( BC N ,X  LDY ) 20F8 , ( BD N ,X  LDA )
                    192: 21F9 , ( BE N ,Y  LDX ) 04BF , ( BF C C   BBS )
                    193: 
                    194: 16F2 , ( C0 C #.  CPY ) 14F3 , ( C1 X>    CMP )
                    195: 80F0 , ( C2           ) 80F0 , ( C3           )
                    196: 16F7 , ( C4 C     CPY ) 14F7 , ( C5 C     CMP )
                    197: 17F7 , ( C6 C     DEC ) 37BF , ( C7 C C   SMB )
                    198: 1DF0 , ( C8       INY ) 14F2 , ( C9 C #.  CMP )
                    199: 18F0 , ( CA       DEX ) 4440 , ( CB       WAI )
                    200: 16FA , ( CC N     CPY ) 14FA , ( CD N     CMP )
                    201: 17FA , ( CE N     DEC ) 04BF , ( CF C C   BBS )
                    202: 
                    203: 0AFD , ( D0 C rel BNE ) 14F4 , ( D1 C >Y  CMP )
                    204: 14DE , ( D2 C >   CMP ) 80F0 , ( D3           )
                    205: 80F0 , ( D4           ) 14F5 , ( D5 C ,X  CMP )
                    206: 17F5 , ( D6 C ,X  DEC ) 37BF , ( D7 C C   SMB )
                    207: 11F0 , ( D8       CLD ) 14F9 , ( D9 N ,Y  CMP )
                    208: 28D0 , ( DA       PHX ) 4540 , ( DB       STP )
                    209: 80F0 , ( DC           ) 14F8 , ( DD N ,X  CMP )
                    210: 17F8 , ( DE N ,X  DEC ) 04BF , ( DF C C   BBS )
                    211: 
                    212: 15F2 , ( E0 C #.  CPX ) 33F3 , ( E1 C X>  SBC )
                    213: 80F0 , ( E2           ) 80F0 , ( E3           )
                    214: 15F7 , ( E4 C     CPX ) 33F7 , ( E5 N     SBC )
                    215: 1BF7 , ( E6 C     INC ) 37BF , ( E7 C C   SMB )
                    216: 1CF0 , ( E8       INX ) 33F2 , ( E9 C #.  SBC )
                    217: 24F0 , ( EA       NOP ) 80F0 , ( EB           )
                    218: 15FA , ( EC N     CPX ) 33FA , ( ED N     SBC )
                    219: 1BFA , ( EE N     INC ) 04BF , ( EF C C   BBS )
                    220: 
                    221: 07FD , ( F0 C rel BEQ ) 33F4 , ( F1 C >Y  SBC )
                    222: 33DE , ( F2 C >   SBC ) 80F0 , ( F3           )
                    223: 80F0 , ( F4           ) 33F5 , ( F5 C ,X  SBC )
                    224: 1BF5 , ( F6 C ,X  INC ) 37BF , ( F7 C C   SMB )
                    225: 35F0 , ( F8       SED ) 33F9 , ( F9 N ,Y  SBC )
                    226: 2CD0 , ( FA       PLX ) 80F0 , ( FB           )
                    227: 80F0 , ( FC           ) 33F8 , ( FD N ,X  SBC )
                    228: 1BF8 , ( FE N ,X  INC ) 04BF , ( FF C C   BBS )
                    229: 
1.2     ! crook     230: \ ***********************************************************************
        !           231: \
1.1       pazsan    232: \ Assembler
                    233: 
                    234: \ single Byte Instructions
                    235: 
                    236: : BRK, 00 X c, ;     : CLC, 18 X c, ;     : CLD, D8 X c, ;     : CLI, 58 X c, ;
                    237: : CLV, B8 X c, ;     : DEX, CA X c, ;     : DEY, 88 X c, ;     : INX, E8 X c, ;
                    238: : INY, C8 X c, ;     : NOP, EA X c, ;     : PHA, 48 X c, ;     : PHP, 08 X c, ;
                    239: : PLA, 68 X c, ;     : PLP, 28 X c, ;     : RTI, 40 X c, ;     : RTS, 60 X c, ;
                    240: : SEC, 38 X c, ;     : SED, F8 X c, ;     : SEI, 78 X c, ;     : TAX, AA X c, ;
                    241: : TAY, A8 X c, ;     : TSX, BA X c, ;     : TXA, 8A X c, ;     : TXS, 9A X c, ;
                    242: : TYA, 98 X c, ;
                    243: 
1.2     ! crook     244: : SOP, CPU& C@ C0 and IF X c, ELSE -1 ABORT" sop not supported"  THEN ;  ( C1 ---   )
1.1       pazsan    245: : PLY, 7A SOP, ;  : PLX, FA SOP, ;  : PHY, 5A SOP, ;  : PHX, DA SOP, ;
                    246: : WAI, CB SOP, ;  : STP, DB SOP, ;
                    247: 
                    248: \ Addressingtokens
                    249: \ COPAD 00 : no Addressing valid
                    250: 
                    251: VARIABLE COPAD
                    252: 
                    253: : #. 02 COPAD C! ;   : ). 07 COPAD C! ;   : ,X 05 COPAD C! ;
                    254: : ,Y 06 COPAD C! ;   : X) 03 COPAD C! ;   : )Y 04 COPAD C! ;
                    255: : A. 01 COPAD C! ;
                    256: 
1.2     ! crook     257: \ ->ASM2.F65
1.1       pazsan    258: 2D EMIT 3E EMIT
                    259: 41 EMIT 53 EMIT 4D EMIT 32 EMIT
                    260: 2E EMIT 46 EMIT 36 EMIT 35 EMIT CR
                    261: 
                    262: \ Branch Instructions
                    263: 
                    264: : RB,                                \ ( Addr1 ---    ) ( COPAD = 00 )
                    265:                                      \ (    C1 ---    ) COPAD = 02
1.2     ! crook     266:   X c, COPAD C@ 02 =
        !           267:   IF   00 COPAD C!                   \ C1 #.-Addressing
        !           268:   ELSE 
        !           269:       X here 1+ -
        !           270:       dup 0 80 - < ABORT" branch out of range"
        !           271:       dup 7F > ABORT" branch out of range"
        !           272:   THEN  X c,  ;                      \ Put Addr in Memory
1.1       pazsan    273: 
                    274: : BCC, 090 RB, ; : BCS, 0B0 RB, ; : BEQ, 0F0 RB, ; : BMI, 030 RB, ;
                    275: : BNE, 0D0 RB, ; : BPL, 010 RB, ; : BVC, 050 RB, ; : BVS, 070 RB, ;
                    276: : BRA, CPU& C@ C0 and IF 80 RB, ELSE -1 ABORT" bra not supported" THEN ;
                    277: 
1.2     ! crook     278: \ These 4 Opcodes are only available in 65C02 and 6511Q.
1.1       pazsan    279: \ Error 07 "Opcode-Bitaddressing is wrong"
                    280: 
                    281: : BOP,                              \    ( Addr1 C2  C3 ---  )
                    282:                                     \ or ( C1    C2  C3 ---  )
1.2     ! crook     283:   CPU& C@ A0 and IF                 \ only 65C02 and 6511Q
        !           284:       swap dup FFF8 and -1 ABORT" bop error jrd?!"         \ C2 is only 0 - 7
        !           285:       4 lshift or                   \ make opcode
        !           286:       dup 08 and IF
        !           287:           X c, X ,                  \ BBS, BBR,
        !           288:       ELSE X c, X c, THEN           \ RMB, SMB,
        !           289:   ELSE -1 ABORT" bop not supported" THEN ;
1.1       pazsan    290: 
                    291: : BBR, 0F BOP, ;                    \ ( Addr1 C2 ---  )
                    292: : BBS, 8F BOP, ;                    \ ( Addr1 C2 ---  )
                    293: : RMB, 07 BOP, ;                    \ ( C1    C2 ---  )
                    294: : SMB, 87 BOP, ;                    \ ( C1    C2 ---  )
                    295: 
                    296: : JMP,                              \ ( Addr1 ---    )
1.2     ! crook     297:   COPAD C@ dup 07 = IF
        !           298:       drop 6C                       \ Addr1 ) JMP
        !           299:   ELSE 03 =                         \ Addr1 JMP
        !           300:       IF CPU& C@ C0 and 0= ABORT" jmp (),x not supported" 7C
        !           301:       ELSE 4C
        !           302:       THEN
        !           303:   THEN X c, X ,
        !           304:   00 COPAD C! ;
1.1       pazsan    305: 
1.2     ! crook     306: : JSR,                              \ ( Addr1 ---    )
1.1       pazsan    307:   20 X c, X , ;
                    308: 
1.2     ! crook     309: \ Instructions with multiple Addressing
1.1       pazsan    310: \
                    311: \ Offset: COPAD x 2 + 1 wenn N
                    312: \         COPAD x 2     wenn C
                    313: \ Content = AddrTokens of ASMTAB
                    314: \           or 80 = Error
                    315: 
                    316: CREATE FOPCADR
                    317: 0A07 , 0101 , 8002 , 0C03 , 8004 , 0805 , 0906 , 0B0E ,
                    318: 
                    319: \
                    320: \    0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
                    321: \
                    322: \ C  07      01      02      03      04      05      06      0E
                    323: \ N      0A      01      80      0C      80      08      09      0B
                    324: \    ------  - A. -  - #. -  - X) -  - )Y -  - ,X -  - ,Y -  - ). -
                    325: \
                    326: 
                    327: : FOPC                                          \    (   C1 ---  )
                    328:                                                 \ or ( N C1 ---  )
                    329:                                                 \ or ( C C1 ---  )
1.2     ! crook     330:   COPAD C@ 1 = IF 
        !           331:       1 swap 1 swap 1 swap   \      ( 1 1 1 C1 --- )
        !           332:   ELSE 1 ROT ROT swap        \      ( 1 N 1 C1 --- )
        !           333:       dup FF00 and ROT       \ oder ( 1 C 0 C1 --- )
1.1       pazsan    334:   THEN
1.2     ! crook     335: 
        !           336:   \ TOS C1 is a Token representing the Opcode corresponding to ASMTAB
        !           337:   \ SOS Then comes a Flag indicating C or N -Data
        !           338:   \ 3OS Then comes the Data or a Dummy in case of A.-Addr
        !           339:   \ 4OS Last comes the Errorflag
        !           340:   ASMTAB 100 cells + ASMTAB
        !           341:   DO
        !           342:       dup I @ 8 rshift =                       \ Opcode ? C1 = ?
        !           343:       IF                                       \ Now test Addr
        !           344:           COPAD C@ 06 = IF                     \ ,Y-Patch
        !           345:               dup dup 39 =                     \ if STX
        !           346:               swap 21 = or 0=                  \ or LDX not, otherwise
        !           347:               IF swap 1 or swap THEN           \ make C a N
        !           348:           THEN
        !           349:           over COPAD C@
        !           350:           cells FOPCADR + @                    \ look in FOPCADR
        !           351:           swap IF 8 rshift ELSE 0ff and THEN   \ N => 1+ , C => 0+
        !           352:           I @ 00f and =
        !           353:           I @ 0f0 and CPU& C@ and 0<>          \ CPU-Test
        !           354:           and                                  \ 1-Flag if ok
        !           355:                                                \ ( 1 x x C1 F --- )
        !           356:           IF I ASMTAB - 1 cells /              \ Recalculate Opcode from Offset
        !           357:               X c,                             \ Compile Opcode
        !           358:               drop                             \ C1 goes
        !           359:               COPAD C@ 01 = IF                 \ No Operand if A.-Addr
        !           360:                   2drop
        !           361:               ELSE
        !           362:                   IF X , ELSE X c, THEN        \ Compile Operand
        !           363:               THEN
        !           364:               drop                             \ drop Errorflag
        !           365:               0 0 0 0 LEAVE                    \ Successflag and Dummys
        !           366:           THEN
        !           367:       THEN
        !           368:       1 cells
        !           369:   +LOOP drop 2drop ABORT" not supported" 0 COPAD C! ;
1.1       pazsan    370: 
                    371: : ADC, 00 FOPC ; : and, 01 FOPC ; : ASL, 02 FOPC ; : CMP, 14 FOPC ;
                    372: : CPX, 15 FOPC ; : CPY, 16 FOPC ; : DEC, 17 FOPC ; : EOR, 1A FOPC ;
                    373: : INC, 1B FOPC ; : LDA, 20 FOPC ; : LDX, 21 FOPC ; : LDY, 22 FOPC ;
                    374: : LSR, 23 FOPC ; : ORA, 25 FOPC ; : ROL, 2F FOPC ; : ROR, 30 FOPC ;
                    375: : SBC, 33 FOPC ; : STA, 38 FOPC ; : STX, 39 FOPC ; : STY, 3A FOPC ;
                    376: : BIT, 08 FOPC ; : STZ, 3B FOPC ; : TSB, 3F FOPC ; : TRB, 3E FOPC ;
                    377: 
                    378: \ **********************************************************************
                    379: \
                    380: \ Disassembler
                    381: \
                    382: \ Format of Disassembler:
                    383: \
                    384: \ AAAA    BBB C DD EEEE
                    385: \
                    386: \ AAAA:  Addr in hex
                    387: \ BBB:   Opcode
                    388: \ C:     Operand embedded in opcode
1.2     ! crook     389: \ DD:    Addressing
1.1       pazsan    390: \ EEEE or
                    391: \ EE:    Operand in hex
                    392: \
                    393: \ Offset corresponds to ASMTAB-Offset
                    394: 
                    395: \ 1. Letter of Opcode
                    396: CREATE OPTAB1
                    397: 41 C, 41 C, 41 C, 42 C, 42 C, 42 C,
                    398: 42 C, 42 C, 42 C, 42 C, 42 C, 42 C,
                    399: 42 C, 42 C, 42 C, 42 C, 43 C, 43 C,
                    400: 43 C, 43 C, 43 C, 43 C, 43 C, 44 C,
                    401: 44 C, 44 C, 45 C, 49 C, 49 C, 49 C,
                    402: 4A C, 4A C, 4C C, 4C C, 4C C, 4C C,
                    403: 4E C, 4F C, 50 C, 50 C, 50 C, 50 C,
                    404: 50 C, 50 C, 50 C, 50 C, 52 C, 52 C,
                    405: 52 C, 52 C, 52 C, 53 C, 53 C, 53 C,
                    406: 53 C, 53 C, 53 C, 53 C, 53 C, 53 C,
                    407: 54 C, 54 C, 54 C, 54 C, 54 C, 54 C,
                    408: 54 C, 54 C, 57 C, 53 C,
                    409: 
                    410: \ 2.Letter of Opcode
                    411: CREATE OPTAB2
                    412: 44 C, 4E C, 53 C, 42 C, 42 C, 43 C,
                    413: 43 C, 45 C, 49 C, 4D C, 4E C, 50 C,
                    414: 52 C, 52 C, 56 C, 56 C, 4C C, 4C C,
                    415: 4C C, 4C C, 4D C, 50 C, 50 C, 45 C,
                    416: 45 C, 45 C, 4F C, 4E C, 4E C, 4E C,
                    417: 4D C, 53 C, 44 C, 44 C, 44 C, 53 C,
                    418: 4F C, 52 C, 48 C, 48 C, 48 C, 48 C,
                    419: 4C C, 4C C, 4C C, 4C C, 4D C, 4F C,
                    420: 4F C, 54 C, 54 C, 42 C, 45 C, 45 C,
                    421: 45 C, 4D C, 54 C, 54 C, 54 C, 54 C,
                    422: 41 C, 41 C, 52 C, 53 C, 53 C, 58 C,
                    423: 58 C, 59 C, 41 C, 54 C,
                    424: 
                    425: \ 3.Letter of Opcode
                    426: CREATE OPTAB3
                    427: 43 C, 44 C, 4C C, 52 C, 53 C, 43 C,
                    428: 53 C, 51 C, 54 C, 49 C, 45 C, 4C C,
                    429: 41 C, 4B C, 43 C, 53 C, 43 C, 44 C,
                    430: 49 C, 56 C, 50 C, 58 C, 59 C, 43 C,
                    431: 58 C, 59 C, 52 C, 43 C, 58 C, 59 C,
                    432: 50 C, 52 C, 41 C, 58 C, 59 C, 52 C,
                    433: 50 C, 41 C, 41 C, 50 C, 58 C, 59 C,
                    434: 41 C, 50 C, 58 C, 59 C, 42 C, 4C C,
                    435: 52 C, 49 C, 53 C, 43 C, 43 C, 44 C,
                    436: 49 C, 42 C, 41 C, 58 C, 59 C, 5A C,
                    437: 58 C, 59 C, 42 C, 42 C, 58 C, 41 C,
                    438: 53 C, 41 C, 49 C, 50 C,
                    439: 
                    440: CREATE ADTAB1
                    441: 
                    442: 20  C, 41  C, 23  C, 58  C,
                    443: 29  C, 2C  C, 2C  C, 20  C,
                    444: 2C  C, 2C  C, 20  C, 29  C,
                    445: 58  C, 20  C, 29  C, 20  C,
                    446: 
                    447: CREATE ADTAB2
                    448: 
                    449: 20  C, 2E  C, 2E  C, 29  C,
                    450: 59  C, 58  C, 59  C, 20  C,
                    451: 58  C, 59  C, 20  C, 2E  C,
                    452: 29  C, 20  C, 2E  C, 20  C,
                    453: 
                    454: CREATE ADTAB3
                    455: 
                    456:    0 C,    0 C,    3 C,    3 C,
                    457:    3 C,    3 C,    3 C,    3 C,
                    458:    2 C,    2 C,    2 C,    2 C,
                    459:    2 C,    1 C,    3 C,    3 C,
                    460: 
1.2     ! crook     461: \ ->COLD.F65
1.1       pazsan    462: 2D EMIT 3E EMIT
                    463: 43 EMIT 4F EMIT 4C EMIT 44 EMIT
                    464: 2E EMIT 46 EMIT 36 EMIT 35 EMIT CR
                    465: 
1.2     ! crook     466: \ end of definitions for assembler wordlist
1.1       pazsan    467: previous definitions

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>