24static short int X = 0, Y = 0;
25static short int MX = 80, MY = 40;
26static u32 bgcolor = 0, fontcolor = 0xffffff, cursorcolor = 0xffffff;
27static short int cursor = 1;
49static int debug_detect_signal()
53 return ((romname[4] ==
'E') ? 1 : 0);
56static void Init_GS(
int interlace,
int omode,
int ffmd)
59 *(vu64 *)0x12001000 = 0x200;
63 SetGsCrt(interlace, omode, ffmd);
66static void SetVideoMode(
void)
85 asm volatile(
" .set push \n"
90 " ori %4, %4, 0xf9ff \n"
91 " ori %5, %5, 0x227c \n"
93 " dsll32 %4, %4, 0 \n"
100 :
"=&r"(dma_addr),
"=&r"(val1),
"=&r"(val2),
101 "=&r"(val3),
"=&r"(val4),
"=&r"(val4_lo));
104static inline void Dma02Wait(
void)
109 asm volatile(
" .set push \n"
112 " lw %1, -0x6000(%0) \n"
113 "1: andi %1, %1, 0x100 \n"
118 " bnel %1, $0, 1b \n"
119 " lw %1, -0x6000(%0) \n"
121 :
"=&r"(dma_addr),
"=&r"(status));
124static void DmaReset(
void)
127 unsigned temp, temp2;
130 asm volatile(
" .set push \n"
133 " sw $0, -0x5f80(%0) \n"
134 " sw $0, -0x6000(%0) \n"
135 " sw $0, -0x5fd0(%0) \n"
136 " sw $0, -0x5ff0(%0) \n"
137 " sw $0, -0x5fb0(%0) \n"
138 " sw $0, -0x5fc0(%0) \n"
140 " ori %1, %1, 0xff1f \n"
141 " sw %1, -0x1ff0(%0) \n"
142 " lw %1, -0x1ff0(%0) \n"
145 " sw %1, -0x1ff0(%0) \n"
146 " sw $0, -0x2000(%0) \n"
147 " sw $0, -0x1fe0(%0) \n"
148 " sw $0, -0x1fd0(%0) \n"
149 " sw $0, -0x1fb0(%0) \n"
150 " sw $0, -0x1fc0(%0) \n"
151 " lw %1, -0x2000(%0) \n"
153 " sw %1, -0x2000(%0) \n"
155 :
"=&r"(dma_addr),
"=&r"(temp),
"=&r"(temp2));
164static inline void progdma(
void *addr,
int size)
169 asm volatile(
" .set push \n"
172 " sw %3, -0x5fe0(%0) \n"
173 " sw %2, -0x5ff0(%0) \n"
175 " sw %1, -0x6000(%0) \n"
177 :
"=&r"(dma_addr),
"=&r"(temp)
178 :
"r"(addr),
"r"(size));
181void scr_setbgcolor(u32 color)
186void scr_setfontcolor(u32 color)
191void scr_setcursorcolor(u32 color)
199 {0x100000000000800E, 0xE, 0xA0000, 0x4C, 0x8C, 0x4E},
203 {0x40, 1, 0x1a, 1, 0x46, 0, 0x45, 0x70000,
204 0x47, 0x30000, 0x47, 6, 0, 0x3F80000000000000, 1, 0x79006C00, 5,
205 0x87009400, 5, 0x70000, 0x47}
211 Init_GS(1, debug_detect_signal() == 1 ? 3 : 2, 0);
221void scr_putchar(
int x,
int y, u32 color,
int ch)
224 {0x1000000000000004, 0xE, 0xA000000000000, 0x50},
230 {0x52, 0, 0x53, 0x800000000008010, 0}
238 ((
struct t_setupchar *)UNCACHED_SEG(&setupchar))->x = x;
239 ((
struct t_setupchar *)UNCACHED_SEG(&setupchar))->y = y;
244 for (i = l = 0; i < 8; i++, l += 8, font++) {
245 for (j = 0; j < 8; j++) {
246 pixel = ((*font & (128 >> j))) ? color : bgcolor;
247 *(u32 *)UNCACHED_SEG(&charmap[l + j]) = pixel;
253 progdma(charmap, (8 * 8 * 4) / 16);
257void scr_clearchar(
int X,
int Y)
259 scr_putchar(X * 8, Y * 8, bgcolor,
' ');
262void scr_clearline(
int Y)
265 for (i = 0; i < MX; i++)
266 scr_putchar(i * 8, Y * 8, bgcolor,
' ');
269void scr_printf(
const char *format, ...)
272 va_start(opt, format);
273 scr_vprintf(format, opt);
277void scr_vprintf(
const char *format, va_list opt)
283 bufsz = vsnprintf(buff,
sizeof(buff), format, opt);
285 for (i = 0; i < bufsz; i++) {
297 for (j = 0; j < 5; j++) {
298 scr_putchar(X * 7, Y * 8, fontcolor,
' ');
307 scr_putchar(X * 7, Y * 8, fontcolor, c);
319 scr_putchar(X * 7, Y * 8, cursorcolor, 219);
322void scr_setXY(
int x,
int y)
324 if (x < MX && x >= 0)
326 if (y < MY && y >= 0)
343 for (y = 0; y < MY; y++)
348void scr_setCursor(
int enable)
char * GetRomName(char *romname)
static void progdma(void *addr, int size)