Remove unused A20 stuff

This commit is contained in:
Fabian 2020-12-31 19:14:29 -06:00
parent d5c9b29942
commit c84a814610
4 changed files with 17 additions and 73 deletions

View file

@ -23,11 +23,6 @@ function CPU(bus, wm)
this.memory_size = v86util.view(Uint32Array, memory, 812, 1);
// Note: Currently unused (degrades performance and not required by any OS
// that we support)
this.a20_enabled = v86util.view(Int32Array, memory, 552, 1);
this.a20_enabled[0] = +true;
this.mem8 = new Uint8Array(0);
this.mem16 = new Uint16Array(this.mem8.buffer);
this.mem32s = new Int32Array(this.mem8.buffer);
@ -418,7 +413,6 @@ CPU.prototype.get_state = function()
state[59] = this.devices.net;
state[60] = this.devices.pic;
state[61] = this.a20_enabled[0];
state[62] = this.fw_value;
state[63] = this.devices.ioapic;
@ -514,7 +508,6 @@ CPU.prototype.set_state = function(state)
this.devices.net = state[59];
this.devices.pic = state[60];
this.a20_enabled[0] = state[61];
this.fw_value = state[62];
this.devices.ioapic = state[63];
@ -644,8 +637,6 @@ CPU.prototype.reboot_internal = function()
CPU.prototype.reset = function()
{
this.a20_enabled[0] = +true;
this.segment_is_null.fill(0);
this.segment_limits.fill(0);
//this.segment_infos = new Uint32Array(8);
@ -800,8 +791,6 @@ CPU.prototype.init = function(settings, device_bus)
}
}
var a20_byte = 0;
io.register_read(0xB3, this, function()
{
// seabios smm_relocate_and_restore
@ -809,6 +798,8 @@ CPU.prototype.init = function(settings, device_bus)
return 0;
});
var a20_byte = 0;
io.register_read(0x92, this, function()
{
return a20_byte;

View file

@ -205,9 +205,6 @@ pub const PREFIX_F2: i32 = PREFIX_REPNZ;
pub const PREFIX_F3: i32 = PREFIX_REPZ;
pub const PREFIX_66: i32 = PREFIX_MASK_OPSIZE;
pub const LOG_CPU: i32 = 2;
pub const A20_MASK: i32 = !(1 << 20);
pub const A20_MASK16: i32 = !(1 << 20 - 1);
pub const A20_MASK32: i32 = !(1 << 20 - 2);
pub const MXCSR_MASK: i32 = 0xffff;
pub const MXCSR_FZ: i32 = 1 << 15;

View file

@ -17,7 +17,7 @@ pub const flags: *mut i32 = 120 as *mut i32;
pub const page_fault: *mut bool = 540 as *mut bool;
pub const page_fault_error_code: *mut i32 = 544 as *mut i32;
pub const a20_enabled: *mut bool = 552 as *mut bool;
pub const instruction_pointer: *mut i32 = 556 as *mut i32;
pub const previous_ip: *mut i32 = 560 as *mut i32;
pub const idtr_size: *mut i32 = 564 as *mut i32;

View file

@ -20,18 +20,13 @@ use cpu2::cpu::*;
use cpu2::global_pointers::*;
use page::Page;
const USE_A20: bool = false;
#[no_mangle]
pub unsafe fn in_mapped_range(addr: u32) -> bool {
return addr >= 0xA0000 && addr < 0xC0000 || addr >= *memory_size;
}
#[no_mangle]
pub unsafe fn read8(mut addr: u32) -> i32 {
if 0 != USE_A20 as i32 && 0 != *a20_enabled as i32 {
addr &= A20_MASK as u32
}
pub unsafe fn read8(addr: u32) -> i32 {
if in_mapped_range(addr) {
return mmap_read8(addr);
}
@ -40,10 +35,7 @@ pub unsafe fn read8(mut addr: u32) -> i32 {
};
}
#[no_mangle]
pub unsafe fn read16(mut addr: u32) -> i32 {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn read16(addr: u32) -> i32 {
if in_mapped_range(addr) {
return mmap_read16(addr);
}
@ -52,11 +44,8 @@ pub unsafe fn read16(mut addr: u32) -> i32 {
};
}
#[no_mangle]
pub unsafe fn read_aligned16(mut addr: u32) -> i32 {
pub unsafe fn read_aligned16(addr: u32) -> i32 {
dbg_assert!(addr < 0x80000000);
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK16 as u32
}
if in_mapped_range(addr << 1) {
return mmap_read16(addr << 1);
}
@ -65,10 +54,7 @@ pub unsafe fn read_aligned16(mut addr: u32) -> i32 {
};
}
#[no_mangle]
pub unsafe fn read32s(mut addr: u32) -> i32 {
if 0 != USE_A20 as i32 && 0 != *a20_enabled as i32 {
addr &= A20_MASK as u32
}
pub unsafe fn read32s(addr: u32) -> i32 {
if in_mapped_range(addr) {
return mmap_read32(addr);
}
@ -77,10 +63,7 @@ pub unsafe fn read32s(mut addr: u32) -> i32 {
};
}
#[no_mangle]
pub unsafe fn read64s(mut addr: u32) -> i64 {
if 0 != USE_A20 as i32 && 0 != *a20_enabled as i32 {
addr &= A20_MASK as u32
}
pub unsafe fn read64s(addr: u32) -> i64 {
if in_mapped_range(addr) {
return mmap_read32(addr) as i64 | (mmap_read32(addr.wrapping_add(4 as u32)) as i64) << 32;
}
@ -89,11 +72,8 @@ pub unsafe fn read64s(mut addr: u32) -> i64 {
};
}
#[no_mangle]
pub unsafe fn read_aligned32(mut addr: u32) -> i32 {
pub unsafe fn read_aligned32(addr: u32) -> i32 {
dbg_assert!(addr < 0x40000000 as u32);
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK32 as u32
}
if in_mapped_range(addr << 2) {
return mmap_read32(addr << 2);
}
@ -102,10 +82,7 @@ pub unsafe fn read_aligned32(mut addr: u32) -> i32 {
};
}
#[no_mangle]
pub unsafe fn read128(mut addr: u32) -> reg128 {
if 0 != USE_A20 as i32 && 0 != *a20_enabled as i32 {
addr &= A20_MASK as u32
}
pub unsafe fn read128(addr: u32) -> reg128 {
let mut value: reg128 = reg128 {
i8_0: [0 as i8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
};
@ -123,10 +100,7 @@ pub unsafe fn read128(mut addr: u32) -> reg128 {
}
#[no_mangle]
pub unsafe fn write8(mut addr: u32, value: i32) {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn write8(addr: u32, value: i32) {
if in_mapped_range(addr) {
mmap_write8(addr, value);
}
@ -141,10 +115,7 @@ pub unsafe fn write8_no_mmap_or_dirty_check(addr: u32, value: i32) {
}
#[no_mangle]
pub unsafe fn write16(mut addr: u32, value: i32) {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn write16(addr: u32, value: i32) {
if in_mapped_range(addr) {
mmap_write16(addr, value);
}
@ -154,11 +125,8 @@ pub unsafe fn write16(mut addr: u32, value: i32) {
};
}
#[no_mangle]
pub unsafe fn write_aligned16(mut addr: u32, value: u32) {
pub unsafe fn write_aligned16(addr: u32, value: u32) {
dbg_assert!(addr < 0x80000000);
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK16 as u32
}
let phys_addr: u32 = addr << 1;
if in_mapped_range(phys_addr) {
mmap_write16(phys_addr, value as i32);
@ -169,10 +137,7 @@ pub unsafe fn write_aligned16(mut addr: u32, value: u32) {
};
}
#[no_mangle]
pub unsafe fn write32(mut addr: u32, value: i32) {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn write32(addr: u32, value: i32) {
if in_mapped_range(addr) {
mmap_write32(addr, value);
}
@ -187,11 +152,8 @@ pub unsafe fn write_aligned32_no_mmap_or_dirty_check(addr: u32, value: i32) {
}
#[no_mangle]
pub unsafe fn write_aligned32(mut addr: u32, value: i32) {
pub unsafe fn write_aligned32(addr: u32, value: i32) {
dbg_assert!(addr < 0x40000000 as u32);
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK32 as u32
}
let phys_addr: u32 = addr << 2;
if in_mapped_range(phys_addr) {
mmap_write32(phys_addr, value);
@ -202,10 +164,7 @@ pub unsafe fn write_aligned32(mut addr: u32, value: i32) {
};
}
#[no_mangle]
pub unsafe fn write64(mut addr: u32, value: i64) {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn write64(addr: u32, value: i64) {
if in_mapped_range(addr) {
mmap_write32(
addr.wrapping_add(0 as u32),
@ -219,10 +178,7 @@ pub unsafe fn write64(mut addr: u32, value: i64) {
};
}
#[no_mangle]
pub unsafe fn write128(mut addr: u32, value: reg128) {
if 0 != USE_A20 as i32 && !*a20_enabled {
addr &= A20_MASK as u32
}
pub unsafe fn write128(addr: u32, value: reg128) {
if in_mapped_range(addr) {
mmap_write128(
addr,