-USING: kernel cpu.8080 cpu.8080.emulator math math io\r
-tools.time combinators sequences io.files ;\r
+USING: \r
+ accessors\r
+ combinators\r
+ cpu.8080\r
+ cpu.8080.emulator\r
+ io\r
+ io.files\r
+ io.encodings.ascii\r
+ kernel \r
+ math\r
+ math.bits\r
+ sequences\r
+ tools.time\r
+;\r
IN: cpu.8080.test\r
\r
: step ( cpu -- )\r
#! Run a single 8080 instruction\r
[ read-instruction ] keep ! n cpu\r
over get-cycles over inc-cycles\r
- [ swap instructions case ] keep\r
- [ cpu-pc HEX: FFFF bitand ] keep \r
- [ set-cpu-pc ] keep \r
+ [ swap instructions nth call( cpu -- ) ] keep\r
+ [ pc>> 0xFFFF bitand ] keep \r
+ [ pc<< ] keep \r
process-interrupts ;\r
\r
-\r
: test-step ( cpu -- cpu )\r
[ step ] keep dup cpu. ;\r
\r
+: invaders ( -- seq )\r
+ {\r
+ { 0x0000 "invaders/invaders.h" }\r
+ { 0x0800 "invaders/invaders.g" }\r
+ { 0x1000 "invaders/invaders.f" }\r
+ { 0x1800 "invaders/invaders.e" }\r
+ } ;\r
+\r
: test-cpu ( -- cpu )\r
- <cpu> "invaders.rom" over load-rom dup cpu. ;\r
+ <cpu> invaders over load-rom* dup cpu. ;\r
\r
: test-n ( n -- )\r
test-cpu swap [ test-step ] times drop ;\r
[ dup step ] times ;\r
\r
: each-8bit ( n quot -- )\r
- 8 -rot [ >r bit? r> call ] 2curry each ; inline\r
+ [ 8 <bits> ] dip each ; inline\r
\r
: >ppm ( cpu filename -- cpu )\r
#! Dump the current screen image to a ppm image file with the given name.\r
- <file-writer> [\r
+ ascii [\r
"P3" print\r
"256 224" print\r
"1" print\r
224 [\r
32 [\r
- over 32 * over + HEX: 2400 + ! cpu h w addr\r
- >r pick r> swap cpu-ram nth [\r
- 0 = [\r
+ over 32 * over + 0x2400 + ! cpu h w addr\r
+ [ pick ] dip swap ram>> nth [\r
+ [\r
" 0 0 0" write\r
] [\r
" 1 1 1" write\r
] each-8bit drop\r
] each drop nl\r
] each\r
- ] with-stream ;\r
+ ] with-file-writer ;\r
\r
: time-test ( -- )\r
test-cpu [ 1000000 run-n drop ] time ;\r