 |
TEMU
4.4
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"
67 int (*
mapDevice)(
void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *Device,
70 void (*
setAttr)(
void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
72 void (*
clearAttr)(
void *Obj, uint64_t Addr, uint64_t Len,
73 temu_MemoryAttr Attr);
79 temu_Object_ *Device,
const char *IfaceName,
83 int (*
unmapRange)(
void *Obj, uint64_t Addr, uint64_t Len);
87 temu_Object_ *Device, temu_MemAccessIface *Iface,
90 uint64_t (*getStat)(
void *Obj, temu_MemoryStat Stat);
91 } temu_MemorySpaceIface;
93 TEMU_IFACE_REFERENCE_TYPE(temu_MemorySpace);
94 #define TEMU_MEMORY_SPACE_IFACE_TYPE "temu::MemorySpaceIface"
97 #define TEMU_PDC_PSEUDO_UNKNOWN_INSTR 0
98 #define TEMU_PDC_PSEUDO_EOP 1
99 #define TEMU_PDC_PSEUDO_TRAMPOLINE 2
100 #define TEMU_PDC_PSEUDO_POST_DS_0 3
101 #define TEMU_PDC_PSEUDO_POST_DS_1 4
102 #define TEMU_PDC_PSEUDO_ATTRIB_CHECK 5
103 #define TEMU_PDC_PSEUDO_PROFILE 6
104 #define TEMU_PDC_PSEUDO_PRE_TRAMPOLINE 7
105 #define TEMU_PDC_PSEUDO_IDLE 8
106 #define TEMU_PDC_PSEUDO_SKIP 9
107 #define TEMU_PDC_PSEUDO_CALL 10
108 #define TEMU_PDC_PSEUDO_CALL_AND_SKIP 11
109 #define TEMU_PDC_PSEUDO_MULTIPAGE 12
110 #define TEMU_PDC_PSEUDO_OP_COUNT 13
115 } temu_IRInstruction;
120 } temu_ExtIRInstruction;
131 void (*TrampHandler)(
void *));
138 void (*
setBTForCpu)(
void *Obj,
int Cpu, uint64_t Addr,
void *BTP);
140 temu_ExtIRInstruction *(*allocPDCChainForCpu)(
void *Obj,
int Cpu, uint64_t Addr);
143 uint64_t (*irToPAForCpu)(
void *obj,
int Cpu, uint64_t addr);
151 TEMU_IFACE_REFERENCE_TYPE(temu_PDC);
152 #define TEMU_PDC_IFACE_TYPE "PDCIface"
279 TEMU_API temu_MemoryAttrs temu_memoryGetAttrs(
void *Obj, uint64_t Addr);
357 TEMU_API uint32_t temu_normaliseWrite32(uint32_t OldVal, uint32_t NewVal,
372 TEMU_API uint32_t temu_normaliseRead32(uint32_t Value,
int Sz,
int Off);
386 TEMU_API uint16_t temu_normaliseRead16(uint16_t Value,
int Sz,
int Off);
409 TEMU_API uint16_t temu_normaliseWrite16(uint16_t OldVal, uint16_t NewVal,
420 void (*
Tramp)(
void *));
421 TEMU_API uint64_t temu_irToPhys(
void *obj, uintptr_t ir);
422 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:138
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:148
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:119
temu_IRInstruction Inst
Definition: Memory.h:118
@ 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:72
TEMU_API int temu_memoryMapNamedIface(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, const char *IfaceName, uint32_t Flags)
@ teMS_IOWriteTime
Definition: Memory.h:60
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:136
void(* disposePDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:126
@ teMS_CodeWrites
Definition: Memory.h:57
int(* unmapRange)(void *Obj, uint64_t Addr, uint64_t Len)
Unmap devices in range.
Definition: Memory.h:83
void(* removeSkipForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:146
temu_MemoryStat
Definition: Memory.h:53
void(* clearPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:128
@ 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:149
void(* installTrampolineForCpu)(void *Obj, int Cpu, uint64_t Addr, void(*TrampHandler)(void *))
Definition: Memory.h:130
@ 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:70
void(* installProfileForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:132
void(* allocPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:125
@ 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:129
@ teMS_LockTime
Definition: Memory.h:61
void(* writePDCForCpu)(void *Obj, int Cpu, uint64_t Addr, void *Inst)
Definition: Memory.h:127
@ 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:78
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:113
@ 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:135
@ teMS_IOReadTime
Definition: Memory.h:59
void(* removeProfileForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:133
temu_MemoryKind
Definition: Memory.h:20
void *(* getPDCForCpu)(void *Obj, int Cpu, uint64_t Addr)
Definition: Memory.h:124
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:141
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:86
void(* installSkipForCpu)(void *Obj, int Cpu, uint64_t Addr, unsigned Steps)
Definition: Memory.h:145
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:67
@ teMS_LocksTaken
Definition: Memory.h:58
@ teMA_Break
Breakpoint set.
Definition: Memory.h:41
uint32_t Operands
Definition: Memory.h:114
TEMU_API int temu_memoryReadPhys16Little(void *Obj, uint64_t Addr, uint16_t *Word)