RosettaCodeData/Task/Execute-Computer-Zero/Quackery/execute-computer-zero.quackery

176 lines
4.2 KiB
Plaintext

[ 0 ] is NOP ( --> n )
[ 1 ] is LDA ( --> n )
[ 2 ] is STA ( --> n )
[ 3 ] is ADD ( --> n )
[ 4 ] is SUB ( --> n )
[ 5 ] is BRZ ( --> n )
[ 6 ] is JMP ( --> n )
[ 7 ] is STP ( --> n )
[ 0 ] is DATA ( --> n )
[ 0 ] is -- ( --> n )
[ stack 0 ] is acc ( --> s )
[ stack 0 ] is ip ( --> s )
[ stack false ] is flag ( --> n )
[ 0 ip replace 0 32 of ] is computer/zero ( --> [ )
[ 255 & swap 5 << |
swap ip share poke
1 ip tally ] is , ( [ --> [ )
[ drop ] is nop ( [ n --> [ )
[ dip dup peek acc replace ] is lda ( [ n --> [ )
[ acc share unrot poke ] is sta ( [ n --> [ )
[ dip dup peek
acc take + 255 & acc put ] is add ( [ n --> [ )
[ dip dup peek negate
acc take + 255 & acc put ] is sub ( [ n --> [ )
[ acc share iff drop done
ip replace ] is brz ( [ n --> [ )
[ ip replace ] is jmp ( [ n --> [ )
[ drop true flag replace ] is stp ( [ n --> [ )
[ false flag replace
0 acc replace
0 ip replace
[ dup ip share peek
1 ip tally
dup 31 & swap 5 >>
[ table
nop lda sta add
sub brz jmp stp ] do
flag share until ]
drop
acc share
say "acc = " dup echo
dup 128 & iff
[ say " or "
127 ~ | echo ]
else drop cr ] is execute ( [ --> )
cr say " 2+2: "
computer/zero
( 00 ) LDA 03 ,
( 01 ) ADD 04 ,
( 02 ) STP -- ,
( 03 ) DATA 2 ,
( 04 ) DATA 2 ,
execute
cr say " 7*8: "
computer/zero
( 00 ) LDA 12 ,
( 01 ) ADD 10 ,
( 02 ) STA 12 ,
( 03 ) LDA 11 ,
( 04 ) SUB 13 ,
( 05 ) STA 11 ,
( 06 ) BRZ 08 ,
( 07 ) JMP 00 ,
( 08 ) LDA 12 ,
( 09 ) STP -- ,
( 10 ) DATA 8 ,
( 11 ) DATA 7 ,
( 12 ) DATA 0 ,
( 13 ) DATA 1 ,
execute
cr say " Fibonacci: "
computer/zero
( 00 ) LDA 14 ,
( 01 ) STA 15 ,
( 02 ) ADD 13 ,
( 03 ) STA 14 ,
( 04 ) LDA 15 ,
( 05 ) STA 13 ,
( 06 ) LDA 16 ,
( 07 ) SUB 17 ,
( 08 ) BRZ 11 ,
( 09 ) STA 16 ,
( 10 ) JMP 00 ,
( 11 ) LDA 14 ,
( 12 ) STP -- ,
( 13 ) DATA 1 ,
( 14 ) DATA 1 ,
( 15 ) DATA 0 ,
( 16 ) DATA 8 ,
( 17 ) DATA 1 ,
execute
cr say "linked list: "
computer/zero
( 00 ) LDA 13 ,
( 01 ) ADD 15 ,
( 02 ) STA 05 ,
( 03 ) ADD 16 ,
( 04 ) STA 07 ,
( 05 ) NOP -- ,
( 06 ) STA 14 ,
( 07 ) NOP -- ,
( 08 ) BRZ 11 ,
( 09 ) STA 15 ,
( 10 ) JMP 00 ,
( 11 ) LDA 14 ,
( 12 ) STP -- ,
( 13 ) LDA 00 ,
( 14 ) DATA 0 ,
( 15 ) DATA 28 ,
( 16 ) DATA 1 ,
( 17 ) DATA 0 ,
( 18 ) DATA 0 ,
( 19 ) DATA 0 ,
( 20 ) DATA 6 ,
( 21 ) DATA 0 ,
( 22 ) DATA 2 ,
( 23 ) DATA 26 ,
( 24 ) DATA 5 ,
( 25 ) DATA 20 ,
( 26 ) DATA 3 ,
( 27 ) DATA 30 ,
( 28 ) DATA 1 ,
( 29 ) DATA 22 ,
( 30 ) DATA 4 ,
( 31 ) DATA 24 ,
execute
cr say " prisoner: "
computer/zero
( 00 ) NOP -- ,
( 01 ) NOP -- ,
( 02 ) STP -- ,
( 03 ) NOP -- ,
( 04 ) LDA 03 ,
( 05 ) SUB 29 ,
( 06 ) BRZ 18 ,
( 07 ) LDA 03 ,
( 08 ) STA 29 ,
( 09 ) BRZ 14 ,
( 10 ) LDA 01 ,
( 11 ) ADD 31 ,
( 12 ) STA 01 ,
( 13 ) JMP 02 ,
( 14 ) LDA 00 ,
( 15 ) ADD 31 ,
( 16 ) STA 00 ,
( 17 ) JMP 02 ,
( 18 ) LDA 03 ,
( 19 ) STA 29 ,
( 20 ) LDA 01 ,
( 21 ) ADD 30 ,
( 22 ) ADD 03 ,
( 23 ) STA 01 ,
( 24 ) LDA 00 ,
( 25 ) ADD 30 ,
( 26 ) ADD 03 ,
( 27 ) STA 01 ,
( 28 ) JMP 02 ,
( 29 ) DATA 0 ,
( 30 ) DATA 1 ,
( 31 ) DATA 3 ,
execute