diff --git a/cli/uxnvm/vm.tal b/cli/uxnvm/vm.tal index 74a4a20..7b24f6a 100644 --- a/cli/uxnvm/vm.tal +++ b/cli/uxnvm/vm.tal @@ -9,9 +9,8 @@ JMP2r @ ( -- ok ) - ( get opcode ) .uxn/pc LDZ2 ;rom ADD2 LDA - ( exit on BRK ) DUP #00 EQU ?halt - ( move PC ) .uxn/pc LDZ2k INC2 ROT STZ2 + ( incr pointer ) .uxn/pc LDZ2 INC2k .uxn/pc STZ2 + ( get opcode ) ;rom ADD2 LDA ( short mode ) DUP #20 AND #00 NEQ .uxn/2 STZ ( return mode ) DUP #40 AND #00 NEQ STH ;rst ;wst STHr [ JMP SWP2 ] .uxn/dst STZ2 .uxn/src STZ2 @@ -83,11 +82,13 @@ ( @|library ) -@op-lit +@op-imm + DUP #00 EQU ?&op-brk DUP #20 EQU ?&op-jci DUP #40 EQU ?&op-jmi DUP #60 EQU ?&op-jsi - .uxn/pc LDZ2 DUP2 peek push #0001 .uxn/2 LDZ ADD ADD2 !warp/16 + &op-lit ( -- ) + .uxn/pc LDZ2 peek push #0001 .uxn/2 LDZ ADD !warp/8 &op-jci ( -- ) ;wst .uxn/src STZ2 pop/8 NIP ?&op-jmi @@ -99,6 +100,8 @@ ( fall ) &op-jmi ( -- ) .uxn/pc LDZ2 DUP2 peek/16 ADD2 INC2 INC2 !warp/16 + &op-brk ( -- ) + JMP2r @lib ( non immediate opcodes ) &inc pop INC2 !push @@ -138,7 +141,7 @@ @optbl [ - =op-lit =lib/inc =lib/pop =lib/nip + =op-imm =lib/inc =lib/pop =lib/nip =lib/swp =lib/rot =lib/dup =lib/ovr =lib/equ =lib/neq =lib/gth =lib/lth =lib/jmp =lib/jcn =lib/jsr =lib/sth