Move IRQ logic into callback; Cleanup code

This commit is contained in:
2024-06-19 19:16:05 +02:00
parent 8bda21f045
commit 5a137f9526
8 changed files with 34 additions and 52 deletions

View File

@@ -42,41 +42,35 @@ namespace JabyEngine {
}
template<typename...ARGS>
static void send(CD_IO::Command::Desc cmd, bool sync, ARGS...args) {
static void send(CD_IO::Command::Desc cmd, ARGS...args) {
while(CD_IO::IndexStatus.read().is_set(CD_IO::IndexStatus::IsTransmissionBusy));
CD_IO::PortIndex0::change_to();
((CD_IO::PortIndex0::ParameterFifo.write(CD_IO::ParameterFifo{args})),...);
CD_IO::PortIndex0::CommandFifo.write(CD_IO::CommandFifo{cmd.id});
if(sync)
while(CD_IO::IndexStatus.read().is_set(CD_IO::IndexStatus::IsTransmissionBusy));
while(CD_IO::IndexStatus.read().is_set(CD_IO::IndexStatus::IsTransmissionBusy));
}
};
// Requires Index 0
template<typename...ARGS>
static void send(CD_IO::Command::Desc cmd, ARGS...args) {
Internal::send(cmd, true, args...);
}
template<typename...ARGS>
static void sendX(CD_IO::Command::Desc cmd, ARGS...args) {
Internal::send(cmd, false, args...);
Internal::send(cmd, args...);
}
// Requires Index 0
template<typename...ARGS>
static void send_wait_response(CD_IO::Command::Desc cmd, ARGS...args) {
Interrupt::disable_irq(Interrupt::CDROM);
Internal::send(cmd, true, args...);
Internal::send(cmd, args...);
Internal::wait_completed(cmd.complete_irq);
Interrupt::enable_irq(Interrupt::CDROM);
}
};
namespace IRQ {
void data_ready_handler(uint32_t data);
void process(uint32_t irq);
void read_sector_to0(uint32_t* dst, size_t bytes);
void resume_at0(const BCDTimeStamp& cd_time);
}

View File

@@ -35,9 +35,10 @@ namespace JabyEngine {
extern Thread::Handle thread_handle;
extern uint32_t stack[StackSize];
void routine(uint32_t irq);
static void execute(uint32_t parm) {
execute_callback(CD::thread_handle, parm);
static void execute(uint32_t irq) {
execute_callback(CD::thread_handle, irq);
}
static uint32_t resume() {