gigatron/rom/Contrib/Cwiiis/Reset.gcl
2025-01-28 19:17:01 +03:00

59 lines
1.7 KiB
Plaintext

{-----------------------------------------------------------------------+
| |
| Reset Gigatron (pseudo) hardware |
| |
+-----------------------------------------------------------------------}
gcl0x
{ Setup video }
[def
{ Setup video indirection table }
$100 p= {videoTable}
$800 q= {frame}
[do
q>, p. p<++ { Y[i] = 8..127}
0 p. p<++ {dX[i] = 0}
q>++ q if>0loop]
ret
] SetupVideo=
{ Play a note on one channel
High byte is channel, low byte is note (should be even)
Reset the oscillators and channel variables }
[def {SetupChannel}
i= 255| 255^ $fa| p= {Pointer to channel struct}
i<, i= {Extract note}
0 p. p<++ {.wavA}
3 p. p<++ {.wavX: 0 "Noise", 1 Triangle, 2 Pulse, 3 Sawtooth}
\notesTable i+ 0? p. p<++ {.keyL}
\notesTable i+ 1? p. p<++ {.keyH}
p. p<++ {.oscL}
p. {.oscH}
ret
] SetupChannel=
{ Setup a G-major chord with 4 channels but don't play it yet }
[def {SetupAudio}
push
$158 {1: G-3} SetupChannel!
$270 {2: G-4} SetupChannel!
$378 {3: B-4} SetupChannel!
$47e {4: D-5} SetupChannel!
pop ret
] SetupAudio=
{ Now it is safe to call functions }
SetupAudio!
SetupVideo!
{ Load and start main program }
\Loader2 \sysArgs0= $200 \vLR= \SYS_Exec_88 \sysFn= 88!
{-----------------------------------------------------------------------+
| |
+-----------------------------------------------------------------------}