2005-07-07 Philippe Simons <loki_666@fastmail.fm>

* Makefile.am: Remove lcd.rel, added console/uart.c,
	removed conio stuffs.
	* console/conio.c, console/console.c, console/defaultfont.c,
	include/conio.h : files removed.
	* console/uart.c: New file.
	* include/bsp.h: lcd.c prototypes removed.
	* startup/bspstart.c: bsp_reset() cause gp32 to reset to bios,
	added a bsp_idle_task which put s3c2400 in a "wait for IRQ" state.
This commit is contained in:
Philippe Simons
2005-07-07 22:07:11 +00:00
parent 1f18710404
commit 4bc22a6d75
9 changed files with 295 additions and 1240 deletions

View File

@@ -1,3 +1,14 @@
2005-07-07 Philippe Simons <loki_666@fastmail.fm>
* Makefile.am: Remove lcd.rel, added console/uart.c,
removed conio stuffs.
* console/conio.c, console/console.c, console/defaultfont.c,
include/conio.h : files removed.
* console/uart.c: New file.
* include/bsp.h: lcd.c prototypes removed.
* startup/bspstart.c: bsp_reset() cause gp32 to reset to bios,
added a bsp_idle_task which put s3c2400 in a "wait for IRQ" state.
2005-06-06 Philippe Simons <loki_666@fastmail.fm>
* Makefile.am: Include lcd.rel.

View File

