git.y1.nz

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.