Annotation of gforth/arch/r8c/asm.fs, revision 1.6

1.1       pazsan      1: \ FORTH Assembler for R8C                    hfs 23:54 25.12.05
                      2: \
                      3: \ Autor:          Heinz Schnitter (hfs)
                      4: \
                      5: \ Information:
                      6: \
                      7: \ - R8C.ASM is a table driven assembler.
                      8: \ - R8C.ASM supports OPCodes of Renesas R8C Microcomputer in
                      9: \   postfix notation.
                     10: 
1.2       pazsan     11: \ only forth definitions
1.1       pazsan     12: 
1.2       pazsan     13: require asm/basic.fs
1.1       pazsan     14: 
1.2       pazsan     15:  also ASSEMBLER definitions
1.1       pazsan     16: 
1.3       pazsan     17: require asm/target.fs
                     18: 
1.1       pazsan     19: \ for tests only                hfs 07:47 04/24/92
                     20: 
1.3       pazsan     21: \ : TC, base @ >r hex 0 <# # # #>       type r> base ! ;
                     22: \ : T,  base @ >r hex 0 <# # # # # #>   type r> base ! ;
                     23: : ta, base @ >r hex 0 <# # # # # # #> type r> base ! ;
1.1       pazsan     24: 
                     25: 
                     26:  HERE                   ( Begin )
                     27: 
                     28: \ VARIABLEs and RESET                        hfs 10:03 04/23/92
                     29: 
                     30:       VARIABLE SSP                 \ save of SP
                     31:       VARIABLE <,>                 \ two addrs
                     32:       VARIABLE <M>                 \ mode searched for in table
                     33:       VARIABLE <OPC>               \ OPCode
1.5       pazsan     34:       VARIABLE <.B>
1.1       pazsan     35:       VARIABLE <S-OPND>
                     36:       VARIABLE <D-OPND>
                     37: 
                     38: \ for tests only                             hfs 07:47 04/24/92
                     39: 
                     40:  : 2hex. dup base @ >r  hex 0 <# # # #> type bl emit r> base ! ;
                     41:  : 4hex. dup base @ >r  hex 0 <# # # # # #> type bl emit r> base ! ;
                     42:  : hfs cr ." hurah" ;
                     43:  : opc. <OPC> 4 dump ;
                     44:  : m. <M> c@ 2hex. <M> 1+ c@ 2hex. ;
                     45: \ for tests only
                     46: 
                     47:  : ssave SP@ SSP ! ;
                     48: 
                     49:  : RESET       ( clears all variables )
                     50:    0 <M>   C!    $0FF <M>   1+ C!
                     51:    0 <OPC> C!    $0FF <OPC> 1+ C!
                     52:    <S-OPND> OFF  <D-OPND> OFF
1.5       pazsan     53:    <,> OFF       <.B> OFF  ssave ;
1.1       pazsan     54: 
                     55:  : opnd?  ( -- N ) SSP @ SP@ - 1 cells - 1 cells / ;
                     56:  : ,? <,> @ ;
                     57:  : S-OPND? <S-OPND> @ ;
                     58:  : D-OPND? <D-OPND> @ ;
                     59: 
                     60:  : WITHIN >R OVER > SWAP R> <= 0= OR 0= ;
                     61: 
                     62:  : 4B?  ( n -- n f ) ( within -8 .. 7 ? )
                     63:    DUP -$8   $7   WITHIN ;
                     64:  : >4B?  ( n -- n f ) 4B? 0= ;
                     65: 
                     66:  : 8B?  ( n -- n f ) ( within -128 .. 127 ? )
                     67:    DUP -$80   $7F   WITHIN ;
                     68:  : >8B?  ( n -- n f ) 8B? 0= ;
                     69: 
                     70:    $07    CONSTANT abs3
                     71:  : abs3?  ( n -- n f ) DUP abs3 u< ;
                     72:  : >abs3? ( n -- n f ) abs3? 0= ;
                     73: 
                     74:    $0ff   CONSTANT abs8
                     75:  : abs8?  ( n -- n f ) DUP abs8 u< ;
                     76:  : >abs8? ( n -- n f ) abs8? 0= ;
                     77: 
                     78:  : >opc <M> 1+ C@ <OPC> 1+ C! ;
                     79: 
                     80:  : M: CREATE  C, C,
                     81:        DOES> ,?
                     82:        IF    dup C@          <M>    c@ $F0 AND OR <M>    c!
                     83:               1+ C@          <M> 1+ c@ $F0 AND OR <M> 1+ c!
                     84:        ELSE  dup C@ 4 lshift <M>    c@ $0F AND OR <M>    c!
                     85:               1+ C@ 4 lshift <M> 1+ c@ $0F AND OR <M> 1+ c!
                     86:        THEN ;
                     87: 
                     88: \ address-modes hfs
                     89: 
                     90:  %0000 0 M: R0    ' R0 alias R0L ' R0  alias C
                     91:  %0001 0 M: R1    ' R1 alias R0H ' R1  alias D
                     92:  %0010 0 M: R2    ' R2 alias R1L ' R2  alias Z
                     93:  %0011 0 M: R3    ' R3 alias R1H ' R3  alias S
                     94:  %0100 0 M: A0                   ' A0  alias B
                     95:  %0101 0 M: A1                   ' A1  alias O
                     96:  %0110 0 M: [A0]                ' [A0] alias I
                     97:  %0111 0 M: [A1]                ' [A1] alias U
                     98:  %1010 0 M: [SB]
                     99:  %1011 0 M: [FB]
                    100:  %1111 0 M: abs:16
                    101:  %0000 1 M: #
                    102:  %0001 1 M: INTBL
                    103:  %0010 1 M: INTBH
                    104:  %0011 1 M: FLG
                    105:  %0100 1 M: ISP
                    106:  %0101 1 M: SP
                    107:  %0110 1 M: SB
                    108:  %0111 1 M: FB
                    109:  
                    110: \ %0000 2 M: [SP]
                    111: 
                    112: \ two cells are used for each adress mode in the table:
                    113: \
                    114: \ cell 1 contains the src and dst MODE# searched for.
                    115: \
                    116: \ Cell 2 contains the xt of the action word for this address mode.
                    117: \
                    118: \ |     #src#dst|src  dst|                     |
                    119: \ |.....76543210 76543210 .....7654321076543210|
                    120: \ |          MODE        |            xt       |
                    121: 
                    122:  : TABLE:        ( -- addr ) \ generate new table
                    123:    CREATE HERE DUP 1 cells + , RESET ;
                    124: 
                    125:  : ;TABLE        ( addr -- ) \ change endpoint
                    126:    HERE SWAP ! ;
                    127: 
                    128:  : TAB,          ( xt opcode -- )
                    129:    <M> @ , , RESET ;
                    130: 
                    131:  : SEARCH.MODE.2 ( addr -- xt )
                    132:    TRUE SWAP
                    133:    DUP     C@ <OPC>     C!    ( opc from GROUP2: )
                    134:    DUP 1+  C@ <OPC> 1+  C!    ( opc from GROUP2: )
                    135:    2 + @ DUP @                ( tableaddr )
                    136:    SWAP 1 cells +             ( end+2 begin )
1.2       pazsan    137:    ?DO [ forth ] I [ assembler ] @ <M> @ =
                    138:        IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