@@ -10,7 +10,6 @@ include $(top_srcdir)/../../bsp.am
dist_project_lib_DATA = bsp_specs
include_HEADERS = include/bsp.h
include_HEADERS += include/conio.h
include_HEADERS += include/tm27.h
nodist_include_HEADERS = include/bspopts.h
@@ -36,7 +35,7 @@ startup_rel_CPPFLAGS = $(AM_CPPFLAGS)
startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_PROGRAMS += console.rel
console_rel_SOURCES = console/conio.c console/defaultfont.c console/console.c
console_rel_SOURCES = console/uart.c ../../shared/console.c
console_rel_CPPFLAGS = $(AM_CPPFLAGS)
console_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
@@ -46,8 +45,7 @@ libbsp_a_LIBADD = startup.rel console.rel
libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/shared/arm920.rel \
../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/clock.rel \
../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/timer.rel \
../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/irq.rel \
../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/lcd.rel
../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/irq.rel
all-local: $(PREINSTALL_FILES) $(TMPINSTALL_FILES)
@@ -73,10 +71,6 @@ $(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
$(PROJECT_INCLUDE)/conio.h: include/conio.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/conio.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/conio.h
$(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h

View File

@@ -1,360 +0,0 @@
/*
* conio.c : ARM GBA BSP
*
* This file contains the GBA conio I/O package.
*
*
* Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net>
*
* This source file is based on work by Rafael Vuijk (aka Dark Fader)
* MyLib by Rafael Vuijk (aka Dark Fader)
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
/*---------------------------------------------------------------------------*
* Includes *
*---------------------------------------------------------------------------*/
#include <rtems/score/types.h>
#include <s3c2400.h>
#include <bsp.h>
#include <conio.h>
#include <stdio.h>
#include <stdarg.h>
#define gp_initButtons() {rPBCON=0x0;}
#define gp_getButtons() ((((~rPEDAT >> 6) & 0x3) << 8) | \
((~rPBDAT >> 8) & 0xFF))
/*---------------------------------------------------------------------------*
* Defines *
*---------------------------------------------------------------------------*/
#define DEFAULT_FONT_WIDTH 4
#define DEFAULT_FONT_HEIGHT 6
#define W (LCD_WIDTH/DEFAULT_FONT_WIDTH)
#define H (LCD_HEIGHT/DEFAULT_FONT_HEIGHT)
typedef unsigned char Bitmap[LCD_HEIGHT][LCD_WIDTH];
#define GP32_CONIO_VRAM 0x0c7ed000
#define bg_bitmap (*(Bitmap *)GP32_CONIO_VRAM)
/* color conversion */
#define RGB(r,g,b) ( (r)<<11 | (g)<<6 | (b)<<1 )
int _wherex;
int _wherey;
int _textattr;
/*---------------------------------------------------------------------------*
* Defaultfont *
*---------------------------------------------------------------------------*/
#include "defaultfont.c"
/*---------------------------------------------------------------------------*
* gp32_gotoxy *
*---------------------------------------------------------------------------*/
void gpconio_gotoxy(int _x, int _y)
{
_wherex = _x;
_wherey = _y;
}
/*---------------------------------------------------------------------------*
* PutChar *
*---------------------------------------------------------------------------*/
void PutChar(char c, int textattr, int x, int y)
{
int f = textattr & 0x0F;
int b = textattr >> 4;
uint32_t fmask = f | (f << 8) | (f << 16) | (f << 24);
uint32_t bmask = b | (b << 8) | (b << 16) | (b << 24);
uint32_t *dest = (uint32_t *)&bg_bitmap[((y << 1) + y) << 1][x << 2];
const uint32_t *src = (uint32_t *)&(font3x5[(int)c]);
uint32_t s;
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
s = *src++;
*dest = (fmask&s) | (bmask&~s);
dest += LCD_WIDTH / sizeof(uint32_t);
}
/*---------------------------------------------------------------------------*
* gp32_textattr *
*---------------------------------------------------------------------------*/
void gpconio_textattr(int _attr)
{
_textattr = _attr;
}
/*---------------------------------------------------------------------------*
* gp32_textbackground *
*---------------------------------------------------------------------------*/
void gpconio_textbackground(int _color)
{
_textattr = (_textattr & 0x0F) | (_color << 4);
}
/*---------------------------------------------------------------------------*
* gp32_textcolor *
*---------------------------------------------------------------------------*/
void gpconio_textcolor(int _color)
{
_textattr = (_textattr & 0xF0) | (_color);
}
/*---------------------------------------------------------------------------*
* ClrLine *
*---------------------------------------------------------------------------*/
void ClrLine(int y)
{
int x;
for(x=0 ; x<=W ; x++) PutChar(0, _textattr, x, y);
}
/*---------------------------------------------------------------------------*
* NextLine *
*---------------------------------------------------------------------------*/
void NextLine()
{
_wherex = 0;
if (++_wherey >= H) {
_wherey = 0;
}
ClrLine(_wherey);
}
/*---------------------------------------------------------------------------*
* clrscr *
*---------------------------------------------------------------------------*/
void gpconio_clrscr()
{
int y;
for(y=0 ; y<=H ; y++) {
ClrLine(y);
}
gpconio_gotoxy(0,0);
}
/*---------------------------------------------------------------------------*
* gp32_put *
*---------------------------------------------------------------------------*/
void gpconio_put(char _c)
{
/* We have save some memory with fonts */
_c = _c & 0x7F; /* no extened chars */
_c = _c - 0x20; /* no cntr chars */
PutChar(_c, _textattr, _wherex, _wherey);
}
/*---------------------------------------------------------------------------*
* gp32_putch *
*---------------------------------------------------------------------------*/
void gpconio_putch(char _c)
{
switch (_c) {
case ASCII_LF:
NextLine();
break;
case ASCII_CR:
gpconio_gotoxy(0, _wherey);
break;
default:
gpconio_put(_c);
if (++_wherex >= W) {
NextLine();
}
break;
}
return;
}
/*---------------------------------------------------------------------------*
* gp32_puts *
*---------------------------------------------------------------------------*/
void gpconio_puts(const char *_str)
{
while (*_str) {
gpconio_putch(*_str++);
}
return;
}
/*---------------------------------------------------------------------------*
* gp32_printf *
*---------------------------------------------------------------------------*/
int gpconio_printf(const char *_format, ...)
{
char s[256];
va_list marker;
va_start(marker, _format);
int r = vsprintf(s, _format, marker);
va_end(marker);
gpconio_puts(s);
return r;
}
void ShowConIO()
{
unsigned short BPPMODE = 11;
unsigned short CLKVAL = (get_HCLK()/(83385*2*60))-1;
uint32_t LCDBANK = GP32_CONIO_VRAM >> 22;
uint32_t LCDBASEU = (GP32_CONIO_VRAM & 0x3FFFFF) >> 1;
uint32_t LCDBASEL;
unsigned short OFFSIZE = 0;
unsigned short PAGEWIDTH;
rLCDCON1 = (CLKVAL<<8) | (0<<7) | (3<<5) | (BPPMODE<<1) | (1<<0) ;
rLCDCON2 = 0;
rLCDCON2 = (1<<24) | (319<<14) | (2<<6) | (1<<0) ;
rLCDCON3 = 0;
rLCDCON3 = (6<<19) | (239<<8) | (2<<0) ;
rLCDCON4 = 0;
rLCDCON4 = (0<<24) | (0<<16) | (0<<8) | (4<<0) ;
rLCDCON5 = 0;
rLCDCON5 = ((1<<10) | (1<<9) | (1<<8) | (0<<7) |
(0<<6) | (0<<4) | (0<<2) | (1<<1) | (0<<0)) ;
LCDBASEL = LCDBASEU + 320*120;
PAGEWIDTH = 120;
rLCDSADDR1 = (LCDBANK<<21) | (LCDBASEU<<0) ;
rLCDSADDR2 = (LCDBASEL<<0) ;
rLCDSADDR3 = (OFFSIZE<<11) | (PAGEWIDTH<<0) ;
}
/*---------------------------------------------------------------------------*
* InitConIO *
*---------------------------------------------------------------------------*/
void InitConIO()
{
ShowConIO();
gp_initButtons();
gpconio_textattr(0);
gpconio_textcolor(DEF_TEXTCOLOR);
gpconio_textbackground(DEF_TEXTBACKGROUND);
gpconio_clrscr();
}
static void delay_loop(unsigned int count)
{
int i;
for(i = 0; i < count; i++) {
i = i;
}
}
/*---------------------------------------------------------------------------*
* gp32_getch *
*---------------------------------------------------------------------------*/
static unsigned char inputch = ASCII_CR;
char gpconio_getch(void)
{
int keyx;
int key = 0;
while(1) {
key = gp_getButtons();
do {
keyx = gp_getButtons();
} while (keyx == key);
switch (key) {
case GP32_KEY_SELECT:
gpconio_put(inputch);
return inputch;
break;
case GP32_KEY_START:
gpconio_put(' ');
inputch = ASCII_CR;
return inputch;
break;
case GP32_KEY_A:
inputch = 'A';
break;
case GP32_KEY_B:
inputch = 'Z';
break;
case GP32_KEY_UP:
if ((inputch-1) >= 0x20) {
inputch--;
}
break;
case GP32_KEY_DOWN:
if ((inputch+1) <= 0x7E) {
inputch++;
}
break;
case GP32_KEY_LEFT:
if ((inputch - 0x20) >= 0x20) {
inputch -= 0x20;
}
break;
case GP32_KEY_RIGHT:
if ((inputch + 0x20) <= 0x7E) {
inputch += 0x20;
}
break;
case GP32_KEY_R:
inputch = '1';
break;
case GP32_KEY_L:
inputch = '9';
break;
default:
break;
}
gpconio_put(inputch);
delay_loop(10000);
}
}

View File

@@ -1,176 +0,0 @@
/*
* console.c : ARM GBA BSP
*
* This file contains the GBA console I/O package.
*
*
* Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net>
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
#include <bsp.h>
#include <rtems/bspIo.h>
#include <rtems/libio.h>
#include <rtems/termiostypes.h>
#include <termios.h>
#include <irq.h>
#include <s3c2400.h>
#include <conio.h>
/*
* BSP initialization
*/
static int gp32_pollRead(int minor)
{
return(gpconio_getch());
}
static int gp32_write(int minor, const char *buf, int len)
{
int i;
for(i = 0; i < len; i++) {
gpconio_putch((unsigned short)buf[i]);
}
return len;
}
/* for printk support */
BSP_output_char_function_type BSP_output_char = (BSP_output_char_function_type) gpconio_putch;
BSP_polling_getchar_function_type BSP_poll_char = (BSP_polling_getchar_function_type) gpconio_getch;
/*-------------------------------------------------------------------------+
| Console device driver INITIALIZE entry point.
+--------------------------------------------------------------------------+
| Initilizes the I/O console (keyboard + VGA display) driver.
+--------------------------------------------------------------------------*/
rtems_device_driver
console_initialize(rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg)
{
rtems_status_code status;
/*
* Set up TERMIOS
*/
rtems_termios_initialize ();
/*
* Do device-specific initialization
*/
InitConIO();
/*
* Register the device
*/
status = rtems_io_register_name ("/dev/console", major, 0);
if (status != RTEMS_SUCCESSFUL) {
printk("Error registering console device!\n");
rtems_fatal_error_occurred (status);
}
return RTEMS_SUCCESSFUL;
}
/*-------------------------------------------------------------------------+
| Console device driver OPEN entry point
+--------------------------------------------------------------------------*/
rtems_device_driver
console_open(rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg)
{
rtems_status_code status;
static rtems_termios_callbacks cb =
{
NULL, /* firstOpen */
NULL, /* lastClose */
gp32_pollRead, /* pollRead */
gp32_write, /* write */
NULL, /* setAttributes */
NULL, /* stopRemoteTx */
NULL, /* startRemoteTx */
TERMIOS_POLLED /* 1 = outputUsesInterrupts */
};
status = rtems_termios_open (major, minor, arg, &cb);
if(status != RTEMS_SUCCESSFUL) {
printk("Error openning console device\n");
return status;
}
return RTEMS_SUCCESSFUL;
}
/*-------------------------------------------------------------------------+
| Console device driver CLOSE entry point
+--------------------------------------------------------------------------*/
rtems_device_driver
console_close(rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg)
{
rtems_device_driver res = RTEMS_SUCCESSFUL;
res = rtems_termios_close (arg);
return res;
}
/*-------------------------------------------------------------------------+
| Console device driver READ entry point.
+--------------------------------------------------------------------------+
| Read characters from the I/O console. We only have stdin.
+--------------------------------------------------------------------------*/
rtems_device_driver
console_read(rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg)
{
return rtems_termios_read (arg);
}
/*-------------------------------------------------------------------------+
| Console device driver WRITE entry point.
+--------------------------------------------------------------------------+
| Write characters to the I/O console. Stderr and stdout are the same.
+--------------------------------------------------------------------------*/
rtems_device_driver
console_write(rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg)
{
return rtems_termios_write (arg);
}
/*
* Handle ioctl request.
*/
rtems_device_driver
console_control(rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return rtems_termios_ioctl (arg);
}

View File

@@ -1,600 +0,0 @@
/*
* defaultfont.c : ARM GBA BSP
*
* This file contains default font definitions
*
*
* Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net>
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#define X 255
#define GEN_FONT_DATA(a,b,c,d) ( ((d) << 24) | \
((c) << 16) | \
((b) << 8) | \
((a) << 0) )
static const unsigned long font3x5[256][6] = {
{ /* ' ' - ascii:0x20 font:0x00 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '!' - ascii:0x21 font:0x01 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* '"' - ascii:0x22 font:0x02 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '#' - ascii:0x23 font:0x03 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* '$' - ascii:0x24 font:0x04 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* '%' - ascii:0x25 font:0x05 */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,0 )
},{ /* '&' - ascii:0x26 font:0x06 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* ''' - ascii:0x27 font:0x07 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '(' - ascii:0x28 font:0x08 */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X )
},{ /* ')' - ascii:0x29 font:0x09 */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 )
},{ /* '*' - ascii:0x2A font:0x0A */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '+' - ascii:0x2B font:0x0B */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '<27>' - ascii:0x2C font:0x0C */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '-' - ascii:0x2D font:0x0D */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '.' - ascii:0x2E font:0x0E */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
},{ /* '/' - ascii:0x2F font:0x0F */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( X,0,0,0 )
},{ /* '0' - ascii:0x30 font:0x10 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '1' - ascii:0x31 font:0x11 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '2' - ascii:0x32 font:0x12 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '3' - ascii:0x33 font:0x13 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '4' - ascii:0x34 font:0x14 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X )
},{ /* '5' - ascii:0x35 font:0x15 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '6' - ascii:0x36 font:0x16 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '7' - ascii:0x37 font:0x17 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* '8' - ascii:0x38 font:0x18 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '9' - ascii:0x39 font:0x19 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* ':' - ascii:0x3A font:0x1A */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
},{ /* ';' - ascii:0x3B font:0x1B */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* '<' - ascii:0x3C font:0x1C */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X )
},{ /* '=' - ascii:0x3D font:0x1D */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '>' - ascii:0x3E font:0x1E */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 )
},{ /* '?' - ascii:0x3F font:0x1F */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* '@' - ascii:0x40 font:0x20 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'A' - ascii:0x41 font:0x21 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'B' - ascii:0x42 font:0x22 */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* 'C' - ascii:0x43 font:0x23 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'D' - ascii:0x44 font:0x24 */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
},{ /* 'E' - ascii:0x45 font:0x25 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* 'F' - ascii:0x46 font:0x26 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* 'G' - ascii:0x47 font:0x27 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'H' - ascii:0x48 font:0x28 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'I' - ascii:0x49 font:0x29 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'J' - ascii:0x4A font:0x2A */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'K' - ascii:0x4B font:0x2B */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'L' - ascii:0x4C font:0x2C */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* 'M' - ascii:0x4D font:0x2D */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'N' - ascii:0x4E font:0x2E */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'O' - ascii:0x4F font:0x2F */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'P' - ascii:0x50 font:0x30 */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* 'Q' - ascii:0x51 font:0x31 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'R' - ascii:0x52 font:0x33 */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'S' - ascii:0x53 font:0x33 */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* 'T' - ascii:0x54 font:0x34 */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
},{ /* 'U' - ascii:0x55 font:0x35 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* 'V' - ascii:0x56 font:0x36 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
},{ /* 'W' - ascii:0x57 font:0x37 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
},{ /* 'X' - ascii:0x58 font:0x38 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'Y' - ascii:0x59 font:0x39 */
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
},{ /* 'Z' - ascii:0x5A font:0x3A */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '[' - ascii:0x5B font:0x3B */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '\' - ascii:0x5C font:0x3C */
GEN_FONT_DATA( X,0,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* ']' - ascii:0x5D font:0x3D */
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '^' - ascii:0x5E font:0x3E */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '_' - ascii:0x5F font:0x3F */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '<27>' - ascii:0x60 font:0x30 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* 'a' - ascii:0x31 font:0x31 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* 'b' - ascii:0x62 font:0x32 */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* 'c' - ascii:0x63 font:0x33 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'd' - ascii:0x64 font:0x34 */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
},{ /* 'e' - ascii:0x65 font:0x35 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'f' - ascii:0x66 font:0x36 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* 'g' - ascii:0x67 font:0x37 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* 'h' - ascii:0x68 font:0x38 */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'i' - ascii:0x69 font:0x39 */
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'j' - ascii:0x6A font:0x3A */
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'k' - ascii:0x6B font:0x3B */
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'l' - ascii:0x6C font:0x3C */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* 'm' - ascii:0x6D font:0x3D */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'n' - ascii:0x6E font:0x3E */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'o' - ascii:0x6F font:0x6F */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 )
},{ /* 'p' - ascii:0x70 font:0x40 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* 'q' - ascii:0x71 font:0x41 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,0,0,X )
},{ /* 'r' - ascii:0x72 font:0x43 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,0,0 )
},{ /* 's' - ascii:0x73 font:0x43 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* 't' - ascii:0x74 font:0x44 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,X ),
},{ /* 'u' - ascii:0x75 font:0x45 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* 'v' - ascii:0x76 font:0x46 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
},{ /* 'w' - ascii:0x77 font:0x47 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,X,0,X ),
},{ /* 'x' - ascii:0x78 font:0x48 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,X )
},{ /* 'y' - ascii:0x79 font:0x49 */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
},{ /* 'z' - ascii:0x7A font:0x4A */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,X )
},{ /* '{' - ascii:0x7B font:0x4B */
GEN_FONT_DATA( 0,0,X,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,X,X )
},{ /* '\' - ascii:0x7C font:0x4C */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* '}' - ascii:0x7D font:0x4D */
GEN_FONT_DATA( 0,X,X,0 ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,X,0 ),
GEN_FONT_DATA( 0,X,X,0 )
},{ /* '~' - ascii:0x7E font:0x4E */
GEN_FONT_DATA( 0,0,0,0 ),
GEN_FONT_DATA( 0,X,0,0 ),
GEN_FONT_DATA( 0,X,X,X ),
GEN_FONT_DATA( 0,0,0,X ),
GEN_FONT_DATA( 0,0,0,0 )
},{ /* DEL - ascii:0x7F font:0x4F */
GEN_FONT_DATA( X,X,X,X ),
GEN_FONT_DATA( X,X,X,X ),
GEN_FONT_DATA( X,X,X,X ),
GEN_FONT_DATA( X,X,X,X ),
GEN_FONT_DATA( X,X,X,X )
}
};

