2020-01-05 17:38:32 +00:00
|
|
|
//DingusPPC
|
2019-10-16 04:15:12 +00:00
|
|
|
//Written by divingkatae and maximum
|
|
|
|
//(c)2018-20 (theweirdo) spatium
|
2019-07-02 02:15:33 +00:00
|
|
|
//Please ask for permission
|
|
|
|
//if you want to distribute this.
|
2020-01-05 17:38:32 +00:00
|
|
|
//(divingkatae#1017 or powermax#2286 on Discord)
|
2019-07-02 02:15:33 +00:00
|
|
|
|
|
|
|
// The opcodes for the processor - ppcopcodes.cpp
|
|
|
|
|
|
|
|
#ifndef PPCMEMORY_H
|
|
|
|
#define PPCMEMORY_H
|
|
|
|
|
2020-01-27 00:36:22 +00:00
|
|
|
#include <cinttypes>
|
2019-07-02 02:15:33 +00:00
|
|
|
#include <vector>
|
|
|
|
#include <array>
|
|
|
|
|
2020-01-03 19:28:37 +00:00
|
|
|
/* Uncomment this to exhaustive MMU integrity checks. */
|
|
|
|
//#define MMU_INTEGRITY_CHECKS
|
|
|
|
|
2019-08-02 00:02:01 +00:00
|
|
|
/** generic PowerPC BAT descriptor (MMU internal state) */
|
|
|
|
typedef struct PPC_BAT_entry {
|
|
|
|
uint8_t access; /* copy of Vs | Vp bits */
|
|
|
|
uint8_t prot; /* copy of PP bits */
|
|
|
|
uint32_t phys_hi; /* high-order bits for physical address generation */
|
|
|
|
uint32_t lo_mask; /* mask for low-order logical address bits */
|
|
|
|
uint32_t bepi; /* copy of Block effective page index */
|
|
|
|
} PPC_BAT_entry;
|
|
|
|
|
2019-07-02 02:15:33 +00:00
|
|
|
|
2019-08-02 23:05:48 +00:00
|
|
|
extern void ibat_update(uint32_t bat_reg);
|
2019-08-02 00:02:01 +00:00
|
|
|
extern void dbat_update(uint32_t bat_reg);
|
2019-07-02 02:15:33 +00:00
|
|
|
|
2020-01-26 02:30:55 +00:00
|
|
|
extern void ppc_set_cur_instruction(const uint8_t* ptr);
|
2020-01-27 00:36:22 +00:00
|
|
|
extern void mem_write_byte(uint32_t addr, uint8_t value);
|
|
|
|
extern void mem_write_word(uint32_t addr, uint16_t value);
|
|
|
|
extern void mem_write_dword(uint32_t addr, uint32_t value);
|
|
|
|
extern void mem_write_qword(uint32_t addr, uint64_t value);
|
|
|
|
extern uint8_t mem_grab_byte(uint32_t addr);
|
|
|
|
extern uint16_t mem_grab_word(uint32_t addr);
|
|
|
|
extern uint32_t mem_grab_dword(uint32_t addr);
|
|
|
|
extern uint64_t mem_grab_qword(uint32_t addr);
|
2020-01-26 02:30:55 +00:00
|
|
|
extern uint8_t* quickinstruction_translate(uint32_t address_grab);
|
|
|
|
|
2020-02-04 13:20:10 +00:00
|
|
|
#endif // PPCMEMORY_H
|