1.1       pazsan    139:    2 cells +LOOP ABORT" Addressmode failed" ;
                    140: 
                    141:  : SEARCH.MODE.4 ( addr -- xt )
                    142:    TRUE SWAP
                    143:    DUP     C@ <OPC>     C!    ( opc from GROUP4: )
                    144:    DUP 1+  C@ <OPC> 1+  C!    ( opc from GROUP4: )
                    145:    DUP 2 + C@ <OPC> 2 + C!    ( opc from GROUP4: )
                    146:    DUP 3 + C@ <OPC> 3 + C!    ( opc from GROUP4: )
                    147:    4 + @ DUP @                ( tableaddr )
                    148:    SWAP 1 cells +             ( end+2 begin )
1.2       pazsan    149:    ?DO [ forth ] I [ assembler ] @ <M> @ =
                    150:        IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
1.1       pazsan    151:    2 cells +LOOP ABORT" Addressmode failed" ;
                    152: 
                    153: \ GROUPS                                     hfs 07:18 04/24/92
                    154: 
                    155:  : GROUP2:   CREATE C, C,  ,        ( xt opc opc  -- )
                    156:              DOES> SEARCH.MODE.2 EXECUTE RESET ;
                    157: 
                    158:  : GROUP4:   CREATE C, C,  C, C,  , ( xt opc opc  opc opc  -- )
                    159:              DOES> SEARCH.MODE.4 EXECUTE RESET ;
                    160: 
                    161: \ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    162:  : , opnd? <s-opnd> ! ssave <,> ON ;
                    163: \ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    164: 
1.5       pazsan    165:  : OPC, <OPC> C@ X C, <OPC> 1+ C@ X C, ;
                    166: 
1.1       pazsan    167:  : [An],     <M> 1+ C@ $F0 AND
                    168:              CASE
                    169:                 %01100000 of s-opnd?  \ [A0]
                    170:                              IF abs8? IF %10000000 ELSE %11000000 THEN
                    171:                              <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
                    172:                           endof
                    173:                 %01110000 of s-opnd?  \ [A1]
                    174:                              IF abs8? IF %10010000 ELSE %11010000 THEN
                    175:                              <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
                    176:                           endof
                    177:              ENDCASE ;
                    178: 
                    179:  : ,[An]     <M> 1+ C@ $0F AND
                    180:              CASE
                    181:                 %0110 of d-opnd?  \ [A0]
                    182:                          IF abs8? IF %1000 ELSE %1100 THEN
                    183:                          <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    184:                       endof
                    185:                 %0111 of d-opnd?  \ [A1]
                    186:                          IF abs8? IF %1001 ELSE %1101 THEN
                    187:                          <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    188:                       endof
                    189:              ENDCASE ;
                    190: 
                    191:  : [SB],     s-opnd?
                    192:              IF >abs8? IF %11100000 <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
                    193:              ELSE ." displacement expected" ABORT THEN ;
                    194: 
                    195:  : ,[SB]     d-opnd?
                    196:              IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    197:              ELSE ." displacement expected" ABORT THEN ;
                    198: 
                    199:  : [FB],     s-opnd? 0= ABORT" displacement expected" ;
                    200: 
                    201:  : ,[FB]     d-opnd? 0= ABORT" displacement expected" ;
                    202: 
                    203:  : abs:16,   s-opnd? 0= ABORT" absolute Adr expected" ;
                    204: 
                    205:  : ,abs:16   d-opnd? 0= ABORT" absolute Adr expected" ;
                    206: 
                    207:  : #,        s-opnd? 0= ABORT" operand expected"
1.5       pazsan    208:              <OPC> 2 + c@ %00000001 and 0= IF <.b> on THEN
1.1       pazsan    209:              <OPC> 2 + c@ <OPC> c!
                    210:              <OPC> 3 + c@ <M> 1+ c@ $0F and or <M> 1+ c! ;
                    211: 
                    212:  : q#,       s-opnd? 0= ABORT" operand expected"
                    213:              s-opnd? d-opnd? and IF swap THEN
                    214:              >4B? ABORT" immediate > 4 Bit"
                    215:              4 lshift <M> 1+ c@ $0F and or <M> 1+ c! ;
                    216: 
                    217:  : ctrl,     <M> 1+ C@ %10000000 OR <M> 1+ C! ;
                    218: 
                    219:  : ,ctrl     <M> 1+ C@ $0F and 4 lshift
                    220:              <M> 1+ C@ $F0 and 4 rshift OR %10000000 or <M> 1+ C! ;
                    221: 
1.5       pazsan    222:  : rh1,      <OPC> 2 + c@ <OPC> c!
                    223:              <OPC> 3 + c@ $F0 and <M> 1+ c@ $0F and or  <M> 1+ c! ;
1.1       pazsan    224: \ ----------------------------------------------------------------------------------------------
                    225: \ ----------------------------------------------------------------------------------------------
1.5       pazsan    226:  : GROUP1.B: CREATE C,              ( opc  -- )
                    227:              DOES>  c@ X C,
                    228:              opnd?
                    229:              IF >8B?  ABORT" displacement > 8 Bit" X C,  THEN
                    230:              RESET ;
1.1       pazsan    231:  %01101000 GROUP1.B: JGEU ' JGEU alias JC
                    232:  %01101001 GROUP1.B: JGTU
                    233:  %01101010 GROUP1.B: JEQ  ' JEQ  alias JZ
                    234:  %01101011 GROUP1.B: JN
                    235:  %01101100 GROUP1.B: JLTU ' JLTU alias JNC
                    236:  %01101101 GROUP1.B: JLEU
                    237:  %01101110 GROUP1.B: JNE  ' JNE  alias JNZ
                    238:  %01101111 GROUP1.B: JPZ
                    239:  %11111110 GROUP1.B: JMP.B
1.5       pazsan    240: \ ----------------------------------------------------------------------------------------------
                    241:  : GROUP1.W: CREATE C,              ( opc  -- )
                    242:              DOES>  c@ X C,
                    243:              opnd?
                    244:              IF X , THEN
                    245:              RESET ;
1.1       pazsan    246:  %11110100 GROUP1.W: JMP.W
1.5       pazsan    247: \ ----------------------------------------------------------------------------------------------
                    248:  : GROUP2.B: CREATE C, C,           ( opc opc  -- )
                    249:              DOES>  dup c@ X C, 1+ c@ X C,
                    250:              opnd?
                    251:              IF >8B?  ABORT" displacement > 8 Bit" X C, THEN
                    252:              RESET ;
1.1       pazsan    253:  %11001000 %01111101 GROUP2.B: JLE
                    254:  %11001001 %01111101 GROUP2.B: JO
                    255:  %11001010 %01111101 GROUP2.B: JGE
                    256:  %11001100 %01111101 GROUP2.B: JGT
                    257:  %11001101 %01111101 GROUP2.B: JNO
                    258:  %11001110 %01111101 GROUP2.B: JLT
1.5       pazsan    259: \ ----------------------------------------------------------------------------------------------
                    260:  : GROUP2.F: CREATE C, C,           ( opc opc  -- )
                    261:              DOES>   dup c@ X C, 1+ c@ <M> 1+ C@ or X C,
                    262:              RESET ;