View File

@@ -0,0 +1,249 @@
/*
* console driver for S3C2400 UARTs
*
* This driver uses the shared console driver in
* ...../libbsp/shared/console.c
*
* If you want the driver to be interrupt driven, you
* need to write the ISR, and in the ISR insert the
* chars into termios's queue.
*
* Copyright (c) 2004 Cogent Computer Systems
* Written by Jay Monkman <jtm@lopingdog.com>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
*
* http://www.OARcorp.com/rtems/license.html.
*
*
* $Id$
*/
#include <bsp.h> /* Must be before libio.h */
#include <rtems/libio.h>
#include <termios.h>
#include <rtems/bspIo.h>
/* Put the CPU (or UART) specific header file #include here */
#include <s3c2400.h>
#include <libchip/serial.h>
#include <libchip/sersupp.h>
/* How many serial ports? */
#define NUM_DEVS 1
int uart_poll_read(int minor);
int dbg_dly;
/* static function prototypes */
static int uart_first_open(int major, int minor, void *arg);
static int uart_last_close(int major, int minor, void *arg);
static int uart_read(int minor);
static int uart_write(int minor, const char *buf, int len);
static void uart_init(int minor);
static void uart_write_polled(int minor, char c);
static int uart_set_attributes(int minor, const struct termios *t);
/* These are used by code in console.c */
unsigned long Console_Port_Count = NUM_DEVS;
console_data Console_Port_Data[NUM_DEVS];
/* rtems console uses the following minor number */
rtems_device_minor_number Console_Port_Minor = 0;
/* Pointers to functions for handling the UART. */
console_fns uart_fns =
{
libchip_serial_default_probe,
uart_first_open,
uart_last_close,
uart_read,
uart_write,
uart_init,
uart_write_polled, /* not used in this driver */
uart_set_attributes,
FALSE /* TRUE if interrupt driven, FALSE if not. */
};
/*
* There's one item in array for each UART.
*
* Some of these fields are marked "NOT USED". They are not used
* by console.c, but may be used by drivers in libchip
*
*/
console_tbl Console_Port_Tbl[] = {
{
"/dev/com0", /* sDeviceName */
SERIAL_CUSTOM, /* deviceType */
&uart_fns, /* pDeviceFns */
NULL, /* deviceProbe */
NULL, /* pDeviceFlow */
0, /* ulMargin - NOT USED */
0, /* ulHysteresis - NOT USED */
NULL, /* pDeviceParams */
0, /* ulCtrlPort1 - NOT USED */
0, /* ulCtrlPort2 - NOT USED */
0, /* ulDataPort - NOT USED */
NULL, /* getRegister - NOT USED */
NULL, /* setRegister - NOT USED */
NULL, /* getData - NOT USED */
NULL, /* setData - NOT USED */
0, /* ulClock - NOT USED */
0 /* ulIntVector - NOT USED */
}
};
/*********************************************************************/
/* Functions called via termios callbacks (i.e. the ones in uart_fns */
/*********************************************************************/
/*
* This is called the first time each device is opened. If the driver
* is interrupt driven, you should enable interrupts here. Otherwise,
* it's probably safe to do nothing.
*
* Since micromonitor already set up the UART, we do nothing.
*/
static int uart_first_open(int major, int minor, void *arg)
{
return 0;
}
/*
* This is called the last time each device is closed. If the driver
* is interrupt driven, you should disable interrupts here. Otherwise,
* it's probably safe to do nothing.
*/
static int uart_last_close(int major, int minor, void *arg)
{
return 0;
}
/*
* Read one character from UART.
*
* Return -1 if there's no data, otherwise return
* the character in lowest 8 bits of returned int.
*/
static int uart_read(int minor)
{
char c;
if (minor == 0) {
if (rUTRSTAT0 & 0x1) {
c = rURXH0 & 0xff;
return c;
} else {
return -1;
}
} else {
printk("Unknown console minor number: %d\n", minor);
return -1;
}
}
/*
* Write buffer to UART
*
* return 1 on success, -1 on error
*/
static int uart_write(int minor, const char *buf, int len)
{
int i;
if (minor == 0) {
for (i = 0; i < len; i++) {
/* Wait for fifo to have room */
while(!(rUTRSTAT0 & 0x2)) {
continue;
}
rUTXH0 = (char) buf[i];
}
} else {
printk("Unknown console minor number: %d\n", minor);
return -1;
}
return 1;
}
/* Set up the UART. */
static void uart_init(int minor)
{
int i;
unsigned int reg = 0;
/* enable UART0 */
rCLKCON|=0x100;
/* value is calculated so : (int)(PCLK/16./baudrate) -1 */
reg = get_PCLK() / (16 * 115200) - 1;
/* FIFO enable, Tx/Rx FIFO clear */
rUFCON0 = 0x07;
rUMCON0 = 0x0;
/* Normal,No parity,1 stop,8 bit */
rULCON0 = 0x3;
/*
* tx=level,rx=edge,disable timeout int.,enable rx error int.,
* normal,interrupt or polling
*/
rUCON0 = 0x245;
rUBRDIV0 = reg;
for (i = 0; i < 100; i++);
}
/* I'm not sure this is needed for the shared console driver. */
static void uart_write_polled(int minor, char c)
{
uart_write(minor, &c, 1);
}
/* This is for setting baud rate, bits, etc. */
static int uart_set_attributes(int minor, const struct termios *t)
{
return 0;
}
/***********************************************************************/
/*
* The following functions are not used by TERMIOS, but other RTEMS
* functions use them instead.
*/
/***********************************************************************/
/*
* Read from UART. This is used in the exit code, and can't
* rely on interrupts.
*/
int uart_poll_read(int minor)
{
return uart_read(minor);
}
/*
* Write a character to the console. This is used by printk() and
* maybe other low level functions. It should not use interrupts or any
* RTEMS system calls. It needs to be very simple
*/
static void _BSP_put_char( char c ) {
uart_write_polled(0, c);
if (c == '\n') {
uart_write_polled(0, '\r');
}
}
BSP_output_char_function_type BSP_output_char = _BSP_put_char;

