- removed call to dbg_init()

- added call to libsys_init() which calls dbg_init().
- added
  void Screen_clr(void);
  void Screen_line_clr(void);
  void Screen_csr_set_x(UINT32 coord);
  void Screen_csr_set_y(UINT32 coord);
- changed register defines to UPPER-CASE


Committed on the Free edition of March Hare Software CVSNT Server.
Upgrade to CVS Suite for more features and support:
http://march-hare.com/cvsnt/


git-svn-id: http://moon:8086/svn/vhdl/trunk@637 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2009-11-08 13:05:13 +00:00
parent 21fa0293d6
commit 24d11d565e
+183 -87
View File
@@ -10,6 +10,14 @@
// ---------------------------------------------------------------------------------
// Types
// ---------------------------------------------------------------------------------
void libsys_init(void)
{
// Initalize debugger
dbg_init();
// Do some initializations here
}
UINT32 GetPort(int file)
{
@@ -69,19 +77,19 @@ typedef struct _scon_if_out_t
// ---------------------------------------------------------------------------------
static uart_if_t uart_if[2] =
{
{(UINT32*)sys_uart0_stat, (UINT32*)sys_uart0_data, (UINT32*)sys_uart0_baud},
{(UINT32*)sys_uart1_stat, (UINT32*)sys_uart1_data, (UINT32*)sys_uart1_baud}
{(UINT32*)SYS_UART0_STAT, (UINT32*)SYS_UART0_DATA, (UINT32*)SYS_UART0_BAUD},
{(UINT32*)SYS_UART1_STAT, (UINT32*)SYS_UART1_DATA, (UINT32*)SYS_UART1_BAUD}
};
static ps2_if_t ps2_if[2] =
{
{(UINT32*)sys_ps2_0_stat, (UINT32*)sys_ps2_0_data},
{(UINT32*)sys_ps2_1_stat, (UINT32*)sys_ps2_1_data}
{(UINT32*)SYS_PS2_0_STAT, (UINT32*)SYS_PS2_0_DATA},
{(UINT32*)SYS_PS2_1_STAT, (UINT32*)SYS_PS2_1_DATA}
};
static vga_if_t vga_if =
{
(UINT32*)sys_vga_ctrl, (UINT32*)sys_vga_ascii, (UINT32*)sys_vga_posx, (UINT32*)sys_vga_posy
(UINT32*)SYS_VGA_CTRL, (UINT32*)SYS_VGA_ASCII, (UINT32*)SYS_VGA_POSX, (UINT32*)SYS_VGA_POSY
};
static con_if_in_t con_if_in[4] =
@@ -249,67 +257,73 @@ void DCACHE_invalidate_at(UINT32* pPtr)
//keymap for the AT keyboard SG layout
typedef struct
{
char scancode;
char unshifted;
char shifted;
UINT8 scancode;
UINT8 unshifted;
UINT8 shifted;
UINT8 altered;
} libsys_key_entry_t;
#define SHIFTED (1<<0)
#define ALTERED (1<<1)
#define CONTROLLED (1<<2)
static const libsys_key_entry_t __keymap[] =
static const libsys_key_entry_t __keymap_german[] =
{
{0x1c, 'a', 'A'},
{0x32, 'b', 'B'},
{0x21, 'c', 'C'},
{0x23, 'd', 'D'},
{0x24, 'e', 'E'},
{0x2b, 'f', 'F'},
{0x34, 'g', 'G'},
{0x33, 'h', 'H'},
{0x43, 'i', 'I'},
{0x3b, 'j', 'J'},
{0x42, 'k', 'K'},
{0x4b, 'l', 'L'},
{0x3a, 'm', 'M'},
{0x31, 'n', 'N'},
{0x44, 'o', 'O'},
{0x4d, 'p', 'P'},
{0x15, 'q', 'Q'},
{0x2d, 'r', 'R'},
{0x1b, 's', 'S'},
{0x2c, 't', 'T'},
{0x3c, 'u', 'U'},
{0x2a, 'v', 'V'},
{0x1d, 'w', 'W'},
{0x22, 'x', 'X'},
{0x1a, 'y', 'Y'},
{0x35, 'z', 'Z'},
{0x16, '1', '+'},
{0x1e, '2', '"'},
{0x26, '3', '*'},
{0x25, '4', 'ç'},
{0x2e, '5', '%'},
{0x36, '6', '&'},
{0x3d, '7', '/'},
{0x3e, '8', '('},
{0x46, '9', ')'},
{0x45, '0', '='},
{0x29, ' ', ' '},
{0x41, ',', ';'},
{0x49, '.', ':'},
{0x4a, '-', '_'},
{0x76, '\x1b', '\x1b'}, //ESC
{0x5a, '\n', '\n'}, //RETURN
{0x0d, '\t', '\t'}, //TAB
{0x66, '\b', '\b'}, //BS
{0x1c, 'a', 'A', 'a'},
{0x32, 'b', 'B', 'b'},
{0x21, 'c', 'C', 'c'},
{0x23, 'd', 'D', 'd'},
{0x24, 'e', 'E', ''},
{0x2b, 'f', 'F', 'f'},
{0x34, 'g', 'G', 'g'},
{0x33, 'h', 'H', 'h'},
{0x43, 'i', 'I', 'i'},
{0x3b, 'j', 'J', 'j'},
{0x42, 'k', 'K', 'k'},
{0x4b, 'l', 'L', 'l'},
{0x3a, 'm', 'M', 'µ'},
{0x31, 'n', 'N', 'n'},
{0x44, 'o', 'O', 'o'},
{0x4d, 'p', 'P', 'p'},
{0x15, 'q', 'Q', '@'},
{0x2d, 'r', 'R', 'r'},
{0x1b, 's', 'S', 's'},
{0x2c, 't', 'T', 't'},
{0x3c, 'u', 'U', 'u'},
{0x2a, 'v', 'V', 'v'},
{0x1d, 'w', 'W', 'w'},
{0x22, 'x', 'X', 'x'},
{0x1a, 'y', 'Y', 'y'},
{0x35, 'z', 'Z', 'z'},
{0x16, '1', '!', '1'},
{0x1e, '2', '"', '2'},
{0x26, '3', '§', '3'},
{0x25, '4', '$', '4'},
{0x2e, '5', '%', '5'},
{0x36, '6', '&', '6'},
{0x3d, '7', '/', '{'},
{0x3e, '8', '(', '['},
{0x46, '9', ')', ']'},
{0x45, '0', '=', '}'},
{0x4e, 'ß', '?', '\\'},
{0x29, ' ', ' ', ' '},
{0x41, ',', ';', ','},
{0x49, '.', ':', '.'},
{0x4a, '-', '_', '-'},
{0x52, 'ä', 'Ä', 'ä'},
{0x4c, 'ö', 'Ö', 'ö'},
{0x54, 'ü', 'Ü', 'ü'},
{0x5a, '\n', '\n', '\n'}, //RETURN
{0x5b, '+', '*', '~'},
{0x5d, '#', '\'', '#'},
{0x0e, '^', '°', '^'},
{0x61, '<', '>', '|'},
{0} //sentinel
};
static char __findkey(char scancode, int mode)
{
const libsys_key_entry_t *p = __keymap;
const libsys_key_entry_t *p = __keymap_german;
while (p->scancode)
{
if (p->scancode == scancode)
@@ -319,6 +333,7 @@ static char __findkey(char scancode, int mode)
case SHIFTED:
return p->shifted;
case ALTERED:
return p->altered;
case ALTERED|SHIFTED:
default:
return p->unshifted;
@@ -358,15 +373,15 @@ UINT32 PS2_readchar(ps2_if_t *pIF)
if (!pIF)
return -1;
while (!(sys_ps2_bit_rx_avail & *pIF->pCTRL));
while (!(SYS_PS2_BIT_RX_AVAIL & *pIF->pCTRL));
return (*pIF->pDATA & 0xFF);
}
int con_readchar(ps2_if_t *pIF)
UINT32 con_readchar(ps2_if_t *pIF)
{
int c;
UINT8 c;
static char mode = 0;
static char nextrelease = 0;
static char extended = 0;
@@ -428,7 +443,7 @@ int con_readchar(ps2_if_t *pIF)
if (char_valid)
{
// printf("c = %c (%d), flags = 0x%08X, mode = 0x%08X\n", c, c, flags, mode);
// fprintf(stderr, "c = %c (%d), flags = 0x%08X, mode = 0x%08X\n", c, c, flags, mode);
return c;
}
@@ -446,7 +461,7 @@ int UART_readchar(uart_if_t *pIF)
if (!pIF)
return -1;
if (sys_uart_bit_rx_avail & *pIF->pCTRL)
if (SYS_UART_BIT_RX_AVAIL & *pIF->pCTRL)
return (*pIF->pDATA & 0xFF);
return -1;
@@ -457,18 +472,92 @@ void UART_writechar(uart_if_t *pIF, char c)
if (!pIF)
return;
while((sys_uart_bit_tx_halffull & *pIF->pCTRL) != 0);
while((SYS_UART_BIT_TX_HALFFULL & *pIF->pCTRL) != 0);
*pIF->pDATA = (UINT32)c;
}
void cg_writechar(vga_if_t *pIF, char c)
{
UINT32 code;
if (!pIF)
return;
while (!(*pIF->pCTRL & sys_vga_bit_cgrdy));
*pIF->pDATA = (UINT32)c;
// Output translation
switch(c)
{
case 'Ä':
code = 196;
break;
case 'ä':
code = 228;
break;
case 'Ö':
code = 214;
break;
case 'ö':
code = 246;
break;
case 'Ü':
code = 220;
break;
case 'ü':
code = 252;
break;
case '&':
code = 230;
break;
case '§':
code = 167;
break;
case 'ß':
code = 223;
break;
case '°':
code = 176;
break;
case 'µ':
code = 181;
break;
default:
code = (UINT32)c;
break;
}
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pDATA = code;
}
void cg_set_csr_x(vga_if_t *pIF, UINT32 coord)
{
if (!pIF)
return;
// Set cursor
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCSRX = coord;
}
void cg_set_csr_y(vga_if_t *pIF, UINT32 coord)
{
if (!pIF)
return;
// Set cursor
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCSRY = coord;
}
void cg_clr_line(vga_if_t *pIF)
@@ -476,8 +565,8 @@ void cg_clr_line(vga_if_t *pIF)
if (!pIF)
return;
while (!(*pIF->pCTRL & sys_vga_bit_cgrdy));
*pIF->pCTRL |= sys_vga_bit_clrline;
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCTRL |= SYS_VGA_BIT_CLRLINE;
}
void cg_clr_screen(vga_if_t *pIF)
@@ -486,23 +575,38 @@ void cg_clr_screen(vga_if_t *pIF)
if (!pIF)
return;
while (!(*pIF->pCTRL & sys_vga_bit_cgrdy));
*pIF->pCTRL |= sys_vga_bit_clrscr;
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCTRL |= SYS_VGA_BIT_CLRSCR;
// Cursor home
while (!(*pIF->pCTRL & sys_vga_bit_cgrdy));
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCSRX = 0;
while (!(*pIF->pCTRL & sys_vga_bit_cgrdy));
while (!(*pIF->pCTRL & SYS_VGA_BIT_CGRDY));
*pIF->pCSRY = 0;
}
void clr_screen(void)
void Screen_clr(void)
{
cg_clr_screen(&vga_if);
}
void Screen_line_clr(void)
{
cg_clr_line(&vga_if);
}
void Screen_csr_set_x(UINT32 coord)
{
cg_set_csr_x(&vga_if, coord);
}
void Screen_csr_set_y(UINT32 coord)
{
cg_set_csr_y(&vga_if, coord);
}
// ---------------------------------------------------------------------------------
char readchar(UINT32 port)
{
@@ -572,15 +676,9 @@ void _putchar(UINT32 port, char c)
cg_writechar((vga_if_t*)pIF->pIF, c);
if (c == 0x0A)
{
cg_clr_line((vga_if_t*)pIF->pIF);
cg_writechar((vga_if_t*)pIF->pIF, 0x0D);
cg_clr_line((vga_if_t*)pIF->pIF);
}
if (c == 0x0D)
{
cg_writechar((vga_if_t*)pIF->pIF, 0x0A);
cg_clr_line((vga_if_t*)pIF->pIF);
}
break;
default:
@@ -618,8 +716,8 @@ void sleep(unsigned ms)
int getrusage(int who, struct rusage *usage)
{
volatile long *pReg_usec = (long*)sys_timer_usec;
volatile long *pReg_sec = (long*)sys_timer_sec;
volatile long *pReg_usec = (long*)SYS_TIMER_USEC;
volatile long *pReg_sec = (long*)SYS_TIMER_SEC;
// who: RUSAGE_SELF or RUSAGE_CHILDREN
usage->ru_utime.tv_usec = *pReg_usec;
@@ -630,8 +728,8 @@ int getrusage(int who, struct rusage *usage)
clock_t times(struct tms *buffer)
{
volatile long *pReg_usec = (long*)sys_timer_usec;
volatile long *pReg_sec = (long*)sys_timer_sec;
volatile long *pReg_usec = (long*)SYS_TIMER_USEC;
volatile long *pReg_sec = (long*)SYS_TIMER_SEC;
long sec;
long usec;
@@ -651,8 +749,8 @@ clock_t times(struct tms *buffer)
int gettimeofday(struct timeval *tp, void *tzp)
{
volatile long *pReg_usec = (long*)sys_timer_usec;
volatile long *pReg_sec = (long*)sys_timer_sec;
volatile long *pReg_usec = (long*)SYS_TIMER_USEC;
volatile long *pReg_sec = (long*)SYS_TIMER_SEC;
if (tp)
{
@@ -665,8 +763,8 @@ int gettimeofday(struct timeval *tp, void *tzp)
int settimeofday(const struct timeval *tp, const struct timezone *tzp)
{
volatile long *pReg_usec = (long*)sys_timer_usec;
volatile long *pReg_sec = (long*)sys_timer_sec;
volatile long *pReg_usec = (long*)SYS_TIMER_USEC;
volatile long *pReg_sec = (long*)SYS_TIMER_SEC;
div_t res;
res = div(tp->tv_usec, 1E6);
@@ -746,10 +844,9 @@ int read(int file, char *ptr, int len)
while (i < len)
{
c = readchar(port);
_putchar(port, c);
if ((c == 0x0D) || (c == 0x0A))
{
writechar(port, 0x0D);
writechar(port, 0x0A);
if (i==0)
continue;
@@ -759,7 +856,6 @@ int read(int file, char *ptr, int len)
else
{
ptr[i++] = c;
writechar(port, c);
}
}
return i;