1.1       pazsan    263:  %00000101 %11101011 GROUP2.F: FCLR
                    264:  %00000100 %11101011 GROUP2.F: FSET
                    265: \ ----------------------------------------------------------------------------------------------
                    266:  : ctrl,R    opnd? <d-opnd> !
                    267:              ctrl,
                    268:              >opc OPC, ;
                    269: 
                    270:  : ctrl,[An] opnd? <d-opnd> !
                    271:              ctrl, ,[An]
                    272:              >opc OPC,
                    273:              d-opnd?
1.3       pazsan    274:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    275: 
                    276:  : ctrl,[SB] opnd? <d-opnd> !
                    277:              ctrl, ,[SB]
                    278:              >opc OPC,
                    279:              d-opnd?
                    280:              IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    281:              ELSE ." displacement expected" ABORT THEN
1.3       pazsan    282:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    283: 
                    284:  : ctrl,[FB] opnd? <d-opnd> !
                    285:              ctrl, ,[An]
                    286:              >opc OPC,
                    287:              d-opnd?
                    288:              IF >8B? ABORT" displacement > 8 Bit"
                    289:              ELSE ." displacement expected" ABORT THEN
1.3       pazsan    290:              X C, ;
1.1       pazsan    291: 
                    292:  : ctrl,abs:16 opnd? <d-opnd> !
                    293:              ctrl, ,abs:16
                    294:              >opc OPC,
                    295:              d-opnd?
                    296:              0= ABORT" operand expected"
1.3       pazsan    297:              X , ;
1.1       pazsan    298: 
                    299:  Table: st-control-reg
                    300:         INTBL , R0     ' ctrl,R TAB,        INTBL , R1     ' ctrl,R TAB,
                    301:         INTBL , R2     ' ctrl,R TAB,        INTBL , R3     ' ctrl,R TAB,
                    302:         INTBL , A0     ' ctrl,R TAB,        INTBL , A1     ' ctrl,R TAB,
                    303:         INTBL , [A0]   ' ctrl,[An] TAB,     INTBL , [A1]   ' ctrl,[An] TAB,
                    304:         INTBL , [SB]   ' ctrl,[SB] TAB,     INTBL , [FB]   ' ctrl,[FB] TAB,
                    305:         INTBL , abs:16 ' ctrl,abs:16 TAB,
                    306:         INTBH , R0     ' ctrl,R TAB,        INTBH , R1     ' ctrl,R TAB,
                    307:         INTBH , R2     ' ctrl,R TAB,        INTBH , R3     ' ctrl,R TAB,
                    308:         INTBH , A0     ' ctrl,R TAB,        INTBH , A1     ' ctrl,R TAB,
                    309:         INTBH , [A0]   ' ctrl,[An] TAB,     INTBH , [A1]   ' ctrl,[An] TAB,
                    310:         INTBH , [SB]   ' ctrl,[SB] TAB,     INTBH , [FB]   ' ctrl,[FB] TAB,
                    311:         INTBL , abs:16 ' ctrl,abs:16 TAB,
                    312:         FLG   , R0     ' ctrl,R TAB,        FLG   , R1     ' ctrl,R TAB,
                    313:         FLG   , R2     ' ctrl,R TAB,        FLG   , R3     ' ctrl,R TAB,
                    314:         FLG   , A0     ' ctrl,R TAB,        FLG   , A1     ' ctrl,R TAB,
                    315:         FLG   , [A0]   ' ctrl,[An] TAB,     FLG   , [A1]   ' ctrl,[An] TAB,
                    316:         FLG   , [SB]   ' ctrl,[SB] TAB,     FLG   , [FB]   ' ctrl,[FB] TAB,
                    317:         FLG   , abs:16 ' ctrl,abs:16 TAB,
                    318:         ISP   , R0     ' ctrl,R TAB,        ISP   , R1     ' ctrl,R TAB,
                    319:         ISP   , R2     ' ctrl,R TAB,        ISP   , R3     ' ctrl,R TAB,
                    320:         ISP   , A0     ' ctrl,R TAB,        ISP   , A1     ' ctrl,R TAB,
                    321:         ISP   , [A0]   ' ctrl,[An] TAB,     ISP   , [A1]   ' ctrl,[An] TAB,
                    322:         ISP   , [SB]   ' ctrl,[SB] TAB,     ISP   , [FB]   ' ctrl,[FB] TAB,
                    323:         ISP   , abs:16 ' ctrl,abs:16 TAB,
                    324:         SP    , R0     ' ctrl,R TAB,        SP    , R1     ' ctrl,R TAB,
                    325:         SP    , R2     ' ctrl,R TAB,        SP    , R3     ' ctrl,R TAB,
                    326:         SP    , A0     ' ctrl,R TAB,        SP    , A1     ' ctrl,R TAB,
                    327:         SP    , [A0]   ' ctrl,[An] TAB,     SP    , [A1]   ' ctrl,[An] TAB,
                    328:         SP    , [SB]   ' ctrl,[SB] TAB,     SP    , [FB]   ' ctrl,[FB] TAB,
                    329:         SP    , abs:16 ' ctrl,abs:16 TAB,
                    330:         SB    , R0     ' ctrl,R TAB,        SB    , R1     ' ctrl,R TAB,
                    331:         SB    , R2     ' ctrl,R TAB,        SB    , R3     ' ctrl,R TAB,
                    332:         SB    , A0     ' ctrl,R TAB,        SB    , A1     ' ctrl,R TAB,
                    333:         SB    , [A0]   ' ctrl,[An] TAB,     SB    , [A1]   ' ctrl,[An] TAB,
                    334:         SB    , [SB]   ' ctrl,[SB] TAB,     SB    , [FB]   ' ctrl,[FB] TAB,
                    335:         SB    , abs:16 ' ctrl,abs:16 TAB,
                    336:         FB    , R0     ' ctrl,R TAB,        FB    , R1     ' ctrl,R TAB,
                    337:         FB    , R2     ' ctrl,R TAB,        FB    , R3     ' ctrl,R TAB,
                    338:         FB    , A0     ' ctrl,R TAB,        FB    , A1     ' ctrl,R TAB,
                    339:         FB    , [A0]   ' ctrl,[An] TAB,     FB    , [A1]   ' ctrl,[An] TAB,
                    340:         FB    , [SB]   ' ctrl,[SB] TAB,     FB    , [FB]   ' ctrl,[FB] TAB,
                    341:         FB    , abs:16 ' ctrl,abs:16 TAB,
                    342: 
                    343:  ;TABLE
                    344: 
                    345:  st-control-reg %11111111 %01111011 GROUP2: stc
                    346: 
                    347: \ ----------------------------------------------------------------------------------------------
                    348:  : R,ctrl    ,ctrl
                    349:              >opc OPC, ;
                    350: 
                    351:  : [An],ctrl opnd? <d-opnd> !
                    352:              [An], ,ctrl
                    353:              >opc OPC,
                    354:              s-opnd?
1.3       pazsan    355:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    356: 
                    357:  : [SB],ctrl opnd? <d-opnd> !
                    358:              [SB], ,ctrl
                    359:              >opc OPC,
1.3       pazsan    360:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    361: 
                    362:  : [FB],ctrl opnd? <d-opnd> !
                    363:              [FB], ,ctrl
                    364:              >opc OPC,
                    365:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    366:              X C, ;
1.1       pazsan    367: 
                    368:  : #,ctrl    #, ,ctrl
                    369:              <M> 1+ C@ %01111111 and <M> 1+ C!
                    370:              >opc OPC,
