Vhex-kernel/include/kernel/drivers/vbr.h

42 lines
1.2 KiB
C

#ifndef __KERNEL_DRIVERS_VBR_H__
# define __KERNEL_DRIVERS_VBR_H__
//---
// General exception code
//---
#define EXP_CODE_USER_BREAK 0x1e0 // <- DBR (or VBR + 0x100)
#define EXP_CODE_ACCESS_READ 0x0e0
#define EXP_CODE_TLB_READ 0x040 // <- VBR + 0x400
#define EXP_CODE_TLB_WRITE 0x060
#define EXP_CODE_TLB_INITWRITE 0x080
#define EXP_CODE_TLB_PROTECT_R 0x0a0
#define EXP_CODE_TLB_PROTECT_W 0x0c0
#define EXP_CODE_ACCESS_WRITE 0x100
#define EXP_CODE_TRAPA 0x160
#define EXP_CODE_BAD_INSTR 0x180
#define EXP_CODE_BAD_SLOTINSTR 0x1a0
//---
// Interruption code
//---
//TODO: chech SH7724 code validity (?)
#define INT_CODE_TMU0_TUNI0 0x400
#define INT_CODE_TMU0_TUNI1 0x420
#define INT_CODE_TMU0_TUNI2 0x440
#define INT_CODE_KEYSC 0xbe0
// Macros helpers
// @note:
// First interrupt code start at 0x400 (TLB miss are redirect)
// and the last interrupt code is 0xfe0 (undocumented)
// Each interrupt code are gapped by 0x20
#define VBR_GET_INTERRUPT_CODE(id, code) (id = ((code - 0x400) / 0x20))
#define VBR_INTERRUPT_NB ((0xfe0 - 0x400) / 0x20)
// Driver primitives
extern void *vbr_interrupt_set(int intcode, void (*handler)(void));
extern void *vbr_set(void *vbr);
extern void *vbr_get(void);
#endif /*__KERNEL_DRIVERS_VBR_H__*/