|
|
|
@@ -27,14 +27,17 @@ main::@4: scope:[main] from main::@3 main::@5
|
|
|
|
|
(byte*) main::col#2 ← phi( main::@3/(byte*) main::col#0 main::@5/(byte*) main::col#1 )
|
|
|
|
|
(bool~) main::$1 ← (byte*) main::col#2 < (const nomodify byte*) COLORS+(number) $7d0
|
|
|
|
|
if((bool~) main::$1) goto main::@5
|
|
|
|
|
to:main::@return
|
|
|
|
|
to:main::@6
|
|
|
|
|
main::@5: scope:[main] from main::@4
|
|
|
|
|
(byte*) main::col#3 ← phi( main::@4/(byte*) main::col#2 )
|
|
|
|
|
(byte~) main::$2 ← < (byte*) main::col#3
|
|
|
|
|
*((byte*) main::col#3) ← (byte~) main::$2
|
|
|
|
|
(byte*) main::col#1 ← ++ (byte*) main::col#3
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
main::@6: scope:[main] from main::@4 main::@6
|
|
|
|
|
*((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)
|
|
|
|
|
to:main::@6
|
|
|
|
|
main::@return: scope:[main] from
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
|
|
|
|
@@ -337,7 +340,10 @@ SYMBOL TABLE SSA
|
|
|
|
|
(byte) MOS6581_SID::POT_X
|
|
|
|
|
(byte) MOS6581_SID::POT_Y
|
|
|
|
|
(byte) MOS6581_SID::VOLUME_FILTER_MODE
|
|
|
|
|
(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = (byte) $20
|
|
|
|
|
(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER = (byte) $12
|
|
|
|
|
(const nomodify byte*) SCREEN = (byte*)(number) $800
|
|
|
|
|
(const nomodify struct MOS6569_VICII*) VICII = (struct MOS6569_VICII*)(number) $d000
|
|
|
|
|
(void()) __start()
|
|
|
|
|
(label) __start::@1
|
|
|
|
|
(label) __start::@return
|
|
|
|
@@ -350,6 +356,7 @@ SYMBOL TABLE SSA
|
|
|
|
|
(label) main::@3
|
|
|
|
|
(label) main::@4
|
|
|
|
|
(label) main::@5
|
|
|
|
|
(label) main::@6
|
|
|
|
|
(label) main::@return
|
|
|
|
|
(byte*) main::col
|
|
|
|
|
(byte*) main::col#0
|
|
|
|
@@ -372,6 +379,7 @@ Inlining cast *((const nomodify to_volatile byte*) IO_KEY) ← (unumber)(number)
|
|
|
|
|
Successful SSA optimization Pass2InlineCast
|
|
|
|
|
Simplifying constant pointer cast (byte*) 53295
|
|
|
|
|
Simplifying constant pointer cast (byte*) 53296
|
|
|
|
|
Simplifying constant pointer cast (struct MOS6569_VICII*) 53248
|
|
|
|
|
Simplifying constant pointer cast (byte*) 2048
|
|
|
|
|
Simplifying constant pointer cast (byte*) 55296
|
|
|
|
|
Simplifying constant integer cast $47
|
|
|
|
@@ -393,6 +401,8 @@ Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
|
|
|
Constant (const byte*) main::sc#0 = SCREEN
|
|
|
|
|
Constant (const byte*) main::col#0 = COLORS
|
|
|
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
|
|
|
Removing unused block main::@return
|
|
|
|
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
|
|
|
|
Removing unused procedure __start
|
|
|
|
|
Removing unused procedure block __start
|
|
|
|
|
Removing unused procedure block __start::@1
|
|
|
|
@@ -413,6 +423,7 @@ Coalesced down to 2 phi equivalence classes
|
|
|
|
|
Culled Empty Block (label) main::@3
|
|
|
|
|
Renumbering block main::@4 to main::@3
|
|
|
|
|
Renumbering block main::@5 to main::@4
|
|
|
|
|
Renumbering block main::@6 to main::@5
|
|
|
|
|
|
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
|
|
|
|
|
|
|
@@ -430,10 +441,10 @@ main::@1: scope:[main] from main main::@2
|
|
|
|
|
main::@3: scope:[main] from main::@1 main::@4
|
|
|
|
|
[6] (byte*) main::col#2 ← phi( main::@1/(const nomodify byte*) COLORS main::@4/(byte*) main::col#1 )
|
|
|
|
|
[7] if((byte*) main::col#2<(const nomodify byte*) COLORS+(word) $7d0) goto main::@4
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@3
|
|
|
|
|
[8] return
|
|
|
|
|
to:@return
|
|
|
|
|
to:main::@5
|
|
|
|
|
main::@5: scope:[main] from main::@3 main::@5
|
|
|
|
|
[8] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER)
|
|
|
|
|
to:main::@5
|
|
|
|
|
main::@4: scope:[main] from main::@3
|
|
|
|
|
[9] (byte~) main::$2 ← < (byte*) main::col#2
|
|
|
|
|
[10] *((byte*) main::col#2) ← (byte~) main::$2
|
|
|
|
@@ -754,7 +765,7 @@ Allocated zp[1]:6 [ main::$2 ]
|
|
|
|
|
INITIAL ASM
|
|
|
|
|
Target platform is mega65 / MEGA45GS02
|
|
|
|
|
// File Comments
|
|
|
|
|
// Hello World for MEGA 65 - putting chars directly to the screen
|
|
|
|
|
// Test a few VIC 3/4 features
|
|
|
|
|
// MEGA65 Registers and Constants
|
|
|
|
|
// The MOS 6526 Complex Interface Adapter (CIA)
|
|
|
|
|
// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
|
|
|
|
@@ -774,10 +785,14 @@ Target platform is mega65 / MEGA45GS02
|
|
|
|
|
// Global Constants & labels
|
|
|
|
|
// Map 2nd KB of colour RAM $DC00-$DFFF (hiding CIA's)
|
|
|
|
|
.const CRAM2K = 1
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20
|
|
|
|
|
// I/O Personality selection
|
|
|
|
|
.label IO_KEY = $d02f
|
|
|
|
|
// C65 Banking Register
|
|
|
|
|
.label IO_BANK = $d030
|
|
|
|
|
// The VIC-II MOS 6567/6569
|
|
|
|
|
.label VICII = $d000
|
|
|
|
|
.label SCREEN = $800
|
|
|
|
|
.label COLORS = $d800
|
|
|
|
|
.segment Code
|
|
|
|
@@ -847,11 +862,13 @@ main: {
|
|
|
|
|
cmp #<COLORS+$7d0
|
|
|
|
|
bcc __b4
|
|
|
|
|
!:
|
|
|
|
|
jmp __breturn
|
|
|
|
|
// main::@return
|
|
|
|
|
__breturn:
|
|
|
|
|
// [8] return
|
|
|
|
|
rts
|
|
|
|
|
jmp __b5
|
|
|
|
|
// main::@5
|
|
|
|
|
__b5:
|
|
|
|
|
// [8] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- _deref_pbuc1=_deref_pbuc2
|
|
|
|
|
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
|
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR
|
|
|
|
|
jmp __b5
|
|
|
|
|
// main::@4
|
|
|
|
|
__b4:
|
|
|
|
|
// [9] (byte~) main::$2 ← < (byte*) main::col#2 -- vbuz1=_lo_pbuz2
|
|
|
|
@@ -889,6 +906,7 @@ Statement [2] *((const nomodify to_volatile byte*) IO_KEY) ← (byte) $53 [ ] (
|
|
|
|
|
Statement [3] *((const nomodify to_volatile byte*) IO_BANK) ← *((const nomodify to_volatile byte*) IO_BANK) | (const nomodify byte) CRAM2K [ ] ( [ ] { } ) always clobbers reg byte a
|
|
|
|
|
Statement [5] if((byte*) main::sc#2<(const nomodify byte*) SCREEN+(word) $7d0) goto main::@2 [ main::sc#2 ] ( [ main::sc#2 ] { } ) always clobbers reg byte a
|
|
|
|
|
Statement [7] if((byte*) main::col#2<(const nomodify byte*) COLORS+(word) $7d0) goto main::@4 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte a
|
|
|
|
|
Statement [8] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) [ ] ( [ ] { } ) always clobbers reg byte a
|
|
|
|
|
Statement [10] *((byte*) main::col#2) ← (byte~) main::$2 [ main::col#2 ] ( [ main::col#2 ] { } ) always clobbers reg byte y
|
|
|
|
|
Statement [12] *((byte*) main::sc#2) ← (byte) '*' [ main::sc#2 ] ( [ main::sc#2 ] { } ) always clobbers reg byte a reg byte y
|
|
|
|
|
Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 ,
|
|
|
|
@@ -904,17 +922,17 @@ Uplift Scope [MOS4569_VICIII]
|
|
|
|
|
Uplift Scope [MEGA65_VICIV]
|
|
|
|
|
Uplift Scope []
|
|
|
|
|
|
|
|
|
|
Uplifting [main] best 1050 combination zp[2]:2 [ main::sc#2 main::sc#1 ] zp[2]:4 [ main::col#2 main::col#1 ] reg byte a [ main::$2 ]
|
|
|
|
|
Uplifting [MOS6526_CIA] best 1050 combination
|
|
|
|
|
Uplifting [MOS6569_VICII] best 1050 combination
|
|
|
|
|
Uplifting [MOS6581_SID] best 1050 combination
|
|
|
|
|
Uplifting [MOS4569_VICIII] best 1050 combination
|
|
|
|
|
Uplifting [MEGA65_VICIV] best 1050 combination
|
|
|
|
|
Uplifting [] best 1050 combination
|
|
|
|
|
Uplifting [main] best 1154 combination zp[2]:2 [ main::sc#2 main::sc#1 ] zp[2]:4 [ main::col#2 main::col#1 ] reg byte a [ main::$2 ]
|
|
|
|
|
Uplifting [MOS6526_CIA] best 1154 combination
|
|
|
|
|
Uplifting [MOS6569_VICII] best 1154 combination
|
|
|
|
|
Uplifting [MOS6581_SID] best 1154 combination
|
|
|
|
|
Uplifting [MOS4569_VICIII] best 1154 combination
|
|
|
|
|
Uplifting [MEGA65_VICIV] best 1154 combination
|
|
|
|
|
Uplifting [] best 1154 combination
|
|
|
|
|
|
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
|
|
|
// File Comments
|
|
|
|
|
// Hello World for MEGA 65 - putting chars directly to the screen
|
|
|
|
|
// Test a few VIC 3/4 features
|
|
|
|
|
// MEGA65 Registers and Constants
|
|
|
|
|
// The MOS 6526 Complex Interface Adapter (CIA)
|
|
|
|
|
// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
|
|
|
|
@@ -934,10 +952,14 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|
|
|
|
// Global Constants & labels
|
|
|
|
|
// Map 2nd KB of colour RAM $DC00-$DFFF (hiding CIA's)
|
|
|
|
|
.const CRAM2K = 1
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20
|
|
|
|
|
// I/O Personality selection
|
|
|
|
|
.label IO_KEY = $d02f
|
|
|
|
|
// C65 Banking Register
|
|
|
|
|
.label IO_BANK = $d030
|
|
|
|
|
// The VIC-II MOS 6567/6569
|
|
|
|
|
.label VICII = $d000
|
|
|
|
|
.label SCREEN = $800
|
|
|
|
|
.label COLORS = $d800
|
|
|
|
|
.segment Code
|
|
|
|
@@ -1006,11 +1028,13 @@ main: {
|
|
|
|
|
cmp #<COLORS+$7d0
|
|
|
|
|
bcc __b4
|
|
|
|
|
!:
|
|
|
|
|
jmp __breturn
|
|
|
|
|
// main::@return
|
|
|
|
|
__breturn:
|
|
|
|
|
// [8] return
|
|
|
|
|
rts
|
|
|
|
|
jmp __b5
|
|
|
|
|
// main::@5
|
|
|
|
|
__b5:
|
|
|
|
|
// [8] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- _deref_pbuc1=_deref_pbuc2
|
|
|
|
|
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
|
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR
|
|
|
|
|
jmp __b5
|
|
|
|
|
// main::@4
|
|
|
|
|
__b4:
|
|
|
|
|
// [9] (byte~) main::$2 ← < (byte*) main::col#2 -- vbuaa=_lo_pbuz1
|
|
|
|
@@ -1042,11 +1066,10 @@ main: {
|
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
|
|
|
Removing instruction jmp __b1
|
|
|
|
|
Removing instruction jmp __b3
|
|
|
|
|
Removing instruction jmp __breturn
|
|
|
|
|
Removing instruction jmp __b5
|
|
|
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
|
|
|
Removing instruction __b1_from_main:
|
|
|
|
|
Removing instruction __b3_from___b1:
|
|
|
|
|
Removing instruction __breturn:
|
|
|
|
|
Removing instruction __b3_from___b4:
|
|
|
|
|
Removing instruction __b1_from___b2:
|
|
|
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
|
|
@@ -1340,14 +1363,17 @@ FINAL SYMBOL TABLE
|
|
|
|
|
(byte) MOS6581_SID::POT_X
|
|
|
|
|
(byte) MOS6581_SID::POT_Y
|
|
|
|
|
(byte) MOS6581_SID::VOLUME_FILTER_MODE
|
|
|
|
|
(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = (byte) $20
|
|
|
|
|
(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER = (byte) $12
|
|
|
|
|
(const nomodify byte*) SCREEN = (byte*) 2048
|
|
|
|
|
(const nomodify struct MOS6569_VICII*) VICII = (struct MOS6569_VICII*) 53248
|
|
|
|
|
(void()) main()
|
|
|
|
|
(byte~) main::$2 reg byte a 22.0
|
|
|
|
|
(label) main::@1
|
|
|
|
|
(label) main::@2
|
|
|
|
|
(label) main::@3
|
|
|
|
|
(label) main::@4
|
|
|
|
|
(label) main::@return
|
|
|
|
|
(label) main::@5
|
|
|
|
|
(byte*) main::col
|
|
|
|
|
(byte*) main::col#1 col zp[2]:4 22.0
|
|
|
|
|
(byte*) main::col#2 col zp[2]:4 13.75
|
|
|
|
@@ -1361,10 +1387,10 @@ reg byte a [ main::$2 ]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
|
|
|
Score: 960
|
|
|
|
|
Score: 1064
|
|
|
|
|
|
|
|
|
|
// File Comments
|
|
|
|
|
// Hello World for MEGA 65 - putting chars directly to the screen
|
|
|
|
|
// Test a few VIC 3/4 features
|
|
|
|
|
// MEGA65 Registers and Constants
|
|
|
|
|
// The MOS 6526 Complex Interface Adapter (CIA)
|
|
|
|
|
// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
|
|
|
|
@@ -1384,10 +1410,14 @@ Score: 960
|
|
|
|
|
// Global Constants & labels
|
|
|
|
|
// Map 2nd KB of colour RAM $DC00-$DFFF (hiding CIA's)
|
|
|
|
|
.const CRAM2K = 1
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_RASTER = $12
|
|
|
|
|
.const OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR = $20
|
|
|
|
|
// I/O Personality selection
|
|
|
|
|
.label IO_KEY = $d02f
|
|
|
|
|
// C65 Banking Register
|
|
|
|
|
.label IO_BANK = $d030
|
|
|
|
|
// The VIC-II MOS 6567/6569
|
|
|
|
|
.label VICII = $d000
|
|
|
|
|
.label SCREEN = $800
|
|
|
|
|
.label COLORS = $d800
|
|
|
|
|
.segment Code
|
|
|
|
@@ -1458,10 +1488,13 @@ main: {
|
|
|
|
|
cmp #<COLORS+$7d0
|
|
|
|
|
bcc __b4
|
|
|
|
|
!:
|
|
|
|
|
// main::@return
|
|
|
|
|
// }
|
|
|
|
|
// [8] return
|
|
|
|
|
rts
|
|
|
|
|
// main::@5
|
|
|
|
|
__b5:
|
|
|
|
|
// VICII->BORDER_COLOR = VICII->RASTER
|
|
|
|
|
// [8] *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) ← *((byte*)(const nomodify struct MOS6569_VICII*) VICII+(const byte) OFFSET_STRUCT_MOS6569_VICII_RASTER) -- _deref_pbuc1=_deref_pbuc2
|
|
|
|
|
lda VICII+OFFSET_STRUCT_MOS6569_VICII_RASTER
|
|
|
|
|
sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR
|
|
|
|
|
jmp __b5
|
|
|
|
|
// main::@4
|
|
|
|
|
__b4:
|
|
|
|
|
// <col
|
|
|
|
|