Support CD IO and start removing old IOPort
This commit is contained in:
@@ -15,11 +15,11 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
template<typename...ARGS>
|
||||
static void send(CD_IO::CommandFifo_v& cmd_fifo, CD_IO::ParameterFifo_v& parameter_fifo, CD_IO::Command::Desc cmd, ARGS...args) {
|
||||
while(CD_IO::IndexStatus.is_set(CD_IO::IndexStatus_t::IsTransmissionBusy));
|
||||
static void send(New::IOPort<CD_IO::CommandFifo>& cmd_fifo, New::IOPort<CD_IO::ParameterFifo>& parameter_fifo, CD_IO::Command::Desc cmd, ARGS...args) {
|
||||
while(CD_IO::IndexStatus.read().is_set2(CD_IO::IndexStatus::IsTransmissionBusy));
|
||||
|
||||
((parameter_fifo = args),...);
|
||||
cmd_fifo = cmd.id;
|
||||
((parameter_fifo.write(CD_IO::ParameterFifo{args})),...);
|
||||
cmd_fifo.write(CD_IO::CommandFifo{cmd.id});
|
||||
cmd_interrupt_bit = bit::set(0, cmd.complete_irq);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
template<typename...ARGS>
|
||||
static void send_wait(CD_IO::CommandFifo_v& cmd_fifo, CD_IO::ParameterFifo_v& parameter_fifo, CD_IO::Command::Desc cmd, ARGS...args) {
|
||||
static void send_wait(New::IOPort<CD_IO::CommandFifo>& cmd_fifo, New::IOPort<CD_IO::ParameterFifo>& parameter_fifo, CD_IO::Command::Desc cmd, ARGS...args) {
|
||||
send(cmd_fifo, parameter_fifo, cmd, args...);
|
||||
wait_completed();
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@
|
||||
namespace JabyEngine {
|
||||
namespace CD {
|
||||
namespace internal {
|
||||
static constexpr auto DataSectorMode = CD_IO::Mode_t::from(CD_IO::Mode_t::DoubleSpeed, CD_IO::Mode_t::DataSector);
|
||||
static constexpr auto DataSectorMode = CD_IO::Mode::from(CD_IO::Mode::DoubleSpeed, CD_IO::Mode::DataSector);
|
||||
|
||||
static InterruptVerifierResult interrupt_verifier();
|
||||
static void interrupt_handler(uint32_t);
|
||||
@@ -40,7 +40,7 @@ namespace JabyEngine {
|
||||
|
||||
static void read_sector_dma(CD_IO::DataSector& sector) {
|
||||
static const auto WaitSectorReady = []() {
|
||||
while(!CD_IO::IndexStatus.is_set(CD_IO::IndexStatus_t::HasDataFifoData));
|
||||
while(!CD_IO::IndexStatus.read().is_set2(CD_IO::IndexStatus::HasDataFifoData));
|
||||
};
|
||||
|
||||
static const auto ReadSector = [](uint32_t* dst) {
|
||||
@@ -50,7 +50,7 @@ namespace JabyEngine {
|
||||
|
||||
DMA_IO::CDROM.wait();
|
||||
|
||||
CD_IO::PortIndex0::Request.reset();
|
||||
CD_IO::PortIndex0::Request.write(CD_IO::Request::reset());
|
||||
};
|
||||
|
||||
WaitSectorReady();
|
||||
@@ -59,7 +59,7 @@ namespace JabyEngine {
|
||||
|
||||
static void read_sector_to(CD_IO::DataSector& sector) {
|
||||
CD_IO::PortIndex0::change_to();
|
||||
CD_IO::PortIndex0::Request.want_data();
|
||||
CD_IO::PortIndex0::Request.write(CD_IO::Request::want_data());
|
||||
|
||||
// We only support DMA rn
|
||||
read_sector_dma(sector);
|
||||
@@ -79,7 +79,7 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
static void interrupt_handler(uint32_t) {
|
||||
const uint8_t old_status = CD_IO::IndexStatus;
|
||||
const auto old_status = CD_IO::IndexStatus.read();
|
||||
|
||||
CD_IO::PortIndex1::change_to();
|
||||
const auto cur_irq = CD_IO::Interrupt::get_type(CD_IO::PortIndex1::InterruptFlag);
|
||||
@@ -112,7 +112,7 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
// No masking required because we can only write bit 0 - 2
|
||||
CD_IO::IndexStatus = old_status;
|
||||
CD_IO::IndexStatus.write(old_status);
|
||||
Interrupt::ack_irq(Interrupt::CDROM);
|
||||
__syscall_ReturnFromException();
|
||||
}
|
||||
|
Reference in New Issue
Block a user