IRQ work in BIOS

This commit is contained in:
Kyle J Cardoza 2024-07-07 20:50:53 -04:00
parent e562ef8dab
commit 3e888ffa65
9 changed files with 357 additions and 39 deletions

View File

@ -23,9 +23,7 @@
long_i \ long_i \
pha \ pha \
phx \ phx \
phy \ phy
short_a \
long_i
#define restore_registers \ #define restore_registers \
long_a \ long_a \
@ -33,6 +31,4 @@
ply \ ply \
plx \ plx \
pla \ pla \
plp \ plp
short_a \
long_i

View File

@ -16,7 +16,7 @@
.extern _NearBaseAddress .extern _NearBaseAddress
#endif #endif
#include "bios/macros.h" #include "macros.h"
;;; *************************************************************************** ;;; ***************************************************************************
;;; ;;;

View File

@ -5,3 +5,129 @@
// //
// Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com> // Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com>
#include <stdint.h>
// Return values from handlers, if any, should be stored in
// DP[0] for the C register, DP[4] for the X register, and
// DP[6] for the Y register.
extern uint16_t Dp[4];
void irq_handler(void) {
return;
}
void brk_irq_handler(void) {
return;
}
void abort_irq_handler(void) {
return;
}
void nmi_handler(void) {
return;
}
void timer0_irq_handler(void) {
return;
}
void timer1_irq_handler(void) {
return;
}
void timer2_irq_handler(void) {
return;
}
void timer3_irq_handler(void) {
return;
}
void timer4_irq_handler(void) {
return;
}
void timer5_irq_handler(void) {
return;
}
void timer6_irq_handler(void) {
return;
}
void timer7_irq_handler(void) {
return;
}
void pe56_irq_handler(void) {
return;
}
void ne57_irq_handler(void) {
return;
}
void pe60_irq_handler(void) {
return;
}
void pe62_irq_handler(void) {
return;
}
void ne64_irq_handler(void) {
return;
}
void ne66_irq_handler(void) {
return;
}
void pib_irq_handler(void) {
return;
}
void level_irq_handler(void) {
return;
}
void uart_0_rx_irq_handler(void) {
return;
}
void uart_0_tx_irq_handler(void) {
return;
}
void uart_1_rx_irq_handler(void) {
return;
}
void uart_1_tx_irq_handler(void) {
return;
}
void uart_2_rx_irq_handler(void) {
return;
}
void uart_2_tx_irq_handler(void) {
return;
}
void uart_3_rx_irq_handler(void) {
return;
}
void uart_3_tx_irq_handler(void) {
return;
}
void cop_handler(uint16_t arg_c, uint16_t arg_x, uint16_t arg_y) {
(void) arg_c;
(void) arg_x;
(void) arg_y;
return;
}

View File

@ -10,95 +10,291 @@
//; //;
//; Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com> //; Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com>
#include "macros.h"
#include "sentinel65x.h"
.extern _Dp
.extern irq_handler
; This section gets copied to 0x00F000 ; This section gets copied to 0x00F000
.section irq_trampolines .section irq_trampolines
reserved_irq: reserved_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer0_irq: timer0_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer1_irq: timer1_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer2_irq: timer2_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer3_irq: timer3_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer4_irq: timer4_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer5_irq: timer5_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer6_irq: timer6_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
timer7_irq: timer7_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
pe56_irq: pe56_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
ne57_irq: ne57_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
pe60_irq: pe60_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
pe62_irq: pe62_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
ne64_irq: ne64_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
ne66_irq: ne66_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
pib_irq: pib_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
level_irq: level_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
call long:irq_handler
jump interrupt_return
uart_0_rx_irq: uart_0_rx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_0_tx_irq: uart_0_tx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_1_rx_irq: uart_1_rx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_1_tx_irq: uart_1_tx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_2_rx_irq: uart_2_rx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_2_tx_irq: uart_2_tx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_3_rx_irq: uart_3_rx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
uart_3_tx_irq: uart_3_tx_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
cop_irq: cop_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
brk_irq: brk_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
abort_irq: abort_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
jump interrupt_return
nmi_irq: nmi_irq:
rti phb
phd
rep #0b00110000
pha
phx
phy
.extern nmi_handler
long_a
call long:nmi_handler
jump interrupt_return
interrupt_return:
rep #0b00110000
ply
plx
pla
pld
plb
jump interrupt_return
; This section gets copied to 0x00FF80 ; This section gets copied to 0x00FF80
.section irq_vectors .section irq_vectors

View File

@ -5,7 +5,7 @@
//; //;
//; Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com> //; Copyright © 2024 Kyle J Cardoza <Kyle.Cardoza@icloud.com>
#include "boot/sentinel65x.h" #include "sentinel65x.h"
.section code, noreorder .section code, noreorder
.pubweak __program_root_section .pubweak __program_root_section