1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +00:00

Added sprite MSB

This commit is contained in:
jespergravgaard 2017-12-05 21:49:40 +01:00
parent ad9873d201
commit c1b2b8ab7d
8 changed files with 13332 additions and 10606 deletions

View File

@ -74,15 +74,19 @@ public class AsmProgramStaticRegisterValues {
if (instructionType.getMnemnonic().equals("lda") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setA(instruction.getParameter());
current.setaMem(null);
Integer immValue = getImmValue(instruction.getParameter());
if (immValue != null) {
current.setZ(immValue == 0);
current.setN(immValue > 127);
}
}
if (instructionType.getMnemnonic().equals("lda") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setaMem(instruction.getParameter());
current.setA(null);
}
if (instructionType.getMnemnonic().equals("sta") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setaMem(instruction.getParameter());
current.setA(null);
}
if (instructionType.getMnemnonic().equals("ldx") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setX(instruction.getParameter());
@ -93,8 +97,13 @@ public class AsmProgramStaticRegisterValues {
current.setN(immValue > 127);
}
}
if (instructionType.getMnemnonic().equals("ldx") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setxMem(instruction.getParameter());
current.setX(null);
}
if (instructionType.getMnemnonic().equals("stx") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setxMem(instruction.getParameter());
current.setX(null);
}
if (instructionType.getMnemnonic().equals("ldy") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setY(instruction.getParameter());
@ -105,8 +114,13 @@ public class AsmProgramStaticRegisterValues {
current.setN(immValue > 127);
}
}
if (instructionType.getMnemnonic().equals("ldy") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setyMem(instruction.getParameter());
current.setY(null);
}
if (instructionType.getMnemnonic().equals("sty") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setyMem(instruction.getParameter());
current.setY(null);
}
if (instructionType.getMnemnonic().equals("txa")) {
current.setA(current.getX());

View File

@ -0,0 +1,2 @@
and {zpby1}
sta {zpby1}

View File

@ -0,0 +1,2 @@
ora {zpby1}
sta {zpby1}

View File

@ -11,6 +11,7 @@
.const BORDERCOL = $d020
.const SPRITES_XPOS = $d000
.const SPRITES_YPOS = $d001
.const SPRITES_XMSB = $d010
.const SPRITES_ENABLE = $d015
.const SPRITES_EXPAND_Y = $d017
.const SPRITES_EXPAND_X = $d01d
@ -21,7 +22,7 @@
.const sintab_y = $1100
.const sprites = $2000
.label progress_idx = 4
.label progress_cursor = 9
.label progress_cursor = $a
.label sin_idx_x = 2
.label sin_idx_y = 3
jsr main
@ -38,24 +39,40 @@ main: {
jmp b2
}
anim: {
.label _3 = 5
.label xidx = 4
.label yidx = 5
.label j = 6
.label x = $e
.label x_msb = 5
.label j2 = 6
.label j = 7
inc BORDERCOL
lda sin_idx_x
sta xidx
lda sin_idx_y
sta yidx
ldy sin_idx_y
lda #0
sta j
ldy #$c
lda #$c
sta j2
lda #0
sta x_msb
b1:
ldx xidx
lda sintab_x,x
sta SPRITES_XPOS,y
ldx yidx
lda sintab_y,x
sta SPRITES_YPOS,y
clc
adc #<$1e
sta x
lda #>$1e
adc #0
sta x+1
asl _3
ora x_msb
sta x_msb
lda x
ldx j2
sta SPRITES_XPOS,x
lda sintab_y,y
ldx j2
sta SPRITES_YPOS,x
lda xidx
clc
adc #$a
@ -66,22 +83,28 @@ anim: {
sbc #sinlen_x
sta xidx
b2:
lda yidx
tya
clc
adc #8
sta yidx
cmp #sinlen_y
tay
cpy #sinlen_y
bcc b3
tya
sec
sbc #sinlen_y
sta yidx
tay
b3:
dey
dey
lda j2
sec
sbc #1
sta j2
dec j2
inc j
lda j
cmp #7
bne b1
lda x_msb
sta SPRITES_XMSB
inc sin_idx_x
lda sin_idx_x
cmp #sinlen_x
@ -123,7 +146,7 @@ init: {
sta gen_sintab.sintab+1
lda #sinlen_x
sta gen_sintab.length
lda #$10
lda #0
sta gen_sintab.min
ldx #$ff
jsr gen_sintab
@ -138,7 +161,7 @@ init: {
sta gen_sintab.sintab+1
lda #sinlen_y
sta gen_sintab.length
lda #$30
lda #$32
sta gen_sintab.min
ldx #$d0
jsr gen_sintab
@ -146,7 +169,7 @@ init: {
rts
}
clear_screen: {
.label sc = 7
.label sc = 8
lda #<SCREEN
sta sc
lda #>SCREEN
@ -171,15 +194,15 @@ clear_screen: {
}
gen_sintab: {
.const f_2pi = $e2e5
.label _0 = $d
.label _3 = $d
.label _13 = $d
.label _17 = $d
.label _23 = $d
.label _0 = $e
.label _3 = $e
.label _13 = $e
.label _17 = $e
.label _23 = $e
.label i = 2
.label min = 2
.label length = 3
.label sintab = 7
.label sintab = 8
txa
sta _0
lda #0
@ -307,8 +330,8 @@ progress_inc: {
progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
getFAC: {
.label w = $d
.label return = $d
.label w = $e
.label return = $e
jsr $b1aa
sty $fe
sta $ff
@ -321,7 +344,7 @@ getFAC: {
rts
}
addMEMtoFAC: {
.label mem = $b
.label mem = $c
jsr prepareMEM
lda $fe
ldy $ff
@ -329,7 +352,7 @@ addMEMtoFAC: {
rts
}
prepareMEM: {
.label mem = $b
.label mem = $c
lda mem
sta memLo
lda mem+1
@ -337,7 +360,7 @@ prepareMEM: {
rts
}
mulFACbyMEM: {
.label mem = $b
.label mem = $c
jsr prepareMEM
lda $fe
ldy $ff
@ -349,7 +372,7 @@ sinFAC: {
rts
}
divMEMbyFAC: {
.label mem = $b
.label mem = $c
jsr prepareMEM
lda $fe
ldy $ff
@ -357,8 +380,8 @@ divMEMbyFAC: {
rts
}
setFAC: {
.label _0 = $b
.label w = $d
.label _0 = $c
.label w = $e
lda w
sta _0
lda w+1
@ -370,7 +393,7 @@ setFAC: {
rts
}
setMEMtoFAC: {
.label mem = $b
.label mem = $c
jsr prepareMEM
ldx $fe
ldy $ff
@ -386,11 +409,11 @@ setARGtoFAC: {
rts
}
progress_init: {
.label line = 9
.label line = $a
rts
}
gen_sprites: {
.label spr = 7
.label spr = 8
.label i = 2
lda #<sprites
sta spr
@ -422,12 +445,12 @@ gen_sprites: {
cml: .text "camelot"
}
gen_chargen_sprite: {
.label _0 = $d
.label _1 = $d
.label sprite = 9
.label chargen = $b
.label _0 = $e
.label _1 = $e
.label sprite = $a
.label chargen = $c
.label bits = 4
.label s_gen = $f
.label s_gen = 7
.label x = 5
.label y = 3
.label c = 6

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,6 +21,8 @@
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word) 53271
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word) 53248
(byte*) SPRITES_YPOS
@ -29,10 +31,13 @@
(label) addMEMtoFAC::@1
(label) addMEMtoFAC::@return
(byte*) addMEMtoFAC::mem
(byte*) addMEMtoFAC::mem#2 mem zp ZP_PTR_BYTE:11 2.0
(byte*) addMEMtoFAC::mem#2 mem zp ZP_PTR_BYTE:12 2.0
(void()) anim()
(byte~) anim::$0 reg byte a 202.0
(byte~) anim::$1 reg byte a 202.0
(byte~) anim::$3 $3 zp ZP_BYTE:5 101.0
(byte~) anim::$4 reg byte a 202.0
(byte~) anim::$6 reg byte a 202.0
(byte~) anim::$7 reg byte a 202.0
(label) anim::@1
(label) anim::@14
(label) anim::@15
@ -45,38 +50,43 @@
(label) anim::@8
(label) anim::@return
(byte) anim::j
(byte) anim::j#1 j zp ZP_BYTE:6 151.5
(byte) anim::j#2 j zp ZP_BYTE:6 13.466666666666667
(byte) anim::j#1 j zp ZP_BYTE:7 151.5
(byte) anim::j#2 j zp ZP_BYTE:7 10.1
(byte) anim::j2
(byte) anim::j2#1 reg byte y 202.0
(byte) anim::j2#2 reg byte y 67.33333333333333
(byte) anim::j2#3 reg byte y 31.076923076923077
(byte) anim::j2#1 reg byte a 202.0
(byte) anim::j2#2 j2 zp ZP_BYTE:6 67.33333333333333
(byte) anim::j2#3 j2 zp ZP_BYTE:6 22.444444444444443
(word) anim::x
(word) anim::x#0 x zp ZP_WORD:14 75.75
(byte) anim::x_msb
(byte) anim::x_msb#1 x_msb zp ZP_BYTE:5 12.0
(byte) anim::x_msb#2 x_msb zp ZP_BYTE:5 67.33333333333333
(byte) anim::xidx
(byte) anim::xidx#0 xidx zp ZP_BYTE:4 2.0
(byte) anim::xidx#1 xidx zp ZP_BYTE:4 202.0
(byte) anim::xidx#2 xidx zp ZP_BYTE:4 202.0
(byte) anim::xidx#3 xidx zp ZP_BYTE:4 61.0
(byte) anim::xidx#3 xidx zp ZP_BYTE:4 30.5
(byte) anim::xidx#5 xidx zp ZP_BYTE:4 33.666666666666664
(byte) anim::yidx
(byte) anim::yidx#0 yidx zp ZP_BYTE:5 4.0
(byte) anim::yidx#1 yidx zp ZP_BYTE:5 202.0
(byte) anim::yidx#2 yidx zp ZP_BYTE:5 202.0
(byte) anim::yidx#3 yidx zp ZP_BYTE:5 33.888888888888886
(byte) anim::yidx#6 yidx zp ZP_BYTE:5 60.599999999999994
(byte) anim::yidx#0 reg byte y 4.0
(byte) anim::yidx#1 reg byte y 202.0
(byte) anim::yidx#2 reg byte y 202.0
(byte) anim::yidx#3 reg byte y 21.78571428571429
(byte) anim::yidx#6 reg byte y 60.599999999999994
(void()) clear_screen()
(label) clear_screen::@1
(label) clear_screen::@return
(byte*) clear_screen::sc
(byte*) clear_screen::sc#1 sc zp ZP_PTR_BYTE:7 16.5
(byte*) clear_screen::sc#2 sc zp ZP_PTR_BYTE:7 16.5
(byte*) clear_screen::sc#1 sc zp ZP_PTR_BYTE:8 16.5
(byte*) clear_screen::sc#2 sc zp ZP_PTR_BYTE:8 16.5
(void()) divMEMbyFAC((byte*) divMEMbyFAC::mem)
(label) divMEMbyFAC::@1
(label) divMEMbyFAC::@return
(byte*) divMEMbyFAC::mem
(byte*) divMEMbyFAC::mem#2 mem zp ZP_PTR_BYTE:11 2.0
(byte*) divMEMbyFAC::mem#2 mem zp ZP_PTR_BYTE:12 2.0
(void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite)
(word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:13 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:13 4.0
(word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:14 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:14 4.0
(byte~) gen_chargen_sprite::$4 reg byte a 2002.0
(byte~) gen_chargen_sprite::$7 reg byte a 20002.0
(label) gen_chargen_sprite::@1
@ -102,25 +112,25 @@
(byte) gen_chargen_sprite::ch
(byte) gen_chargen_sprite::ch#0 reg byte x 6.5
(byte*) gen_chargen_sprite::chargen
(byte*) gen_chargen_sprite::chargen#0 chargen zp ZP_PTR_BYTE:11 3.678571428571429
(byte*) gen_chargen_sprite::chargen#0 chargen zp ZP_PTR_BYTE:12 3.678571428571429
(byte) gen_chargen_sprite::s_gen
(byte) gen_chargen_sprite::s_gen#1 s_gen zp ZP_BYTE:15 10001.0
(byte) gen_chargen_sprite::s_gen#3 s_gen zp ZP_BYTE:15 21003.0
(byte) gen_chargen_sprite::s_gen#5 s_gen zp ZP_BYTE:15 400.4
(byte) gen_chargen_sprite::s_gen#6 s_gen zp ZP_BYTE:15 3500.5
(byte) gen_chargen_sprite::s_gen#1 s_gen zp ZP_BYTE:7 10001.0
(byte) gen_chargen_sprite::s_gen#3 s_gen zp ZP_BYTE:7 21003.0
(byte) gen_chargen_sprite::s_gen#5 s_gen zp ZP_BYTE:7 400.4
(byte) gen_chargen_sprite::s_gen#6 s_gen zp ZP_BYTE:7 3500.5
(byte) gen_chargen_sprite::s_gen_cnt
(byte) gen_chargen_sprite::s_gen_cnt#1 reg byte y 15001.5
(byte) gen_chargen_sprite::s_gen_cnt#3 reg byte y 7001.0
(byte) gen_chargen_sprite::s_gen_cnt#4 reg byte y 400.4
(byte) gen_chargen_sprite::s_gen_cnt#5 reg byte y 3500.5
(byte*) gen_chargen_sprite::sprite
(byte*) gen_chargen_sprite::sprite#0 sprite zp ZP_PTR_BYTE:9 2.1666666666666665
(byte*) gen_chargen_sprite::sprite#1 sprite zp ZP_PTR_BYTE:9 20002.0
(byte*) gen_chargen_sprite::sprite#10 sprite zp ZP_PTR_BYTE:9 420.59999999999997
(byte*) gen_chargen_sprite::sprite#11 sprite zp ZP_PTR_BYTE:9 102.0
(byte*) gen_chargen_sprite::sprite#2 sprite zp ZP_PTR_BYTE:9 67.33333333333333
(byte*) gen_chargen_sprite::sprite#3 sprite zp ZP_PTR_BYTE:9 7625.875
(byte*) gen_chargen_sprite::sprite#4 sprite zp ZP_PTR_BYTE:9 5184.166666666666
(byte*) gen_chargen_sprite::sprite#0 sprite zp ZP_PTR_BYTE:10 2.1666666666666665
(byte*) gen_chargen_sprite::sprite#1 sprite zp ZP_PTR_BYTE:10 20002.0
(byte*) gen_chargen_sprite::sprite#10 sprite zp ZP_PTR_BYTE:10 420.59999999999997
(byte*) gen_chargen_sprite::sprite#11 sprite zp ZP_PTR_BYTE:10 102.0
(byte*) gen_chargen_sprite::sprite#2 sprite zp ZP_PTR_BYTE:10 67.33333333333333
(byte*) gen_chargen_sprite::sprite#3 sprite zp ZP_PTR_BYTE:10 7625.875
(byte*) gen_chargen_sprite::sprite#4 sprite zp ZP_PTR_BYTE:10 5184.166666666666
(byte) gen_chargen_sprite::x
(byte) gen_chargen_sprite::x#1 x zp ZP_BYTE:5 1501.5
(byte) gen_chargen_sprite::x#6 x zp ZP_BYTE:5 111.22222222222223
@ -128,12 +138,12 @@
(byte) gen_chargen_sprite::y#1 y zp ZP_BYTE:3 151.5
(byte) gen_chargen_sprite::y#2 y zp ZP_BYTE:3 13.173913043478262
(void()) gen_sintab((byte*) gen_sintab::sintab , (byte) gen_sintab::length , (byte) gen_sintab::min , (byte) gen_sintab::max)
(word~) gen_sintab::$0 $0 zp ZP_WORD:13 4.0
(word~) gen_sintab::$13 $13 zp ZP_WORD:13 22.0
(word~) gen_sintab::$17 $17 zp ZP_WORD:13 22.0
(word~) gen_sintab::$23 $23 zp ZP_WORD:13 22.0
(word~) gen_sintab::$0 $0 zp ZP_WORD:14 4.0
(word~) gen_sintab::$13 $13 zp ZP_WORD:14 22.0
(word~) gen_sintab::$17 $17 zp ZP_WORD:14 22.0
(word~) gen_sintab::$23 $23 zp ZP_WORD:14 22.0
(byte~) gen_sintab::$24 reg byte a 22.0
(word~) gen_sintab::$3 $3 zp ZP_WORD:13 4.0
(word~) gen_sintab::$3 $3 zp ZP_WORD:14 4.0
(label) gen_sintab::@1
(label) gen_sintab::@10
(label) gen_sintab::@11
@ -174,7 +184,7 @@
(byte) gen_sintab::min
(byte) gen_sintab::min#2 min zp ZP_BYTE:2 0.2857142857142857
(byte*) gen_sintab::sintab
(byte*) gen_sintab::sintab#12 sintab zp ZP_PTR_BYTE:7 0.2037037037037037
(byte*) gen_sintab::sintab#12 sintab zp ZP_PTR_BYTE:8 0.2037037037037037
(void()) gen_sprites()
(byte~) gen_sprites::$0 reg byte a 22.0
(label) gen_sprites::@1
@ -186,15 +196,15 @@
(byte) gen_sprites::i#1 i zp ZP_BYTE:2 16.5
(byte) gen_sprites::i#2 i zp ZP_BYTE:2 5.5
(byte*) gen_sprites::spr
(byte*) gen_sprites::spr#1 spr zp ZP_PTR_BYTE:7 7.333333333333333
(byte*) gen_sprites::spr#2 spr zp ZP_PTR_BYTE:7 6.6000000000000005
(byte*) gen_sprites::spr#1 spr zp ZP_PTR_BYTE:8 7.333333333333333
(byte*) gen_sprites::spr#2 spr zp ZP_PTR_BYTE:8 6.6000000000000005
(word()) getFAC()
(label) getFAC::@return
(word) getFAC::return
(word) getFAC::return#0 return zp ZP_WORD:13 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:13 22.0
(word) getFAC::return#0 return zp ZP_WORD:14 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:14 22.0
(word) getFAC::w
(word) getFAC::w#1 w zp ZP_WORD:13 4.0
(word) getFAC::w#1 w zp ZP_WORD:14 4.0
(void()) init()
(label) init::@1
(label) init::@2
@ -221,7 +231,7 @@
(label) mulFACbyMEM::@1
(label) mulFACbyMEM::@return
(byte*) mulFACbyMEM::mem
(byte*) mulFACbyMEM::mem#2 mem zp ZP_PTR_BYTE:11 2.0
(byte*) mulFACbyMEM::mem#2 mem zp ZP_PTR_BYTE:12 2.0
(void()) place_sprites()
(label) place_sprites::@1
(label) place_sprites::@return
@ -248,16 +258,16 @@
(byte~) prepareMEM::$1 reg byte a 4.0
(label) prepareMEM::@return
(byte*) prepareMEM::mem
(byte*) prepareMEM::mem#0 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:11 4.666666666666666
(byte*) prepareMEM::mem#0 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:12 4.666666666666666
(byte*) progress_cursor
(byte*) progress_cursor#10 progress_cursor zp ZP_PTR_BYTE:9 4.0
(byte*) progress_cursor#11 progress_cursor zp ZP_PTR_BYTE:9 2.4285714285714284
(byte*) progress_cursor#34 progress_cursor zp ZP_PTR_BYTE:9 0.6551724137931035
(byte*) progress_cursor#10 progress_cursor zp ZP_PTR_BYTE:10 4.0
(byte*) progress_cursor#11 progress_cursor zp ZP_PTR_BYTE:10 2.4285714285714284
(byte*) progress_cursor#34 progress_cursor zp ZP_PTR_BYTE:10 0.6551724137931035
(byte) progress_idx
(byte) progress_idx#10 progress_idx zp ZP_BYTE:4 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:4 2.142857142857143
@ -273,33 +283,33 @@
(void()) progress_init((byte*) progress_init::line)
(label) progress_init::@return
(byte*) progress_init::line
(byte*) progress_init::line#2 line zp ZP_PTR_BYTE:9 0.0625
(byte*) progress_init::line#2 line zp ZP_PTR_BYTE:10 0.0625
(void()) setARGtoFAC()
(label) setARGtoFAC::@return
(void()) setFAC((word) setFAC::w)
(byte*~) setFAC::$0 $0 zp ZP_PTR_BYTE:11 4.0
(byte*~) setFAC::$0 $0 zp ZP_PTR_BYTE:12 4.0
(label) setFAC::@1
(label) setFAC::@return
(word) setFAC::w
(word) setFAC::w#0 w zp ZP_WORD:13 4.0
(word) setFAC::w#1 w zp ZP_WORD:13 4.0
(word) setFAC::w#3 w zp ZP_WORD:13 22.0
(word) setFAC::w#4 w zp ZP_WORD:13 22.0
(word) setFAC::w#5 w zp ZP_WORD:13 28.0
(word) setFAC::w#0 w zp ZP_WORD:14 4.0
(word) setFAC::w#1 w zp ZP_WORD:14 4.0
(word) setFAC::w#3 w zp ZP_WORD:14 22.0
(word) setFAC::w#4 w zp ZP_WORD:14 22.0
(word) setFAC::w#5 w zp ZP_WORD:14 28.0
(void()) setMEMtoFAC((byte*) setMEMtoFAC::mem)
(label) setMEMtoFAC::@1
(label) setMEMtoFAC::@return
(byte*) setMEMtoFAC::mem
(byte*) setMEMtoFAC::mem#5 mem zp ZP_PTR_BYTE:11 2.0
(byte*) setMEMtoFAC::mem#5 mem zp ZP_PTR_BYTE:12 2.0
(void()) sinFAC()
(label) sinFAC::@return
(byte) sin_idx_x
(byte) sin_idx_x#11 sin_idx_x zp ZP_BYTE:2 1.4444444444444446
(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.6521739130434783
(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.5172413793103449
(byte) sin_idx_x#3 sin_idx_x zp ZP_BYTE:2 2.0
(byte) sin_idx_y
(byte) sin_idx_y#11 sin_idx_y zp ZP_BYTE:3 2.6
(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.5555555555555556
(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.45454545454545453
(byte) sin_idx_y#3 sin_idx_y zp ZP_BYTE:3 2.0
(byte) sinlen_x
(const byte) sinlen_x#0 sinlen_x = (byte/word/signed word) 221
@ -317,23 +327,25 @@
zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 place_sprites::spr_id#2 place_sprites::spr_id#1 ]
zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::length#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 ]
zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 place_sprites::col#2 place_sprites::col#1 ]
reg byte y [ anim::j2#3 anim::j2#2 ]
zp ZP_BYTE:5 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
zp ZP_BYTE:6 [ anim::j#2 anim::j#1 gen_chargen_sprite::c#3 ]
zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 anim::$3 ]
zp ZP_BYTE:6 [ anim::j2#3 anim::j2#2 gen_chargen_sprite::c#3 ]
reg byte y [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
zp ZP_BYTE:7 [ anim::j#2 anim::j#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_PTR_BYTE:7 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 ]
zp ZP_PTR_BYTE:8 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 ]
reg byte x [ gen_sintab::max#2 ]
zp ZP_PTR_BYTE:9 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ]
zp ZP_PTR_BYTE:11 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setMEMtoFAC::mem#5 setFAC::$0 gen_chargen_sprite::chargen#0 ]
zp ZP_WORD:13 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 gen_sintab::$0 gen_sintab::$3 gen_sintab::$13 gen_sintab::$17 getFAC::return#2 gen_sintab::$23 getFAC::w#1 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 ]
zp ZP_BYTE:15 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
zp ZP_PTR_BYTE:10 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ]
zp ZP_PTR_BYTE:12 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setMEMtoFAC::mem#5 setFAC::$0 gen_chargen_sprite::chargen#0 ]
zp ZP_WORD:14 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 anim::x#0 gen_sintab::$0 gen_sintab::$3 gen_sintab::$13 gen_sintab::$17 getFAC::return#2 gen_sintab::$23 getFAC::w#1 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 ]
reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ]
reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
reg byte y [ place_sprites::j#2 place_sprites::j#1 ]
reg byte x [ place_sprites::j2#3 place_sprites::j2#2 ]
reg byte a [ anim::$0 ]
reg byte a [ anim::$1 ]
reg byte y [ anim::j2#1 ]
reg byte a [ anim::$4 ]
reg byte a [ anim::$6 ]
reg byte a [ anim::$7 ]
reg byte a [ anim::j2#1 ]
reg byte a [ gen_sintab::$24 ]
reg byte a [ progress_inc::$2 ]
reg byte a [ progress_inc::$3 ]

View File

@ -44,9 +44,9 @@ void init() {
place_sprites();
gen_sprites();
progress_init(SCREEN);
gen_sintab(sintab_x, sinlen_x, $10, $ff);
gen_sintab(sintab_x, sinlen_x, $00, $ff);
progress_init(SCREEN+40);
gen_sintab(sintab_y, sinlen_y, $30, $d0);
gen_sintab(sintab_y, sinlen_y, $32, $d0);
clear_screen();
}
@ -89,8 +89,11 @@ void anim() {
byte xidx = sin_idx_x;
byte yidx = sin_idx_y;
byte j2 = 12;
byte x_msb = 0;
for( byte j : 0..6) {
SPRITES_XPOS[j2] = sintab_x[xidx];
word x = (word)$1e + sintab_x[xidx];
x_msb = x_msb<<1 | >x;
SPRITES_XPOS[j2] = (byte)x;
SPRITES_YPOS[j2] = sintab_y[yidx];
xidx = xidx+10;
if(xidx>=sinlen_x) {
@ -103,6 +106,7 @@ void anim() {
j2--;
j2--;
}
*SPRITES_XMSB = x_msb;
// Increment sin indices
if(++sin_idx_x>=sinlen_x) {
@ -152,17 +156,23 @@ void gen_chargen_sprite(byte ch, byte* sprite) {
asm { sei }
*PROCPORT = $32;
for(byte y:0..7) {
// current chargen line
byte bits = chargen[y];
// current sprite byte
byte s_gen = 0;
// #bits filled into current sprite byte
byte s_gen_cnt = 0;
for(byte x:0..7) {
// Find the current chargen pixel (c)
byte c = 0;
if((bits & $80) != 0) {
c = 1;
}
// generate 3 pixels in the sprite byte (s_gen)
for(byte b : 0..2){
s_gen = s_gen<<1 | c;
if(++s_gen_cnt==8) {
// sprite byte filled - store and move to next byte
sprite[0] = s_gen;
sprite[3] = s_gen;
sprite[6] = s_gen;
@ -171,8 +181,10 @@ void gen_chargen_sprite(byte ch, byte* sprite) {
s_gen_cnt = 0;
}
}
// move to next char pixel
bits = bits<<1;
}
// move 3 lines down in the sprite (already moved 1 through ++)
sprite = sprite + 6;
}
*PROCPORT = $37;