mirror of
https://github.com/KarolS/millfork.git
synced 2025-04-10 01:36:59 +00:00
commit
b7cb124706
23
examples/a8/dli-example.mfk
Normal file
23
examples/a8/dli-example.mfk
Normal file
@ -0,0 +1,23 @@
|
||||
const word dlAddr = $3000
|
||||
const word dliAddr = $3100
|
||||
|
||||
const array(byte) dl @ dlAddr = [
|
||||
$70,$70,$70,
|
||||
$42,$00,$40,2,2,2,2,$f0,2,2,2,2,
|
||||
$41,lo(dlAddr),hi(dlAddr)
|
||||
]
|
||||
|
||||
volatile word SDLST @ $230
|
||||
|
||||
interrupt void dli() @ dliAddr {
|
||||
gtia_colpf2 = $de
|
||||
antic_wsync = 1
|
||||
}
|
||||
|
||||
void main() {
|
||||
SDLST = dl.addr
|
||||
os_VDSLST = dli.addr
|
||||
antic_nmien = $c0
|
||||
|
||||
while true {}
|
||||
}
|
70
examples/a8/endless_scroll.mfk
Normal file
70
examples/a8/endless_scroll.mfk
Normal file
@ -0,0 +1,70 @@
|
||||
const word dlAddr = $3000
|
||||
const word lms1Addr = $4000
|
||||
const word lms2Addr = $4060
|
||||
const word lms3Addr = $40c0
|
||||
|
||||
volatile word SDLST @ $230
|
||||
|
||||
array(byte) dl @ dlAddr = [
|
||||
$70,$70,$70,
|
||||
$52,lo(lms1Addr),hi(lms1Addr),
|
||||
$52,lo(lms2Addr),hi(lms2Addr),
|
||||
$52,lo(lms3Addr),hi(lms3Addr),
|
||||
$41,lo(dlAddr),hi(dlAddr)
|
||||
]
|
||||
|
||||
noinline asm void wait(byte register(a) f) {
|
||||
clc
|
||||
adc os_RTCLOK+2
|
||||
rt_check:
|
||||
cmp os_RTCLOK+2
|
||||
bne rt_check
|
||||
rts
|
||||
}
|
||||
|
||||
void main() {
|
||||
word lms1 @ dlAddr + 4
|
||||
word lms2 @ dlAddr + 7
|
||||
word lms3 @ dlAddr + 10
|
||||
byte hscroli @ $80, a, b, c
|
||||
pointer screeni @ $82
|
||||
|
||||
hscroli = $f
|
||||
screeni = lms1Addr
|
||||
|
||||
wait(1)
|
||||
SDLST = dl.addr
|
||||
|
||||
while true {
|
||||
if hscroli == $b {
|
||||
a = (pokey_random & 15) + 33
|
||||
b = (pokey_random & 15) + 33
|
||||
c = (pokey_random & 15) + 33
|
||||
|
||||
screeni[0] = a
|
||||
screeni[$60] = b
|
||||
screeni[$c0] = c
|
||||
|
||||
screeni[$30] = a
|
||||
screeni[$30 + $60] = b
|
||||
screeni[$30 + $c0] = c
|
||||
|
||||
lms1 += 1
|
||||
lms2 += 1
|
||||
lms3 += 1
|
||||
screeni += 1
|
||||
|
||||
if lms1 == lms1Addr + $30 {
|
||||
lms1 = lms1Addr
|
||||
lms2 = lms2Addr
|
||||
lms3 = lms3Addr
|
||||
screeni = lms1Addr
|
||||
}
|
||||
|
||||
hscroli = $f
|
||||
}
|
||||
antic_hscrol = hscroli
|
||||
hscroli -= 1
|
||||
wait(1)
|
||||
}
|
||||
}
|
@ -1,3 +1,27 @@
|
||||
; Simple Atari 800XL Memory Map
|
||||
; by Peter Dell
|
||||
; https://youtu.be/KIl4SgV0vJY
|
||||
|
||||
; $00-$7f zeropage for OS
|
||||
; $80-$ff zeropage for you
|
||||
; $100-$1ff CPU stack
|
||||
; $200-$2ff OS vector, registers
|
||||
; $300-$3ff OS vector, registers
|
||||
; $400-$5ff OS buffers
|
||||
; $600-$6ff Page 6, object code in BASIC
|
||||
; $700-$1fff Disk Operating System
|
||||
; $2000-RAMTOP Your code
|
||||
; $8000-$9fff Cartrige 8k/low 16k
|
||||
; $a000-$bfff Cartrige 8k/High 16k/BASIC
|
||||
; $c000-$cfff OS part 1
|
||||
; $cc00-$cfff OS character set, international
|
||||
; $d000-$d7ff Hardware registers and stuff
|
||||
; $e000-$ffff OS part 2
|
||||
; $e000-$e3ff OS character set, standard
|
||||
|
||||
; https://atariwiki.org/wiki/Wiki.jsp?page=Memory%20Map
|
||||
; https://www.atariarchives.org/mapping/memorymap.php
|
||||
|
||||
[compilation]
|
||||
arch=strict
|
||||
modules=a8_hardware,a8_os,a8_kernel,default_panic,stdlib
|
||||
@ -5,11 +29,11 @@ encoding=atascii
|
||||
screen_encoding=atasciiscr
|
||||
|
||||
[allocation]
|
||||
; TODO
|
||||
zp_bytes=$80-$A5
|
||||
; OS turned on
|
||||
zp_bytes=$80-$FF
|
||||
segment_default_start=$2000
|
||||
; TODO
|
||||
segment_default_end=$3fff
|
||||
; BASIC turned off
|
||||
segment_default_end=$BFFF
|
||||
|
||||
[define]
|
||||
ATARI_8=1
|
||||
@ -23,5 +47,3 @@ HAS_BITMAP_MODE=1
|
||||
style=single
|
||||
format=$FF,$FF,$E0,$02,$E1,$02,startaddr,startaddr,endaddr,allocated
|
||||
extension=xex
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user