View File

@@ -32,9 +32,6 @@ extern "C" {
extern rtems_configuration_table BSP_Configuration;
void gp32_setFramebuffer(void *add);
short gp32_initFramebufferN(void *add, uint32_t bitmode, uint32_t refreshrate);
short gp32_initFramebufferBP(void *add, uint32_t bitmode, uint32_t refreshrate);
#define gp32_initButtons() {rPBCON=0x0;}
#define gp32_getButtons() ( (((~rPEDAT >> 6) & 0x3 )<<8) | (((~rPBDAT >> 8) & 0xFF)<<0) )

View File

@@ -1,82 +0,0 @@
/*
* conio.h : ARM GP32 BSP
*
* This file contains the GP32 conio I/O package.
*
*
* Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net>
*
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifndef _CONIO_H
#define _CONIO_H
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
* Defines *
*---------------------------------------------------------------------------*/
#define ASCII_BEL 0x07 /* bell */
#define ASCII_BS 0x08 /* backspace */
#define ASCII_TAB 0x09 /* horizontal tab */
#define ASCII_LF 0x0A /* line feed */
#define ASCII_CR 0x0D /* carriage return */
#define ASCII_XON 0x11 /* control-Q */
#define ASCII_XOFF 0x13 /* control-S */
#define ASCII_ESC 0x1B /* escape */
enum COLORS
{
BLACK,
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE,
MAXCOLORS
};
#define DEF_TEXTCOLOR BLACK
#define DEF_TEXTBACKGROUND WHITE
/*---------------------------------------------------------------------------*
* Prototypes *
*---------------------------------------------------------------------------*/
void gpconio_clrscr();
void gpconio_textattr(int _attr);
void gpconio_textbackground(int _color);
void gpconio_textcolor(int _color);
void gpconio_putch(char _c);
void gpconio_puts(const char *_str);
int gpconio_printf(const char *_format, ...);
void gpconio_gotoxy(int _x, int _y);
char gpconio_getch(void);
char gpconio_getch_noblock(void);
void InitConIO();
void ShowConIO();
#ifdef __cplusplus
}
#endif
#endif // _CONIO_H

