gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit f6ece3b68e9a4b1825741e972507e31cb295dea3 parent 38f8df2cad993cf13a07c881cad72d98c6e3d6b4 Author: Toxa <untoxa@mail.ru> Date: Fri, 25 Aug 2023 19:23:16 +0300 EXAMPLES: SMS/GG wav_sample 1/3 shorter volume table (512 bytes vs 768 bytes) Diffstat:
| M | gbdk-lib/examples/sms/wav_sample/src/sample_player.c | 111 | ++++++++++++++++++++++++++++++++++++++++++++++--------------------------------- |
| M | gbdk-lib/examples/sms/wav_sample/src/sample_player.h | 1 | + |
| M | gbdk-lib/examples/sms/wav_sample/src/samptest.c | 2 | ++ |
3 files changed, 68 insertions(+), 46 deletions(-)
diff --git a/gbdk-lib/examples/sms/wav_sample/src/sample_player.c b/gbdk-lib/examples/sms/wav_sample/src/sample_player.c @@ -1,41 +1,43 @@ #include "sample_player.h" -static const uint8_t voltable[768] = { - 0x9f,0xbf,0xdf, 0x9f,0xbf,0xdf, 0x9e,0xbf,0xdf, 0x9e,0xbf,0xdf, 0x9d,0xbf,0xdf, 0x9c,0xbf,0xdf, 0x9c,0xbf,0xdf, 0x9b,0xbf,0xdf, - 0x9a,0xbf,0xdf, 0x9a,0xbf,0xdf, 0x99,0xbf,0xdf, 0x99,0xbf,0xdf, 0x99,0xbf,0xdf, 0x98,0xbf,0xdf, 0x98,0xbf,0xdf, 0x98,0xbf,0xdf, - 0x98,0xbe,0xdf, 0x98,0xbe,0xdf, 0x98,0xbd,0xdf, 0x98,0xbc,0xdf, 0x98,0xbb,0xdf, 0x98,0xbb,0xdf, 0x98,0xba,0xdf, 0x98,0xba,0xdf, - 0x98,0xb9,0xdf, 0x98,0xb9,0xdf, 0x98,0xb8,0xdf, 0x98,0xb8,0xdf, 0x98,0xb8,0xdf, 0x98,0xb8,0xde, 0x98,0xb8,0xde, 0x98,0xb8,0xdd, - 0x98,0xb8,0xdc, 0x98,0xb8,0xdc, 0x98,0xb8,0xdb, 0x98,0xb8,0xda, 0x98,0xb8,0xda, 0x98,0xb8,0xd9, 0x98,0xb8,0xd9, 0x98,0xb8,0xd9, - 0x98,0xb8,0xd8, 0x98,0xb8,0xd8, 0x98,0xb8,0xd8, 0x97,0xb8,0xd8, 0x97,0xb8,0xd8, 0x97,0xb8,0xd8, 0x97,0xb7,0xd8, 0x97,0xb7,0xd8, - 0x97,0xb7,0xd8, 0x97,0xb7,0xd8, 0x97,0xb7,0xd7, 0x97,0xb7,0xd7, 0x97,0xb7,0xd7, 0x97,0xb7,0xd7, 0x96,0xb7,0xd7, 0x96,0xb7,0xd7, - 0x96,0xb7,0xd7, 0x96,0xb7,0xd7, 0x96,0xb6,0xd7, 0x96,0xb6,0xd7, 0x96,0xb6,0xd7, 0x96,0xb6,0xd7, 0x96,0xb6,0xd7, 0x96,0xb6,0xd6, - 0x96,0xb6,0xd6, 0x96,0xb6,0xd6, 0x96,0xb6,0xd6, 0x96,0xb6,0xd6, 0x95,0xb6,0xd6, 0x95,0xb6,0xd6, 0x95,0xb6,0xd6, 0x95,0xb6,0xd6, - 0x95,0xb6,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd6, 0x95,0xb5,0xd5, - 0x95,0xb5,0xd5, 0x95,0xb5,0xd5, 0x95,0xb5,0xd5, 0x95,0xb5,0xd5, 0x95,0xb5,0xd5, 0x94,0xb5,0xd5, 0x94,0xb5,0xd5, 0x94,0xb5,0xd5, - 0x94,0xb5,0xd5, 0x94,0xb5,0xd5, 0x94,0xb5,0xd5, 0x94,0xb5,0xd5, 0x94,0xb4,0xd5, 0x94,0xb4,0xd5, 0x94,0xb4,0xd5, 0x94,0xb4,0xd5, - 0x94,0xb4,0xd5, 0x94,0xb4,0xd5, 0x94,0xb4,0xd5, 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, - 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, 0x94,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, - 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb4,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, - 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd4, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, - 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x93,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, - 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, 0x92,0xb3,0xd3, - 0x92,0xb3,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, - 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd3, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, - 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, 0x92,0xb2,0xd2, - 0x92,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, - 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb2,0xd2, 0x91,0xb1,0xd2, - 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, - 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd2, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, - 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, - 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x91,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, - 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, - 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb1,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, - 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, - 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, 0x90,0xb0,0xd1, - 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0, 0x90,0xb0,0xd0 +#define SAMPLE_BUSYWAIT 19 + +static const uint8_t voltable[] = { + 0xff,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xff,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xef,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xef,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xdf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xcf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xcf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xbf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, + 0xaf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0xaf,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x9f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8f,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, + 0x8e,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8e,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8d,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8c,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8b,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8b,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8a,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x8a,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, + 0x89,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x89,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0f, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0e, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0e, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0d, + 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0c, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0c, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0b, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0a, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x0a, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x09, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x09, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x09, + 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x88,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x78,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, + 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x08, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x77,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, + 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x67,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x07, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, + 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x66,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, + 0x56,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x06, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, + 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x55,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, + 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x45,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, + 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x05, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, + 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x44,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, + 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x34,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, + 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x04, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, + 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x33,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, + 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, + 0x23,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, + 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x03, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, + 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, + 0x22,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, + 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x12,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, + 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, + 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x02, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x11,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x01,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x01, + 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00, 0x00,(PSG_LATCH|PSG_CH2|PSG_VOLDDATA)|0x00 }; -void play_sample(uint8_t * sample, uint16_t size) NONBANKED NAKED { +void play_sample(uint8_t * sample, uint16_t size) NAKED { sample; size; __asm di @@ -56,20 +58,31 @@ void play_sample(uint8_t * sample, uint16_t size) NONBANKED NAKED { out (c), a 1$: - ld hl, #_voltable - ld b, #0 - ld c, 0(iy) + ld bc, #_voltable + ld h, #0 + ld l, 0(iy) inc iy - add hl, bc - add hl, bc - add hl, bc ; hl = &_voltable[(sample[iy+0] * 3)] + add hl, hl + add hl, bc ; hl = &_voltable[(sample[iy+0] * 2)] + + ld a, (hl) + .rept 4 + rlca + .endm + and #0x0f + or #(PSG_LATCH | PSG_CH0 | PSG_VOLDDATA) + ld b, a + ld a, (hl) + inc hl + and #0x0f + or #(PSG_LATCH | PSG_CH1 | PSG_VOLDDATA) ld c, #<_PSG - outi - outi + out (c), b + out (c), a outi - ld b, #22 ; delay, need to be calculated properly + ld b, #SAMPLE_BUSYWAIT ; delay, need to be calculated properly 2$: djnz 2$ @@ -78,15 +91,21 @@ void play_sample(uint8_t * sample, uint16_t size) NONBANKED NAKED { or d jp nz, 1$ + ei + in a, (_VDP_STATUS) ; cancel pending VDP interrupts + ret + __endasm; +} + +void cut_sample(void) NAKED { + __asm + ld c, #<_PSG ld a, #(PSG_LATCH | PSG_CH0 | PSG_VOLDDATA | 0x0f) ; cut channel 1 out (c), a ld a, #(PSG_LATCH | PSG_CH1 | PSG_VOLDDATA | 0x0f) ; cut channel 2 out (c), a ld a, #(PSG_LATCH | PSG_CH2 | PSG_VOLDDATA | 0x0f) ; cut channel 3 out (c), a - - ei - in a, (_VDP_STATUS) ; cancel pending VDP interrupts ret __endasm; } diff --git a/gbdk-lib/examples/sms/wav_sample/src/sample_player.h b/gbdk-lib/examples/sms/wav_sample/src/sample_player.h @@ -13,5 +13,6 @@ #define PSG_VOLDDATA 0b00010000 void play_sample(uint8_t * sample, uint16_t size); +void cut_sample(void); #endif diff --git a/gbdk-lib/examples/sms/wav_sample/src/samptest.c b/gbdk-lib/examples/sms/wav_sample/src/samptest.c @@ -26,11 +26,13 @@ void main(void) { bank_save = _current_bank; SWITCH_ROM(BANK(cowbell_8bit_pcm_unsigned)); play_sample(cowbell_8bit_pcm_unsigned, sizeof(cowbell_8bit_pcm_unsigned)); + cut_sample(); SWITCH_ROM(bank_save); } else if (KEY_PRESSED(J_B)) { bank_save = _current_bank; SWITCH_ROM(BANK(risset_drum_8bit_pcm_unsigned)); play_sample(risset_drum_8bit_pcm_unsigned, sizeof(risset_drum_8bit_pcm_unsigned)); + cut_sample(); SWITCH_ROM(bank_save); } vsync();
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.