1.3       pazsan    371:              X , ;
1.1       pazsan    372: 
                    373:  Table: ld-control-reg
                    374:         R0   , INTBL ' R,ctrl TAB,        R0   , INTBH  ' R,ctrl TAB,
                    375:         R0   , FLG   ' R,ctrl TAB,        R0   , ISP    ' R,ctrl TAB,
                    376:         R0   , SP    ' R,ctrl TAB,        R0   , SB     ' R,ctrl TAB,
                    377:         R0   , FB    ' R,ctrl TAB,
                    378:         R1   , INTBL ' R,ctrl TAB,        R1   , INTBH  ' R,ctrl TAB,
                    379:         R1   , FLG   ' R,ctrl TAB,        R1   , ISP    ' R,ctrl TAB,
                    380:         R1   , SP    ' R,ctrl TAB,        R1   , SB     ' R,ctrl TAB,
                    381:         R1   , FB    ' R,ctrl TAB,
                    382:         R2   , INTBL ' R,ctrl TAB,        R2   , INTBH  ' R,ctrl TAB,
                    383:         R2   , FLG   ' R,ctrl TAB,        R2   , ISP    ' R,ctrl TAB,
                    384:         R2   , SP    ' R,ctrl TAB,        R2   , SB     ' R,ctrl TAB,
                    385:         R2   , FB    ' R,ctrl TAB,
                    386:         R3   , INTBL ' R,ctrl TAB,        R3   , INTBH  ' R,ctrl TAB,
                    387:         R3   , FLG   ' R,ctrl TAB,        R3   , ISP    ' R,ctrl TAB,
                    388:         R3   , SP    ' R,ctrl TAB,        R3   , SB     ' R,ctrl TAB,
                    389:         R3   , FB    ' R,ctrl TAB,
                    390:         A0   , INTBL ' R,ctrl TAB,        A0   , INTBH  ' R,ctrl TAB,
                    391:         A0   , FLG   ' R,ctrl TAB,        A0   , ISP    ' R,ctrl TAB,
                    392:         A0   , SP    ' R,ctrl TAB,        A0   , SB     ' R,ctrl TAB,
                    393:         A0   , FB    ' R,ctrl TAB,
                    394:         A1   , INTBL ' R,ctrl TAB,        A1   , INTBH  ' R,ctrl TAB,
                    395:         A1   , FLG   ' R,ctrl TAB,        A1   , ISP    ' R,ctrl TAB,
                    396:         A1   , SP    ' R,ctrl TAB,        A1   , SB     ' R,ctrl TAB,
                    397:         A1   , FB    ' R,ctrl TAB,
                    398:         [A0] , INTBL ' [An],ctrl TAB,   [A0]   , INTBH  ' [An],ctrl TAB,
                    399:         [A0] , FLG   ' [An],ctrl TAB,   [A0]   , ISP    ' [An],ctrl TAB,
                    400:         [A0] , SP    ' [An],ctrl TAB,   [A0]   , SB     ' [An],ctrl TAB,
                    401:         [A0] , FB    ' [An],ctrl TAB,
                    402:         [A1] , INTBL ' [An],ctrl TAB,   [A1]   , INTBH  ' [An],ctrl TAB,
                    403:         [A1] , FLG   ' [An],ctrl TAB,   [A1]   , ISP    ' [An],ctrl TAB,
                    404:         [A1] , SP    ' [An],ctrl TAB,   [A1]   , SB     ' [An],ctrl TAB,
                    405:         [A1] , FB    ' [An],ctrl TAB,
                    406:         [SB] , INTBL ' [SB],ctrl TAB,   [SB]   , INTBH  ' [SB],ctrl TAB,
                    407:         [SB] , FLG   ' [SB],ctrl TAB,   [SB]   , ISP    ' [SB],ctrl TAB,
                    408:         [SB] , SP    ' [SB],ctrl TAB,   [SB]   , SB     ' [SB],ctrl TAB,
                    409:         [SB] , FB    ' [FB],ctrl TAB,
                    410:         [FB] , INTBL ' [FB],ctrl TAB,   [FB]   , INTBH  ' [FB],ctrl TAB,
                    411:         [FB] , FLG   ' [FB],ctrl TAB,   [FB]   , ISP    ' [FB],ctrl TAB,
                    412:         [FB] , SP    ' [FB],ctrl TAB,   [FB]   , SB     ' [FB],ctrl TAB,
                    413:         [FB] , FB    ' [FB],ctrl TAB,
                    414:          #   , INTBL ' #,ctrl TAB,        #    , INTBH  ' #,ctrl TAB,
                    415:          #   , FLG   ' #,ctrl TAB,        #    , ISP    ' #,ctrl TAB,
                    416:          #   , SP    ' #,ctrl TAB,        #    , SB     ' #,ctrl TAB,
                    417:          #   , FB    ' #,ctrl TAB,
                    418:  ;TABLE
                    419: 
                    420:  ld-control-reg %00000000 %11101011  %11111111 %01111010 GROUP4: ldc
                    421: 
                    422: \ ----------------------------------------------------------------------------------------------
                    423:  : (R)    <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
                    424:           >opc OPC,
1.3       pazsan    425:           opnd? IF 8B? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    426: 
                    427: 
                    428:  : ([An]) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
                    429:           <M> 1+ C@ $0F AND
                    430:           CASE
                    431:               %0110 of opnd?  \ [A0]
                    432:                        IF abs8? IF %1000 ELSE %1100 THEN
                    433:                        <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    434:                     endof
                    435:               %0111 of opnd?  \ [A1]
                    436:                        IF abs8? IF %1001 ELSE %1101 THEN
                    437:                        <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    438:                     endof
                    439:            ENDCASE
                    440:            >opc OPC,
                    441:            <opc> c@ %01111101 = <opc> 1+ c@ %00101100 = and   \ $12345 [ao] jmpi.w
                    442:            <opc> c@ %01111101 = <opc> 1+ c@ %00101101 = and   \ $12345 [a1] jmpi.w
                    443:            or
1.3       pazsan    444:            IF   opnd? IF 8B? IF X C, ELSE ta, THEN THEN
                    445:            ELSE opnd? IF 8B? IF X C, ELSE X ,  THEN THEN THEN ;
1.1       pazsan    446: 
                    447:  : ([SB])  <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
                    448:            opnd?
                    449:            IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    450:            ELSE ." displacement expected" ABORT THEN
                    451:            >opc OPC,
1.3       pazsan    452:            8B? IF X C, ELSE X , THEN ;
1.1       pazsan    453: 
                    454:  : ([FB])  <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
                    455:            opnd?
                    456:            IF >8B? ABORT" displacement > 8 Bit"
                    457:            ELSE ." displacement expected" ABORT THEN
                    458:            >opc OPC,
1.3       pazsan    459:            X C, ;
1.1       pazsan    460: 
                    461:  : (abs:16) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
                    462:            opnd? 0= ABORT" operand expected"
                    463:            >opc OPC,