View File

@@ -19,7 +19,6 @@
#include <rtems/libio.h>
#include <rtems/bspIo.h>
#include <s3c2400.h>
#include <conio.h>
/*-------------------------------------------------------------------------+
| Global Variables
@@ -80,6 +79,13 @@ void bsp_pretasking_hook(void)
} /* bsp_pretasking_hook */
void bsp_idle_task(void)
{
while(1){
asm volatile ("MCR p15,0,r0,c7,c0,4 \n");
}
}
/*-------------------------------------------------------------------------+
| Function: bsp_start
| Description: Called before main is invoked.
@@ -98,16 +104,12 @@ void bsp_start_default( void )
Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */
Cpu_table.predriver_hook = NULL; /* use system's */
Cpu_table.postdriver_hook = bsp_postdriver_hook;
Cpu_table.idle_task = NULL;
Cpu_table.idle_task = bsp_idle_task;
Cpu_table.do_zero_of_workspace = TRUE;
Cpu_table.interrupt_stack_size = 4096;
Cpu_table.extra_mpci_receive_server_stack = 0;
/* setup rCLKCON */
/* disable all but IIS,IIC,PWMTIMER and LCD */
rCLKCON=0x6048;
/* stop RTC */
rTICINT=0x0;
@@ -119,9 +121,8 @@ void bsp_start_default( void )
/* disable interrupts */
rINTMOD=0x0;
rINTMSK=BIT_ALLMSK; /* unmasked by drivers */
/*rSRCPND=BIT_ALLMSK;
rINTMSK=BIT_ALLMSK;
rINTPND=BIT_ALLMSK;*/
last=0;
for(i=0; i<4; i++) {
pend=rSRCPND;
if(pend == 0 || pend == last)
@@ -200,6 +201,27 @@ void bsp_reset(void)
rtems_interrupt_level level;
_CPU_ISR_Disable(level);
printk("bsp_reset.....\n");
ShowConIO();
while(1);
/* disable mmu, invalide i-cache and call swi #4 */
asm volatile(""
"mrc p15,0,r0,c1,c0,0 \n"
"bic r0,r0,#1 \n"
"mcr p15,0,r0,c1,c0,0 \n"
"nop \n"
"nop \n"
"nop \n"
"nop \n"
"nop \n"
"mov r0,#0 \n"
"MCR p15,0,r0,c7,c5,0 \n"
"nop \n"
"nop \n"
"nop \n"
"nop \n"
"nop \n"
"swi #4 "
:
:
: "r0"
);
/* we should be back in bios now */
}