mirror of
https://github.com/chip-red-pill/uCodeDisasm.git
synced 2026-02-06 08:35:22 +00:00
1. Implemented support of string names for IO regs
2. Found ucode subroutines for PCU mailbox access
This commit is contained in:
@@ -112,6 +112,7 @@ g_dst_mnem += g_idq_src_dst_mnem
|
||||
g_uop_lables = {}
|
||||
g_uop_cregs = {}
|
||||
g_uop_fscp_regs = {}
|
||||
g_uop_ioregs = {}
|
||||
|
||||
def glm_ucode_disasm_init():
|
||||
global g_opcodes
|
||||
@@ -294,6 +295,11 @@ def is_uop_uret(uop):
|
||||
opcode = get_uop_opcode(uop)
|
||||
return opcode in uret_opcodes
|
||||
|
||||
def is_uop_rw_ioport(uop):
|
||||
rwio_opcodes = [0xd0b, 0xd0f]
|
||||
opcode = get_uop_opcode(uop)
|
||||
return (opcode & 0xf3f) in rwio_opcodes
|
||||
|
||||
def get_str_uop_phys_stg_buf_ldstad_special_imms(uop, uaddr):
|
||||
str_special_imms = ()
|
||||
|
||||
@@ -684,6 +690,21 @@ def get_str_uop_uret_special_imms(uop, uaddr):
|
||||
str_special_imms += "0x%02x" % uret_idx,
|
||||
return str_special_imms
|
||||
|
||||
def get_str_uop_rw_ioport_special_imms(uop, uaddr):
|
||||
src0_sel = get_src0_sel(uop)
|
||||
src1_sel = get_src1_sel(uop)
|
||||
is_src0_imm = is_src_imm_sel(src0_sel)
|
||||
is_src1_imm = is_src_imm_sel(src1_sel)
|
||||
assert(not is_src1_imm)
|
||||
|
||||
str_special_imms = ()
|
||||
if is_src0_imm:
|
||||
assert((src0_sel & 0x10) == 0)
|
||||
special_imm = ((src0_sel & 0x07) << 13) | ((uop & 0x7c0000) >> 10) | ((uop & 0xff000000) >> 24)
|
||||
str_special_imms += get_str_ioreg(special_imm), "$"
|
||||
|
||||
return str_special_imms
|
||||
|
||||
def get_str_uop_common_special_imms(uop, uaddr):
|
||||
special_imm = (uop & 0xff000000) >> 24
|
||||
str_special_imms = "0x%08x" % special_imm,
|
||||
@@ -703,6 +724,7 @@ g_uop_special_imms_process_funcs = ( \
|
||||
(is_uop_rw_segfield, get_str_uop_rw_segfield_special_imms), \
|
||||
(is_uop_aet_trace, get_str_uop_aet_trace_special_imms), \
|
||||
(is_uop_uret, get_str_uop_uret_special_imms), \
|
||||
(is_uop_rw_ioport, get_str_uop_rw_ioport_special_imms), \
|
||||
(is_uop_common_special_imm, get_str_uop_common_special_imms))
|
||||
|
||||
def is_uop_special_imms(uop):
|
||||
@@ -841,6 +863,11 @@ def get_str_uram_addr(uram_addr):
|
||||
return g_uop_fscp_regs[uram_addr]
|
||||
return "0x%04x" % uram_addr
|
||||
|
||||
def get_str_ioreg(ioreg):
|
||||
if ioreg in g_uop_ioregs:
|
||||
return g_uop_ioregs[ioreg]
|
||||
return "0x%04x" % ioreg
|
||||
|
||||
def uop_disassemble(uop, uaddr):
|
||||
src0_sel = get_src0_sel(uop)
|
||||
src1_sel = get_src1_sel(uop)
|
||||
@@ -1112,9 +1139,11 @@ def msrom_disasm(arrays_dump_dir):
|
||||
global g_uop_cregs
|
||||
global g_uop_lables
|
||||
global g_uop_fscp_regs
|
||||
global g_uop_ioregs
|
||||
g_uop_lables = load_id_names_str_data("lables.txt")
|
||||
g_uop_cregs = load_id_names_str_data("cregs.txt")
|
||||
g_uop_fscp_regs = load_id_names_str_data("fscp.txt")
|
||||
g_uop_ioregs = load_id_names_str_data("ioregs.txt")
|
||||
ucode = load_ms_array_str_data(arrays_dump_dir + "\\ms_array0.txt")
|
||||
msrom_seqwords = load_ms_array_str_data(arrays_dump_dir + "\\ms_array1.txt")
|
||||
assert(len(ucode) == len(msrom_seqwords))
|
||||
|
||||
4
glm_ucode_disasm/ioregs.txt
Normal file
4
glm_ucode_disasm/ioregs.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
d4: PCU_CR_PCODE_UCODE_Mailbox_Interface
|
||||
d8: PCU_CR_PCODE_UCODE_Mailbox_Data
|
||||
4900: PCU_CR_MICROCONTROLLER_CONFIGURATION
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
0738: sysexit_xlat
|
||||
0788: rdtscp_xlat
|
||||
0794: clear_aflags_uend0
|
||||
07b5: send_op_pcu_mailbox
|
||||
0818: hlt_xlat
|
||||
0890: mov_cr0_r64_xlat
|
||||
08c0: rsm_xlat
|
||||
@@ -69,6 +70,7 @@
|
||||
556a: calc_fast_sha256_start
|
||||
5795: rsa_signing_error
|
||||
5c01: probe_mode_force_smm_xlat
|
||||
5c62: send_op_data_pcu_mailbox
|
||||
5e68: fit_process_error
|
||||
5ed5: rc4_decrypt
|
||||
608a: fit_load_end
|
||||
|
||||
Reference in New Issue
Block a user