File:  [gforth] / gforth / arch / r8c / asm.fs
Revision 1.6: download - view: text, annotated - select for diffs
Sun Feb 19 22:15:05 2006 UTC (18 years, 2 months ago) by pazsan
Branches: MAIN
CVS tags: HEAD
Further work on r8c
Fix of history

    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: 
   11: \ only forth definitions
   12: 
   13: require asm/basic.fs
   14: 
   15:  also ASSEMBLER definitions
   16: 
   17: require asm/target.fs
   18: 
   19: \ for tests only                hfs 07:47 04/24/92
   20: 
   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 ! ;
   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
   34:       VARIABLE <.B>
   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
   53:    <,> OFF       <.B> OFF  ssave ;
   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 )
  137:    ?DO [ forth ] I [ assembler ] @ <M> @ =
  138:        IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
  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 )
  149:    ?DO [ forth ] I [ assembler ] @ <M> @ =
  150:        IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
  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: 
  165:  : OPC, <OPC> C@ X C, <OPC> 1+ C@ X C, ;
  166: 
  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"
  208:              <OPC> 2 + c@ %00000001 and 0= IF <.b> on THEN
  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: 
  222:  : rh1,      <OPC> 2 + c@ <OPC> c!
  223:              <OPC> 3 + c@ $F0 and <M> 1+ c@ $0F and or  <M> 1+ c! ;
  224: \ ----------------------------------------------------------------------------------------------
  225: \ ----------------------------------------------------------------------------------------------
  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 ;
  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
  240: \ ----------------------------------------------------------------------------------------------
  241:  : GROUP1.W: CREATE C,              ( opc  -- )
  242:              DOES>  c@ X C,
  243:              opnd?
  244:              IF X , THEN
  245:              RESET ;
  246:  %11110100 GROUP1.W: JMP.W
  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 ;
  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
  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 ;
  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?
  274:              IF abs8? IF X C, ELSE X , THEN THEN ;
  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
  282:              abs8? IF X C, ELSE X , THEN ;
  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
  290:              X C, ;
  291: 
  292:  : ctrl,abs:16 opnd? <d-opnd> !
  293:              ctrl, ,abs:16
  294:              >opc OPC,
  295:              d-opnd?
  296:              0= ABORT" operand expected"
  297:              X , ;
  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?
  355:              IF abs8? IF X C, ELSE X , THEN THEN ;
  356: 
  357:  : [SB],ctrl opnd? <d-opnd> !
  358:              [SB], ,ctrl
  359:              >opc OPC,
  360:              abs8? IF X C, ELSE X , THEN ;
  361: 
  362:  : [FB],ctrl opnd? <d-opnd> !
  363:              [FB], ,ctrl
  364:              >opc OPC,
  365:              >8B? ABORT" displacement > 8 Bit"
  366:              X C, ;
  367: 
  368:  : #,ctrl    #, ,ctrl
  369:              <M> 1+ C@ %01111111 and <M> 1+ C!
  370:              >opc OPC,
  371:              X , ;
  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,
  425:           opnd? IF 8B? IF X C, ELSE X , THEN THEN ;
  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
  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 ;
  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,
  452:            8B? IF X C, ELSE X , THEN ;
  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,
  459:            X C, ;
  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,
  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 ;
  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,
  485:         abs:16      ' (abs:16) TAB,    #     ' (#) TAB,
  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
  513:  2ByteOPC(dsp8/dsp16) %00000000 %01111101 GROUP2: jmpi.a
  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?
  524:              IF abs8? IF X C, ELSE X , THEN THEN ;
  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
  532:              abs8? IF X C, ELSE X , THEN ;
  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
  540:              X C, ;
  541: 
  542:  : q#,abs:16 opnd? <d-opnd> !
  543:              q#, ,abs:16
  544:              >opc OPC,
  545:              d-opnd?
  546:              0= ABORT" operand expected"
  547:              X , ;
  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?
  572:              IF abs8? IF X C, ELSE X , THEN THEN ;
  573: 
  574:  : R,[SB]    opnd? <d-opnd> !
  575:              ,[SB]
  576:              >opc OPC,
  577:              abs8? IF X C, ELSE X , THEN ;
  578: 
  579:  : R,[FB]    opnd? <d-opnd> !
  580:              ,[FB]
  581:              >opc OPC,
  582:              >8B? ABORT" displacement > 8 Bit"
  583:              X C, ;
  584: 
  585:  : R,abs:16  opnd? <d-opnd> !
  586:              ,abs:16
  587:              >opc OPC,
  588:              X , ;
  589: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  590:  : [An],R    opnd? <d-opnd> !
  591:              [An],
  592:              >opc OPC,
  593:              s-opnd?
  594:              IF abs8? IF X C, ELSE X , THEN THEN ;
  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?
  601:              IF abs8? IF X C, ELSE X , THEN THEN
  602:              d-opnd?
  603:              IF abs8? IF X C, ELSE X , THEN THEN ;
  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?
  610:              IF abs8? IF X C, ELSE X , THEN THEN
  611:              abs8? IF X C, ELSE X , THEN ;
  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?
  618:              IF abs8? IF X C, ELSE X , THEN THEN
  619:              >8B? ABORT" displacement > 8 Bit"
  620:              X C, ;
  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?
  627:              IF abs8? IF X C, ELSE X , THEN THEN
  628:              X , ;
  629: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  630:  : [SB],R    opnd? <d-opnd> !
  631:              [SB],
  632:              >opc OPC,
  633:              abs8? IF X C, ELSE X , THEN ;
  634: 
  635:  : [SB],[An] opnd? <d-opnd> !
  636:              [SB], ,[An]
  637:              >opc OPC,
  638:              s-opnd? d-opnd? and IF swap THEN
  639:              abs8? IF X C, ELSE X , THEN
  640:              d-opnd?
  641:              IF abs8? IF X C, ELSE X , THEN THEN ;
  642: 
  643:  : [SB],[SB] opnd? <d-opnd> !
  644:              [SB], ,[SB]
  645:              >opc OPC,
  646:              swap
  647:              abs8? IF X C, ELSE X , THEN
  648:              abs8? IF X C, ELSE X , THEN ;
  649: 
  650:  : [SB],[FB] opnd? <d-opnd> !
  651:              [SB], ,[FB]
  652:              >opc OPC,
  653:              swap
  654:              abs8? IF X C, ELSE X , THEN
  655:              >8B? ABORT" displacement > 8 Bit"
  656:              X C, ;
  657: 
  658:  : [SB],abs:16 opnd? <d-opnd> !
  659:              [SB], ,abs:16
  660:              >opc OPC,
  661:              swap
  662:              abs8? IF X C, ELSE X , THEN
  663:              X , ;
  664: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  665:  : [FB],R    opnd? <d-opnd> !
  666:              [FB],
  667:              >opc OPC,
  668:              >8B? ABORT" displacement > 8 Bit"
  669:              X C, ;
  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"
  676:              X C, 
  677:              d-opnd?
  678:              IF abs8? IF X C, ELSE X , THEN THEN ;
  679: 
  680:  : [FB],[SB] opnd? <d-opnd> !
  681:              [FB], ,[SB]
  682:              >opc OPC,
  683:              swap
  684:              >8B? ABORT" displacement > 8 Bit"
  685:              X C, 
  686:              abs8? IF X C, ELSE X , THEN ;
  687: 
  688:  : [FB],[FB] opnd? <d-opnd> !
  689:              [FB], ,[FB]
  690:              >opc OPC,
  691:              swap
  692:              >8B? ABORT" displacement > 8 Bit"
  693:              X C, 
  694:              d-opnd?
  695:              IF 8B?   IF X C, ELSE X , THEN THEN ;
  696: 
  697:  : [FB],abs:16 opnd? <d-opnd> !
  698:              [FB], ,abs:16
  699:              >opc OPC,
  700:              swap
  701:              >8B? ABORT" displacement > 8 Bit"
  702:              X C,
  703:              X , ;
  704: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  705:  : abs:16,R  opnd? <d-opnd> !
  706:              abs:16,
  707:              >opc OPC,
  708:              X , ;
  709: 
  710:  : abs:16,[An] opnd? <d-opnd> !
  711:              abs:16, ,[An]
  712:              >opc OPC,
  713:              s-opnd? d-opnd? and IF swap THEN
  714:              X ,
  715:              d-opnd?
  716:              IF abs8? IF X C, ELSE X , THEN THEN ;
  717: 
  718:  : abs:16,[SB] opnd? <d-opnd> !
  719:              abs:16, ,[SB]
  720:              >opc OPC,
  721:              swap
  722:              X ,
  723:              abs8? IF X C, ELSE X , THEN ;
  724: 
  725:  : abs:16,[FB] opnd? <d-opnd> !
  726:              abs:16, ,[FB]
  727:              >opc OPC,
  728:              swap
  729:              X ,
  730:              >8B? ABORT" displacement > 8 Bit"
  731:              X C, ;
  732: 
  733:  : abs:16,abs:16 opnd? <d-opnd> !
  734:              abs:16, ,abs:16
  735:              >opc OPC,
  736:              swap
  737:              X ,
  738:              X , ;
  739: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  740:  : #,R       opnd? <d-opnd> !
  741:              #,
  742:              >opc OPC,
  743:              <.b> @ IF X C, ELSE X , THEN ;
  744: 
  745:  : #,[An]    opnd? <d-opnd> !
  746:              #, ,[An]
  747:              >opc OPC,
  748:              d-opnd?
  749:              IF abs8? IF X C, ELSE X , THEN THEN
  750:              <.b> @ IF X C, ELSE X , THEN ;
  751: 
  752:  : #,[SB]    opnd? <d-opnd> !
  753:              #, ,[SB]
  754:              >opc OPC,
  755:              abs8? IF X C, ELSE X , THEN
  756:              <.b> @ IF X C, ELSE X , THEN ;
  757: 
  758:  : #,[FB]    opnd? <d-opnd> !
  759:              #, ,[FB]
  760:              >opc OPC,
  761:              >8B? ABORT" displacement > 8 Bit"
  762:              X C, 
  763:              <.b> @ IF X C, ELSE X , THEN ;
  764: 
  765:  : #,abs:16  opnd? <d-opnd> !
  766:              #, ,abs:16
  767:              >opc OPC,
  768:              X ,
  769:              <.b> @ IF X C, ELSE X , THEN ;
  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
  862:  generic %01010000 %01111100  %11111111 %01111000 GROUP4: mul.b:g
  863:  generic %01000000 %01111100  %11111111 %01110000 GROUP4: mulu.b:g
  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
  875:  generic %01010000 %01111101  %11111111 %01111001 GROUP4: mul.w:g
  876:  generic %01000000 %01111101  %11111111 %01110001 GROUP4: mulu.w:g
  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: \ ----------------------------------------------------------------------------------------------
  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: \ ----------------------------------------------------------------------------------------------
  918: \ register definition
  919:   ' R2 Alias rp
  920:   ' R0 Alias tos
  921:   ' A1 Alias ip
  922:   ' A0 Alias w
  923:   ' [A1] Alias [ip]
  924:   ' [A0] Alias [w]
  925: 
  926: \ ----------------------------------------------------------------------------------------------
  927: 
  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<
  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
  948: 
  949:  HERE  SWAP -
  950:  CR .( Length of Assembler: ) . .( Bytes ) CR
  951: 
  952: 

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