gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/examples/sms/wav_sample/src/sample_player.c
1 #include "sample_player.h"
2
3 #define SAMPLE_BUSYWAIT 19
4
5 static const uint8_t voltable[] = {
6 0xff,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xff,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xef,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xef,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xdf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xcf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xcf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xbf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f,
7 0xaf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0xaf,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f,
8 0x8e,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8e,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8d,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8c,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8b,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8b,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8a,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x8a,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f,
9 0x89,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x89,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0e, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0e, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0d,
10 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0c, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0c, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0b, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0a, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x0a, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x09, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x09, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x09,
11 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08,
12 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07,
13 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06,
14 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06,
15 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05,
16 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05,
17 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05,
18 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04,
19 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04,
20 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04,
21 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03,
22 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03,
23 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03,
24 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03,
25 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02,
26 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02,
27 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02,
28 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02,
29 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02,
30 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
31 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
32 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
33 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
34 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
35 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
36 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x01,
37 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLUME)|0x00
38 };
39
40 void play_sample(uint8_t * sample, uint16_t size) NAKED {
41 sample; size;
42 __asm
43 di
44 push hl
45 pop iy ; iy = hl
46
47 ; set tone to 0
48 ld c, #<_PSG
49 xor a
50 ld b, #(PSG_LATCH | PSG_CH0) ; ch 0 tone 0
51 out (c), b
52 out (c), a
53 ld b, #(PSG_LATCH | PSG_CH1) ; ch 1
54 out (c), b
55 out (c), a
56 ld b, #(PSG_LATCH | PSG_CH2) ; ch 2
57 out (c), b
58 out (c), a
59
60 1$:
61 ld bc, #_voltable
62 ld h, #0
63 ld l, 0(iy)
64 inc iy
65 add hl, hl
66 add hl, bc ; hl = &_voltable[(sample[iy+0] * 2)]
67
68 ld a, (hl)
69 .rept 4
70 rlca
71 .endm
72 and #0x0f
73 or #(PSG_LATCH | PSG_CH0 | PSG_VOLUME)
74 ld b, a
75 ld a, (hl)
76 inc hl
77 and #0x0f
78 or #(PSG_LATCH | PSG_CH1 | PSG_VOLUME)
79
80 ld c, #<_PSG
81 out (c), b
82 out (c), a
83 outi
84
85 ld b, #SAMPLE_BUSYWAIT ; delay, need to be calculated properly
86 2$:
87 djnz 2$
88
89 dec de
90 ld a, e
91 or d
92 jp nz, 1$
93
94 ei
95 in a, (_VDP_STATUS) ; cancel pending VDP interrupts
96 ret
97 __endasm;
98 }
99
100 void cut_sample(uint8_t mask) NAKED {
101 mask;
102 __asm
103 ld c, #<_PSG
104 ld b, a
105 ld e, #-1
106 1$:
107 inc e
108 srl b
109 jr c, 2$
110 ret z
111 jr 1$
112 2$:
113 ld a, e
114 .rept 3
115 rrca
116 .endm
117 or #(PSG_LATCH | PSG_VOLUME | 0x0f)
118 out (c), a
119 jr 1$
120 __endasm;
121 }
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.