1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-26 12:49:21 +00:00

Working on sprite scroller.

This commit is contained in:
Jesper Gravgaard 2020-03-31 19:20:33 +02:00
parent a977e6d9f0
commit 96779a5f24
5 changed files with 3538 additions and 2756 deletions

View File

@ -3,22 +3,32 @@ import "c64"
import "multiplexer" import "multiplexer"
char * const CHARSET_DEFAULT = 0x1000; char * const CHARSET_DEFAULT = 0x1000;
char * const FONT = 0x2000;
char * const SPRITES = 0x3000; char * const SPRITES = 0x3000;
char * const SCREEN = 0x0400; char * const SCREEN = 0x0400;
// Address of sprite pointers on screen
char * const SCREEN_SPRITES = SCREEN + SPRITE_PTRS; char * const SCREEN_SPRITES = SCREEN + SPRITE_PTRS;
// Show raster time used // Sprite pointer for sprite 0
const char DEBUG = 0; char SPRITE_0 = toSpritePtr(SPRITES);
//kickasm(pc FONT, resource "elefont.bin") {{ //char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin" // .import binary "elefont.bin"
//}} //}};
char FONT[0x0800];
char align(0x100) YSIN[0x100] = kickasm {{ char align(0x100) YSIN[0x100] = kickasm {{
.fill $100, round(142+89.5*sin(toRadians(360*i/256))) .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}}; }};
char align(0x100) XMOVEMENT[0x200] = kickasm {{
.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
}};
// The high-value table
char * const XMOVEMENT_HI = XMOVEMENT+0x100;
void main() { void main() {
// Create 2x2 font from CHARGEN // Create 2x2 font from CHARGEN
@ -38,12 +48,9 @@ void main() {
*D018 = toD018(SCREEN, CHARSET_DEFAULT); *D018 = toD018(SCREEN, CHARSET_DEFAULT);
// Set the x-positions & pointers // Set the x-positions & pointers
unsigned int xp = 24; for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8) {
char sprite = toSpritePtr(SPRITES); PLEX_PTR[s] = SPRITE_0+s;
for(char s: 0..PLEX_COUNT-1) { PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] };
PLEX_PTR[s] = sprite++;
PLEX_XPOS[s] = xp;
xp += 10;
} }
// Enable & initialize sprites // Enable & initialize sprites
*SPRITES_ENABLE = 0xff; *SPRITES_ENABLE = 0xff;
@ -52,7 +59,7 @@ void main() {
} }
// Move the sprites // Move the sprites
plexSine(); plex_move();
// Sort the sprites by y-position // Sort the sprites by y-position
plexSort(); plexSort();
@ -73,33 +80,53 @@ void main() {
// Move & Sort - when needed! // Move & Sort - when needed!
while(true) { while(true) {
while(!framedone) { while(!frame_done) {
} }
frame_done = false;
//*BORDERCOL = RED; //*BORDERCOL = RED;
// Move the sprites // Move the sprites
plexSine(); plex_move();
// Sort the sprites by y-position // Sort the sprites by y-position
plexSort(); plexSort();
//*BORDERCOL = GREEN; //*BORDERCOL = BLACK;
framedone = false;
} }
} }
// The scroll text
char SCROLL_TEXT[] = "camelot presents a spanking new contribution to the always hungry c64 scene. "
"in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
" ";
// The next char to use from the scroll text
char* scroll_text_next = SCROLL_TEXT;
// Y-sine index // Y-sine index
char sin_idx = 0; char sin_idx = 0;
// Move the plex sprites in an Y-sine // Move the plex sprites in an Y-sine and scroll them to the left.
void plexSine() { void plex_move() {
// Assign sinus positions
char y_idx = sin_idx; char y_idx = sin_idx;
for(char sy: 0..PLEX_COUNT-1) { for(char s: 0..PLEX_COUNT-1) {
PLEX_YPOS[sy] = YSIN[y_idx]; // Assign sine value
PLEX_YPOS[s] = YSIN[y_idx];
y_idx += 8; y_idx += 8;
if(PLEX_XPOS[s]==0) {
// Move sprite to far right
PLEX_XPOS[s] = 11*32;
// Restart scroll text of needed
if(*scroll_text_next==0)
scroll_text_next = SCROLL_TEXT;
// Read next char from the scroll text
PLEX_PTR[s] = SPRITE_0+*scroll_text_next++;
}
//PLEX_XPOS[s]--;
} }
sin_idx +=1; sin_idx +=1;
} }
volatile bool framedone = false; // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
volatile bool frame_done = false;
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
interrupt(kernel_min) void plex_irq() { interrupt(kernel_min) void plex_irq() {
@ -118,7 +145,8 @@ interrupt(kernel_min) void plex_irq() {
} else { } else {
// Reset the raster IRQ to the top of the screen // Reset the raster IRQ to the top of the screen
*RASTER = 0x28; *RASTER = 0x28;
framedone = true; // Signal that the IRQ is done showing sprites
frame_done = true;
} }
// Acknowledge the IRQ // Acknowledge the IRQ
*IRQ_STATUS = IRQ_RASTER; *IRQ_STATUS = IRQ_RASTER;

View File

@ -34,18 +34,22 @@
// The number of sprites in the multiplexer // The number of sprites in the multiplexer
.const PLEX_COUNT = $20 .const PLEX_COUNT = $20
.label CHARSET_DEFAULT = $1000 .label CHARSET_DEFAULT = $1000
.label FONT = $2000
.label SPRITES = $3000 .label SPRITES = $3000
.label SCREEN = $400 .label SCREEN = $400
// The high-value table
.label XMOVEMENT_HI = XMOVEMENT+$100
// The address of the sprite pointers on the current screen (screen+0x3f8). // The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR = $400+$3f8 .label PLEX_SCREEN_PTR = $400+$3f8
.label plex_show_idx = $11 .const toSpritePtr1_return = SPRITES/$40
.label plex_sprite_idx = $12 .label plex_show_idx = $f
.label plex_sprite_msb = $13 .label plex_sprite_idx = $10
.label plex_free_next = $14 .label plex_sprite_msb = $11
.label framedone = $15 .label plex_free_next = $12
.label frame_done = $13
// The next char to use from the scroll text
.label scroll_text_next = 3
// Y-sine index // Y-sine index
.label sin_idx = 4 .label sin_idx = 2
__bbegin: __bbegin:
// plex_show_idx=0 // plex_show_idx=0
// The index in the PLEX tables of the next sprite to show // The index in the PLEX tables of the next sprite to show
@ -62,16 +66,15 @@ __bbegin:
// The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown. // The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown.
lda #0 lda #0
sta.z plex_free_next sta.z plex_free_next
// framedone = false // frame_done = false
sta.z framedone // Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
sta.z frame_done
jsr main jsr main
rts rts
main: { main: {
.const toSpritePtr1_return = SPRITES/$40
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f
.label sprite = 4 .label s = 2
// Set the x-positions & pointers .label __13 = $14
.label xp = 2
// asm // asm
// Create 2x2 font from CHARGEN // Create 2x2 font from CHARGEN
sei sei
@ -95,57 +98,37 @@ main: {
// Show screen // Show screen
lda #toD0181_return lda #toD0181_return
sta D018 sta D018
lda #<$18
sta.z xp
lda #>$18
sta.z xp+1
ldx #0 ldx #0
lda #toSpritePtr1_return
sta.z sprite
__b1:
// PLEX_PTR[s] = sprite++
lda.z sprite
sta PLEX_PTR,x
// PLEX_PTR[s] = sprite++;
inc.z sprite
// PLEX_XPOS[s] = xp
txa txa
asl sta.z s
tay // Set the x-positions & pointers
lda.z xp __b1:
sta PLEX_XPOS,y // for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
lda.z xp+1 lda.z s
sta PLEX_XPOS+1,y cmp #PLEX_COUNT
// xp += 10 bcc __b2
lda #$a
clc
adc.z xp
sta.z xp
bcc !+
inc.z xp+1
!:
// for(char s: 0..PLEX_COUNT-1)
inx
cpx #PLEX_COUNT-1+1
bne __b1
// *SPRITES_ENABLE = 0xff // *SPRITES_ENABLE = 0xff
// Enable & initialize sprites // Enable & initialize sprites
lda #$ff lda #$ff
sta SPRITES_ENABLE sta SPRITES_ENABLE
ldx #0 ldx #0
__b3: __b4:
// SPRITES_COLS[s] = WHITE // SPRITES_COLS[s] = WHITE
lda #WHITE lda #WHITE
sta SPRITES_COLS,x sta SPRITES_COLS,x
// for(char s: 0..7) // for(char s: 0..7)
inx inx
cpx #8 cpx #8
bne __b3 bne __b4
// plexSine() // plex_move()
// Move the sprites // Move the sprites
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
lda #0 lda #0
sta.z sin_idx sta.z sin_idx
jsr plexSine jsr plex_move
// plexSort() // plexSort()
// Sort the sprites by y-position // Sort the sprites by y-position
jsr plexSort jsr plexSort
@ -179,25 +162,49 @@ main: {
sta KERNEL_IRQ+1 sta KERNEL_IRQ+1
// asm // asm
cli cli
__b5:
// while(!framedone)
lda.z framedone
cmp #0
bne __b6
jmp __b5
__b6: __b6:
// plexSine() // while(!frame_done)
lda.z frame_done
cmp #0
bne __b7
jmp __b6
__b7:
// frame_done = false
lda #0
sta.z frame_done
// plex_move()
//*BORDERCOL = RED; //*BORDERCOL = RED;
// Move the sprites // Move the sprites
jsr plexSine jsr plex_move
// plexSort() // plexSort()
// Sort the sprites by y-position // Sort the sprites by y-position
jsr plexSort jsr plexSort
// framedone = false jmp __b6
//*BORDERCOL = GREEN; __b2:
lda #0 // SPRITE_0+s
sta.z framedone lda #toSpritePtr1_return
jmp __b5 clc
adc.z s
// PLEX_PTR[s] = SPRITE_0+s
ldy.z s
sta PLEX_PTR,y
// PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] }
tya
asl
tay
lda XMOVEMENT_HI,x
sta.z __13+1
lda XMOVEMENT,x
sta.z __13
sta PLEX_XPOS,y
lda.z __13+1
sta PLEX_XPOS+1,y
// x+=8
txa
axs #-[8]
// for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
inc.z s
jmp __b1
} }
// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS // Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS
// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) // Assumes that the positions are nearly sorted already (as each sprite just moves a bit)
@ -209,9 +216,9 @@ main: {
// elements before the marker are shifted right one at a time until encountering one smaller than the current one. // elements before the marker are shifted right one at a time until encountering one smaller than the current one.
// It is then inserted at the spot. Now the marker can move forward. // It is then inserted at the spot. Now the marker can move forward.
plexSort: { plexSort: {
.label nxt_idx = $16 .label nxt_idx = $17
.label nxt_y = $17 .label nxt_y = $16
.label m = 5 .label m = 9
lda #0 lda #0
sta.z m sta.z m
__b1: __b1:
@ -276,22 +283,69 @@ plexSort: {
// } // }
rts rts
} }
// Move the plex sprites in an Y-sine // Move the plex sprites in an Y-sine and scroll them to the left.
plexSine: { plex_move: {
.label s = 9
// y_idx = sin_idx // y_idx = sin_idx
// Assign sinus positions
ldx.z sin_idx ldx.z sin_idx
ldy #0 lda #0
sta.z s
__b1: __b1:
// PLEX_YPOS[sy] = YSIN[y_idx] // PLEX_YPOS[s] = YSIN[y_idx]
// Assign sine value
lda YSIN,x lda YSIN,x
ldy.z s
sta PLEX_YPOS,y sta PLEX_YPOS,y
// y_idx += 8 // y_idx += 8
txa txa
axs #-[8] axs #-[8]
// for(char sy: 0..PLEX_COUNT-1) // PLEX_XPOS[s]==0
iny tya
cpy #PLEX_COUNT-1+1 asl
// if(PLEX_XPOS[s]==0)
tay
lda PLEX_XPOS+1,y
bne __b2
lda PLEX_XPOS,y
bne __b2
// PLEX_XPOS[s] = 11*32
lda.z s
asl
// Move sprite to far right
tay
lda #<$b*$20
sta PLEX_XPOS,y
lda #>$b*$20
sta PLEX_XPOS+1,y
// if(*scroll_text_next==0)
ldy #0
lda (scroll_text_next),y
cmp #0
bne __b3
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
__b3:
// SPRITE_0+*scroll_text_next++
lda #toSpritePtr1_return
clc
ldy #0
adc (scroll_text_next),y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++
// Read next char from the scroll text
ldy.z s
sta PLEX_PTR,y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++;
inc.z scroll_text_next
bne !+
inc.z scroll_text_next+1
!:
__b2:
// for(char s: 0..PLEX_COUNT-1)
inc.z s
lda #PLEX_COUNT-1+1
cmp.z s
bne __b1 bne __b1
// sin_idx +=1 // sin_idx +=1
inc.z sin_idx inc.z sin_idx
@ -318,13 +372,13 @@ plexInit: {
// - num_chars The number of chars to convert // - num_chars The number of chars to convert
font_2x2_to_sprites: { font_2x2_to_sprites: {
.const num_chars = $40 .const num_chars = $40
.label __3 = $18 .label __3 = $17
.label char_right = $d .label char_right = $d
.label sprite_idx = $a .label sprite_idx = $a
.label char_left = $b .label char_left = $b
.label char_current = 6 .label char_current = 5
.label sprite = 8 .label sprite = 7
.label c = 5 .label c = 9
lda #<SPRITES lda #<SPRITES
sta.z sprite sta.z sprite
lda #>SPRITES lda #>SPRITES
@ -446,18 +500,18 @@ font_2x2_to_sprites: {
// - 0x80 - 0xbf Lower left glyphs // - 0x80 - 0xbf Lower left glyphs
// - 0xc0 - 0xff Lower right glyphs // - 0xc0 - 0xff Lower right glyphs
font_2x2: { font_2x2: {
.label __5 = $f .label __5 = $14
.label __7 = $f .label __7 = $14
.label next_2x2_left = 6 .label next_2x2_left = 5
.label next_2x2_right = $d .label next_2x2_right = $d
.label glyph_bits = $18 .label glyph_bits = $16
.label glyph_bits_2x2 = $f .label glyph_bits_2x2 = $14
.label l2 = $17 .label l2 = $17
.label l = $16 .label l = $a
.label next_2x2_left_1 = $b .label next_2x2_left_1 = $b
.label next_2x2 = 6 .label next_2x2 = 5
.label next_original = 8 .label next_original = 7
.label c = $a .label c = 9
lda #0 lda #0
sta.z c sta.z c
lda #<CHARGEN lda #<CHARGEN
@ -606,7 +660,7 @@ font_2x2: {
} }
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
plex_irq: { plex_irq: {
.label __4 = $19 .label __4 = $18
// asm // asm
sei sei
__b3: __b3:
@ -635,9 +689,10 @@ plex_irq: {
// Reset the raster IRQ to the top of the screen // Reset the raster IRQ to the top of the screen
lda #$28 lda #$28
sta RASTER sta RASTER
// framedone = true // frame_done = true
// Signal that the IRQ is done showing sprites
lda #1 lda #1
sta.z framedone sta.z frame_done
__b2: __b2:
// *IRQ_STATUS = IRQ_RASTER // *IRQ_STATUS = IRQ_RASTER
// Acknowledge the IRQ // Acknowledge the IRQ
@ -657,7 +712,7 @@ plex_irq: {
// Show the next sprite. // Show the next sprite.
// plexSort() prepares showing the sprites // plexSort() prepares showing the sprites
plexShowSprite: { plexShowSprite: {
.label plex_sprite_idx2 = $1a .label plex_sprite_idx2 = $19
// plex_sprite_idx2 = plex_sprite_idx*2 // plex_sprite_idx2 = plex_sprite_idx*2
lda.z plex_sprite_idx lda.z plex_sprite_idx
asl asl
@ -749,10 +804,18 @@ plexShowSprite: {
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
// Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again.
PLEX_FREE_YPOS: .fill 8, 0 PLEX_FREE_YPOS: .fill 8, 0
//kickasm(pc FONT, resource "elefont.bin") {{ //char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin" // .import binary "elefont.bin"
//}} //}};
FONT: .fill $800, 0
.align $100 .align $100
YSIN: YSIN:
.fill $100, round(142+89.5*sin(toRadians(360*i/256))) .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
.align $100
XMOVEMENT:
.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
// The scroll text
SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
.byte 0

View File

@ -8,97 +8,96 @@
to:@2 to:@2
@2: scope:[] from @1 @2: scope:[] from @1
[4] (volatile byte) plex_free_next ← (byte) 0 [4] (volatile byte) plex_free_next ← (byte) 0
to:toSpritePtr1
toSpritePtr1: scope:[] from @2
[5] phi()
to:@3 to:@3
@3: scope:[] from @2 @3: scope:[] from toSpritePtr1
[5] (volatile bool) framedone ← false [6] (volatile bool) frame_done ← false
to:@4 to:@4
@4: scope:[] from @3 @4: scope:[] from @3
[6] phi() [7] phi()
[7] call main [8] call main
to:@end to:@end
@end: scope:[] from @4 @end: scope:[] from @4
[8] phi() [9] phi()
(void()) main() (void()) main()
main: scope:[main] from @4 main: scope:[main] from @4
asm { sei } asm { sei }
[10] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM [11] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_CHARROM
[11] call font_2x2 [12] call font_2x2
to:main::@8
main::@8: scope:[main] from main
[12] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO
asm { cli }
[14] call font_2x2_to_sprites
to:main::@9 to:main::@9
main::@9: scope:[main] from main::@8 main::@9: scope:[main] from main
[15] phi() [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_BASIC_KERNEL_IO
[16] call plexInit
to:main::toD0181
main::toD0181: scope:[main] from main::@9
[17] phi()
to:main::@7
main::@7: scope:[main] from main::toD0181
[18] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0
to:main::toSpritePtr1
main::toSpritePtr1: scope:[main] from main::@7
[19] phi()
to:main::@1
main::@1: scope:[main] from main::@1 main::toSpritePtr1
[20] (word) main::xp#2 ← phi( main::@1/(word) main::xp#1 main::toSpritePtr1/(word) $18 )
[20] (byte) main::s#2 ← phi( main::@1/(byte) main::s#1 main::toSpritePtr1/(byte) 0 )
[20] (byte) main::sprite#2 ← phi( main::@1/(byte) main::sprite#1 main::toSpritePtr1/(const byte) main::toSpritePtr1_return#0 )
[21] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte) main::sprite#2
[22] (byte) main::sprite#1 ← ++ (byte) main::sprite#2
[23] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1
[24] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word) main::xp#2
[25] (word) main::xp#1 ← (word) main::xp#2 + (byte) $a
[26] (byte) main::s#1 ← ++ (byte) main::s#2
[27] if((byte) main::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
[28] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[29] (byte) main::s1#2 ← phi( main::@2/(byte) 0 main::@3/(byte) main::s1#1 )
[30] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE
[31] (byte) main::s1#1 ← ++ (byte) main::s1#2
[32] if((byte) main::s1#1!=(byte) 8) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
[33] phi()
[34] call plexSine
to:main::@10
main::@10: scope:[main] from main::@4
[35] phi()
[36] call plexSort
to:main::@11
main::@11: scope:[main] from main::@10
asm { sei }
[38] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[39] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f
[40] *((const nomodify byte*) RASTER) ← (byte) $28
[41] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[42] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[43] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq()
asm { cli } asm { cli }
[15] call font_2x2_to_sprites
to:main::@10
main::@10: scope:[main] from main::@9
[16] phi()
[17] call plexInit
to:main::toD0181
main::toD0181: scope:[main] from main::@10
[18] phi()
to:main::@8
main::@8: scope:[main] from main::toD0181
[19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0
to:main::@1
main::@1: scope:[main] from main::@2 main::@8
[20] (byte) main::x#2 ← phi( main::@2/(byte) main::x#1 main::@8/(byte) 0 )
[20] (byte) main::s#2 ← phi( main::@2/(byte) main::s#1 main::@8/(byte) 0 )
[21] if((byte) main::s#2<(const nomodify byte) PLEX_COUNT) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1
[22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[23] (byte) main::s1#2 ← phi( main::@3/(byte) 0 main::@4/(byte) main::s1#1 )
[24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE
[25] (byte) main::s1#1 ← ++ (byte) main::s1#2
[26] if((byte) main::s1#1!=(byte) 8) goto main::@4
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@11 main::@13 main::@5 main::@5: scope:[main] from main::@4
[45] if((volatile bool) framedone) goto main::@6 [27] phi()
to:main::@5 [28] call plex_move
main::@6: scope:[main] from main::@5 to:main::@11
[46] phi() main::@11: scope:[main] from main::@5
[47] call plexSine [29] phi()
[30] call plexSort
to:main::@12 to:main::@12
main::@12: scope:[main] from main::@6 main::@12: scope:[main] from main::@11
[48] phi() asm { sei }
[49] call plexSort [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR
[33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f
[34] *((const nomodify byte*) RASTER) ← (byte) $28
[35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER
[36] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
[37] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq()
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@12 main::@13 main::@6
[39] if((volatile bool) frame_done) goto main::@7
to:main::@6
main::@7: scope:[main] from main::@6
[40] (volatile bool) frame_done ← false
[41] call plex_move
to:main::@13 to:main::@13
main::@13: scope:[main] from main::@12 main::@13: scope:[main] from main::@7
[50] (volatile bool) framedone ← false [42] phi()
to:main::@5 [43] call plexSort
to:main::@6
main::@2: scope:[main] from main::@1
[44] (byte~) main::$7 ← (const byte) toSpritePtr1_return#0 + (byte) main::s#2
[45] *((const byte*) PLEX_PTR + (byte) main::s#2) ← (byte~) main::$7
[46] (byte~) main::$12 ← (byte) main::s#2 << (byte) 1
[47] (word~) main::$13 ← *((const nomodify byte*) XMOVEMENT_HI + (byte) main::x#2) w= *((const byte*) XMOVEMENT + (byte) main::x#2)
[48] *((const word*) PLEX_XPOS + (byte~) main::$12) ← (word~) main::$13
[49] (byte) main::x#1 ← (byte) main::x#2 + (byte) 8
[50] (byte) main::s#1 ← ++ (byte) main::s#2
to:main::@1
(void()) plexSort() (void()) plexSort()
plexSort: scope:[plexSort] from main::@10 main::@12 plexSort: scope:[plexSort] from main::@11 main::@13
[51] phi() [51] phi()
to:plexSort::@1 to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
@ -148,165 +147,186 @@ plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2
[75] return [75] return
to:@return to:@return
(void()) plexSine() (void()) plex_move()
plexSine: scope:[plexSine] from main::@4 main::@6 plex_move: scope:[plex_move] from main::@5 main::@7
[76] (byte) sin_idx#10 ← phi( main::@6/(byte) sin_idx#12 main::@4/(byte) 0 ) [76] (byte*) scroll_text_next#25 ← phi( main::@7/(byte*) scroll_text_next#13 main::@5/(const byte*) SCROLL_TEXT )
[77] (byte) plexSine::y_idx#0 ← (byte) sin_idx#10 [76] (byte) sin_idx#10 ← phi( main::@7/(byte) sin_idx#12 main::@5/(byte) 0 )
to:plexSine::@1 [77] (byte) plex_move::y_idx#0 ← (byte) sin_idx#10
plexSine::@1: scope:[plexSine] from plexSine plexSine::@1 to:plex_move::@1
[78] (byte) plexSine::sy#2 ← phi( plexSine/(byte) 0 plexSine::@1/(byte) plexSine::sy#1 ) plex_move::@1: scope:[plex_move] from plex_move plex_move::@2
[78] (byte) plexSine::y_idx#2 ← phi( plexSine/(byte) plexSine::y_idx#0 plexSine::@1/(byte) plexSine::y_idx#1 ) [78] (byte*) scroll_text_next#11 ← phi( plex_move/(byte*) scroll_text_next#25 plex_move::@2/(byte*) scroll_text_next#13 )
[79] *((const byte*) PLEX_YPOS + (byte) plexSine::sy#2) ← *((const byte*) YSIN + (byte) plexSine::y_idx#2) [78] (byte) plex_move::s#2 ← phi( plex_move/(byte) 0 plex_move::@2/(byte) plex_move::s#1 )
[80] (byte) plexSine::y_idx#1 ← (byte) plexSine::y_idx#2 + (byte) 8 [78] (byte) plex_move::y_idx#2 ← phi( plex_move/(byte) plex_move::y_idx#0 plex_move::@2/(byte) plex_move::y_idx#1 )
[81] (byte) plexSine::sy#1 ← ++ (byte) plexSine::sy#2 [79] *((const byte*) PLEX_YPOS + (byte) plex_move::s#2) ← *((const byte*) YSIN + (byte) plex_move::y_idx#2)
[82] if((byte) plexSine::sy#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexSine::@1 [80] (byte) plex_move::y_idx#1 ← (byte) plex_move::y_idx#2 + (byte) 8
to:plexSine::@2 [81] (byte~) plex_move::$6 ← (byte) plex_move::s#2 << (byte) 1
plexSine::@2: scope:[plexSine] from plexSine::@1 [82] if(*((const word*) PLEX_XPOS + (byte~) plex_move::$6)!=(byte) 0) goto plex_move::@2
[83] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1 to:plex_move::@4
to:plexSine::@return plex_move::@4: scope:[plex_move] from plex_move::@1
plexSine::@return: scope:[plexSine] from plexSine::@2 [83] (byte~) plex_move::$7 ← (byte) plex_move::s#2 << (byte) 1
[84] return [84] *((const word*) PLEX_XPOS + (byte~) plex_move::$7) ← (word)(number) $b*(number) $20
[85] if(*((byte*) scroll_text_next#11)!=(byte) 0) goto plex_move::@6
to:plex_move::@3
plex_move::@6: scope:[plex_move] from plex_move::@4
[86] phi()
to:plex_move::@3
plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@6
[87] (byte*) scroll_text_next#12 ← phi( plex_move::@6/(byte*) scroll_text_next#11 plex_move::@4/(const byte*) SCROLL_TEXT )
[88] (byte~) plex_move::$4 ← (const byte) toSpritePtr1_return#0 + *((byte*) scroll_text_next#12)
[89] *((const byte*) PLEX_PTR + (byte) plex_move::s#2) ← (byte~) plex_move::$4
[90] (byte*) scroll_text_next#4 ← ++ (byte*) scroll_text_next#12
to:plex_move::@2
plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3
[91] (byte*) scroll_text_next#13 ← phi( plex_move::@1/(byte*) scroll_text_next#11 plex_move::@3/(byte*) scroll_text_next#4 )
[92] (byte) plex_move::s#1 ← ++ (byte) plex_move::s#2
[93] if((byte) plex_move::s#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plex_move::@1
to:plex_move::@5
plex_move::@5: scope:[plex_move] from plex_move::@2
[94] (byte) sin_idx#12 ← (byte) sin_idx#10 + (byte) 1
to:plex_move::@return
plex_move::@return: scope:[plex_move] from plex_move::@5
[95] return
to:@return to:@return
(void()) plexInit((byte*) plexInit::screen) (void()) plexInit((byte*) plexInit::screen)
plexInit: scope:[plexInit] from main::@9 plexInit: scope:[plexInit] from main::@10
[85] phi() [96] phi()
to:plexInit::plexSetScreen1 to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1: scope:[plexInit] from plexInit
[86] phi() [97] phi()
to:plexInit::@1 to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1
[87] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) [98] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 )
[88] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [99] *((const byte*) PLEX_SORTED_IDX + (byte) plexInit::i#2) ← (byte) plexInit::i#2
[89] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2
[90] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1 [101] if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(byte) 1) goto plexInit::@1
to:plexInit::@return to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1 plexInit::@return: scope:[plexInit] from plexInit::@1
[91] return [102] return
to:@return to:@return
(void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars) (void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars)
font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@8 font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@9
[92] phi() [103] phi()
to:font_2x2_to_sprites::@1 to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@7 font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@7
[93] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 ) [104] (byte*) font_2x2_to_sprites::sprite#4 ← phi( font_2x2_to_sprites/(const nomodify byte*) SPRITES font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::sprite#1 )
[93] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const nomodify byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 ) [104] (byte*) font_2x2_to_sprites::char_current#2 ← phi( font_2x2_to_sprites/(const byte*) FONT font_2x2_to_sprites::@7/(byte*) font_2x2_to_sprites::char_current#1 )
[93] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 ) [104] (byte) font_2x2_to_sprites::c#2 ← phi( font_2x2_to_sprites/(byte) 0 font_2x2_to_sprites::@7/(byte) font_2x2_to_sprites::c#1 )
[94] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 [105] if((byte) font_2x2_to_sprites::c#2<(const byte) font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2
to:font_2x2_to_sprites::@return to:font_2x2_to_sprites::@return
font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1 font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[95] return [106] return
to:@return to:@return
font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1 font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[96] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8 [107] (byte*) font_2x2_to_sprites::char_right#0 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $40*(number) 8
[97] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2 [108] (byte*) font_2x2_to_sprites::char_left#6 ← (byte*) font_2x2_to_sprites::char_current#2
to:font_2x2_to_sprites::@3 to:font_2x2_to_sprites::@3
font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5 font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5
[98] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 ) [109] (byte*) font_2x2_to_sprites::char_right#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_right#4 )
[98] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 ) [109] (byte) font_2x2_to_sprites::sprite_idx#4 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::sprite_idx#3 )
[98] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 ) [109] (byte*) font_2x2_to_sprites::char_left#3 ← phi( font_2x2_to_sprites::@2/(byte*) font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::@5/(byte*) font_2x2_to_sprites::char_left#4 )
[98] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 ) [109] (byte) font_2x2_to_sprites::i#2 ← phi( font_2x2_to_sprites::@2/(byte) 0 font_2x2_to_sprites::@5/(byte) font_2x2_to_sprites::i#1 )
[99] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7 [110] (byte~) font_2x2_to_sprites::$3 ← (byte) font_2x2_to_sprites::i#2 & (byte) 7
[100] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3) [111] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#4) ← *((byte*) font_2x2_to_sprites::char_left#3 + (byte~) font_2x2_to_sprites::$3)
[101] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4 [112] (byte) font_2x2_to_sprites::sprite_idx#1 ← ++ (byte) font_2x2_to_sprites::sprite_idx#4
[102] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3) [113] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#1) ← *((byte*) font_2x2_to_sprites::char_right#3 + (byte~) font_2x2_to_sprites::$3)
[103] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1 [114] (byte) font_2x2_to_sprites::sprite_idx#2 ← ++ (byte) font_2x2_to_sprites::sprite_idx#1
[104] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0 [115] *((byte*) font_2x2_to_sprites::sprite#4 + (byte) font_2x2_to_sprites::sprite_idx#2) ← (byte) 0
[105] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2 [116] (byte) font_2x2_to_sprites::sprite_idx#3 ← ++ (byte) font_2x2_to_sprites::sprite_idx#2
[106] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4 [117] if((byte) font_2x2_to_sprites::i#2==(byte) 7) goto font_2x2_to_sprites::@4
to:font_2x2_to_sprites::@6 to:font_2x2_to_sprites::@6
font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3 font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[107] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8 [118] if((byte) font_2x2_to_sprites::i#2!=(byte) $f) goto font_2x2_to_sprites::@8
to:font_2x2_to_sprites::@5 to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6 font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6
[108] phi() [119] phi()
to:font_2x2_to_sprites::@5 to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@8 font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@8
[109] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 ) [120] (byte*) font_2x2_to_sprites::char_right#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_right#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 )
[109] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const nomodify byte*) FONT+(byte) ' '*(byte) 8 ) [120] (byte*) font_2x2_to_sprites::char_left#4 ← phi( font_2x2_to_sprites::@4/(byte*) font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::@8/(byte*) font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::@6/(const byte*) FONT+(byte) ' '*(byte) 8 )
[110] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2 [121] (byte) font_2x2_to_sprites::i#1 ← ++ (byte) font_2x2_to_sprites::i#2
[111] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3 [122] if((byte) font_2x2_to_sprites::i#1!=(byte) $15) goto font_2x2_to_sprites::@3
to:font_2x2_to_sprites::@7 to:font_2x2_to_sprites::@7
font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5 font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5
[112] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8 [123] (byte*) font_2x2_to_sprites::char_current#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (byte) 8
[113] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40 [124] (byte*) font_2x2_to_sprites::sprite#1 ← (byte*) font_2x2_to_sprites::sprite#4 + (byte) $40
[114] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2 [125] (byte) font_2x2_to_sprites::c#1 ← ++ (byte) font_2x2_to_sprites::c#2
to:font_2x2_to_sprites::@1 to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3 font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[115] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8 [126] (byte*) font_2x2_to_sprites::char_left#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $80*(number) 8
[116] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8 [127] (byte*) font_2x2_to_sprites::char_right#1 ← (byte*) font_2x2_to_sprites::char_current#2 + (word)(number) $c0*(number) 8
to:font_2x2_to_sprites::@5 to:font_2x2_to_sprites::@5
(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
font_2x2: scope:[font_2x2] from main font_2x2: scope:[font_2x2] from main
[117] phi() [128] phi()
to:font_2x2::@1 to:font_2x2::@1
font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@9 font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@9
[118] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 ) [129] (byte) font_2x2::c#11 ← phi( font_2x2/(byte) 0 font_2x2::@9/(byte) font_2x2::c#1 )
[118] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 ) [129] (byte*) font_2x2::next_original#4 ← phi( font_2x2/(const nomodify byte*) CHARGEN font_2x2::@9/(byte*) font_2x2::next_original#1 )
[118] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const nomodify byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 ) [129] (byte*) font_2x2::next_2x2_left#0 ← phi( font_2x2/(const byte*) FONT font_2x2::@9/(byte*) font_2x2::next_2x2#1 )
[119] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8 [130] (byte*) font_2x2::next_2x2_right#0 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $40*(number) 8
[120] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0 [131] (byte*) font_2x2::next_2x2_left#10 ← (byte*) font_2x2::next_2x2_left#0
to:font_2x2::@2 to:font_2x2::@2
font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@8 font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@8
[121] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 ) [132] (byte*) font_2x2::next_2x2_right#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_right#0 font_2x2::@8/(byte*) font_2x2::next_2x2_right#8 )
[121] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 ) [132] (byte) font_2x2::l2#8 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l2#9 )
[121] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 ) [132] (byte*) font_2x2::next_2x2_left#7 ← phi( font_2x2::@1/(byte*) font_2x2::next_2x2_left#10 font_2x2::@8/(byte*) font_2x2::next_2x2_left#8 )
[121] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 ) [132] (byte) font_2x2::l#2 ← phi( font_2x2::@1/(byte) 0 font_2x2::@8/(byte) font_2x2::l#1 )
[122] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2) [133] (byte) font_2x2::glyph_bits#0 ← *((byte*) font_2x2::next_original#4 + (byte) font_2x2::l#2)
to:font_2x2::@3 to:font_2x2::@3
font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@5 font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@5
[123] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 ) [134] (byte) font_2x2::b#2 ← phi( font_2x2::@2/(byte) 0 font_2x2::@5/(byte) font_2x2::b#1 )
[123] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 ) [134] (word) font_2x2::glyph_bits_2x2#3 ← phi( font_2x2::@2/(word) 0 font_2x2::@5/(word) font_2x2::glyph_bits_2x2#2 )
[123] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 ) [134] (byte) font_2x2::glyph_bits#2 ← phi( font_2x2::@2/(byte) font_2x2::glyph_bits#0 font_2x2::@5/(byte) font_2x2::glyph_bits#1 )
[124] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80 [135] (byte~) font_2x2::$1 ← (byte) font_2x2::glyph_bits#2 & (byte) $80
[125] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4 [136] if((byte) 0!=(byte~) font_2x2::$1) goto font_2x2::@4
to:font_2x2::@5 to:font_2x2::@5
font_2x2::@4: scope:[font_2x2] from font_2x2::@3 font_2x2::@4: scope:[font_2x2] from font_2x2::@3
[126] phi() [137] phi()
to:font_2x2::@5 to:font_2x2::@5
font_2x2::@5: scope:[font_2x2] from font_2x2::@3 font_2x2::@4 font_2x2::@5: scope:[font_2x2] from font_2x2::@3 font_2x2::@4
[127] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 ) [138] (byte) font_2x2::glyph_bit#0 ← phi( font_2x2::@4/(byte) 1 font_2x2::@3/(byte) 0 )
[128] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1 [139] (word~) font_2x2::$5 ← (word) font_2x2::glyph_bits_2x2#3 << (byte) 1
[129] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0 [140] (word) font_2x2::glyph_bits_2x2#1 ← (word~) font_2x2::$5 | (byte) font_2x2::glyph_bit#0
[130] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1 [141] (word~) font_2x2::$7 ← (word) font_2x2::glyph_bits_2x2#1 << (byte) 1
[131] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0 [142] (word) font_2x2::glyph_bits_2x2#2 ← (word~) font_2x2::$7 | (byte) font_2x2::glyph_bit#0
[132] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1 [143] (byte) font_2x2::glyph_bits#1 ← (byte) font_2x2::glyph_bits#2 << (byte) 1
[133] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2 [144] (byte) font_2x2::b#1 ← ++ (byte) font_2x2::b#2
[134] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3 [145] if((byte) font_2x2::b#1!=(byte) 8) goto font_2x2::@3
to:font_2x2::@6 to:font_2x2::@6
font_2x2::@6: scope:[font_2x2] from font_2x2::@5 font_2x2::@6: scope:[font_2x2] from font_2x2::@5
[135] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2 [146] (byte~) font_2x2::$12 ← > (word) font_2x2::glyph_bits_2x2#2
[136] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12 [147] *((byte*) font_2x2::next_2x2_left#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$12
[137] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1 [148] (byte~) font_2x2::$11 ← (byte) font_2x2::l2#8 + (byte) 1
[138] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12 [149] *((byte*) font_2x2::next_2x2_left#7 + (byte~) font_2x2::$11) ← (byte~) font_2x2::$12
[139] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2 [150] (byte~) font_2x2::$15 ← < (word) font_2x2::glyph_bits_2x2#2
[140] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15 [151] *((byte*) font_2x2::next_2x2_right#7 + (byte) font_2x2::l2#8) ← (byte~) font_2x2::$15
[141] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1 [152] (byte~) font_2x2::$14 ← (byte) font_2x2::l2#8 + (byte) 1
[142] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15 [153] *((byte*) font_2x2::next_2x2_right#7 + (byte~) font_2x2::$14) ← (byte~) font_2x2::$15
[143] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2 [154] (byte) font_2x2::l2#1 ← (byte) font_2x2::l2#8 + (byte) 2
[144] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8 [155] if((byte) font_2x2::l2#1!=(byte) 8) goto font_2x2::@8
to:font_2x2::@7 to:font_2x2::@7
font_2x2::@7: scope:[font_2x2] from font_2x2::@6 font_2x2::@7: scope:[font_2x2] from font_2x2::@6
[145] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8 [156] (byte*) font_2x2::next_2x2_left#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $80*(number) 8
[146] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8 [157] (byte*) font_2x2::next_2x2_right#1 ← (byte*) font_2x2::next_2x2_left#0 + (word)(number) $c0*(number) 8
to:font_2x2::@8 to:font_2x2::@8
font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7 font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7
[147] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 ) [158] (byte*) font_2x2::next_2x2_right#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_right#1 font_2x2::@6/(byte*) font_2x2::next_2x2_right#7 )
[147] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 ) [158] (byte) font_2x2::l2#9 ← phi( font_2x2::@7/(byte) 0 font_2x2::@6/(byte) font_2x2::l2#1 )
[147] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 ) [158] (byte*) font_2x2::next_2x2_left#8 ← phi( font_2x2::@7/(byte*) font_2x2::next_2x2_left#1 font_2x2::@6/(byte*) font_2x2::next_2x2_left#7 )
[148] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2 [159] (byte) font_2x2::l#1 ← ++ (byte) font_2x2::l#2
[149] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2 [160] if((byte) font_2x2::l#1!=(byte) 8) goto font_2x2::@2
to:font_2x2::@9 to:font_2x2::@9
font_2x2::@9: scope:[font_2x2] from font_2x2::@8 font_2x2::@9: scope:[font_2x2] from font_2x2::@8
[150] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8 [161] (byte*) font_2x2::next_2x2#1 ← (byte*) font_2x2::next_2x2_left#0 + (byte) 8
[151] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8 [162] (byte*) font_2x2::next_original#1 ← (byte*) font_2x2::next_original#4 + (byte) 8
[152] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11 [163] (byte) font_2x2::c#1 ← ++ (byte) font_2x2::c#11
[153] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1 [164] if((byte) font_2x2::c#1!=(byte) $40) goto font_2x2::@1
to:font_2x2::@return to:font_2x2::@return
font_2x2::@return: scope:[font_2x2] from font_2x2::@9 font_2x2::@return: scope:[font_2x2] from font_2x2::@9
[154] return [165] return
to:@return to:@return
interrupt(KERNEL_MIN)(void()) plex_irq() interrupt(KERNEL_MIN)(void()) plex_irq()
@ -314,77 +334,77 @@ plex_irq: scope:[plex_irq] from
asm { sei } asm { sei }
to:plex_irq::@3 to:plex_irq::@3
plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7
[156] phi() [167] phi()
[157] call plexShowSprite [168] call plexShowSprite
to:plex_irq::plexFreeNextYpos1 to:plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3
[158] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) [169] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next)
to:plex_irq::@6 to:plex_irq::@6
plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1
[159] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3 [170] (byte~) plex_irq::$4 ← *((const nomodify byte*) RASTER) + (byte) 3
[160] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4 [171] if((volatile byte) plex_show_idx>=(const nomodify byte) PLEX_COUNT) goto plex_irq::@4
to:plex_irq::@7 to:plex_irq::@7
plex_irq::@7: scope:[plex_irq] from plex_irq::@6 plex_irq::@7: scope:[plex_irq] from plex_irq::@6
[161] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 [172] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3
to:plex_irq::@4 to:plex_irq::@4
plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7 plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7
[162] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1 [173] if((volatile byte) plex_show_idx<(const nomodify byte) PLEX_COUNT) goto plex_irq::@1
to:plex_irq::@5 to:plex_irq::@5
plex_irq::@5: scope:[plex_irq] from plex_irq::@4 plex_irq::@5: scope:[plex_irq] from plex_irq::@4
[163] *((const nomodify byte*) RASTER) ← (byte) $28 [174] *((const nomodify byte*) RASTER) ← (byte) $28
[164] (volatile bool) framedone ← true [175] (volatile bool) frame_done ← true
to:plex_irq::@2 to:plex_irq::@2
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5 plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
[165] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [176] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER
asm { cli } asm { cli }
to:plex_irq::@return to:plex_irq::@return
plex_irq::@return: scope:[plex_irq] from plex_irq::@2 plex_irq::@return: scope:[plex_irq] from plex_irq::@2
[167] return [178] return
to:@return to:@return
plex_irq::@1: scope:[plex_irq] from plex_irq::@4 plex_irq::@1: scope:[plex_irq] from plex_irq::@4
[168] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0 [179] *((const nomodify byte*) RASTER) ← (byte) plex_irq::plexFreeNextYpos1_return#0
to:plex_irq::@2 to:plex_irq::@2
(void()) plexShowSprite() (void()) plexShowSprite()
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
[169] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1 [180] (byte) plexShowSprite::plex_sprite_idx2#0 ← (volatile byte) plex_sprite_idx << (byte) 1
[170] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [181] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte*) PLEX_YPOS + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[171] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [182] *((const nomodify byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
to:plexShowSprite::plexFreeAdd1 to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
[172] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 [183] (byte~) plexShowSprite::plexFreeAdd1_$0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
[173] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0 [184] *((const byte*) PLEX_FREE_YPOS + (volatile byte) plex_free_next) ← (byte~) plexShowSprite::plexFreeAdd1_$0
[174] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1 [185] (byte~) plexShowSprite::plexFreeAdd1_$1 ← (volatile byte) plex_free_next + (byte) 1
[175] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7 [186] (byte~) plexShowSprite::plexFreeAdd1_$2 ← (byte~) plexShowSprite::plexFreeAdd1_$1 & (byte) 7
[176] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2 [187] (volatile byte) plex_free_next ← (byte~) plexShowSprite::plexFreeAdd1_$2
to:plexShowSprite::@5 to:plexShowSprite::@5
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
[177] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)) [188] *((const byte*) PLEX_SCREEN_PTR#0 + (volatile byte) plex_sprite_idx) ← *((const byte*) PLEX_PTR + *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx))
[178] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx) [189] (byte) plexShowSprite::xpos_idx#0 ← *((const byte*) PLEX_SORTED_IDX + (volatile byte) plex_show_idx)
[179] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [190] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
[180] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [191] (byte~) plexShowSprite::$2 ← < *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[181] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [192] *((const nomodify byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
[182] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11) [193] (byte~) plexShowSprite::$3 ← > *((const word*) PLEX_XPOS + (byte~) plexShowSprite::$11)
[183] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 [194] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
to:plexShowSprite::@3 to:plexShowSprite::@3
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
[184] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb [195] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (volatile byte) plex_sprite_msb
[185] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9 [196] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) & (byte~) plexShowSprite::$9
to:plexShowSprite::@2 to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
[186] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1 [197] (byte~) plexShowSprite::$5 ← (volatile byte) plex_sprite_idx + (byte) 1
[187] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 [198] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
[188] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6 [199] (volatile byte) plex_sprite_idx ← (byte~) plexShowSprite::$6
[189] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx [200] (volatile byte) plex_show_idx ← ++ (volatile byte) plex_show_idx
[190] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1 [201] (volatile byte) plex_sprite_msb ← (volatile byte) plex_sprite_msb << (byte) 1
[191] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return [202] if((volatile byte) plex_sprite_msb!=(byte) 0) goto plexShowSprite::@return
to:plexShowSprite::@4 to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
[192] (volatile byte) plex_sprite_msb ← (byte) 1 [203] (volatile byte) plex_sprite_msb ← (byte) 1
to:plexShowSprite::@return to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
[193] return [204] return
to:@return to:@return
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
[194] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb [205] *((const nomodify byte*) SPRITES_XMSB) ← *((const nomodify byte*) SPRITES_XMSB) | (volatile byte) plex_sprite_msb
to:plexShowSprite::@2 to:plexShowSprite::@2

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333
(const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f
(const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte*) D018 = (byte*) 53272
(const nomodify byte*) FONT = (byte*) 8192 (const byte*) FONT[(number) $800] = { fill( $800, 0) }
(const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte*) IRQ_ENABLE = (byte*) 53274
(const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte) IRQ_RASTER = (byte) 1
(const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify byte*) IRQ_STATUS = (byte*) 53273
@ -27,14 +27,19 @@
(const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1
(const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) RASTER = (byte*) 53266
(const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) SCREEN = (byte*) 1024
(const byte*) SCROLL_TEXT[] = (byte*) "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
(const nomodify byte*) SPRITES = (byte*) 12288 (const nomodify byte*) SPRITES = (byte*) 12288
(const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_COLS = (byte*) 53287
(const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269
(const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XMSB = (byte*) 53264
(const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248
(const nomodify byte*) SPRITES_YPOS = (byte*) 53249 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249
(byte) SPRITE_0
(const nomodify byte*) VIC_CONTROL = (byte*) 53265 (const nomodify byte*) VIC_CONTROL = (byte*) 53265
(const nomodify byte) WHITE = (byte) 1 (const nomodify byte) WHITE = (byte) 1
(const byte*) XMOVEMENT[(number) $200] = kickasm {{ .lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
}}
(const nomodify byte*) XMOVEMENT_HI = (const byte*) XMOVEMENT+(word) $100
(const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256))) (const byte*) YSIN[(number) $100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}} }}
(void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2)
@ -43,8 +48,8 @@
(byte~) font_2x2::$12 reg byte a 10001.0 (byte~) font_2x2::$12 reg byte a 10001.0
(byte~) font_2x2::$14 reg byte y 20002.0 (byte~) font_2x2::$14 reg byte y 20002.0
(byte~) font_2x2::$15 reg byte a 10001.0 (byte~) font_2x2::$15 reg byte a 10001.0
(word~) font_2x2::$5 zp[2]:15 200002.0 (word~) font_2x2::$5 zp[2]:20 200002.0
(word~) font_2x2::$7 zp[2]:15 200002.0 (word~) font_2x2::$7 zp[2]:20 200002.0
(label) font_2x2::@1 (label) font_2x2::@1
(label) font_2x2::@2 (label) font_2x2::@2
(label) font_2x2::@3 (label) font_2x2::@3
@ -59,31 +64,31 @@
(byte) font_2x2::b#1 reg byte y 150001.5 (byte) font_2x2::b#1 reg byte y 150001.5
(byte) font_2x2::b#2 reg byte y 20000.2 (byte) font_2x2::b#2 reg byte y 20000.2
(byte) font_2x2::c (byte) font_2x2::c
(byte) font_2x2::c#1 c zp[1]:10 1501.5 (byte) font_2x2::c#1 c zp[1]:9 1501.5
(byte) font_2x2::c#11 c zp[1]:10 58.88235294117647 (byte) font_2x2::c#11 c zp[1]:9 58.88235294117647
(byte*) font_2x2::font_2x2 (byte*) font_2x2::font_2x2
(byte*) font_2x2::font_original (byte*) font_2x2::font_original
(byte) font_2x2::glyph_bit (byte) font_2x2::glyph_bit
(byte) font_2x2::glyph_bit#0 reg byte x 50000.5 (byte) font_2x2::glyph_bit#0 reg byte x 50000.5
(byte) font_2x2::glyph_bits (byte) font_2x2::glyph_bits
(byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:24 20002.0 (byte) font_2x2::glyph_bits#0 glyph_bits zp[1]:22 20002.0
(byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:24 66667.33333333333 (byte) font_2x2::glyph_bits#1 glyph_bits zp[1]:22 66667.33333333333
(byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:24 34444.88888888889 (byte) font_2x2::glyph_bits#2 glyph_bits zp[1]:22 34444.88888888889
(word) font_2x2::glyph_bits_2x2 (word) font_2x2::glyph_bits_2x2
(word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:15 200002.0 (word) font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:20 200002.0
(word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:15 27500.5 (word) font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:20 27500.5
(word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:15 40000.4 (word) font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:20 40000.4
(byte) font_2x2::l (byte) font_2x2::l
(byte) font_2x2::l#1 l zp[1]:22 15001.5 (byte) font_2x2::l#1 l zp[1]:10 15001.5
(byte) font_2x2::l#2 l zp[1]:22 1111.2222222222222 (byte) font_2x2::l#2 l zp[1]:10 1111.2222222222222
(byte) font_2x2::l2 (byte) font_2x2::l2
(byte) font_2x2::l2#1 l2 zp[1]:23 15001.5 (byte) font_2x2::l2#1 l2 zp[1]:23 15001.5
(byte) font_2x2::l2#8 l2 zp[1]:23 2727.5454545454545 (byte) font_2x2::l2#8 l2 zp[1]:23 2727.5454545454545
(byte) font_2x2::l2#9 l2 zp[1]:23 6667.333333333333 (byte) font_2x2::l2#9 l2 zp[1]:23 6667.333333333333
(byte*) font_2x2::next_2x2 (byte*) font_2x2::next_2x2
(byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:6 500.5 (byte*) font_2x2::next_2x2#1 next_2x2 zp[2]:5 500.5
(byte*) font_2x2::next_2x2_left (byte*) font_2x2::next_2x2_left
(byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:6 750.1875 (byte*) font_2x2::next_2x2_left#0 next_2x2_left zp[2]:5 750.1875
(byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:11 10001.0 (byte*) font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:11 10001.0
(byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:11 2002.0 (byte*) font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:11 2002.0
(byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:11 1708.5416666666665 (byte*) font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:11 1708.5416666666665
@ -94,10 +99,10 @@
(byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:13 1708.5416666666665 (byte*) font_2x2::next_2x2_right#7 next_2x2_right zp[2]:13 1708.5416666666665
(byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:13 10001.0 (byte*) font_2x2::next_2x2_right#8 next_2x2_right zp[2]:13 10001.0
(byte*) font_2x2::next_original (byte*) font_2x2::next_original
(byte*) font_2x2::next_original#1 next_original zp[2]:8 667.3333333333334 (byte*) font_2x2::next_original#1 next_original zp[2]:7 667.3333333333334
(byte*) font_2x2::next_original#4 next_original zp[2]:8 363.7272727272727 (byte*) font_2x2::next_original#4 next_original zp[2]:7 363.7272727272727
(void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars) (void()) font_2x2_to_sprites((byte*) font_2x2_to_sprites::font_2x2 , (byte*) font_2x2_to_sprites::sprites , (byte) font_2x2_to_sprites::num_chars)
(byte~) font_2x2_to_sprites::$3 zp[1]:24 10001.0 (byte~) font_2x2_to_sprites::$3 zp[1]:23 10001.0
(label) font_2x2_to_sprites::@1 (label) font_2x2_to_sprites::@1
(label) font_2x2_to_sprites::@2 (label) font_2x2_to_sprites::@2
(label) font_2x2_to_sprites::@3 (label) font_2x2_to_sprites::@3
@ -108,11 +113,11 @@
(label) font_2x2_to_sprites::@8 (label) font_2x2_to_sprites::@8
(label) font_2x2_to_sprites::@return (label) font_2x2_to_sprites::@return
(byte) font_2x2_to_sprites::c (byte) font_2x2_to_sprites::c
(byte) font_2x2_to_sprites::c#1 c zp[1]:5 2002.0 (byte) font_2x2_to_sprites::c#1 c zp[1]:9 2002.0
(byte) font_2x2_to_sprites::c#2 c zp[1]:5 136.5 (byte) font_2x2_to_sprites::c#2 c zp[1]:9 136.5
(byte*) font_2x2_to_sprites::char_current (byte*) font_2x2_to_sprites::char_current
(byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:6 667.3333333333334 (byte*) font_2x2_to_sprites::char_current#1 char_current zp[2]:5 667.3333333333334
(byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:6 1200.3 (byte*) font_2x2_to_sprites::char_current#2 char_current zp[2]:5 1200.3
(byte*) font_2x2_to_sprites::char_left (byte*) font_2x2_to_sprites::char_left
(byte*) font_2x2_to_sprites::char_left#1 char_left zp[2]:11 10001.0 (byte*) font_2x2_to_sprites::char_left#1 char_left zp[2]:11 10001.0
(byte*) font_2x2_to_sprites::char_left#3 char_left zp[2]:11 2818.5454545454545 (byte*) font_2x2_to_sprites::char_left#3 char_left zp[2]:11 2818.5454545454545
@ -130,17 +135,19 @@
(byte) font_2x2_to_sprites::num_chars (byte) font_2x2_to_sprites::num_chars
(const byte) font_2x2_to_sprites::num_chars#0 num_chars = (byte) $40 (const byte) font_2x2_to_sprites::num_chars#0 num_chars = (byte) $40
(byte*) font_2x2_to_sprites::sprite (byte*) font_2x2_to_sprites::sprite
(byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:8 1001.0 (byte*) font_2x2_to_sprites::sprite#1 sprite zp[2]:7 1001.0
(byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:8 1524.047619047619 (byte*) font_2x2_to_sprites::sprite#4 sprite zp[2]:7 1524.047619047619
(byte) font_2x2_to_sprites::sprite_idx (byte) font_2x2_to_sprites::sprite_idx
(byte) font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:10 15001.5 (byte) font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:10 15001.5
(byte) font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5 (byte) font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5
(byte) font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:10 2222.4444444444443 (byte) font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:10 2222.4444444444443
(byte) font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:10 10001.0 (byte) font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:10 10001.0
(byte*) font_2x2_to_sprites::sprites (byte*) font_2x2_to_sprites::sprites
(volatile bool) framedone loadstore zp[1]:21 27.65 (volatile bool) frame_done loadstore zp[1]:19 25.72093023255814
(void()) main() (void()) main()
(byte~) main::$12 reg byte a 202.0 (byte~) main::$12 reg byte y 101.0
(word~) main::$13 zp[2]:20 202.0
(byte~) main::$7 reg byte a 202.0
(label) main::@1 (label) main::@1
(label) main::@10 (label) main::@10
(label) main::@11 (label) main::@11
@ -155,26 +162,19 @@
(label) main::@8 (label) main::@8
(label) main::@9 (label) main::@9
(byte) main::s (byte) main::s
(byte) main::s#1 reg byte x 151.5 (byte) main::s#1 s zp[1]:2 202.0
(byte) main::s#2 reg byte x 67.33333333333333 (byte) main::s#2 s zp[1]:2 75.75
(byte) main::s1 (byte) main::s1
(byte) main::s1#1 reg byte x 151.5 (byte) main::s1#1 reg byte x 151.5
(byte) main::s1#2 reg byte x 151.5 (byte) main::s1#2 reg byte x 151.5
(byte) main::sprite
(byte) main::sprite#1 sprite zp[1]:4 33.666666666666664
(byte) main::sprite#2 sprite zp[1]:4 151.5
(label) main::toD0181 (label) main::toD0181
(byte*) main::toD0181_gfx (byte*) main::toD0181_gfx
(byte) main::toD0181_return (byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4&(byte) $f (const byte) main::toD0181_return#0 toD0181_return = >(word)(const nomodify byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const nomodify byte*) CHARSET_DEFAULT/(byte) 4&(byte) $f
(byte*) main::toD0181_screen (byte*) main::toD0181_screen
(label) main::toSpritePtr1 (byte) main::x
(byte) main::toSpritePtr1_return (byte) main::x#1 reg byte x 101.0
(const byte) main::toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40 (byte) main::x#2 reg byte x 57.714285714285715
(byte*) main::toSpritePtr1_sprite
(word) main::xp
(word) main::xp#1 xp zp[2]:2 67.33333333333333
(word) main::xp#2 xp zp[2]:2 60.599999999999994
(void()) plexInit((byte*) plexInit::screen) (void()) plexInit((byte*) plexInit::screen)
(label) plexInit::@1 (label) plexInit::@1
(label) plexInit::@return (label) plexInit::@return
@ -204,21 +204,10 @@
(byte) plexShowSprite::plexFreeAdd1_ypos (byte) plexShowSprite::plexFreeAdd1_ypos
(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5 (byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5
(byte) plexShowSprite::plex_sprite_idx2 (byte) plexShowSprite::plex_sprite_idx2
(byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:26 25.25 (byte) plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25.25
(byte) plexShowSprite::xpos_idx (byte) plexShowSprite::xpos_idx
(byte) plexShowSprite::xpos_idx#0 reg byte a 202.0 (byte) plexShowSprite::xpos_idx#0 reg byte a 202.0
(byte) plexShowSprite::ypos (byte) plexShowSprite::ypos
(void()) plexSine()
(label) plexSine::@1
(label) plexSine::@2
(label) plexSine::@return
(byte) plexSine::sy
(byte) plexSine::sy#1 reg byte y 150001.5
(byte) plexSine::sy#2 reg byte y 100001.0
(byte) plexSine::y_idx
(byte) plexSine::y_idx#0 reg byte x 2002.0
(byte) plexSine::y_idx#1 reg byte x 66667.33333333333
(byte) plexSine::y_idx#2 reg byte x 150502.0
(void()) plexSort() (void()) plexSort()
(label) plexSort::@1 (label) plexSort::@1
(label) plexSort::@2 (label) plexSort::@2
@ -229,12 +218,12 @@
(label) plexSort::@7 (label) plexSort::@7
(label) plexSort::@return (label) plexSort::@return
(byte) plexSort::m (byte) plexSort::m
(byte) plexSort::m#1 m zp[1]:5 150001.5 (byte) plexSort::m#1 m zp[1]:9 150001.5
(byte) plexSort::m#2 m zp[1]:5 41667.08333333333 (byte) plexSort::m#2 m zp[1]:9 41667.08333333333
(byte) plexSort::nxt_idx (byte) plexSort::nxt_idx
(byte) plexSort::nxt_idx#0 nxt_idx zp[1]:22 30000.300000000003 (byte) plexSort::nxt_idx#0 nxt_idx zp[1]:23 30000.300000000003
(byte) plexSort::nxt_y (byte) plexSort::nxt_y
(byte) plexSort::nxt_y#0 nxt_y zp[1]:23 150000.375 (byte) plexSort::nxt_y#0 nxt_y zp[1]:22 150000.375
(label) plexSort::plexFreePrepare1 (label) plexSort::plexFreePrepare1
(label) plexSort::plexFreePrepare1_@1 (label) plexSort::plexFreePrepare1_@1
(label) plexSort::plexFreePrepare1_@2 (label) plexSort::plexFreePrepare1_@2
@ -246,9 +235,9 @@
(byte) plexSort::s#2 reg byte x 200002.0 (byte) plexSort::s#2 reg byte x 200002.0
(byte) plexSort::s#3 reg byte x 2050002.5 (byte) plexSort::s#3 reg byte x 2050002.5
(byte) plexSort::s#6 reg byte x 200002.0 (byte) plexSort::s#6 reg byte x 200002.0
(volatile byte) plex_free_next loadstore zp[1]:20 42.48387096774193 (volatile byte) plex_free_next loadstore zp[1]:18 42.48387096774193
interrupt(KERNEL_MIN)(void()) plex_irq() interrupt(KERNEL_MIN)(void()) plex_irq()
(byte~) plex_irq::$4 zp[1]:25 11.0 (byte~) plex_irq::$4 zp[1]:24 11.0
(label) plex_irq::@1 (label) plex_irq::@1
(label) plex_irq::@2 (label) plex_irq::@2
(label) plex_irq::@3 (label) plex_irq::@3
@ -261,42 +250,72 @@ interrupt(KERNEL_MIN)(void()) plex_irq()
(byte) plex_irq::plexFreeNextYpos1_return (byte) plex_irq::plexFreeNextYpos1_return
(byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001 (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001
(byte) plex_irq::rasterY (byte) plex_irq::rasterY
(volatile byte) plex_show_idx loadstore zp[1]:17 46.0909090909091 (void()) plex_move()
(volatile byte) plex_sprite_idx loadstore zp[1]:18 45.387096774193544 (byte~) plex_move::$4 reg byte a 200002.0
(volatile byte) plex_sprite_msb loadstore zp[1]:19 48.757575757575765 (byte~) plex_move::$6 reg byte a 200002.0
(byte~) plex_move::$7 reg byte a 200002.0
(label) plex_move::@1
(label) plex_move::@2
(label) plex_move::@3
(label) plex_move::@4
(label) plex_move::@5
(label) plex_move::@6
(label) plex_move::@return
(byte) plex_move::s
(byte) plex_move::s#1 s zp[1]:9 150001.5
(byte) plex_move::s#2 s zp[1]:9 42857.57142857143
(byte) plex_move::y_idx
(byte) plex_move::y_idx#0 reg byte x 2002.0
(byte) plex_move::y_idx#1 reg byte x 14285.857142857143
(byte) plex_move::y_idx#2 reg byte x 150502.0
(volatile byte) plex_show_idx loadstore zp[1]:15 46.0909090909091
(volatile byte) plex_sprite_idx loadstore zp[1]:16 45.387096774193544
(volatile byte) plex_sprite_msb loadstore zp[1]:17 48.757575757575765
(byte*) scroll_text_next
(byte*) scroll_text_next#11 scroll_text_next zp[2]:3 44556.11111111111
(byte*) scroll_text_next#12 scroll_text_next zp[2]:3 100001.0
(byte*) scroll_text_next#13 scroll_text_next zp[2]:3 14290.666666666668
(byte*) scroll_text_next#25 scroll_text_next zp[2]:3 551.0
(byte*) scroll_text_next#4 scroll_text_next zp[2]:3 200002.0
(byte) sin_idx (byte) sin_idx
(byte) sin_idx#10 sin_idx zp[1]:4 300.42857142857144 (byte) sin_idx#10 sin_idx zp[1]:2 116.83333333333334
(byte) sin_idx#12 sin_idx zp[1]:4 58.0 (byte) sin_idx#12 sin_idx zp[1]:2 61.22222222222223
(label) toSpritePtr1
(byte) toSpritePtr1_return
(const byte) toSpritePtr1_return#0 toSpritePtr1_return = (byte)(word)(const nomodify byte*) SPRITES/(byte) $40
(byte*) toSpritePtr1_sprite
reg byte x [ main::s#2 main::s#1 ] reg byte x [ main::x#2 main::x#1 ]
zp[2]:2 [ main::xp#2 main::xp#1 ]
reg byte x [ main::s1#2 main::s1#1 ] reg byte x [ main::s1#2 main::s1#1 ]
reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
zp[1]:4 [ sin_idx#10 sin_idx#12 main::sprite#2 main::sprite#1 ] zp[1]:2 [ sin_idx#10 sin_idx#12 main::s#2 main::s#1 ]
reg byte x [ plexSine::y_idx#2 plexSine::y_idx#0 plexSine::y_idx#1 ] reg byte x [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
reg byte y [ plexSine::sy#2 plexSine::sy#1 ] zp[2]:3 [ scroll_text_next#12 scroll_text_next#11 scroll_text_next#25 scroll_text_next#13 scroll_text_next#4 ]
reg byte x [ plexInit::i#2 plexInit::i#1 ] reg byte x [ plexInit::i#2 plexInit::i#1 ]
zp[1]:5 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plexSort::m#2 plexSort::m#1 ]
reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
zp[2]:6 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
zp[2]:8 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
zp[1]:10 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 plex_move::s#2 plex_move::s#1 plexSort::m#2 plexSort::m#1 ]
zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ]
zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ]
zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] zp[2]:13 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ]
zp[2]:15 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
reg byte y [ font_2x2::b#2 font_2x2::b#1 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ]
reg byte x [ font_2x2::glyph_bit#0 ] reg byte x [ font_2x2::glyph_bit#0 ]
zp[1]:17 [ plex_show_idx ] zp[1]:15 [ plex_show_idx ]
zp[1]:18 [ plex_sprite_idx ] zp[1]:16 [ plex_sprite_idx ]
zp[1]:19 [ plex_sprite_msb ] zp[1]:17 [ plex_sprite_msb ]
zp[1]:20 [ plex_free_next ] zp[1]:18 [ plex_free_next ]
zp[1]:21 [ framedone ] zp[1]:19 [ frame_done ]
reg byte a [ main::$12 ] reg byte a [ main::$7 ]
zp[1]:22 [ plexSort::nxt_idx#0 font_2x2::l#2 font_2x2::l#1 ] reg byte y [ main::$12 ]
zp[1]:23 [ plexSort::nxt_y#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:20 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
zp[1]:22 [ plexSort::nxt_y#0 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
reg byte x [ plexSort::s#2 ] reg byte x [ plexSort::s#2 ]
zp[1]:24 [ font_2x2_to_sprites::$3 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] reg byte a [ plex_move::$6 ]
reg byte a [ plex_move::$7 ]
reg byte a [ plex_move::$4 ]
zp[1]:23 [ font_2x2_to_sprites::$3 plexSort::nxt_idx#0 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ]
reg byte a [ font_2x2::$1 ] reg byte a [ font_2x2::$1 ]
reg byte a [ font_2x2::$12 ] reg byte a [ font_2x2::$12 ]
@ -304,8 +323,8 @@ reg byte y [ font_2x2::$11 ]
reg byte a [ font_2x2::$15 ] reg byte a [ font_2x2::$15 ]
reg byte y [ font_2x2::$14 ] reg byte y [ font_2x2::$14 ]
reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ]
zp[1]:25 [ plex_irq::$4 ] zp[1]:24 [ plex_irq::$4 ]
zp[1]:26 [ plexShowSprite::plex_sprite_idx2#0 ] zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ]