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.
120 lines
3.2 KiB
C
120 lines
3.2 KiB
C
#ifndef BIOS_H
|
|
|
|
#define BIOS_H
|
|
|
|
extern int *_fdata_rom;
|
|
extern int *_edata_rom;
|
|
extern int *_fdata;
|
|
extern int *_fbss;
|
|
extern int *_ebss;
|
|
|
|
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(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 307,4\n" // epcr
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_dec(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 22,4\n" // dec
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tbh(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 285,4\n" // tbh
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tbl(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 284,4\n" // tbl
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tsr(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 336,4\n" // tsr
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tcr(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 340,4\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(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 1014,4\n" // xucr0
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
inline void set_tens(int v) {
|
|
asm volatile(
|
|
"lis 4,%0@h\n"
|
|
"ori 4,4,%0@l\n"
|
|
"mtspr 438,4\n" // tens
|
|
: // outputs
|
|
: "r"(v) // inputs
|
|
: "r4" // clobbers
|
|
);
|
|
}
|
|
|
|
#endif |