mirror of
https://github.com/kirjavascript/trueLMAO.git
synced 2024-06-02 19:47:21 -04:00
added some vdp stuff
This commit is contained in:
parent
bbedc10a84
commit
a566a19c9b
|
@ -9,7 +9,7 @@ pub struct Mem {
|
|||
pub rom: ROM,
|
||||
pub io: IO,
|
||||
pub vdp: VDP,
|
||||
pub work_ram: [u8; 0x10000],
|
||||
pub ram: [u8; 0x10000],
|
||||
pub z80: Z80,
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ impl Mem {
|
|||
rom,
|
||||
io: IO::new(),
|
||||
vdp: VDP::new(),
|
||||
work_ram: [0; 0x10000],
|
||||
ram: [0; 0x10000],
|
||||
z80: Z80::new(),
|
||||
}
|
||||
}
|
||||
|
@ -30,65 +30,51 @@ impl AddressBus for Mem {
|
|||
todo!("copy from");
|
||||
}
|
||||
fn read_byte(&self, _address_space: AddressSpace, address: u32) -> u32 {
|
||||
match address {
|
||||
match address & 0xFFFFFF {
|
||||
0..=0x3FFFFF => self.rom.read_byte(address) as _,
|
||||
0xA00000..=0xA03FFF => self.z80.read_byte(address) as _,
|
||||
0xA04000..=0xA0FFFF => 0,
|
||||
0xA10000..=0xA1001F => self.io.read_byte(address) as _,
|
||||
0xA11100..=0xA112FF => self.z80.ctrl_read(address) as _,
|
||||
// z80 ctrl
|
||||
// vdp
|
||||
0xFF0000..=0xFFFFFF => self.work_ram[address as usize & 0xFFFF] as _,
|
||||
0xC00000..=0xDFFFFF => self.vdp.read(address),
|
||||
0xFF0000..=0xFFFFFF => self.ram[address as usize & 0xFFFF] as _,
|
||||
_ => todo!("read byte {:X}", address),
|
||||
}
|
||||
}
|
||||
fn read_word(&self, address_space: AddressSpace, address: u32) -> u32 {
|
||||
match address {
|
||||
0..=0xFFFFFE => {
|
||||
self.read_byte(address_space, address) << 8
|
||||
| self.read_byte(address_space, address + 1)
|
||||
},
|
||||
_ => todo!("read word {:X}", address),
|
||||
if (0xC00000..=0xDFFFFF).contains(&(address & 0xFFFFFF)) {
|
||||
return self.vdp.read(address);
|
||||
}
|
||||
self.read_byte(address_space, address) << 8
|
||||
| self.read_byte(address_space, address + 1)
|
||||
}
|
||||
fn read_long(&self, address_space: AddressSpace, address: u32) -> u32 {
|
||||
match address {
|
||||
0..=0xFFFFFC => {
|
||||
self.read_word(address_space, address) << 16
|
||||
| self.read_word(address_space, address + 2)
|
||||
},
|
||||
_ => todo!("read long {:X}", address),
|
||||
}
|
||||
self.read_word(address_space, address) << 16
|
||||
| self.read_word(address_space, address + 2)
|
||||
}
|
||||
fn write_byte(&mut self, _address_space: AddressSpace, address: u32, value: u32) {
|
||||
match address {
|
||||
match address & 0xFFFFFF {
|
||||
0..=0x3FFFFF => {},
|
||||
0xA00000..=0xA03FFF => self.z80.write_byte(address, value),
|
||||
0xA04000..=0xA0FFFF => {},
|
||||
0xA10000..=0xA1001F => self.io.write_byte(address, value),
|
||||
0xA11100..=0xA112FF => self.z80.ctrl_write(address, value),
|
||||
0xC00000..=0xDFFFFF => eprintln!("vdp write byte {:X} {:X}", address, value),
|
||||
0xFF0000..=0xFFFFFF => {
|
||||
self.work_ram[address as usize & 0xFFFF] = value as u8;
|
||||
self.ram[address as usize & 0xFFFF] = value as u8;
|
||||
},
|
||||
_ => todo!("write byte {:X} {:X}", address, value),
|
||||
}
|
||||
}
|
||||
fn write_word(&mut self, address_space: AddressSpace, address: u32, value: u32) {
|
||||
match address {
|
||||
0..=0xFFFFFE => {
|
||||
self.write_byte(address_space, address, value >> 8);
|
||||
self.write_byte(address_space, address + 1, value & 0xFF);
|
||||
},
|
||||
_ => todo!("write word {:X} {:X}", address, value),
|
||||
if (0xC00000..=0xDFFFFF).contains(&(address & 0xFFFFFF)) {
|
||||
return self.vdp.write(address, value);
|
||||
}
|
||||
self.write_byte(address_space, address, value >> 8);
|
||||
self.write_byte(address_space, address + 1, value & 0xFF);
|
||||
}
|
||||
fn write_long(&mut self, address_space: AddressSpace, address: u32, value: u32) {
|
||||
match address {
|
||||
0..=0xFFFFFC => {
|
||||
self.write_word(address_space, address, value >> 16);
|
||||
self.write_word(address_space, address + 2, value & 0xFFFF);
|
||||
},
|
||||
_ => todo!("write long {:X} {:X}", address, value),
|
||||
}
|
||||
self.write_word(address_space, address, value >> 16);
|
||||
self.write_word(address_space, address + 2, value & 0xFFFF);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,15 +29,15 @@ impl ROM {
|
|||
String::from_utf8_lossy(&self.bytes[range]).to_string()
|
||||
}
|
||||
|
||||
pub fn vectors(&self) -> Vec<u32> {
|
||||
let mut i = 0;
|
||||
let mut vtrs = Vec::new();
|
||||
while i < 0x100 {
|
||||
vtrs.push(self.read_long(i));
|
||||
i += 4;
|
||||
}
|
||||
vtrs
|
||||
}
|
||||
// pub fn vectors(&self) -> Vec<u32> {
|
||||
// let mut i = 0;
|
||||
// let mut vtrs = Vec::new();
|
||||
// while i < 0x100 {
|
||||
// vtrs.push(self.read_long(i));
|
||||
// i += 4;
|
||||
// }
|
||||
// vtrs
|
||||
// }
|
||||
|
||||
pub fn stack_pointer(&self) -> u32 { self.read_long(0x0) }
|
||||
pub fn entry_point(&self) -> u32 { self.read_long(0x4) }
|
||||
|
|
|
@ -1,11 +1,27 @@
|
|||
|
||||
pub struct VDP {
|
||||
VRAM: [u8; 0x10000],
|
||||
CRAM: [u16; 0x40],
|
||||
VSRAM: [u16; 0x40],
|
||||
registers: [u8; 0x20],
|
||||
}
|
||||
|
||||
impl VDP {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
|
||||
VRAM: [0; 0x10000],
|
||||
CRAM: [0; 0x40],
|
||||
VSRAM: [0; 0x40],
|
||||
registers: [0; 0x20],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read(&self, mut address: u32) -> u32 {
|
||||
address &= 0xFFFFFF;
|
||||
|
||||
|
||||
0
|
||||
}
|
||||
|
||||
pub fn write(&mut self, mut address: u32, value: u32) {
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue