Mercurial > repos > blastem
comparison ymz263b.h @ 2460:a4f8fa24764b
Initial work on emulating the YMZ263B in the Copera
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 23 Feb 2024 01:16:38 -0800 |
parents | |
children | b5640ac9aea9 |
comparison
equal
deleted
inserted
replaced
2459:cb62730d5c99 | 2460:a4f8fa24764b |
---|---|
1 #ifndef YMZ263B_H_ | |
2 #define YMZ263B_H_ | |
3 | |
4 #include <stdint.h> | |
5 #include "render_audio.h" | |
6 #include "oscilloscope.h" | |
7 | |
8 typedef struct { | |
9 uint8_t fifo[128]; | |
10 uint8_t fifo_read; | |
11 uint8_t fifo_write; | |
12 | |
13 uint8_t regs[4]; | |
14 } ymz263b_pcm; | |
15 | |
16 typedef struct { | |
17 uint8_t fifo[16]; | |
18 uint8_t read; | |
19 uint8_t write; | |
20 } ymz_midi_fifo; | |
21 | |
22 typedef struct { | |
23 audio_source *audio; | |
24 oscilloscope *scope; | |
25 ymz263b_pcm pcm[2]; | |
26 ymz_midi_fifo midi_rcv; | |
27 ymz_midi_fifo midi_trs; | |
28 | |
29 uint32_t clock_inc; | |
30 uint32_t cycle; | |
31 | |
32 uint16_t timers[4]; | |
33 | |
34 uint16_t status; | |
35 | |
36 uint8_t base_regs[9]; | |
37 uint8_t midi_regs[2]; | |
38 uint8_t address; | |
39 uint8_t midi_transmit; | |
40 } ymz263b; | |
41 | |
42 void ymz263b_init(ymz263b *ymz, uint32_t clock_divider); | |
43 void ymz263b_run(ymz263b *ymz, uint32_t target_cycle); | |
44 uint32_t ymz263b_next_int(ymz263b *ymz); | |
45 void ymz263b_address_write(ymz263b *ymz, uint8_t value); | |
46 void ymz263b_data_write(ymz263b *ymz, uint32_t channel, uint8_t value); | |
47 uint8_t ymz263b_data_read(ymz263b *ymz, uint32_t channel); | |
48 uint8_t ymz263b_status_read(ymz263b *ymz); | |
49 | |
50 #endif //YMZ263B_H_ |