1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-09 21:37:31 +00:00

Added up/left sprite movement.

This commit is contained in:
jespergravgaard 2019-06-12 23:54:21 +02:00
parent b4a0c74cf1
commit 8ee499f9a8
7 changed files with 4802 additions and 4179 deletions

View File

@ -0,0 +1,9 @@
ldy #0
lda ({z1}),y
cmp #<{c1}
bne !+
iny
lda ({z1}),y
cmp #>{c1}
beq {la1}
!:

View File

@ -21,6 +21,10 @@ const byte PROCPORT_BASIC_KERNEL_IO = %00110111;
// The address of the CHARGEN character set
const byte* CHARGEN = $d000;
// Positions of the border (in sprite positions)
const byte BORDER_XPOS_LEFT=24;
const byte BORDER_YPOS_TOP=50;
// The offset of the sprite pointers from the screen start address
const word SPRITE_PTRS = $3f8;

View File

@ -53,25 +53,16 @@ const byte STATUS_PROCESSING = 2;
struct ProcessingSprite[NUM_PROCESSING] PROCESSING;
void main() {
// Init processing array
for( byte i: 0..NUM_PROCESSING-1 ) PROCESSING[i] = { 0, 0, 0, 0, STATUS_FREE, 0};
// Clear sprites
for( byte* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++) *sp = 0;
// Initialize sprites
for( byte i: 0..7) {
SPRITES_COLS[i] = WHITE;
}
*SPRITES_MC = 0;
*SPRITES_EXPAND_X = 0;
*SPRITES_EXPAND_Y = 0;
// Set-up raster interrupts
setupRasterIrq(RASTER_IRQ_TOP, &irqTop);
// Fill screen with some chars
//for( byte* sc: SCREEN..SCREEN+999) *sc = 'a'+(<sc&0x1f);
// Copy screen to screen copy
for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) *dst = *src;
// Init squares table
initSquareTables();
// Init processing array
for( byte i: 0..NUM_PROCESSING-1 ) PROCESSING[i] = { 0, 0, 0, 0, STATUS_FREE, 0};
// Init sprites
initSprites();
// Set-up raster interrupts
setupRasterIrq(RASTER_IRQ_TOP, &irqTop);
// Copy screen to screen copy
for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) *dst = *src;
// Main loop
do {
// Look for the non-space closest to the screen center
@ -100,16 +91,22 @@ void startProcessing(struct ProcessingChar center) {
// Found a free sprite
byte spriteIdx = freeIdx;
// Copy char into sprite
// TODO: Copy chargen data
byte* spriteData = SPRITE_DATA+(word)spriteIdx*64;
for( byte i: 0..7) {
*spriteData = 0xff;
spriteData += 3;
}
word spriteX = 24 + (word)center.x*8;
byte spriteY = 50 + center.y*8;
byte spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx;
byte* screenPtr = SCREEN+(word)center.y*40+center.x;
byte* spriteData = SPRITE_DATA+(word)spriteIdx*64;
byte ch = (*screenPtr);
byte* chargenData = CHARGEN+(word)ch*8;
asm { sei }
*PROCPORT = PROCPORT_RAM_CHARROM;
for( byte i: 0..7) {
*spriteData = *chargenData;
spriteData += 3;
chargenData++;
}
*PROCPORT = PROCPORT_RAM_IO;
asm { cli }
word spriteX = BORDER_XPOS_LEFT + (word)center.x*8;
byte spriteY = BORDER_YPOS_TOP + center.y*8;
byte spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx;
// Put the sprite into the PROCESSING array
PROCESSING[spriteIdx] = { spriteX, spriteY, spriteIdx, spritePtr, STATUS_NEW, screenPtr };
}
@ -138,12 +135,16 @@ void processChars() {
}
SPRITES_XPOS[i*2] = (byte)processing->x;
SPRITES_YPOS[i*2] = processing->y;
// Move sprite
if(--(processing->x)==0) {
// Set status
if(processing->x==BORDER_XPOS_LEFT-8 || processing->y==BORDER_YPOS_TOP-8) {
// Set status to FREE
processing->status = STATUS_FREE;
// Disable the sprite
*SPRITES_ENABLE &= 0xff ^ bitmask;
} else {
(processing->y)--;
(processing->x)--;
}
}
}
@ -166,6 +167,19 @@ void initSquareTables() {
}
}
// Initialize sprites
void initSprites() {
// Clear sprite data
for( byte* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++) *sp = 0;
// Initialize sprite registers
for( byte i: 0..7) {
SPRITES_COLS[i] = LIGHT_BLUE;
}
*SPRITES_MC = 0;
*SPRITES_EXPAND_X = 0;
*SPRITES_EXPAND_Y = 0;
}
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
struct ProcessingChar getCharToProcess() {
@ -241,7 +255,6 @@ interrupt(hardware_all) void irqBottom() {
*BORDERCOL = LIGHT_BLUE;
*BGCOL = BLUE;
// Trigger IRQ at the top of the screen
*RASTER = RASTER_IRQ_TOP;
*HARDWARE_IRQ = &irqTop;

View File

@ -15,6 +15,13 @@
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// RAM in $A000, $E000 CHAR ROM in $D000
.const PROCPORT_RAM_CHARROM = $31
// The address of the CHARGEN character set
.label CHARGEN = $d000
// Positions of the border (in sprite positions)
.const BORDER_XPOS_LEFT = $18
.const BORDER_YPOS_TOP = $32
// The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
@ -59,10 +66,10 @@
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
main: {
.label sp = 2
.label src = 4
.label dst = 6
.label src = 2
.label dst = 4
.label center_dist = $13
jsr initSquareTables
ldy #0
// Init processing array
b1:
@ -85,39 +92,7 @@ main: {
iny
cpy #NUM_PROCESSING-1+1
bne b1
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
// Clear sprites
b2:
lda #0
tay
sta (sp),y
inc sp
bne !+
inc sp+1
!:
lda sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc b2
bne !+
lda sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc b2
!:
ldx #0
// Initialize sprites
b3:
lda #WHITE
sta SPRITES_COLS,x
inx
cpx #8
bne b3
lda #0
sta SPRITES_MC
sta SPRITES_EXPAND_X
sta SPRITES_EXPAND_Y
jsr initSprites
jsr setupRasterIrq
lda #<SCREEN_COPY
sta dst
@ -127,10 +102,8 @@ main: {
sta src
lda #>SCREEN
sta src+1
// Fill screen with some chars
//for( byte* sc: SCREEN..SCREEN+999) *sc = 'a'+(<sc&0x1f);
// Copy screen to screen copy
b5:
b3:
ldy #0
lda (src),y
sta (dst),y
@ -144,51 +117,53 @@ main: {
!:
lda src+1
cmp #>SCREEN+$3e8
bne b5
bne b3
lda src
cmp #<SCREEN+$3e8
bne b5
jsr initSquareTables
b4:
bne b3
b2:
// Main loop
jsr getCharToProcess
ldx getCharToProcess.return_x
ldy getCharToProcess.return_y
ldy getCharToProcess.return_x
ldx getCharToProcess.return_y
lda center_dist+1
cmp #>NOT_FOUND
bne b8
bne b5
lda center_dist
cmp #<NOT_FOUND
bne b8
b9:
bne b5
b6:
inc SCREEN+$3e7
jmp b9
b8:
stx startProcessing.center_x
sty startProcessing.center_y
jmp b6
b5:
sty startProcessing.center_x
stx startProcessing.center_y
jsr startProcessing
jmp b4
jmp b2
}
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($1c) center_x, byte zeropage($1d) center_y)
// startProcessing(byte zeropage($1e) center_x, byte zeropage($1f) center_y)
startProcessing: {
.label _0 = 9
.label _1 = 9
.label _3 = $1e
.label _4 = $1e
.label _11 = $21
.label _12 = $21
.label _13 = $21
.label center_x = $1c
.label center_y = $1d
.label i = 8
.label _0 = $20
.label _1 = $20
.label _2 = $20
.label _4 = 9
.label _5 = 9
.label _7 = 7
.label _8 = 7
.label _10 = $26
.label _11 = $26
.label center_x = $1e
.label center_y = $1f
.label i = 6
.label screenPtr = $24
.label spriteData = 9
.label spriteX = $1e
.label spritePtr = $20
.label screenPtr = $21
.label freeIdx = 8
.label _30 = $23
.label _31 = $21
.label chargenData = 7
.label spriteX = $26
.label spritePtr = $28
.label freeIdx = 6
.label _33 = $22
.label _34 = $20
ldx #$ff
b1:
lda #0
@ -210,16 +185,25 @@ startProcessing: {
bne !b8+
jmp b8
!b8:
lda freeIdx
lda center_y
sta _0
lda #0
sta _0+1
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
lda _0
asl
sta _33
lda _0+1
rol
sta _33+1
asl _33
rol _33+1
lda _34
clc
adc _33
sta _34
lda _34+1
adc _33+1
sta _34+1
asl _1
rol _1+1
asl _1
@ -227,16 +211,67 @@ startProcessing: {
asl _1
rol _1+1
clc
lda _2
adc #<SCREEN
sta _2
lda _2+1
adc #>SCREEN
sta _2+1
lda center_x
clc
adc _2
sta screenPtr
lda #0
adc _2+1
sta screenPtr+1
lda freeIdx
sta _4
lda #0
sta _4+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
clc
lda spriteData
adc #<SPRITE_DATA
sta spriteData
lda spriteData+1
adc #>SPRITE_DATA
sta spriteData+1
ldy center_x
lda (_2),y
sta _7
lda #0
sta _7+1
asl _8
rol _8+1
asl _8
rol _8+1
asl _8
rol _8+1
clc
lda chargenData
adc #<CHARGEN
sta chargenData
lda chargenData+1
adc #>CHARGEN
sta chargenData+1
sei
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
ldx #0
b6:
lda #$ff
ldy #0
lda (chargenData),y
sta (spriteData),y
lda #3
clc
@ -244,21 +279,28 @@ startProcessing: {
sta spriteData
bcc !+
inc spriteData+1
!:
inc chargenData
bne !+
inc chargenData+1
!:
inx
cpx #8
bne b6
lda #PROCPORT_RAM_IO
sta PROCPORT
cli
lda center_x
sta _3
sta _10
lda #0
sta _3+1
asl _4
rol _4+1
asl _4
rol _4+1
asl _4
rol _4+1
lda #$18
sta _10+1
asl _11
rol _11+1
asl _11
rol _11+1
asl _11
rol _11+1
lda #BORDER_XPOS_LEFT
clc
adc spriteX
sta spriteX
@ -270,50 +312,11 @@ startProcessing: {
asl
asl
clc
adc #$32
adc #BORDER_YPOS_TOP
tay
lax freeIdx
axs #-[SPRITE_DATA/$40]
stx spritePtr
lda center_y
sta _11
lda #0
sta _11+1
lda _11
asl
sta _30
lda _11+1
rol
sta _30+1
asl _30
rol _30+1
lda _31
clc
adc _30
sta _31
lda _31+1
adc _30+1
sta _31+1
asl _12
rol _12+1
asl _12
rol _12+1
asl _12
rol _12+1
clc
lda _13
adc #<SCREEN
sta _13
lda _13+1
adc #>SCREEN
sta _13+1
lda center_x
clc
adc screenPtr
sta screenPtr
bcc !+
inc screenPtr+1
!:
lda freeIdx
asl
asl
@ -352,9 +355,9 @@ startProcessing: {
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
.label _9 = $25
.label _10 = $25
.label _11 = $25
.label _9 = $29
.label _10 = $29
.label _11 = $29
.label return_dist = $13
.label x = $e
.label dist = $13
@ -365,8 +368,8 @@ getCharToProcess: {
.label closest_dist = $f
.label closest_x = $11
.label closest_y = $12
.label _15 = $27
.label _16 = $25
.label _15 = $2b
.label _16 = $29
lda #0
sta closest_y
sta closest_x
@ -504,12 +507,78 @@ getCharToProcess: {
sta return_dist+1
jmp b3
}
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
sei
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
lda #PROCPORT_RAM_IO
sta PROCPORT
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
lda #RASTER_IRQ_TOP
sta RASTER
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
cli
rts
}
// Initialize sprites
initSprites: {
.label sp = $15
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
// Clear sprite data
b1:
lda #0
tay
sta (sp),y
inc sp
bne !+
inc sp+1
!:
lda sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc b1
bne !+
lda sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc b1
!:
ldx #0
// Initialize sprite registers
b2:
lda #LIGHT_BLUE
sta SPRITES_COLS,x
inx
cpx #8
bne b2
lda #0
sta SPRITES_MC
sta SPRITES_EXPAND_X
sta SPRITES_EXPAND_Y
rts
}
// initialize SQUARES table
initSquareTables: {
.label _6 = $17
.label _14 = $17
.label x = $15
.label y = $16
.label _6 = $19
.label _14 = $19
.label x = $17
.label y = $18
lda #0
sta x
b1:
@ -575,9 +644,9 @@ initSquareTables: {
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
// mul8u(byte register(X) a, byte register(A) b)
mul8u: {
.label mb = $19
.label res = $17
.label return = $17
.label mb = $1b
.label res = $19
.label return = $19
lda #0
sta res
sta res+1
@ -605,34 +674,6 @@ mul8u: {
rol mb+1
jmp b1
}
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
sei
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
lda #PROCPORT_RAM_IO
sta PROCPORT
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
lda #RASTER_IRQ_TOP
sta RASTER
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
cli
rts
}
// Raster Interrupt at the middle of the screen
irqBottom: {
sta rega+1
@ -671,9 +712,9 @@ irqBottom: {
}
// Process any chars in the PROCESSING array
processChars: {
.label processing = $29
.label bitmask = $2b
.label i = $1b
.label processing = $2d
.label bitmask = $2f
.label i = $1d
lda #0
sta i
b1:
@ -756,6 +797,25 @@ processChars: {
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta SPRITES_YPOS,x
// Move sprite
ldy #0
lda (processing),y
cmp #<BORDER_XPOS_LEFT-8
bne !+
iny
lda (processing),y
cmp #>BORDER_XPOS_LEFT-8
beq b6
!:
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
cmp #BORDER_YPOS_TOP-8
beq b6
lda (processing),y
sty $ff
sec
sbc #1
sta (processing),y
ldy #0
lda (processing),y
sec
@ -765,21 +825,6 @@ processChars: {
lda (processing),y
sbc #0
sta (processing),y
ldy #0
lda (processing),y
bne b2
iny
lda (processing),y
bne b2
// Set status
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
lda #$ff
eor bitmask
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
b2:
inc i
lda #NUM_PROCESSING-1+1
@ -788,6 +833,17 @@ processChars: {
jmp b1
!b1:
rts
b6:
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
lda #$ff
eor bitmask
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
jmp b2
b4:
lda SPRITES_XMSB
ora bitmask

View File

@ -9,118 +9,115 @@
[3] phi()
main: scope:[main] from @1
[4] phi()
[5] call initSquareTables
to:main::@1
main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 )
[6] (byte~) main::$18 ← (byte) main::i#2 << (byte) 3
[7] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$18) ← (byte) 0
[8] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$18) ← (byte) 0
[9] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$18) ← (byte) 0
[10] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$18) ← (byte) 0
[11] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$18) ← (const byte) STATUS_FREE#0
[12] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$18) ← (byte*) 0
[13] (byte) main::i#1 ← ++ (byte) main::i#2
[14] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@1
[6] (byte) main::i#2 ← phi( main::@1/(byte) main::i#1 main/(byte) 0 )
[7] (byte~) main::$15 ← (byte) main::i#2 << (byte) 3
[8] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$15) ← (byte) 0
[9] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$15) ← (byte) 0
[10] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$15) ← (byte) 0
[11] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$15) ← (byte) 0
[12] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$15) ← (const byte) STATUS_FREE#0
[13] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$15) ← (byte*) 0
[14] (byte) main::i#1 ← ++ (byte) main::i#2
[15] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[15] (byte*) main::sp#2 ← phi( main::@1/(const byte*) SPRITE_DATA#0 main::@2/(byte*) main::sp#1 )
[16] *((byte*) main::sp#2) ← (byte) 0
[17] (byte*) main::sp#1 ← ++ (byte*) main::sp#2
[18] if((byte*) main::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto main::@2
main::@2: scope:[main] from main::@1
[16] phi()
[17] call initSprites
to:main::@7
main::@7: scope:[main] from main::@2
[18] phi()
[19] call setupRasterIrq
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[19] (byte) main::i1#2 ← phi( main::@2/(byte) 0 main::@3/(byte) main::i1#1 )
[20] *((const byte*) SPRITES_COLS#0 + (byte) main::i1#2) ← (const byte) WHITE#0
[21] (byte) main::i1#1 ← ++ (byte) main::i1#2
[22] if((byte) main::i1#1!=(byte) 8) goto main::@3
main::@3: scope:[main] from main::@3 main::@7
[20] (byte*) main::dst#2 ← phi( main::@7/(const byte[$3e8]) SCREEN_COPY#0 main::@3/(byte*) main::dst#1 )
[20] (byte*) main::src#2 ← phi( main::@7/(const byte*) SCREEN#0 main::@3/(byte*) main::src#1 )
[21] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[22] (byte*) main::src#1 ← ++ (byte*) main::src#2
[23] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[24] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
[23] *((const byte*) SPRITES_MC#0) ← (byte) 0
[24] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
[25] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
[26] call setupRasterIrq
to:main::@5
main::@5: scope:[main] from main::@4 main::@5
[27] (byte*) main::dst#2 ← phi( main::@4/(const byte[$3e8]) SCREEN_COPY#0 main::@5/(byte*) main::dst#1 )
[27] (byte*) main::src#2 ← phi( main::@4/(const byte*) SCREEN#0 main::@5/(byte*) main::src#1 )
[28] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[29] (byte*) main::src#1 ← ++ (byte*) main::src#2
[30] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[31] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@5
main::@4: scope:[main] from main::@3 main::@5
[25] phi()
[26] call getCharToProcess
[27] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[28] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[29] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@8
main::@8: scope:[main] from main::@4
[30] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[31] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[32] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[33] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5
to:main::@6
main::@6: scope:[main] from main::@5
[32] phi()
[33] call initSquareTables
to:main::@7
main::@7: scope:[main] from main::@6 main::@8
[34] phi()
[35] call getCharToProcess
[36] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[37] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[38] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@10
main::@10: scope:[main] from main::@7
[39] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[40] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[41] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[42] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@8
to:main::@9
main::@9: scope:[main] from main::@10 main::@9
[43] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
to:main::@9
main::@8: scope:[main] from main::@10
[44] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[45] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[46] call startProcessing
to:main::@7
startProcessing: scope:[startProcessing] from main::@8
[47] phi()
main::@6: scope:[main] from main::@6 main::@8
[34] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
to:main::@6
main::@5: scope:[main] from main::@8
[35] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[36] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[37] call startProcessing
to:main::@4
startProcessing: scope:[startProcessing] from main::@5
[38] phi()
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[48] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
[39] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[49] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[50] (byte~) startProcessing::$21 ← (byte) startProcessing::i#2 << (byte) 3
[51] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$21)!=(const byte) STATUS_FREE#0) goto startProcessing::@3
[40] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[41] (byte~) startProcessing::$24 ← (byte) startProcessing::i#2 << (byte) 3
[42] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$24)!=(const byte) STATUS_FREE#0) goto startProcessing::@3
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[52] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[53] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
[43] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[44] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[54] (word~) startProcessing::$0 ← (word)(byte) startProcessing::freeIdx#2
[55] (word~) startProcessing::$1 ← (word~) startProcessing::$0 << (byte) 6
[56] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$1
[45] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
[46] (word) startProcessing::$33 ← (word~) startProcessing::$0 << (byte) 2
[47] (word) startProcessing::$34 ← (word) startProcessing::$33 + (word~) startProcessing::$0
[48] (word~) startProcessing::$1 ← (word) startProcessing::$34 << (byte) 3
[49] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1
[50] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0
[51] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2
[52] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6
[53] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5
[54] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0)
[55] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0
[56] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3
[57] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8
asm { sei }
[59] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[57] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[57] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[58] *((byte*) startProcessing::spriteData#2) ← (byte) $ff
[59] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[60] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[61] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
[60] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[60] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[60] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
[61] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
[62] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[63] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
[64] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[65] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[62] (word~) startProcessing::$3 ← (word)(byte) startProcessing::center_x#0
[63] (word~) startProcessing::$4 ← (word~) startProcessing::$3 << (byte) 3
[64] (word) startProcessing::spriteX#0 ← (byte) $18 + (word~) startProcessing::$4
[65] (byte~) startProcessing::$6 ← (byte) startProcessing::center_y#0 << (byte) 3
[66] (byte) startProcessing::spriteY#0 ← (byte) $32 + (byte~) startProcessing::$6
[67] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[68] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_y#0
[69] (word) startProcessing::$30 ← (word~) startProcessing::$11 << (byte) 2
[70] (word) startProcessing::$31 ← (word) startProcessing::$30 + (word~) startProcessing::$11
[71] (word~) startProcessing::$12 ← (word) startProcessing::$31 << (byte) 3
[72] (byte*~) startProcessing::$13 ← (const byte*) SCREEN#0 + (word~) startProcessing::$12
[73] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$13 + (byte) startProcessing::center_x#0
[74] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3
[75] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$22) ← (word) startProcessing::spriteX#0
[76] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$22) ← (byte) startProcessing::spriteY#0
[77] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$22) ← (byte) startProcessing::freeIdx#2
[78] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$22) ← (byte) startProcessing::spritePtr#0
[79] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$22) ← (const byte) STATUS_NEW#0
[80] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$22) ← (byte*) startProcessing::screenPtr#0
[66] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
asm { cli }
[68] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0
[69] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3
[70] (word) startProcessing::spriteX#0 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11
[71] (byte~) startProcessing::$13 ← (byte) startProcessing::center_y#0 << (byte) 3
[72] (byte) startProcessing::spriteY#0 ← (const byte) BORDER_YPOS_TOP#0 + (byte~) startProcessing::$13
[73] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[74] (byte~) startProcessing::$25 ← (byte) startProcessing::freeIdx#2 << (byte) 3
[75] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$25) ← (word) startProcessing::spriteX#0
[76] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$25) ← (byte) startProcessing::spriteY#0
[77] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$25) ← (byte) startProcessing::freeIdx#2
[78] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$25) ← (byte) startProcessing::spritePtr#0
[79] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$25) ← (const byte) STATUS_NEW#0
[80] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$25) ← (byte*) startProcessing::screenPtr#0
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[81] return
@ -135,7 +132,7 @@ startProcessing::@3: scope:[startProcessing] from startProcessing::@2
startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[85] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess] from main::@7
getCharToProcess: scope:[getCharToProcess] from main::@4
[86] phi()
to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
@ -200,200 +197,229 @@ getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[113] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3
initSquareTables: scope:[initSquareTables] from main::@6
[114] phi()
to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9
[115] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[116] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
to:initSquareTables::@3
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
[117] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
[118] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[119] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[120] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[121] call mul8u
[122] (word) mul8u::return#2 ← (word) mul8u::res#2
to:initSquareTables::@9
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4
[123] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[124] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[125] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[126] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[127] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
to:initSquareTables::@5
initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
[128] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[129] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5
[130] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7
[131] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[132] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[133] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[134] call mul8u
[135] (word) mul8u::return#3 ← (word) mul8u::res#2
to:initSquareTables::@10
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
[136] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[137] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[138] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[139] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[140] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10
[141] return
to:@return
initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5
[142] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
to:initSquareTables::@8
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
[143] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
to:initSquareTables::@4
mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8
[144] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[144] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
[145] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[145] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[145] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[146] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[147] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[148] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[149] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2
[150] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@3
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
[151] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[152] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[153] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
to:mul8u::@1
setupRasterIrq: scope:[setupRasterIrq] from main::@4
setupRasterIrq: scope:[setupRasterIrq] from main::@7
asm { sei }
[155] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[156] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[157] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[115] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[116] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[117] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[158] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
[118] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[159] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[160] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[161] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
[119] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[120] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[121] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[163] return
[123] return
to:@return
initSprites: scope:[initSprites] from main::@2
[124] phi()
to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@1
[125] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 )
[126] *((byte*) initSprites::sp#2) ← (byte) 0
[127] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
[128] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1
to:initSprites::@2
initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2
[129] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 )
[130] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0
[131] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
[132] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2
to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@2
[133] *((const byte*) SPRITES_MC#0) ← (byte) 0
[134] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
[135] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@3
[136] return
to:@return
initSquareTables: scope:[initSquareTables] from main
[137] phi()
to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9
[138] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[139] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
to:initSquareTables::@3
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
[140] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
[141] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[142] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[143] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[144] call mul8u
[145] (word) mul8u::return#2 ← (word) mul8u::res#2
to:initSquareTables::@9
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4
[146] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[147] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[148] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[149] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[150] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
to:initSquareTables::@5
initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
[151] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[152] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5
[153] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7
[154] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[155] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[156] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[157] call mul8u
[158] (word) mul8u::return#3 ← (word) mul8u::res#2
to:initSquareTables::@10
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
[159] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[160] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[161] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[162] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[163] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10
[164] return
to:@return
initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5
[165] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
to:initSquareTables::@8
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
[166] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
to:initSquareTables::@4
mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8
[167] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[167] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
[168] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[168] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[168] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[169] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[170] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[171] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[172] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2
[173] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@3
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
[174] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[175] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[176] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
to:mul8u::@1
irqBottom: scope:[irqBottom] from
[164] phi()
[177] phi()
to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1
[165] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[166] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[167] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
[178] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[179] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[180] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[168] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[169] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[170] call processChars
[181] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[182] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[183] call processChars
to:irqBottom::@3
irqBottom::@3: scope:[irqBottom] from irqBottom::@2
[171] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[172] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[173] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[174] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[175] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[184] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[185] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[186] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[187] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[188] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@3
[176] return
[189] return
to:@return
processChars: scope:[processChars] from irqBottom::@2
[177] phi()
[190] phi()
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
[178] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[179] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 3
[180] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$18
[181] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[182] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@1
[183] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3
[191] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[192] (byte~) processChars::$21 ← (byte) processChars::i#10 << (byte) 3
[193] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$21
[194] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[195] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2
to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@8
[184] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
[185] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[186] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
[187] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
processChars::@9: scope:[processChars] from processChars::@1
[196] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3
to:processChars::@10
processChars::@10: scope:[processChars] from processChars::@9
[197] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
[198] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[199] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
[200] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@8 processChars::@9
[188] (byte~) processChars::$9 ← > *((word*)(struct ProcessingSprite*) processChars::processing#0)
[189] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4
to:processChars::@6
processChars::@6: scope:[processChars] from processChars::@3
[190] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0
[191] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$10
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@6
[192] (byte~) processChars::$13 ← (byte) processChars::i#10 << (byte) 1
[193] (byte~) processChars::$12 ← (byte)*((word*)(struct ProcessingSprite*) processChars::processing#0)
[194] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$13) ← (byte~) processChars::$12
[195] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$13) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)
[196] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← -- *((word*)(struct ProcessingSprite*) processChars::processing#0)
[197] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)!=(byte) 0) goto processChars::@2
processChars::@3: scope:[processChars] from processChars::@10 processChars::@9
[201] (byte~) processChars::$9 ← > *((word*)(struct ProcessingSprite*) processChars::processing#0)
[202] if((byte) 0!=(byte~) processChars::$9) goto processChars::@4
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@5
[198] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0
[199] (byte~) processChars::$16 ← (byte) $ff ^ (byte) processChars::bitmask#0
[200] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$16
processChars::@7: scope:[processChars] from processChars::@3
[203] (byte~) processChars::$10 ← (byte) $ff ^ (byte) processChars::bitmask#0
[204] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$10
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@7
[205] (byte~) processChars::$13 ← (byte) processChars::i#10 << (byte) 1
[206] (byte~) processChars::$12 ← (byte)*((word*)(struct ProcessingSprite*) processChars::processing#0)
[207] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$13) ← (byte~) processChars::$12
[208] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$13) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)
[209] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)==(const byte) BORDER_XPOS_LEFT#0-(byte) 8) goto processChars::@6
to:processChars::@11
processChars::@11: scope:[processChars] from processChars::@5
[210] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)==(const byte) BORDER_YPOS_TOP#0-(byte) 8) goto processChars::@6
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@11
[211] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← -- *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)
[212] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← -- *((word*)(struct ProcessingSprite*) processChars::processing#0)
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@5 processChars::@7
[201] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[202] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
processChars::@2: scope:[processChars] from processChars::@1 processChars::@6 processChars::@8
[213] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[214] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@2
[203] return
[215] return
to:@return
processChars::@6: scope:[processChars] from processChars::@11 processChars::@5
[216] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0
[217] (byte~) processChars::$19 ← (byte) $ff ^ (byte) processChars::bitmask#0
[218] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$19
to:processChars::@2
processChars::@4: scope:[processChars] from processChars::@3
[204] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
[219] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
to:processChars::@5
irqTop: scope:[irqTop] from
[205] phi()
[220] phi()
to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1
[206] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[207] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[208] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
[221] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[222] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[223] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
to:irqTop::@2
irqTop::@2: scope:[irqTop] from irqTop::@1
[209] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[210] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[224] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[225] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2 irqTop::@3
[211] (byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) 0 irqTop::@3/(byte) irqTop::i1#1 )
[212] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[213] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@3
[226] (byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) 0 irqTop::@3/(byte) irqTop::i1#1 )
[227] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[228] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@3
to:irqTop::@4
irqTop::@4: scope:[irqTop] from irqTop::@3
[214] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[215] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[216] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[217] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[218] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[229] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
[230] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
[231] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[232] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[233] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@4
[219] return
[234] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,12 @@
(const byte) BLUE#0 BLUE = (byte) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
(byte) BORDER_XPOS_LEFT
(const byte) BORDER_XPOS_LEFT#0 BORDER_XPOS_LEFT = (byte) $18
(byte) BORDER_YPOS_TOP
(const byte) BORDER_YPOS_TOP#0 BORDER_YPOS_TOP = (byte) $32
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = (byte*) 53248
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = (byte*) 56333
(byte) CIA_INTERRUPT_CLEAR
@ -38,6 +44,8 @@
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = (byte*) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte) 7
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte) $31
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte) $35
(word) ProcessingChar::dist
@ -94,13 +102,13 @@
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte) 1
(struct ProcessingChar()) getCharToProcess()
(word~) getCharToProcess::$10 $10 zp ZP_WORD:37 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:37 4.0
(word~) getCharToProcess::$10 $10 zp ZP_WORD:41 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:41 4.0
(byte~) getCharToProcess::$13 reg byte x 1001.0
(byte~) getCharToProcess::$14 reg byte a 2002.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:39 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:37 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:37 3.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:43 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:41 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:41 3.0
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
@ -135,11 +143,11 @@
(word~) getCharToProcess::return_dist#5 return_dist zp ZP_WORD:19 2002.0
(word~) getCharToProcess::return_dist#6 return_dist zp ZP_WORD:19 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 reg byte x 7.333333333333333
(byte) getCharToProcess::return_x#0 reg byte y 7.333333333333333
(byte) getCharToProcess::return_x#1 return_x zp ZP_BYTE:17 242.23529411764704
(byte~) getCharToProcess::return_x#7 return_x zp ZP_BYTE:17 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 reg byte y 7.333333333333333
(byte) getCharToProcess::return_y#0 reg byte x 7.333333333333333
(byte) getCharToProcess::return_y#1 return_y zp ZP_BYTE:18 228.66666666666669
(byte~) getCharToProcess::return_y#7 return_y zp ZP_BYTE:18 2002.0
(byte*) getCharToProcess::screen_line
@ -151,15 +159,26 @@
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 y zp ZP_BYTE:13 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:13 137.75
(void()) initSprites()
(label) initSprites::@1
(label) initSprites::@2
(label) initSprites::@3
(label) initSprites::@return
(byte) initSprites::i
(byte) initSprites::i#1 reg byte x 16.5
(byte) initSprites::i#2 reg byte x 16.5
(byte*) initSprites::sp
(byte*) initSprites::sp#1 sp zp ZP_WORD:21 16.5
(byte*) initSprites::sp#2 sp zp ZP_WORD:21 16.5
(void()) initSquareTables()
(byte~) initSquareTables::$10 reg byte a 22.0
(byte~) initSquareTables::$12 reg byte a 22.0
(word~) initSquareTables::$14 $14 zp ZP_WORD:23 11.0
(word~) initSquareTables::$14 $14 zp ZP_WORD:25 11.0
(byte~) initSquareTables::$16 reg byte a 22.0
(byte~) initSquareTables::$17 reg byte a 22.0
(byte~) initSquareTables::$2 reg byte a 22.0
(byte~) initSquareTables::$4 reg byte a 22.0
(word~) initSquareTables::$6 $6 zp ZP_WORD:23 11.0
(word~) initSquareTables::$6 $6 zp ZP_WORD:25 11.0
(label) initSquareTables::@1
(label) initSquareTables::@10
(label) initSquareTables::@2
@ -172,13 +191,13 @@
(label) initSquareTables::@9
(label) initSquareTables::@return
(byte) initSquareTables::x
(byte) initSquareTables::x#1 x zp ZP_BYTE:21 16.5
(byte) initSquareTables::x#2 x zp ZP_BYTE:21 5.5
(byte) initSquareTables::x#1 x zp ZP_BYTE:23 16.5
(byte) initSquareTables::x#2 x zp ZP_BYTE:23 5.5
(byte) initSquareTables::x_dist
(byte) initSquareTables::x_dist#0 reg byte a 22.0
(byte) initSquareTables::y
(byte) initSquareTables::y#1 y zp ZP_BYTE:22 16.5
(byte) initSquareTables::y#2 y zp ZP_BYTE:22 5.5
(byte) initSquareTables::y#1 y zp ZP_BYTE:24 16.5
(byte) initSquareTables::y#2 y zp ZP_BYTE:24 5.5
(byte) initSquareTables::y_dist
(byte) initSquareTables::y_dist#0 reg byte a 22.0
interrupt(HARDWARE_ALL)(void()) irqBottom()
@ -202,10 +221,9 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i1#1 reg byte x 16.5
(byte) irqTop::i1#2 reg byte x 22.0
(void()) main()
(struct ProcessingChar~) main::$11
(byte~) main::$18 reg byte x 12.833333333333334
(byte~) main::$15 reg byte x 12.833333333333334
(struct ProcessingChar~) main::$8
(label) main::@1
(label) main::@10
(label) main::@2
(label) main::@3
(label) main::@4
@ -213,29 +231,22 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(struct ProcessingChar) main::center
(word) main::center_dist
(word) main::center_dist#0 center_dist zp ZP_WORD:19 22.0
(byte) main::center_x
(byte) main::center_x#0 reg byte x 5.5
(byte) main::center_x#0 reg byte y 5.5
(byte) main::center_y
(byte) main::center_y#0 reg byte y 5.5
(byte) main::center_y#0 reg byte x 5.5
(byte*) main::dst
(byte*) main::dst#1 dst zp ZP_WORD:6 11.0
(byte*) main::dst#2 dst zp ZP_WORD:6 11.0
(byte*) main::dst#1 dst zp ZP_WORD:4 11.0
(byte*) main::dst#2 dst zp ZP_WORD:4 11.0
(byte) main::i
(byte) main::i#1 reg byte y 16.5
(byte) main::i#2 reg byte y 4.125
(byte) main::i1
(byte) main::i1#1 reg byte x 16.5
(byte) main::i1#2 reg byte x 16.5
(byte*) main::sp
(byte*) main::sp#1 sp zp ZP_WORD:2 16.5
(byte*) main::sp#2 sp zp ZP_WORD:2 16.5
(byte*) main::src
(byte*) main::src#1 src zp ZP_WORD:4 11.0
(byte*) main::src#2 src zp ZP_WORD:4 16.5
(byte*) main::src#1 src zp ZP_WORD:2 11.0
(byte*) main::src#2 src zp ZP_WORD:2 16.5
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 202.0
(label) mul8u::@1
@ -253,24 +264,26 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) mul8u::b#0 reg byte a 22.0
(byte) mul8u::b#1 reg byte a 22.0
(word) mul8u::mb
(word) mul8u::mb#0 mb zp ZP_WORD:25 24.0
(word) mul8u::mb#1 mb zp ZP_WORD:25 202.0
(word) mul8u::mb#2 mb zp ZP_WORD:25 43.57142857142858
(word) mul8u::mb#0 mb zp ZP_WORD:27 24.0
(word) mul8u::mb#1 mb zp ZP_WORD:27 202.0
(word) mul8u::mb#2 mb zp ZP_WORD:27 43.57142857142858
(word) mul8u::res
(word) mul8u::res#1 res zp ZP_WORD:23 202.0
(word) mul8u::res#2 res zp ZP_WORD:23 46.42857142857143
(word) mul8u::res#6 res zp ZP_WORD:23 101.0
(word) mul8u::res#1 res zp ZP_WORD:25 202.0
(word) mul8u::res#2 res zp ZP_WORD:25 46.42857142857143
(word) mul8u::res#6 res zp ZP_WORD:25 101.0
(word) mul8u::return
(word) mul8u::return#2 return zp ZP_WORD:23 22.0
(word) mul8u::return#3 return zp ZP_WORD:23 22.0
(word) mul8u::return#2 return zp ZP_WORD:25 22.0
(word) mul8u::return#3 return zp ZP_WORD:25 22.0
(void()) processChars()
(byte~) processChars::$10 reg byte a 22.0
(byte~) processChars::$12 reg byte a 22.0
(byte~) processChars::$13 reg byte x 11.0
(byte~) processChars::$16 reg byte a 22.0
(byte~) processChars::$18 reg byte a 22.0
(byte~) processChars::$19 reg byte a 22.0
(byte~) processChars::$21 reg byte a 22.0
(byte~) processChars::$9 reg byte a 22.0
(label) processChars::@1
(label) processChars::@10
(label) processChars::@11
(label) processChars::@2
(label) processChars::@3
(label) processChars::@4
@ -281,12 +294,12 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(label) processChars::@9
(label) processChars::@return
(byte) processChars::bitmask
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:43 2.8947368421052633
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:47 2.8947368421052633
(byte) processChars::i
(byte) processChars::i#1 i zp ZP_BYTE:27 16.5
(byte) processChars::i#10 i zp ZP_BYTE:27 1.8333333333333333
(byte) processChars::i#1 i zp ZP_BYTE:29 16.5
(byte) processChars::i#10 i zp ZP_BYTE:29 1.6923076923076923
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:41 0.5789473684210527
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:45 0.55
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
@ -295,18 +308,20 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
(word~) startProcessing::$0 $0 zp ZP_WORD:9 4.0
(word~) startProcessing::$1 $1 zp ZP_WORD:9 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:33 3.0
(word~) startProcessing::$12 $12 zp ZP_WORD:33 4.0
(byte*~) startProcessing::$13 $13 zp ZP_WORD:33 4.0
(byte~) startProcessing::$21 reg byte a 2002.0
(byte~) startProcessing::$22 reg byte x 2.333333333333333
(word~) startProcessing::$3 $3 zp ZP_WORD:30 4.0
(word) startProcessing::$30 $30 zp ZP_WORD:35 4.0
(word) startProcessing::$31 $31 zp ZP_WORD:33 4.0
(word~) startProcessing::$4 $4 zp ZP_WORD:30 4.0
(byte~) startProcessing::$6 reg byte a 4.0
(word~) startProcessing::$0 $0 zp ZP_WORD:32 3.0
(word~) startProcessing::$1 $1 zp ZP_WORD:32 4.0
(word~) startProcessing::$10 $10 zp ZP_WORD:38 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:38 4.0
(byte~) startProcessing::$13 reg byte a 4.0
(byte*~) startProcessing::$2 $2 zp ZP_WORD:32 1.2000000000000002
(byte~) startProcessing::$24 reg byte a 2002.0
(byte~) startProcessing::$25 reg byte x 2.333333333333333
(word) startProcessing::$33 $33 zp ZP_WORD:34 4.0
(word) startProcessing::$34 $34 zp ZP_WORD:32 4.0
(word~) startProcessing::$4 $4 zp ZP_WORD:9 4.0
(word~) startProcessing::$5 $5 zp ZP_WORD:9 4.0
(word~) startProcessing::$7 $7 zp ZP_WORD:7 4.0
(word~) startProcessing::$8 $8 zp ZP_WORD:7 4.0
(label) startProcessing::@1
(label) startProcessing::@2
(label) startProcessing::@3
@ -320,42 +335,47 @@ interrupt(HARDWARE_ALL)(void()) irqTop()
(struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:28 0.40625
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:30 0.41666666666666674
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:29 0.5
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:31 0.34210526315789475
(byte) startProcessing::ch
(byte) startProcessing::ch#0 reg byte a 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 chargenData zp ZP_WORD:7 1.3333333333333333
(byte*) startProcessing::chargenData#1 chargenData zp ZP_WORD:7 67.33333333333333
(byte*) startProcessing::chargenData#2 chargenData zp ZP_WORD:7 101.66666666666666
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:8 52.39999999999999
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:6 38.52941176470589
(byte) startProcessing::freeIdx#6 reg byte x 33.666666666666664
(byte~) startProcessing::freeIdx#7 reg byte x 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:8 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:6 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 i zp ZP_BYTE:8 1501.5
(byte) startProcessing::i#2 i zp ZP_BYTE:8 1334.6666666666667
(byte) startProcessing::i#1 i zp ZP_BYTE:6 1501.5
(byte) startProcessing::i#2 i zp ZP_BYTE:6 1334.6666666666667
(byte) startProcessing::i1
(byte) startProcessing::i1#1 reg byte x 151.5
(byte) startProcessing::i1#2 reg byte x 67.33333333333333
(byte) startProcessing::i1#2 reg byte x 50.5
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:33 0.5714285714285714
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:36 0.13333333333333333
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:9 4.0
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:9 67.33333333333333
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:9 0.5714285714285714
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:9 50.5
(byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:9 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:32 0.36363636363636365
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:40 0.8
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:30 0.36363636363636365
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:38 0.8
(byte) startProcessing::spriteY
(byte) startProcessing::spriteY#0 reg byte y 0.4
(byte) startProcessing::spriteY#0 reg byte y 1.0
reg byte y [ main::i#2 main::i#1 ]
zp ZP_WORD:2 [ main::sp#2 main::sp#1 ]
reg byte x [ main::i1#2 main::i1#1 ]
zp ZP_WORD:4 [ main::src#2 main::src#1 ]
zp ZP_WORD:6 [ main::dst#2 main::dst#1 ]
zp ZP_WORD:2 [ main::src#2 main::src#1 ]
zp ZP_WORD:4 [ main::dst#2 main::dst#1 ]
reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
zp ZP_WORD:9 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$1 startProcessing::$0 ]
zp ZP_BYTE:6 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
zp ZP_WORD:7 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$8 startProcessing::$7 ]
zp ZP_WORD:9 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$5 startProcessing::$4 ]
reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
zp ZP_WORD:11 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
zp ZP_BYTE:13 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
@ -364,46 +384,50 @@ zp ZP_WORD:15 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#
zp ZP_BYTE:17 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
zp ZP_BYTE:18 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
zp ZP_WORD:19 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 main::center_dist#0 ]
zp ZP_BYTE:21 [ initSquareTables::x#2 initSquareTables::x#1 ]
zp ZP_WORD:21 [ initSprites::sp#2 initSprites::sp#1 ]
reg byte x [ initSprites::i#2 initSprites::i#1 ]
zp ZP_BYTE:23 [ initSquareTables::x#2 initSquareTables::x#1 ]
reg byte a [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
zp ZP_BYTE:22 [ initSquareTables::y#2 initSquareTables::y#1 ]
zp ZP_BYTE:24 [ initSquareTables::y#2 initSquareTables::y#1 ]
reg byte a [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
reg byte a [ mul8u::b#1 ]
reg byte a [ mul8u::b#0 ]
reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
zp ZP_WORD:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
zp ZP_WORD:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
zp ZP_WORD:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
reg byte x [ irqBottom::i#2 irqBottom::i#1 ]
zp ZP_BYTE:27 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:29 [ processChars::i#10 processChars::i#1 ]
reg byte x [ irqTop::i#2 irqTop::i#1 ]
reg byte x [ irqTop::i1#2 irqTop::i1#1 ]
reg byte x [ main::$18 ]
reg byte x [ getCharToProcess::return_x#0 ]
reg byte y [ getCharToProcess::return_y#0 ]
reg byte x [ main::center_x#0 ]
reg byte y [ main::center_y#0 ]
zp ZP_BYTE:28 [ startProcessing::center_x#0 ]
zp ZP_BYTE:29 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$21 ]
zp ZP_WORD:30 [ startProcessing::$3 startProcessing::$4 startProcessing::spriteX#0 ]
reg byte a [ startProcessing::$6 ]
reg byte x [ main::$15 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte x [ getCharToProcess::return_y#0 ]
reg byte y [ main::center_x#0 ]
reg byte x [ main::center_y#0 ]
zp ZP_BYTE:30 [ startProcessing::center_x#0 ]
zp ZP_BYTE:31 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$24 ]
zp ZP_WORD:32 [ startProcessing::$0 startProcessing::$34 startProcessing::$1 startProcessing::$2 ]
zp ZP_WORD:34 [ startProcessing::$33 ]
zp ZP_WORD:36 [ startProcessing::screenPtr#0 ]
reg byte a [ startProcessing::ch#0 ]
zp ZP_WORD:38 [ startProcessing::$10 startProcessing::$11 startProcessing::spriteX#0 ]
reg byte a [ startProcessing::$13 ]
reg byte y [ startProcessing::spriteY#0 ]
zp ZP_BYTE:32 [ startProcessing::spritePtr#0 ]
zp ZP_WORD:33 [ startProcessing::$11 startProcessing::$31 startProcessing::$12 startProcessing::$13 startProcessing::screenPtr#0 ]
zp ZP_WORD:35 [ startProcessing::$30 ]
reg byte x [ startProcessing::$22 ]
zp ZP_BYTE:40 [ startProcessing::spritePtr#0 ]
reg byte x [ startProcessing::$25 ]
reg byte x [ getCharToProcess::$13 ]
reg byte a [ getCharToProcess::$14 ]
zp ZP_WORD:37 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:39 [ getCharToProcess::$15 ]
zp ZP_WORD:41 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:43 [ getCharToProcess::$15 ]
reg byte a [ initSquareTables::$16 ]
reg byte a [ initSquareTables::$17 ]
reg byte a [ mul8u::$1 ]
reg byte a [ processChars::$18 ]
zp ZP_WORD:41 [ processChars::processing#0 ]
zp ZP_BYTE:43 [ processChars::bitmask#0 ]
reg byte a [ processChars::$21 ]
zp ZP_WORD:45 [ processChars::processing#0 ]
zp ZP_BYTE:47 [ processChars::bitmask#0 ]
reg byte a [ processChars::$9 ]
reg byte a [ processChars::$10 ]
reg byte x [ processChars::$13 ]
reg byte a [ processChars::$12 ]
reg byte a [ processChars::$16 ]
reg byte a [ processChars::$19 ]