1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +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)) { if (instructionType.getMnemnonic().equals("lda") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setA(instruction.getParameter()); current.setA(instruction.getParameter());
current.setaMem(null); current.setaMem(null);
Integer immValue = getImmValue(instruction.getParameter()); Integer immValue = getImmValue(instruction.getParameter());
if (immValue != null) { if (immValue != null) {
current.setZ(immValue == 0); current.setZ(immValue == 0);
current.setN(immValue > 127); 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))) { if (instructionType.getMnemnonic().equals("sta") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setaMem(instruction.getParameter()); current.setaMem(instruction.getParameter());
current.setA(null);
} }
if (instructionType.getMnemnonic().equals("ldx") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) { if (instructionType.getMnemnonic().equals("ldx") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setX(instruction.getParameter()); current.setX(instruction.getParameter());
@ -93,8 +97,13 @@ public class AsmProgramStaticRegisterValues {
current.setN(immValue > 127); 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))) { if (instructionType.getMnemnonic().equals("stx") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setxMem(instruction.getParameter()); current.setxMem(instruction.getParameter());
current.setX(null);
} }
if (instructionType.getMnemnonic().equals("ldy") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) { if (instructionType.getMnemnonic().equals("ldy") && instructionType.getAddressingMode().equals(AsmAddressingMode.IMM)) {
current.setY(instruction.getParameter()); current.setY(instruction.getParameter());
@ -105,8 +114,13 @@ public class AsmProgramStaticRegisterValues {
current.setN(immValue > 127); 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))) { if (instructionType.getMnemnonic().equals("sty") && (instructionType.getAddressingMode().equals(AsmAddressingMode.ZP) || instructionType.getAddressingMode().equals(AsmAddressingMode.ABS))) {
current.setyMem(instruction.getParameter()); current.setyMem(instruction.getParameter());
current.setY(null);
} }
if (instructionType.getMnemnonic().equals("txa")) { if (instructionType.getMnemnonic().equals("txa")) {
current.setA(current.getX()); 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 BORDERCOL = $d020
.const SPRITES_XPOS = $d000 .const SPRITES_XPOS = $d000
.const SPRITES_YPOS = $d001 .const SPRITES_YPOS = $d001
.const SPRITES_XMSB = $d010
.const SPRITES_ENABLE = $d015 .const SPRITES_ENABLE = $d015
.const SPRITES_EXPAND_Y = $d017 .const SPRITES_EXPAND_Y = $d017
.const SPRITES_EXPAND_X = $d01d .const SPRITES_EXPAND_X = $d01d
@ -21,7 +22,7 @@
.const sintab_y = $1100 .const sintab_y = $1100
.const sprites = $2000 .const sprites = $2000
.label progress_idx = 4 .label progress_idx = 4
.label progress_cursor = 9 .label progress_cursor = $a
.label sin_idx_x = 2 .label sin_idx_x = 2
.label sin_idx_y = 3 .label sin_idx_y = 3
jsr main jsr main
@ -38,24 +39,40 @@ main: {
jmp b2 jmp b2
} }
anim: { anim: {
.label _3 = 5
.label xidx = 4 .label xidx = 4
.label yidx = 5 .label x = $e
.label j = 6 .label x_msb = 5
.label j2 = 6
.label j = 7
inc BORDERCOL inc BORDERCOL
lda sin_idx_x lda sin_idx_x
sta xidx sta xidx
lda sin_idx_y ldy sin_idx_y
sta yidx
lda #0 lda #0
sta j sta j
ldy #$c lda #$c
sta j2
lda #0
sta x_msb
b1: b1:
ldx xidx ldx xidx
lda sintab_x,x lda sintab_x,x
sta SPRITES_XPOS,y clc
ldx yidx adc #<$1e
lda sintab_y,x sta x
sta SPRITES_YPOS,y 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 lda xidx
clc clc
adc #$a adc #$a
@ -66,22 +83,28 @@ anim: {
sbc #sinlen_x sbc #sinlen_x
sta xidx sta xidx
b2: b2:
lda yidx tya
clc clc
adc #8 adc #8
sta yidx tay
cmp #sinlen_y cpy #sinlen_y
bcc b3 bcc b3
tya
sec sec
sbc #sinlen_y sbc #sinlen_y
sta yidx tay
b3: b3:
dey lda j2
dey sec
sbc #1
sta j2
dec j2
inc j inc j
lda j lda j
cmp #7 cmp #7
bne b1 bne b1
lda x_msb
sta SPRITES_XMSB
inc sin_idx_x inc sin_idx_x
lda sin_idx_x lda sin_idx_x
cmp #sinlen_x cmp #sinlen_x
@ -123,7 +146,7 @@ init: {
sta gen_sintab.sintab+1 sta gen_sintab.sintab+1
lda #sinlen_x lda #sinlen_x
sta gen_sintab.length sta gen_sintab.length
lda #$10 lda #0
sta gen_sintab.min sta gen_sintab.min
ldx #$ff ldx #$ff
jsr gen_sintab jsr gen_sintab
@ -138,7 +161,7 @@ init: {
sta gen_sintab.sintab+1 sta gen_sintab.sintab+1
lda #sinlen_y lda #sinlen_y
sta gen_sintab.length sta gen_sintab.length
lda #$30 lda #$32
sta gen_sintab.min sta gen_sintab.min
ldx #$d0 ldx #$d0
jsr gen_sintab jsr gen_sintab
@ -146,7 +169,7 @@ init: {
rts rts
} }
clear_screen: { clear_screen: {
.label sc = 7 .label sc = 8
lda #<SCREEN lda #<SCREEN
sta sc sta sc
lda #>SCREEN lda #>SCREEN
@ -171,15 +194,15 @@ clear_screen: {
} }
gen_sintab: { gen_sintab: {
.const f_2pi = $e2e5 .const f_2pi = $e2e5
.label _0 = $d .label _0 = $e
.label _3 = $d .label _3 = $e
.label _13 = $d .label _13 = $e
.label _17 = $d .label _17 = $e
.label _23 = $d .label _23 = $e
.label i = 2 .label i = 2
.label min = 2 .label min = 2
.label length = 3 .label length = 3
.label sintab = 7 .label sintab = 8
txa txa
sta _0 sta _0
lda #0 lda #0
@ -307,8 +330,8 @@ progress_inc: {
progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0 progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
} }
getFAC: { getFAC: {
.label w = $d .label w = $e
.label return = $d .label return = $e
jsr $b1aa jsr $b1aa
sty $fe sty $fe
sta $ff sta $ff
@ -321,7 +344,7 @@ getFAC: {
rts rts
} }
addMEMtoFAC: { addMEMtoFAC: {
.label mem = $b .label mem = $c
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -329,7 +352,7 @@ addMEMtoFAC: {
rts rts
} }
prepareMEM: { prepareMEM: {
.label mem = $b .label mem = $c
lda mem lda mem
sta memLo sta memLo
lda mem+1 lda mem+1
@ -337,7 +360,7 @@ prepareMEM: {
rts rts
} }
mulFACbyMEM: { mulFACbyMEM: {
.label mem = $b .label mem = $c
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -349,7 +372,7 @@ sinFAC: {
rts rts
} }
divMEMbyFAC: { divMEMbyFAC: {
.label mem = $b .label mem = $c
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -357,8 +380,8 @@ divMEMbyFAC: {
rts rts
} }
setFAC: { setFAC: {
.label _0 = $b .label _0 = $c
.label w = $d .label w = $e
lda w lda w
sta _0 sta _0
lda w+1 lda w+1
@ -370,7 +393,7 @@ setFAC: {
rts rts
} }
setMEMtoFAC: { setMEMtoFAC: {
.label mem = $b .label mem = $c
jsr prepareMEM jsr prepareMEM
ldx $fe ldx $fe
ldy $ff ldy $ff
@ -386,11 +409,11 @@ setARGtoFAC: {
rts rts
} }
progress_init: { progress_init: {
.label line = 9 .label line = $a
rts rts
} }
gen_sprites: { gen_sprites: {
.label spr = 7 .label spr = 8
.label i = 2 .label i = 2
lda #<sprites lda #<sprites
sta spr sta spr
@ -422,12 +445,12 @@ gen_sprites: {
cml: .text "camelot" cml: .text "camelot"
} }
gen_chargen_sprite: { gen_chargen_sprite: {
.label _0 = $d .label _0 = $e
.label _1 = $d .label _1 = $e
.label sprite = 9 .label sprite = $a
.label chargen = $b .label chargen = $c
.label bits = 4 .label bits = 4
.label s_gen = $f .label s_gen = 7
.label x = 5 .label x = 5
.label y = 3 .label y = 3
.label c = 6 .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 (const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word) 53277
(byte*) SPRITES_EXPAND_Y (byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word) 53271 (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 (byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word) 53248 (const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word) 53248
(byte*) SPRITES_YPOS (byte*) SPRITES_YPOS
@ -29,10 +31,13 @@
(label) addMEMtoFAC::@1 (label) addMEMtoFAC::@1
(label) addMEMtoFAC::@return (label) addMEMtoFAC::@return
(byte*) addMEMtoFAC::mem (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() (void()) anim()
(byte~) anim::$0 reg byte a 202.0
(byte~) anim::$1 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::@1
(label) anim::@14 (label) anim::@14
(label) anim::@15 (label) anim::@15
@ -45,38 +50,43 @@
(label) anim::@8 (label) anim::@8
(label) anim::@return (label) anim::@return
(byte) anim::j (byte) anim::j
(byte) anim::j#1 j zp ZP_BYTE:6 151.5 (byte) anim::j#1 j zp ZP_BYTE:7 151.5
(byte) anim::j#2 j zp ZP_BYTE:6 13.466666666666667 (byte) anim::j#2 j zp ZP_BYTE:7 10.1
(byte) anim::j2 (byte) anim::j2
(byte) anim::j2#1 reg byte y 202.0 (byte) anim::j2#1 reg byte a 202.0
(byte) anim::j2#2 reg byte y 67.33333333333333 (byte) anim::j2#2 j2 zp ZP_BYTE:6 67.33333333333333
(byte) anim::j2#3 reg byte y 31.076923076923077 (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
(byte) anim::xidx#0 xidx zp ZP_BYTE:4 2.0 (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#1 xidx zp ZP_BYTE:4 202.0
(byte) anim::xidx#2 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::xidx#5 xidx zp ZP_BYTE:4 33.666666666666664
(byte) anim::yidx (byte) anim::yidx
(byte) anim::yidx#0 yidx zp ZP_BYTE:5 4.0 (byte) anim::yidx#0 reg byte y 4.0
(byte) anim::yidx#1 yidx zp ZP_BYTE:5 202.0 (byte) anim::yidx#1 reg byte y 202.0
(byte) anim::yidx#2 yidx zp ZP_BYTE:5 202.0 (byte) anim::yidx#2 reg byte y 202.0
(byte) anim::yidx#3 yidx zp ZP_BYTE:5 33.888888888888886 (byte) anim::yidx#3 reg byte y 21.78571428571429
(byte) anim::yidx#6 yidx zp ZP_BYTE:5 60.599999999999994 (byte) anim::yidx#6 reg byte y 60.599999999999994
(void()) clear_screen() (void()) clear_screen()
(label) clear_screen::@1 (label) clear_screen::@1
(label) clear_screen::@return (label) clear_screen::@return
(byte*) clear_screen::sc (byte*) clear_screen::sc
(byte*) clear_screen::sc#1 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:7 16.5 (byte*) clear_screen::sc#2 sc zp ZP_PTR_BYTE:8 16.5
(void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem)
(label) divMEMbyFAC::@1 (label) divMEMbyFAC::@1
(label) divMEMbyFAC::@return (label) divMEMbyFAC::@return
(byte*) divMEMbyFAC::mem (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) (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::$0 $0 zp ZP_WORD:14 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:13 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::$4 reg byte a 2002.0
(byte~) gen_chargen_sprite::$7 reg byte a 20002.0 (byte~) gen_chargen_sprite::$7 reg byte a 20002.0
(label) gen_chargen_sprite::@1 (label) gen_chargen_sprite::@1
@ -102,25 +112,25 @@
(byte) gen_chargen_sprite::ch (byte) gen_chargen_sprite::ch
(byte) gen_chargen_sprite::ch#0 reg byte x 6.5 (byte) gen_chargen_sprite::ch#0 reg byte x 6.5
(byte*) gen_chargen_sprite::chargen (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
(byte) gen_chargen_sprite::s_gen#1 s_gen zp ZP_BYTE:15 10001.0 (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:15 21003.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:15 400.4 (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:15 3500.5 (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
(byte) gen_chargen_sprite::s_gen_cnt#1 reg byte y 15001.5 (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#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#4 reg byte y 400.4
(byte) gen_chargen_sprite::s_gen_cnt#5 reg byte y 3500.5 (byte) gen_chargen_sprite::s_gen_cnt#5 reg byte y 3500.5
(byte*) gen_chargen_sprite::sprite (byte*) gen_chargen_sprite::sprite
(byte*) gen_chargen_sprite::sprite#0 sprite zp ZP_PTR_BYTE:9 2.1666666666666665 (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:9 20002.0 (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:9 420.59999999999997 (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:9 102.0 (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:9 67.33333333333333 (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:9 7625.875 (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:9 5184.166666666666 (byte*) gen_chargen_sprite::sprite#4 sprite zp ZP_PTR_BYTE:10 5184.166666666666
(byte) gen_chargen_sprite::x (byte) gen_chargen_sprite::x
(byte) gen_chargen_sprite::x#1 x zp ZP_BYTE:5 1501.5 (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 (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#1 y zp ZP_BYTE:3 151.5
(byte) gen_chargen_sprite::y#2 y zp ZP_BYTE:3 13.173913043478262 (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) (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::$0 $0 zp ZP_WORD:14 4.0
(word~) gen_sintab::$13 $13 zp ZP_WORD:13 22.0 (word~) gen_sintab::$13 $13 zp ZP_WORD:14 22.0
(word~) gen_sintab::$17 $17 zp ZP_WORD:13 22.0 (word~) gen_sintab::$17 $17 zp ZP_WORD:14 22.0
(word~) gen_sintab::$23 $23 zp ZP_WORD:13 22.0 (word~) gen_sintab::$23 $23 zp ZP_WORD:14 22.0
(byte~) gen_sintab::$24 reg byte a 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::@1
(label) gen_sintab::@10 (label) gen_sintab::@10
(label) gen_sintab::@11 (label) gen_sintab::@11
@ -174,7 +184,7 @@
(byte) gen_sintab::min (byte) gen_sintab::min
(byte) gen_sintab::min#2 min zp ZP_BYTE:2 0.2857142857142857 (byte) gen_sintab::min#2 min zp ZP_BYTE:2 0.2857142857142857
(byte*) gen_sintab::sintab (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() (void()) gen_sprites()
(byte~) gen_sprites::$0 reg byte a 22.0 (byte~) gen_sprites::$0 reg byte a 22.0
(label) gen_sprites::@1 (label) gen_sprites::@1
@ -186,15 +196,15 @@
(byte) gen_sprites::i#1 i zp ZP_BYTE:2 16.5 (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::i#2 i zp ZP_BYTE:2 5.5
(byte*) gen_sprites::spr (byte*) gen_sprites::spr
(byte*) gen_sprites::spr#1 spr zp ZP_PTR_BYTE:7 7.333333333333333 (byte*) gen_sprites::spr#1 spr zp ZP_PTR_BYTE:8 7.333333333333333
(byte*) gen_sprites::spr#2 spr zp ZP_PTR_BYTE:7 6.6000000000000005 (byte*) gen_sprites::spr#2 spr zp ZP_PTR_BYTE:8 6.6000000000000005
(word()) getFAC() (word()) getFAC()
(label) getFAC::@return (label) getFAC::@return
(word) getFAC::return (word) getFAC::return
(word) getFAC::return#0 return zp ZP_WORD:13 4.333333333333333 (word) getFAC::return#0 return zp ZP_WORD:14 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:13 22.0 (word) getFAC::return#2 return zp ZP_WORD:14 22.0
(word) getFAC::w (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() (void()) init()
(label) init::@1 (label) init::@1
(label) init::@2 (label) init::@2
@ -221,7 +231,7 @@
(label) mulFACbyMEM::@1 (label) mulFACbyMEM::@1
(label) mulFACbyMEM::@return (label) mulFACbyMEM::@return
(byte*) mulFACbyMEM::mem (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() (void()) place_sprites()
(label) place_sprites::@1 (label) place_sprites::@1
(label) place_sprites::@return (label) place_sprites::@return
@ -248,16 +258,16 @@
(byte~) prepareMEM::$1 reg byte a 4.0 (byte~) prepareMEM::$1 reg byte a 4.0
(label) prepareMEM::@return (label) prepareMEM::@return
(byte*) prepareMEM::mem (byte*) prepareMEM::mem
(byte*) prepareMEM::mem#0 mem zp ZP_PTR_BYTE:11 4.0 (byte*) prepareMEM::mem#0 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:11 4.0 (byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:11 4.0 (byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:11 4.0 (byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:11 4.0 (byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:12 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:11 4.666666666666666 (byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:12 4.666666666666666
(byte*) progress_cursor (byte*) progress_cursor
(byte*) progress_cursor#10 progress_cursor zp ZP_PTR_BYTE:9 4.0 (byte*) progress_cursor#10 progress_cursor zp ZP_PTR_BYTE:10 4.0
(byte*) progress_cursor#11 progress_cursor zp ZP_PTR_BYTE:9 2.4285714285714284 (byte*) progress_cursor#11 progress_cursor zp ZP_PTR_BYTE:10 2.4285714285714284
(byte*) progress_cursor#34 progress_cursor zp ZP_PTR_BYTE:9 0.6551724137931035 (byte*) progress_cursor#34 progress_cursor zp ZP_PTR_BYTE:10 0.6551724137931035
(byte) progress_idx (byte) progress_idx
(byte) progress_idx#10 progress_idx zp ZP_BYTE:4 3.0 (byte) progress_idx#10 progress_idx zp ZP_BYTE:4 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:4 2.142857142857143 (byte) progress_idx#12 progress_idx zp ZP_BYTE:4 2.142857142857143
@ -273,33 +283,33 @@
(void()) progress_init((byte*) progress_init::line) (void()) progress_init((byte*) progress_init::line)
(label) progress_init::@return (label) progress_init::@return
(byte*) progress_init::line (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() (void()) setARGtoFAC()
(label) setARGtoFAC::@return (label) setARGtoFAC::@return
(void()) setFAC((word) setFAC::w) (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::@1
(label) setFAC::@return (label) setFAC::@return
(word) setFAC::w (word) setFAC::w
(word) setFAC::w#0 w zp ZP_WORD:13 4.0 (word) setFAC::w#0 w zp ZP_WORD:14 4.0
(word) setFAC::w#1 w zp ZP_WORD:13 4.0 (word) setFAC::w#1 w zp ZP_WORD:14 4.0
(word) setFAC::w#3 w zp ZP_WORD:13 22.0 (word) setFAC::w#3 w zp ZP_WORD:14 22.0
(word) setFAC::w#4 w zp ZP_WORD:13 22.0 (word) setFAC::w#4 w zp ZP_WORD:14 22.0
(word) setFAC::w#5 w zp ZP_WORD:13 28.0 (word) setFAC::w#5 w zp ZP_WORD:14 28.0
(void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem)
(label) setMEMtoFAC::@1 (label) setMEMtoFAC::@1
(label) setMEMtoFAC::@return (label) setMEMtoFAC::@return
(byte*) setMEMtoFAC::mem (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() (void()) sinFAC()
(label) sinFAC::@return (label) sinFAC::@return
(byte) sin_idx_x (byte) sin_idx_x
(byte) sin_idx_x#11 sin_idx_x zp ZP_BYTE:2 1.4444444444444446 (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_x#3 sin_idx_x zp ZP_BYTE:2 2.0
(byte) sin_idx_y (byte) sin_idx_y
(byte) sin_idx_y#11 sin_idx_y zp ZP_BYTE:3 2.6 (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) sin_idx_y#3 sin_idx_y zp ZP_BYTE:3 2.0
(byte) sinlen_x (byte) sinlen_x
(const byte) sinlen_x#0 sinlen_x = (byte/word/signed word) 221 (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: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: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 ] 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::x_msb#2 anim::x_msb#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 anim::$3 ]
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::j2#3 anim::j2#2 gen_chargen_sprite::c#3 ]
zp ZP_BYTE:6 [ anim::j#2 anim::j#1 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 ] 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 ] 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: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: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_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: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_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 ]
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 ]
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 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 x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
reg byte y [ place_sprites::j#2 place_sprites::j#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 x [ place_sprites::j2#3 place_sprites::j2#2 ]
reg byte a [ anim::$0 ]
reg byte a [ anim::$1 ] 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 [ gen_sintab::$24 ]
reg byte a [ progress_inc::$2 ] reg byte a [ progress_inc::$2 ]
reg byte a [ progress_inc::$3 ] reg byte a [ progress_inc::$3 ]

View File

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