1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-03 07:29:37 +00:00
kickc/src/test/ref/examples/mega65/raster65.log
2024-01-02 19:21:16 +01:00

4167 lines
203 KiB
Plaintext

Resolved forward reference SCROLL_TEXT to SCROLL_TEXT
Resolved forward reference MEGA_LOGO to MEGA_LOGO
Resolved forward reference MEGA_LOGO to MEGA_LOGO
Resolved forward reference PAL_RED to PAL_RED
Resolved forward reference PAL_GREEN to PAL_GREEN
Resolved forward reference PAL_BLUE to PAL_BLUE
Resolved forward reference irq to __interrupt(hardware_clobber) void irq()
Resolved forward reference GREET_COUNT to GREET_COUNT
Resolved forward reference PAL_GREEN to PAL_GREEN
Resolved forward reference GREETING to GREETING
Resolved forward reference SCROLL_TEXT to SCROLL_TEXT
Fixing struct type size struct F018_DMAGIC to 17
Fixing struct type SIZE_OF struct F018_DMAGIC to 17
Fixing struct type SIZE_OF struct F018_DMAGIC to 17
Setting inferred volatile on symbol affected by address-of: memoryRemap::aVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap::xVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap::yVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap::zVal in asm { ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::lMb in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::uMb in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::aVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::xVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::yVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Setting inferred volatile on symbol affected by address-of: memoryRemap256M::zVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom }
Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx)
Inlined call call __init
Eliminating unused variable with no statement memset::$2
Eliminating unused variable with no statement irq::$1
Eliminating unused variable with no statement irq::$17
Eliminating unused variable with no statement irq::$20
Calling convention STACK_CALL adding prepare/execute/finalize for call *songInit
Calling convention STACK_CALL adding prepare/execute/finalize for call *songPlay
CONTROL FLOW GRAPH SSA
void * memset(void *str , char c , unsigned int num)
memset: scope:[memset] from main::@1
memset::c#4 = phi( main::@1/memset::c#0 )
memset::str#3 = phi( main::@1/memset::str#0 )
memset::num#1 = phi( main::@1/memset::num#0 )
memset::$0 = memset::num#1 > 0
memset::$1 = ! memset::$0
if(memset::$1) goto memset::@1
to:memset::@2
memset::@1: scope:[memset] from memset memset::@3
memset::str#1 = phi( memset/memset::str#3, memset::@3/memset::str#4 )
memset::return#0 = memset::str#1
to:memset::@return
memset::@2: scope:[memset] from memset
memset::c#3 = phi( memset/memset::c#4 )
memset::num#2 = phi( memset/memset::num#1 )
memset::str#2 = phi( memset/memset::str#3 )
memset::$4 = (char *)memset::str#2
memset::end#0 = memset::$4 + memset::num#2
memset::dst#0 = ((char *)) memset::str#2
to:memset::@3
memset::@3: scope:[memset] from memset::@2 memset::@4
memset::c#2 = phi( memset::@2/memset::c#3, memset::@4/memset::c#1 )
memset::str#4 = phi( memset::@2/memset::str#2, memset::@4/memset::str#5 )
memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 )
memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 )
memset::$3 = memset::dst#2 != memset::end#1
if(memset::$3) goto memset::@4
to:memset::@1
memset::@4: scope:[memset] from memset::@3
memset::str#5 = phi( memset::@3/memset::str#4 )
memset::end#2 = phi( memset::@3/memset::end#1 )
memset::dst#3 = phi( memset::@3/memset::dst#2 )
memset::c#1 = phi( memset::@3/memset::c#2 )
*memset::dst#3 = memset::c#1
memset::dst#1 = ++ memset::dst#3
to:memset::@3
memset::@return: scope:[memset] from memset::@1
memset::return#3 = phi( memset::@1/memset::return#0 )
memset::return#1 = memset::return#3
return
to:@return
void main()
main: scope:[main] from __start::@1
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
asm { lda#0 }
callexecute *songInit
to:main::@1
main::@1: scope:[main] from main
memset::str#0 = (void *)SCREEN
memset::c#0 = ' '
memset::num#0 = $28*$19
call memset
memset::return#2 = memset::return#1
to:main::@11
main::@11: scope:[main] from main::@1
main::i1#0 = 0
to:main::@2
main::@2: scope:[main] from main::@11 main::@3
main::i1#2 = phi( main::@11/main::i1#0, main::@3/main::i1#1 )
main::$2 = sizeof MEGA_LOGO
main::$3 = main::i1#2 < main::$2
if(main::$3) goto main::@3
to:main::@4
main::@3: scope:[main] from main::@2
main::i1#3 = phi( main::@2/main::i1#2 )
(SCREEN+LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
main::i1#1 = ++ main::i1#3
to:main::@2
main::@4: scope:[main] from main::@2
main::i2#0 = 0
to:main::@5
main::@5: scope:[main] from main::@4 main::@6
main::i2#2 = phi( main::@4/main::i2#0, main::@6/main::i2#1 )
main::$4 = main::i2#2 < $28
if(main::$4) goto main::@6
to:main::@7
main::@6: scope:[main] from main::@5
main::i2#3 = phi( main::@5/main::i2#2 )
(SCREEN+GREET_ROW*$28)[main::i2#3] = '*'
main::i2#1 = ++ main::i2#3
to:main::@5
main::@7: scope:[main] from main::@5
main::i#0 = 0
to:main::@8
main::@8: scope:[main] from main::@7 main::@8
main::i#2 = phi( main::@7/main::i#0, main::@8/main::i#1 )
PALETTE_RED[main::i#2] = PAL_RED[main::i#2]
PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2]
PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2]
main::i#1 = ++ main::i#2
main::$5 = main::i#1 != 0
if(main::$5) goto main::@8
to:main::@9
main::@9: scope:[main] from main::@8
asm { sei }
*((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER
*HARDWARE_IRQ = &irq
*PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
*PROCPORT = PROCPORT_RAM_IO
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
asm { cli }
to:main::@10
main::@10: scope:[main] from main::@10 main::@9
to:main::@10
main::@return: scope:[main] from
return
to:@return
__interrupt(hardware_clobber) void irq()
irq: scope:[irq] from
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
sin_idx = ++ sin_idx
irq::wobble_idx#0 = sin_idx
irq::line#0 = 0
to:irq::@2
irq::@2: scope:[irq] from irq irq::@10
irq::wobble_idx#4 = phi( irq/irq::wobble_idx#0, irq::@10/irq::wobble_idx#5 )
irq::line#2 = phi( irq/irq::line#0, irq::@10/irq::line#1 )
irq::$4 = irq::line#2 != RASTER_LINES
if(irq::$4) goto irq::@3
to:irq::@4
irq::@3: scope:[irq] from irq::@2
irq::wobble_idx#3 = phi( irq::@2/irq::wobble_idx#4 )
irq::line#3 = phi( irq::@2/irq::line#2 )
irq::col#0 = rasters[irq::line#3]
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0
*((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0
irq::$5 = irq::line#3 < SCROLL_Y
if(irq::$5) goto irq::@5
to:irq::@11
irq::@4: scope:[irq] from irq::@2
callexecute *songPlay
to:irq::@1
irq::@5: scope:[irq] from irq::@3
irq::line#13 = phi( irq::@3/irq::line#3 )
irq::wobble_idx#2 = phi( irq::@3/irq::wobble_idx#3 )
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#2]
irq::wobble_idx#1 = ++ irq::wobble_idx#2
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
to:irq::@8
irq::@11: scope:[irq] from irq::@3
irq::wobble_idx#14 = phi( irq::@3/irq::wobble_idx#3 )
irq::line#4 = phi( irq::@3/irq::line#3 )
irq::$6 = irq::line#4 == SCROLL_Y
if(irq::$6) goto irq::@6
to:irq::@12
irq::@6: scope:[irq] from irq::@11
irq::wobble_idx#12 = phi( irq::@11/irq::wobble_idx#14 )
irq::line#14 = phi( irq::@11/irq::line#4 )
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft
to:irq::@8
irq::@12: scope:[irq] from irq::@11
irq::wobble_idx#15 = phi( irq::@11/irq::wobble_idx#14 )
irq::line#5 = phi( irq::@11/irq::line#4 )
irq::$7 = irq::line#5 == SCROLL_Y+SCROLL_BLACKBARS
if(irq::$7) goto irq::@7
to:irq::@13
irq::@7: scope:[irq] from irq::@12
irq::wobble_idx#13 = phi( irq::@12/irq::wobble_idx#15 )
irq::line#15 = phi( irq::@12/irq::line#5 )
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
to:irq::@8
irq::@13: scope:[irq] from irq::@12
irq::wobble_idx#8 = phi( irq::@12/irq::wobble_idx#15 )
irq::line#6 = phi( irq::@12/irq::line#5 )
irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
irq::$9 = ! irq::$8
if(irq::$9) goto irq::@8
to:irq::@14
irq::@14: scope:[irq] from irq::@13
irq::wobble_idx#9 = phi( irq::@13/irq::wobble_idx#8 )
irq::line#10 = phi( irq::@13/irq::line#6 )
irq::zoomval#0 = SINE[greet_zoomx]
greet_zoomx = ++ greet_zoomx
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0
irq::$10 = irq::zoomval#0 + 1
*((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10
irq::$11 = greet_zoomx == 0
irq::$12 = ! irq::$11
if(irq::$12) goto irq::@8
to:irq::@15
irq::@15: scope:[irq] from irq::@14
irq::wobble_idx#10 = phi( irq::@14/irq::wobble_idx#9 )
irq::line#11 = phi( irq::@14/irq::line#10 )
greet_idx = ++ greet_idx
irq::$13 = greet_idx == GREET_COUNT
irq::$14 = ! irq::$13
if(irq::$14) goto irq::@8
to:irq::@16
irq::@16: scope:[irq] from irq::@15
irq::wobble_idx#11 = phi( irq::@15/irq::wobble_idx#10 )
irq::line#12 = phi( irq::@15/irq::line#11 )
greet_idx = 0
to:irq::@8
irq::@8: scope:[irq] from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7
irq::wobble_idx#7 = phi( irq::@13/irq::wobble_idx#8, irq::@14/irq::wobble_idx#9, irq::@15/irq::wobble_idx#10, irq::@16/irq::wobble_idx#11, irq::@5/irq::wobble_idx#1, irq::@6/irq::wobble_idx#12, irq::@7/irq::wobble_idx#13 )
irq::line#9 = phi( irq::@13/irq::line#6, irq::@14/irq::line#10, irq::@15/irq::line#11, irq::@16/irq::line#12, irq::@5/irq::line#13, irq::@6/irq::line#14, irq::@7/irq::line#15 )
irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
to:irq::@9
irq::@9: scope:[irq] from irq::@8 irq::@9
irq::wobble_idx#6 = phi( irq::@8/irq::wobble_idx#7, irq::@9/irq::wobble_idx#6 )
irq::line#8 = phi( irq::@8/irq::line#9, irq::@9/irq::line#8 )
irq::raster#1 = phi( irq::@8/irq::raster#0, irq::@9/irq::raster#1 )
irq::$15 = irq::raster#1 == *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
if(irq::$15) goto irq::@9
to:irq::@10
irq::@10: scope:[irq] from irq::@9
irq::wobble_idx#5 = phi( irq::@9/irq::wobble_idx#6 )
irq::line#7 = phi( irq::@9/irq::line#8 )
irq::line#1 = ++ irq::line#7
to:irq::@2
irq::@1: scope:[irq] from irq::@4
irq::sin_col#0 = sin_idx
irq::i#0 = 0
to:irq::@17
irq::@17: scope:[irq] from irq::@1 irq::@18
irq::sin_col#3 = phi( irq::@1/irq::sin_col#0, irq::@18/irq::sin_col#1 )
irq::i#2 = phi( irq::@1/irq::i#0, irq::@18/irq::i#1 )
irq::$16 = irq::i#2 < $28
if(irq::$16) goto irq::@18
to:irq::@19
irq::@18: scope:[irq] from irq::@17
irq::i#3 = phi( irq::@17/irq::i#2 )
irq::sin_col#2 = phi( irq::@17/irq::sin_col#3 )
irq::col1#0 = SINE[irq::sin_col#2] / 4
(COLORRAM+GREET_ROW*$28)[irq::i#3] = irq::col1#0
irq::col1#1 = irq::col1#0 / 2
(COLORRAM+LOGO_ROW*$28+0*$28-1)[irq::i#3] = irq::col1#1
(COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#3] = irq::col1#1
(COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#3] = irq::col1#1
(COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#3] = irq::col1#1
(COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#3] = irq::col1#1
(COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#3] = irq::col1#1
(COLORRAM+SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
irq::sin_col#1 = ++ irq::sin_col#2
irq::i#1 = ++ irq::i#3
to:irq::@17
irq::@19: scope:[irq] from irq::@17
irq::l#0 = 0
to:irq::@20
irq::@20: scope:[irq] from irq::@19 irq::@21
irq::l#2 = phi( irq::@19/irq::l#0, irq::@21/irq::l#1 )
irq::$18 = irq::l#2 != RASTER_LINES
if(irq::$18) goto irq::@21
to:irq::@22
irq::@21: scope:[irq] from irq::@20
irq::l#3 = phi( irq::@20/irq::l#2 )
rasters[irq::l#3] = 0
irq::l#1 = ++ irq::l#3
to:irq::@20
irq::@22: scope:[irq] from irq::@20
irq::sin_bar#0 = sin_idx
irq::barcnt#0 = 0
to:irq::@23
irq::@23: scope:[irq] from irq::@22 irq::@31
irq::sin_bar#4 = phi( irq::@22/irq::sin_bar#0, irq::@31/irq::sin_bar#1 )
irq::barcnt#2 = phi( irq::@22/irq::barcnt#0, irq::@31/irq::barcnt#1 )
irq::$19 = irq::barcnt#2 < $10
if(irq::$19) goto irq::@24
to:irq::@25
irq::@24: scope:[irq] from irq::@23
irq::barcnt#3 = phi( irq::@23/irq::barcnt#2 )
irq::sin_bar#2 = phi( irq::@23/irq::sin_bar#4 )
irq::idx#0 = SINE[irq::sin_bar#2]
irq::barcol#0 = irq::barcnt#3 * $10
irq::i1#0 = 0
to:irq::@26
irq::@25: scope:[irq] from irq::@23
irq::i3#0 = 0
to:irq::@32
irq::@26: scope:[irq] from irq::@24 irq::@27
irq::barcnt#8 = phi( irq::@24/irq::barcnt#3, irq::@27/irq::barcnt#9 )
irq::sin_bar#8 = phi( irq::@24/irq::sin_bar#2, irq::@27/irq::sin_bar#9 )
irq::idx#5 = phi( irq::@24/irq::idx#0, irq::@27/irq::idx#1 )
irq::barcol#5 = phi( irq::@24/irq::barcol#0, irq::@27/irq::barcol#1 )
irq::i1#2 = phi( irq::@24/irq::i1#0, irq::@27/irq::i1#1 )
irq::$21 = irq::i1#2 < $10
if(irq::$21) goto irq::@27
to:irq::@28
irq::@27: scope:[irq] from irq::@26
irq::barcnt#9 = phi( irq::@26/irq::barcnt#8 )
irq::sin_bar#9 = phi( irq::@26/irq::sin_bar#8 )
irq::i1#3 = phi( irq::@26/irq::i1#2 )
irq::idx#3 = phi( irq::@26/irq::idx#5 )
irq::barcol#3 = phi( irq::@26/irq::barcol#5 )
rasters[irq::idx#3] = irq::barcol#3
irq::idx#1 = ++ irq::idx#3
irq::barcol#1 = ++ irq::barcol#3
irq::i1#1 = ++ irq::i1#3
to:irq::@26
irq::@28: scope:[irq] from irq::@26
irq::barcnt#6 = phi( irq::@26/irq::barcnt#8 )
irq::sin_bar#6 = phi( irq::@26/irq::sin_bar#8 )
irq::idx#7 = phi( irq::@26/irq::idx#5 )
irq::barcol#7 = phi( irq::@26/irq::barcol#5 )
irq::i2#0 = 0
to:irq::@29
irq::@29: scope:[irq] from irq::@28 irq::@30
irq::barcnt#5 = phi( irq::@28/irq::barcnt#6, irq::@30/irq::barcnt#7 )
irq::sin_bar#5 = phi( irq::@28/irq::sin_bar#6, irq::@30/irq::sin_bar#7 )
irq::idx#6 = phi( irq::@28/irq::idx#7, irq::@30/irq::idx#2 )
irq::barcol#6 = phi( irq::@28/irq::barcol#7, irq::@30/irq::barcol#2 )
irq::i2#2 = phi( irq::@28/irq::i2#0, irq::@30/irq::i2#1 )
irq::$22 = irq::i2#2 < $f
if(irq::$22) goto irq::@30
to:irq::@31
irq::@30: scope:[irq] from irq::@29
irq::barcnt#7 = phi( irq::@29/irq::barcnt#5 )
irq::sin_bar#7 = phi( irq::@29/irq::sin_bar#5 )
irq::i2#3 = phi( irq::@29/irq::i2#2 )
irq::idx#4 = phi( irq::@29/irq::idx#6 )
irq::barcol#4 = phi( irq::@29/irq::barcol#6 )
irq::barcol#2 = -- irq::barcol#4
rasters[irq::idx#4] = irq::barcol#2
irq::idx#2 = ++ irq::idx#4
irq::i2#1 = ++ irq::i2#3
to:irq::@29
irq::@31: scope:[irq] from irq::@29
irq::barcnt#4 = phi( irq::@29/irq::barcnt#5 )
irq::sin_bar#3 = phi( irq::@29/irq::sin_bar#5 )
irq::sin_bar#1 = irq::sin_bar#3 + $a
irq::barcnt#1 = ++ irq::barcnt#4
to:irq::@23
irq::@32: scope:[irq] from irq::@25 irq::@33
irq::i3#2 = phi( irq::@25/irq::i3#0, irq::@33/irq::i3#1 )
irq::$23 = irq::i3#2 < $13
if(irq::$23) goto irq::@33
to:irq::@34
irq::@33: scope:[irq] from irq::@32
irq::i3#3 = phi( irq::@32/irq::i3#2 )
irq::$24 = SCROLL_Y + irq::i3#3
irq::$25 = SCROLL_Y + irq::i3#3
irq::$26 = rasters[irq::$25] / 2
irq::$27 = irq::$26 & 7
rasters[irq::$24] = irq::$27
irq::i3#1 = ++ irq::i3#3
to:irq::@32
irq::@34: scope:[irq] from irq::@32
irq::greet_offset#0 = greet_idx * $10
irq::i4#0 = 0
to:irq::@35
irq::@35: scope:[irq] from irq::@34 irq::@36
irq::greet_offset#3 = phi( irq::@34/irq::greet_offset#0, irq::@36/irq::greet_offset#1 )
irq::i4#2 = phi( irq::@34/irq::i4#0, irq::@36/irq::i4#1 )
irq::$28 = irq::i4#2 < $10
if(irq::$28) goto irq::@36
to:irq::@37
irq::@36: scope:[irq] from irq::@35
irq::i4#3 = phi( irq::@35/irq::i4#2 )
irq::greet_offset#2 = phi( irq::@35/irq::greet_offset#3 )
irq::$29 = GREETING[irq::greet_offset#2] & $bf
(SCREEN+GREET_ROW*$28+$d)[irq::i4#3] = irq::$29
irq::greet_offset#1 = ++ irq::greet_offset#2
irq::i4#1 = ++ irq::i4#3
to:irq::@35
irq::@37: scope:[irq] from irq::@35
scroll_soft = -- scroll_soft
irq::$2 = scroll_soft == $ff
irq::$3 = ! irq::$2
if(irq::$3) goto irq::@return
to:irq::@38
irq::@38: scope:[irq] from irq::@37
scroll_soft = 7
irq::i5#0 = 0
to:irq::@39
irq::@39: scope:[irq] from irq::@38 irq::@40
irq::i5#2 = phi( irq::@38/irq::i5#0, irq::@40/irq::i5#1 )
irq::$30 = irq::i5#2 < $27
if(irq::$30) goto irq::@40
to:irq::@41
irq::@40: scope:[irq] from irq::@39
irq::i5#3 = phi( irq::@39/irq::i5#2 )
(SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+1)[irq::i5#3]
irq::i5#1 = ++ irq::i5#3
to:irq::@39
irq::@41: scope:[irq] from irq::@39
irq::nxt#0 = *scroll_ptr
scroll_ptr = ++ scroll_ptr
irq::$31 = irq::nxt#0 == 0
irq::$32 = ! irq::$31
if(irq::$32) goto irq::@43
to:irq::@42
irq::@43: scope:[irq] from irq::@41 irq::@42
irq::nxt#2 = phi( irq::@41/irq::nxt#0, irq::@42/irq::nxt#1 )
irq::$33 = irq::nxt#2 & $bf
*(SCREEN+SCROLL_ROW*$28+$27) = irq::$33
to:irq::@return
irq::@42: scope:[irq] from irq::@41
scroll_ptr = SCROLL_TEXT
irq::nxt#1 = *scroll_ptr
to:irq::@43
irq::@return: scope:[irq] from irq::@37 irq::@43
return
to:@return
void __start()
__start: scope:[__start] from
to:__start::__init1
__start::__init1: scope:[__start] from __start
sin_idx = 0
scroll_soft = 7
scroll_ptr = SCROLL_TEXT
greet_zoomx = 0
greet_idx = 0
to:__start::@1
__start::@1: scope:[__start] from __start::__init1
call main
to:__start::@2
__start::@2: scope:[__start] from __start::@1
to:__start::@return
__start::@return: scope:[__start] from __start::@2
return
to:@return
SYMBOL TABLE SSA
__constant struct MOS6526_CIA * const CIA1 = (struct MOS6526_CIA *)$dc00
__constant const char CIA_INTERRUPT_CLEAR_ALL = $7f
__constant char * const COLORRAM = (char *)$d800
__constant char * const DEFAULT_SCREEN = (char *)$400
__constant char GREETING[] = " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
__constant const char GREET_COUNT = $f
__constant const char GREET_ROW = $14
__constant void (** const HARDWARE_IRQ)() = (void (**)())$fffe
__constant const char IRQ_RASTER = 1
__constant const char IRQ_Y = $16
__constant const char LOGO_ROW = 3
__constant char MEGA_LOGO[] = { $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf }
__constant char OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
__constant char OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
__constant char OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
__constant char OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
__constant char OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
__constant char OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
__constant char OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
__constant char OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
__constant char OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
__constant char * const PALETTE_BLUE = (char *)$d300
__constant char * const PALETTE_GREEN = (char *)$d200
__constant char * const PALETTE_RED = (char *)$d100
__constant char PAL_BLUE[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa }
__constant char PAL_GREEN[] = { 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff }
__constant char PAL_RED[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff }
__constant char * const PROCPORT = (char *)1
__constant char * const PROCPORT_DDR = (char *)0
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
__constant const char PROCPORT_RAM_IO = 5
__constant const char RASTER_LINES = $d8
__constant char * const SCREEN = DEFAULT_SCREEN
__constant const char SCROLL_BLACKBARS = $13
__constant const char SCROLL_ROW = $d
__constant char SCROLL_TEXT[] = " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
__constant const char SCROLL_Y = $66
__constant char SINE[$100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256)
}}
__constant char SONG[] = kickasm {{ .import c64 "DiscoZak_2SID_patched.prg"
}}
__constant struct MOS6569_VICII * const VICII = (struct MOS6569_VICII *)$d000
__constant struct MOS4569_VICIII * const VICIII = (struct MOS4569_VICIII *)$d000
__constant struct MEGA65_VICIV * const VICIV = (struct MEGA65_VICIV *)$d000
void __start()
__loadstore volatile char greet_idx
__loadstore volatile char greet_zoomx
__interrupt(hardware_clobber) void irq()
number irq::$10
bool irq::$11
bool irq::$12
bool irq::$13
bool irq::$14
bool irq::$15
bool irq::$16
bool irq::$18
bool irq::$19
bool irq::$2
bool irq::$21
bool irq::$22
bool irq::$23
char irq::$24
char irq::$25
number irq::$26
number irq::$27
bool irq::$28
number irq::$29
bool irq::$3
bool irq::$30
bool irq::$31
bool irq::$32
number irq::$33
bool irq::$4
bool irq::$5
bool irq::$6
bool irq::$7
bool irq::$8
bool irq::$9
char irq::barcnt
char irq::barcnt#0
char irq::barcnt#1
char irq::barcnt#2
char irq::barcnt#3
char irq::barcnt#4
char irq::barcnt#5
char irq::barcnt#6
char irq::barcnt#7
char irq::barcnt#8
char irq::barcnt#9
char irq::barcol
char irq::barcol#0
char irq::barcol#1
char irq::barcol#2
char irq::barcol#3
char irq::barcol#4
char irq::barcol#5
char irq::barcol#6
char irq::barcol#7
char irq::col
char irq::col#0
char irq::col1
char irq::col1#0
char irq::col1#1
char irq::greet_offset
char irq::greet_offset#0
char irq::greet_offset#1
char irq::greet_offset#2
char irq::greet_offset#3
char irq::i
char irq::i#0
char irq::i#1
char irq::i#2
char irq::i#3
char irq::i1
char irq::i1#0
char irq::i1#1
char irq::i1#2
char irq::i1#3
char irq::i2
char irq::i2#0
char irq::i2#1
char irq::i2#2
char irq::i2#3
char irq::i3
char irq::i3#0
char irq::i3#1
char irq::i3#2
char irq::i3#3
char irq::i4
char irq::i4#0
char irq::i4#1
char irq::i4#2
char irq::i4#3
char irq::i5
char irq::i5#0
char irq::i5#1
char irq::i5#2
char irq::i5#3
char irq::idx
char irq::idx#0
char irq::idx#1
char irq::idx#2
char irq::idx#3
char irq::idx#4
char irq::idx#5
char irq::idx#6
char irq::idx#7
char irq::l
char irq::l#0
char irq::l#1
char irq::l#2
char irq::l#3
char irq::line
char irq::line#0
char irq::line#1
char irq::line#10
char irq::line#11
char irq::line#12
char irq::line#13
char irq::line#14
char irq::line#15
char irq::line#2
char irq::line#3
char irq::line#4
char irq::line#5
char irq::line#6
char irq::line#7
char irq::line#8
char irq::line#9
char irq::nxt
char irq::nxt#0
char irq::nxt#1
char irq::nxt#2
char irq::raster
char irq::raster#0
char irq::raster#1
char irq::sin_bar
char irq::sin_bar#0
char irq::sin_bar#1
char irq::sin_bar#2
char irq::sin_bar#3
char irq::sin_bar#4
char irq::sin_bar#5
char irq::sin_bar#6
char irq::sin_bar#7
char irq::sin_bar#8
char irq::sin_bar#9
char irq::sin_col
char irq::sin_col#0
char irq::sin_col#1
char irq::sin_col#2
char irq::sin_col#3
char irq::wobble_idx
char irq::wobble_idx#0
char irq::wobble_idx#1
char irq::wobble_idx#10
char irq::wobble_idx#11
char irq::wobble_idx#12
char irq::wobble_idx#13
char irq::wobble_idx#14
char irq::wobble_idx#15
char irq::wobble_idx#2
char irq::wobble_idx#3
char irq::wobble_idx#4
char irq::wobble_idx#5
char irq::wobble_idx#6
char irq::wobble_idx#7
char irq::wobble_idx#8
char irq::wobble_idx#9
char irq::zoomval
char irq::zoomval#0
void main()
unsigned int main::$2
bool main::$3
bool main::$4
bool main::$5
char main::i
char main::i#0
char main::i#1
char main::i#2
char main::i1
char main::i1#0
char main::i1#1
char main::i1#2
char main::i1#3
char main::i2
char main::i2#0
char main::i2#1
char main::i2#2
char main::i2#3
void * memset(void *str , char c , unsigned int num)
bool memset::$0
bool memset::$1
bool memset::$3
char *memset::$4
char memset::c
char memset::c#0
char memset::c#1
char memset::c#2
char memset::c#3
char memset::c#4
char *memset::dst
char *memset::dst#0
char *memset::dst#1
char *memset::dst#2
char *memset::dst#3
char *memset::end
char *memset::end#0
char *memset::end#1
char *memset::end#2
unsigned int memset::num
unsigned int memset::num#0
unsigned int memset::num#1
unsigned int memset::num#2
void *memset::return
void *memset::return#0
void *memset::return#1
void *memset::return#2
void *memset::return#3
void *memset::str
void *memset::str#0
void *memset::str#1
void *memset::str#2
void *memset::str#3
void *memset::str#4
void *memset::str#5
__constant char rasters[RASTER_LINES] = { fill( RASTER_LINES, 0) }
__loadstore char * volatile scroll_ptr
__loadstore volatile char scroll_soft
__loadstore volatile char sin_idx
__constant void (*songInit)() = (void (*)())SONG
__constant void (*songPlay)() = (void (*)())SONG+3
Adding number conversion cast (unumber) 3 in
Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#1 > 0
Adding number conversion cast (unumber) $47 in *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
Adding number conversion cast (unumber) $53 in *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
Adding number conversion cast (unumber) $40 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
Adding number conversion cast (unumber) $40 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
Adding number conversion cast (unumber) $28*$19 in memset::num#0 = $28*$19
Adding number conversion cast (unumber) LOGO_ROW*$28 in (SCREEN+LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)LOGO_ROW*$28)[main::i1#3] = MEGA_LOGO[main::i1#3]
Adding number conversion cast (unumber) $28 in main::$4 = main::i2#2 < $28
Adding number conversion cast (unumber) GREET_ROW*$28 in (SCREEN+GREET_ROW*$28)[main::i2#3] = '*'
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)GREET_ROW*$28)[main::i2#3] = '*'
Adding number conversion cast (unumber) 0 in main::$5 = main::i#1 != 0
Adding number conversion cast (unumber) $7f in *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
Adding number conversion cast (unumber) 1 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
Adding number conversion cast (unumber) $80 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
Adding number conversion cast (unumber) 0 in *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
Adding number conversion cast (unumber) $66 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
Adding number conversion cast (unumber) $50 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
Adding number conversion cast (unumber) $50 in *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
Adding number conversion cast (unumber) SCROLL_Y+SCROLL_BLACKBARS+1 in irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
Adding number conversion cast (unumber) 1 in irq::$8 = irq::line#6 == (unumber)SCROLL_Y+SCROLL_BLACKBARS+1
Adding number conversion cast (unumber) 1 in irq::$10 = irq::zoomval#0 + 1
Adding number conversion cast (unumber) irq::$10 in irq::$10 = irq::zoomval#0 + (unumber)1
Adding number conversion cast (unumber) 0 in irq::$11 = greet_zoomx == 0
Adding number conversion cast (unumber) 0 in greet_idx = 0
Adding number conversion cast (unumber) $28 in irq::$16 = irq::i#2 < $28
Adding number conversion cast (unumber) 4 in irq::col1#0 = SINE[irq::sin_col#2] / 4
Adding number conversion cast (unumber) GREET_ROW*$28 in (COLORRAM+GREET_ROW*$28)[irq::i#3] = irq::col1#0
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)GREET_ROW*$28)[irq::i#3] = irq::col1#0
Adding number conversion cast (unumber) 2 in irq::col1#1 = irq::col1#0 / 2
Adding number conversion cast (unumber) 1 in (COLORRAM+LOGO_ROW*$28+0*$28-1)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 0*$28 in (COLORRAM+LOGO_ROW*$28+0*$28-(unumber)1)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)0*$28-(unumber)1)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)0*$28-(unumber)1)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 2 in (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 1*$28 in (COLORRAM+LOGO_ROW*$28+1*$28-(unumber)2)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)1*$28-(unumber)2)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)1*$28-(unumber)2)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 3 in (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 2*$28 in (COLORRAM+LOGO_ROW*$28+2*$28-(unumber)3)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)2*$28-(unumber)3)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)2*$28-(unumber)3)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 4 in (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 3*$28 in (COLORRAM+LOGO_ROW*$28+3*$28-(unumber)4)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)3*$28-(unumber)4)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)3*$28-(unumber)4)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 5 in (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 4*$28 in (COLORRAM+LOGO_ROW*$28+4*$28-(unumber)5)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)4*$28-(unumber)5)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)4*$28-(unumber)5)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 6 in (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) 5*$28 in (COLORRAM+LOGO_ROW*$28+5*$28-(unumber)6)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) LOGO_ROW*$28 in (COLORRAM+LOGO_ROW*$28+(unumber)5*$28-(unumber)6)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)LOGO_ROW*$28+(unumber)5*$28-(unumber)6)[irq::i#3] = irq::col1#1
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (COLORRAM+SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
Adding number conversion cast (unumber) $28 in (COLORRAM+(unumber)SCROLL_ROW*$28)[irq::i#3] = PAL_GREEN[irq::sin_col#2]
Adding number conversion cast (unumber) 0 in rasters[irq::l#3] = 0
Adding number conversion cast (unumber) $10 in irq::$19 = irq::barcnt#2 < $10
Adding number conversion cast (unumber) $10 in irq::barcol#0 = irq::barcnt#3 * $10
Adding number conversion cast (unumber) $10 in irq::$21 = irq::i1#2 < $10
Adding number conversion cast (unumber) $f in irq::$22 = irq::i2#2 < $f
Adding number conversion cast (unumber) $a in irq::sin_bar#1 = irq::sin_bar#3 + $a
Adding number conversion cast (unumber) $13 in irq::$23 = irq::i3#2 < $13
Adding number conversion cast (unumber) 2 in irq::$26 = rasters[irq::$25] / 2
Adding number conversion cast (unumber) irq::$26 in irq::$26 = rasters[irq::$25] / (unumber)2
Adding number conversion cast (unumber) 7 in irq::$27 = irq::$26 & 7
Adding number conversion cast (unumber) irq::$27 in irq::$27 = irq::$26 & (unumber)7
Adding number conversion cast (unumber) $10 in irq::greet_offset#0 = greet_idx * $10
Adding number conversion cast (unumber) $10 in irq::$28 = irq::i4#2 < $10
Adding number conversion cast (unumber) $bf in irq::$29 = GREETING[irq::greet_offset#2] & $bf
Adding number conversion cast (unumber) irq::$29 in irq::$29 = GREETING[irq::greet_offset#2] & (unumber)$bf
Adding number conversion cast (unumber) $d in (SCREEN+GREET_ROW*$28+$d)[irq::i4#3] = irq::$29
Adding number conversion cast (unumber) GREET_ROW*$28 in (SCREEN+GREET_ROW*$28+(unumber)$d)[irq::i4#3] = irq::$29
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)GREET_ROW*$28+(unumber)$d)[irq::i4#3] = irq::$29
Adding number conversion cast (unumber) $ff in irq::$2 = scroll_soft == $ff
Adding number conversion cast (unumber) 7 in scroll_soft = 7
Adding number conversion cast (unumber) $27 in irq::$30 = irq::i5#2 < $27
Adding number conversion cast (unumber) 1 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+1)[irq::i5#3]
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+SCROLL_ROW*$28+(unumber)1)[irq::i5#3]
Adding number conversion cast (unumber) $28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*$28+(unumber)1)[irq::i5#3]
Adding number conversion cast (unumber) SCROLL_ROW*$28 in (SCREEN+SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*(unumber)$28+(unumber)1)[irq::i5#3]
Adding number conversion cast (unumber) $28 in (SCREEN+(unumber)SCROLL_ROW*$28)[irq::i5#3] = (SCREEN+(unumber)SCROLL_ROW*(unumber)$28+(unumber)1)[irq::i5#3]
Adding number conversion cast (unumber) 0 in irq::$31 = irq::nxt#0 == 0
Adding number conversion cast (unumber) $bf in irq::$33 = irq::nxt#2 & $bf
Adding number conversion cast (unumber) irq::$33 in irq::$33 = irq::nxt#2 & (unumber)$bf
Adding number conversion cast (unumber) $27 in *(SCREEN+SCROLL_ROW*$28+$27) = irq::$33
Adding number conversion cast (unumber) SCROLL_ROW*$28 in *(SCREEN+SCROLL_ROW*$28+(unumber)$27) = irq::$33
Adding number conversion cast (unumber) $28 in *(SCREEN+(unumber)SCROLL_ROW*$28+(unumber)$27) = irq::$33
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast memset::dst#0 = (char *)memset::str#2
Inlining cast *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = (unumber)$47
Inlining cast *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = (unumber)$53
Inlining cast memset::num#0 = (unumber)$28*$19
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = (unumber)1
Inlining cast *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = (unumber)0
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = (unumber)$66
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = (unumber)$50
Inlining cast *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = (unumber)$50
Inlining cast greet_idx = (unumber)0
Inlining cast rasters[irq::l#3] = (unumber)0
Inlining cast scroll_soft = (unumber)7
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (char *) 0
Simplifying constant pointer cast (char *) 1
Simplifying constant pointer cast (struct MOS6569_VICII *) 53248
Simplifying constant pointer cast (struct MOS4569_VICIII *) 53248
Simplifying constant pointer cast (struct MEGA65_VICIV *) 53248
Simplifying constant pointer cast (char *) 53504
Simplifying constant pointer cast (char *) 53760
Simplifying constant pointer cast (char *) 54016
Simplifying constant pointer cast (char *) 55296
Simplifying constant pointer cast (char *) 1024
Simplifying constant pointer cast (struct MOS6526_CIA *) 56320
Simplifying constant pointer cast (void (**)()) 65534
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast $47
Simplifying constant integer cast $53
Simplifying constant integer cast $40
Simplifying constant integer cast $40
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast GREET_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $7f
Simplifying constant integer cast 1
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast $66
Simplifying constant integer cast $50
Simplifying constant integer cast $50
Simplifying constant integer cast SCROLL_Y+SCROLL_BLACKBARS+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 4
Simplifying constant integer cast GREET_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 2
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 1
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 2
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 3
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 4
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 5
Simplifying constant integer cast LOGO_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 6
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast $10
Simplifying constant integer cast $10
Simplifying constant integer cast $f
Simplifying constant integer cast $a
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast 7
Simplifying constant integer cast $10
Simplifying constant integer cast $10
Simplifying constant integer cast $bf
Simplifying constant integer cast GREET_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast $d
Simplifying constant integer cast $ff
Simplifying constant integer cast 7
Simplifying constant integer cast $27
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 1
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $bf
Simplifying constant integer cast SCROLL_ROW*(unumber)$28
Simplifying constant integer cast $28
Simplifying constant integer cast $27
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $47
Finalized unsigned number type (char) $53
Finalized unsigned number type (char) $40
Finalized unsigned number type (char) $40
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $7f
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $80
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $66
Finalized unsigned number type (char) $50
Finalized unsigned number type (char) $50
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 5
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 6
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $f
Finalized unsigned number type (char) $a
Finalized unsigned number type (char) $13
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) 7
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $10
Finalized unsigned number type (char) $bf
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $d
Finalized unsigned number type (char) $ff
Finalized unsigned number type (char) 7
Finalized unsigned number type (char) $27
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 0
Finalized unsigned number type (char) $bf
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $27
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to char in irq::$10 = irq::zoomval#0 + 1
Inferred type updated to char in irq::$26 = rasters[irq::$25] / 2
Inferred type updated to char in irq::$27 = irq::$26 & 7
Inferred type updated to char in irq::$29 = GREETING[irq::greet_offset#2] & $bf
Inferred type updated to char in irq::$33 = irq::nxt#2 & $bf
Inversing boolean not [2] memset::$1 = memset::num#1 <= 0 from [1] memset::$0 = memset::num#1 > 0
Inversing boolean not [97] irq::$9 = irq::line#6 != SCROLL_Y+SCROLL_BLACKBARS+1 from [96] irq::$8 = irq::line#6 == SCROLL_Y+SCROLL_BLACKBARS+1
Inversing boolean not [106] irq::$12 = greet_zoomx != 0 from [105] irq::$11 = greet_zoomx == 0
Inversing boolean not [111] irq::$14 = greet_idx != GREET_COUNT from [110] irq::$13 = greet_idx == GREET_COUNT
Inversing boolean not [200] irq::$3 = scroll_soft != $ff from [199] irq::$2 = scroll_soft == $ff
Inversing boolean not [213] irq::$32 = irq::nxt#0 != 0 from [212] irq::$31 = irq::nxt#0 == 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1
Alias memset::str#2 = memset::str#3
Alias memset::num#1 = memset::num#2
Alias memset::c#3 = memset::c#4
Alias memset::c#1 = memset::c#2
Alias memset::dst#2 = memset::dst#3
Alias memset::end#1 = memset::end#2
Alias memset::str#4 = memset::str#5
Alias main::i1#2 = main::i1#3
Alias main::i2#2 = main::i2#3
Alias irq::line#10 = irq::line#3 irq::line#2 irq::line#13 irq::line#4 irq::line#14 irq::line#5 irq::line#15 irq::line#6 irq::line#11 irq::line#12
Alias irq::wobble_idx#10 = irq::wobble_idx#3 irq::wobble_idx#4 irq::wobble_idx#2 irq::wobble_idx#14 irq::wobble_idx#12 irq::wobble_idx#15 irq::wobble_idx#13 irq::wobble_idx#8 irq::wobble_idx#9 irq::wobble_idx#11
Alias irq::line#7 = irq::line#8
Alias irq::wobble_idx#5 = irq::wobble_idx#6
Alias irq::sin_col#2 = irq::sin_col#3
Alias irq::i#2 = irq::i#3
Alias irq::l#2 = irq::l#3
Alias irq::sin_bar#2 = irq::sin_bar#4
Alias irq::barcnt#2 = irq::barcnt#3
Alias irq::barcol#3 = irq::barcol#5 irq::barcol#7
Alias irq::idx#3 = irq::idx#5 irq::idx#7
Alias irq::i1#2 = irq::i1#3
Alias irq::sin_bar#6 = irq::sin_bar#9 irq::sin_bar#8
Alias irq::barcnt#6 = irq::barcnt#9 irq::barcnt#8
Alias irq::barcol#4 = irq::barcol#6
Alias irq::idx#4 = irq::idx#6
Alias irq::i2#2 = irq::i2#3
Alias irq::sin_bar#3 = irq::sin_bar#7 irq::sin_bar#5
Alias irq::barcnt#4 = irq::barcnt#7 irq::barcnt#5
Alias irq::i3#2 = irq::i3#3
Alias irq::greet_offset#2 = irq::greet_offset#3
Alias irq::i4#2 = irq::i4#3
Alias irq::i5#2 = irq::i5#3
Successful SSA optimization Pass2AliasElimination
Alias irq::line#10 = irq::line#9
Successful SSA optimization Pass2AliasElimination
Identical Phi Values memset::num#1 memset::num#0
Identical Phi Values memset::str#2 memset::str#0
Identical Phi Values memset::c#3 memset::c#0
Identical Phi Values memset::end#1 memset::end#0
Identical Phi Values memset::str#4 memset::str#2
Identical Phi Values memset::c#1 memset::c#3
Identical Phi Values irq::raster#1 irq::raster#0
Identical Phi Values irq::line#7 irq::line#10
Identical Phi Values irq::wobble_idx#5 irq::wobble_idx#7
Identical Phi Values irq::sin_bar#6 irq::sin_bar#2
Identical Phi Values irq::barcnt#6 irq::barcnt#2
Identical Phi Values irq::sin_bar#3 irq::sin_bar#6
Identical Phi Values irq::barcnt#4 irq::barcnt#6
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values memset::return#0 memset::str#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition memset::$1 [2] if(memset::num#0<=0) goto memset::@1
Simple Condition memset::$3 [9] if(memset::dst#2!=memset::end#0) goto memset::@4
Simple Condition main::$3 [28] if(main::i1#2<main::$2) goto main::@3
Simple Condition main::$4 [34] if(main::i2#2<$28) goto main::@6
Simple Condition main::$5 [44] if(main::i#1!=0) goto main::@8
Simple Condition irq::$4 [64] if(irq::line#10!=RASTER_LINES) goto irq::@3
Simple Condition irq::$5 [69] if(irq::line#10<SCROLL_Y) goto irq::@5
Simple Condition irq::$6 [75] if(irq::line#10==SCROLL_Y) goto irq::@6
Simple Condition irq::$7 [79] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7
Simple Condition irq::$9 [82] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8
Simple Condition irq::$12 [89] if(greet_zoomx!=0) goto irq::@8
Simple Condition irq::$14 [92] if(greet_idx!=GREET_COUNT) goto irq::@8
Simple Condition irq::$15 [98] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9
Simple Condition irq::$16 [104] if(irq::i#2<$28) goto irq::@18
Simple Condition irq::$18 [120] if(irq::l#2!=RASTER_LINES) goto irq::@21
Simple Condition irq::$19 [127] if(irq::barcnt#2<$10) goto irq::@24
Simple Condition irq::$21 [134] if(irq::i1#2<$10) goto irq::@27
Simple Condition irq::$22 [142] if(irq::i2#2<$f) goto irq::@30
Simple Condition irq::$23 [151] if(irq::i3#2<$13) goto irq::@33
Simple Condition irq::$28 [162] if(irq::i4#2<$10) goto irq::@36
Simple Condition irq::$3 [169] if(scroll_soft!=$ff) goto irq::@return
Simple Condition irq::$30 [174] if(irq::i5#2<$27) goto irq::@40
Simple Condition irq::$32 [180] if(irq::nxt#0!=0) goto irq::@43
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [21] memset::num#0 = (unumber)$28*$19
Constant right-side identified [26] main::$2 = sizeof MEGA_LOGO
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant memset::str#0 = (void *)SCREEN
Constant memset::c#0 = ' '
Constant memset::num#0 = (unumber)$28*$19
Constant main::i1#0 = 0
Constant main::$2 = sizeof MEGA_LOGO
Constant main::i2#0 = 0
Constant main::i#0 = 0
Constant irq::line#0 = 0
Constant irq::i#0 = 0
Constant irq::l#0 = 0
Constant irq::barcnt#0 = 0
Constant irq::i1#0 = 0
Constant irq::i3#0 = 0
Constant irq::i2#0 = 0
Constant irq::i4#0 = 0
Constant irq::i5#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant memset::$4 = (char *)memset::str#0
Constant memset::dst#0 = (char *)memset::str#0
Constant memset::return#2 = memset::str#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [2] if(memset::num#0<=0) goto memset::@1
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (char)0*$28 in [108] (COLORRAM+LOGO_ROW*$28+(char)0*$28-1)[irq::i#2] = irq::col1#1
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero COLORRAM+LOGO_ROW*$28 in [108] (COLORRAM+LOGO_ROW*$28+0-1)[irq::i#2] = irq::col1#1
Successful SSA optimization PassNSimplifyExpressionWithZero
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Eliminating unused constant memset::return#2
Successful SSA optimization PassNEliminateUnusedVars
Resolving array sizeof() sizeof MEGA_LOGO
Successful SSA optimization PassNSizeOfSimplification
Constant right-side identified [0] memset::end#0 = memset::$4 + memset::num#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant memset::end#0 = memset::$4+memset::num#0
Successful SSA optimization Pass2ConstantIdentification
Adding number conversion cast (unumber) $bc in
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $bc
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) $bc
Successful SSA optimization PassNFinalizeNumberTypeConversions
Rewriting division to use shift [73] irq::col1#0 = SINE[irq::sin_col#2] / 4
Rewriting division to use shift [75] irq::col1#1 = irq::col1#0 / 2
Rewriting multiplication to use shift [93] irq::barcol#0 = irq::barcnt#2 * $10
Rewriting division to use shift [112] irq::$26 = rasters[irq::$25] / 2
Rewriting multiplication to use shift [116] irq::greet_offset#0 = greet_idx * $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings memset::dst#0
Inlining constant with var siblings main::i1#0
Inlining constant with var siblings main::i2#0
Inlining constant with var siblings main::i#0
Inlining constant with var siblings irq::line#0
Inlining constant with var siblings irq::i#0
Inlining constant with var siblings irq::l#0
Inlining constant with var siblings irq::barcnt#0
Inlining constant with var siblings irq::i1#0
Inlining constant with var siblings irq::i3#0
Inlining constant with var siblings irq::i2#0
Inlining constant with var siblings irq::i4#0
Inlining constant with var siblings irq::i5#0
Constant inlined irq::line#0 = 0
Constant inlined irq::barcnt#0 = 0
Constant inlined irq::i#0 = 0
Constant inlined irq::i2#0 = 0
Constant inlined irq::i3#0 = 0
Constant inlined irq::i1#0 = 0
Constant inlined irq::i4#0 = 0
Constant inlined irq::l#0 = 0
Constant inlined irq::i5#0 = 0
Constant inlined SCREEN = DEFAULT_SCREEN
Constant inlined memset::$4 = (char *)memset::str#0
Constant inlined main::$2 = $bc*SIZEOF_CHAR
Constant inlined main::i1#0 = 0
Constant inlined main::i#0 = 0
Constant inlined main::i2#0 = 0
Constant inlined memset::dst#0 = (char *)memset::str#0
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in assignment (rasters+SCROLL_Y)[irq::$25]
Consolidated array index constant in assignment (rasters+SCROLL_Y)[irq::$24]
Successful SSA optimization Pass2ConstantAdditionElimination
Alias irq::i3#2 = irq::$24 irq::$25
Successful SSA optimization Pass2AliasElimination
Finalized unsigned number type (char) 8
Finalized unsigned number type (char) 8
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) $19
Finalized unsigned number type (unsigned int) $fc0
Finalized unsigned number type (unsigned int) $100
Finalized unsigned number type (unsigned int) $2c00
Finalized unsigned number type (unsigned int) $3000
Finalized unsigned number type (unsigned int) $2d00
Finalized unsigned number type (unsigned int) $2e00
Finalized unsigned number type (unsigned int) $2f00
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 4
Finalized unsigned number type (char) $28
Finalized unsigned number type (char) 5
Finalized unsigned number type (char) $28
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simplifying constant integer cast 1*$28
Simplifying constant integer cast 2*$28
Simplifying constant integer cast 3*$28
Simplifying constant integer cast 4*$28
Simplifying constant integer cast 5*$28
Successful SSA optimization PassNCastSimplification
Added new block during phi lifting main::@12(between main::@8 and main::@8)
Added new block during phi lifting irq::@44(between irq::@13 and irq::@8)
Added new block during phi lifting irq::@45(between irq::@14 and irq::@8)
Added new block during phi lifting irq::@46(between irq::@15 and irq::@8)
Added new block during phi lifting irq::@47(between irq::@41 and irq::@43)
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of __start::@2
Adding NOP phi() at start of irq::@4
Adding NOP phi() at start of irq::@19
Adding NOP phi() at start of irq::@25
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of memset
Adding NOP phi() at start of memset::@2
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [__start] to main:7
Calls in [irq] to null:19
Calls in [main] to null:153 memset:155
Created 23 initial phi equivalence classes
Coalesced [15] irq::wobble_idx#16 = irq::wobble_idx#0
Coalesced [21] irq::sin_col#4 = irq::sin_col#0
Coalesced [28] irq::sin_bar#10 = irq::sin_bar#0
Coalesced [35] irq::greet_offset#4 = irq::greet_offset#0
Coalesced [48] irq::nxt#4 = irq::nxt#1
Coalesced [53] irq::nxt#3 = irq::nxt#0
Coalesced [56] irq::i5#4 = irq::i5#1
Coalesced [61] irq::i4#4 = irq::i4#1
Coalesced [62] irq::greet_offset#5 = irq::greet_offset#1
Coalesced [67] irq::i3#4 = irq::i3#1
Coalesced [70] irq::barcol#8 = irq::barcol#0
Coalesced [71] irq::idx#8 = irq::idx#0
Coalesced [74] irq::barcol#10 = irq::barcol#3
Coalesced [75] irq::idx#10 = irq::idx#3
Coalesced [80] irq::barcnt#10 = irq::barcnt#1
Coalesced [81] irq::sin_bar#11 = irq::sin_bar#1
Coalesced [86] irq::i2#4 = irq::i2#1
Coalesced [87] irq::barcol#11 = irq::barcol#2
Coalesced [88] irq::idx#11 = irq::idx#2
Coalesced [93] irq::i1#4 = irq::i1#1
Coalesced [94] irq::barcol#9 = irq::barcol#1
Coalesced [95] irq::idx#9 = irq::idx#1
Coalesced [98] irq::l#4 = irq::l#1
Coalesced [111] irq::i#4 = irq::i#1
Coalesced [112] irq::sin_col#5 = irq::sin_col#1
Coalesced [129] irq::wobble_idx#21 = irq::wobble_idx#10
Coalesced [134] irq::line#16 = irq::line#1
Coalesced (already) [135] irq::wobble_idx#17 = irq::wobble_idx#7
Coalesced (already) [136] irq::wobble_idx#20 = irq::wobble_idx#10
Coalesced (already) [137] irq::wobble_idx#19 = irq::wobble_idx#10
Coalesced (already) [138] irq::wobble_idx#18 = irq::wobble_idx#10
Coalesced (already) [140] irq::wobble_idx#24 = irq::wobble_idx#10
Coalesced (already) [143] irq::wobble_idx#23 = irq::wobble_idx#10
Coalesced [147] irq::wobble_idx#22 = irq::wobble_idx#1
Coalesced [180] main::i#3 = main::i#1
Coalesced [183] main::i2#4 = main::i2#1
Coalesced [186] main::i1#4 = main::i1#1
Coalesced [195] memset::dst#4 = memset::dst#1
Coalesced down to 20 phi equivalence classes
Culled Empty Block label __start::@2
Culled Empty Block label irq::@19
Culled Empty Block label irq::@25
Culled Empty Block label irq::@47
Culled Empty Block label irq::@28
Culled Empty Block label irq::@46
Culled Empty Block label irq::@45
Culled Empty Block label irq::@44
Culled Empty Block label main::@11
Culled Empty Block label main::@4
Culled Empty Block label main::@7
Culled Empty Block label main::@12
Culled Empty Block label memset::@2
Culled Empty Block label memset::@1
Renumbering block memset::@3 to memset::@1
Renumbering block memset::@4 to memset::@2
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
Renumbering block main::@8 to main::@6
Renumbering block main::@9 to main::@7
Renumbering block main::@10 to main::@8
Renumbering block irq::@20 to irq::@19
Renumbering block irq::@21 to irq::@20
Renumbering block irq::@22 to irq::@21
Renumbering block irq::@23 to irq::@22
Renumbering block irq::@24 to irq::@23
Renumbering block irq::@26 to irq::@24
Renumbering block irq::@27 to irq::@25
Renumbering block irq::@29 to irq::@26
Renumbering block irq::@30 to irq::@27
Renumbering block irq::@31 to irq::@28
Renumbering block irq::@32 to irq::@29
Renumbering block irq::@33 to irq::@30
Renumbering block irq::@34 to irq::@31
Renumbering block irq::@35 to irq::@32
Renumbering block irq::@36 to irq::@33
Renumbering block irq::@37 to irq::@34
Renumbering block irq::@38 to irq::@35
Renumbering block irq::@39 to irq::@36
Renumbering block irq::@40 to irq::@37
Renumbering block irq::@41 to irq::@38
Renumbering block irq::@42 to irq::@39
Renumbering block irq::@43 to irq::@40
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of irq::@4
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of memset
FINAL CONTROL FLOW GRAPH
void __start()
__start: scope:[__start] from
[0] phi()
to:__start::__init1
__start::__init1: scope:[__start] from __start
[1] sin_idx = 0
[2] scroll_soft = 7
[3] scroll_ptr = SCROLL_TEXT
[4] greet_zoomx = 0
[5] greet_idx = 0
to:__start::@1
__start::@1: scope:[__start] from __start::__init1
[6] phi()
[7] call main
to:__start::@return
__start::@return: scope:[__start] from __start::@1
[8] return
to:@return
__interrupt(hardware_clobber) void irq()
irq: scope:[irq] from
[9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80
[10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER
[11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0
[12] sin_idx = ++ sin_idx
[13] irq::wobble_idx#0 = sin_idx
to:irq::@2
irq::@2: scope:[irq] from irq irq::@10
[14] irq::wobble_idx#10 = phi( irq/irq::wobble_idx#0, irq::@10/irq::wobble_idx#7 )
[14] irq::line#10 = phi( irq/0, irq::@10/irq::line#1 )
[15] if(irq::line#10!=RASTER_LINES) goto irq::@3
to:irq::@4
irq::@4: scope:[irq] from irq::@2
[16] phi()
[17] callexecute *songPlay
to:irq::@1
irq::@1: scope:[irq] from irq::@4
[18] irq::sin_col#0 = sin_idx
to:irq::@17
irq::@17: scope:[irq] from irq::@1 irq::@18
[19] irq::sin_col#2 = phi( irq::@1/irq::sin_col#0, irq::@18/irq::sin_col#1 )
[19] irq::i#2 = phi( irq::@1/0, irq::@18/irq::i#1 )
[20] if(irq::i#2<$28) goto irq::@18
to:irq::@19
irq::@19: scope:[irq] from irq::@17 irq::@20
[21] irq::l#2 = phi( irq::@17/0, irq::@20/irq::l#1 )
[22] if(irq::l#2!=RASTER_LINES) goto irq::@20
to:irq::@21
irq::@21: scope:[irq] from irq::@19
[23] irq::sin_bar#0 = sin_idx
to:irq::@22
irq::@22: scope:[irq] from irq::@21 irq::@28
[24] irq::sin_bar#2 = phi( irq::@21/irq::sin_bar#0, irq::@28/irq::sin_bar#1 )
[24] irq::barcnt#2 = phi( irq::@21/0, irq::@28/irq::barcnt#1 )
[25] if(irq::barcnt#2<$10) goto irq::@23
to:irq::@29
irq::@29: scope:[irq] from irq::@22 irq::@30
[26] irq::i3#2 = phi( irq::@22/0, irq::@30/irq::i3#1 )
[27] if(irq::i3#2<$13) goto irq::@30
to:irq::@31
irq::@31: scope:[irq] from irq::@29
[28] irq::greet_offset#0 = greet_idx << 4
to:irq::@32
irq::@32: scope:[irq] from irq::@31 irq::@33
[29] irq::greet_offset#2 = phi( irq::@31/irq::greet_offset#0, irq::@33/irq::greet_offset#1 )
[29] irq::i4#2 = phi( irq::@31/0, irq::@33/irq::i4#1 )
[30] if(irq::i4#2<$10) goto irq::@33
to:irq::@34
irq::@34: scope:[irq] from irq::@32
[31] scroll_soft = -- scroll_soft
[32] if(scroll_soft!=$ff) goto irq::@return
to:irq::@35
irq::@35: scope:[irq] from irq::@34
[33] scroll_soft = 7
to:irq::@36
irq::@36: scope:[irq] from irq::@35 irq::@37
[34] irq::i5#2 = phi( irq::@35/0, irq::@37/irq::i5#1 )
[35] if(irq::i5#2<$27) goto irq::@37
to:irq::@38
irq::@38: scope:[irq] from irq::@36
[36] irq::nxt#0 = *scroll_ptr
[37] scroll_ptr = ++ scroll_ptr
[38] if(irq::nxt#0!=0) goto irq::@40
to:irq::@39
irq::@39: scope:[irq] from irq::@38
[39] scroll_ptr = SCROLL_TEXT
[40] irq::nxt#1 = *scroll_ptr
to:irq::@40
irq::@40: scope:[irq] from irq::@38 irq::@39
[41] irq::nxt#2 = phi( irq::@38/irq::nxt#0, irq::@39/irq::nxt#1 )
[42] irq::$33 = irq::nxt#2 & $bf
[43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33
to:irq::@return
irq::@return: scope:[irq] from irq::@34 irq::@40
[44] return
to:@return
irq::@37: scope:[irq] from irq::@36
[45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2]
[46] irq::i5#1 = ++ irq::i5#2
to:irq::@36
irq::@33: scope:[irq] from irq::@32
[47] irq::$29 = GREETING[irq::greet_offset#2] & $bf
[48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29
[49] irq::greet_offset#1 = ++ irq::greet_offset#2
[50] irq::i4#1 = ++ irq::i4#2
to:irq::@32
irq::@30: scope:[irq] from irq::@29
[51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1
[52] irq::$27 = irq::$26 & 7
[53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27
[54] irq::i3#1 = ++ irq::i3#2
to:irq::@29
irq::@23: scope:[irq] from irq::@22
[55] irq::idx#0 = SINE[irq::sin_bar#2]
[56] irq::barcol#0 = irq::barcnt#2 << 4
to:irq::@24
irq::@24: scope:[irq] from irq::@23 irq::@25
[57] irq::idx#3 = phi( irq::@23/irq::idx#0, irq::@25/irq::idx#1 )
[57] irq::barcol#3 = phi( irq::@23/irq::barcol#0, irq::@25/irq::barcol#1 )
[57] irq::i1#2 = phi( irq::@23/0, irq::@25/irq::i1#1 )
[58] if(irq::i1#2<$10) goto irq::@25
to:irq::@26
irq::@26: scope:[irq] from irq::@24 irq::@27
[59] irq::idx#4 = phi( irq::@24/irq::idx#3, irq::@27/irq::idx#2 )
[59] irq::barcol#4 = phi( irq::@24/irq::barcol#3, irq::@27/irq::barcol#2 )
[59] irq::i2#2 = phi( irq::@24/0, irq::@27/irq::i2#1 )
[60] if(irq::i2#2<$f) goto irq::@27
to:irq::@28
irq::@28: scope:[irq] from irq::@26
[61] irq::sin_bar#1 = irq::sin_bar#2 + $a
[62] irq::barcnt#1 = ++ irq::barcnt#2
to:irq::@22
irq::@27: scope:[irq] from irq::@26
[63] irq::barcol#2 = -- irq::barcol#4
[64] rasters[irq::idx#4] = irq::barcol#2
[65] irq::idx#2 = ++ irq::idx#4
[66] irq::i2#1 = ++ irq::i2#2
to:irq::@26
irq::@25: scope:[irq] from irq::@24
[67] rasters[irq::idx#3] = irq::barcol#3
[68] irq::idx#1 = ++ irq::idx#3
[69] irq::barcol#1 = ++ irq::barcol#3
[70] irq::i1#1 = ++ irq::i1#2
to:irq::@24
irq::@20: scope:[irq] from irq::@19
[71] rasters[irq::l#2] = 0
[72] irq::l#1 = ++ irq::l#2
to:irq::@19
irq::@18: scope:[irq] from irq::@17
[73] irq::col1#0 = SINE[irq::sin_col#2] >> 2
[74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0
[75] irq::col1#1 = irq::col1#0 >> 1
[76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1
[77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1
[78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1
[79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1
[80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1
[81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1
[82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2]
[83] irq::sin_col#1 = ++ irq::sin_col#2
[84] irq::i#1 = ++ irq::i#2
to:irq::@17
irq::@3: scope:[irq] from irq::@2
[85] irq::col#0 = rasters[irq::line#10]
[86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0
[87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0
[88] if(irq::line#10<SCROLL_Y) goto irq::@5
to:irq::@11
irq::@11: scope:[irq] from irq::@3
[89] if(irq::line#10==SCROLL_Y) goto irq::@6
to:irq::@12
irq::@12: scope:[irq] from irq::@11
[90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7
to:irq::@13
irq::@13: scope:[irq] from irq::@12
[91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8
to:irq::@14
irq::@14: scope:[irq] from irq::@13
[92] irq::zoomval#0 = SINE[greet_zoomx]
[93] greet_zoomx = ++ greet_zoomx
[94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0
[95] irq::$10 = irq::zoomval#0 + 1
[96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10
[97] if(greet_zoomx!=0) goto irq::@8
to:irq::@15
irq::@15: scope:[irq] from irq::@14
[98] greet_idx = ++ greet_idx
[99] if(greet_idx!=GREET_COUNT) goto irq::@8
to:irq::@16
irq::@16: scope:[irq] from irq::@15
[100] greet_idx = 0
to:irq::@8
irq::@8: scope:[irq] from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7
[101] irq::wobble_idx#7 = phi( irq::@13/irq::wobble_idx#10, irq::@14/irq::wobble_idx#10, irq::@15/irq::wobble_idx#10, irq::@16/irq::wobble_idx#10, irq::@5/irq::wobble_idx#1, irq::@6/irq::wobble_idx#10, irq::@7/irq::wobble_idx#10 )
[102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)
to:irq::@9
irq::@9: scope:[irq] from irq::@8 irq::@9
[103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9
to:irq::@10
irq::@10: scope:[irq] from irq::@9
[104] irq::line#1 = ++ irq::line#10
to:irq::@2
irq::@7: scope:[irq] from irq::@12
[105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
to:irq::@8
irq::@6: scope:[irq] from irq::@11
[106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50
[107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft
to:irq::@8
irq::@5: scope:[irq] from irq::@3
[108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10]
[109] irq::wobble_idx#1 = ++ irq::wobble_idx#10
[110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66
to:irq::@8
void main()
main: scope:[main] from __start::@1
[111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47
[112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53
[113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40
[114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40
asm { lda#0 }
[116] callexecute *songInit
to:main::@1
main::@1: scope:[main] from main
[117] phi()
[118] call memset
to:main::@2
main::@2: scope:[main] from main::@1 main::@3
[119] main::i1#2 = phi( main::@1/0, main::@3/main::i1#1 )
[120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@2 main::@5
[121] main::i2#2 = phi( main::@2/0, main::@5/main::i2#1 )
[122] if(main::i2#2<$28) goto main::@5
to:main::@6
main::@6: scope:[main] from main::@4 main::@6
[123] main::i#2 = phi( main::@4/0, main::@6/main::i#1 )
[124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2]
[125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2]
[126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2]
[127] main::i#1 = ++ main::i#2
[128] if(main::i#1!=0) goto main::@6
to:main::@7
main::@7: scope:[main] from main::@6
asm { sei }
[130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL
[131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y
[132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f
[133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER
[134] *HARDWARE_IRQ = &irq
[135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
[136] *PROCPORT = PROCPORT_RAM_IO
[137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1
asm { cli }
to:main::@8
main::@8: scope:[main] from main::@7 main::@8
[139] phi()
to:main::@8
main::@5: scope:[main] from main::@4
[140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*'
[141] main::i2#1 = ++ main::i2#2
to:main::@4
main::@3: scope:[main] from main::@2
[142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2]
[143] main::i1#1 = ++ main::i1#2
to:main::@2
void * memset(void *str , char c , unsigned int num)
memset: scope:[memset] from main::@1
[144] phi()
to:memset::@1
memset::@1: scope:[memset] from memset memset::@2
[145] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 )
[146] if(memset::dst#2!=memset::end#0) goto memset::@2
to:memset::@return
memset::@return: scope:[memset] from memset::@1
[147] return
to:@return
memset::@2: scope:[memset] from memset::@1
[148] *memset::dst#2 = memset::c#0
[149] memset::dst#1 = ++ memset::dst#2
to:memset::@1
VARIABLE REGISTER WEIGHTS
void __start()
__loadstore volatile char greet_idx // 0.6153846153846154
__loadstore volatile char greet_zoomx // 1.3939393939393938
__interrupt(hardware_clobber) void irq()
char irq::$10 // 22.0
char irq::$26 // 22.0
char irq::$27 // 22.0
char irq::$29 // 22.0
char irq::$33 // 4.0
char irq::barcnt
char irq::barcnt#1 // 22.0
char irq::barcnt#2 // 2.588235294117647
char irq::barcol
char irq::barcol#0 // 22.0
char irq::barcol#1 // 101.0
char irq::barcol#2 // 75.75
char irq::barcol#3 // 103.75
char irq::barcol#4 // 151.5
char irq::col
char irq::col#0 // 16.5
char irq::col1
char irq::col1#0 // 16.5
char irq::col1#1 // 12.833333333333334
char irq::greet_offset
char irq::greet_offset#0 // 4.0
char irq::greet_offset#1 // 11.0
char irq::greet_offset#2 // 8.75
char irq::i
char irq::i#1 // 22.0
char irq::i#2 // 9.307692307692307
char irq::i1
char irq::i1#1 // 202.0
char irq::i1#2 // 60.599999999999994
char irq::i2
char irq::i2#1 // 202.0
char irq::i2#2 // 60.599999999999994
char irq::i3
char irq::i3#1 // 22.0
char irq::i3#2 // 11.0
char irq::i4
char irq::i4#1 // 22.0
char irq::i4#2 // 8.8
char irq::i5
char irq::i5#1 // 22.0
char irq::i5#2 // 18.333333333333332
char irq::idx
char irq::idx#0 // 11.0
char irq::idx#1 // 67.33333333333333
char irq::idx#2 // 101.0
char irq::idx#3 // 138.33333333333331
char irq::idx#4 // 101.0
char irq::l
char irq::l#1 // 22.0
char irq::l#2 // 14.666666666666666
char irq::line
char irq::line#1 // 22.0
char irq::line#10 // 3.259259259259259
char irq::nxt
char irq::nxt#0 // 2.0
char irq::nxt#1 // 4.0
char irq::nxt#2 // 6.0
char irq::raster
char irq::raster#0 // 56.0
char irq::sin_bar
char irq::sin_bar#0 // 4.0
char irq::sin_bar#1 // 11.0
char irq::sin_bar#2 // 2.1875
char irq::sin_col
char irq::sin_col#0 // 4.0
char irq::sin_col#1 // 11.0
char irq::sin_col#2 // 3.833333333333333
char irq::wobble_idx
char irq::wobble_idx#0 // 4.0
char irq::wobble_idx#1 // 11.0
char irq::wobble_idx#10 // 4.590909090909091
char irq::wobble_idx#7 // 22.0
char irq::zoomval
char irq::zoomval#0 // 11.0
void main()
char main::i
char main::i#1 // 151.5
char main::i#2 // 202.0
char main::i1
char main::i1#1 // 202.0
char main::i1#2 // 168.33333333333331
char main::i2
char main::i2#1 // 202.0
char main::i2#2 // 134.66666666666666
void * memset(void *str , char c , unsigned int num)
char memset::c
char *memset::dst
char *memset::dst#1 // 2002.0
char *memset::dst#2 // 1334.6666666666667
char *memset::end
unsigned int memset::num
void *memset::return
void *memset::str
__loadstore char * volatile scroll_ptr // 0.19672131147540986
__loadstore volatile char scroll_soft // 0.2441860465116279
__loadstore volatile char sin_idx // 0.49999999999999994
Initial phi equivalence classes
[ irq::line#10 irq::line#1 ]
[ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
[ irq::i#2 irq::i#1 ]
[ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
[ irq::l#2 irq::l#1 ]
[ irq::barcnt#2 irq::barcnt#1 ]
[ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
[ irq::i3#2 irq::i3#1 ]
[ irq::i4#2 irq::i4#1 ]
[ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
[ irq::i5#2 irq::i5#1 ]
[ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
[ irq::i1#2 irq::i1#1 ]
[ irq::i2#2 irq::i2#1 ]
[ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
[ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
[ main::i1#2 main::i1#1 ]
[ main::i2#2 main::i2#1 ]
[ main::i#2 main::i#1 ]
[ memset::dst#2 memset::dst#1 ]
Added variable sin_idx to live range equivalence class [ sin_idx ]
Added variable scroll_soft to live range equivalence class [ scroll_soft ]
Added variable scroll_ptr to live range equivalence class [ scroll_ptr ]
Added variable greet_zoomx to live range equivalence class [ greet_zoomx ]
Added variable greet_idx to live range equivalence class [ greet_idx ]
Added variable irq::$33 to live range equivalence class [ irq::$33 ]
Added variable irq::$29 to live range equivalence class [ irq::$29 ]
Added variable irq::$26 to live range equivalence class [ irq::$26 ]
Added variable irq::$27 to live range equivalence class [ irq::$27 ]
Added variable irq::col1#0 to live range equivalence class [ irq::col1#0 ]
Added variable irq::col1#1 to live range equivalence class [ irq::col1#1 ]
Added variable irq::col#0 to live range equivalence class [ irq::col#0 ]
Added variable irq::zoomval#0 to live range equivalence class [ irq::zoomval#0 ]
Added variable irq::$10 to live range equivalence class [ irq::$10 ]
Added variable irq::raster#0 to live range equivalence class [ irq::raster#0 ]
Complete equivalence classes
[ irq::line#10 irq::line#1 ]
[ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
[ irq::i#2 irq::i#1 ]
[ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
[ irq::l#2 irq::l#1 ]
[ irq::barcnt#2 irq::barcnt#1 ]
[ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
[ irq::i3#2 irq::i3#1 ]
[ irq::i4#2 irq::i4#1 ]
[ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
[ irq::i5#2 irq::i5#1 ]
[ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
[ irq::i1#2 irq::i1#1 ]
[ irq::i2#2 irq::i2#1 ]
[ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
[ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
[ main::i1#2 main::i1#1 ]
[ main::i2#2 main::i2#1 ]
[ main::i#2 main::i#1 ]
[ memset::dst#2 memset::dst#1 ]
[ sin_idx ]
[ scroll_soft ]
[ scroll_ptr ]
[ greet_zoomx ]
[ greet_idx ]
[ irq::$33 ]
[ irq::$29 ]
[ irq::$26 ]
[ irq::$27 ]
[ irq::col1#0 ]
[ irq::col1#1 ]
[ irq::col#0 ]
[ irq::zoomval#0 ]
[ irq::$10 ]
[ irq::raster#0 ]
Allocated zp[2]:2 [ memset::dst#2 memset::dst#1 ]
Allocated zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
Allocated zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
Allocated zp[1]:6 [ main::i1#2 main::i1#1 ]
Allocated zp[1]:7 [ main::i#2 main::i#1 ]
Allocated zp[1]:8 [ main::i2#2 main::i2#1 ]
Allocated zp[1]:9 [ irq::i1#2 irq::i1#1 ]
Allocated zp[1]:10 [ irq::i2#2 irq::i2#1 ]
Allocated zp[1]:11 [ irq::raster#0 ]
Allocated zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
Allocated zp[1]:13 [ irq::i5#2 irq::i5#1 ]
Allocated zp[1]:14 [ irq::l#2 irq::l#1 ]
Allocated zp[1]:15 [ irq::i3#2 irq::i3#1 ]
Allocated zp[1]:16 [ irq::i#2 irq::i#1 ]
Allocated zp[1]:17 [ irq::i4#2 irq::i4#1 ]
Allocated zp[1]:18 [ irq::line#10 irq::line#1 ]
Allocated zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
Allocated zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
Allocated zp[1]:21 [ irq::$29 ]
Allocated zp[1]:22 [ irq::$26 ]
Allocated zp[1]:23 [ irq::$27 ]
Allocated zp[1]:24 [ irq::$10 ]
Allocated zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
Allocated zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
Allocated zp[1]:27 [ irq::col1#0 ]
Allocated zp[1]:28 [ irq::col#0 ]
Allocated zp[1]:29 [ irq::col1#1 ]
Allocated zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
Allocated zp[1]:31 [ irq::zoomval#0 ]
Allocated zp[1]:32 [ irq::$33 ]
Allocated zp[1]:33 [ greet_zoomx ]
Allocated zp[1]:34 [ greet_idx ]
Allocated zp[1]:35 [ sin_idx ]
Allocated zp[1]:36 [ scroll_soft ]
Allocated zp[2]:37 [ scroll_ptr ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] sin_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [2] scroll_soft = 7 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [3] scroll_ptr = SCROLL_TEXT [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] greet_zoomx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [5] greet_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte a
Statement [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
Statement [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
Statement [17] callexecute *songPlay [ sin_idx scroll_soft scroll_ptr greet_idx ] ( [ sin_idx scroll_soft scroll_ptr greet_idx ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [28] irq::greet_offset#0 = greet_idx << 4 [ scroll_soft scroll_ptr irq::greet_offset#0 ] ( [ scroll_soft scroll_ptr irq::greet_offset#0 ] { } ) always clobbers reg byte a
Statement [32] if(scroll_soft!=$ff) goto irq::@return [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
Statement [33] scroll_soft = 7 [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
Statement [36] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_ptr irq::nxt#0 ] { } ) always clobbers reg byte a reg byte y
Statement [39] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a
Statement [40] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y
Statement [42] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a
Statement [44] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:13 [ irq::i5#2 irq::i5#1 ]
Statement [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:17 [ irq::i4#2 irq::i4#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
Statement [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:15 [ irq::i3#2 irq::i3#1 ]
Statement [52] irq::$27 = irq::$26 & 7 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] { } ) always clobbers reg byte a
Statement [56] irq::barcol#0 = irq::barcnt#2 << 4 [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
Statement [61] irq::sin_bar#1 = irq::sin_bar#2 + $a [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] { } ) always clobbers reg byte a
Statement [71] rasters[irq::l#2] = 0 [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:14 [ irq::l#2 irq::l#1 ]
Statement [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:16 [ irq::i#2 irq::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
Statement [75] irq::col1#1 = irq::col1#0 >> 1 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] { } ) always clobbers reg byte a
Statement [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] { } ) always clobbers reg byte a
Statement [97] if(greet_zoomx!=0) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:18 [ irq::line#10 irq::line#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
Statement [99] if(greet_idx!=GREET_COUNT) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Removing always clobbered register reg byte z as potential for zp[1]:18 [ irq::line#10 irq::line#1 ]
Removing always clobbered register reg byte z as potential for zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
Statement [100] greet_idx = 0 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Statement [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Statement [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] { } ) always clobbers reg byte z
Statement [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement asm { lda#0 } always clobbers reg byte a
Statement [116] callexecute *songInit [ ] ( main:7 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ]
Statement [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Statement [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Statement [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [134] *HARDWARE_IRQ = &irq [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [136] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' [ main::i2#2 ] ( main:7 [ main::i2#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::i2#2 main::i2#1 ]
Statement [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] [ main::i1#2 ] ( main:7 [ main::i1#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i1#2 main::i1#1 ]
Statement [146] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a
Statement [148] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Statement [1] sin_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [2] scroll_soft = 7 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [3] scroll_ptr = SCROLL_TEXT [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] greet_zoomx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [5] greet_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte z
Statement [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte a
Statement [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
Statement [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 [ sin_idx scroll_soft greet_zoomx greet_idx ] ( [ sin_idx scroll_soft greet_zoomx greet_idx ] { } ) always clobbers reg byte z
Statement [17] callexecute *songPlay [ sin_idx scroll_soft scroll_ptr greet_idx ] ( [ sin_idx scroll_soft scroll_ptr greet_idx ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [28] irq::greet_offset#0 = greet_idx << 4 [ scroll_soft scroll_ptr irq::greet_offset#0 ] ( [ scroll_soft scroll_ptr irq::greet_offset#0 ] { } ) always clobbers reg byte a
Statement [32] if(scroll_soft!=$ff) goto irq::@return [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
Statement [33] scroll_soft = 7 [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte z
Statement [36] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_ptr irq::nxt#0 ] { } ) always clobbers reg byte a reg byte y
Statement [39] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a
Statement [40] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y
Statement [42] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a
Statement [44] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a
Statement [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a
Statement [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] { } ) always clobbers reg byte a
Statement [52] irq::$27 = irq::$26 & 7 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$27 ] { } ) always clobbers reg byte a
Statement [56] irq::barcol#0 = irq::barcnt#2 << 4 [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#2 irq::idx#0 irq::barcol#0 ] { } ) always clobbers reg byte a
Statement [61] irq::sin_bar#1 = irq::sin_bar#2 + $a [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] ( [ scroll_soft scroll_ptr greet_idx irq::barcnt#2 irq::sin_bar#1 ] { } ) always clobbers reg byte a
Statement [71] rasters[irq::l#2] = 0 [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::l#2 ] { } ) always clobbers reg byte a
Statement [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#0 ] { } ) always clobbers reg byte a
Statement [75] irq::col1#1 = irq::col1#0 >> 1 [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 irq::col1#1 ] { } ) always clobbers reg byte a
Statement [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] ( [ sin_idx scroll_soft scroll_ptr greet_idx irq::i#2 irq::sin_col#2 ] { } ) always clobbers reg byte a
Statement [97] if(greet_zoomx!=0) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Statement [99] if(greet_idx!=GREET_COUNT) goto irq::@8 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [100] greet_idx = 0 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte z
Statement [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Statement [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#10 ] { } ) always clobbers reg byte a
Statement [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] ( [ scroll_soft greet_zoomx greet_idx irq::line#10 irq::wobble_idx#1 ] { } ) always clobbers reg byte z
Statement [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement asm { lda#0 } always clobbers reg byte a
Statement [116] callexecute *songInit [ ] ( main:7 [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z
Statement [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Statement [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Statement [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] [ main::i#2 ] ( main:7 [ main::i#2 ] { } ) always clobbers reg byte a
Statement [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [134] *HARDWARE_IRQ = &irq [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [136] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 [ ] ( main:7 [ ] { } ) always clobbers reg byte z
Statement [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' [ main::i2#2 ] ( main:7 [ main::i2#2 ] { } ) always clobbers reg byte a
Statement [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] [ main::i1#2 ] ( main:7 [ main::i1#2 ] { } ) always clobbers reg byte a
Statement [146] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a
Statement [148] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( main:7::memset:118 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
Potential registers zp[1]:18 [ irq::line#10 irq::line#1 ] : zp[1]:18 , reg byte x , reg byte y ,
Potential registers zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] : zp[1]:12 , reg byte x , reg byte y ,
Potential registers zp[1]:16 [ irq::i#2 irq::i#1 ] : zp[1]:16 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] : zp[1]:25 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:14 [ irq::l#2 irq::l#1 ] : zp[1]:14 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] : zp[1]:19 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] : zp[1]:26 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:15 [ irq::i3#2 irq::i3#1 ] : zp[1]:15 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:17 [ irq::i4#2 irq::i4#1 ] : zp[1]:17 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] : zp[1]:20 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:13 [ irq::i5#2 irq::i5#1 ] : zp[1]:13 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:9 [ irq::i1#2 irq::i1#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:10 [ irq::i2#2 irq::i2#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] : zp[1]:5 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:6 [ main::i1#2 main::i1#1 ] : zp[1]:6 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:8 [ main::i2#2 main::i2#1 ] : zp[1]:8 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , reg byte x , reg byte y , reg byte z ,
Potential registers zp[2]:2 [ memset::dst#2 memset::dst#1 ] : zp[2]:2 ,
Potential registers zp[1]:35 [ sin_idx ] : zp[1]:35 ,
Potential registers zp[1]:36 [ scroll_soft ] : zp[1]:36 ,
Potential registers zp[2]:37 [ scroll_ptr ] : zp[2]:37 ,
Potential registers zp[1]:33 [ greet_zoomx ] : zp[1]:33 ,
Potential registers zp[1]:34 [ greet_idx ] : zp[1]:34 ,
Potential registers zp[1]:32 [ irq::$33 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:21 [ irq::$29 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:22 [ irq::$26 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:23 [ irq::$27 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:27 [ irq::col1#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:29 [ irq::col1#1 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:28 [ irq::col#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:31 [ irq::zoomval#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:24 [ irq::$10 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , reg byte z ,
Potential registers zp[1]:11 [ irq::raster#0 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , reg byte z ,
REGISTER UPLIFT SCOPES
Uplift Scope [memset] 3,336.67: zp[2]:2 [ memset::dst#2 memset::dst#1 ]
Uplift Scope [irq] 454: zp[1]:4 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] 418.67: zp[1]:5 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] 262.6: zp[1]:9 [ irq::i1#2 irq::i1#1 ] 262.6: zp[1]:10 [ irq::i2#2 irq::i2#1 ] 56: zp[1]:11 [ irq::raster#0 ] 41.59: zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] 40.33: zp[1]:13 [ irq::i5#2 irq::i5#1 ] 36.67: zp[1]:14 [ irq::l#2 irq::l#1 ] 33: zp[1]:15 [ irq::i3#2 irq::i3#1 ] 31.31: zp[1]:16 [ irq::i#2 irq::i#1 ] 30.8: zp[1]:17 [ irq::i4#2 irq::i4#1 ] 25.26: zp[1]:18 [ irq::line#10 irq::line#1 ] 24.59: zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] 23.75: zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] 22: zp[1]:21 [ irq::$29 ] 22: zp[1]:22 [ irq::$26 ] 22: zp[1]:23 [ irq::$27 ] 22: zp[1]:24 [ irq::$10 ] 18.83: zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] 17.19: zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] 16.5: zp[1]:27 [ irq::col1#0 ] 16.5: zp[1]:28 [ irq::col#0 ] 12.83: zp[1]:29 [ irq::col1#1 ] 12: zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] 11: zp[1]:31 [ irq::zoomval#0 ] 4: zp[1]:32 [ irq::$33 ]
Uplift Scope [main] 370.33: zp[1]:6 [ main::i1#2 main::i1#1 ] 353.5: zp[1]:7 [ main::i#2 main::i#1 ] 336.67: zp[1]:8 [ main::i2#2 main::i2#1 ]
Uplift Scope [] 1.39: zp[1]:33 [ greet_zoomx ] 0.62: zp[1]:34 [ greet_idx ] 0.5: zp[1]:35 [ sin_idx ] 0.24: zp[1]:36 [ scroll_soft ] 0.2: zp[2]:37 [ scroll_ptr ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [MOS4569_VICIII]
Uplift Scope [MEGA65_VICIV]
Uplift Scope [F018_DMAGIC]
Uplift Scope [DMA_LIST_F018A]
Uplift Scope [DMA_LIST_F018B]
Uplift Scope [__start]
Uplifting [memset] best 19093 combination zp[2]:2 [ memset::dst#2 memset::dst#1 ]
Uplifting [irq] best 16053 combination reg byte y [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] reg byte z [ irq::i1#2 irq::i1#1 ] zp[1]:10 [ irq::i2#2 irq::i2#1 ] zp[1]:11 [ irq::raster#0 ] zp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] zp[1]:13 [ irq::i5#2 irq::i5#1 ] zp[1]:14 [ irq::l#2 irq::l#1 ] zp[1]:15 [ irq::i3#2 irq::i3#1 ] zp[1]:16 [ irq::i#2 irq::i#1 ] zp[1]:17 [ irq::i4#2 irq::i4#1 ] zp[1]:18 [ irq::line#10 irq::line#1 ] zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ] zp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] zp[1]:21 [ irq::$29 ] zp[1]:22 [ irq::$26 ] zp[1]:23 [ irq::$27 ] zp[1]:24 [ irq::$10 ] zp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ] zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] zp[1]:27 [ irq::col1#0 ] zp[1]:28 [ irq::col#0 ] zp[1]:29 [ irq::col1#1 ] zp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] zp[1]:31 [ irq::zoomval#0 ] zp[1]:32 [ irq::$33 ]
Limited combination testing to 100 combinations of 319815680 possible.
Uplifting [main] best 15653 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ]
Uplifting [] best 15653 combination zp[1]:33 [ greet_zoomx ] zp[1]:34 [ greet_idx ] zp[1]:35 [ sin_idx ] zp[1]:36 [ scroll_soft ] zp[2]:37 [ scroll_ptr ]
Uplifting [MOS6526_CIA] best 15653 combination
Uplifting [MOS6569_VICII] best 15653 combination
Uplifting [MOS6581_SID] best 15653 combination
Uplifting [MOS4569_VICIII] best 15653 combination
Uplifting [MEGA65_VICIV] best 15653 combination
Uplifting [F018_DMAGIC] best 15653 combination
Uplifting [DMA_LIST_F018A] best 15653 combination
Uplifting [DMA_LIST_F018B] best 15653 combination
Uplifting [__start] best 15653 combination
Attempting to uplift remaining variables inzp[1]:10 [ irq::i2#2 irq::i2#1 ]
Uplifting [irq] best 14653 combination reg byte z [ irq::i2#2 irq::i2#1 ]
Attempting to uplift remaining variables inzp[1]:11 [ irq::raster#0 ]
Uplifting [irq] best 14323 combination reg byte a [ irq::raster#0 ]
Attempting to uplift remaining variables inzp[1]:12 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
Uplifting [irq] best 14260 combination reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
Attempting to uplift remaining variables inzp[1]:13 [ irq::i5#2 irq::i5#1 ]
Uplifting [irq] best 14140 combination reg byte x [ irq::i5#2 irq::i5#1 ]
Attempting to uplift remaining variables inzp[1]:14 [ irq::l#2 irq::l#1 ]
Uplifting [irq] best 14020 combination reg byte x [ irq::l#2 irq::l#1 ]
Attempting to uplift remaining variables inzp[1]:15 [ irq::i3#2 irq::i3#1 ]
Uplifting [irq] best 13870 combination reg byte x [ irq::i3#2 irq::i3#1 ]
Attempting to uplift remaining variables inzp[1]:16 [ irq::i#2 irq::i#1 ]
Uplifting [irq] best 13540 combination reg byte x [ irq::i#2 irq::i#1 ]
Attempting to uplift remaining variables inzp[1]:17 [ irq::i4#2 irq::i4#1 ]
Uplifting [irq] best 13420 combination reg byte x [ irq::i4#2 irq::i4#1 ]
Attempting to uplift remaining variables inzp[1]:18 [ irq::line#10 irq::line#1 ]
Uplifting [irq] best 13420 combination zp[1]:18 [ irq::line#10 irq::line#1 ]
Attempting to uplift remaining variables inzp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
Uplifting [irq] best 13420 combination zp[1]:19 [ irq::barcnt#2 irq::barcnt#1 ]
Attempting to uplift remaining variables inzp[1]:20 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
Uplifting [irq] best 13359 combination reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
Attempting to uplift remaining variables inzp[1]:21 [ irq::$29 ]
Uplifting [irq] best 13299 combination reg byte a [ irq::$29 ]
Attempting to uplift remaining variables inzp[1]:22 [ irq::$26 ]
Uplifting [irq] best 13239 combination reg byte a [ irq::$26 ]
Attempting to uplift remaining variables inzp[1]:23 [ irq::$27 ]
Uplifting [irq] best 13179 combination reg byte a [ irq::$27 ]
Attempting to uplift remaining variables inzp[1]:24 [ irq::$10 ]
Uplifting [irq] best 13119 combination reg byte a [ irq::$10 ]
Attempting to uplift remaining variables inzp[1]:25 [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
Uplifting [irq] best 13026 combination reg byte y [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
Attempting to uplift remaining variables inzp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
Uplifting [irq] best 13026 combination zp[1]:26 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
Attempting to uplift remaining variables inzp[1]:27 [ irq::col1#0 ]
Uplifting [irq] best 12936 combination reg byte a [ irq::col1#0 ]
Attempting to uplift remaining variables inzp[1]:28 [ irq::col#0 ]
Uplifting [irq] best 12846 combination reg byte a [ irq::col#0 ]
Attempting to uplift remaining variables inzp[1]:29 [ irq::col1#1 ]
Uplifting [irq] best 12636 combination reg byte a [ irq::col1#1 ]
Attempting to uplift remaining variables inzp[1]:30 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
Uplifting [irq] best 12626 combination reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
Attempting to uplift remaining variables inzp[1]:31 [ irq::zoomval#0 ]
Uplifting [irq] best 12536 combination reg byte a [ irq::zoomval#0 ]
Attempting to uplift remaining variables inzp[1]:32 [ irq::$33 ]
Uplifting [irq] best 12530 combination reg byte a [ irq::$33 ]
Attempting to uplift remaining variables inzp[1]:33 [ greet_zoomx ]
Uplifting [] best 12530 combination zp[1]:33 [ greet_zoomx ]
Attempting to uplift remaining variables inzp[1]:34 [ greet_idx ]
Uplifting [] best 12530 combination zp[1]:34 [ greet_idx ]
Attempting to uplift remaining variables inzp[1]:35 [ sin_idx ]
Uplifting [] best 12530 combination zp[1]:35 [ sin_idx ]
Attempting to uplift remaining variables inzp[1]:36 [ scroll_soft ]
Uplifting [] best 12530 combination zp[1]:36 [ scroll_soft ]
Allocated (was zp[1]:18) zp[1]:4 [ irq::line#10 irq::line#1 ]
Allocated (was zp[1]:19) zp[1]:5 [ irq::barcnt#2 irq::barcnt#1 ]
Allocated (was zp[1]:26) zp[1]:6 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
Allocated (was zp[1]:33) zp[1]:7 [ greet_zoomx ]
Allocated (was zp[1]:34) zp[1]:8 [ greet_idx ]
Allocated (was zp[1]:35) zp[1]:9 [ sin_idx ]
Allocated (was zp[1]:36) zp[1]:10 [ scroll_soft ]
Allocated (was zp[2]:37) zp[2]:11 [ scroll_ptr ]
Interrupt procedure irq clobbers AXYZcnzvidePSB
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Raster65 Demo re-implementation in C by Jesper Gravgaard
// Based on RASTER65 assembler demo made in 2015 and updated in 2020 by DEFT
// https://mega.scryptos.com/sharefolder/MEGA/MEGA65+filehost
// https://www.forum64.de/index.php?thread/104591-xemu-vic-iv-implementation-update/&postID=1560511#post1560511
/// @file
/// MEGA65 Registers and Constants
/// @file
/// The MOS 6526 Complex Interface Adapter (CIA)
///
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
// Upstart
.cpu _45gs02
// MEGA65 platform executable starting in C64 mode.
.file [name="raster65.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
/// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR_ALL = $7f
/// VICII IRQ Status/Enable Raster
// @see #IRQ_ENABLE #IRQ_STATUS
/// 0 | RST| Reaching a certain raster line. The line is specified by writing
/// | | to register 0xd012 and bit 7 of $d011 and internally stored by
/// | | the VIC for the raster compare. The test for reaching the
/// | | interrupt raster line is done in cycle 0 of every line (for line
/// | | 0, in cycle 1).
.const IRQ_RASTER = 1
/// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
/// RAM in 0xA000, 0xE000 I/O in 0xD000
.const PROCPORT_RAM_IO = 5
// Logo start screen row
.const LOGO_ROW = 3
// Scroll screen row
.const SCROLL_ROW = $d
// Greeting screen row
.const GREET_ROW = $14
// y rasterline where IRQ starts
.const IRQ_Y = $16
// y rasterline where scrolly starts
.const SCROLL_Y = $66
// size of raster behind scrolly
.const SCROLL_BLACKBARS = $13
// The number of raster lines
.const RASTER_LINES = $d8
// The number of greetings
.const GREET_COUNT = $f
.const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
.const OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
.const OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
.const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
.const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
.const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
.const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
.const SIZEOF_CHAR = 1
/// Processor port data direction register
.label PROCPORT_DDR = 0
/// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
/// The VIC-II MOS 6567/6569
.label VICII = $d000
/// The VIC III MOS 4567/4569
.label VICIII = $d000
/// The VIC IV
.label VICIV = $d000
/// Palette RED
.label PALETTE_RED = $d100
/// Palette GREEN
.label PALETTE_GREEN = $d200
/// Palette BLUE
.label PALETTE_BLUE = $d300
/// Color Ram
.label COLORRAM = $d800
/// Default address of screen character matrix
.label DEFAULT_SCREEN = $400
/// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
/// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// Pointer to the song init routine
.label songInit = SONG
// Pointer to the song play routine
.label songPlay = SONG+3
// Sine Position (used across effects)
.label sin_idx = 9
// scroll soft position of text scrolly (0-7)
.label scroll_soft = $a
// scroll text pointer to next char
.label scroll_ptr = $b
// Zoom Position
.label greet_zoomx = 7
// The greeting currently being shown
.label greet_idx = 8
.segment Code
// __start
__start: {
jmp __init1
// __start::__init1
__init1:
// [1] sin_idx = 0 -- vbuz1=vbuc1
ldz #0
stz.z sin_idx
// [2] scroll_soft = 7 -- vbuz1=vbuc1
ldz #7
stz.z scroll_soft
// [3] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_ptr
lda #>SCROLL_TEXT
sta.z scroll_ptr+1
// [4] greet_zoomx = 0 -- vbuz1=vbuc1
ldz #0
stz.z greet_zoomx
// [5] greet_idx = 0 -- vbuz1=vbuc1
ldz #0
stz.z greet_idx
// [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1]
__b1_from___init1:
jmp __b1
// __start::@1
__b1:
// [7] call main
jsr main
jmp __breturn
// __start::@return
__breturn:
// [8] return
rts
}
// irq
// BIG INTERRUPT LOOP
irq: {
.label line = 4
.label sin_bar = 6
.label barcnt = 5
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
pha
phx
phy
phz
// [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// force NTSC every frame (hehe)
lda #$80
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
// [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
ldz #IRQ_RASTER
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS
// [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 -- _deref_pbuc1=vbuc2
// reset x scroll
ldz #0
stz VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
// [12] sin_idx = ++ sin_idx -- vbuz1=_inc_vbuz1
inc.z sin_idx
// [13] irq::wobble_idx#0 = sin_idx -- vbuxx=vbuz1
// Generate Raster Bars and more
ldx.z sin_idx
// [14] phi from irq to irq::@2 [phi:irq->irq::@2]
__b2_from_irq:
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#0 [phi:irq->irq::@2#0] -- register_copy
// [14] phi irq::line#10 = 0 [phi:irq->irq::@2#1] -- vbuz1=vbuc1
ldz #0
stz.z line
jmp __b2
// irq::@2
__b2:
// [15] if(irq::line#10!=RASTER_LINES) goto irq::@3 -- vbuz1_neq_vbuc1_then_la1
ldz #RASTER_LINES
cpz.z line
bne __b3
// [16] phi from irq::@2 to irq::@4 [phi:irq::@2->irq::@4]
__b4_from___b2:
jmp __b4
// irq::@4
__b4:
// [17] callexecute *songPlay -- call__deref_pprc1
// play music
jsr songPlay
jmp __b1
// irq::@1
__b1:
// [18] irq::sin_col#0 = sin_idx -- vbuyy=vbuz1
// Set up colors behind logo, scroll and greets
ldy.z sin_idx
// [19] phi from irq::@1 to irq::@17 [phi:irq::@1->irq::@17]
__b17_from___b1:
// [19] phi irq::sin_col#2 = irq::sin_col#0 [phi:irq::@1->irq::@17#0] -- register_copy
// [19] phi irq::i#2 = 0 [phi:irq::@1->irq::@17#1] -- vbuxx=vbuc1
ldx #0
jmp __b17
// irq::@17
__b17:
// [20] if(irq::i#2<$28) goto irq::@18 -- vbuxx_lt_vbuc1_then_la1
cpx #$28
bcc __b18
// [21] phi from irq::@17 to irq::@19 [phi:irq::@17->irq::@19]
__b19_from___b17:
// [21] phi irq::l#2 = 0 [phi:irq::@17->irq::@19#0] -- vbuxx=vbuc1
ldx #0
jmp __b19
// Set all raster bars to black
// irq::@19
__b19:
// [22] if(irq::l#2!=RASTER_LINES) goto irq::@20 -- vbuxx_neq_vbuc1_then_la1
cpx #RASTER_LINES
bne __b20
jmp __b21
// irq::@21
__b21:
// [23] irq::sin_bar#0 = sin_idx -- vbuz1=vbuz2
// Big block of bars (16)
lda.z sin_idx
sta.z sin_bar
// [24] phi from irq::@21 to irq::@22 [phi:irq::@21->irq::@22]
__b22_from___b21:
// [24] phi irq::sin_bar#2 = irq::sin_bar#0 [phi:irq::@21->irq::@22#0] -- register_copy
// [24] phi irq::barcnt#2 = 0 [phi:irq::@21->irq::@22#1] -- vbuz1=vbuc1
ldz #0
stz.z barcnt
jmp __b22
// irq::@22
__b22:
// [25] if(irq::barcnt#2<$10) goto irq::@23 -- vbuz1_lt_vbuc1_then_la1
lda.z barcnt
cmp #$10
bcc __b23
// [26] phi from irq::@22 to irq::@29 [phi:irq::@22->irq::@29]
__b29_from___b22:
// [26] phi irq::i3#2 = 0 [phi:irq::@22->irq::@29#0] -- vbuxx=vbuc1
ldx #0
jmp __b29
// Produce dark area behind text
// irq::@29
__b29:
// [27] if(irq::i3#2<$13) goto irq::@30 -- vbuxx_lt_vbuc1_then_la1
cpx #$13
bcc __b30
jmp __b31
// irq::@31
__b31:
// [28] irq::greet_offset#0 = greet_idx << 4 -- vbuyy=vbuz1_rol_4
// Set up greetings
lda.z greet_idx
asl
asl
asl
asl
tay
// [29] phi from irq::@31 to irq::@32 [phi:irq::@31->irq::@32]
__b32_from___b31:
// [29] phi irq::greet_offset#2 = irq::greet_offset#0 [phi:irq::@31->irq::@32#0] -- register_copy
// [29] phi irq::i4#2 = 0 [phi:irq::@31->irq::@32#1] -- vbuxx=vbuc1
ldx #0
jmp __b32
// irq::@32
__b32:
// [30] if(irq::i4#2<$10) goto irq::@33 -- vbuxx_lt_vbuc1_then_la1
cpx #$10
bcc __b33
jmp __b34
// irq::@34
__b34:
// [31] scroll_soft = -- scroll_soft -- vbuz1=_dec_vbuz1
dec.z scroll_soft
// [32] if(scroll_soft!=$ff) goto irq::@return -- vbuz1_neq_vbuc1_then_la1
ldz #$ff
cpz.z scroll_soft
bne __breturn
jmp __b35
// irq::@35
__b35:
// [33] scroll_soft = 7 -- vbuz1=vbuc1
ldz #7
stz.z scroll_soft
// [34] phi from irq::@35 to irq::@36 [phi:irq::@35->irq::@36]
__b36_from___b35:
// [34] phi irq::i5#2 = 0 [phi:irq::@35->irq::@36#0] -- vbuxx=vbuc1
ldx #0
jmp __b36
// Move scroll on screen
// irq::@36
__b36:
// [35] if(irq::i5#2<$27) goto irq::@37 -- vbuxx_lt_vbuc1_then_la1
cpx #$27
bcc __b37
jmp __b38
// irq::@38
__b38:
// [36] irq::nxt#0 = *scroll_ptr -- vbuaa=_deref_pbuz1
// Show next char
ldy #0
lda (scroll_ptr),y
// [37] scroll_ptr = ++ scroll_ptr -- pbuz1=_inc_pbuz1
inw.z scroll_ptr
// [38] if(irq::nxt#0!=0) goto irq::@40 -- vbuaa_neq_0_then_la1
cmp #0
bne __b40_from___b38
jmp __b39
// irq::@39
__b39:
// [39] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_ptr
lda #>SCROLL_TEXT
sta.z scroll_ptr+1
// [40] irq::nxt#1 = *scroll_ptr -- vbuaa=_deref_pbuz1
ldy #0
lda (scroll_ptr),y
// [41] phi from irq::@38 irq::@39 to irq::@40 [phi:irq::@38/irq::@39->irq::@40]
__b40_from___b38:
__b40_from___b39:
// [41] phi irq::nxt#2 = irq::nxt#0 [phi:irq::@38/irq::@39->irq::@40#0] -- register_copy
jmp __b40
// irq::@40
__b40:
// [42] irq::$33 = irq::nxt#2 & $bf -- vbuaa=vbuaa_band_vbuc1
and #$bf
// [43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33 -- _deref_pbuc1=vbuaa
sta DEFAULT_SCREEN+SCROLL_ROW*$28+$27
jmp __breturn
// irq::@return
__breturn:
// [44] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
plz
ply
plx
pla
rti
// irq::@37
__b37:
// [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda DEFAULT_SCREEN+SCROLL_ROW*$28+1,x
sta DEFAULT_SCREEN+SCROLL_ROW*$28,x
// [46] irq::i5#1 = ++ irq::i5#2 -- vbuxx=_inc_vbuxx
inx
// [34] phi from irq::@37 to irq::@36 [phi:irq::@37->irq::@36]
__b36_from___b37:
// [34] phi irq::i5#2 = irq::i5#1 [phi:irq::@37->irq::@36#0] -- register_copy
jmp __b36
// irq::@33
__b33:
// [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf -- vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2
lda #$bf
and GREETING,y
// [48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29 -- pbuc1_derefidx_vbuxx=vbuaa
sta DEFAULT_SCREEN+GREET_ROW*$28+$d,x
// [49] irq::greet_offset#1 = ++ irq::greet_offset#2 -- vbuyy=_inc_vbuyy
iny
// [50] irq::i4#1 = ++ irq::i4#2 -- vbuxx=_inc_vbuxx
inx
// [29] phi from irq::@33 to irq::@32 [phi:irq::@33->irq::@32]
__b32_from___b33:
// [29] phi irq::greet_offset#2 = irq::greet_offset#1 [phi:irq::@33->irq::@32#0] -- register_copy
// [29] phi irq::i4#2 = irq::i4#1 [phi:irq::@33->irq::@32#1] -- register_copy
jmp __b32
// irq::@30
__b30:
// [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1
lda rasters+SCROLL_Y,x
lsr
// [52] irq::$27 = irq::$26 & 7 -- vbuaa=vbuaa_band_vbuc1
and #7
// [53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27 -- pbuc1_derefidx_vbuxx=vbuaa
sta rasters+SCROLL_Y,x
// [54] irq::i3#1 = ++ irq::i3#2 -- vbuxx=_inc_vbuxx
inx
// [26] phi from irq::@30 to irq::@29 [phi:irq::@30->irq::@29]
__b29_from___b30:
// [26] phi irq::i3#2 = irq::i3#1 [phi:irq::@30->irq::@29#0] -- register_copy
jmp __b29
// irq::@23
__b23:
// [55] irq::idx#0 = SINE[irq::sin_bar#2] -- vbuxx=pbuc1_derefidx_vbuz1
ldy.z sin_bar
ldx SINE,y
// [56] irq::barcol#0 = irq::barcnt#2 << 4 -- vbuyy=vbuz1_rol_4
lda.z barcnt
asl
asl
asl
asl
tay
// [57] phi from irq::@23 to irq::@24 [phi:irq::@23->irq::@24]
__b24_from___b23:
// [57] phi irq::idx#3 = irq::idx#0 [phi:irq::@23->irq::@24#0] -- register_copy
// [57] phi irq::barcol#3 = irq::barcol#0 [phi:irq::@23->irq::@24#1] -- register_copy
// [57] phi irq::i1#2 = 0 [phi:irq::@23->irq::@24#2] -- vbuzz=vbuc1
ldz #0
jmp __b24
// irq::@24
__b24:
// [58] if(irq::i1#2<$10) goto irq::@25 -- vbuzz_lt_vbuc1_then_la1
cpz #$10
bcc __b25
// [59] phi from irq::@24 to irq::@26 [phi:irq::@24->irq::@26]
__b26_from___b24:
// [59] phi irq::idx#4 = irq::idx#3 [phi:irq::@24->irq::@26#0] -- register_copy
// [59] phi irq::barcol#4 = irq::barcol#3 [phi:irq::@24->irq::@26#1] -- register_copy
// [59] phi irq::i2#2 = 0 [phi:irq::@24->irq::@26#2] -- vbuzz=vbuc1
ldz #0
jmp __b26
// irq::@26
__b26:
// [60] if(irq::i2#2<$f) goto irq::@27 -- vbuzz_lt_vbuc1_then_la1
cpz #$f
bcc __b27
jmp __b28
// irq::@28
__b28:
// [61] irq::sin_bar#1 = irq::sin_bar#2 + $a -- vbuz1=vbuz1_plus_vbuc1
lda #$a
clc
adc.z sin_bar
sta.z sin_bar
// [62] irq::barcnt#1 = ++ irq::barcnt#2 -- vbuz1=_inc_vbuz1
inc.z barcnt
// [24] phi from irq::@28 to irq::@22 [phi:irq::@28->irq::@22]
__b22_from___b28:
// [24] phi irq::sin_bar#2 = irq::sin_bar#1 [phi:irq::@28->irq::@22#0] -- register_copy
// [24] phi irq::barcnt#2 = irq::barcnt#1 [phi:irq::@28->irq::@22#1] -- register_copy
jmp __b22
// irq::@27
__b27:
// [63] irq::barcol#2 = -- irq::barcol#4 -- vbuyy=_dec_vbuyy
dey
// [64] rasters[irq::idx#4] = irq::barcol#2 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta rasters,x
// [65] irq::idx#2 = ++ irq::idx#4 -- vbuxx=_inc_vbuxx
inx
// [66] irq::i2#1 = ++ irq::i2#2 -- vbuzz=_inc_vbuzz
inz
// [59] phi from irq::@27 to irq::@26 [phi:irq::@27->irq::@26]
__b26_from___b27:
// [59] phi irq::idx#4 = irq::idx#2 [phi:irq::@27->irq::@26#0] -- register_copy
// [59] phi irq::barcol#4 = irq::barcol#2 [phi:irq::@27->irq::@26#1] -- register_copy
// [59] phi irq::i2#2 = irq::i2#1 [phi:irq::@27->irq::@26#2] -- register_copy
jmp __b26
// irq::@25
__b25:
// [67] rasters[irq::idx#3] = irq::barcol#3 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta rasters,x
// [68] irq::idx#1 = ++ irq::idx#3 -- vbuxx=_inc_vbuxx
inx
// [69] irq::barcol#1 = ++ irq::barcol#3 -- vbuyy=_inc_vbuyy
iny
// [70] irq::i1#1 = ++ irq::i1#2 -- vbuzz=_inc_vbuzz
inz
// [57] phi from irq::@25 to irq::@24 [phi:irq::@25->irq::@24]
__b24_from___b25:
// [57] phi irq::idx#3 = irq::idx#1 [phi:irq::@25->irq::@24#0] -- register_copy
// [57] phi irq::barcol#3 = irq::barcol#1 [phi:irq::@25->irq::@24#1] -- register_copy
// [57] phi irq::i1#2 = irq::i1#1 [phi:irq::@25->irq::@24#2] -- register_copy
jmp __b24
// irq::@20
__b20:
// [71] rasters[irq::l#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta rasters,x
// [72] irq::l#1 = ++ irq::l#2 -- vbuxx=_inc_vbuxx
inx
// [21] phi from irq::@20 to irq::@19 [phi:irq::@20->irq::@19]
__b19_from___b20:
// [21] phi irq::l#2 = irq::l#1 [phi:irq::@20->irq::@19#0] -- register_copy
jmp __b19
// irq::@18
__b18:
// [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2
// Greeting colors
lda SINE,y
lsr
lsr
// [74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+GREET_ROW*$28,x
// [75] irq::col1#1 = irq::col1#0 >> 1 -- vbuaa=vbuaa_ror_1
// Logo colors
lsr
// [76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28-1,x
// [77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+1*$28-2,x
// [78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+2*$28-3,x
// [79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+3*$28-4,x
// [80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+4*$28-5,x
// [81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+5*$28-6,x
// [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
// Scroll colors
lda PAL_GREEN,y
sta COLORRAM+SCROLL_ROW*$28,x
// [83] irq::sin_col#1 = ++ irq::sin_col#2 -- vbuyy=_inc_vbuyy
iny
// [84] irq::i#1 = ++ irq::i#2 -- vbuxx=_inc_vbuxx
inx
// [19] phi from irq::@18 to irq::@17 [phi:irq::@18->irq::@17]
__b17_from___b18:
// [19] phi irq::sin_col#2 = irq::sin_col#1 [phi:irq::@18->irq::@17#0] -- register_copy
// [19] phi irq::i#2 = irq::i#1 [phi:irq::@18->irq::@17#1] -- register_copy
jmp __b17
// irq::@3
__b3:
// [85] irq::col#0 = rasters[irq::line#10] -- vbuaa=pbuc1_derefidx_vbuz1
ldy.z line
lda rasters,y
// [86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR
// [87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR
// [88] if(irq::line#10<SCROLL_Y) goto irq::@5 -- vbuz1_lt_vbuc1_then_la1
lda.z line
cmp #SCROLL_Y
bcc __b5
jmp __b11
// irq::@11
__b11:
// [89] if(irq::line#10==SCROLL_Y) goto irq::@6 -- vbuz1_eq_vbuc1_then_la1
ldz #SCROLL_Y
cpz.z line
beq __b6
jmp __b12
// irq::@12
__b12:
// [90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7 -- vbuz1_eq_vbuc1_then_la1
ldz #SCROLL_Y+SCROLL_BLACKBARS
cpz.z line
beq __b7
jmp __b13
// irq::@13
__b13:
// [91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
ldz #SCROLL_Y+SCROLL_BLACKBARS+1
cpz.z line
bne __b8_from___b13
jmp __b14
// irq::@14
__b14:
// [92] irq::zoomval#0 = SINE[greet_zoomx] -- vbuaa=pbuc1_derefidx_vbuz1
// if raster position > SCROLL_Y pos do zoom
ldy.z greet_zoomx
lda SINE,y
// [93] greet_zoomx = ++ greet_zoomx -- vbuz1=_inc_vbuz1
inc.z greet_zoomx
// [94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0 -- _deref_pbuc1=vbuaa
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
// [95] irq::$10 = irq::zoomval#0 + 1 -- vbuaa=vbuaa_plus_1
inc
// [96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10 -- _deref_pbuc1=vbuaa
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// [97] if(greet_zoomx!=0) goto irq::@8 -- vbuz1_neq_0_then_la1
lda.z greet_zoomx
bne __b8_from___b14
jmp __b15
// irq::@15
__b15:
// [98] greet_idx = ++ greet_idx -- vbuz1=_inc_vbuz1
inc.z greet_idx
// [99] if(greet_idx!=GREET_COUNT) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
ldz #GREET_COUNT
cpz.z greet_idx
bne __b8_from___b15
jmp __b16
// irq::@16
__b16:
// [100] greet_idx = 0 -- vbuz1=vbuc1
ldz #0
stz.z greet_idx
// [101] phi from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7 to irq::@8 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8]
__b8_from___b13:
__b8_from___b14:
__b8_from___b15:
__b8_from___b16:
__b8_from___b5:
__b8_from___b6:
__b8_from___b7:
// [101] phi irq::wobble_idx#7 = irq::wobble_idx#10 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8#0] -- register_copy
jmp __b8
// irq::@8
__b8:
// [102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1
// Wait for the next raster line
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
jmp __b9
// irq::@9
__b9:
// [103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9 -- vbuaa_eq__deref_pbuc1_then_la1
cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
beq __b9
jmp __b10
// irq::@10
__b10:
// [104] irq::line#1 = ++ irq::line#10 -- vbuz1=_inc_vbuz1
inc.z line
// [14] phi from irq::@10 to irq::@2 [phi:irq::@10->irq::@2]
__b2_from___b10:
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#7 [phi:irq::@10->irq::@2#0] -- register_copy
// [14] phi irq::line#10 = irq::line#1 [phi:irq::@10->irq::@2#1] -- register_copy
jmp __b2
// irq::@7
__b7:
// [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
// if raster position > SCROLL_Y pos do nozoom
// default value
ldz #$50
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
jmp __b8_from___b7
// irq::@6
__b6:
// [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
// if raster position = SCROLL_Y pos do scroll
// no wobbling from this point
ldz #$50
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft -- _deref_pbuc1=vbuz1
// set softscroll
lda.z scroll_soft
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
jmp __b8_from___b6
// irq::@5
__b5:
// [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] -- _deref_pbuc1=pbuc2_derefidx_vbuxx
// if raster position < SCROLL_Y pos do wobble Logo!
lda SINE,x
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// [109] irq::wobble_idx#1 = ++ irq::wobble_idx#10 -- vbuxx=_inc_vbuxx
inx
// [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 -- _deref_pbuc1=vbuc2
// No zooming
ldz #$66
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
jmp __b8_from___b5
}
// main
main: {
// [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 -- _deref_pbuc1=vbuc2
// Enable MEGA65 features
ldz #$47
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
// [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 -- _deref_pbuc1=vbuc2
ldz #$53
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
// [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// Enable 48MHz fast mode
lda #$40
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
// [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #$40
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
// asm { lda#0 }
// Initialize music
lda #0
// [116] callexecute *songInit -- call__deref_pprc1
jsr songInit
// [117] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
jmp __b1
// main::@1
__b1:
// [118] call memset
// Clear screen
// [144] phi from main::@1 to memset [phi:main::@1->memset]
memset_from___b1:
jsr memset
// [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
// [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
ldx #0
jmp __b2
// Put MEGA logo on screen
// main::@2
__b2:
// [120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3 -- vbuxx_lt_vbuc1_then_la1
cpx #$bc*SIZEOF_CHAR
bcc __b3
// [121] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
__b4_from___b2:
// [121] phi main::i2#2 = 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1
ldx #0
jmp __b4
// Put '*' as default greeting
// main::@4
__b4:
// [122] if(main::i2#2<$28) goto main::@5 -- vbuxx_lt_vbuc1_then_la1
cpx #$28
bcc __b5
// [123] phi from main::@4 to main::@6 [phi:main::@4->main::@6]
__b6_from___b4:
// [123] phi main::i#2 = 0 [phi:main::@4->main::@6#0] -- vbuxx=vbuc1
ldx #0
jmp __b6
// [123] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
__b6_from___b6:
// [123] phi main::i#2 = main::i#1 [phi:main::@6->main::@6#0] -- register_copy
jmp __b6
// main::@6
__b6:
// [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_RED,x
sta PALETTE_RED,x
// [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_GREEN,x
sta PALETTE_GREEN,x
// [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_BLUE,x
sta PALETTE_BLUE,x
// [127] main::i#1 = ++ main::i#2 -- vbuxx=_inc_vbuxx
inx
// [128] if(main::i#1!=0) goto main::@6 -- vbuxx_neq_0_then_la1
cpx #0
bne __b6_from___b6
jmp __b7
// main::@7
__b7:
// asm { sei }
// Set up raster interrupts C64 style
sei
// [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
ldz #CIA_INTERRUPT_CLEAR_ALL
stz CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
// [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y -- _deref_pbuc1=vbuc2
// Set raster line to 0x16
ldz #IRQ_Y
stz VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
// [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
// [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
ldz #IRQ_RASTER
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE
// [134] *HARDWARE_IRQ = &irq -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<irq
sta HARDWARE_IRQ
lda #>irq
sta HARDWARE_IRQ+1
// [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
// no kernal or BASIC rom visible
ldz #PROCPORT_DDR_MEMORY_MASK
stz.z PROCPORT_DDR
// [136] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
ldz #PROCPORT_RAM_IO
stz.z PROCPORT
// [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 -- _deref_pbuc1=vbuc2
// open sideborder
ldz #1
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO
// asm { cli }
// Enable IRQ
cli
// [139] phi from main::@7 main::@8 to main::@8 [phi:main::@7/main::@8->main::@8]
__b8_from___b7:
__b8_from___b8:
jmp __b8
// main::@8
__b8:
jmp __b8_from___b8
// main::@5
__b5:
// [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' -- pbuc1_derefidx_vbuxx=vbuc2
lda #'*'
sta DEFAULT_SCREEN+GREET_ROW*$28,x
// [141] main::i2#1 = ++ main::i2#2 -- vbuxx=_inc_vbuxx
inx
// [121] phi from main::@5 to main::@4 [phi:main::@5->main::@4]
__b4_from___b5:
// [121] phi main::i2#2 = main::i2#1 [phi:main::@5->main::@4#0] -- register_copy
jmp __b4
// main::@3
__b3:
// [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda MEGA_LOGO,x
sta DEFAULT_SCREEN+LOGO_ROW*$28,x
// [143] main::i1#1 = ++ main::i1#2 -- vbuxx=_inc_vbuxx
inx
// [119] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
__b2_from___b3:
// [119] phi main::i1#2 = main::i1#1 [phi:main::@3->main::@2#0] -- register_copy
jmp __b2
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(void *str, char c, unsigned int num)
memset: {
.const c = ' '
.const num = $28*$19
.label str = DEFAULT_SCREEN
.label end = str+num
.label dst = 2
// [145] phi from memset to memset::@1 [phi:memset->memset::@1]
__b1_from_memset:
// [145] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
lda #<str
sta.z dst
lda #>str
sta.z dst+1
jmp __b1
// memset::@1
__b1:
// [146] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
lda.z dst+1
cmp #>end
bne __b2
lda.z dst
cmp #<end
bne __b2
jmp __breturn
// memset::@return
__breturn:
// [147] return
rts
// memset::@2
__b2:
// [148] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// [149] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
inw.z dst
// [145] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
__b1_from___b2:
// [145] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
jmp __b1
}
// File Data
.segment Data
// A MEGA logo
MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf
// Greetings
GREETING: .text " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
.byte 0
// Scroll text
SCROLL_TEXT: .text " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
.byte 0
.pc = $fc0 "SONG"
// Music at an absolute address
SONG:
.import c64 "DiscoZak_2SID_patched.prg"
.pc = $2c00 "SINE"
// Sine Values 0-183
SINE:
.fill 256, 91.5 + 91.5*sin(i*2*PI/256)
.pc = $3000 "rasters"
// Moving Raster Bars
rasters: .fill RASTER_LINES, 0
.pc = $2d00 "PAL_RED"
PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff
.pc = $2e00 "PAL_GREEN"
PAL_GREEN: .byte 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff
.pc = $2f00 "PAL_BLUE"
PAL_BLUE: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __init1
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b17
Removing instruction jmp __b19
Removing instruction jmp __b21
Removing instruction jmp __b22
Removing instruction jmp __b29
Removing instruction jmp __b31
Removing instruction jmp __b32
Removing instruction jmp __b34
Removing instruction jmp __b35
Removing instruction jmp __b36
Removing instruction jmp __b38
Removing instruction jmp __b39
Removing instruction jmp __b40
Removing instruction jmp __breturn
Removing instruction jmp __b24
Removing instruction jmp __b26
Removing instruction jmp __b28
Removing instruction jmp __b11
Removing instruction jmp __b12
Removing instruction jmp __b13
Removing instruction jmp __b14
Removing instruction jmp __b15
Removing instruction jmp __b16
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldz #0
Replacing instruction lda.z line with TYA
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b40_from___b38 with __b40
Replacing label __b8_from___b13 with __b8
Replacing label __b8_from___b14 with __b8
Replacing label __b8_from___b15 with __b8
Replacing label __b8_from___b7 with __b8
Replacing label __b8_from___b6 with __b8
Replacing label __b8_from___b5 with __b8
Replacing label __b6_from___b6 with __b6
Replacing label __b8_from___b8 with __b8
Removing instruction __b1_from___init1:
Removing instruction __b4_from___b2:
Removing instruction __b40_from___b38:
Removing instruction __b40_from___b39:
Removing instruction __b8_from___b13:
Removing instruction __b8_from___b14:
Removing instruction __b8_from___b15:
Removing instruction __b8_from___b16:
Removing instruction __b8_from___b5:
Removing instruction __b8_from___b6:
Removing instruction __b8_from___b7:
Removing instruction __b1_from_main:
Removing instruction __b6_from___b6:
Removing instruction __b8_from___b7:
Removing instruction __b8_from___b8:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __init1:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b2_from_irq:
Removing instruction __b4:
Removing instruction __b1:
Removing instruction __b17_from___b1:
Removing instruction __b19_from___b17:
Removing instruction __b21:
Removing instruction __b22_from___b21:
Removing instruction __b29_from___b22:
Removing instruction __b31:
Removing instruction __b32_from___b31:
Removing instruction __b34:
Removing instruction __b35:
Removing instruction __b36_from___b35:
Removing instruction __b38:
Removing instruction __b39:
Removing instruction __b36_from___b37:
Removing instruction __b32_from___b33:
Removing instruction __b29_from___b30:
Removing instruction __b24_from___b23:
Removing instruction __b26_from___b24:
Removing instruction __b28:
Removing instruction __b22_from___b28:
Removing instruction __b26_from___b27:
Removing instruction __b24_from___b25:
Removing instruction __b19_from___b20:
Removing instruction __b17_from___b18:
Removing instruction __b11:
Removing instruction __b12:
Removing instruction __b13:
Removing instruction __b14:
Removing instruction __b15:
Removing instruction __b16:
Removing instruction __b10:
Removing instruction __b2_from___b10:
Removing instruction __b1:
Removing instruction memset_from___b1:
Removing instruction __b2_from___b1:
Removing instruction __b4_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b7:
Removing instruction __b4_from___b5:
Removing instruction __b2_from___b3:
Removing instruction __b1_from_memset:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp __b6
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldz #0
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [145] bne __b3 to beq
Fixing long branch [155] bcc __b18 to bcs
Fixing long branch [162] bne __b20 to beq
FINAL SYMBOL TABLE
__constant struct MOS6526_CIA * const CIA1 = (struct MOS6526_CIA *) 56320
__constant const char CIA_INTERRUPT_CLEAR_ALL = $7f
__constant char * const COLORRAM = (char *) 55296
__constant char * const DEFAULT_SCREEN = (char *) 1024
__constant char GREETING[] = " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
__constant const char GREET_COUNT = $f
__constant const char GREET_ROW = $14
__constant void (** const HARDWARE_IRQ)() = (void (**)()) 65534
__constant const char IRQ_RASTER = 1
__constant const char IRQ_Y = $16
__constant const char LOGO_ROW = 3
__constant char MEGA_LOGO[] = { $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf }
__constant char OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
__constant char OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
__constant char OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
__constant char OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
__constant char OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
__constant char OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
__constant char OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
__constant char OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
__constant char OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
__constant char OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
__constant char OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
__constant char OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
__constant char * const PALETTE_BLUE = (char *) 54016
__constant char * const PALETTE_GREEN = (char *) 53760
__constant char * const PALETTE_RED = (char *) 53504
__constant char PAL_BLUE[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa }
__constant char PAL_GREEN[] = { 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff }
__constant char PAL_RED[] = { 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff }
__constant char * const PROCPORT = (char *) 1
__constant char * const PROCPORT_DDR = (char *) 0
__constant const char PROCPORT_DDR_MEMORY_MASK = 7
__constant const char PROCPORT_RAM_IO = 5
__constant const char RASTER_LINES = $d8
__constant const char SCROLL_BLACKBARS = $13
__constant const char SCROLL_ROW = $d
__constant char SCROLL_TEXT[] = " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
__constant const char SCROLL_Y = $66
__constant char SINE[$100] = kickasm {{ .fill 256, 91.5 + 91.5*sin(i*2*PI/256)
}}
__constant char SIZEOF_CHAR = 1
__constant char SONG[] = kickasm {{ .import c64 "DiscoZak_2SID_patched.prg"
}}
__constant struct MOS6569_VICII * const VICII = (struct MOS6569_VICII *) 53248
__constant struct MOS4569_VICIII * const VICIII = (struct MOS4569_VICIII *) 53248
__constant struct MEGA65_VICIV * const VICIV = (struct MEGA65_VICIV *) 53248
void __start()
__loadstore volatile char greet_idx // zp[1]:8 0.6153846153846154
__loadstore volatile char greet_zoomx // zp[1]:7 1.3939393939393938
__interrupt(hardware_clobber) void irq()
char irq::$10 // reg byte a 22.0
char irq::$26 // reg byte a 22.0
char irq::$27 // reg byte a 22.0
char irq::$29 // reg byte a 22.0
char irq::$33 // reg byte a 4.0
char irq::barcnt
char irq::barcnt#1 // barcnt zp[1]:5 22.0
char irq::barcnt#2 // barcnt zp[1]:5 2.588235294117647
char irq::barcol
char irq::barcol#0 // reg byte y 22.0
char irq::barcol#1 // reg byte y 101.0
char irq::barcol#2 // reg byte y 75.75
char irq::barcol#3 // reg byte y 103.75
char irq::barcol#4 // reg byte y 151.5
char irq::col
char irq::col#0 // reg byte a 16.5
char irq::col1
char irq::col1#0 // reg byte a 16.5
char irq::col1#1 // reg byte a 12.833333333333334
char irq::greet_offset
char irq::greet_offset#0 // reg byte y 4.0
char irq::greet_offset#1 // reg byte y 11.0
char irq::greet_offset#2 // reg byte y 8.75
char irq::i
char irq::i#1 // reg byte x 22.0
char irq::i#2 // reg byte x 9.307692307692307
char irq::i1
char irq::i1#1 // reg byte z 202.0
char irq::i1#2 // reg byte z 60.599999999999994
char irq::i2
char irq::i2#1 // reg byte z 202.0
char irq::i2#2 // reg byte z 60.599999999999994
char irq::i3
char irq::i3#1 // reg byte x 22.0
char irq::i3#2 // reg byte x 11.0
char irq::i4
char irq::i4#1 // reg byte x 22.0
char irq::i4#2 // reg byte x 8.8
char irq::i5
char irq::i5#1 // reg byte x 22.0
char irq::i5#2 // reg byte x 18.333333333333332
char irq::idx
char irq::idx#0 // reg byte x 11.0
char irq::idx#1 // reg byte x 67.33333333333333
char irq::idx#2 // reg byte x 101.0
char irq::idx#3 // reg byte x 138.33333333333331
char irq::idx#4 // reg byte x 101.0
char irq::l
char irq::l#1 // reg byte x 22.0
char irq::l#2 // reg byte x 14.666666666666666
char irq::line
char irq::line#1 // line zp[1]:4 22.0
char irq::line#10 // line zp[1]:4 3.259259259259259
char irq::nxt
char irq::nxt#0 // reg byte a 2.0
char irq::nxt#1 // reg byte a 4.0
char irq::nxt#2 // reg byte a 6.0
char irq::raster
char irq::raster#0 // reg byte a 56.0
char irq::sin_bar
char irq::sin_bar#0 // sin_bar zp[1]:6 4.0
char irq::sin_bar#1 // sin_bar zp[1]:6 11.0
char irq::sin_bar#2 // sin_bar zp[1]:6 2.1875
char irq::sin_col
char irq::sin_col#0 // reg byte y 4.0
char irq::sin_col#1 // reg byte y 11.0
char irq::sin_col#2 // reg byte y 3.833333333333333
char irq::wobble_idx
char irq::wobble_idx#0 // reg byte x 4.0
char irq::wobble_idx#1 // reg byte x 11.0
char irq::wobble_idx#10 // reg byte x 4.590909090909091
char irq::wobble_idx#7 // reg byte x 22.0
char irq::zoomval
char irq::zoomval#0 // reg byte a 11.0
void main()
char main::i
char main::i#1 // reg byte x 151.5
char main::i#2 // reg byte x 202.0
char main::i1
char main::i1#1 // reg byte x 202.0
char main::i1#2 // reg byte x 168.33333333333331
char main::i2
char main::i2#1 // reg byte x 202.0
char main::i2#2 // reg byte x 134.66666666666666
void * memset(void *str , char c , unsigned int num)
char memset::c
__constant char memset::c#0 = ' ' // c
char *memset::dst
char *memset::dst#1 // dst zp[2]:2 2002.0
char *memset::dst#2 // dst zp[2]:2 1334.6666666666667
char *memset::end
__constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end
unsigned int memset::num
__constant unsigned int memset::num#0 = (unsigned int)$28*$19 // num
void *memset::return
void *memset::str
__constant void *memset::str#0 = (void *)DEFAULT_SCREEN // str
__constant char rasters[RASTER_LINES] = { fill( RASTER_LINES, 0) }
__loadstore char * volatile scroll_ptr // zp[2]:11 0.19672131147540986
__loadstore volatile char scroll_soft // zp[1]:10 0.2441860465116279
__loadstore volatile char sin_idx // zp[1]:9 0.49999999999999994
__constant void (*songInit)() = (void (*)())SONG
__constant void (*songPlay)() = (void (*)())SONG+3
zp[1]:4 [ irq::line#10 irq::line#1 ]
reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ]
reg byte x [ irq::i#2 irq::i#1 ]
reg byte y [ irq::sin_col#2 irq::sin_col#0 irq::sin_col#1 ]
reg byte x [ irq::l#2 irq::l#1 ]
zp[1]:5 [ irq::barcnt#2 irq::barcnt#1 ]
zp[1]:6 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ]
reg byte x [ irq::i3#2 irq::i3#1 ]
reg byte x [ irq::i4#2 irq::i4#1 ]
reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ]
reg byte x [ irq::i5#2 irq::i5#1 ]
reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ]
reg byte z [ irq::i1#2 irq::i1#1 ]
reg byte z [ irq::i2#2 irq::i2#1 ]
reg byte y [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ]
reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ]
reg byte x [ main::i1#2 main::i1#1 ]
reg byte x [ main::i2#2 main::i2#1 ]
reg byte x [ main::i#2 main::i#1 ]
zp[2]:2 [ memset::dst#2 memset::dst#1 ]
zp[1]:9 [ sin_idx ]
zp[1]:10 [ scroll_soft ]
zp[2]:11 [ scroll_ptr ]
zp[1]:7 [ greet_zoomx ]
zp[1]:8 [ greet_idx ]
reg byte a [ irq::$33 ]
reg byte a [ irq::$29 ]
reg byte a [ irq::$26 ]
reg byte a [ irq::$27 ]
reg byte a [ irq::col1#0 ]
reg byte a [ irq::col1#1 ]
reg byte a [ irq::col#0 ]
reg byte a [ irq::zoomval#0 ]
reg byte a [ irq::$10 ]
reg byte a [ irq::raster#0 ]
FINAL ASSEMBLER
Score: 10519
// File Comments
// Raster65 Demo re-implementation in C by Jesper Gravgaard
// Based on RASTER65 assembler demo made in 2015 and updated in 2020 by DEFT
// https://mega.scryptos.com/sharefolder/MEGA/MEGA65+filehost
// https://www.forum64.de/index.php?thread/104591-xemu-vic-iv-implementation-update/&postID=1560511#post1560511
/// @file
/// MEGA65 Registers and Constants
/// @file
/// The MOS 6526 Complex Interface Adapter (CIA)
///
/// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
// Upstart
.cpu _45gs02
// MEGA65 platform executable starting in C64 mode.
.file [name="raster65.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
/// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR_ALL = $7f
/// VICII IRQ Status/Enable Raster
// @see #IRQ_ENABLE #IRQ_STATUS
/// 0 | RST| Reaching a certain raster line. The line is specified by writing
/// | | to register 0xd012 and bit 7 of $d011 and internally stored by
/// | | the VIC for the raster compare. The test for reaching the
/// | | interrupt raster line is done in cycle 0 of every line (for line
/// | | 0, in cycle 1).
.const IRQ_RASTER = 1
/// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
/// RAM in 0xA000, 0xE000 I/O in 0xD000
.const PROCPORT_RAM_IO = 5
// Logo start screen row
.const LOGO_ROW = 3
// Scroll screen row
.const SCROLL_ROW = $d
// Greeting screen row
.const GREET_ROW = $14
// y rasterline where IRQ starts
.const IRQ_Y = $16
// y rasterline where scrolly starts
.const SCROLL_Y = $66
// size of raster behind scrolly
.const SCROLL_BLACKBARS = $13
// The number of raster lines
.const RASTER_LINES = $d8
// The number of greetings
.const GREET_COUNT = $f
.const OFFSET_STRUCT_MOS4569_VICIII_KEY = $2f
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLB = $31
.const OFFSET_STRUCT_MEGA65_VICIV_CONTROLC = $54
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL1 = $11
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a
.const OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO = $5c
.const OFFSET_STRUCT_MEGA65_VICIV_RASLINE0 = $6f
.const OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19
.const OFFSET_STRUCT_MOS6569_VICII_CONTROL2 = $16
.const OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR = $20
.const OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR = $21
.const OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO = $4c
.const OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL = $5a
.const SIZEOF_CHAR = 1
/// Processor port data direction register
.label PROCPORT_DDR = 0
/// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
/// The VIC-II MOS 6567/6569
.label VICII = $d000
/// The VIC III MOS 4567/4569
.label VICIII = $d000
/// The VIC IV
.label VICIV = $d000
/// Palette RED
.label PALETTE_RED = $d100
/// Palette GREEN
.label PALETTE_GREEN = $d200
/// Palette BLUE
.label PALETTE_BLUE = $d300
/// Color Ram
.label COLORRAM = $d800
/// Default address of screen character matrix
.label DEFAULT_SCREEN = $400
/// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
/// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// Pointer to the song init routine
.label songInit = SONG
// Pointer to the song play routine
.label songPlay = SONG+3
// Sine Position (used across effects)
.label sin_idx = 9
// scroll soft position of text scrolly (0-7)
.label scroll_soft = $a
// scroll text pointer to next char
.label scroll_ptr = $b
// Zoom Position
.label greet_zoomx = 7
// The greeting currently being shown
.label greet_idx = 8
.segment Code
// __start
__start: {
// __start::__init1
// volatile char sin_idx
// [1] sin_idx = 0 -- vbuz1=vbuc1
ldz #0
stz.z sin_idx
// volatile char scroll_soft = 7
// [2] scroll_soft = 7 -- vbuz1=vbuc1
ldz #7
stz.z scroll_soft
// char * volatile scroll_ptr = SCROLL_TEXT
// [3] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_ptr
lda #>SCROLL_TEXT
sta.z scroll_ptr+1
// volatile char greet_zoomx
// [4] greet_zoomx = 0 -- vbuz1=vbuc1
ldz #0
stz.z greet_zoomx
// volatile char greet_idx
// [5] greet_idx = 0 -- vbuz1=vbuc1
stz.z greet_idx
// [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1]
// __start::@1
// [7] call main
jsr main
// __start::@return
// [8] return
rts
}
// irq
// BIG INTERRUPT LOOP
irq: {
.label line = 4
.label sin_bar = 6
.label barcnt = 5
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
pha
phx
phy
phz
// VICIV->RASLINE0 |= 0x80
// [9] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// force NTSC every frame (hehe)
lda #$80
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0
// VICII->IRQ_STATUS = IRQ_RASTER
// [10] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
ldz #IRQ_RASTER
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS
// VICII->CONTROL2 = 0
// [11] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = 0 -- _deref_pbuc1=vbuc2
// reset x scroll
ldz #0
stz VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
// char wobble_idx = ++sin_idx
// [12] sin_idx = ++ sin_idx -- vbuz1=_inc_vbuz1
inc.z sin_idx
// [13] irq::wobble_idx#0 = sin_idx -- vbuxx=vbuz1
// Generate Raster Bars and more
ldx.z sin_idx
// [14] phi from irq to irq::@2 [phi:irq->irq::@2]
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#0 [phi:irq->irq::@2#0] -- register_copy
// [14] phi irq::line#10 = 0 [phi:irq->irq::@2#1] -- vbuz1=vbuc1
stz.z line
// irq::@2
__b2:
// for(char line=0;line!=RASTER_LINES;line++)
// [15] if(irq::line#10!=RASTER_LINES) goto irq::@3 -- vbuz1_neq_vbuc1_then_la1
ldz #RASTER_LINES
cpz.z line
beq !__b3+
jmp __b3
!__b3:
// [16] phi from irq::@2 to irq::@4 [phi:irq::@2->irq::@4]
// irq::@4
// (*songPlay)()
// [17] callexecute *songPlay -- call__deref_pprc1
// play music
jsr songPlay
// irq::@1
// char sin_col = sin_idx
// [18] irq::sin_col#0 = sin_idx -- vbuyy=vbuz1
// Set up colors behind logo, scroll and greets
ldy.z sin_idx
// [19] phi from irq::@1 to irq::@17 [phi:irq::@1->irq::@17]
// [19] phi irq::sin_col#2 = irq::sin_col#0 [phi:irq::@1->irq::@17#0] -- register_copy
// [19] phi irq::i#2 = 0 [phi:irq::@1->irq::@17#1] -- vbuxx=vbuc1
ldx #0
// irq::@17
__b17:
// for(char i=0;i<40;i++)
// [20] if(irq::i#2<$28) goto irq::@18 -- vbuxx_lt_vbuc1_then_la1
cpx #$28
bcs !__b18+
jmp __b18
!__b18:
// [21] phi from irq::@17 to irq::@19 [phi:irq::@17->irq::@19]
// [21] phi irq::l#2 = 0 [phi:irq::@17->irq::@19#0] -- vbuxx=vbuc1
ldx #0
// Set all raster bars to black
// irq::@19
__b19:
// for(char l=0;l!=RASTER_LINES;l++)
// [22] if(irq::l#2!=RASTER_LINES) goto irq::@20 -- vbuxx_neq_vbuc1_then_la1
cpx #RASTER_LINES
beq !__b20+
jmp __b20
!__b20:
// irq::@21
// char sin_bar = sin_idx
// [23] irq::sin_bar#0 = sin_idx -- vbuz1=vbuz2
// Big block of bars (16)
lda.z sin_idx
sta.z sin_bar
// [24] phi from irq::@21 to irq::@22 [phi:irq::@21->irq::@22]
// [24] phi irq::sin_bar#2 = irq::sin_bar#0 [phi:irq::@21->irq::@22#0] -- register_copy
// [24] phi irq::barcnt#2 = 0 [phi:irq::@21->irq::@22#1] -- vbuz1=vbuc1
ldz #0
stz.z barcnt
// irq::@22
__b22:
// for(char barcnt=0; barcnt<16; barcnt++)
// [25] if(irq::barcnt#2<$10) goto irq::@23 -- vbuz1_lt_vbuc1_then_la1
lda.z barcnt
cmp #$10
bcc __b23
// [26] phi from irq::@22 to irq::@29 [phi:irq::@22->irq::@29]
// [26] phi irq::i3#2 = 0 [phi:irq::@22->irq::@29#0] -- vbuxx=vbuc1
ldx #0
// Produce dark area behind text
// irq::@29
__b29:
// for(char i=0;i<19;i++)
// [27] if(irq::i3#2<$13) goto irq::@30 -- vbuxx_lt_vbuc1_then_la1
cpx #$13
bcc __b30
// irq::@31
// char greet_offset = greet_idx*16
// [28] irq::greet_offset#0 = greet_idx << 4 -- vbuyy=vbuz1_rol_4
// Set up greetings
lda.z greet_idx
asl
asl
asl
asl
tay
// [29] phi from irq::@31 to irq::@32 [phi:irq::@31->irq::@32]
// [29] phi irq::greet_offset#2 = irq::greet_offset#0 [phi:irq::@31->irq::@32#0] -- register_copy
// [29] phi irq::i4#2 = 0 [phi:irq::@31->irq::@32#1] -- vbuxx=vbuc1
ldx #0
// irq::@32
__b32:
// for(char i=0;i<16;i++)
// [30] if(irq::i4#2<$10) goto irq::@33 -- vbuxx_lt_vbuc1_then_la1
cpx #$10
bcc __b33
// irq::@34
// if(--scroll_soft == 0xff)
// [31] scroll_soft = -- scroll_soft -- vbuz1=_dec_vbuz1
dec.z scroll_soft
// [32] if(scroll_soft!=$ff) goto irq::@return -- vbuz1_neq_vbuc1_then_la1
ldz #$ff
cpz.z scroll_soft
bne __breturn
// irq::@35
// scroll_soft = 7
// [33] scroll_soft = 7 -- vbuz1=vbuc1
ldz #7
stz.z scroll_soft
// [34] phi from irq::@35 to irq::@36 [phi:irq::@35->irq::@36]
// [34] phi irq::i5#2 = 0 [phi:irq::@35->irq::@36#0] -- vbuxx=vbuc1
ldx #0
// Move scroll on screen
// irq::@36
__b36:
// for(char i=0;i<39;i++)
// [35] if(irq::i5#2<$27) goto irq::@37 -- vbuxx_lt_vbuc1_then_la1
cpx #$27
bcc __b37
// irq::@38
// char nxt = *(scroll_ptr++)
// [36] irq::nxt#0 = *scroll_ptr -- vbuaa=_deref_pbuz1
// Show next char
ldy #0
lda (scroll_ptr),y
// [37] scroll_ptr = ++ scroll_ptr -- pbuz1=_inc_pbuz1
inw.z scroll_ptr
// if(nxt == 0)
// [38] if(irq::nxt#0!=0) goto irq::@40 -- vbuaa_neq_0_then_la1
cmp #0
bne __b40
// irq::@39
// scroll_ptr = SCROLL_TEXT
// [39] scroll_ptr = SCROLL_TEXT -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_ptr
lda #>SCROLL_TEXT
sta.z scroll_ptr+1
// nxt = *scroll_ptr
// [40] irq::nxt#1 = *scroll_ptr -- vbuaa=_deref_pbuz1
lda (scroll_ptr),y
// [41] phi from irq::@38 irq::@39 to irq::@40 [phi:irq::@38/irq::@39->irq::@40]
// [41] phi irq::nxt#2 = irq::nxt#0 [phi:irq::@38/irq::@39->irq::@40#0] -- register_copy
// irq::@40
__b40:
// nxt & 0xbf
// [42] irq::$33 = irq::nxt#2 & $bf -- vbuaa=vbuaa_band_vbuc1
and #$bf
// *(SCREEN + SCROLL_ROW*40 + 39) = nxt & 0xbf
// [43] *(DEFAULT_SCREEN+SCROLL_ROW*$28+$27) = irq::$33 -- _deref_pbuc1=vbuaa
sta DEFAULT_SCREEN+SCROLL_ROW*$28+$27
// irq::@return
__breturn:
// }
// [44] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
plz
ply
plx
pla
rti
// irq::@37
__b37:
// (SCREEN + SCROLL_ROW*40)[i] = (SCREEN + SCROLL_ROW*40 + 1)[i]
// [45] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda DEFAULT_SCREEN+SCROLL_ROW*$28+1,x
sta DEFAULT_SCREEN+SCROLL_ROW*$28,x
// for(char i=0;i<39;i++)
// [46] irq::i5#1 = ++ irq::i5#2 -- vbuxx=_inc_vbuxx
inx
// [34] phi from irq::@37 to irq::@36 [phi:irq::@37->irq::@36]
// [34] phi irq::i5#2 = irq::i5#1 [phi:irq::@37->irq::@36#0] -- register_copy
jmp __b36
// irq::@33
__b33:
// GREETING[greet_offset++] & 0xbf
// [47] irq::$29 = GREETING[irq::greet_offset#2] & $bf -- vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2
lda #$bf
and GREETING,y
// (SCREEN + GREET_ROW*40 + 13)[i] = GREETING[greet_offset++] & 0xbf
// [48] (DEFAULT_SCREEN+GREET_ROW*$28+$d)[irq::i4#2] = irq::$29 -- pbuc1_derefidx_vbuxx=vbuaa
sta DEFAULT_SCREEN+GREET_ROW*$28+$d,x
// (SCREEN + GREET_ROW*40 + 13)[i] = GREETING[greet_offset++] & 0xbf;
// [49] irq::greet_offset#1 = ++ irq::greet_offset#2 -- vbuyy=_inc_vbuyy
iny
// for(char i=0;i<16;i++)
// [50] irq::i4#1 = ++ irq::i4#2 -- vbuxx=_inc_vbuxx
inx
// [29] phi from irq::@33 to irq::@32 [phi:irq::@33->irq::@32]
// [29] phi irq::greet_offset#2 = irq::greet_offset#1 [phi:irq::@33->irq::@32#0] -- register_copy
// [29] phi irq::i4#2 = irq::i4#1 [phi:irq::@33->irq::@32#1] -- register_copy
jmp __b32
// irq::@30
__b30:
// rasters[SCROLL_Y+i] /2
// [51] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 -- vbuaa=pbuc1_derefidx_vbuxx_ror_1
lda rasters+SCROLL_Y,x
lsr
// rasters[SCROLL_Y+i] /2 & 7
// [52] irq::$27 = irq::$26 & 7 -- vbuaa=vbuaa_band_vbuc1
and #7
// rasters[SCROLL_Y+i] = rasters[SCROLL_Y+i] /2 & 7
// [53] (rasters+SCROLL_Y)[irq::i3#2] = irq::$27 -- pbuc1_derefidx_vbuxx=vbuaa
sta rasters+SCROLL_Y,x
// for(char i=0;i<19;i++)
// [54] irq::i3#1 = ++ irq::i3#2 -- vbuxx=_inc_vbuxx
inx
// [26] phi from irq::@30 to irq::@29 [phi:irq::@30->irq::@29]
// [26] phi irq::i3#2 = irq::i3#1 [phi:irq::@30->irq::@29#0] -- register_copy
jmp __b29
// irq::@23
__b23:
// char idx = SINE[sin_bar]
// [55] irq::idx#0 = SINE[irq::sin_bar#2] -- vbuxx=pbuc1_derefidx_vbuz1
ldy.z sin_bar
ldx SINE,y
// char barcol = barcnt*16
// [56] irq::barcol#0 = irq::barcnt#2 << 4 -- vbuyy=vbuz1_rol_4
lda.z barcnt
asl
asl
asl
asl
tay
// [57] phi from irq::@23 to irq::@24 [phi:irq::@23->irq::@24]
// [57] phi irq::idx#3 = irq::idx#0 [phi:irq::@23->irq::@24#0] -- register_copy
// [57] phi irq::barcol#3 = irq::barcol#0 [phi:irq::@23->irq::@24#1] -- register_copy
// [57] phi irq::i1#2 = 0 [phi:irq::@23->irq::@24#2] -- vbuzz=vbuc1
ldz #0
// irq::@24
__b24:
// for(char i=0;i<16;i++)
// [58] if(irq::i1#2<$10) goto irq::@25 -- vbuzz_lt_vbuc1_then_la1
cpz #$10
bcc __b25
// [59] phi from irq::@24 to irq::@26 [phi:irq::@24->irq::@26]
// [59] phi irq::idx#4 = irq::idx#3 [phi:irq::@24->irq::@26#0] -- register_copy
// [59] phi irq::barcol#4 = irq::barcol#3 [phi:irq::@24->irq::@26#1] -- register_copy
// [59] phi irq::i2#2 = 0 [phi:irq::@24->irq::@26#2] -- vbuzz=vbuc1
ldz #0
// irq::@26
__b26:
// for(char i=0;i<15;i++)
// [60] if(irq::i2#2<$f) goto irq::@27 -- vbuzz_lt_vbuc1_then_la1
cpz #$f
bcc __b27
// irq::@28
// sin_bar += 10
// [61] irq::sin_bar#1 = irq::sin_bar#2 + $a -- vbuz1=vbuz1_plus_vbuc1
lda #$a
clc
adc.z sin_bar
sta.z sin_bar
// for(char barcnt=0; barcnt<16; barcnt++)
// [62] irq::barcnt#1 = ++ irq::barcnt#2 -- vbuz1=_inc_vbuz1
inc.z barcnt
// [24] phi from irq::@28 to irq::@22 [phi:irq::@28->irq::@22]
// [24] phi irq::sin_bar#2 = irq::sin_bar#1 [phi:irq::@28->irq::@22#0] -- register_copy
// [24] phi irq::barcnt#2 = irq::barcnt#1 [phi:irq::@28->irq::@22#1] -- register_copy
jmp __b22
// irq::@27
__b27:
// rasters[idx++] = --barcol;
// [63] irq::barcol#2 = -- irq::barcol#4 -- vbuyy=_dec_vbuyy
dey
// rasters[idx++] = --barcol
// [64] rasters[irq::idx#4] = irq::barcol#2 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta rasters,x
// rasters[idx++] = --barcol;
// [65] irq::idx#2 = ++ irq::idx#4 -- vbuxx=_inc_vbuxx
inx
// for(char i=0;i<15;i++)
// [66] irq::i2#1 = ++ irq::i2#2 -- vbuzz=_inc_vbuzz
inz
// [59] phi from irq::@27 to irq::@26 [phi:irq::@27->irq::@26]
// [59] phi irq::idx#4 = irq::idx#2 [phi:irq::@27->irq::@26#0] -- register_copy
// [59] phi irq::barcol#4 = irq::barcol#2 [phi:irq::@27->irq::@26#1] -- register_copy
// [59] phi irq::i2#2 = irq::i2#1 [phi:irq::@27->irq::@26#2] -- register_copy
jmp __b26
// irq::@25
__b25:
// rasters[idx++] = barcol++
// [67] rasters[irq::idx#3] = irq::barcol#3 -- pbuc1_derefidx_vbuxx=vbuyy
tya
sta rasters,x
// rasters[idx++] = barcol++;
// [68] irq::idx#1 = ++ irq::idx#3 -- vbuxx=_inc_vbuxx
inx
// [69] irq::barcol#1 = ++ irq::barcol#3 -- vbuyy=_inc_vbuyy
iny
// for(char i=0;i<16;i++)
// [70] irq::i1#1 = ++ irq::i1#2 -- vbuzz=_inc_vbuzz
inz
// [57] phi from irq::@25 to irq::@24 [phi:irq::@25->irq::@24]
// [57] phi irq::idx#3 = irq::idx#1 [phi:irq::@25->irq::@24#0] -- register_copy
// [57] phi irq::barcol#3 = irq::barcol#1 [phi:irq::@25->irq::@24#1] -- register_copy
// [57] phi irq::i1#2 = irq::i1#1 [phi:irq::@25->irq::@24#2] -- register_copy
jmp __b24
// irq::@20
__b20:
// rasters[l] = 0
// [71] rasters[irq::l#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta rasters,x
// for(char l=0;l!=RASTER_LINES;l++)
// [72] irq::l#1 = ++ irq::l#2 -- vbuxx=_inc_vbuxx
inx
// [21] phi from irq::@20 to irq::@19 [phi:irq::@20->irq::@19]
// [21] phi irq::l#2 = irq::l#1 [phi:irq::@20->irq::@19#0] -- register_copy
jmp __b19
// irq::@18
__b18:
// char col = SINE[sin_col]/4
// [73] irq::col1#0 = SINE[irq::sin_col#2] >> 2 -- vbuaa=pbuc1_derefidx_vbuyy_ror_2
// Greeting colors
lda SINE,y
lsr
lsr
// (COLORRAM + GREET_ROW*40)[i] = col
// [74] (COLORRAM+GREET_ROW*$28)[irq::i#2] = irq::col1#0 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+GREET_ROW*$28,x
// col /= 2
// [75] irq::col1#1 = irq::col1#0 >> 1 -- vbuaa=vbuaa_ror_1
// Logo colors
lsr
// (COLORRAM + LOGO_ROW*40 + 0*40 - 1)[i] = col
// [76] (COLORRAM+LOGO_ROW*$28-1)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28-1,x
// (COLORRAM + LOGO_ROW*40 + 1*40 - 2)[i] = col
// [77] (COLORRAM+LOGO_ROW*$28+1*$28-2)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+1*$28-2,x
// (COLORRAM + LOGO_ROW*40 + 2*40 - 3)[i] = col
// [78] (COLORRAM+LOGO_ROW*$28+2*$28-3)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+2*$28-3,x
// (COLORRAM + LOGO_ROW*40 + 3*40 - 4)[i] = col
// [79] (COLORRAM+LOGO_ROW*$28+3*$28-4)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+3*$28-4,x
// (COLORRAM + LOGO_ROW*40 + 4*40 - 5)[i] = col
// [80] (COLORRAM+LOGO_ROW*$28+4*$28-5)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+4*$28-5,x
// (COLORRAM + LOGO_ROW*40 + 5*40 - 6)[i] = col
// [81] (COLORRAM+LOGO_ROW*$28+5*$28-6)[irq::i#2] = irq::col1#1 -- pbuc1_derefidx_vbuxx=vbuaa
sta COLORRAM+LOGO_ROW*$28+5*$28-6,x
// (COLORRAM + SCROLL_ROW*40)[i] = PAL_GREEN[sin_col]
// [82] (COLORRAM+SCROLL_ROW*$28)[irq::i#2] = PAL_GREEN[irq::sin_col#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
// Scroll colors
lda PAL_GREEN,y
sta COLORRAM+SCROLL_ROW*$28,x
// sin_col++;
// [83] irq::sin_col#1 = ++ irq::sin_col#2 -- vbuyy=_inc_vbuyy
iny
// for(char i=0;i<40;i++)
// [84] irq::i#1 = ++ irq::i#2 -- vbuxx=_inc_vbuxx
inx
// [19] phi from irq::@18 to irq::@17 [phi:irq::@18->irq::@17]
// [19] phi irq::sin_col#2 = irq::sin_col#1 [phi:irq::@18->irq::@17#0] -- register_copy
// [19] phi irq::i#2 = irq::i#1 [phi:irq::@18->irq::@17#1] -- register_copy
jmp __b17
// irq::@3
__b3:
// char col = rasters[line]
// [85] irq::col#0 = rasters[irq::line#10] -- vbuaa=pbuc1_derefidx_vbuz1
ldy.z line
lda rasters,y
// VICIII->BORDER_COLOR = col
// [86] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BORDER_COLOR
// VICIII->BG_COLOR = col
// [87] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR) = irq::col#0 -- _deref_pbuc1=vbuaa
sta VICIII+OFFSET_STRUCT_MOS4569_VICIII_BG_COLOR
// if(line < SCROLL_Y)
// [88] if(irq::line#10<SCROLL_Y) goto irq::@5 -- vbuz1_lt_vbuc1_then_la1
tya
cmp #SCROLL_Y
bcc __b5
// irq::@11
// if(line == SCROLL_Y)
// [89] if(irq::line#10==SCROLL_Y) goto irq::@6 -- vbuz1_eq_vbuc1_then_la1
ldz #SCROLL_Y
cpz.z line
beq __b6
// irq::@12
// if(line == SCROLL_Y+SCROLL_BLACKBARS)
// [90] if(irq::line#10==SCROLL_Y+SCROLL_BLACKBARS) goto irq::@7 -- vbuz1_eq_vbuc1_then_la1
ldz #SCROLL_Y+SCROLL_BLACKBARS
cpz.z line
beq __b7
// irq::@13
// if(line == SCROLL_Y+SCROLL_BLACKBARS+1)
// [91] if(irq::line#10!=SCROLL_Y+SCROLL_BLACKBARS+1) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
ldz #SCROLL_Y+SCROLL_BLACKBARS+1
cpz.z line
bne __b8
// irq::@14
// char zoomval = SINE[greet_zoomx++]
// [92] irq::zoomval#0 = SINE[greet_zoomx] -- vbuaa=pbuc1_derefidx_vbuz1
// if raster position > SCROLL_Y pos do zoom
ldy.z greet_zoomx
lda SINE,y
// [93] greet_zoomx = ++ greet_zoomx -- vbuz1=_inc_vbuz1
inc.z greet_zoomx
// VICIV->CHRXSCL = zoomval
// [94] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = irq::zoomval#0 -- _deref_pbuc1=vbuaa
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
// zoomval+1
// [95] irq::$10 = irq::zoomval#0 + 1 -- vbuaa=vbuaa_plus_1
inc
// VICIV->TEXTXPOS_LO = zoomval+1
// [96] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = irq::$10 -- _deref_pbuc1=vbuaa
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// if(greet_zoomx==0)
// [97] if(greet_zoomx!=0) goto irq::@8 -- vbuz1_neq_0_then_la1
lda.z greet_zoomx
bne __b8
// irq::@15
// if(++greet_idx == GREET_COUNT)
// [98] greet_idx = ++ greet_idx -- vbuz1=_inc_vbuz1
inc.z greet_idx
// [99] if(greet_idx!=GREET_COUNT) goto irq::@8 -- vbuz1_neq_vbuc1_then_la1
ldz #GREET_COUNT
cpz.z greet_idx
bne __b8
// irq::@16
// greet_idx = 0
// [100] greet_idx = 0 -- vbuz1=vbuc1
ldz #0
stz.z greet_idx
// [101] phi from irq::@13 irq::@14 irq::@15 irq::@16 irq::@5 irq::@6 irq::@7 to irq::@8 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8]
// [101] phi irq::wobble_idx#7 = irq::wobble_idx#10 [phi:irq::@13/irq::@14/irq::@15/irq::@16/irq::@5/irq::@6/irq::@7->irq::@8#0] -- register_copy
// irq::@8
__b8:
// char raster = VICII->RASTER
// [102] irq::raster#0 = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) -- vbuaa=_deref_pbuc1
// Wait for the next raster line
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
// irq::@9
__b9:
// while(raster == VICII->RASTER)
// [103] if(irq::raster#0==*((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER)) goto irq::@9 -- vbuaa_eq__deref_pbuc1_then_la1
cmp VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
beq __b9
// irq::@10
// for(char line=0;line!=RASTER_LINES;line++)
// [104] irq::line#1 = ++ irq::line#10 -- vbuz1=_inc_vbuz1
inc.z line
// [14] phi from irq::@10 to irq::@2 [phi:irq::@10->irq::@2]
// [14] phi irq::wobble_idx#10 = irq::wobble_idx#7 [phi:irq::@10->irq::@2#0] -- register_copy
// [14] phi irq::line#10 = irq::line#1 [phi:irq::@10->irq::@2#1] -- register_copy
jmp __b2
// irq::@7
__b7:
// VICIV->TEXTXPOS_LO = 0x50
// [105] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
// if raster position > SCROLL_Y pos do nozoom
// default value
ldz #$50
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
jmp __b8
// irq::@6
__b6:
// [106] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = $50 -- _deref_pbuc1=vbuc2
// if raster position = SCROLL_Y pos do scroll
// no wobbling from this point
ldz #$50
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// VICII->CONTROL2 = scroll_soft
// [107] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2) = scroll_soft -- _deref_pbuc1=vbuz1
// set softscroll
lda.z scroll_soft
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL2
jmp __b8
// irq::@5
__b5:
// VICIV->TEXTXPOS_LO = SINE[wobble_idx++]
// [108] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO) = SINE[irq::wobble_idx#10] -- _deref_pbuc1=pbuc2_derefidx_vbuxx
// if raster position < SCROLL_Y pos do wobble Logo!
lda SINE,x
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_TEXTXPOS_LO
// VICIV->TEXTXPOS_LO = SINE[wobble_idx++];
// [109] irq::wobble_idx#1 = ++ irq::wobble_idx#10 -- vbuxx=_inc_vbuxx
inx
// VICIV->CHRXSCL = 0x66
// [110] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL) = $66 -- _deref_pbuc1=vbuc2
// No zooming
ldz #$66
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_CHRXSCL
jmp __b8
}
// main
main: {
// VICIII->KEY = 0x47
// [111] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 -- _deref_pbuc1=vbuc2
// Enable MEGA65 features
ldz #$47
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
// VICIII->KEY = 0x53
// [112] *((char *)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 -- _deref_pbuc1=vbuc2
ldz #$53
stz VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY
// VICIV->CONTROLB |= 0x40
// [113] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
// Enable 48MHz fast mode
lda #$40
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB
// VICIV->CONTROLC |= 0x40
// [114] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) = *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC) | $40 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #$40
ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC
// asm
// asm { lda#0 }
// Initialize music
lda #0
// (*songInit)()
// [116] callexecute *songInit -- call__deref_pprc1
jsr songInit
// [117] phi from main to main::@1 [phi:main->main::@1]
// main::@1
// memset(SCREEN, ' ', 40*25)
// [118] call memset
// Clear screen
// [144] phi from main::@1 to memset [phi:main::@1->memset]
jsr memset
// [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
ldx #0
// Put MEGA logo on screen
// main::@2
__b2:
// for( char i=0; i<sizeof(MEGA_LOGO); i++)
// [120] if(main::i1#2<$bc*SIZEOF_CHAR) goto main::@3 -- vbuxx_lt_vbuc1_then_la1
cpx #$bc*SIZEOF_CHAR
bcc __b3
// [121] phi from main::@2 to main::@4 [phi:main::@2->main::@4]
// [121] phi main::i2#2 = 0 [phi:main::@2->main::@4#0] -- vbuxx=vbuc1
ldx #0
// Put '*' as default greeting
// main::@4
__b4:
// for( char i=0;i<40;i++)
// [122] if(main::i2#2<$28) goto main::@5 -- vbuxx_lt_vbuc1_then_la1
cpx #$28
bcc __b5
// [123] phi from main::@4 to main::@6 [phi:main::@4->main::@6]
// [123] phi main::i#2 = 0 [phi:main::@4->main::@6#0] -- vbuxx=vbuc1
ldx #0
// [123] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
// [123] phi main::i#2 = main::i#1 [phi:main::@6->main::@6#0] -- register_copy
// main::@6
__b6:
// PALETTE_RED[i] = PAL_RED[i]
// [124] PALETTE_RED[main::i#2] = PAL_RED[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_RED,x
sta PALETTE_RED,x
// PALETTE_GREEN[i] = PAL_GREEN[i]
// [125] PALETTE_GREEN[main::i#2] = PAL_GREEN[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_GREEN,x
sta PALETTE_GREEN,x
// PALETTE_BLUE[i] = PAL_BLUE[i]
// [126] PALETTE_BLUE[main::i#2] = PAL_BLUE[main::i#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PAL_BLUE,x
sta PALETTE_BLUE,x
// while(++i!=0)
// [127] main::i#1 = ++ main::i#2 -- vbuxx=_inc_vbuxx
inx
// [128] if(main::i#1!=0) goto main::@6 -- vbuxx_neq_0_then_la1
cpx #0
bne __b6
// main::@7
// asm
// asm { sei }
// Set up raster interrupts C64 style
sei
// CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR_ALL
// [130] *((char *)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR_ALL -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
ldz #CIA_INTERRUPT_CLEAR_ALL
stz CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
// VICII->RASTER = IRQ_Y
// [131] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER) = IRQ_Y -- _deref_pbuc1=vbuc2
// Set raster line to 0x16
ldz #IRQ_Y
stz VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
// VICII->CONTROL1 &= 0x7f
// [132] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
sta VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1
// VICII->IRQ_ENABLE = IRQ_RASTER
// [133] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE) = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
ldz #IRQ_RASTER
stz VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE
// *HARDWARE_IRQ = &irq
// [134] *HARDWARE_IRQ = &irq -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<irq
sta HARDWARE_IRQ
lda #>irq
sta HARDWARE_IRQ+1
// *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
// [135] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
// no kernal or BASIC rom visible
ldz #PROCPORT_DDR_MEMORY_MASK
stz.z PROCPORT_DDR
// *PROCPORT = PROCPORT_RAM_IO
// [136] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
ldz #PROCPORT_RAM_IO
stz.z PROCPORT
// VICIV->SIDBDRWD_LO = 1
// [137] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO) = 1 -- _deref_pbuc1=vbuc2
// open sideborder
ldz #1
stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO
// asm
// asm { cli }
// Enable IRQ
cli
// [139] phi from main::@7 main::@8 to main::@8 [phi:main::@7/main::@8->main::@8]
// main::@8
__b8:
jmp __b8
// main::@5
__b5:
// (SCREEN + GREET_ROW*40)[i] = '*'
// [140] (DEFAULT_SCREEN+GREET_ROW*$28)[main::i2#2] = '*' -- pbuc1_derefidx_vbuxx=vbuc2
lda #'*'
sta DEFAULT_SCREEN+GREET_ROW*$28,x
// for( char i=0;i<40;i++)
// [141] main::i2#1 = ++ main::i2#2 -- vbuxx=_inc_vbuxx
inx
// [121] phi from main::@5 to main::@4 [phi:main::@5->main::@4]
// [121] phi main::i2#2 = main::i2#1 [phi:main::@5->main::@4#0] -- register_copy
jmp __b4
// main::@3
__b3:
// (SCREEN + LOGO_ROW*40)[i] = MEGA_LOGO[i]
// [142] (DEFAULT_SCREEN+LOGO_ROW*$28)[main::i1#2] = MEGA_LOGO[main::i1#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda MEGA_LOGO,x
sta DEFAULT_SCREEN+LOGO_ROW*$28,x
// for( char i=0; i<sizeof(MEGA_LOGO); i++)
// [143] main::i1#1 = ++ main::i1#2 -- vbuxx=_inc_vbuxx
inx
// [119] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
// [119] phi main::i1#2 = main::i1#1 [phi:main::@3->main::@2#0] -- register_copy
jmp __b2
}
// memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// void * memset(void *str, char c, unsigned int num)
memset: {
.const c = ' '
.const num = $28*$19
.label str = DEFAULT_SCREEN
.label end = str+num
.label dst = 2
// [145] phi from memset to memset::@1 [phi:memset->memset::@1]
// [145] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
lda #<str
sta.z dst
lda #>str
sta.z dst+1
// memset::@1
__b1:
// for(char* dst = str; dst!=end; dst++)
// [146] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1
lda.z dst+1
cmp #>end
bne __b2
lda.z dst
cmp #<end
bne __b2
// memset::@return
// }
// [147] return
rts
// memset::@2
__b2:
// *dst = c
// [148] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// for(char* dst = str; dst!=end; dst++)
// [149] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
inw.z dst
// [145] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1]
// [145] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy
jmp __b1
}
// File Data
.segment Data
// A MEGA logo
MEGA_LOGO: .byte $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $20, $cf, $20, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $cf, $cf, $20, $20, $20, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $20, $20, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $cf, $cf, $20, $cf, $cf, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $20, $20, $20, $cf, $20, $20, $20, $cf, $cf, $cf, $20, $cf, $cf, $cf, $cf, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $cf, $20, $20, $20, $20, $cf, $cf, $20, $cf, $cf, $cf, $20, $20, $cf, $cf, $cf, $20, $20, $cf, $20, $20, $20, $cf
// Greetings
GREETING: .text " DOUBLEFLASH ADTBM SY2002 TAYGER SERIOUSLY LIBI IN PARADIZE LGB BLUEWAYSW SAUSAGE BIT SHIFTER INDIOCOLIFA GRUMPYNINJA 0-LIMITS CHEVERON DR. COMMODORE "
.byte 0
// Scroll text
SCROLL_TEXT: .text " THIS SMALL MEGA65 RASTER INTRO ... WAS MADE BY DEFT IN 2015 ... AND BROUGHT BACK TO LIFE 5 YEARS LATER IN 2020 ... BECAUSE THE MEGA65 HARDWARE CHANGED SO MUCH IN THE PAST 5 YEARS ... UNFORTUNATELY MY ASSEMBLER SKILLS DID NOT SO THIS IS THE FIRST APPROACH TO GET BETTER ... HOPEFULLY DR.MUTTI WILL HAVE TO SCOLD ME LESS ... THE PAST 5 YEARS HAVE BEEN AN UNFORGETTABLE & UNIQUE RIDE ... IF YOU DO WATCH THIS DEMO ON YOUR VERY OWN MEGA65 THERE IS ENOUGH EVIDENCE OF WHAT WE ACTUALLY ACHIEVED ... BELOW ARE THE GREETINGS TO DEAR AND VERY SPECIAL PEOPLE WHO HELPED TO GET THERE ... THANK YOU SO MUCH FOR YOUR SUPPORT AND FOR NOT GIVING UP ... DUAL SID TUNE BY RAYDEN OF ALPHA FLIGHT ... THIS SCROLLY WILL NOW RESTART *WRAP* "
.byte 0
.pc = $fc0 "SONG"
// Music at an absolute address
SONG:
.import c64 "DiscoZak_2SID_patched.prg"
.pc = $2c00 "SINE"
// Sine Values 0-183
SINE:
.fill 256, 91.5 + 91.5*sin(i*2*PI/256)
.pc = $3000 "rasters"
// Moving Raster Bars
rasters: .fill RASTER_LINES, 0
.pc = $2d00 "PAL_RED"
PAL_RED: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, $16, $c6, $a7, $88, $49, $5a, $2b, $1c, $ac, $ad, $8e, $8f, $ff, $ff, $ff, $ff, $c6, $77, $48, $29, $e9, $fa, $cb, $cc, $5d, $4e, $2f, $ff, $ff, $ff, $ff, $ff, $57, $18, $f8, $d9, $aa, $8b, $6c, $5d, $ed, $de, $cf, $ff, $ff, $ff, $ff, $ff, $26, $e6, $b7, $a8, $69, $5a, $3b, $3c, $dc, $cd, $ae, $9f, $ff, $ff, $ff, $ff, $65, $16, $17, $f7, $d8, $b9, $9a, $8b, $2c, $d, $fd, $ee, $cf, $ff, $ff, $ff, $64, $15, 6, $e6, $c7, $a8, $99, $8a, $1b, $c, $fc, $fd, $ee, $cf, $ff, $ff, $12, $d2, $d3, $b4, $95, $86, $77, $78, 9, $69, $ea, $fb, $dc, $ad, $ae, $af, $f0, $c1, $c2, $a3, $84, $85, $76, $67, 8, $f8, $e9, $da, $db, $bc, $bd, $ae, $40, $11, $12, $f2, $e3, $d4, $c5, $c6, $47, $38, $39, $2a, $1b, $c, $d, $ed, 0, 0, $f0, $d1, $c2, $b3, $a4, $95, $36, $27, $28, $29, $f9, $ea, $eb, $ec, $70, $41, $22, $23, $f3, $f4, $e5, $e6, $77, $78, $69, $7a, $3b, $3c, $3d, $3e, $a1, $82, $63, $54, $35, $26, 7, 8, $98, $99, $8a, $7b, $5c, $5d, $3e, $3f, $33, 4, $d4, $d5, $a6, $a7, $88, $89, $1a, $ab, $fb, $ec, $cd, $be, $af, $ff, $b4, $85, $56, $47, $18, 9, $f9, $ea, $7b, $7c, $5d, $5e, $2f, $ef, $ff, $ff, 6, $d6, $a7, $98, $59, $4a, $2b, $2c, $bc, $ad, $8e, $8f, $ff, $ff, $ff, $ff
.pc = $2e00 "PAL_GREEN"
PAL_GREEN: .byte 0, $e3, $c4, $b5, $96, $87, $78, $79, $a, $fa, $eb, $dc, $bd, $ae, $af, $ff, $e2, $b3, $a4, $85, $76, $67, $48, $49, $d9, $da, $bb, $bc, $8d, $8e, $7f, $ff, $42, 3, 4, $e4, $d5, $c6, $b7, $a8, $39, $3a, $1b, $2c, $fc, $fd, $de, $df, $61, $32, $13, 4, $e4, $e5, $d6, $d7, $78, $59, $4a, $4b, $2c, $1d, $e, $fe, $e0, $b1, $a2, $93, $74, $75, $56, $57, $e7, $d8, $79, $ca, $ab, $9c, $9d, $8e, $f0, $d1, $c2, $a3, $84, $85, $76, $77, 8, 9, $f9, $fa, $db, $cc, $bd, $ae, $61, $22, $23, $14, $f4, $e5, $d6, $c7, $58, $59, $3a, $3b, $1c, $d, $fd, $fe, $92, $53, $44, $35, $16, $f6, $e7, $e8, $79, $6a, $5b, $4c, $2d, $3e, $1f, $ef, $53, $14, 5, $e5, $c6, $b7, $a8, $99, $2a, $2b, $c, $d, $dd, $ce, $cf, $ff, $f3, $b4, $95, $86, $57, $38, $29, $1a, $ba, $ab, $9c, $8d, $6e, $5f, $ff, $ff, $95, $56, $27, $18, $e8, $d9, $ca, $bb, $4c, $3d, $2e, $1f, $ef, $ff, $ff, $ff, $c5, $86, $57, $38, $19, $a, $ea, $db, $6c, $5d, $3e, $3f, $ef, $ff, $ff, $ff, $65, $26, 7, $e7, $c8, $b9, $9a, $9b, $2c, $1d, $fd, $fe, $cf, $ff, $ff, $ff, $b4, $75, $56, $37, $28, $19, $e9, $ea, $7b, $6c, $5d, $4e, $2f, $ff, $ff, $ff, $c3, $94, $75, $56, $47, $38, $19, $1a, $aa, $ab, $7c, $7d, $5e, $4f, $ff, $ff, $e2, $a3, $94, $85, $76, $67, $38, $49, $d9, $ca, $ab, $bc, $7d, $7e, $6f, $ff
.pc = $2f00 "PAL_BLUE"
PAL_BLUE: .byte 0, $f3, $d4, $b5, $a6, $97, $88, $79, $1a, $fa, $eb, $ec, $bd, $be, $af, $ff, 0, 0, 0, 0, $c0, $b1, $a2, $a3, $34, $35, $26, $27, $f7, $f8, $f9, $ea, 0, 0, $30, $11, $22, $13, $14, 5, $b5, $96, $97, $98, $79, $6a, $5b, $4c, $81, $42, $43, $34, 5, 6, $f6, $f7, $78, $69, $5a, $5b, $4c, $3d, $1e, $f, $17, $c7, $a8, $89, $5a, $5b, $3c, $1d, $ad, $9e, $7f, $ff, $ff, $ff, $ff, $ff, $78, 9, $e9, $ca, $ab, $7c, $5d, $5e, $de, $cf, $ff, $ff, $ff, $ff, $ff, $ff, $59, $a, $ca, $bb, $8c, $6d, $3e, $2f, $bf, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $49, $f9, $da, $ab, $7c, $5d, $2e, $2f, $af, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $48, $d8, $b9, $aa, $7b, $5c, $2d, $2e, $be, $9f, $ff, $ff, $ff, $ff, $ff, $ff, 7, $97, $88, $69, $4a, $2b, $1c, $2d, $9d, $7e, $6f, $ff, $ff, $ff, $ff, $ff, $81, $62, $53, $44, 5, 6, $f6, $e7, $78, $69, $5a, $5b, $3c, $2d, $2e, $1f, 0, 0, 0, 0, $b0, $b1, $a2, $b3, $44, $35, $36, $37, 8, $f8, $a, $b, 0, 0, 0, 0, 0, $70, $61, $62, $f2, $e3, $d4, $c5, $b6, $b7, $b8, $99, 0, 0, 0, 0, 0, 0, $f0, $f1, $82, $83, $84, $85, $66, $57, $58, $59, 0, 0, 0, 0, 0, $70, $61, $62, $e2, $e3, $d4, $d5, $b6, $a7, $b8, $a9, 0, 0, 0, 0, $a0, $b1, $a2, $a3, $44, $35, $26, $37, $f7, $19, $f9, $fa