From 3582925cb120f0a01b1f20cdb05864e83e9c3c83 Mon Sep 17 00:00:00 2001 From: zbyti Date: Sat, 5 Sep 2020 11:37:04 +0200 Subject: [PATCH 01/10] Simple Atari 800XL Memory Map --- include/platform/a8.ini | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/include/platform/a8.ini b/include/platform/a8.ini index 32ffc46e..97d6911a 100644 --- a/include/platform/a8.ini +++ b/include/platform/a8.ini @@ -1,3 +1,23 @@ +; 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 +; $e000-$ffff OS part 2 +; $e000-$e3ff OS character set, standard + [compilation] arch=strict modules=a8_hardware,a8_os,a8_kernel,default_panic,stdlib @@ -5,11 +25,11 @@ encoding=atascii screen_encoding=atasciiscr [allocation] -; TODO -zp_bytes=$80-$A5 +; OS TURN ON +zp_bytes=$80-$FF segment_default_start=$2000 -; TODO -segment_default_end=$3fff +; BASIC TURN OFF +segment_default_end=$bfff [define] ATARI_8=1 @@ -23,5 +43,3 @@ HAS_BITMAP_MODE=1 style=single format=$FF,$FF,$E0,$02,$E1,$02,startaddr,startaddr,endaddr,allocated extension=xex - - From 6b0effaae6d7794a33d9bb60c9dd5bbe4d2d2933 Mon Sep 17 00:00:00 2001 From: zbyti Date: Sat, 5 Sep 2020 11:43:18 +0200 Subject: [PATCH 02/10] Simple Atari 800XL Memory Map --- include/platform/a8.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/platform/a8.ini b/include/platform/a8.ini index 97d6911a..79d6c8c4 100644 --- a/include/platform/a8.ini +++ b/include/platform/a8.ini @@ -1,4 +1,4 @@ -; Simple Atari 800XL memory map +; Simple Atari 800XL Memory Map ; by Peter Dell ; https://youtu.be/KIl4SgV0vJY @@ -25,10 +25,10 @@ encoding=atascii screen_encoding=atasciiscr [allocation] -; OS TURN ON +; OS turned on zp_bytes=$80-$FF segment_default_start=$2000 -; BASIC TURN OFF +; BASIC turned off segment_default_end=$bfff [define] From 9a0176333b735a1833acac7e963c20362dea00d2 Mon Sep 17 00:00:00 2001 From: zbyti Date: Sat, 5 Sep 2020 11:47:24 +0200 Subject: [PATCH 03/10] Simple Atari 800XL Memory Map --- include/platform/a8.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/include/platform/a8.ini b/include/platform/a8.ini index 79d6c8c4..09ea3f76 100644 --- a/include/platform/a8.ini +++ b/include/platform/a8.ini @@ -15,6 +15,7 @@ ; $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 From 4849069d39f09229d21455d0f9c316c245717cba Mon Sep 17 00:00:00 2001 From: zbyti Date: Sat, 5 Sep 2020 11:48:49 +0200 Subject: [PATCH 04/10] Simple Atari 800XL Memory Map --- include/platform/a8.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/platform/a8.ini b/include/platform/a8.ini index 09ea3f76..361e5192 100644 --- a/include/platform/a8.ini +++ b/include/platform/a8.ini @@ -19,6 +19,9 @@ ; $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 From c31a2ee3883613fc8e19e7464388a05c9293006a Mon Sep 17 00:00:00 2001 From: zbyti Date: Sat, 5 Sep 2020 11:58:02 +0200 Subject: [PATCH 05/10] Simple Atari 800XL Memory Map --- include/platform/a8.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/platform/a8.ini b/include/platform/a8.ini index 361e5192..728f12e5 100644 --- a/include/platform/a8.ini +++ b/include/platform/a8.ini @@ -33,7 +33,7 @@ screen_encoding=atasciiscr zp_bytes=$80-$FF segment_default_start=$2000 ; BASIC turned off -segment_default_end=$bfff +segment_default_end=$BFFF [define] ATARI_8=1 From 06e5da4e662b65c06f5379c95cf3bc54ba1ac963 Mon Sep 17 00:00:00 2001 From: zbyti Date: Sun, 6 Sep 2020 22:53:59 +0200 Subject: [PATCH 06/10] endless scroll with random letters --- examples/a8/endless_scroll.mfk | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 examples/a8/endless_scroll.mfk diff --git a/examples/a8/endless_scroll.mfk b/examples/a8/endless_scroll.mfk new file mode 100644 index 00000000..dceb2bb2 --- /dev/null +++ b/examples/a8/endless_scroll.mfk @@ -0,0 +1,70 @@ +const word dlAddr = $3000 +const word lms1Addr = $4000 +const word lms2Addr = $4060 +const word lms3Addr = $40c0 + +word SDLST @ $230 + +array(byte) dl @ dlAddr = [ + $70,$70,$70, + $52,$00,$40, + $52,$60,$40, + $52,$C0,$40, + $41,$00,$30 +] + +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) + } +} From 19de4085d748664e85ca965c8ff2e9776d311ae0 Mon Sep 17 00:00:00 2001 From: zbyti Date: Mon, 7 Sep 2020 01:29:53 +0200 Subject: [PATCH 07/10] dli example --- examples/a8/dli-example.mfk | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/a8/dli-example.mfk diff --git a/examples/a8/dli-example.mfk b/examples/a8/dli-example.mfk new file mode 100644 index 00000000..95a30b0a --- /dev/null +++ b/examples/a8/dli-example.mfk @@ -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,$00,$30 +] + +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 {} +} From f5fb1a69110e5e7287b44fbf3e2288ea0627baad Mon Sep 17 00:00:00 2001 From: zbyti Date: Mon, 7 Sep 2020 23:56:50 +0200 Subject: [PATCH 08/10] refactor --- examples/a8/endless_scroll.mfk | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/a8/endless_scroll.mfk b/examples/a8/endless_scroll.mfk index dceb2bb2..cba24b56 100644 --- a/examples/a8/endless_scroll.mfk +++ b/examples/a8/endless_scroll.mfk @@ -7,12 +7,13 @@ word SDLST @ $230 array(byte) dl @ dlAddr = [ $70,$70,$70, - $52,$00,$40, - $52,$60,$40, - $52,$C0,$40, - $41,$00,$30 + $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 From e0b2d28a7d6cabfd938ab20a4717b307095501a6 Mon Sep 17 00:00:00 2001 From: zbyti Date: Tue, 8 Sep 2020 00:08:43 +0200 Subject: [PATCH 09/10] refactor --- examples/a8/dli-example.mfk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/a8/dli-example.mfk b/examples/a8/dli-example.mfk index 95a30b0a..e42c5e58 100644 --- a/examples/a8/dli-example.mfk +++ b/examples/a8/dli-example.mfk @@ -4,7 +4,7 @@ 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,$00,$30 + $41,lo(dlAddr),hi(dlAddr) ] word SDLST @ $230 From 866a9ee9d04f6aea015a87b4021092611b6456d4 Mon Sep 17 00:00:00 2001 From: zbyti Date: Tue, 8 Sep 2020 00:17:10 +0200 Subject: [PATCH 10/10] refactor --- examples/a8/dli-example.mfk | 2 +- examples/a8/endless_scroll.mfk | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/a8/dli-example.mfk b/examples/a8/dli-example.mfk index e42c5e58..a9e61f1d 100644 --- a/examples/a8/dli-example.mfk +++ b/examples/a8/dli-example.mfk @@ -7,7 +7,7 @@ const array(byte) dl @ dlAddr = [ $41,lo(dlAddr),hi(dlAddr) ] -word SDLST @ $230 +volatile word SDLST @ $230 interrupt void dli() @ dliAddr { gtia_colpf2 = $de diff --git a/examples/a8/endless_scroll.mfk b/examples/a8/endless_scroll.mfk index cba24b56..599e84e1 100644 --- a/examples/a8/endless_scroll.mfk +++ b/examples/a8/endless_scroll.mfk @@ -3,7 +3,7 @@ const word lms1Addr = $4000 const word lms2Addr = $4060 const word lms3Addr = $40c0 -word SDLST @ $230 +volatile word SDLST @ $230 array(byte) dl @ dlAddr = [ $70,$70,$70, @@ -13,7 +13,6 @@ array(byte) dl @ dlAddr = [ $41,lo(dlAddr),hi(dlAddr) ] - noinline asm void wait(byte register(a) f) { clc adc os_RTCLOK+2