-
Notifications
You must be signed in to change notification settings - Fork 1
/
tny-ins.tal
160 lines (145 loc) · 2.81 KB
/
tny-ins.tal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
@ins-table
=ins/brk =ins/ret =ins/jmp =ins/jmr ( 04 )
=ins/jcn =ins/jcr =ins/lit =ins/pop ( 08 )
=ins/dup =ins/swp =ins/rot =ins/ovr ( 0c )
=ins/psh =ins/pul =ins/rsi =ins/rsj ( 10 )
=ins/sta =ins/lda =ins/stb =ins/ldb ( 14 )
=ins/add =ins/sub =ins/inc =ins/dec ( 18 )
=ins/mul =ins/div =ins/mod =ins/rnd ( 1c )
=ins/equ =ins/neq =ins/gth =ins/lth ( 20 )
=ins/and =ins/orr =ins/xor =ins/sft ( 24 )
=ins/cls =ins/set =ins/get =ins/key ( 28 )
=ins/frm ( 29 )
@push ( n -- )
[ LIT2 00 -psp ] LDZ ;pst ADD2 STA
.psp LDZ INC DUP ?{ POP
;pst-overflow-txt print-str print-cr abort }
.psp STZ
JMP2r
@pop ( -- n )
.psp LDZ #01 SUB
DUP #ff NEQ ?{ POP
;pst-underflow-txt print-str print-cr abort }
.psp STZ
[ LIT2 00 -psp ] LDZ ;pst ADD2 LDA
JMP2r
@push-r ( n -- )
[ LIT2 00 -rsp ] LDZ ;rst ADD2 STA
.rsp LDZ INC DUP ?{ POP
;rst-overflow-txt print-str print-cr abort }
.rsp STZ
JMP2r
@pop-r ( -- n )
.rsp LDZ #01 SUB
DUP #ff NEQ ?{ POP
;rst-underflow-txt print-str print-cr abort }
.rsp STZ
[ LIT2 00 -rsp ] LDZ ;rst ADD2 LDA
JMP2r
@ins ( -- )
&brk
[ LIT2 00 -run ] STZ JMP2r
&ret
pop-r .ip STZ JMP2r
&jmr
.ip LDZ push-r
( >> )
&jmp
pop .ip STZ JMP2r
&jcn
pop pop ?{ POP JMP2r }
.ip STZ JMP2r
&jcr
pop pop ?{ POP JMP2r }
.ip LDZ push-r
.ip STZ JMP2r
&lit
.ip LDZ DUP
#00 SWP ;ram ADD2 LDA push
INC .ip STZ JMP2r
&pop
pop POP JMP2r
&dup
pop DUP push push JMP2r
&swp
pop pop SWP push push JMP2r
&rot
pop pop pop STH push push STHr push JMP2r
&ovr
pop pop STHk push push STHr push JMP2r
&psh
pop push-r JMP2r
&pul
pop-r push JMP2r
&rsi
pop-r DUP push-r push JMP2r
&rsj
pop-r pop-r DUP push push-r push-r JMP2r
&sta
pop pop SWP
#00 SWP ;ram ADD2 STA JMP2r
&lda
pop #00 SWP ;ram ADD2 LDA push JMP2r
&stb
pop pop SWP
#00 SWP ;buffer ADD2 STA JMP2r
&ldb
pop #00 SWP ;buffer ADD2 LDA push JMP2r
&add
pop pop ADD push JMP2r
&sub
pop pop SWP SUB push JMP2r
&inc
pop INC push JMP2r
&dec
pop #01 SUB push JMP2r
&mul
pop pop MUL push JMP2r
&div
pop pop SWP
DUP ?{ ;div-zero-txt print-str print-cr abort }
DIV push JMP2r
&mod
pop pop SWP mod push JMP2r
&rnd
prng NIP push JMP2r
&equ
pop pop EQU push JMP2r
&neq
pop pop NEQ push JMP2r
>h
pop pop SWP GTH push JMP2r
<h
pop pop SWP LTH push JMP2r
&and
pop pop AND push JMP2r
&orr
pop pop ORA push JMP2r
&xor
pop pop EOR push JMP2r
&sft
pop pop SWP SFT push JMP2r
&cls
#0100 ;screen clear
#0000 .Screen/x DEO2k INC INC DEO2
#80 .Screen/pixel DEO
JMP2r
&set
pop ?{ pop POP JMP2r }
#01 pop [ STHk ] #00 SWP ;screen ADD2 STA
STHr
DUP #0f AND #00 SWP [ #30 SFT2 ] .Screen/x DEO2
#04 SFT #00 SWP [ #30 SFT2 ] .Screen/y DEO2
;pixel-icn .Screen/addr DEO2
#01 .Screen/sprite DEO
JMP2r
&get
pop #00 SWP ;screen ADD2 LDA push
JMP2r
&key
.Controller/button DEI DUP
#04 SFT ( direction )
SWP #03 AND #40 SFT
ORA push JMP2r
&frm
.frm LDZ push JMP2r