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

#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