 |
TEMU
4.2
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;
127 void (*TrampHandler)(
void *));
134 void (*
setBTForCpu)(
void *Obj,
int Cpu, uint64_t Addr,
void *BTP);
136 temu_ExtIRInstruction *(*allocPDCChainForCpu)(
void *Obj,
int Cpu, uint64_t Addr);
139 uint64_t (*irToPAForCpu)(
void *obj,
int Cpu, uint64_t addr);
147 TEMU_IFACE_REFERENCE_TYPE(temu_PDC);
148 #define TEMU_PDC_IFACE_TYPE "PDCIface"
275 TEMU_API temu_MemoryAttrs temu_memoryGetAttrs(
void *Obj, uint64_t Addr);
353 TEMU_API uint32_t temu_normaliseWrite32(uint32_t OldVal, uint32_t NewVal,
368 TEMU_API uint32_t temu_normaliseRead32(uint32_t Value,
int Sz,
int Off);
382 TEMU_API uint16_t temu_normaliseRead16(uint16_t Value,
int Sz,
int Off);
405 TEMU_API uint16_t temu_normaliseWrite16(uint16_t OldVal, uint16_t NewVal,
416 void (*
Tramp)(
void *));
417 TEMU_API uint64_t temu_irToPhys(
void *obj, uintptr_t ir);
418 TEMU_API uint64_t temu_irToPhysForCpu(
void *obj,
int cpu, uintptr_t ir);
void(* setBTForCpu)(void *Obj, int Cpu, uint64_t Addr, void *BTP)
Definition: Memory.h:134
temu_MemoryAttr
Memory attribute enumeration.
Definition: Memory.h:40
TEMU_API void temu_memoryClearAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
struct temu_MemAccessIface temu_MemAccessIface
Definition: Memory.h:51
TEMU_API int temu_memoryRead(void *mem, uint8_t *buff, uint64_t addr, uint32_t size, int swap)
TEMU_API int temu_memoryReadData(void *obj, uint64_t addr, uint8_t *buff, unsigned unitSize, uint32_t size, unsigned flags)
void(* installCallForCpu)(void *Obj, int Cpu, uint64_t Addr, unsigned FuncID)
Definition: Memory.h:144
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)
@ 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 *))
void(* removeIdleForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:132
void(* disposePDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:122
@ teMS_CodeWrites
Definition: Memory.h:57
int(* unmapRange)(void *Obj, uint64_t Addr, uint64_t Len)
Unmap devices in range.
Definition: Memory.h:79
void(* removeSkipForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:142
temu_MemoryStat
Definition: Memory.h:53
void(* clearPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:124
@ teMK_IO
Model is a normal IO device.
Definition: Memory.h:24
@ teMA_User3
User definable.
Definition: Memory.h:48
void(* removeCallForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:145
void(* installTrampolineForCpu)(void *Obj, int Cpu, uint64_t Addr, void(*TrampHandler)(void *))
Definition: Memory.h:126
@ 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(* installProfileForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:128
void(* allocPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:121
@ 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
void(* setPseudoOpHandlerForCpu)(void *Obj, int Cpu, unsigned Opcode, uintptr_t Handler)
Definition: Memory.h:125
void(* writePDCForCpu)(void *Obj, int Cpu, uint64_t Addr, void *Inst)
Definition: Memory.h:123
@ 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
@ 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
void(* installIdleForCpu)(void *Obj, int Cpu, uint64_t Addr, uint32_t Param)
Definition: Memory.h:131
void(* removeProfileForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:129
temu_MemoryKind
Definition: Memory.h:20
void *(* getPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:120
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)
void(* releasePDCChainForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:137
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
void(* installSkipForCpu)(void *Obj, int Cpu, uint64_t Addr, unsigned Steps)
Definition: Memory.h:141
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
uint32_t Operands
Definition: Memory.h:110
TEMU_API int temu_memoryReadPhys16Little(void *Obj, uint64_t Addr, uint16_t *Word)