From b5d157582306496b65d5837978c57c101a4d9e01 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Wed, 18 Jun 2025 00:05:10 +0200 Subject: [PATCH] added boolean typed versions of the cx16.r0-r15 virtual registers --- compiler/res/prog8lib/c128/syslib.p8 | 39 ++++++++++++++++++ compiler/res/prog8lib/c64/syslib.p8 | 39 ++++++++++++++++++ compiler/res/prog8lib/cx16/syslib.p8 | 39 ++++++++++++++++++ compiler/res/prog8lib/pet32/syslib.p8 | 39 ++++++++++++++++++ compiler/res/prog8lib/virtual/syslib.p8 | 39 ++++++++++++++++++ compiler/test/ast/TestVariousCompilerAst.kt | 40 ++++++++++++++++-- .../_static/symboldumps/skeletons-c128.txt | 38 +++++++++++++++-- .../_static/symboldumps/skeletons-c64.txt | 38 +++++++++++++++-- .../_static/symboldumps/skeletons-cx16.txt | 38 +++++++++++++++-- .../_static/symboldumps/skeletons-pet32.txt | 38 +++++++++++++++-- .../_static/symboldumps/skeletons-virtual.txt | 41 +++++++++++++++++-- docs/source/programming.rst | 17 +++++--- .../customtarget/libraries/atari/syslib.p8 | 39 +++++++++++++++++- .../customtarget/libraries/neo6502/syslib.p8 | 39 ++++++++++++++++++ .../customtarget/libraries/tinyc64/syslib.p8 | 38 +++++++++++++++++ .../customtarget/libraries/tinycx16/syslib.p8 | 38 +++++++++++++++++ .../customtarget/libraries/tinypet/syslib.p8 | 38 +++++++++++++++++ examples/test.p8 | 37 ++++++++++------- 18 files changed, 634 insertions(+), 40 deletions(-) diff --git a/compiler/res/prog8lib/c128/syslib.p8 b/compiler/res/prog8lib/c128/syslib.p8 index 2c4dfcea5..cbbd5816a 100644 --- a/compiler/res/prog8lib/c128/syslib.p8 +++ b/compiler/res/prog8lib/c128/syslib.p8 @@ -997,6 +997,7 @@ cx16 { &uword r14 = $1bfc &uword r15 = $1bfe + ; signed word versions &word r0s = $1be0 &word r1s = $1be2 &word r2s = $1be4 @@ -1014,6 +1015,7 @@ cx16 { &word r14s = $1bfc &word r15s = $1bfe + ; ubyte versions (low and high bytes) &ubyte r0L = $1be0 &ubyte r1L = $1be2 &ubyte r2L = $1be4 @@ -1048,6 +1050,7 @@ cx16 { &ubyte r14H = $1bfd &ubyte r15H = $1bff + ; signed byte versions (low and high bytes) &byte r0sL = $1be0 &byte r1sL = $1be2 &byte r2sL = $1be4 @@ -1082,6 +1085,42 @@ cx16 { &byte r14sH = $1bfd &byte r15sH = $1bff + ; boolean versions (low and high bytes) + &bool r0bL = $1be0 + &bool r1bL = $1be2 + &bool r2bL = $1be4 + &bool r3bL = $1be6 + &bool r4bL = $1be8 + &bool r5bL = $1bea + &bool r6bL = $1bec + &bool r7bL = $1bee + &bool r8bL = $1bf0 + &bool r9bL = $1bf2 + &bool r10bL = $1bf4 + &bool r11bL = $1bf6 + &bool r12bL = $1bf8 + &bool r13bL = $1bfa + &bool r14bL = $1bfc + &bool r15bL = $1bfe + + &bool r0bH = $1be1 + &bool r1bH = $1be3 + &bool r2bH = $1be5 + &bool r3bH = $1be7 + &bool r4bH = $1be9 + &bool r5bH = $1beb + &bool r6bH = $1bed + &bool r7bH = $1bef + &bool r8bH = $1bf1 + &bool r9bH = $1bf3 + &bool r10bH = $1bf5 + &bool r11bH = $1bf7 + &bool r12bH = $1bf9 + &bool r13bH = $1bfb + &bool r14bH = $1bfd + &bool r15bH = $1bff + + asmsub save_virtual_registers() clobbers(A,Y) { %asm {{ ldy #31 diff --git a/compiler/res/prog8lib/c64/syslib.p8 b/compiler/res/prog8lib/c64/syslib.p8 index 7431983dd..3c502698e 100644 --- a/compiler/res/prog8lib/c64/syslib.p8 +++ b/compiler/res/prog8lib/c64/syslib.p8 @@ -1019,6 +1019,7 @@ cx16 { &uword r14 = $cffc &uword r15 = $cffe + ; signed word versions &word r0s = $cfe0 &word r1s = $cfe2 &word r2s = $cfe4 @@ -1036,6 +1037,7 @@ cx16 { &word r14s = $cffc &word r15s = $cffe + ; ubyte versions (low and high bytes) &ubyte r0L = $cfe0 &ubyte r1L = $cfe2 &ubyte r2L = $cfe4 @@ -1070,6 +1072,7 @@ cx16 { &ubyte r14H = $cffd &ubyte r15H = $cfff + ; signed byte versions (low and high bytes) &byte r0sL = $cfe0 &byte r1sL = $cfe2 &byte r2sL = $cfe4 @@ -1104,6 +1107,42 @@ cx16 { &byte r14sH = $cffd &byte r15sH = $cfff + ; boolean versions + &bool r0bL = $cfe0 + &bool r1bL = $cfe2 + &bool r2bL = $cfe4 + &bool r3bL = $cfe6 + &bool r4bL = $cfe8 + &bool r5bL = $cfea + &bool r6bL = $cfec + &bool r7bL = $cfee + &bool r8bL = $cff0 + &bool r9bL = $cff2 + &bool r10bL = $cff4 + &bool r11bL = $cff6 + &bool r12bL = $cff8 + &bool r13bL = $cffa + &bool r14bL = $cffc + &bool r15bL = $cffe + + &bool r0bH = $cfe1 + &bool r1bH = $cfe3 + &bool r2bH = $cfe5 + &bool r3bH = $cfe7 + &bool r4bH = $cfe9 + &bool r5bH = $cfeb + &bool r6bH = $cfed + &bool r7bH = $cfef + &bool r8bH = $cff1 + &bool r9bH = $cff3 + &bool r10bH = $cff5 + &bool r11bH = $cff7 + &bool r12bH = $cff9 + &bool r13bH = $cffb + &bool r14bH = $cffd + &bool r15bH = $cfff + + asmsub save_virtual_registers() clobbers(A,Y) { %asm {{ ldy #31 diff --git a/compiler/res/prog8lib/cx16/syslib.p8 b/compiler/res/prog8lib/cx16/syslib.p8 index df3a4bfbc..837b983b0 100644 --- a/compiler/res/prog8lib/cx16/syslib.p8 +++ b/compiler/res/prog8lib/cx16/syslib.p8 @@ -177,6 +177,7 @@ cx16 { &uword r14 = $001e &uword r15 = $0020 + ; signed word versions &word r0s = $0002 &word r1s = $0004 &word r2s = $0006 @@ -194,6 +195,7 @@ cx16 { &word r14s = $001e &word r15s = $0020 + ; ubyte versions (low and high bytes) &ubyte r0L = $0002 &ubyte r1L = $0004 &ubyte r2L = $0006 @@ -228,6 +230,7 @@ cx16 { &ubyte r14H = $001f &ubyte r15H = $0021 + ; signed byte versions (low and high bytes) &byte r0sL = $0002 &byte r1sL = $0004 &byte r2sL = $0006 @@ -262,6 +265,42 @@ cx16 { &byte r14sH = $001f &byte r15sH = $0021 + ; boolean versions + &bool r0bL = $0002 + &bool r1bL = $0004 + &bool r2bL = $0006 + &bool r3bL = $0008 + &bool r4bL = $000a + &bool r5bL = $000c + &bool r6bL = $000e + &bool r7bL = $0010 + &bool r8bL = $0012 + &bool r9bL = $0014 + &bool r10bL = $0016 + &bool r11bL = $0018 + &bool r12bL = $001a + &bool r13bL = $001c + &bool r14bL = $001e + &bool r15bL = $0020 + + &bool r0bH = $0003 + &bool r1bH = $0005 + &bool r2bH = $0007 + &bool r3bH = $0009 + &bool r4bH = $000b + &bool r5bH = $000d + &bool r6bH = $000f + &bool r7bH = $0011 + &bool r8bH = $0013 + &bool r9bH = $0015 + &bool r10bH = $0017 + &bool r11bH = $0019 + &bool r12bH = $001b + &bool r13bH = $001d + &bool r14bH = $001f + &bool r15bH = $0021 + + ; VERA registers const uword VERA_BASE = $9F20 diff --git a/compiler/res/prog8lib/pet32/syslib.p8 b/compiler/res/prog8lib/pet32/syslib.p8 index 371467b70..4e0476f7c 100644 --- a/compiler/res/prog8lib/pet32/syslib.p8 +++ b/compiler/res/prog8lib/pet32/syslib.p8 @@ -532,6 +532,7 @@ cx16 { &uword r14 = $7ffc &uword r15 = $7ffe + ; signed word versions &word r0s = $7fe0 &word r1s = $7fe2 &word r2s = $7fe4 @@ -549,6 +550,7 @@ cx16 { &word r14s = $7ffc &word r15s = $7ffe + ; ubyte versions (low and high bytes) &ubyte r0L = $7fe0 &ubyte r1L = $7fe2 &ubyte r2L = $7fe4 @@ -583,6 +585,7 @@ cx16 { &ubyte r14H = $7ffd &ubyte r15H = $7fff + ; signed byte versions (low and high bytes) &byte r0sL = $7fe0 &byte r1sL = $7fe2 &byte r2sL = $7fe4 @@ -617,6 +620,42 @@ cx16 { &byte r14sH = $7ffd &byte r15sH = $7fff + ; boolean versions + &bool r0bL = $7fe0 + &bool r1bL = $7fe2 + &bool r2bL = $7fe4 + &bool r3bL = $7fe6 + &bool r4bL = $7fe8 + &bool r5bL = $7fea + &bool r6bL = $7fec + &bool r7bL = $7fee + &bool r8bL = $7ff0 + &bool r9bL = $7ff2 + &bool r10bL = $7ff4 + &bool r11bL = $7ff6 + &bool r12bL = $7ff8 + &bool r13bL = $7ffa + &bool r14bL = $7ffc + &bool r15bL = $7ffe + + &bool r0bH = $7fe1 + &bool r1bH = $7fe3 + &bool r2bH = $7fe5 + &bool r3bH = $7fe7 + &bool r4bH = $7fe9 + &bool r5bH = $7feb + &bool r6bH = $7fed + &bool r7bH = $7fef + &bool r8bH = $7ff1 + &bool r9bH = $7ff3 + &bool r10bH = $7ff5 + &bool r11bH = $7ff7 + &bool r12bH = $7ff9 + &bool r13bH = $7ffb + &bool r14bH = $7ffd + &bool r15bH = $7fff + + asmsub save_virtual_registers() clobbers(A,Y) { %asm {{ ldy #31 diff --git a/compiler/res/prog8lib/virtual/syslib.p8 b/compiler/res/prog8lib/virtual/syslib.p8 index 411725edf..f74966558 100644 --- a/compiler/res/prog8lib/virtual/syslib.p8 +++ b/compiler/res/prog8lib/virtual/syslib.p8 @@ -266,6 +266,7 @@ cx16 { &uword r14 = $ff1e &uword r15 = $ff20 + ; signed word versions &word r0s = $ff02 &word r1s = $ff04 &word r2s = $ff06 @@ -283,6 +284,7 @@ cx16 { &word r14s = $ff1e &word r15s = $ff20 + ; ubyte versions (low and high bytes) &ubyte r0L = $ff02 &ubyte r1L = $ff04 &ubyte r2L = $ff06 @@ -317,6 +319,7 @@ cx16 { &ubyte r14H = $ff1f &ubyte r15H = $ff21 + ; signed byte versions (low and high bytes) &byte r0sL = $ff02 &byte r1sL = $ff04 &byte r2sL = $ff06 @@ -351,6 +354,42 @@ cx16 { &byte r14sH = $ff1f &byte r15sH = $ff21 + ; boolean versions + &bool r0bL = $ff02 + &bool r1bL = $ff04 + &bool r2bL = $ff06 + &bool r3bL = $ff08 + &bool r4bL = $ff0a + &bool r5bL = $ff0c + &bool r6bL = $ff0e + &bool r7bL = $ff10 + &bool r8bL = $ff12 + &bool r9bL = $ff14 + &bool r10bL = $ff16 + &bool r11bL = $ff18 + &bool r12bL = $ff1a + &bool r13bL = $ff1c + &bool r14bL = $ff1e + &bool r15bL = $ff20 + + &bool r0bH = $ff03 + &bool r1bH = $ff05 + &bool r2bH = $ff07 + &bool r3bH = $ff09 + &bool r4bH = $ff0b + &bool r5bH = $ff0d + &bool r6bH = $ff0f + &bool r7bH = $ff11 + &bool r8bH = $ff13 + &bool r9bH = $ff15 + &bool r10bH = $ff17 + &bool r11bH = $ff19 + &bool r12bH = $ff1b + &bool r13bH = $ff1d + &bool r14bH = $ff1f + &bool r15bH = $ff21 + + sub save_virtual_registers() { uword[32] storage storage[0] = r0 diff --git a/compiler/test/ast/TestVariousCompilerAst.kt b/compiler/test/ast/TestVariousCompilerAst.kt index e30bcebb9..d131b3e33 100644 --- a/compiler/test/ast/TestVariousCompilerAst.kt +++ b/compiler/test/ast/TestVariousCompilerAst.kt @@ -17,9 +17,7 @@ import prog8.code.ast.* import prog8.code.core.BaseDataType import prog8.code.core.DataType import prog8.code.core.Position -import prog8.code.target.C64Target -import prog8.code.target.Cx16Target -import prog8.code.target.VMTarget +import prog8.code.target.* import prog8tests.helpers.ErrorReporterForTests import prog8tests.helpers.compileText @@ -1057,6 +1055,42 @@ main { compileText(VMTarget(), optimize=false, src, outputDir, writeAssembly=true) shouldNotBe null } + test("using the cx16 virtual registers as various datatypes") { + val src=""" +main { + sub start() { + uword uw = 9999 + word sw = -2222 + ubyte ub = 42 + byte sb = -99 + bool bb = true + + cx16.r0 = uw + cx16.r0s = sw + cx16.r0L = ub + cx16.r0H = ub + cx16.r0sL = sb + cx16.r0sH = sb + cx16.r0bL = bb + cx16.r0bH = bb + + uw = cx16.r0 + sw = cx16.r0s + ub = cx16.r0L + ub = cx16.r0H + sb = cx16.r0sL + sb = cx16.r0sH + bb = cx16.r0bL + bb = cx16.r0bH + } +}""" + + compileText(Cx16Target(), optimize=false, src, outputDir, writeAssembly=false) shouldNotBe null + compileText(VMTarget(), optimize=false, src, outputDir, writeAssembly=false) shouldNotBe null + compileText(C64Target(), optimize=false, src, outputDir, writeAssembly=false) shouldNotBe null + compileText(PETTarget(), optimize=false, src, outputDir, writeAssembly=false) shouldNotBe null + compileText(C128Target(), optimize=false, src, outputDir, writeAssembly=false) shouldNotBe null + } test("on..goto") { val src=""" diff --git a/docs/source/_static/symboldumps/skeletons-c128.txt b/docs/source/_static/symboldumps/skeletons-c128.txt index cf55651b1..925b0f136 100644 --- a/docs/source/_static/symboldumps/skeletons-c128.txt +++ b/docs/source/_static/symboldumps/skeletons-c128.txt @@ -1,6 +1,5 @@ -Prog8 compiler v11.4-SNAPSHOT by Irmen de Jong (irmen@razorvine.net) -Prerelease version from git commit a87f2640 in branch master +Prog8 compiler v11.4 by Irmen de Jong (irmen@razorvine.net) This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html Compiling program import-all-c128.p8 @@ -109,7 +108,6 @@ LIBRARY MODULE NAME: coroutines coroutines { const ubyte MAX_TASKS ubyte active_task - uword[] returnaddresses uword supervisor uword[] tasklist uword[] userdatas @@ -238,6 +236,7 @@ strings { copy (uword source @R0, uword target @AY) -> clobbers (A) -> ubyte @Y endswith (str st, str suffix) -> bool find (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc + find_eol (uword string @AY) -> ubyte @A, bool @Pc findstr (str haystack, str needle) -> ubyte hash (str string @AY) -> ubyte @A isdigit (ubyte petsciichar @A) -> bool @Pc @@ -529,6 +528,7 @@ sys { exit (ubyte returnvalue @A) exit2 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y) exit3 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y, bool carry @Pc) + get_as_returnaddress (uword address @XY) -> uword @AX internal_stringcopy (uword source @R0, uword target @AY) -> clobbers (A,Y) irqsafe_clear_irqd () irqsafe_set_irqd () @@ -561,6 +561,8 @@ cx16 { &uword r0 &ubyte r0H &ubyte r0L + &bool r0bH + &bool r0bL &word r0s &byte r0sH &byte r0sL @@ -568,89 +570,119 @@ cx16 { &uword r10 &ubyte r10H &ubyte r10L + &bool r10bH + &bool r10bL &word r10s &byte r10sH &byte r10sL &uword r11 &ubyte r11H &ubyte r11L + &bool r11bH + &bool r11bL &word r11s &byte r11sH &byte r11sL &uword r12 &ubyte r12H &ubyte r12L + &bool r12bH + &bool r12bL &word r12s &byte r12sH &byte r12sL &uword r13 &ubyte r13H &ubyte r13L + &bool r13bH + &bool r13bL &word r13s &byte r13sH &byte r13sL &uword r14 &ubyte r14H &ubyte r14L + &bool r14bH + &bool r14bL &word r14s &byte r14sH &byte r14sL &uword r15 &ubyte r15H &ubyte r15L + &bool r15bH + &bool r15bL &word r15s &byte r15sH &byte r15sL &ubyte r1H &ubyte r1L + &bool r1bH + &bool r1bL &word r1s &byte r1sH &byte r1sL &uword r2 &ubyte r2H &ubyte r2L + &bool r2bH + &bool r2bL &word r2s &byte r2sH &byte r2sL &uword r3 &ubyte r3H &ubyte r3L + &bool r3bH + &bool r3bL &word r3s &byte r3sH &byte r3sL &uword r4 &ubyte r4H &ubyte r4L + &bool r4bH + &bool r4bL &word r4s &byte r4sH &byte r4sL &uword r5 &ubyte r5H &ubyte r5L + &bool r5bH + &bool r5bL &word r5s &byte r5sH &byte r5sL &uword r6 &ubyte r6H &ubyte r6L + &bool r6bH + &bool r6bL &word r6s &byte r6sH &byte r6sL &uword r7 &ubyte r7H &ubyte r7L + &bool r7bH + &bool r7bL &word r7s &byte r7sH &byte r7sL &uword r8 &ubyte r8H &ubyte r8L + &bool r8bH + &bool r8bL &word r8s &byte r8sH &byte r8sL &uword r9 &ubyte r9H &ubyte r9L + &bool r9bH + &bool r9bL &word r9s &byte r9sH &byte r9sL diff --git a/docs/source/_static/symboldumps/skeletons-c64.txt b/docs/source/_static/symboldumps/skeletons-c64.txt index 69a7ecaa9..ff7489187 100644 --- a/docs/source/_static/symboldumps/skeletons-c64.txt +++ b/docs/source/_static/symboldumps/skeletons-c64.txt @@ -1,6 +1,5 @@ -Prog8 compiler v11.4-SNAPSHOT by Irmen de Jong (irmen@razorvine.net) -Prerelease version from git commit a87f2640 in branch master +Prog8 compiler v11.4 by Irmen de Jong (irmen@razorvine.net) This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html Compiling program import-all-c64.p8 @@ -109,7 +108,6 @@ LIBRARY MODULE NAME: coroutines coroutines { const ubyte MAX_TASKS ubyte active_task - uword[] returnaddresses uword supervisor uword[] tasklist uword[] userdatas @@ -365,6 +363,7 @@ strings { copy (uword source @R0, uword target @AY) -> clobbers (A) -> ubyte @Y endswith (str st, str suffix) -> bool find (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc + find_eol (uword string @AY) -> ubyte @A, bool @Pc findstr (str haystack, str needle) -> ubyte hash (str string @AY) -> ubyte @A isdigit (ubyte petsciichar @A) -> bool @Pc @@ -658,6 +657,7 @@ sys { exit (ubyte returnvalue @A) exit2 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y) exit3 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y, bool carry @Pc) + get_as_returnaddress (uword address @XY) -> uword @AX internal_stringcopy (uword source @R0, uword target @AY) -> clobbers (A,Y) irqsafe_clear_irqd () irqsafe_set_irqd () @@ -690,6 +690,8 @@ cx16 { &uword r0 &ubyte r0H &ubyte r0L + &bool r0bH + &bool r0bL &word r0s &byte r0sH &byte r0sL @@ -697,89 +699,119 @@ cx16 { &uword r10 &ubyte r10H &ubyte r10L + &bool r10bH + &bool r10bL &word r10s &byte r10sH &byte r10sL &uword r11 &ubyte r11H &ubyte r11L + &bool r11bH + &bool r11bL &word r11s &byte r11sH &byte r11sL &uword r12 &ubyte r12H &ubyte r12L + &bool r12bH + &bool r12bL &word r12s &byte r12sH &byte r12sL &uword r13 &ubyte r13H &ubyte r13L + &bool r13bH + &bool r13bL &word r13s &byte r13sH &byte r13sL &uword r14 &ubyte r14H &ubyte r14L + &bool r14bH + &bool r14bL &word r14s &byte r14sH &byte r14sL &uword r15 &ubyte r15H &ubyte r15L + &bool r15bH + &bool r15bL &word r15s &byte r15sH &byte r15sL &ubyte r1H &ubyte r1L + &bool r1bH + &bool r1bL &word r1s &byte r1sH &byte r1sL &uword r2 &ubyte r2H &ubyte r2L + &bool r2bH + &bool r2bL &word r2s &byte r2sH &byte r2sL &uword r3 &ubyte r3H &ubyte r3L + &bool r3bH + &bool r3bL &word r3s &byte r3sH &byte r3sL &uword r4 &ubyte r4H &ubyte r4L + &bool r4bH + &bool r4bL &word r4s &byte r4sH &byte r4sL &uword r5 &ubyte r5H &ubyte r5L + &bool r5bH + &bool r5bL &word r5s &byte r5sH &byte r5sL &uword r6 &ubyte r6H &ubyte r6L + &bool r6bH + &bool r6bL &word r6s &byte r6sH &byte r6sL &uword r7 &ubyte r7H &ubyte r7L + &bool r7bH + &bool r7bL &word r7s &byte r7sH &byte r7sL &uword r8 &ubyte r8H &ubyte r8L + &bool r8bH + &bool r8bL &word r8s &byte r8sH &byte r8sL &uword r9 &ubyte r9H &ubyte r9L + &bool r9bH + &bool r9bL &word r9s &byte r9sH &byte r9sL diff --git a/docs/source/_static/symboldumps/skeletons-cx16.txt b/docs/source/_static/symboldumps/skeletons-cx16.txt index b4a10c32f..2849d148b 100644 --- a/docs/source/_static/symboldumps/skeletons-cx16.txt +++ b/docs/source/_static/symboldumps/skeletons-cx16.txt @@ -1,6 +1,5 @@ -Prog8 compiler v11.4-SNAPSHOT by Irmen de Jong (irmen@razorvine.net) -Prerelease version from git commit a87f2640 in branch master +Prog8 compiler v11.4 by Irmen de Jong (irmen@razorvine.net) This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html Compiling program import-all-cx16.p8 @@ -147,7 +146,6 @@ LIBRARY MODULE NAME: coroutines coroutines { const ubyte MAX_TASKS ubyte active_task - uword[] returnaddresses uword supervisor uword[] tasklist uword[] userdatas @@ -676,6 +674,7 @@ strings { copy (uword source @R0, uword target @AY) -> clobbers (A) -> ubyte @Y endswith (str st, str suffix) -> bool find (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc + find_eol (uword string @AY) -> ubyte @A, bool @Pc findstr (str haystack, str needle) -> ubyte hash (str string @AY) -> ubyte @A isdigit (ubyte petsciichar @A) -> bool @Pc @@ -894,6 +893,8 @@ cx16 { &uword r0 &ubyte r0H &ubyte r0L + &bool r0bH + &bool r0bL &word r0s &byte r0sH &byte r0sL @@ -901,89 +902,119 @@ cx16 { &uword r10 &ubyte r10H &ubyte r10L + &bool r10bH + &bool r10bL &word r10s &byte r10sH &byte r10sL &uword r11 &ubyte r11H &ubyte r11L + &bool r11bH + &bool r11bL &word r11s &byte r11sH &byte r11sL &uword r12 &ubyte r12H &ubyte r12L + &bool r12bH + &bool r12bL &word r12s &byte r12sH &byte r12sL &uword r13 &ubyte r13H &ubyte r13L + &bool r13bH + &bool r13bL &word r13s &byte r13sH &byte r13sL &uword r14 &ubyte r14H &ubyte r14L + &bool r14bH + &bool r14bL &word r14s &byte r14sH &byte r14sL &uword r15 &ubyte r15H &ubyte r15L + &bool r15bH + &bool r15bL &word r15s &byte r15sH &byte r15sL &ubyte r1H &ubyte r1L + &bool r1bH + &bool r1bL &word r1s &byte r1sH &byte r1sL &uword r2 &ubyte r2H &ubyte r2L + &bool r2bH + &bool r2bL &word r2s &byte r2sH &byte r2sL &uword r3 &ubyte r3H &ubyte r3L + &bool r3bH + &bool r3bL &word r3s &byte r3sH &byte r3sL &uword r4 &ubyte r4H &ubyte r4L + &bool r4bH + &bool r4bL &word r4s &byte r4sH &byte r4sL &uword r5 &ubyte r5H &ubyte r5L + &bool r5bH + &bool r5bL &word r5s &byte r5sH &byte r5sL &uword r6 &ubyte r6H &ubyte r6L + &bool r6bH + &bool r6bL &word r6s &byte r6sH &byte r6sL &uword r7 &ubyte r7H &ubyte r7L + &bool r7bH + &bool r7bL &word r7s &byte r7sH &byte r7sL &uword r8 &ubyte r8H &ubyte r8L + &bool r8bH + &bool r8bL &word r8s &byte r8sH &byte r8sL &uword r9 &ubyte r9H &ubyte r9L + &bool r9bH + &bool r9bL &word r9s &byte r9sH &byte r9sL @@ -1233,6 +1264,7 @@ sys { exit (ubyte returnvalue @A) exit2 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y) exit3 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y, bool carry @Pc) + get_as_returnaddress (uword address @XY) -> uword @AX internal_stringcopy (uword source @R0, uword target @AY) -> clobbers (A,Y) irqsafe_clear_irqd () irqsafe_set_irqd () diff --git a/docs/source/_static/symboldumps/skeletons-pet32.txt b/docs/source/_static/symboldumps/skeletons-pet32.txt index 96305714b..1732f045b 100644 --- a/docs/source/_static/symboldumps/skeletons-pet32.txt +++ b/docs/source/_static/symboldumps/skeletons-pet32.txt @@ -1,6 +1,5 @@ -Prog8 compiler v11.4-SNAPSHOT by Irmen de Jong (irmen@razorvine.net) -Prerelease version from git commit a87f2640 in branch master +Prog8 compiler v11.4 by Irmen de Jong (irmen@razorvine.net) This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html Compiling program import-all-pet32.p8 @@ -109,7 +108,6 @@ LIBRARY MODULE NAME: coroutines coroutines { const ubyte MAX_TASKS ubyte active_task - uword[] returnaddresses uword supervisor uword[] tasklist uword[] userdatas @@ -189,6 +187,7 @@ strings { copy (uword source @R0, uword target @AY) -> clobbers (A) -> ubyte @Y endswith (str st, str suffix) -> bool find (uword string @AY, ubyte character @X) -> ubyte @A, bool @Pc + find_eol (uword string @AY) -> ubyte @A, bool @Pc findstr (str haystack, str needle) -> ubyte hash (str string @AY) -> ubyte @A isdigit (ubyte petsciichar @A) -> bool @Pc @@ -276,6 +275,7 @@ sys { exit (ubyte returnvalue @A) exit2 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y) exit3 (ubyte resulta @A, ubyte resultx @X, ubyte resulty @Y, bool carry @Pc) + get_as_returnaddress (uword address @XY) -> uword @AX internal_stringcopy (uword source @R0, uword target @AY) -> clobbers (A,Y) irqsafe_clear_irqd () irqsafe_set_irqd () @@ -304,6 +304,8 @@ cx16 { &uword r0 &ubyte r0H &ubyte r0L + &bool r0bH + &bool r0bL &word r0s &byte r0sH &byte r0sL @@ -311,89 +313,119 @@ cx16 { &uword r10 &ubyte r10H &ubyte r10L + &bool r10bH + &bool r10bL &word r10s &byte r10sH &byte r10sL &uword r11 &ubyte r11H &ubyte r11L + &bool r11bH + &bool r11bL &word r11s &byte r11sH &byte r11sL &uword r12 &ubyte r12H &ubyte r12L + &bool r12bH + &bool r12bL &word r12s &byte r12sH &byte r12sL &uword r13 &ubyte r13H &ubyte r13L + &bool r13bH + &bool r13bL &word r13s &byte r13sH &byte r13sL &uword r14 &ubyte r14H &ubyte r14L + &bool r14bH + &bool r14bL &word r14s &byte r14sH &byte r14sL &uword r15 &ubyte r15H &ubyte r15L + &bool r15bH + &bool r15bL &word r15s &byte r15sH &byte r15sL &ubyte r1H &ubyte r1L + &bool r1bH + &bool r1bL &word r1s &byte r1sH &byte r1sL &uword r2 &ubyte r2H &ubyte r2L + &bool r2bH + &bool r2bL &word r2s &byte r2sH &byte r2sL &uword r3 &ubyte r3H &ubyte r3L + &bool r3bH + &bool r3bL &word r3s &byte r3sH &byte r3sL &uword r4 &ubyte r4H &ubyte r4L + &bool r4bH + &bool r4bL &word r4s &byte r4sH &byte r4sL &uword r5 &ubyte r5H &ubyte r5L + &bool r5bH + &bool r5bL &word r5s &byte r5sH &byte r5sL &uword r6 &ubyte r6H &ubyte r6L + &bool r6bH + &bool r6bL &word r6s &byte r6sH &byte r6sL &uword r7 &ubyte r7H &ubyte r7L + &bool r7bH + &bool r7bL &word r7s &byte r7sH &byte r7sL &uword r8 &ubyte r8H &ubyte r8L + &bool r8bH + &bool r8bL &word r8s &byte r8sH &byte r8sL &uword r9 &ubyte r9H &ubyte r9L + &bool r9bH + &bool r9bL &word r9s &byte r9sH &byte r9sL diff --git a/docs/source/_static/symboldumps/skeletons-virtual.txt b/docs/source/_static/symboldumps/skeletons-virtual.txt index dc4b40b4e..1ab3db6bd 100644 --- a/docs/source/_static/symboldumps/skeletons-virtual.txt +++ b/docs/source/_static/symboldumps/skeletons-virtual.txt @@ -1,6 +1,5 @@ -Prog8 compiler v11.4-SNAPSHOT by Irmen de Jong (irmen@razorvine.net) -Prerelease version from git commit a87f2640 in branch master +Prog8 compiler v11.4 by Irmen de Jong (irmen@razorvine.net) This software is licensed under the GNU GPL 3.0, see https://www.gnu.org/licenses/gpl.html Compiling program import-all-virtual.p8 @@ -280,7 +279,8 @@ strings { contains (str st, ubyte character) -> bool copy (str source, str target) -> ubyte endswith (str st, str suffix) -> bool - find (str st, ubyte character) -> ubyte + find (str st, ubyte character) -> ubyte, bool + find_eol (str st) -> ubyte, bool findstr (str haystack, str needle) -> ubyte hash (str st) -> ubyte isdigit (ubyte character) -> bool @@ -298,7 +298,7 @@ strings { ltrim (str s) ltrimmed (str s) -> str ncompare (str st1, str st2, ubyte length) -> byte - rfind (uword stringptr, ubyte character) -> ubyte + rfind (uword stringptr, ubyte character) -> ubyte, bool right (str source, ubyte slen, str target) rstrip (str s) rtrim (str s) @@ -338,6 +338,7 @@ sys { disable_caseswitch () enable_caseswitch () exit (ubyte returnvalue) + get_as_returnaddress (uword address) -> uword gfx_clear (ubyte color) gfx_enable (ubyte mode) gfx_getpixel (uword xx, uword yy) -> ubyte @@ -366,6 +367,8 @@ cx16 { &uword r0 &ubyte r0H &ubyte r0L + &bool r0bH + &bool r0bL &word r0s &byte r0sH &byte r0sL @@ -373,89 +376,119 @@ cx16 { &uword r10 &ubyte r10H &ubyte r10L + &bool r10bH + &bool r10bL &word r10s &byte r10sH &byte r10sL &uword r11 &ubyte r11H &ubyte r11L + &bool r11bH + &bool r11bL &word r11s &byte r11sH &byte r11sL &uword r12 &ubyte r12H &ubyte r12L + &bool r12bH + &bool r12bL &word r12s &byte r12sH &byte r12sL &uword r13 &ubyte r13H &ubyte r13L + &bool r13bH + &bool r13bL &word r13s &byte r13sH &byte r13sL &uword r14 &ubyte r14H &ubyte r14L + &bool r14bH + &bool r14bL &word r14s &byte r14sH &byte r14sL &uword r15 &ubyte r15H &ubyte r15L + &bool r15bH + &bool r15bL &word r15s &byte r15sH &byte r15sL &ubyte r1H &ubyte r1L + &bool r1bH + &bool r1bL &word r1s &byte r1sH &byte r1sL &uword r2 &ubyte r2H &ubyte r2L + &bool r2bH + &bool r2bL &word r2s &byte r2sH &byte r2sL &uword r3 &ubyte r3H &ubyte r3L + &bool r3bH + &bool r3bL &word r3s &byte r3sH &byte r3sL &uword r4 &ubyte r4H &ubyte r4L + &bool r4bH + &bool r4bL &word r4s &byte r4sH &byte r4sL &uword r5 &ubyte r5H &ubyte r5L + &bool r5bH + &bool r5bL &word r5s &byte r5sH &byte r5sL &uword r6 &ubyte r6H &ubyte r6L + &bool r6bH + &bool r6bL &word r6s &byte r6sH &byte r6sL &uword r7 &ubyte r7H &ubyte r7L + &bool r7bH + &bool r7bL &word r7s &byte r7sH &byte r7sL &uword r8 &ubyte r8H &ubyte r8L + &bool r8bH + &bool r8bL &word r8s &byte r8sH &byte r8sL &uword r9 &ubyte r9H &ubyte r9L + &bool r9bH + &bool r9bL &word r9s &byte r9sH &byte r9sL diff --git a/docs/source/programming.rst b/docs/source/programming.rst index 69c63a356..168c46f84 100644 --- a/docs/source/programming.rst +++ b/docs/source/programming.rst @@ -1113,14 +1113,19 @@ so pay attention to any jumps and rts instructions in the inlined code! don't want a ``rts`` or ``jmp`` or ``bra`` in it! .. note:: - The 'virtual' 16-bit registers from the Commander X16 can also be specified as ``R0`` .. ``R15`` . + The **sixteen 'virtual' 16-bit registers** from the Commander X16 can also be specified as ``R0`` .. ``R15`` . This means you don't have to set them up manually before calling a subroutine that takes one or more parameters in those 'registers'. You can just list the arguments directly. - *This also works on the Commodore 64!* (however they are not as efficient there because they're not in zeropage) - In prog8 and assembly code these 'registers' are directly accessible too via - ``cx16.r0`` .. ``cx16.r15`` (these are memory-mapped uword values), - ``cx16.r0s`` .. ``cx16.r15s`` (these are memory-mapped word values), - and ``L`` / ``H`` variants are also available to directly access the low and high bytes of these. + *This also works on the other compilation targets!* (however they might not be as efficient there as on the X16, + because on most other targets such as the C64, these registers are not placed in zeropage due to lack of space) + In both regular **prog8** *and* **assembly** code these 'registers' are directly accessible too via: + + - ``cx16.r0`` - ``cx16.r15`` (memory-mapped **uword** values, most often these are used) + - ``cx16.r0s`` - ``cx16.r15s`` (memory-mapped **word** values, used when you need a signed word) + - ``cx16.r0H``, ``cx16.r0L`` (for each r0..r15; memory-mapped **ubyte** values, both bytes of the register) + - ``cx16.r0sH``, ``cx16.r0sL`` (for each r0..r15; memory-mapped **byte** values, both bytes of the register) + - ``cx16.r0bH``, ``cx16.r0bL`` (for each r0..r15; memory-mapped **bool** values, both bytes of the register) + You can use them directly but their name isn't very descriptive, so it may be useful to define an alias for them when using them regularly. diff --git a/examples/customtarget/libraries/atari/syslib.p8 b/examples/customtarget/libraries/atari/syslib.p8 index 1d2eb3ce4..f36a02c15 100644 --- a/examples/customtarget/libraries/atari/syslib.p8 +++ b/examples/customtarget/libraries/atari/syslib.p8 @@ -415,7 +415,6 @@ save_SCRATCH_ZPWORD2 .word ? cx16 { ; the sixteen virtual 16-bit registers that the CX16 has defined in the zeropage ; they are simulated on the Atari as well but their location in memory is different - ; TODO &uword r0 = $1b00 &uword r1 = $1b02 &uword r2 = $1b04 @@ -433,6 +432,7 @@ cx16 { &uword r14 = $1b1c &uword r15 = $1b1e + ; signed word versions &word r0s = $1b00 &word r1s = $1b02 &word r2s = $1b04 @@ -450,6 +450,7 @@ cx16 { &word r14s = $1b1c &word r15s = $1b1e + ; ubyte versions (low and high bytes) &ubyte r0L = $1b00 &ubyte r1L = $1b02 &ubyte r2L = $1b04 @@ -484,6 +485,7 @@ cx16 { &ubyte r14H = $1b1d &ubyte r15H = $1b1f + ; signed byte versions (low and high bytes) &byte r0sL = $1b00 &byte r1sL = $1b02 &byte r2sL = $1b04 @@ -518,6 +520,41 @@ cx16 { &byte r14sH = $1b1d &byte r15sH = $1b1f + ; boolean versions + &bool r0bL = $1b00 + &bool r1bL = $1b02 + &bool r2bL = $1b04 + &bool r3bL = $1b06 + &bool r4bL = $1b08 + &bool r5bL = $1b0a + &bool r6bL = $1b0c + &bool r7bL = $1b0e + &bool r8bL = $1b10 + &bool r9bL = $1b12 + &bool r10bL = $1b14 + &bool r11bL = $1b16 + &bool r12bL = $1b18 + &bool r13bL = $1b1a + &bool r14bL = $1b1c + &bool r15bL = $1b1e + + &bool r0bH = $1b01 + &bool r1bH = $1b03 + &bool r2bH = $1b05 + &bool r3bH = $1b07 + &bool r4bH = $1b09 + &bool r5bH = $1b0b + &bool r6bH = $1b0d + &bool r7bH = $1b0f + &bool r8bH = $1b11 + &bool r9bH = $1b13 + &bool r10bH = $1b15 + &bool r11bH = $1b17 + &bool r12bH = $1b19 + &bool r13bH = $1b1b + &bool r14bH = $1b1d + &bool r15bH = $1b1f + asmsub save_virtual_registers() clobbers(A,Y) { %asm {{ ldy #31 diff --git a/examples/customtarget/libraries/neo6502/syslib.p8 b/examples/customtarget/libraries/neo6502/syslib.p8 index 7e2f9ea90..f0af7ccc0 100644 --- a/examples/customtarget/libraries/neo6502/syslib.p8 +++ b/examples/customtarget/libraries/neo6502/syslib.p8 @@ -364,6 +364,7 @@ cx16 { &uword r14 = $001e &uword r15 = $0020 + ; signed word versions &word r0s = $0002 &word r1s = $0004 &word r2s = $0006 @@ -381,6 +382,7 @@ cx16 { &word r14s = $001e &word r15s = $0020 + ; ubyte versions (low and high bytes) &ubyte r0L = $0002 &ubyte r1L = $0004 &ubyte r2L = $0006 @@ -415,6 +417,7 @@ cx16 { &ubyte r14H = $001f &ubyte r15H = $0021 + ; signed byte versions (low and high bytes) &byte r0sL = $0002 &byte r1sL = $0004 &byte r2sL = $0006 @@ -449,6 +452,42 @@ cx16 { &byte r14sH = $001f &byte r15sH = $0021 + ; boolean versions + &bool r0bL = $0002 + &bool r1bL = $0004 + &bool r2bL = $0006 + &bool r3bL = $0008 + &bool r4bL = $000a + &bool r5bL = $000c + &bool r6bL = $000e + &bool r7bL = $0010 + &bool r8bL = $0012 + &bool r9bL = $0014 + &bool r10bL = $0016 + &bool r11bL = $0018 + &bool r12bL = $001a + &bool r13bL = $001c + &bool r14bL = $001e + &bool r15bL = $0020 + + &bool r0bH = $0003 + &bool r1bH = $0005 + &bool r2bH = $0007 + &bool r3bH = $0009 + &bool r4bH = $000b + &bool r5bH = $000d + &bool r6bH = $000f + &bool r7bH = $0011 + &bool r8bH = $0013 + &bool r9bH = $0015 + &bool r10bH = $0017 + &bool r11bH = $0019 + &bool r12bH = $001b + &bool r13bH = $001d + &bool r14bH = $001f + &bool r15bH = $0021 + + asmsub save_virtual_registers() clobbers(A,Y) { %asm {{ ldy #31 diff --git a/examples/customtarget/libraries/tinyc64/syslib.p8 b/examples/customtarget/libraries/tinyc64/syslib.p8 index ce5a1803a..ae962fa56 100644 --- a/examples/customtarget/libraries/tinyc64/syslib.p8 +++ b/examples/customtarget/libraries/tinyc64/syslib.p8 @@ -159,6 +159,7 @@ cx16 { &uword r14 = $cffc &uword r15 = $cffe + ; signed word versions &word r0s = $cfe0 &word r1s = $cfe2 &word r2s = $cfe4 @@ -176,6 +177,7 @@ cx16 { &word r14s = $cffc &word r15s = $cffe + ; ubyte versions (low and high bytes) &ubyte r0L = $cfe0 &ubyte r1L = $cfe2 &ubyte r2L = $cfe4 @@ -210,6 +212,7 @@ cx16 { &ubyte r14H = $cffd &ubyte r15H = $cfff + ; signed byte versions (low and high bytes) &byte r0sL = $cfe0 &byte r1sL = $cfe2 &byte r2sL = $cfe4 @@ -243,4 +246,39 @@ cx16 { &byte r13sH = $cffb &byte r14sH = $cffd &byte r15sH = $cfff + + ; boolean versions + &bool r0bL = $cfe0 + &bool r1bL = $cfe2 + &bool r2bL = $cfe4 + &bool r3bL = $cfe6 + &bool r4bL = $cfe8 + &bool r5bL = $cfea + &bool r6bL = $cfec + &bool r7bL = $cfee + &bool r8bL = $cff0 + &bool r9bL = $cff2 + &bool r10bL = $cff4 + &bool r11bL = $cff6 + &bool r12bL = $cff8 + &bool r13bL = $cffa + &bool r14bL = $cffc + &bool r15bL = $cffe + + &bool r0bH = $cfe1 + &bool r1bH = $cfe3 + &bool r2bH = $cfe5 + &bool r3bH = $cfe7 + &bool r4bH = $cfe9 + &bool r5bH = $cfeb + &bool r6bH = $cfed + &bool r7bH = $cfef + &bool r8bH = $cff1 + &bool r9bH = $cff3 + &bool r10bH = $cff5 + &bool r11bH = $cff7 + &bool r12bH = $cff9 + &bool r13bH = $cffb + &bool r14bH = $cffd + &bool r15bH = $cfff } diff --git a/examples/customtarget/libraries/tinycx16/syslib.p8 b/examples/customtarget/libraries/tinycx16/syslib.p8 index 10fff8636..d07cf4634 100644 --- a/examples/customtarget/libraries/tinycx16/syslib.p8 +++ b/examples/customtarget/libraries/tinycx16/syslib.p8 @@ -159,6 +159,7 @@ cx16 { &uword r14 = $001e &uword r15 = $0020 + ; signed word versions &word r0s = $0002 &word r1s = $0004 &word r2s = $0006 @@ -176,6 +177,7 @@ cx16 { &word r14s = $001e &word r15s = $0020 + ; ubyte versions (low and high bytes) &ubyte r0L = $0002 &ubyte r1L = $0004 &ubyte r2L = $0006 @@ -210,6 +212,7 @@ cx16 { &ubyte r14H = $001f &ubyte r15H = $0021 + ; signed byte versions (low and high bytes) &byte r0sL = $0002 &byte r1sL = $0004 &byte r2sL = $0006 @@ -243,4 +246,39 @@ cx16 { &byte r13sH = $001d &byte r14sH = $001f &byte r15sH = $0021 + + ; boolean versions + &bool r0bL = $0002 + &bool r1bL = $0004 + &bool r2bL = $0006 + &bool r3bL = $0008 + &bool r4bL = $000a + &bool r5bL = $000c + &bool r6bL = $000e + &bool r7bL = $0010 + &bool r8bL = $0012 + &bool r9bL = $0014 + &bool r10bL = $0016 + &bool r11bL = $0018 + &bool r12bL = $001a + &bool r13bL = $001c + &bool r14bL = $001e + &bool r15bL = $0020 + + &bool r0bH = $0003 + &bool r1bH = $0005 + &bool r2bH = $0007 + &bool r3bH = $0009 + &bool r4bH = $000b + &bool r5bH = $000d + &bool r6bH = $000f + &bool r7bH = $0011 + &bool r8bH = $0013 + &bool r9bH = $0015 + &bool r10bH = $0017 + &bool r11bH = $0019 + &bool r12bH = $001b + &bool r13bH = $001d + &bool r14bH = $001f + &bool r15bH = $0021 } diff --git a/examples/customtarget/libraries/tinypet/syslib.p8 b/examples/customtarget/libraries/tinypet/syslib.p8 index 92660c592..ed88fe11a 100644 --- a/examples/customtarget/libraries/tinypet/syslib.p8 +++ b/examples/customtarget/libraries/tinypet/syslib.p8 @@ -155,6 +155,7 @@ cx16 { &uword r14 = $7ffc &uword r15 = $7ffe + ; signed word versions &word r0s = $7fe0 &word r1s = $7fe2 &word r2s = $7fe4 @@ -172,6 +173,7 @@ cx16 { &word r14s = $7ffc &word r15s = $7ffe + ; ubyte versions (low and high bytes) &ubyte r0L = $7fe0 &ubyte r1L = $7fe2 &ubyte r2L = $7fe4 @@ -206,6 +208,7 @@ cx16 { &ubyte r14H = $7ffd &ubyte r15H = $7fff + ; signed byte versions (low and high bytes) &byte r0sL = $7fe0 &byte r1sL = $7fe2 &byte r2sL = $7fe4 @@ -239,4 +242,39 @@ cx16 { &byte r13sH = $7ffb &byte r14sH = $7ffd &byte r15sH = $7fff + + ; boolean versions + &bool r0bL = $7fe0 + &bool r1bL = $7fe2 + &bool r2bL = $7fe4 + &bool r3bL = $7fe6 + &bool r4bL = $7fe8 + &bool r5bL = $7fea + &bool r6bL = $7fec + &bool r7bL = $7fee + &bool r8bL = $7ff0 + &bool r9bL = $7ff2 + &bool r10bL = $7ff4 + &bool r11bL = $7ff6 + &bool r12bL = $7ff8 + &bool r13bL = $7ffa + &bool r14bL = $7ffc + &bool r15bL = $7ffe + + &bool r0bH = $7fe1 + &bool r1bH = $7fe3 + &bool r2bH = $7fe5 + &bool r3bH = $7fe7 + &bool r4bH = $7fe9 + &bool r5bH = $7feb + &bool r6bH = $7fed + &bool r7bH = $7fef + &bool r8bH = $7ff1 + &bool r9bH = $7ff3 + &bool r10bH = $7ff5 + &bool r11bH = $7ff7 + &bool r12bH = $7ff9 + &bool r13bH = $7ffb + &bool r14bH = $7ffd + &bool r15bH = $7fff } diff --git a/examples/test.p8 b/examples/test.p8 index 3a22649cf..d5bb66122 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -1,18 +1,27 @@ main { sub start() { - cx16.r0++ - } -} - -some_block { - uword buffer = memory("arena", 2000, 0) -} - - -other_block { - sub redherring (uword buffer) { - %ir {{ - loadm.w r99000,other_block.redherring.buffer - }} + uword uw = 9999 + word sw = -2222 + ubyte ub = 42 + byte sb = -99 + bool bb = true + + cx16.r0 = uw + cx16.r0s = sw + cx16.r0L = ub + cx16.r0H = ub + cx16.r0sL = sb + cx16.r0sH = sb + cx16.r0bL = bb + cx16.r0bH = bb + + uw = cx16.r0 + sw = cx16.r0s + ub = cx16.r0L + ub = cx16.r0H + sb = cx16.r0sL + sb = cx16.r0sH + bb = cx16.r0bL + bb = cx16.r0bH } }