added signed versions of the cx16 virtual registers

This commit is contained in:
Irmen de Jong 2021-11-13 02:42:21 +01:00
parent 3483515346
commit 2177ba0ed2
4 changed files with 107 additions and 4 deletions

View File

@ -699,6 +699,23 @@ cx16 {
&uword r14 = $cf1c &uword r14 = $cf1c
&uword r15 = $cf1e &uword r15 = $cf1e
&word r0s = $cf00
&word r1s = $cf02
&word r2s = $cf04
&word r3s = $cf06
&word r4s = $cf08
&word r5s = $cf0a
&word r6s = $cf0c
&word r7s = $cf0e
&word r8s = $cf10
&word r9s = $cf12
&word r10s = $cf14
&word r11s = $cf16
&word r12s = $cf18
&word r13s = $cf1a
&word r14s = $cf1c
&word r15s = $cf1e
&ubyte r0L = $cf00 &ubyte r0L = $cf00
&ubyte r1L = $cf02 &ubyte r1L = $cf02
&ubyte r2L = $cf04 &ubyte r2L = $cf04
@ -732,4 +749,38 @@ cx16 {
&ubyte r13H = $cf1b &ubyte r13H = $cf1b
&ubyte r14H = $cf1d &ubyte r14H = $cf1d
&ubyte r15H = $cf1f &ubyte r15H = $cf1f
&byte r0sL = $cf00
&byte r1sL = $cf02
&byte r2sL = $cf04
&byte r3sL = $cf06
&byte r4sL = $cf08
&byte r5sL = $cf0a
&byte r6sL = $cf0c
&byte r7sL = $cf0e
&byte r8sL = $cf10
&byte r9sL = $cf12
&byte r10sL = $cf14
&byte r11sL = $cf16
&byte r12sL = $cf18
&byte r13sL = $cf1a
&byte r14sL = $cf1c
&byte r15sL = $cf1e
&byte r0sH = $cf01
&byte r1sH = $cf03
&byte r2sH = $cf05
&byte r3sH = $cf07
&byte r4sH = $cf09
&byte r5sH = $cf0b
&byte r6sH = $cf0d
&byte r7sH = $cf0f
&byte r8sH = $cf11
&byte r9sH = $cf13
&byte r10sH = $cf15
&byte r11sH = $cf17
&byte r12sH = $cf19
&byte r13sH = $cf1b
&byte r14sH = $cf1d
&byte r15sH = $cf1f
} }

View File

@ -95,7 +95,7 @@ cx16 {
&uword IRQ_VEC = $FFFE ; 65c02 interrupt vector, determined by the kernal if banked in &uword IRQ_VEC = $FFFE ; 65c02 interrupt vector, determined by the kernal if banked in
; the sixteen virtual 16-bit registers ; the sixteen virtual 16-bit registers in both normal unsigned mode and signed mode (s)
&uword r0 = $0002 &uword r0 = $0002
&uword r1 = $0004 &uword r1 = $0004
&uword r2 = $0006 &uword r2 = $0006
@ -113,6 +113,23 @@ cx16 {
&uword r14 = $001e &uword r14 = $001e
&uword r15 = $0020 &uword r15 = $0020
&word r0s = $0002
&word r1s = $0004
&word r2s = $0006
&word r3s = $0008
&word r4s = $000a
&word r5s = $000c
&word r6s = $000e
&word r7s = $0010
&word r8s = $0012
&word r9s = $0014
&word r10s = $0016
&word r11s = $0018
&word r12s = $001a
&word r13s = $001c
&word r14s = $001e
&word r15s = $0020
&ubyte r0L = $0002 &ubyte r0L = $0002
&ubyte r1L = $0004 &ubyte r1L = $0004
&ubyte r2L = $0006 &ubyte r2L = $0006
@ -147,6 +164,39 @@ cx16 {
&ubyte r14H = $001f &ubyte r14H = $001f
&ubyte r15H = $0021 &ubyte r15H = $0021
&byte r0sL = $0002
&byte r1sL = $0004
&byte r2sL = $0006
&byte r3sL = $0008
&byte r4sL = $000a
&byte r5sL = $000c
&byte r6sL = $000e
&byte r7sL = $0010
&byte r8sL = $0012
&byte r9sL = $0014
&byte r10sL = $0016
&byte r11sL = $0018
&byte r12sL = $001a
&byte r13sL = $001c
&byte r14sL = $001e
&byte r15sL = $0020
&byte r0sH = $0003
&byte r1sH = $0005
&byte r2sH = $0007
&byte r3sH = $0009
&byte r4sH = $000b
&byte r5sH = $000d
&byte r6sH = $000f
&byte r7sH = $0011
&byte r8sH = $0013
&byte r9sH = $0015
&byte r10sH = $0017
&byte r11sH = $0019
&byte r12sH = $001b
&byte r13sH = $001d
&byte r14sH = $001f
&byte r15sH = $0021
; VERA registers ; VERA registers

View File

@ -609,12 +609,14 @@ flag such as Carry (Pc).
.. note:: .. note::
The 'virtual' 16-bit registers from the Commander X16 can also be used as ``R0`` .. ``R15`` . The '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 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. 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) *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 In prog8 and assembly code these 'registers' are directly accessible too via
``cx16.r0`` .. ``cx16.r15`` (they're memory mapped uword values) ``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.
Expressions Expressions

View File

@ -78,7 +78,7 @@ main {
; circles with "degrees" from 0 to 255 ; circles with "degrees" from 0 to 255
for r in 0 to 255 { for r in 0 to 255 {
pixelxw = (sin8(r)/2 + 80) as uword pixelxw = ((sin8(r)/2 as word) + 80) as uword
pixelyb = (cos8(r)/2 + height/2) as ubyte pixelyb = (cos8(r)/2 + height/2) as ubyte
graphics.plot(pixelxw, pixelyb) graphics.plot(pixelxw, pixelyb)
} }