You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.9 KiB
C
111 lines
2.9 KiB
C
#ifndef _BIOS_H_
|
|
#define _BIOS_H_
|
|
|
|
// need address for linker constants!
|
|
extern int _fdata_rom;
|
|
extern int _edata_rom;
|
|
extern int _fdata;
|
|
extern int _fbss;
|
|
extern int _ebss;
|
|
|
|
// printf to mem
|
|
void putchar_handler(char c);
|
|
|
|
|
|
void int_sc(int code, int srr0);
|
|
void int_unhandled(void);
|
|
|
|
inline void set_epcr(int v) __attribute__((always_inline));
|
|
inline void set_dec(int v) __attribute__((always_inline));
|
|
inline void set_tbh(int v) __attribute__((always_inline));
|
|
inline void set_tbl(int v) __attribute__((always_inline));
|
|
inline void set_tsr(int v) __attribute__((always_inline));
|
|
inline void set_tcr(int v) __attribute__((always_inline));
|
|
inline void set_tens(int v) __attribute__((always_inline));
|
|
inline void set_xucr0(int v) __attribute__((always_inline));
|
|
inline int get_xucr0(void) __attribute__((always_inline));
|
|
|
|
inline void set_epcr(int v) {
|
|
asm volatile(
|
|
"mtspr 307,%0\n" // epcr
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_dec(int v) {
|
|
asm volatile(
|
|
"mtspr 22,%0\n" // dec
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tbh(int v) {
|
|
asm volatile(
|
|
"mtspr 285,%0\n" // tbh
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tbl(int v) {
|
|
asm volatile(
|
|
"mtspr 284,%0\n" // tbl
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tsr(int v) {
|
|
asm volatile(
|
|
"mtspr 336,%0\n" // tsr
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tcr(int v) {
|
|
asm volatile(
|
|
"mtspr 340,%0\n" // tcr
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline int get_xucr0(void) {
|
|
int v;
|
|
asm volatile(
|
|
"mfspr %0,1014\n" // xucr0
|
|
: "=r"(v) // outputs
|
|
: // inputs
|
|
: // clobbers
|
|
);
|
|
return v;
|
|
}
|
|
|
|
inline void set_xucr0(int v) {
|
|
asm volatile(
|
|
"mtspr 1014,%0\n" // xucr0
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tens(int v) {
|
|
asm volatile(
|
|
"mtspr 438,%0\n" // tens
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
#endif |