1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-09 20:25:17 +00:00
Files
kickc/src/test/kc/examples/rotate/rotate.kc
jespergravgaard 908cb3ea8d Changed fast multiply to a _prepare(a) & _prepared(b) sub-functions.
Added support for "." operator in ASM.
2018-10-19 00:28:57 +02:00

86 lines
1.9 KiB
Plaintext

// Angles: sf[0.8] : $80=PI, $100 = 2*PI
// Values: sin(x) in [-1;1] sf[0.16] : -1.0: -$7fff 1.0:$7fff
import "c64"
import "fastmultiply"
byte* SCREEN = $0400;
byte* SPRITE = $3000;
byte* COS = $2000;
byte* SIN = COS+$40; // sin(x) = cos(x+PI/2)
void main() {
asm { sei }
init();
anim();
}
void init() {
mulf_init();
*SPRITES_ENABLE = %11111111;
byte* sprites_ptr = SCREEN+$3f8;
byte spr_x = 60;
for(byte i: 0..7) {
byte i2 = i<<1;
sprites_ptr[i] = (byte)(SPRITE/$40);
SPRITES_XPOS[i2] = spr_x;
SPRITES_YPOS[i2] = spr_x;
SPRITES_COLS[i] = GREEN;
spr_x += 24;
}
}
void anim() {
signed word min = 1000;
signed word max = -1000;
byte angle = 0;
signed byte x = 89; // signed fixed[7.0]
signed byte y = 0;
while(true) {
while(*RASTER!=$ff) {}
(*BORDERCOL)++;
signed byte cos_a = (signed byte) COS[angle]; // signed fixed[0.7]
mulf8s_prepare(cos_a);
signed word xr = mulf8s_prepared(x)<<1; // signed fixed[8.8]
signed word yr = mulf8s_prepared(y)<<1; // signed fixed[8.8]
signed byte sin_a = (signed byte) SIN[angle]; // signed fixed[0.7]
mulf8s_prepare(sin_a);
xr -= mulf8s_prepared(y)<<1; // signed fixed[8.8]
yr += mulf8s_prepared(x)<<1; // signed fixed[8.8]
signed word xpos = ((signed byte) >xr) + 89 + 24 + 60;
signed word ypos = ((signed byte) >yr) + 89 + 51;
SPRITES_XPOS[0] = <xpos;
*SPRITES_XMSB = >xpos;
SPRITES_YPOS[0] = <ypos;
angle++;
(*BORDERCOL)--;
}
}
kickasm(pc COS) {{
{
.var min = -$7fff
.var max = $7fff
.var ampl = max-min;
.for(var i=0;i<$140;i++) {
.var rad = i*2*PI/256;
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
}
}
}}
kickasm(pc SPRITE, resource "balloon.png") {{
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++)
.for (var x=0;x<3; x++)
.byte pic.getSinglecolorByte(x,y)
}}