mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-22 14:33:51 +00:00
106 lines
1.9 KiB
Plaintext
106 lines
1.9 KiB
Plaintext
|
|
|
|
// -------------------------
|
|
|
|
$include('ntsc.ice')
|
|
|
|
// -------------------------
|
|
|
|
algorithm frame_display(
|
|
input uint10 pix_x,
|
|
input uint10 pix_y,
|
|
input uint1 pix_active,
|
|
input uint1 pix_vblank,
|
|
output! uint$color_depth$ pix_r,
|
|
output! uint$color_depth$ pix_g,
|
|
output! uint$color_depth$ pix_b
|
|
) <autorun> {
|
|
|
|
uint7 wave[64] = {
|
|
$$for i=0,63 do
|
|
$math.floor(127.0 * (0.5+0.5*math.cos(math.pi + 2*math.pi*i/63)))$,
|
|
$$end
|
|
};
|
|
|
|
uint$color_depth$ v = 0;
|
|
uint6 frame = 0;
|
|
int9 pos[4] = {0,0,0,0};
|
|
|
|
pix_r := 0; pix_g := 0; pix_b := 0;
|
|
// ---------- show time!
|
|
while (1) {
|
|
|
|
// display frame
|
|
while (pix_vblank == 0) {
|
|
if (pix_active) {
|
|
4x {
|
|
if (pix_y + 20 > pos[__id] && pix_y < pos[__id] + 20) {
|
|
v = ((wave[pix_y-pos[__id] + 32]>>1) * (__id+5)) >> 3;
|
|
pix_r = v*4;
|
|
pix_g = v*3;
|
|
pix_b = v*2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// prepare next
|
|
frame = frame + 1;
|
|
4x {
|
|
pos[__id] = $240 - 127$ + (wave[(frame + (__id << 3)) & 63] << 1);
|
|
}
|
|
// wait for sync
|
|
while (pix_vblank == 1) {}
|
|
}
|
|
}
|
|
|
|
// -------------------------
|
|
|
|
algorithm main(
|
|
$$if NTSC then
|
|
// NTSC
|
|
output! uint$color_depth$ video_r,
|
|
output! uint$color_depth$ video_g,
|
|
output! uint$color_depth$ video_b,
|
|
output! uint1 video_hs,
|
|
output! uint1 video_vs
|
|
$$end
|
|
)
|
|
<@clock,!reset>
|
|
{
|
|
|
|
uint1 active = 0;
|
|
uint1 vblank = 0;
|
|
uint10 pix_x = 0;
|
|
uint10 pix_y = 0;
|
|
|
|
ntsc ntsc_driver (
|
|
ntsc_hs :> video_hs,
|
|
ntsc_vs :> video_vs,
|
|
active :> active,
|
|
vblank :> vblank,
|
|
ntsc_x :> pix_x,
|
|
ntsc_y :> pix_y
|
|
);
|
|
|
|
frame_display display (
|
|
pix_x <: pix_x,
|
|
pix_y <: pix_y,
|
|
pix_active <: active,
|
|
pix_vblank <: vblank,
|
|
pix_r :> video_r,
|
|
pix_g :> video_g,
|
|
pix_b :> video_b
|
|
);
|
|
|
|
uint8 frame = 0;
|
|
|
|
// forever
|
|
while (1) {
|
|
|
|
while (vblank == 0) { }
|
|
|
|
frame = frame + 1;
|
|
|
|
}
|
|
}
|