\ 1802opcodes1

needs 1802cycle
needs 1802regs
needs 1802io

hex

\ opcode 00
: #IDL  ( opcode -- )
    drop   idle-cpu ;

\ opcode 01 - 0F
: #LDN  ( opcode -- )
    0F and   R @    byte@   D! ;

\ opcode 1N
: #INC  ( opcode -- )
    0F and   1 swap   R +! ;

\ opcode 2N
: #DEC  ( opcode -- )
    0F and   -1 swap   R +! ;

: do-short-branch  ( opcode -- )
    drop
    fetch-byte       ( lo-adr )
    P @   R   c!lobyte ;
inline

: do-short-condbr  ( opcode flag -- )
    if        do-short-branch
    else   drop   1  P @  R +!
    then ;

\ opcode 30
: #BR  ( opcode -- ) 
    do-short-branch ;

\ opcode 31
: #BQ  ( opcode -- )
    Q@  do-short-condbr ;

\ opcode 32
: #BZ  ( opcode -- )
    D@  0= do-short-condbr ;

\ opcode 33
: #BDF  ( opcode -- )
    DF @  do-short-condbr ;

\ opcode 34
: #B1  ( opcode -- )
    EF1 do-short-condbr ;

\ opcode 35
: #B2  ( opcode -- )
    EF2/3 do-short-condbr ;

\ opcode 36
: #B3  ( opcode -- )
    EF2/3 do-short-condbr ;

\ opcode 37
: #B4  ( opcode -- )
    EF4 do-short-condbr ;

\ opcode 38
: #SKP  ( opcode -- )
    drop
   1   P @   R  +! ; 

\ opcode 39
: #BNQ  ( opcode -- )
    Q@  0= do-short-condbr ;

\ opcode 3A
: #BNZ  ( opcode -- )
    D@  do-short-condbr ;

\ opcode 3B
: #BNF  ( opcode -- )
    DF @  0= do-short-condbr ;

\ opcode 3C
: #BN1  ( opcode -- )
    EF1 0= do-short-condbr ;

\ opcode 3D
: #BN2  ( opcode -- )
    EF2/3 0= do-short-condbr ;

\ opcode 3E
: #BN3  ( opcode -- )
    EF2/3 0= do-short-condbr ;

\ opcode 3F
: #BN4  ( opcode -- )
    EF4 0= do-short-condbr ;
