11 #include <propeller.h> 13 #include "simpletext.h" 21 static int dummyRx(
vgatext *ptr) {
return 0; }
23 vgatext *vgatext_open(
int basepin)
28 text->
devst = &gVgaText;
30 text->
txChar = vgatext_putchar;
33 text->
cogid[0] = vgatext_start(&gVgaText, basepin);
37 void vgatext_close(
vgatext *device)
39 int id = device->
cogid[0];
45 cogstop(getStopCOGID(
id));
56 HUBDATA
short gVgaScreen[VGA_TEXT_SCREENSIZE];
61 HUBDATA
static int gcolors[VGA_TEXT_COLORTABLE_SIZE];
67 #if defined(__PROPELLER_XMM__) 68 HUBDATA
static uint32_t pasm[496];
74 static int col, row, flag;
76 static int blank = 0x220;
81 static char gpalette[VGA_TEXT_COLORTABLE_SIZE] =
93 char greypalette[VGA_TEXT_COLORTABLE_SIZE] =
109 static int color = 0;
111 static void wordfill(
short *dst,
short val,
int len);
112 static void wordmove(
short *dst,
short *src,
int len);
118 int vgatext_start(
volatile vgatextdev_t* vga,
int basepin)
120 extern int binary_VGA_dat_start[];
129 vga->pins = basepin | 0x7;
131 vga->screen = (long) gVgaScreen;
132 vga->colors = (long) gcolors;
133 vga->ht = VGA_TEXT_COLS;
134 vga->vt = VGA_TEXT_ROWS;
147 vga->rate = 80000000 >> 2;
148 vga->palette = gpalette;
150 #if defined(__PROPELLER_USE_XMM__) 152 extern int binary_VGA_dat_end[];
153 int pasmsize = ((int)binary_VGA_dat_start-(
int)binary_VGA_dat_end)>>2;
154 id = load_cog_driver_xmm((uint32_t*) binary_VGA_dat_start, pasmsize, (
void*)vga);
156 id = cognew((
void*)binary_VGA_dat_start, (
void*)vga);
163 vgatext_setColorPalette(&vga->palette[VGA_TEXT_PAL_WHITE_BLUE]);
164 wordfill(gVgaScreen, blank, VGA_TEXT_SCREENSIZE);
166 waitcnt(CLKFREQ/5+CNT);
175 void vgatext_stop(
int id)
186 void vgatext_setColorPalette(
char* ptr)
192 for(ii = 0; ii < VGA_TEXT_COLORTABLE_SIZE; ii += 2)
197 gcolors[ii] = fg << 24 | bg << 16 | fg << 8 | bg;
198 gcolors[mm] = fg << 24 | fg << 16 | bg << 8 | bg;
205 static void newline(
void)
208 if (++row == VGA_TEXT_ROWS) {
210 wordmove(&gVgaScreen[0], &gVgaScreen[VGA_TEXT_COLS], VGA_TEXT_LASTROW);
211 wordfill(&gVgaScreen[VGA_TEXT_LASTROW], blank, VGA_TEXT_COLS);
218 static void printc(
int c)
220 int ndx = row * VGA_TEXT_COLS + col;
226 val = ((color << 1) | (c & 1)) << 10;
227 val += 0x200 + (c & 0xFE);
232 while(gVgaText.status != VGA_TEXT_STAT_INVISIBLE)
234 gVgaScreen[ndx] = val;
236 if (++col == VGA_TEXT_COLS) {
247 int vgatext_out(
int c)
255 wordfill(&gVgaScreen[0], color << 11 | blank, VGA_TEXT_SCREENSIZE);
287 col = c % VGA_TEXT_COLS;
291 row = c % VGA_TEXT_ROWS;
306 int vgatext_putchar(
vgatext *vga,
int c)
342 void vgatext_clear(
void)
351 void vgatext_home(
void)
360 void vgatext_clearEOL(
void)
364 for(
int i = col; i < VGA_TEXT_COLS; i++)
375 void vgatext_setCoordPosition(
int x,
int y)
378 row = VGA_TEXT_ROWS-y-1;
386 void vgatext_setXY(
int x,
int y)
396 void vgatext_setX(
int x)
405 void vgatext_setY(
int y)
414 int vgatext_getX(
void)
423 int vgatext_getY(
void)
432 void vgatext_setColors(
int value)
434 color = value % VGA_TEXT_COLORS;
441 int vgatext_getColors(
void)
443 return color % VGA_TEXT_COLORS;
450 int vgatext_getColumns(
void)
452 return VGA_TEXT_COLS;
459 int vgatext_getRows(
void)
461 return VGA_TEXT_ROWS;
464 static void wordfill(
short *dst,
short val,
int len)
472 static void wordmove(
short *dst,
short *src,
int len)
int(* rxChar)(struct text_struct *p)
int(* txChar)(struct text_struct *p, int ch)
Structure that contains data used by simple text device libraries.