mirror of
https://github.com/KarolS/millfork.git
synced 2025-01-08 22:30:34 +00:00
commit
9f1309c119
@ -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
|
||||
|
||||
|
85
examples/a8/grand_theft_antic.mfk
Normal file
85
examples/a8/grand_theft_antic.mfk
Normal file
@ -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 {}
|
||||
}
|
23
examples/a8/horizontal_stars.mfk
Normal file
23
examples/a8/horizontal_stars.mfk
Normal file
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user