2019-08-01 10:58:40 +00:00
|
|
|
// Example of structs that can be optimized by going planar
|
|
|
|
// https://cc65.github.io/mailarchive/2010-09/8593.html?fbclid=IwAR1IF_cTdyWcFeKU93VfL2Un1EuLjkGh7O7dQ4EVj4kpJzJAj01dbmEFQt8
|
|
|
|
.pc = $801 "Basic"
|
|
|
|
:BasicUpstart(main)
|
|
|
|
.pc = $80d "Program"
|
|
|
|
.const OFFSET_STRUCT_POS_Y = 1
|
|
|
|
.const XSPACE = $14
|
|
|
|
.const YSPACE = $14
|
2019-08-07 11:22:05 +00:00
|
|
|
.label x = 5
|
2019-08-01 10:58:40 +00:00
|
|
|
.label idx = 4
|
2019-08-07 11:22:05 +00:00
|
|
|
.label y = 3
|
2019-08-07 09:27:55 +00:00
|
|
|
.label line = 2
|
2019-08-01 10:58:40 +00:00
|
|
|
main: {
|
|
|
|
lda #0
|
2019-08-07 19:00:19 +00:00
|
|
|
sta.z y
|
|
|
|
sta.z idx
|
|
|
|
sta.z x
|
|
|
|
sta.z line
|
2019-08-07 09:27:55 +00:00
|
|
|
b2:
|
2019-08-07 19:00:19 +00:00
|
|
|
inc.z x
|
2019-08-01 10:58:40 +00:00
|
|
|
ldy #0
|
2019-08-07 09:27:55 +00:00
|
|
|
b4:
|
2019-08-07 19:00:19 +00:00
|
|
|
lda.z idx
|
2019-08-01 10:58:40 +00:00
|
|
|
asl
|
|
|
|
tax
|
2019-08-07 19:00:19 +00:00
|
|
|
lda.z y
|
2019-08-01 10:58:40 +00:00
|
|
|
sta p+OFFSET_STRUCT_POS_Y,x
|
2019-08-07 19:00:19 +00:00
|
|
|
lda.z x
|
2019-08-01 10:58:40 +00:00
|
|
|
sta p,x
|
2019-08-07 19:00:19 +00:00
|
|
|
inc.z idx
|
|
|
|
lax.z x
|
2019-08-01 10:58:40 +00:00
|
|
|
axs #-[XSPACE]
|
2019-08-07 19:00:19 +00:00
|
|
|
stx.z x
|
2019-08-01 10:58:40 +00:00
|
|
|
iny
|
2019-08-07 11:22:05 +00:00
|
|
|
cpy #8
|
|
|
|
bcc b4
|
2019-08-07 19:00:19 +00:00
|
|
|
lax.z y
|
2019-08-07 11:22:05 +00:00
|
|
|
axs #-[YSPACE]
|
2019-08-07 19:00:19 +00:00
|
|
|
stx.z y
|
|
|
|
inc.z line
|
|
|
|
lda.z line
|
2019-08-07 11:22:05 +00:00
|
|
|
cmp #8
|
|
|
|
bcc b2
|
|
|
|
rts
|
2019-08-01 10:58:40 +00:00
|
|
|
}
|
|
|
|
p: .fill 2*$40, 0
|