1.3       pazsan    464:            X , ;
                    465: 
                    466:  : (#)     opnd? 0= ABORT" operand expected"
                    467:            <OPC> 1+ c@ %01000000 =
                    468:            IF   <OPC> c@
                    469:                 CASE
                    470:                     %01110100 OF %01111100 <OPC> c! ENDOF
                    471:                     %01110101 OF %01111101 <OPC> c! ENDOF
                    472:                 ENDCASE
                    473:            ELSE
                    474:                 ." push.?:g only" ABORT
                    475:            THEN %11100010 <M> 1+ c!
                    476:            >opc OPC,
                    477:            8B? IF X C, ELSE X , THEN ;
1.1       pazsan    478: 
                    479:  Table: 2ByteOPC(dsp8/dsp16)          \ 2ByteOPC(dsp8/dsp16)
                    480:         R0          ' (R) TAB,        R1     ' (R) TAB,
                    481:         R2          ' (R) TAB,        R3     ' (R) TAB,
                    482:         A0          ' (R) TAB,        A1     ' (R) TAB,
                    483:         [A0]        ' ([An]) TAB,     [A1]   ' ([An]) TAB,
                    484:         [SB]        ' ([SB]) TAB,     [FB]   ' ([FB]) TAB,
1.3       pazsan    485:         abs:16      ' (abs:16) TAB,    #     ' (#) TAB,
1.1       pazsan    486:  ;TABLE
                    487: 
                    488:  2ByteOPC(dsp8/dsp16) %11110000 %01110110 GROUP2: abs.b
                    489:  2ByteOPC(dsp8/dsp16) %11100000 %01110110 GROUP2: adcf.b
                    490:  2ByteOPC(dsp8/dsp16) %11010000 %01110110 GROUP2: div.b
                    491:  2ByteOPC(dsp8/dsp16) %11000000 %01110110 GROUP2: divu.b
                    492:  2ByteOPC(dsp8/dsp16) %10010000 %01110110 GROUP2: divx.b
                    493:  2ByteOPC(dsp8/dsp16) %01010000 %01110100 GROUP2: neg.b
                    494:  2ByteOPC(dsp8/dsp16) %01110000 %01110100 GROUP2: not.b:g
                    495:  2ByteOPC(dsp8/dsp16) %11010000 %01110100 GROUP2: pop.b:g
                    496:  2ByteOPC(dsp8/dsp16) %01000000 %01110100 GROUP2: push.b:g
                    497:  2ByteOPC(dsp8/dsp16) %10100000 %01110110 GROUP2: rolc.b
                    498:  2ByteOPC(dsp8/dsp16) %10110000 %01110110 GROUP2: rorc.b
                    499: 
                    500:  2ByteOPC(dsp8/dsp16) %11110000 %01110111 GROUP2: abs.w
                    501:  2ByteOPC(dsp8/dsp16) %11100000 %01110111 GROUP2: adcf.w
                    502:  2ByteOPC(dsp8/dsp16) %11010000 %01110111 GROUP2: div.w
                    503:  2ByteOPC(dsp8/dsp16) %11000000 %01110111 GROUP2: divu.w
                    504:  2ByteOPC(dsp8/dsp16) %10010000 %01110111 GROUP2: divx.w
                    505:  2ByteOPC(dsp8/dsp16) %01010000 %01110101 GROUP2: neg.w
                    506:  2ByteOPC(dsp8/dsp16) %01110000 %01110101 GROUP2: not.w:g
                    507:  2ByteOPC(dsp8/dsp16) %11010000 %01110101 GROUP2: pop.w:g
                    508:  2ByteOPC(dsp8/dsp16) %01000000 %01110101 GROUP2: push.w:g
                    509:  2ByteOPC(dsp8/dsp16) %10100000 %01110111 GROUP2: rolc.w
                    510:  2ByteOPC(dsp8/dsp16) %10110000 %01110111 GROUP2: rorc.w
                    511: 
                    512:  2ByteOPC(dsp8/dsp16) %00100000 %01111101 GROUP2: jmpi.w
1.5       pazsan    513:  2ByteOPC(dsp8/dsp16) %00000000 %01111101 GROUP2: jmpi.a
1.1       pazsan    514: 
                    515: \ ----------------------------------------------------------------------------------------------
                    516:  : q#,R      opnd? <d-opnd> !
                    517:              q#,
                    518:              >opc OPC, ;
                    519: 
                    520:  : q#,[an]   opnd? <d-opnd> !
                    521:              q#, ,[an]
                    522:              >opc OPC,
                    523:              d-opnd?
1.3       pazsan    524:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    525: 
                    526:  : q#,[sb]   opnd? <d-opnd> !
                    527:              q#, ,[sb]
                    528:              >opc OPC,
                    529:              d-opnd?
                    530:              IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
                    531:              ELSE ." displacement expected" ABORT THEN
1.3       pazsan    532:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    533: 
                    534:  : q#,[fb]   opnd? <d-opnd> !
                    535:              q#, ,[fb]
                    536:              >opc OPC,
                    537:              d-opnd?
                    538:              IF >8B? ABORT" displacement > 8 Bit"
                    539:              ELSE ." displacement expected" ABORT THEN
1.3       pazsan    540:              X C, ;
1.1       pazsan    541: 
                    542:  : q#,abs:16 opnd? <d-opnd> !
                    543:              q#, ,abs:16
                    544:              >opc OPC,
                    545:              d-opnd?
                    546:              0= ABORT" operand expected"
1.3       pazsan    547:              X , ;
1.1       pazsan    548:  Table: quick
                    549:         #   , R0     ' q#,R TAB,        #   , R1     ' q#,R TAB,
                    550:         #   , R2     ' q#,R TAB,        #   , R3     ' q#,R TAB,
                    551:         #   , A0     ' q#,R TAB,        #   , A1     ' q#,R TAB,
                    552:         #   , [A0]   ' q#,[An] TAB,     #   , [A1]   ' q#,[An] TAB,
                    553:         #   , [SB]   ' q#,[SB] TAB,     #   , [FB]   ' q#,[FB] TAB,
                    554:         #   , abs:16 ' q#,abs:16 TAB,
                    555:  ;TABLE
                    556: 
                    557:  quick %00000000 %11001000 GROUP2: add.b:q
                    558:  quick %00000000 %11010000 GROUP2: cmp.b:q
                    559:  quick %00000000 %11011000 GROUP2: mov.b:q
                    560: 
                    561:  quick %00000000 %11001001 GROUP2: add.w:q
                    562:  quick %00000000 %11010001 GROUP2: cmp.w:q
                    563:  quick %00000000 %11011001 GROUP2: mov.w:q
                    564: 
                    565: \ ----------------------------------------------------------------------------------------------
                    566:  : R,R      >opc OPC, ;
                    567: 
                    568:  : R,[An]    opnd? <d-opnd> !
                    569:              ,[An]
                    570:              >opc OPC,
                    571:              d-opnd?
1.3       pazsan    572:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    573: 
                    574:  : R,[SB]    opnd? <d-opnd> !
                    575:              ,[SB]
                    576:              >opc OPC,
1.3       pazsan    577:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    578: 
                    579:  : R,[FB]    opnd? <d-opnd> !
                    580:              ,[FB]
                    581:              >opc OPC,
                    582:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    583:              X C, ;
1.1       pazsan    584: 
                    585:  : R,abs:16  opnd? <d-opnd> !
                    586:              ,abs:16
                    587:              >opc OPC,
1.5       pazsan    588:              X , ;
1.1       pazsan    589: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    590:  : [An],R    opnd? <d-opnd> !
                    591:              [An],
                    592:              >opc OPC,
                    593:              s-opnd?
1.3       pazsan    594:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    595: 
                    596:  : [An],[An] opnd? <d-opnd> !
                    597:              [An], ,[An]
                    598:              >opc OPC,
                    599:              s-opnd? d-opnd? and IF swap THEN
                    600:              s-opnd?
1.3       pazsan    601:              IF abs8? IF X C, ELSE X , THEN THEN
1.1       pazsan    602:              d-opnd?
1.3       pazsan    603:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    604: 
                    605:  : [An],[SB] opnd? <d-opnd> !
                    606:              [An], ,[SB]
                    607:              >opc OPC,
                    608:              s-opnd? d-opnd? and IF swap THEN
                    609:              s-opnd?
1.3       pazsan    610:              IF abs8? IF X C, ELSE X , THEN THEN
                    611:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    612: 
                    613:  : [An],[FB] opnd? <d-opnd> !
                    614:              [An], ,[FB]
                    615:              >opc OPC,
                    616:              s-opnd? d-opnd? and IF swap THEN
                    617:              s-opnd?
1.3       pazsan    618:              IF abs8? IF X C, ELSE X , THEN THEN
1.1       pazsan    619:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    620:              X C, ;
1.1       pazsan    621: 
                    622:  : [An],abs:16 opnd? <d-opnd> !
                    623:              [An], ,abs:16
                    624:              >opc OPC,
                    625:              s-opnd? d-opnd? and IF swap THEN
                    626:              s-opnd?
1.3       pazsan    627:              IF abs8? IF X C, ELSE X , THEN THEN
1.5       pazsan    628:              X , ;
1.1       pazsan    629: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    630:  : [SB],R    opnd? <d-opnd> !
                    631:              [SB],
                    632:              >opc OPC,
1.5       pazsan    633:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    634: 
                    635:  : [SB],[An] opnd? <d-opnd> !
                    636:              [SB], ,[An]
                    637:              >opc OPC,
                    638:              s-opnd? d-opnd? and IF swap THEN
1.5       pazsan    639:              abs8? IF X C, ELSE X , THEN
1.1       pazsan    640:              d-opnd?
1.3       pazsan    641:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    642: 
                    643:  : [SB],[SB] opnd? <d-opnd> !
                    644:              [SB], ,[SB]
                    645:              >opc OPC,
1.5       pazsan    646:              swap
                    647:              abs8? IF X C, ELSE X , THEN
                    648:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    649: 
                    650:  : [SB],[FB] opnd? <d-opnd> !
                    651:              [SB], ,[FB]
                    652:              >opc OPC,
1.5       pazsan    653:              swap
                    654:              abs8? IF X C, ELSE X , THEN
1.1       pazsan    655:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    656:              X C, ;
1.1       pazsan    657: 
                    658:  : [SB],abs:16 opnd? <d-opnd> !
                    659:              [SB], ,abs:16
                    660:              >opc OPC,
1.5       pazsan    661:              swap
                    662:              abs8? IF X C, ELSE X , THEN
                    663:              X , ;
1.1       pazsan    664: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    665:  : [FB],R    opnd? <d-opnd> !
                    666:              [FB],
                    667:              >opc OPC,
                    668:              >8B? ABORT" displacement > 8 Bit"
1.5       pazsan    669:              X C, ;
1.1       pazsan    670: 
                    671:  : [FB],[An] opnd? <d-opnd> !
                    672:              [FB], ,[An]
                    673:              >opc OPC,
                    674:              s-opnd? d-opnd? and IF swap THEN
                    675:              >8B? ABORT" displacement > 8 Bit"
1.5       pazsan    676:              X C, 
1.1       pazsan    677:              d-opnd?
1.3       pazsan    678:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    679: 
                    680:  : [FB],[SB] opnd? <d-opnd> !
                    681:              [FB], ,[SB]
                    682:              >opc OPC,
1.5       pazsan    683:              swap
1.1       pazsan    684:              >8B? ABORT" displacement > 8 Bit"
1.5       pazsan    685:              X C, 
                    686:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    687: 
                    688:  : [FB],[FB] opnd? <d-opnd> !
                    689:              [FB], ,[FB]
                    690:              >opc OPC,
1.5       pazsan    691:              swap
1.1       pazsan    692:              >8B? ABORT" displacement > 8 Bit"
1.5       pazsan    693:              X C, 
1.1       pazsan    694:              d-opnd?
1.3       pazsan    695:              IF 8B?   IF X C, ELSE X , THEN THEN ;
1.1       pazsan    696: 
                    697:  : [FB],abs:16 opnd? <d-opnd> !
                    698:              [FB], ,abs:16
                    699:              >opc OPC,
1.5       pazsan    700:              swap
1.1       pazsan    701:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    702:              X C,
1.5       pazsan    703:              X , ;
1.1       pazsan    704: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    705:  : abs:16,R  opnd? <d-opnd> !
                    706:              abs:16,
                    707:              >opc OPC,
1.5       pazsan    708:              X , ;
1.1       pazsan    709: 
                    710:  : abs:16,[An] opnd? <d-opnd> !
                    711:              abs:16, ,[An]
                    712:              >opc OPC,
                    713:              s-opnd? d-opnd? and IF swap THEN
1.5       pazsan    714:              X ,
1.1       pazsan    715:              d-opnd?
1.3       pazsan    716:              IF abs8? IF X C, ELSE X , THEN THEN ;
1.1       pazsan    717: 
                    718:  : abs:16,[SB] opnd? <d-opnd> !
                    719:              abs:16, ,[SB]
                    720:              >opc OPC,
1.5       pazsan    721:              swap
                    722:              X ,
                    723:              abs8? IF X C, ELSE X , THEN ;
1.1       pazsan    724: 
                    725:  : abs:16,[FB] opnd? <d-opnd> !
                    726:              abs:16, ,[FB]
                    727:              >opc OPC,
1.5       pazsan    728:              swap
                    729:              X ,
1.1       pazsan    730:              >8B? ABORT" displacement > 8 Bit"
1.3       pazsan    731:              X C, ;
1.1       pazsan    732: 
                    733:  : abs:16,abs:16 opnd? <d-opnd> !
                    734:              abs:16, ,abs:16
                    735:              >opc OPC,
1.5       pazsan    736:              swap
                    737:              X ,
                    738:              X , ;
1.1       pazsan    739: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    740:  : #,R       opnd? <d-opnd> !
                    741:              #,
                    742:              >opc OPC,
1.5       pazsan    743:              <.b> @ IF X C, ELSE X , THEN ;
1.1       pazsan    744: 
                    745:  : #,[An]    opnd? <d-opnd> !
                    746:              #, ,[An]
                    747:              >opc OPC,
                    748:              d-opnd?
1.5       pazsan    749:              IF abs8? IF X C, ELSE X , THEN THEN
                    750:              <.b> @ IF X C, ELSE X , THEN ;
1.1       pazsan    751: 
                    752:  : #,[SB]    opnd? <d-opnd> !
                    753:              #, ,[SB]
                    754:              >opc OPC,
1.5       pazsan    755:              abs8? IF X C, ELSE X , THEN
                    756:              <.b> @ IF X C, ELSE X , THEN ;
1.1       pazsan    757: 
                    758:  : #,[FB]    opnd? <d-opnd> !
                    759:              #, ,[FB]
                    760:              >opc OPC,
                    761:              >8B? ABORT" displacement > 8 Bit"
1.5       pazsan    762:              X C, 
                    763:              <.b> @ IF X C, ELSE X , THEN ;
1.1       pazsan    764: 
                    765:  : #,abs:16  opnd? <d-opnd> !
                    766:              #, ,abs:16
                    767:              >opc OPC,
1.3       pazsan    768:              X ,
1.5       pazsan    769:              <.b> @ IF X C, ELSE X , THEN ;
1.1       pazsan    770: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    771:  Table: generic
                    772:         R0   , R0     ' R,R TAB,        R0   , R1     ' R,R TAB,
                    773:         R0   , R2     ' R,R TAB,        R0   , R3     ' R,R TAB,
                    774:         R0   , A0     ' R,R TAB,        R0   , A1     ' R,R TAB,
                    775:         R0   , [A0]   ' R,[An] TAB,     R0   , [A1]   ' R,[An] TAB,
                    776:         R0   , [SB]   ' R,[SB] TAB,     R0   , [FB]   ' R,[FB] TAB,
                    777:         R0   , abs:16 ' R,abs:16 TAB,
                    778: 
                    779:         R1   , R0     ' R,R TAB,        R1   , R1     ' R,R TAB,
                    780:         R1   , R2     ' R,R TAB,        R1   , R3     ' R,R TAB,
                    781:         R1   , A0     ' R,R TAB,        R1   , A1     ' R,R TAB,
                    782:         R1   , [A0]   ' R,[An] TAB,     R1   , [A1]   ' R,[An] TAB,
                    783:         R1   , [SB]   ' R,[SB] TAB,     R1   , [FB]   ' R,[FB] TAB,
                    784:         R1   , abs:16 ' R,abs:16 TAB,
                    785: 
                    786:         R2   , R0     ' R,R TAB,        R2   , R1     ' R,R TAB,
                    787:         R2   , R2     ' R,R TAB,        R2   , R3     ' R,R TAB,
                    788:         R2   , A0     ' R,R TAB,        R2   , A1     ' R,R TAB,
                    789:         R2   , [A0]   ' R,[An] TAB,     R2   , [A1]   ' R,[An] TAB,
                    790:         R2   , [SB]   ' R,[SB] TAB,     R2   , [FB]   ' R,[FB] TAB,
                    791:         R2   , abs:16 ' R,abs:16 TAB,
                    792: 
                    793:         R3   , R0     ' R,R TAB,        R3   , R1     ' R,R TAB,
                    794:         R3   , R2     ' R,R TAB,        R3   , R3     ' R,R TAB,
                    795:         R3   , A0     ' R,R TAB,        R3   , A1     ' R,R TAB,
                    796:         R3   , [A0]   ' R,[An] TAB,     R3   , [A1]   ' R,[An] TAB,
                    797:         R3   , [SB]   ' R,[SB] TAB,     R3   , [FB]   ' R,[FB] TAB,
                    798:         R3   , abs:16 ' R,abs:16 TAB,
                    799: 
                    800:         A0   , R0     ' R,R TAB,        A0   , R1     ' R,R TAB,
                    801:         A0   , R2     ' R,R TAB,        A0   , R3     ' R,R TAB,
                    802:         A0   , A0     ' R,R TAB,        A0   , A1     ' R,R TAB,
                    803:         A0   , [A0]   ' R,[An] TAB,     A0   , [A1]   ' R,[An] TAB,
                    804:         A0   , [SB]   ' R,[SB] TAB,     A0   , [FB]   ' R,[FB] TAB,
                    805:         A0   , abs:16 ' R,abs:16 TAB,
                    806: 
                    807:         A1   , R0     ' R,R TAB,        A1   , R1     ' R,R TAB,
                    808:         A1   , R2     ' R,R TAB,        A1   , R3     ' R,R TAB,
                    809:         A1   , A0     ' R,R TAB,        A1   , A1     ' R,R TAB,
                    810:         A1   , [A0]   ' R,[An] TAB,     A1   , [A1]   ' R,[An] TAB,
                    811:         A1   , [SB]   ' R,[SB] TAB,     A1   , [FB]   ' R,[FB] TAB,
                    812:         A1   , abs:16 ' R,abs:16 TAB,
                    813: 
                    814:         [A0] , R0     ' [An],R  TAB,      [A0] , R1     ' [An],R  TAB,
                    815:         [A0] , R2     ' [An],R  TAB,      [A0] , R3     ' [An],R  TAB,
                    816:         [A0] , A0     ' [An],R  TAB,      [A0] , A1     ' [An],R  TAB,
                    817:         [A0] , [A0]   ' [An],[An] TAB,    [A0] , [A1]   ' [An],[An] TAB,
                    818:         [A0] , [SB]   ' [An],[SB] TAB,    [A0] , [FB]   ' [An],[FB] TAB,
                    819:         [A0] , abs:16 ' [An],abs:16 TAB,
                    820: 
                    821:         [A1] , R0     ' [An],R  TAB,      [A1] , R1     ' [An],R  TAB,
                    822:         [A1] , R2     ' [An],R  TAB,      [A1] , R3     ' [An],R  TAB,
                    823:         [A1] , A0     ' [An],R  TAB,      [A1] , A1     ' [An],R  TAB,
                    824:         [A1] , [A0]   ' [An],[An] TAB,    [A1] , [A1]   ' [An],[An] TAB,
                    825:         [A1] , [SB]   ' [An],[SB] TAB,    [A1] , [FB]   ' [An],[FB] TAB,
                    826:         [A1] , abs:16 ' [An],abs:16 TAB,
                    827: 
                    828:         [SB] , R0     ' [SB],R TAB,       [SB] , R1     ' [SB],R TAB,
                    829:         [SB] , R2     ' [SB],R TAB,       [SB] , R3     ' [SB],R TAB,
                    830:         [SB] , A0     ' [SB],R TAB,       [SB] , A1     ' [SB],R TAB,
                    831:         [SB] , [A0]   ' [SB],[An] TAB,    [SB] , [A1]   ' [SB],[An] TAB,
                    832:         [SB] , [SB]   ' [SB],[SB] TAB,    [SB] , [FB]   ' [SB],[FB] TAB,
                    833:         [SB] , abs:16 ' [SB],abs:16 TAB,
                    834: 
                    835:         [FB] , R0     ' [FB],R TAB,       [FB] , R1     ' [FB],R TAB,
                    836:         [FB] , R2     ' [FB],R TAB,       [FB] , R3     ' [FB],R TAB,
                    837:         [FB] , A0     ' [FB],R TAB,       [FB] , A1     ' [FB],R TAB,
                    838:         [FB] , [A0]   ' [FB],[An] TAB,    [FB] , [A1]   ' [FB],[An] TAB,
                    839:         [FB] , [SB]   ' [FB],[SB] TAB,    [FB] , [FB]   ' [FB],[FB] TAB,
                    840:         [FB] , abs:16 ' [FB],abs:16 TAB,
                    841: 
                    842:          #   , R0     '  #,R TAB,          #   , R1     ' #,R TAB,
                    843:          #   , R2     '  #,R TAB,          #   , R3     ' #,R TAB,
                    844:          #   , A0     '  #,R TAB,          #   , A1     ' #,R TAB,
                    845:          #   , [A0]   '  #,[An] TAB,       #   , [A1]   ' #,[An] TAB,
                    846:          #   , [SB]   '  #,[SB] TAB,       #   , [FB]   ' #,[FB] TAB,
                    847:          #   , abs:16 '  #,abs:16 TAB,
                    848: 
                    849:       abs:16 , R0     ' abs:16,R TAB,      abs:16 , R1   ' abs:16,R TAB,
                    850:       abs:16 , R2     ' abs:16,R TAB,      abs:16 , R3   ' abs:16,R TAB,
                    851:       abs:16 , A0     ' abs:16,R TAB,      abs:16 , A1   ' abs:16,R TAB,
                    852:       abs:16 , [A0]   ' abs:16,[An] TAB,   abs:16 , [A1] ' abs:16,[An] TAB,
                    853:       abs:16 , [SB]   ' abs:16,[SB] TAB,   abs:16 , [FB] ' abs:16,[FB] TAB,
                    854:       abs:16 , abs:16 ' abs:16,abs:16 TAB,
                    855:  ;TABLE
                    856: 
                    857:  generic %01100000 %01110110  %11111111 %10110000 GROUP4: adc.b
                    858:  generic %01000000 %01110110  %11111111 %10100000 GROUP4: add.b:g
                    859:  generic %00100000 %01110110  %11111111 %10010000 GROUP4: and.b:g
                    860:  generic %10000000 %01110110  %11111111 %11000000 GROUP4: cmp.b:g
                    861:  generic %11000000 %01110100  %11111111 %01110010 GROUP4: mov.b:g
1.4       pazsan    862:  generic %01010000 %01111100  %11111111 %01111000 GROUP4: mul.b:g
                    863:  generic %01000000 %01111100  %11111111 %01110000 GROUP4: mulu.b:g
1.1       pazsan    864:  generic %00110000 %01110110  %11111111 %10011000 GROUP4: or.b:g
                    865:  generic %01110000 %01110110  %11111111 %10111000 GROUP4: sbb.b
                    866:  generic %01010000 %01110110  %11111111 %10101000 GROUP4: sub.b:g
                    867:  generic %00000000 %01110110  %11111111 %10000000 GROUP4: tst.b
                    868:  generic %00010000 %01110110  %11111111 %10001000 GROUP4: xor.b
                    869: 
                    870:  generic %01100000 %01110111  %11111111 %10110001 GROUP4: adc.w
                    871:  generic %01000000 %01110111  %11111111 %10100001 GROUP4: add.w:g
                    872:  generic %00100000 %01110111  %11111111 %10010001 GROUP4: and.w:g
                    873:  generic %10000000 %01110111  %11111111 %11000001 GROUP4: cmp.w:g
                    874:  generic %11000000 %01110101  %11111111 %01110011 GROUP4: mov.w:g
1.4       pazsan    875:  generic %01010000 %01111101  %11111111 %01111001 GROUP4: mul.w:g
                    876:  generic %01000000 %01111101  %11111111 %01110001 GROUP4: mulu.w:g
1.1       pazsan    877:  generic %00110000 %01110111  %11111111 %10011001 GROUP4: or.w:g
                    878:  generic %01110000 %01110111  %11111111 %10111001 GROUP4: sbb.w
                    879:  generic %01010000 %01110111  %11111111 %10101001 GROUP4: sub.w:g
                    880:  generic %00000000 %01110111  %11111111 %10000001 GROUP4: tst.w
                    881:  generic %00010000 %01110111  %11111111 %10001001 GROUP4: xor.w
                    882: 
                    883: \ ----------------------------------------------------------------------------------------------
1.5       pazsan    884:  : R1H,R      rh1, r,r ;
                    885: 
                    886:  : R1H,[An]   rh1, r,[An] ;
                    887: 
                    888:  : R1H,[SB]   rh1, r,[SB] ;
                    889: 
                    890:  : R1H,[FB]   rh1, r,[FB] ;
                    891: 
                    892:  : R1H,abs:16 rh1, r,abs:16 ;
                    893: 
                    894:  Table: r1h-group
                    895:          R1H , R0L    '  R1H,R TAB,          R1H , R0H    ' R1H,R TAB,
                    896:          R1H , R1L    '  R1H,R TAB,          R1H , R3     ' R1H,R TAB,
                    897:          R1H , A0     '  R1H,R TAB,          R1H , A1     ' R1H,R TAB,
                    898:          R1H , [A0]   '  R1H,[An] TAB,       R1H , [A1]   ' R1H,[An] TAB,
                    899:          R1H , [SB]   '  R1H,[SB] TAB,       R1H , [FB]   ' R1H,[FB] TAB,
                    900:          R1H , abs:16 '  R1H,abs:16 TAB,
                    901:  ;TABLE
                    902: 
                    903:  r1h-group %11101111 %01110101 %11101111 %01110101 GROUP4: shl.w
                    904:  r1h-group %11111111 %01110101 %11111111 %01110101 GROUP4: sha.w
                    905: 
                    906:  r1h-group %11101111 %01110100 %11101111 %01110100 GROUP4: shl.b
                    907:  r1h-group %11111111 %01110100 %11111111 %01110100 GROUP4: sha.b
                    908: 
                    909: \ to do hfs
                    910: \   #      %00000000 %11100001 GROUP2: rot.w
                    911: \   #      %00000000 %11110001 GROUP2: sha.w
                    912: \   #      %00000000 %11101001 GROUP2: shl.w
                    913: \   #      %00000000 %11100000 GROUP2: rot.b
                    914: \   #      %00000000 %11110000 GROUP2: sha.b
                    915: \   #      %00000000 %11101000 GROUP2: shl.b
                    916: 
                    917: \ ----------------------------------------------------------------------------------------------
1.1       pazsan    918: \ register definition
1.5       pazsan    919:   ' R2 Alias rp
1.1       pazsan    920:   ' R0 Alias tos
                    921:   ' A1 Alias ip
                    922:   ' A0 Alias w
                    923:   ' [A1] Alias [ip]
                    924:   ' [A0] Alias [w]
                    925: 
                    926: \ ----------------------------------------------------------------------------------------------
                    927: 
1.6     ! pazsan    928:         $68 Constant u<
        !           929:         $69 Constant u<=
        !           930:         $6A Constant 0<>
        !           931:         $6B Constant 0>=
        !           932:         $6C Constant u>=
        !           933:         $6D Constant u>
        !           934:         $6E Constant 0=
        !           935:         $6F Constant 0<
1.2       pazsan    936:         
                    937: : IF          >r reset r> X c,   X here  0 X c, ;
                    938: : THEN        >r reset r> X here  over - swap X c!  ;
                    939: : ELSE        >r reset r> $FE IF swap THEN ;
                    940: : WHILE       >r reset r> IF swap ;
                    941: : BEGIN       reset X here  ;
                    942: : UNTIL       >r reset r> X c,   X here -  X c,  ;
                    943: : AGAIN       >r reset r> $FE UNTIL ;
                    944: : REPEAT      >r >r reset r> r> AGAIN THEN ;
                    945: 
                    946:         
                    947: \ include asm-test.fs
1.1       pazsan    948: 
                    949:  HERE  SWAP -
                    950:  CR .( Length of Assembler: ) . .( Bytes ) CR
1.2       pazsan    951: 
1.1       pazsan    952: 

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