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_