diff --git a/examples/README.md b/examples/README.md index e9035f2e..584e85b2 100644 --- a/examples/README.md +++ b/examples/README.md @@ -88,15 +88,19 @@ how to create a program made of multiple files loaded on demand * [Vertical scroll example](a8/vertical_scroll.mfk) – simple vertical scroll example -* [System Off example](a8/systemoff_example.mfk) – Programming example with ROM off +* [Horizontal stars example](a8/horizontal_stars.mfk) – horizontal stars done on one missile -* [GR.8 Chessboard Benchmark](a8/gr8_chessboard_benchmark.mfk) – Chessboard drawing benchmark in GR.8 +* [Grand Ttheft Antic](a8/grand_theft_antic.mfk) – ANTIC impact on CPU depending on the used graphic mode -* [FOR Countdown Benchmark](a8/countdown_for_benchmark.mfk) – Countdown from 1,999,999 to 0 (FOR loop) +* [System Off example](a8/systemoff_example.mfk) – programming with ROM off -* [WHILE Countdown Benchmark](a8/countdown_while_benchmark.mfk) – Countdown from 1,999,999 to 0 (WHILE loop) +* [GR.8 Chessboard Benchmark](a8/gr8_chessboard_benchmark.mfk) – chessboard drawing benchmark in GR.8 -* [Sieve of Eratosthenes (1899) Benchmark](a8/sieve1899.mfk) – Sieve of Eratosthenes, 1899 primes algorithm +* [FOR Countdown Benchmark](a8/countdown_for_benchmark.mfk) – countdown from 1,999,999 to 0 (FOR loop) + +* [WHILE Countdown Benchmark](a8/countdown_while_benchmark.mfk) – countdown from 1,999,999 to 0 (WHILE loop) + +* [Sieve of Eratosthenes (1899) Benchmark](a8/sieve1899.mfk) – sieve of Eratosthenes, 1899 primes algorithm * [Monte Carlo PI estimation Benchmark](a8/montecarlo_pi_benchmark.mfk) – measures the efficiency of multiplication diff --git a/examples/a8/grand_theft_antic.mfk b/examples/a8/grand_theft_antic.mfk new file mode 100644 index 00000000..62551ec8 --- /dev/null +++ b/examples/a8/grand_theft_antic.mfk @@ -0,0 +1,85 @@ +byte i @ $b0 +pointer screen @ $b2 +array(word) scores[17] @ $80 + +asm void openmode(byte register(a) m) @ $ef9c extern + +asm void pause() { + lda os_RTCLOK.b2 + .rt_check: + cmp os_RTCLOK.b2 + beq .rt_check + rts +} + +// print in HEX +void printScore(word val) { + array(byte) tmp[4] + byte iter + + tmp[0] = val.hi >> 4 + tmp[1] = val.hi & %00001111 + tmp[2] = val.lo >> 4 + tmp[3] = val.lo & %00001111 + + for iter:tmp { + if tmp[iter] < 10 { + screen[iter] = tmp[iter] + $10 + } else { + screen[iter] = tmp[iter] + $17 + } + } + + if i < 16 { + screen[4] = 0 + screen[5] = 'G' atariscr + screen[6] = 'R' atariscr + screen[7] = '.' atariscr + if i < 10 { + screen[8] = i + $10 + } else { + screen[8] = i + $17 + } + } else { + screen[4] = 0 + screen[5] = 'O' atariscr + screen[6] = 'F' atariscr + screen[7] = 'F' atariscr + } + + screen += 40 +} + + +void main(){ + for i:scores { + scores[i] = 0 + } + + for i,0,to,15 { + openmode(i) + pause() + os_RTCLOK.b2 = 0 + while os_RTCLOK.b2 < 100 { + scores[i] += 1 + } + } + + os_SDMCTL = 0 + i = 16 + pause() + os_RTCLOK.b2 = 0 + while os_RTCLOK.b2 < 100 { + scores[i] += 1 + } + os_SDMCTL = $22 + + openmode(0) + screen = os_SAVMSC + + for i:scores { + printScore(scores[i]) + } + + while true {} +} \ No newline at end of file diff --git a/examples/a8/horizontal_stars.mfk b/examples/a8/horizontal_stars.mfk new file mode 100644 index 00000000..24db7571 --- /dev/null +++ b/examples/a8/horizontal_stars.mfk @@ -0,0 +1,23 @@ +void main(){ + array(byte) stars[256] align(fast) + array(byte) speed[256] align(fast) + byte i + + os_PCOLR0 = $e + gtia_grafm = $e + + for i:stars { + stars[i] = pokey_random + speed[i] = (pokey_random & 3) + 1 + } + + while true { + if antic_vcount == 0 { + for i:stars { + antic_wsync = 1 + gtia_hposm0 = stars[i] + stars[i] += speed[i] + } + } + } +} \ No newline at end of file diff --git a/examples/a8/systemoff_example.mfk b/examples/a8/systemoff_example.mfk index 8ea33344..991dd27f 100644 --- a/examples/a8/systemoff_example.mfk +++ b/examples/a8/systemoff_example.mfk @@ -34,7 +34,7 @@ const array(byte) dl align(32) = [ // init procedure void system_off(){ asm { sei } // turn off IRQ - antic_nmien = 0 // turn off ANTIC + antic_nmien = 0 // turn off NMI pia_portb = $fe // turn off ROM rti = $40 // set RTI opcode vbivec = rti.addr // set address for VBI routine