mirror of
https://github.com/dingusdev/dingusppc.git
synced 2025-01-12 11:31:16 +00:00
Implement writes to SCSI Pseudo-DMA register.
This commit is contained in:
parent
58dacfa263
commit
58281520d3
@ -190,6 +190,21 @@ uint16_t Sc53C94::pseudo_dma_read()
|
||||
return data_word;
|
||||
}
|
||||
|
||||
void Sc53C94::pseudo_dma_write(uint16_t data) {
|
||||
this->fifo_push((data >> 8) & 0xFFU);
|
||||
this->fifo_push(data & 0xFFU);
|
||||
|
||||
// update DMA status
|
||||
if (this->is_dma_cmd) {
|
||||
this->xfer_count -= 2;
|
||||
if (!this->xfer_count) {
|
||||
this->status |= STAT_TC; // signal zero transfer count
|
||||
//this->cur_state = SeqState::XFER_END;
|
||||
this->sequencer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Sc53C94::update_command_reg(uint8_t cmd)
|
||||
{
|
||||
if (this->on_reset && (cmd & 0x7F) != CMD_NOP) {
|
||||
|
@ -164,6 +164,7 @@ public:
|
||||
uint8_t read(uint8_t reg_offset);
|
||||
void write(uint8_t reg_offset, uint8_t value);
|
||||
uint16_t pseudo_dma_read();
|
||||
void pseudo_dma_write(uint16_t data);
|
||||
|
||||
// real DMA control
|
||||
void real_dma_xfer(int direction);
|
||||
|
@ -223,7 +223,10 @@ void AMIC::write(uint32_t rgn_start, uint32_t offset, uint32_t value, int size)
|
||||
this->mace->write((offset >> 4) & 0x1F, value);
|
||||
return;
|
||||
case 0x10:
|
||||
this->scsi->write((offset >> 4) & 0xF, value);
|
||||
if (offset & 0x100)
|
||||
this->scsi->pseudo_dma_write(value);
|
||||
else
|
||||
this->scsi->write((offset >> 4) & 0xF, value);
|
||||
return;
|
||||
case 0x14: // Sound registers
|
||||
switch(offset) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user