Spaces:
Runtime error
Runtime error
use crate::cpu::cpu::reg128; | |
use crate::softfloat::F80; | |
use crate::state_flags::CachedStateFlags; | |
pub const reg8: *mut u8 = 64 as *mut u8; | |
pub const reg16: *mut u16 = 64 as *mut u16; | |
pub const reg32: *mut i32 = 64 as *mut i32; | |
pub const last_op_size: *mut i32 = 96 as *mut i32; | |
pub const flags_changed: *mut i32 = 100 as *mut i32; | |
pub const last_op1: *mut i32 = 104 as *mut i32; | |
pub const state_flags: *mut CachedStateFlags = 108 as *mut CachedStateFlags; | |
pub const last_result: *mut i32 = 112 as *mut i32; | |
pub const flags: *mut i32 = 120 as *mut i32; | |
pub const segment_access_bytes: *mut u8 = 512 as *mut u8; // TODO: reorder below segment_limits | |
pub const page_fault: *mut bool = 540 as *mut bool; | |
pub const apic_enabled: *mut bool = 548 as *mut bool; | |
pub const acpi_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; | |
pub const idtr_offset: *mut i32 = 568 as *mut i32; | |
pub const gdtr_size: *mut i32 = 572 as *mut i32; | |
pub const gdtr_offset: *mut i32 = 576 as *mut i32; | |
pub const cr: *mut i32 = 580 as *mut i32; | |
pub const cpl: *mut u8 = 612 as *mut u8; | |
pub const in_hlt: *mut bool = 616 as *mut bool; | |
pub const last_virt_eip: *mut i32 = 620 as *mut i32; | |
pub const eip_phys: *mut i32 = 624 as *mut i32; | |
pub const sysenter_cs: *mut i32 = 636 as *mut i32; | |
pub const sysenter_esp: *mut i32 = 640 as *mut i32; | |
pub const sysenter_eip: *mut i32 = 644 as *mut i32; | |
pub const prefixes: *mut u8 = 648 as *mut u8; | |
pub const instruction_counter: *mut u32 = 664 as *mut u32; | |
pub const sreg: *mut u16 = 668 as *mut u16; | |
pub const dreg: *mut i32 = 684 as *mut i32; | |
// filled in by svga_fill_pixel_buffer, read by javacsript for optimised putImageData calls | |
pub const svga_dirty_bitmap_min_offset: *mut u32 = 716 as *mut u32; | |
pub const svga_dirty_bitmap_max_offset: *mut u32 = 720 as *mut u32; | |
pub const segment_is_null: *mut bool = 724 as *mut bool; | |
pub const segment_offsets: *mut i32 = 736 as *mut i32; | |
pub const segment_limits: *mut u32 = 768 as *mut u32; | |
pub const protected_mode: *mut bool = 800 as *mut bool; | |
pub const is_32: *mut bool = 804 as *mut bool; | |
pub const stack_size_32: *mut bool = 808 as *mut bool; | |
pub const memory_size: *mut u32 = 812 as *mut u32; | |
pub const fpu_stack_empty: *mut u8 = 816 as *mut u8; | |
pub const mxcsr: *mut i32 = 824 as *mut i32; | |
pub const reg_xmm: *mut reg128 = 832 as *mut reg128; | |
pub const current_tsc: *mut u64 = 960 as *mut u64; | |
pub const reg_pdpte: *mut u64 = 968 as *mut u64; // 4 64-bit entries | |
pub const fpu_stack_ptr: *mut u8 = 1032 as *mut u8; | |
pub const fpu_control_word: *mut u16 = 1036 as *mut u16; | |
pub const fpu_status_word: *mut u16 = 1040 as *mut u16; | |
pub const fpu_opcode: *mut i32 = 1044 as *mut i32; | |
pub const fpu_ip: *mut i32 = 1048 as *mut i32; | |
pub const fpu_ip_selector: *mut i32 = 1052 as *mut i32; | |
pub const fpu_dp: *mut i32 = 1056 as *mut i32; | |
pub const fpu_dp_selector: *mut i32 = 1060 as *mut i32; | |
pub const tss_size_32: *mut bool = 1128 as *mut bool; | |
pub const sse_scratch_register: *mut reg128 = 1136 as *mut reg128; | |
pub const fpu_st: *mut F80 = 1152 as *mut F80; | |
pub fn get_reg32_offset(r: u32) -> u32 { | |
dbg_assert!(r < 8); | |
(unsafe { reg32.offset(r as isize) }) as u32 | |
} | |
pub fn get_reg_mmx_offset(r: u32) -> u32 { | |
dbg_assert!(r < 8); | |
(unsafe { fpu_st.offset(r as isize) }) as u32 | |
} | |
pub fn get_reg_xmm_offset(r: u32) -> u32 { | |
dbg_assert!(r < 8); | |
(unsafe { reg_xmm.offset(r as isize) }) as u32 | |
} | |
pub fn get_sreg_offset(s: u32) -> u32 { | |
dbg_assert!(s < 6); | |
(unsafe { sreg.offset(s as isize) }) as u32 | |
} | |
pub fn get_seg_offset(s: u32) -> u32 { | |
dbg_assert!(s < 8); | |
(unsafe { segment_offsets.offset(s as isize) }) as u32 | |
} | |
pub fn get_segment_is_null_offset(s: u32) -> u32 { | |
dbg_assert!(s < 8); | |
(unsafe { segment_is_null.offset(s as isize) }) as u32 | |
} | |
pub fn get_creg_offset(i: u32) -> u32 { | |
dbg_assert!(i < 8); | |
(unsafe { cr.offset(i as isize) }) as u32 | |
} | |