1
0
mirror of https://github.com/KarolS/millfork.git synced 2025-01-09 13:31:32 +00:00

Merge pull request #71 from zbyti/master

A8 new examples
This commit is contained in:
Karol Stasiak 2020-09-24 01:25:04 +02:00 committed by GitHub
commit 9f1309c119
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 118 additions and 6 deletions

View File

@ -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

View 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 {}
}

View 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]
}
}
}
}

View File

@ -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