1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Added progress while generating sines

This commit is contained in:
jespergravgaard 2017-12-05 01:11:31 +01:00
parent 3569405dc1
commit 5b070b5a27
8 changed files with 15562 additions and 10034 deletions

View File

@ -1,5 +1,7 @@
package dk.camelot64.kickc.model; package dk.camelot64.kickc.model;
import java.util.Collection;
/** /**
* Type inference of expressions (rValues & unary/binary operators) * Type inference of expressions (rValues & unary/binary operators)
*/ */
@ -308,7 +310,11 @@ public class SymbolTypeInference {
} else { } else {
// element type already defined - check for a match // element type already defined - check for a match
if(!typeMatch(elmType, type)) { if(!typeMatch(elmType, type)) {
throw new RuntimeException("Array element has type mismatch "+elm.toString()+" not matching type "+elmType.getTypeName()); if(typeMatch(type, elmType)) {
elmType = type;
} else {
throw new RuntimeException("Array element has type mismatch " + elm.toString() + " not matching type " + elmType.getTypeName());
}
} }
} }
} }
@ -344,9 +350,18 @@ public class SymbolTypeInference {
if (lValueType.equals(rValueType)) { if (lValueType.equals(rValueType)) {
// Types match directly // Types match directly
return true; return true;
} else if (rValueType instanceof SymbolTypeInline && ((SymbolTypeInline) rValueType).getTypes().contains(lValueType)) { } else if (rValueType instanceof SymbolTypeInline) {
// Types match because the right side is a constant that matches the left side if(lValueType instanceof SymbolTypeInline) {
return true; // Both are inline types - RValue type must be superset of LValue
Collection<SymbolTypeInteger> lValueTypes = ((SymbolTypeInline) lValueType).getTypes();
Collection<SymbolTypeInteger> rValueTypes = ((SymbolTypeInline) rValueType).getTypes();
if(rValueTypes.containsAll(lValueTypes)) {
return true;
}
} else if (((SymbolTypeInline) rValueType).getTypes().contains(lValueType)) {
// Types match because the right side is a constant that matches the left side
return true;
}
} else if (lValueType instanceof SymbolTypePointer && rValueType instanceof SymbolTypePointer) { } else if (lValueType instanceof SymbolTypePointer && rValueType instanceof SymbolTypePointer) {
return typeMatch(((SymbolTypePointer) lValueType).getElementType(), ((SymbolTypePointer) rValueType).getElementType()); return typeMatch(((SymbolTypePointer) lValueType).getElementType(), ((SymbolTypePointer) rValueType).getElementType());
} else if (SymbolType.STRING.equals(rValueType)) { } else if (SymbolType.STRING.equals(rValueType)) {

View File

@ -93,8 +93,8 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
if (elementType == null) { if (elementType == null) {
elementType = type; elementType = type;
} else { } else {
if (!elementType.equals(type)) { if (!SymbolTypeInference.typeMatch(type, elementType)) {
throw new RuntimeException("Array type mismatch " + elementType + "!=" + type + " " + valueArray.toString(getProgram())); throw new RuntimeException("Array type mismatch " + elementType + " does not match " + type + " " + valueArray.toString(getProgram()));
} }
} }
elements.add(constantValue); elements.add(constantValue);

View File

@ -124,7 +124,8 @@ public class Pass3LiveRangesAnalysis extends Pass2Base {
} }
} }
} else { } else {
throw new RuntimeException("Never occurs!"); // Do nothing
// getLog().append("Not propagating "+aliveVar.toString(getProgram()) +" in BEFORE_METHOD case from "+stmt.toString(getProgram(), false)+ " to "+previousStmt.getStatement().toString(getProgram(), false));
} }
} }
} }

View File

