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