commit d9b1a3e
Devine Lu Linvega
·
2022-07-06 21:02:37 +0000 UTC
parent d7701cb
Added tests
1 files changed,
+306,
-0
+306,
-0
1@@ -0,0 +1,306 @@
2+( Opcode Tester )
3+
4+( Requirements:
5+ EQU/EQU2 should put #00 or #01 on the stack
6+ #18 DEO should output ascii character to console )
7+
8+%EMIT { #18 DEO }
9+%TEST-SHORT { EQU2 #30 ADD EMIT }
10+%TEST-BYTE { EQU #30 ADD EMIT }
11+%MODE { #20 EMIT }
12+%OPCODE { #0a EMIT }
13+%TYPE { OPCODE OPCODE }
14+
15+|0000
16+
17+ @zeropage
18+ &byte $1 &short $2
19+
20+|0100
21+
22+ ( Logic )
23+
24+ ( EQU )
25+ #f8 #f8 EQU [ #01 ] TEST-BYTE
26+ #01 #01 EQU [ #01 ] TEST-BYTE
27+ #f8 #01 EQU [ #00 ] TEST-BYTE
28+ #01 #f8 EQU [ #00 ] TEST-BYTE
29+ MODE
30+ #f801 #f801 EQU2 [ #01 ] TEST-BYTE
31+ #01f8 #01f8 EQU2 [ #01 ] TEST-BYTE
32+ #f801 #01f8 EQU2 [ #00 ] TEST-BYTE
33+ #01f8 #f801 EQU2 [ #00 ] TEST-BYTE
34+ OPCODE
35+
36+ ( NEQ )
37+ #f8 #f8 NEQ [ #00 ] TEST-BYTE
38+ #01 #01 NEQ [ #00 ] TEST-BYTE
39+ #f8 #01 NEQ [ #01 ] TEST-BYTE
40+ #01 #f8 NEQ [ #01 ] TEST-BYTE
41+ MODE
42+ #f801 #f801 NEQ2 [ #00 ] TEST-BYTE
43+ #01f8 #01f8 NEQ2 [ #00 ] TEST-BYTE
44+ #f801 #01f8 NEQ2 [ #01 ] TEST-BYTE
45+ #01f8 #f801 NEQ2 [ #01 ] TEST-BYTE
46+ OPCODE
47+
48+ ( GTH )
49+ #f8 #f8 GTH [ #00 ] TEST-BYTE
50+ #01 #01 GTH [ #00 ] TEST-BYTE
51+ #f8 #01 GTH [ #01 ] TEST-BYTE
52+ #01 #f8 GTH [ #00 ] TEST-BYTE
53+ MODE
54+ #f801 #f801 GTH2 [ #00 ] TEST-BYTE
55+ #01f8 #01f8 GTH2 [ #00 ] TEST-BYTE
56+ #f801 #01f8 GTH2 [ #01 ] TEST-BYTE
57+ #01f8 #f801 GTH2 [ #00 ] TEST-BYTE
58+ OPCODE
59+
60+ ( LTH )
61+ #f8 #f8 LTH [ #00 ] TEST-BYTE
62+ #01 #01 LTH [ #00 ] TEST-BYTE
63+ #f8 #01 LTH [ #00 ] TEST-BYTE
64+ #01 #f8 LTH [ #01 ] TEST-BYTE
65+ MODE
66+ #f801 #f801 LTH2 [ #00 ] TEST-BYTE
67+ #01f8 #01f8 LTH2 [ #00 ] TEST-BYTE
68+ #f801 #01f8 LTH2 [ #00 ] TEST-BYTE
69+ #01f8 #f801 LTH2 [ #01 ] TEST-BYTE
70+ TYPE
71+
72+ ( Arithmetic )
73+
74+ ( ADD )
75+ #ff #00 ADD [ #ff ] TEST-BYTE
76+ #01 #ff ADD [ #00 ] TEST-BYTE
77+ #ff #ff ADD [ #fe ] TEST-BYTE
78+ #fe #ff ADD [ #fd ] TEST-BYTE
79+ MODE
80+ #ffff #0000 ADD2 [ #ffff ] TEST-SHORT
81+ #0001 #ffff ADD2 [ #0000 ] TEST-SHORT
82+ #ffff #ffff ADD2 [ #fffe ] TEST-SHORT
83+ #fffe #ffff ADD2 [ #fffd ] TEST-SHORT
84+ MODE
85+ OPCODE
86+
87+ ( SUB )
88+ #ff #00 SUB [ #ff ] TEST-BYTE
89+ #01 #ff SUB [ #02 ] TEST-BYTE
90+ #ff #ff SUB [ #00 ] TEST-BYTE
91+ #fe #ff SUB [ #ff ] TEST-BYTE
92+ MODE
93+ #ffff #0000 SUB2 [ #ffff ] TEST-SHORT
94+ #0001 #ffff SUB2 [ #0002 ] TEST-SHORT
95+ #ffff #ffff SUB2 [ #0000 ] TEST-SHORT
96+ #fffe #ffff SUB2 [ #ffff ] TEST-SHORT
97+ MODE
98+ OPCODE
99+
100+ ( MUL )
101+ #00 #01 MUL [ #00 ] TEST-BYTE
102+ #3f #e7 MUL [ #d9 ] TEST-BYTE
103+ #37 #3f MUL [ #89 ] TEST-BYTE
104+ #10 #02 MUL [ #20 ] TEST-BYTE
105+ MODE
106+ #1000 #0003 MUL2 [ #3000 ] TEST-SHORT
107+ #abcd #1234 MUL2 [ #4fa4 ] TEST-SHORT
108+ #8000 #0200 MUL2 [ #0000 ] TEST-SHORT
109+ #2222 #0003 MUL2 [ #6666 ] TEST-SHORT
110+ OPCODE
111+
112+ ( DIV )
113+ #10 #02 DIV [ #08 ] TEST-BYTE
114+ #20 #20 DIV [ #01 ] TEST-BYTE
115+ #34 #01 DIV [ #34 ] TEST-BYTE
116+ #02 #ef DIV [ #00 ] TEST-BYTE
117+ MODE
118+ #1000 #0040 DIV2 [ #0040 ] TEST-SHORT
119+ #abcd #1234 DIV2 [ #0009 ] TEST-SHORT
120+ #8000 #0200 DIV2 [ #0040 ] TEST-SHORT
121+ #2222 #0003 DIV2 [ #0b60 ] TEST-SHORT
122+ TYPE
123+
124+ ( Stack )
125+
126+ ( INC )
127+ #01 INC [ #02 ] TEST-BYTE
128+ #ff INC [ #00 ] TEST-BYTE
129+ #fe INC [ #ff ] TEST-BYTE
130+ #00 INC [ #01 ] TEST-BYTE
131+ MODE
132+ #0001 INC2 [ #0002 ] TEST-SHORT
133+ #ffff INC2 [ #0000 ] TEST-SHORT
134+ #fffe INC2 [ #ffff ] TEST-SHORT
135+ #0000 INC2 [ #0001 ] TEST-SHORT
136+ OPCODE
137+
138+ ( POP )
139+ #0a #0b POP [ #0a ] TEST-BYTE
140+ #0a #0b #0c POP POP [ #0a ] TEST-BYTE
141+ #0a #0b #0c ADD POP [ #0a ] TEST-BYTE
142+ #0a #0b #0c POP ADD [ #15 ] TEST-BYTE
143+ MODE
144+ #0a0b #0c0d POP2 [ #0a0b ] TEST-SHORT
145+ #0a0b #0c0d #0e0f POP2 POP2 [ #0a0b ] TEST-SHORT
146+ #0a0b #0c0d #0e0f ADD2 POP2 [ #0a0b ] TEST-SHORT
147+ #0a0b #0c0d #0e0f POP2 ADD2 [ #1618 ] TEST-SHORT
148+ OPCODE
149+
150+ ( DUP )
151+ #0a #0b DUP ADD ADD [ #20 ] TEST-BYTE
152+ MODE
153+ #0a0b DUP2 ADD2 [ #1416 ] TEST-SHORT
154+ OPCODE
155+
156+ ( NIP )
157+ #12 #34 #56 NIP ADD [ #68 ] TEST-BYTE
158+ MODE
159+ #1234 #5678 #9abc NIP2 ADD2 [ #acf0 ] TEST-SHORT
160+
161+ OPCODE
162+ ( SWP )
163+ #02 #10 SWP DIV [ #08 ] TEST-BYTE
164+ MODE
165+ #0a0b #0c0d SWP2 NIP2 [ #0a0b ] TEST-SHORT
166+
167+ OPCODE
168+ ( OVR )
169+ #02 #10 OVR DIV ADD [ #0a ] TEST-BYTE
170+ MODE
171+ #0a0b #0c0d OVR2 NIP2 ADD2 [ #1416 ] TEST-SHORT
172+ OPCODE
173+
174+ ( ROT )
175+ #02 #04 #10 ROT DIV ADD [ #0c ] TEST-BYTE
176+ MODE
177+ #0a0b #0c0d #0c0f ROT2 ADD2 NIP2 [ #161a ] TEST-SHORT
178+ TYPE
179+
180+ ( Bitwise )
181+
182+ ( AND )
183+ #fc #3f AND [ #3c ] TEST-BYTE
184+ #f0 #0f AND [ #00 ] TEST-BYTE
185+ #ff #3c AND [ #3c ] TEST-BYTE
186+ #02 #03 AND [ #02 ] TEST-BYTE
187+ MODE
188+ #f0f0 #00f0 AND2 [ #00f0 ] TEST-SHORT
189+ #aaaa #5555 AND2 [ #0000 ] TEST-SHORT
190+ #ffff #1234 AND2 [ #1234 ] TEST-SHORT
191+ #abcd #0a0c AND2 [ #0a0c ] TEST-SHORT
192+ OPCODE
193+
194+ ( ORA )
195+ #0f #f0 ORA [ #ff ] TEST-BYTE
196+ #ab #cd ORA [ #ef ] TEST-BYTE
197+ #12 #34 ORA [ #36 ] TEST-BYTE
198+ #88 #10 ORA [ #98 ] TEST-BYTE
199+ MODE
200+ #0f0f #f0f0 ORA2 [ #ffff ] TEST-SHORT
201+ #abab #cdcd ORA2 [ #efef ] TEST-SHORT
202+ #1122 #1234 ORA2 [ #1336 ] TEST-SHORT
203+ #8888 #1000 ORA2 [ #9888 ] TEST-SHORT
204+ OPCODE
205+
206+ ( EOR )
207+ #00 #00 EOR [ #00 ] TEST-BYTE
208+ #ff #00 EOR [ #ff ] TEST-BYTE
209+ #aa #55 EOR [ #ff ] TEST-BYTE
210+ #ff #ff EOR [ #00 ] TEST-BYTE
211+ MODE
212+ #ffff #ff00 EOR2 [ #00ff ] TEST-SHORT
213+ #aaaa #5555 EOR2 [ #ffff ] TEST-SHORT
214+ #1122 #1234 EOR2 [ #0316 ] TEST-SHORT
215+ #8888 #1000 EOR2 [ #9888 ] TEST-SHORT
216+ OPCODE
217+
218+ ( SFT )
219+ #ff #08 SFT [ #00 ] TEST-BYTE
220+ #ff #e0 SFT [ #00 ] TEST-BYTE
221+ #ff #11 SFT [ #fe ] TEST-BYTE
222+ #ff #12 SFT [ #7e ] TEST-BYTE
223+ MODE
224+ #ffff #01 SFT2 [ #7fff ] TEST-SHORT
225+ #ffff #70 SFT2 [ #ff80 ] TEST-SHORT
226+ #ffff #7e SFT2 [ #0180 ] TEST-SHORT
227+ #ffff #e3 SFT2 [ #c000 ] TEST-SHORT
228+ TYPE
229+
230+ ( Memory )
231+
232+ ( STZ/LDZ )
233+ #ab .zeropage/byte STZ .zeropage/byte LDZ [ #ab ] TEST-BYTE
234+ #cd .zeropage/byte STZ .zeropage/byte LDZ [ #cd ] TEST-BYTE
235+ MODE
236+ #1234 .zeropage/short STZ2 .zeropage/short LDZ2 [ #1234 ] TEST-SHORT
237+ #5678 .zeropage/short STZ2 .zeropage/short LDZ2 [ #5678 ] TEST-SHORT
238+ OPCODE
239+
240+ ( STR/LDR )
241+ [ LIT &before1 $1 ] POP
242+ [ LIT2 &before2 $2 ] POP2
243+ #22 ,&before1 STR ,&before1 LDR [ #22 ] TEST-BYTE
244+ #ef ,&after1 STR ,&after1 LDR [ #ef ] TEST-BYTE
245+ MODE
246+ #1234 ,&before2 STR2 ,&before2 LDR2 [ #1234 ] TEST-SHORT
247+ #5678 ,&after2 STR2 ,&after2 LDR2 [ #5678 ] TEST-SHORT
248+ [ LIT &after1 $1 ] POP
249+ [ LIT2 &after2 $2 ] POP2
250+ OPCODE
251+
252+ ( STA/LDA )
253+ #34 ;absolute/byte STA ;absolute/byte LDA [ #34 ] TEST-BYTE
254+ #56 ;absolute/byte STA ;absolute/byte LDA [ #56 ] TEST-BYTE
255+ MODE
256+ #1234 ;absolute/short STA2 ;absolute/short LDA2 [ #1234 ] TEST-SHORT
257+ #5678 ;absolute/short STA2 ;absolute/short LDA2 [ #5678 ] TEST-SHORT
258+ OPCODE
259+
260+ ( DEI/DEO )
261+ LIT '1 EMIT
262+ LIT '1 EMIT
263+ TYPE
264+
265+ ( Branching )
266+
267+ ( JMP )
268+ #12 #34 ,&reljmp JMP SWP &reljmp POP [ #12 ] TEST-BYTE
269+ MODE
270+ #56 #78 ;&absjmp JMP2 SWP &absjmp POP [ #56 ] TEST-BYTE
271+ OPCODE
272+
273+ ( JCN )
274+ #23 #01 ,&reljcn-y JCN INC &reljcn-y [ #23 ] TEST-BYTE
275+ #23 #00 ,&reljcn-n JCN INC &reljcn-n [ #24 ] TEST-BYTE
276+ MODE
277+ #23 #01 ;&absjcn-y JCN2 INC &absjcn-y [ #23 ] TEST-BYTE
278+ #23 #00 ;&absjcn-n JCN2 INC &absjcn-n [ #24 ] TEST-BYTE
279+ OPCODE
280+
281+ ( JSR - Requires return mode )
282+ #12 #34 ;routine JSR2 [ #46 ] TEST-BYTE
283+ OPCODE
284+
285+ ( STH )
286+ #0a STH #0b STH ADDr STHr [ #15 ] TEST-BYTE
287+ MODE
288+ #000a STH2 #000b STH2 ADD2r STH2r [ #0015 ] TEST-SHORT
289+ TYPE
290+
291+ ( Keep )
292+ #12 #34 ADDk ADD ADD [ #8c ] TEST-BYTE
293+ OPCODE
294+
295+ #010e DEO
296+ #010f DEO
297+
298+BRK
299+
300+@routine ( a b -- c )
301+
302+ ADD
303+
304+JMP2r
305+
306+@absolute
307+ &byte $1 &short $2