@ -6,6 +6,7 @@
.const PROCPORT = 1 .const PROCPORT = 1
.const CHARGEN = $d000 .const CHARGEN = $d000
.const SCREEN = $400 .const SCREEN = $400
.const COLS = $d800
.const RASTER = $d012 .const RASTER = $d012
.const BORDERCOL = $d020 .const BORDERCOL = $d020
.const SPRITES_XPOS = $d000 .const SPRITES_XPOS = $d000
@ -19,6 +20,8 @@
.const sinlen_y = $c5 .const sinlen_y = $c5
.const sintab_y = $1100 .const sintab_y = $1100
.const sprites = $2000 .const sprites = $2000
.label progress_idx = 4
.label progress_cursor = 9
.label sin_idx_x = 2 .label sin_idx_x = 2
.label sin_idx_y = 3 .label sin_idx_y = 3
jsr main jsr main
@ -97,6 +100,52 @@ anim: {
rts rts
} }
init: { init: {
jsr clear_screen
ldx #0
b1:
lda #0
sta COLS,x
lda #$b
sta COLS+$28,x
inx
cpx #$28
bne b1
jsr place_sprites
jsr gen_sprites
lda #<SCREEN
sta progress_init.line
lda #>SCREEN
sta progress_init.line+1
jsr progress_init
lda #<sintab_x
sta gen_sintab.sintab
lda #>sintab_x
sta gen_sintab.sintab+1
lda #sinlen_x
sta gen_sintab.length
lda #$10
sta gen_sintab.min
ldx #$ff
jsr gen_sintab
lda #<SCREEN+$28
sta progress_init.line
lda #>SCREEN+$28
sta progress_init.line+1
jsr progress_init
lda #<sintab_y
sta gen_sintab.sintab
lda #>sintab_y
sta gen_sintab.sintab+1
lda #sinlen_y
sta gen_sintab.length
lda #$30
sta gen_sintab.min
ldx #$d0
jsr gen_sintab
jsr clear_screen
rts
}
clear_screen: {
.label sc = 7 .label sc = 7
lda #<SCREEN lda #<SCREEN
sta sc sta sc
@ -118,37 +167,15 @@ init: {
cmp #<SCREEN+$3e8 cmp #<SCREEN+$3e8
bcc b1 bcc b1
!: !:
jsr place_sprites
jsr gen_sprites
lda #<sintab_x
sta gen_sintab.sintab
lda #>sintab_x
sta gen_sintab.sintab+1
lda #sinlen_x
sta gen_sintab.length
lda #$10
sta gen_sintab.min
ldx #$ff
jsr gen_sintab
lda #<sintab_y
sta gen_sintab.sintab
lda #>sintab_y
sta gen_sintab.sintab+1
lda #sinlen_y
sta gen_sintab.length
lda #$30
sta gen_sintab.min
ldx #$d0
jsr gen_sintab
rts rts
} }
gen_sintab: { gen_sintab: {
.const f_2pi = $e2e5 .const f_2pi = $e2e5
.label _0 = $b .label _0 = $d
.label _3 = $b .label _3 = $d
.label _13 = $b .label _13 = $d
.label _17 = $b .label _17 = $d
.label _23 = $b .label _23 = $d
.label i = 2 .label i = 2
.label min = 2 .label min = 2
.label length = 3 .label length = 3
@ -204,6 +231,7 @@ gen_sintab: {
sta setMEMtoFAC.mem+1 sta setMEMtoFAC.mem+1
jsr setMEMtoFAC jsr setMEMtoFAC
lda #0 lda #0
sta progress_idx
sta i sta i
b1: b1:
lda i lda i
@ -246,7 +274,7 @@ gen_sintab: {
lda _23 lda _23
ldy i ldy i
sta (sintab),y sta (sintab),y
inc BORDERCOL jsr progress_inc
inc i inc i
lda i lda i
cmp length cmp length
@ -256,9 +284,31 @@ gen_sintab: {
f_min: .byte 0, 0, 0, 0, 0 f_min: .byte 0, 0, 0, 0, 0
f_amp: .byte 0, 0, 0, 0, 0 f_amp: .byte 0, 0, 0, 0, 0
} }
progress_inc: {
inc progress_idx
lda progress_idx
cmp #8
bne b1
lda progress_chars+8
ldy #0
sta (progress_cursor),y
inc progress_cursor
bne !+
inc progress_cursor+1
!:
lda #0
sta progress_idx
b1:
ldx progress_idx
lda progress_chars,x
ldy #0
sta (progress_cursor),y
rts
progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
getFAC: { getFAC: {
.label w = $b .label w = $d
.label return = $b .label return = $d
jsr $b1aa jsr $b1aa
sty $fe sty $fe
sta $ff sta $ff
@ -271,7 +321,7 @@ getFAC: {
rts rts
} }
addMEMtoFAC: { addMEMtoFAC: {
.label mem = 9 .label mem = $b
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -279,7 +329,7 @@ addMEMtoFAC: {
rts rts
} }
prepareMEM: { prepareMEM: {
.label mem = 9 .label mem = $b
lda mem lda mem
sta memLo sta memLo
lda mem+1 lda mem+1
@ -287,7 +337,7 @@ prepareMEM: {
rts rts
} }
mulFACbyMEM: { mulFACbyMEM: {
.label mem = 9 .label mem = $b
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -299,7 +349,7 @@ sinFAC: {
rts rts
} }
divMEMbyFAC: { divMEMbyFAC: {
.label mem = 9 .label mem = $b
jsr prepareMEM jsr prepareMEM
lda $fe lda $fe
ldy $ff ldy $ff
@ -307,8 +357,8 @@ divMEMbyFAC: {
rts rts
} }
setFAC: { setFAC: {
.label _0 = 9 .label _0 = $b
.label w = $b .label w = $d
lda w lda w
sta _0 sta _0
lda w+1 lda w+1
@ -320,7 +370,7 @@ setFAC: {
rts rts
} }
setMEMtoFAC: { setMEMtoFAC: {
.label mem = 9 .label mem = $b
jsr prepareMEM jsr prepareMEM
ldx $fe ldx $fe
ldy $ff ldy $ff
@ -335,6 +385,10 @@ setARGtoFAC: {
jsr $bc0f jsr $bc0f
rts rts
} }
progress_init: {
.label line = 9
rts
}
gen_sprites: { gen_sprites: {
.label spr = 7 .label spr = 7
.label i = 2 .label i = 2
@ -368,12 +422,12 @@ gen_sprites: {
cml: .text "camelot" cml: .text "camelot"
} }
gen_chargen_sprite: { gen_chargen_sprite: {
.label _0 = $b .label _0 = $d
.label _1 = $b .label _1 = $d
.label sprite = 9 .label sprite = 9
.label chargen = $e .label chargen = $b
.label bits = 4 .label bits = 4
.label s_gen = $d .label s_gen = $f
.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

@ -1,10 +1,12 @@
(label) @39 (label) @42
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BORDERCOL (byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word) 53280 (const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word) 53280
(byte*) CHARGEN (byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word) 53248 (const byte*) CHARGEN#0 CHARGEN = ((byte*))(word) 53248
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word) 55296
(byte*) PROCPORT (byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word) 1 (const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word) 1
(byte*) RASTER (byte*) RASTER
@ -27,7 +29,7 @@
(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:9 2.0 (byte*) addMEMtoFAC::mem#2 mem zp ZP_PTR_BYTE:11 2.0
(void()) anim() (void()) anim()
(byte~) anim::$0 reg byte a 202.0 (byte~) anim::$0 reg byte a 202.0
(byte~) anim::$1 reg byte a 202.0 (byte~) anim::$1 reg byte a 202.0
@ -61,14 +63,20 @@
(byte) anim::yidx#2 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#3 yidx zp ZP_BYTE:5 33.888888888888886
(byte) anim::yidx#6 yidx zp ZP_BYTE:5 60.599999999999994 (byte) anim::yidx#6 yidx zp ZP_BYTE:5 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
(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:9 2.0 (byte*) divMEMbyFAC::mem#2 mem zp ZP_PTR_BYTE:11 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:11 4.0 (word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:13 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:11 4.0 (word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:13 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
@ -94,12 +102,12 @@
(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:14 3.678571428571429 (byte*) gen_chargen_sprite::chargen#0 chargen zp ZP_PTR_BYTE:11 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:13 10001.0 (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:13 21003.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:13 400.4 (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:13 3500.5 (byte) gen_chargen_sprite::s_gen#6 s_gen zp ZP_BYTE:15 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
@ -120,12 +128,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:11 4.0 (word~) gen_sintab::$0 $0 zp ZP_WORD:13 4.0
(word~) gen_sintab::$13 $13 zp ZP_WORD:11 22.0 (word~) gen_sintab::$13 $13 zp ZP_WORD:13 22.0
(word~) gen_sintab::$17 $17 zp ZP_WORD:11 22.0 (word~) gen_sintab::$17 $17 zp ZP_WORD:13 22.0
(word~) gen_sintab::$23 $23 zp ZP_WORD:11 22.0 (word~) gen_sintab::$23 $23 zp ZP_WORD:13 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:11 4.0 (word~) gen_sintab::$3 $3 zp ZP_WORD:13 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
@ -139,6 +147,7 @@
(label) gen_sintab::@20 (label) gen_sintab::@20
(label) gen_sintab::@21 (label) gen_sintab::@21
(label) gen_sintab::@22 (label) gen_sintab::@22
(label) gen_sintab::@23
(label) gen_sintab::@3 (label) gen_sintab::@3
(label) gen_sintab::@4 (label) gen_sintab::@4
(label) gen_sintab::@5 (label) gen_sintab::@5
@ -182,20 +191,23 @@
(word()) getFAC() (word()) getFAC()
(label) getFAC::@return (label) getFAC::@return
(word) getFAC::return (word) getFAC::return
(word) getFAC::return#0 return zp ZP_WORD:11 4.333333333333333 (word) getFAC::return#0 return zp ZP_WORD:13 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:11 22.0 (word) getFAC::return#2 return zp ZP_WORD:13 22.0
(word) getFAC::w (word) getFAC::w
(word) getFAC::w#1 w zp ZP_WORD:11 4.0 (word) getFAC::w#1 w zp ZP_WORD:13 4.0
(void()) init() (void()) init()
(label) init::@1 (label) init::@1
(label) init::@2 (label) init::@2
(label) init::@3
(label) init::@4 (label) init::@4
(label) init::@5 (label) init::@5
(label) init::@6
(label) init::@7
(label) init::@8
(label) init::@9
(label) init::@return (label) init::@return
(byte*) init::sc (byte) init::i
(byte*) init::sc#1 sc zp ZP_PTR_BYTE:7 16.5 (byte) init::i#1 reg byte x 16.5
(byte*) init::sc#2 sc zp ZP_PTR_BYTE:7 16.5 (byte) init::i#2 reg byte x 14.666666666666666
(void()) main() (void()) main()
(label) main::@2 (label) main::@2
(label) main::@3 (label) main::@3
@ -209,7 +221,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:9 2.0 (byte*) mulFACbyMEM::mem#2 mem zp ZP_PTR_BYTE:11 2.0
(void()) place_sprites() (void()) place_sprites()
(label) place_sprites::@1 (label) place_sprites::@1
(label) place_sprites::@return (label) place_sprites::@return
@ -236,29 +248,49 @@
(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:9 4.0 (byte*) prepareMEM::mem#0 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:9 4.0 (byte*) prepareMEM::mem#1 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:9 4.0 (byte*) prepareMEM::mem#2 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:9 4.0 (byte*) prepareMEM::mem#3 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:9 4.0 (byte*) prepareMEM::mem#4 mem zp ZP_PTR_BYTE:11 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:9 4.666666666666666 (byte*) prepareMEM::mem#5 mem zp ZP_PTR_BYTE:11 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_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
(byte) progress_idx#34 progress_idx zp ZP_BYTE:4 0.52
(void()) progress_inc()
(byte~) progress_inc::$2 reg byte a 4.0
(byte~) progress_inc::$3 reg byte a 4.0
(label) progress_inc::@1
(label) progress_inc::@2
(label) progress_inc::@return
(byte[]) progress_inc::progress_chars
(const byte[]) progress_inc::progress_chars#0 progress_chars = { (byte/signed byte/word/signed word) 32, (byte/signed byte/word/signed word) 101, (byte/signed byte/word/signed word) 116, (byte/signed byte/word/signed word) 117, (byte/signed byte/word/signed word) 97, (byte/word/signed word) 246, (byte/word/signed word) 231, (byte/word/signed word) 234, (byte/word/signed word) 224 }
(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
(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:9 4.0 (byte*~) setFAC::$0 $0 zp ZP_PTR_BYTE:11 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:11 4.0 (word) setFAC::w#0 w zp ZP_WORD:13 4.0
(word) setFAC::w#1 w zp ZP_WORD:11 4.0 (word) setFAC::w#1 w zp ZP_WORD:13 4.0
(word) setFAC::w#3 w zp ZP_WORD:11 22.0 (word) setFAC::w#3 w zp ZP_WORD:13 22.0
(word) setFAC::w#4 w zp ZP_WORD:11 22.0 (word) setFAC::w#4 w zp ZP_WORD:13 22.0
(word) setFAC::w#5 w zp ZP_WORD:11 28.0 (word) setFAC::w#5 w zp ZP_WORD:13 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:9 2.0 (byte*) setMEMtoFAC::mem#5 mem zp ZP_PTR_BYTE:11 2.0
(void()) sinFAC() (void()) sinFAC()
(label) sinFAC::@return (label) sinFAC::@return
(byte) sin_idx_x (byte) sin_idx_x
@ -284,15 +316,17 @@
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 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 ] 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: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:6 [ anim::j#2 anim::j#1 gen_chargen_sprite::c#3 ]
zp ZP_PTR_BYTE:7 [ init::sc#2 init::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#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 ]
reg byte x [ gen_sintab::max#2 ] reg byte x [ gen_sintab::max#2 ]
zp ZP_PTR_BYTE:9 [ 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 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 setFAC::$0 ] 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_WORD:11 [ 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_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_BYTE:13 [ 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_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 ]
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 ]
@ -301,11 +335,12 @@ reg byte a [ anim::$0 ]
reg byte a [ anim::$1 ] reg byte a [ anim::$1 ]
reg byte y [ anim::j2#1 ] reg byte y [ 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::$3 ]
reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ] reg byte a [ prepareMEM::$1 ]
reg byte a [ gen_sprites::$0 ] reg byte a [ gen_sprites::$0 ]
reg byte x [ gen_chargen_sprite::ch#0 ] reg byte x [ gen_chargen_sprite::ch#0 ]
zp ZP_PTR_BYTE:14 [ gen_chargen_sprite::chargen#0 ]
reg byte a [ gen_chargen_sprite::$4 ] reg byte a [ gen_chargen_sprite::$4 ]
reg byte a [ gen_chargen_sprite::$7 ] reg byte a [ gen_chargen_sprite::$7 ]
reg byte x [ place_sprites::j2#1 ] reg byte x [ place_sprites::j2#1 ]

View File

@ -4,6 +4,7 @@ import "print"
const byte* PROCPORT = $01; const byte* PROCPORT = $01;
const byte* CHARGEN = $d000; const byte* CHARGEN = $d000;
const byte* SCREEN = $0400; const byte* SCREEN = $0400;
const byte* COLS = $d800;
const byte* RASTER = $d012; const byte* RASTER = $d012;
const byte* BORDERCOL = $d020; const byte* BORDERCOL = $d020;
@ -35,15 +36,52 @@ void main() {
} }
void init() { void init() {
for(byte* sc = SCREEN; sc<SCREEN+1000; sc++) { clear_screen();
*sc = ' '; for( byte i : 0..39) {
COLS[i] = $0;
COLS[40+i] = $b;
} }
place_sprites(); place_sprites();
gen_sprites(); gen_sprites();
progress_init(SCREEN);
gen_sintab(sintab_x, sinlen_x, $10, $ff); gen_sintab(sintab_x, sinlen_x, $10, $ff);
progress_init(SCREEN+40);
gen_sintab(sintab_y, sinlen_y, $30, $d0); gen_sintab(sintab_y, sinlen_y, $30, $d0);
clear_screen();
} }
void clear_screen() {
for(byte* sc = SCREEN; sc<SCREEN+1000; sc++) {
*sc = ' ';
}
}
// Current position of the progress cursor
byte* progress_cursor = SCREEN;
// Current index within the progress cursor (0-7)
byte progress_idx = 0;
// Initialize the PETSCII progress bar
void progress_init(byte* line) {
progress_cursor = line;
progress_idx = 0;
}
// Increase PETSCII progress one bit
// Done by increasing the character until the idx is 8 and then moving to the next char
void progress_inc() {
// Progress characters
const byte[] progress_chars = { $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0};
progress_idx++;
if(progress_idx==8) {
*progress_cursor = progress_chars[8];
progress_cursor++;
progress_idx = 0;
}
*progress_cursor = progress_chars[progress_idx];
}
byte sin_idx_x = 0; byte sin_idx_x = 0;
byte sin_idx_y = 0; byte sin_idx_y = 0;
@ -179,6 +217,6 @@ void gen_sintab(byte* sintab, byte length, byte min, byte max) {
mulFACbyMEM(f_amp); // fac = sin( i * 2 * PI / length ) * (max - min) / 2 mulFACbyMEM(f_amp); // fac = sin( i * 2 * PI / length ) * (max - min) / 2
addMEMtoFAC(f_min); // fac = sin( i * 2 * PI / length ) * (max - min) / 2 + min + (max - min) / 2 addMEMtoFAC(f_min); // fac = sin( i * 2 * PI / length ) * (max - min) / 2 + min + (max - min) / 2
sintab[i] = (byte)getFAC(); sintab[i] = (byte)getFAC();
(*BORDERCOL)++; progress_inc();
} }
} }