serial wip
All checks were successful
Check / Build ISO (nightly-2025-04-27) (push) Successful in 1m10s

This commit is contained in:
Masato Imai
2025-08-26 14:55:38 +00:00
parent a355e91c6e
commit 53a31749b4

View File

@@ -220,12 +220,20 @@ impl Pic {
match qual.port() { match qual.port() {
0x3F8 => regs.rax = unsafe { inb(qual.port()).into() }, 0x3F8 => regs.rax = unsafe { inb(qual.port()).into() },
0x3F9 => regs.rax = self.serial.ier as u64, 0x3F9 => regs.rax = self.serial.ier as u64,
0x3FA => regs.rax = unsafe { inb(qual.port()).into() }, 0x3FA => {} //regs.rax = 0, // unsafe { inb(qual.port()).into() },
0x3FB => regs.rax = 0, 0x3FB => {} //regs.rax = 0,
0x3FC => regs.rax = self.serial.mcr as u64, 0x3FC => {} //regs.rax = 0, //self.serial.mcr as u64,
0x3FD => regs.rax = unsafe { inb(qual.port()).into() }, 0x3FD => {
0x3FE => regs.rax = unsafe { inb(qual.port()).into() }, if qual.size() == 1 {
0x3FF => regs.rax = 0, regs.rax = 0x60
}
}
0x3FE => {
if qual.size() == 1 {
regs.rax = 0xb0
}
}
0x3FF => {} //regs.rax = 0,
_ => { _ => {
panic!("Serial in: invalid port: {:#x}", qual.port()); panic!("Serial in: invalid port: {:#x}", qual.port());
} }
@@ -233,15 +241,12 @@ impl Pic {
} }
fn handle_serial_out(&mut self, regs: &mut GuestRegisters, qual: QualIo) { fn handle_serial_out(&mut self, regs: &mut GuestRegisters, qual: QualIo) {
if matches!(qual.port(), 0x3F9 | 0x3FC) {
info!("Serial out: port={:#x}, value={:#x}", qual.port(), regs.rax);
}
match qual.port() { match qual.port() {
0x3F8 => serial::write_byte(regs.rax as u8), 0x3F8 => serial::write_byte(regs.rax as u8),
0x3F9 => { 0x3F9 => {
self.serial.ier = regs.rax as u8; self.serial.ier = regs.rax as u8;
if regs.rax & 0x1 != 0 { if regs.rax & 0b10 != 0 {
self.pending_irq |= 4; self.pending_irq |= 1 << 4;
} }
} }
0x3FA => {} 0x3FA => {}