97 lines
1.9 KiB
C
97 lines
1.9 KiB
C
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
/*
|
|
* File: cop0.h
|
|
* Author: jens
|
|
*
|
|
* Created on 12. Januar 2017, 16:07
|
|
*/
|
|
|
|
#ifndef COP0_H
|
|
#define COP0_H
|
|
|
|
#include <stdint.h>
|
|
|
|
// ---------------------------------------------------------
|
|
// Chip registers
|
|
// ---------------------------------------------------------
|
|
// COP0 registers
|
|
#define COP0_REG_INVAT_POINTER 31
|
|
|
|
// COP0 instructions
|
|
#define COP0_INSTR_INVALL_ICACHE 32
|
|
#define COP0_INSTR_INVAT_ICACHE 33
|
|
#define COP0_INSTR_INVALL_DCACHE 34
|
|
#define COP0_INSTR_INVAT_DCACHE 35
|
|
|
|
#define CP0_read(idx) \
|
|
({ \
|
|
uint32_t result; \
|
|
__asm__ __volatile__ \
|
|
( \
|
|
"mfc0\t%0,$"#idx"\n" \
|
|
: "=r" (result) \
|
|
); \
|
|
result; \
|
|
})
|
|
|
|
#define CP0_write(idx, val) \
|
|
({ \
|
|
__asm__ __volatile__ \
|
|
( \
|
|
"mtc0\t%0,$"#idx"\n" \
|
|
"nop\n" \
|
|
: /* no output */ \
|
|
: "r" (val) \
|
|
); \
|
|
})
|
|
|
|
#define CP0_TLBR \
|
|
({ \
|
|
__asm__ __volatile__ \
|
|
( \
|
|
"tlbr\n" \
|
|
: /* no output */ \
|
|
: /* no input */ \
|
|
); \
|
|
})
|
|
|
|
#define CP0_TLBWI \
|
|
({ \
|
|
__asm__ __volatile__ \
|
|
( \
|
|
"tlbwi\n" \
|
|
: /* no output */ \
|
|
: /* no input */ \
|
|
); \
|
|
})
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
uint32_t CP0_SR_read(void);
|
|
void CP0_SR_write(uint32_t val);
|
|
uint32_t CP0_CR_read(void);
|
|
void CP0_CR_write(uint32_t val);
|
|
uint32_t CP0_PRID_read(void);
|
|
uint32_t CP0_TR_read(void);
|
|
void CP0_TR_write(uint32_t val);
|
|
void CP0_TR_write_ptr(uint32_t* pPtr);
|
|
void CP0_TR_read_ptr(uint32_t* pPtr);
|
|
void ICACHE_invalidate_all(void);
|
|
void ICACHE_invalidate_at(uint32_t* pPtr);
|
|
void DCACHE_invalidate_all(void);
|
|
void DCACHE_invalidate_at(uint32_t* pPtr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* COP0_H */
|
|
|