 |
TEMU
4.0
The Terma Emulator
|
Go to the documentation of this file.
9 #ifndef TEMU_SUPPORT_MEMORY
10 #define TEMU_SUPPORT_MEMORY
12 #include "temu-c/Support/Attributes.h"
13 #include "temu-c/Support/Objsys.h"
63 int (*
mapDevice)(
void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *Device,
66 void (*
setAttr)(
void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
68 void (*
clearAttr)(
void *Obj, uint64_t Addr, uint64_t Len,
69 temu_MemoryAttr Attr);
75 temu_Object_ *Device,
const char *IfaceName,
79 int (*
unmapRange)(
void *Obj, uint64_t Addr, uint64_t Len);
83 temu_Object_ *Device, temu_MemAccessIface *Iface,
86 uint64_t (*getStat)(
void *Obj, temu_MemoryStat Stat);
87 } temu_MemorySpaceIface;
89 TEMU_IFACE_REFERENCE_TYPE(temu_MemorySpace);
90 #define TEMU_MEMORY_SPACE_IFACE_TYPE "temu::MemorySpaceIface"
93 #define TEMU_PDC_PSEUDO_UNKNOWN_INSTR 0
94 #define TEMU_PDC_PSEUDO_EOP 1
95 #define TEMU_PDC_PSEUDO_TRAMPOLINE 2
96 #define TEMU_PDC_PSEUDO_POST_DS_0 3
97 #define TEMU_PDC_PSEUDO_POST_DS_1 4
98 #define TEMU_PDC_PSEUDO_ATTRIB_CHECK 5
99 #define TEMU_PDC_PSEUDO_PROFILE 6
100 #define TEMU_PDC_PSEUDO_PRE_TRAMPOLINE 7
101 #define TEMU_PDC_PSEUDO_IDLE 8
102 #define TEMU_PDC_PSEUDO_SKIP 9
103 #define TEMU_PDC_PSEUDO_CALL 10
104 #define TEMU_PDC_PSEUDO_CALL_AND_SKIP 11
105 #define TEMU_PDC_PSEUDO_MULTIPAGE 12
106 #define TEMU_PDC_PSEUDO_OP_COUNT 13
111 } temu_IRInstruction;
116 } temu_ExtIRInstruction;
119 void *(*
getPDC)(
void *Obj, uint64_t Addr);
122 void (*
writePDC)(
void *Obj, uint64_t Addr,
void *Inst);
126 void (*TrampHandler)(
void *));
133 void (*
setBT)(
void *Obj, uint64_t Addr,
void *BTP);
135 temu_ExtIRInstruction *(*allocPDCChain)(
void *Obj, uint64_t Addr);
138 uint64_t (*irToPA)(
void *obj, uint64_t addr);
142 TEMU_IFACE_REFERENCE_TYPE(temu_PDC);
143 #define TEMU_PDC_IFACE_TYPE "PDCIface"
270 TEMU_API temu_MemoryAttrs temu_memoryGetAttrs(
void *Obj, uint64_t Addr);
348 TEMU_API uint32_t temu_normaliseWrite32(uint32_t OldVal, uint32_t NewVal,
363 TEMU_API uint32_t temu_normaliseRead32(uint32_t Value,
int Sz,
int Off);
377 TEMU_API uint16_t temu_normaliseRead16(uint16_t Value,
int Sz,
int Off);
400 TEMU_API uint16_t temu_normaliseWrite16(uint16_t OldVal, uint16_t NewVal,
411 void (*
Tramp)(
void *));
412 TEMU_API uint64_t temu_irToPhys(
void *obj, uintptr_t ir);
temu_MemoryAttr
Memory attribute enumeration.
Definition: Memory.h:40
void(* setPseudoOpHandler)(void *Obj, unsigned Opcode, uintptr_t Handler)
Definition: Memory.h:124
TEMU_API void temu_memoryClearAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
void(* clearPDC)(void *Obj, uint64_t Addr)
Definition: Memory.h:123
struct temu_MemAccessIface temu_MemAccessIface
Definition: Memory.h:51
void(* writePDC)(void *Obj, uint64_t Addr, void *Inst)
Definition: Memory.h:122
TEMU_API int temu_memoryRead(void *mem, uint8_t *buff, uint64_t addr, uint32_t size, int swap)
void(* installProfile)(void *Obj, uint64_t Addr)
Definition: Memory.h:127
TEMU_API int temu_memoryReadData(void *obj, uint64_t addr, uint8_t *buff, unsigned unitSize, uint32_t size, unsigned flags)
void(* setBT)(void *Obj, uint64_t Addr, void *BTP)
Definition: Memory.h:133
TEMU_API void temu_memorySetAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
TEMU_API int temu_memoryReadPhys32Little(void *Obj, uint64_t Addr, uint32_t *Word)
void(* disposePDC)(void *Obj, uint64_t Addr)
Definition: Memory.h:121
@ teMA_User2
User definable.
Definition: Memory.h:47
TEMU_API int temu_memoryWriteData(void *obj, uint64_t addr, const uint8_t *buff, unsigned unitSize, uint32_t size, unsigned flags)
uint64_t ExtParam
Definition: Memory.h:115
temu_IRInstruction Inst
Definition: Memory.h:114
@ teMA_Upset
Single event upset.
Definition: Memory.h:44
void(* clearAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
Clear attribute bit.
Definition: Memory.h:68
TEMU_API int temu_memoryMapNamedIface(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, const char *IfaceName, uint32_t Flags)
TEMU_API int temu_memoryInstallTrampoline(void *Obj, uint64_t Addr, void(*Tramp)(void *))
@ teMS_CodeWrites
Definition: Memory.h:57
void(* allocPDC)(void *Obj, uint64_t Addr)
Definition: Memory.h:120
int(* unmapRange)(void *Obj, uint64_t Addr, uint64_t Len)
Unmap devices in range.
Definition: Memory.h:79
temu_MemoryStat
Definition: Memory.h:53
@ teMK_IO
Model is a normal IO device.
Definition: Memory.h:24
@ teMA_User3
User definable.
Definition: Memory.h:48
@ teMK_Last
DO NOT USE.
Definition: Memory.h:26
@ teMS_IOReads
Definition: Memory.h:54
@ teMA_Faulty
Multiple event upset / uncorrectable.
Definition: Memory.h:45
TEMU_API int temu_memoryWritePhys32(void *Obj, uint64_t Addr, uint32_t Word)
void(* setAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
Set attribute bit.
Definition: Memory.h:66
void(* installTrampoline)(void *Obj, uint64_t Addr, void(*TrampHandler)(void *))
Definition: Memory.h:125
void(* removeProfile)(void *Obj, uint64_t Addr)
Definition: Memory.h:128
@ teMS_SelfModifyingCodeWrites
Definition: Memory.h:56
uint8_t temu_MemoryAttrs
Definition: Memory.h:50
TEMU_API int temu_memoryMap(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, uint32_t Flags)
@ teMK_MemSpace
Model is a memory space.
Definition: Memory.h:25
@ teMA_WatchRead
Read watchpoint set.
Definition: Memory.h:42
int(* mapDeviceWithNamedIface)(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *Device, const char *IfaceName, uint32_t Flags)
Map device with named interface.
Definition: Memory.h:74
TEMU_API int temu_memoryWritePhys32Little(void *Obj, uint64_t Addr, uint32_t Word)
@ teMA_User1
User definable.
Definition: Memory.h:46
@ teMK_ROM
Model is a ROM.
Definition: Memory.h:22
@ teMK_MMIO
Alias for teMK_IO
Definition: Memory.h:23
void(* installIdle)(void *Obj, uint64_t Addr)
Definition: Memory.h:130
@ teMK_RAM
Model is a RAM.
Definition: Memory.h:21
uint32_t Instruction
Definition: Memory.h:109
@ teMS_IOWrites
Definition: Memory.h:55
TEMU_API int temu_memoryReadPhys32(void *Obj, uint64_t Addr, uint32_t *Word)
TEMU_API int temu_memoryMapNamedIface2(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, const char *IfaceName, unsigned Idx, uint32_t Flags)
@ teMA_WatchWrite
Write watchpoint set.
Definition: Memory.h:43
temu_MemoryKind
Definition: Memory.h:20
TEMU_API int temu_memoryReadPhys16(void *Obj, uint64_t Addr, uint16_t *Word)
TEMU_API int temu_memoryWrite(void *mem, uint64_t addr, uint8_t *buff, uint32_t size, int swap)
int(* mapDeviceWithIface)(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *Device, temu_MemAccessIface *Iface, uint32_t Flags)
Map device with interface pointer.
Definition: Memory.h:82
int(* mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *Device, uint32_t Flags)
Map device (using the default MemAccessIface interface)
Definition: Memory.h:63
@ teMA_Break
Breakpoint set.
Definition: Memory.h:41
void *(* getPDC)(void *Obj, uint64_t Addr)
Definition: Memory.h:119
uint32_t Operands
Definition: Memory.h:110
void(* removeIdle)(void *Obj, uint64_t Addr)
Definition: Memory.h:131
TEMU_API int temu_memoryReadPhys16Little(void *Obj, uint64_t Addr, uint16_t *Word)
void(* releasePDCChain)(void *Obj, uint64_t Addr)
Definition: Memory.h:136