diff --git a/examples/a8/montecarlo_pi_benchmark.mfk b/examples/a8/montecarlo_pi_benchmark.mfk new file mode 100644 index 00000000..9e840953 --- /dev/null +++ b/examples/a8/montecarlo_pi_benchmark.mfk @@ -0,0 +1,64 @@ +const word probe = 9999 +const word radius = 127 * 127 +pointer screen @ $80 + +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 + } + } + screen += 40 +} + +void main() { + array(bool) flags[size] align(1024) + word i@$e0, bingo@$e2 + word x@$e4, y@$e6, n@$e8, p@$ea + + screen = os_SAVMSC + + x = 0 + y = 0 + bingo = 0 + + pause() + os_RTCLOK = 0 + + for i,0,to,probe { + n = pokey_random & 127 + x = n * n + n = pokey_random & 127 + y = n * n + if ((x + y) <= radius) { + bingo += 1 + } + } + p = 4 * bingo + + n = os_RTCLOK.b2 + (os_RTCLOK.b1 * 256) + + printScore(n) + printScore(p) + + while true {} +} diff --git a/examples/a8/sieve1899.mfk b/examples/a8/sieve1899.mfk new file mode 100644 index 00000000..62bd754b --- /dev/null +++ b/examples/a8/sieve1899.mfk @@ -0,0 +1,68 @@ +const word size = 8192 + +word RTCLOK @ $13, SAVMSC @ $58 +word i@$e0, prime@$e2, k@$e4, count@$e6 +pointer screen@$e8 + +asm void pause() { + lda $14 + .rt_check: + cmp $14 + beq .rt_check + rts +} + +// print in HEX +void printScore() { + array(byte) tmp[4] + byte iter + + screen = SAVMSC + + tmp[0] = RTCLOK.lo >> 4 + tmp[1] = RTCLOK.lo & %00001111 + tmp[2] = RTCLOK.hi >> 4 + tmp[3] = RTCLOK.hi & %00001111 + + for iter:tmp { + if tmp[iter] < 10 { + screen[iter] = tmp[iter] + $10 + } else { + screen[iter] = tmp[iter] + $17 + } + } +} + +void main() { + array(bool) flags[size] align(1024) + byte iter + + pause() + RTCLOK = 0 + + for iter,9,downto,0 { + + count = 0 + + for i:flags { + flags[i] = true + } + + for i:flags { + if flags[i] { + prime = (i * 2) + 3 + k = i + prime + while k <= size { + flags[k] = false + k += prime + } + count += 1 + } + } + + } + + printScore() + + while true {} +}