summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/cr511b.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/cr511b.h')
-rw-r--r--src/devices/machine/cr511b.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/devices/machine/cr511b.h b/src/devices/machine/cr511b.h
index e773c8b1f82..b5c7727872e 100644
--- a/src/devices/machine/cr511b.h
+++ b/src/devices/machine/cr511b.h
@@ -50,6 +50,8 @@ public:
auto drq_cb() { return m_drq_cb.bind(); }
auto dten_cb() { return m_dten_cb.bind(); }
auto scor_cb() { return m_scor_cb.bind(); }
+ auto sbcp_cb() { return m_sbcp_cb.bind(); }
+ auto subcode_data_cb() { return m_subcode_data_cb.bind(); }
uint8_t read();
void write(uint8_t data);
@@ -72,6 +74,7 @@ private:
int size_to_track_type();
TIMER_CALLBACK_MEMBER(frame_cb);
+ TIMER_CALLBACK_MEMBER(subcode_cb);
TIMER_CALLBACK_MEMBER(stch);
void status_change(uint8_t status);
@@ -79,7 +82,10 @@ private:
TIMER_CALLBACK_MEMBER(sten);
void status_enable(uint8_t output_length);
+ TIMER_CALLBACK_MEMBER(scor);
+
void audio_end_cb(int state);
+ void play_audio(uint32_t start, uint32_t end);
// commands
void cmd_seek();
@@ -124,10 +130,15 @@ private:
devcb_write_line m_drq_cb;
devcb_write_line m_dten_cb;
devcb_write_line m_scor_cb;
+ devcb_write_line m_sbcp_cb;
+ devcb_write8 m_subcode_data_cb;
emu_timer *m_frame_timer;
+ emu_timer *m_subcode_timer;
+
emu_timer *m_stch_timer;
emu_timer *m_sten_timer;
+ emu_timer *m_scor_timer;
uint8_t m_input_fifo[16];
uint8_t m_input_fifo_pos;
@@ -139,6 +150,10 @@ private:
uint8_t m_status;
uint16_t m_sector_size;
+ uint8_t m_subcode_count;
+ uint8_t m_subcode_buffer[96];
+ bool m_subcode_valid;
+
uint32_t m_transfer_lba;
uint16_t m_transfer_sectors;
uint32_t m_transfer_length;