diff --git a/cli/uxnvm/vm.tal b/cli/uxnvm/vm.tal index 22f4271..1c70cad 100644 --- a/cli/uxnvm/vm.tal +++ b/cli/uxnvm/vm.tal @@ -3,9 +3,9 @@ @ ( -- ) [ LIT2 00 -uxn/err ] STZ #0100 .uxn/pc STZ2 - #0000 ;wst/ptr STA2 - #0000 ;rst/ptr STA2 - #0000 ;/count STA2 + #0000 DUP2 ;wst/ptr STA2 + DUP2 ;rst/ptr STA2 + ;/count STA2 JMP2r @ ( -- ok ) @@ -52,27 +52,20 @@ @poke ( v* a* -- ) .uxn/2 LDZ ?&16 - &8 ( -- ) - ;rom ADD2 STA - POP JMP2r - &16 ( -- ) - ;rom ADD2 STA2 - JMP2r + &8 ;rom ADD2 STA + POP JMP2r + &16 ;rom ADD2 STA2 + JMP2r @peek ( a* -- v* ) .uxn/2 LDZ ?&16 - &8 ( -- ) - ;rom ADD2 LDA #00 SWP JMP2r - &16 ( -- ) - ;rom ADD2 LDA2 JMP2r + &8 ;rom ADD2 LDA #00 SWP JMP2r + &16 ;rom ADD2 LDA2 JMP2r @warp ( a* -- ) .uxn/2 LDZ ?&16 - &8 ( -- ) - NIP rel - &16 ( -- ) - .uxn/pc STZ2 - JMP2r + &8 NIP rel &16 .uxn/pc STZ2 + JMP2r @rel ( a* -- ) DUP #7f GTH #ff MUL SWP .uxn/pc LDZ2 ADD2 JMP2r @@ -80,21 +73,16 @@ @devw ( v* p* -- ) DUP #10 AND ?&console .uxn/2 LDZ ?&16 - &8 ( -- ) - NIP DEO - POP JMP2r - &16 ( -- ) - NIP DEO2 - JMP2r - &console ( -- ) - !send + &8 NIP DEO + POP JMP2r + &16 NIP DEO2 + JMP2r + &console !send @devr ( p* -- ) .uxn/2 LDZ ?devr/16 - &8 ( -- ) - NIP DEI #00 SWP !push - &16 ( -- ) - NIP DEI2 !push + &8 NIP DEI #00 SWP !push + &16 NIP DEI2 !push ( @|library ) @@ -116,112 +104,52 @@ &op-jmi ( -- ) .uxn/pc LDZ2 DUP2 peek/16 ADD2 INC2 INC2 !warp/16 -@op-inc - pop INC2 !push - -@op-pop - pop POP2 JMP2r - -@op-nip - pop pop POP2 !push - -@op-swp - pop pop SWP2 push !push - -@op-rot - pop pop pop ROT2 ROT2 push push !push - -@op-dup - pop DUP2 push !push - -@op-ovr - pop pop SWP2 OVR2 push push !push - -@op-equ - pop pop EQU2 !push/byte - -@op-neq - pop pop NEQ2 !push/byte - -@op-gth - pop pop SWP2 GTH2 !push/byte - -@op-lth - pop pop SWP2 LTH2 !push/byte - -@op-jmp - pop !warp - -@op-jcn - pop pop/8 NIP ?warp +@lib ( non immediate opcodes ) + &inc pop INC2 !push + &pop pop POP2 JMP2r + &nip pop pop POP2 !push + &swp pop pop SWP2 push !push + &rot pop pop pop ROT2 ROT2 push push !push + &dup pop DUP2 push !push + &ovr pop pop SWP2 OVR2 push push !push + &equ pop pop EQU2 !push/byte + &neq pop pop NEQ2 !push/byte + >h pop pop SWP2 GTH2 !push/byte + <h pop pop SWP2 LTH2 !push/byte + &jmp pop !warp + &jcn pop pop/8 NIP ?warp POP2 JMP2r - -@op-jsr - pop .uxn/pc LDZ2 .uxn/dst LDZ2 .uxn/src STZ2 + &jsr pop .uxn/pc LDZ2 .uxn/dst LDZ2 .uxn/src STZ2 push/16 !warp - -@op-sth - pop .uxn/dst LDZ2 .uxn/src STZ2 + &sth pop .uxn/dst LDZ2 .uxn/src STZ2 !push - -@op-ldz - pop/8 peek !push - -@op-stz - pop/8 pop SWP2 !poke - -@op-ldr - pop/8 NIP rel peek !push - -@op-str - pop/8 pop SWP2 NIP rel !poke - -@op-lda - pop/16 peek !push - -@op-sta - pop/16 pop SWP2 !poke - -@op-dei - pop/8 !devr - -@op-deo - pop/8 pop SWP2 !devw - -@op-add - pop pop ADD2 !push - -@op-sub - pop pop SWP2 SUB2 !push - -@op-mul - pop pop MUL2 !push - -@op-div - pop pop SWP2 DIV2 !push - -@op-and - pop pop AND2 !push - -@op-ora - pop pop ORA2 !push - -@op-eor - pop pop EOR2 !push - -@op-sft - pop/8 pop SWP2 NIP SFT2 !push + &ldz pop/8 peek !push + &stz pop/8 pop SWP2 !poke + &ldr pop/8 NIP rel peek !push + &str pop/8 pop SWP2 NIP rel !poke + &lda pop/16 peek !push + &sta pop/16 pop SWP2 !poke + &dei pop/8 !devr + &deo pop/8 pop SWP2 !devw + &add pop pop ADD2 !push + &sub pop pop SWP2 SUB2 !push + &mul pop pop MUL2 !push + &div pop pop SWP2 DIV2 !push + &and pop pop AND2 !push + &ora pop pop ORA2 !push + &eor pop pop EOR2 !push + &sft pop/8 pop SWP2 NIP SFT2 !push @optbl [ - =op-lit =op-inc =op-pop =op-nip - =op-swp =op-rot =op-dup =op-ovr - =op-equ =op-neq =op-gth =op-lth - =op-jmp =op-jcn =op-jsr =op-sth - =op-ldz =op-stz =op-ldr =op-str - =op-lda =op-sta =op-dei =op-deo - =op-add =op-sub =op-mul =op-div - =op-and =op-ora =op-eor =op-sft ] + =op-lit =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 + =lib/ldz =lib/stz =lib/ldr =lib/str + =lib/lda =lib/sta =lib/dei =lib/deo + =lib/add =lib/sub =lib/mul =lib/div + =lib/and =lib/ora =lib/eor =lib/sft ] ( @|uxn )