- added getpid(), kill(), link(), unlink()

- modifed read()
- added flush() for UART
- added screen_get_resx(), screen_get_resy(), screen_get_fps()
- added some more initializations in libsys_init()
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@696 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2010-01-31 12:57:01 +00:00
parent 2379f58695
commit a352a5f9ad
+120 -17
View File
@@ -7,14 +7,38 @@
#include <stdlib.h> #include <stdlib.h>
#include "libsys.h" #include "libsys.h"
// ---------------------------------------------------------------------------------
// Forward declarations
// ---------------------------------------------------------------------------------
void flush(UINT32 port);
UINT32 GetPort(int file);
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
// Types // Types
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
void libsys_init(void) void libsys_init(void)
{ {
UINT32 volatile *pVGA_ctrl = (UINT32*)SYS_VGA_CTRL;
UINT32 volatile *pITIM_ctrl = (UINT32*)SYS_ITIM_CTRL;
Screen_clr();
// Disable timers
*pITIM_ctrl = 0;
// Disable all VGA stuff
*pVGA_ctrl = 0;
// Initialzie syscall support
syscalls_init();
// Initalize debugger // Initalize debugger
dbg_init(); dbg_init();
// flush stdin
flush(GetPort(0));
// Do some initializations here // Do some initializations here
} }
@@ -22,13 +46,13 @@ void libsys_init(void)
UINT32 GetPort(int file) UINT32 GetPort(int file)
{ {
if (file == 0) if (file == 0)
return 2; return 0;
if (file == 1) if (file == 1)
return 2; return 0;
if (file == 2) if (file == 2)
return 0; return 2;
} }
enum enum
@@ -81,11 +105,7 @@ static uart_if_t uart_if[2] =
{(UINT32*)SYS_UART1_STAT, (UINT32*)SYS_UART1_DATA, (UINT32*)SYS_UART1_BAUD} {(UINT32*)SYS_UART1_STAT, (UINT32*)SYS_UART1_DATA, (UINT32*)SYS_UART1_BAUD}
}; };
static ps2_if_t ps2_if[2] = extern ps2_if_t ps2_if[];
{
{(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 = static vga_if_t vga_if =
{ {
@@ -318,6 +338,7 @@ static const libsys_key_entry_t __keymap_german[] =
{0x5d, '#', '\'', '#'}, {0x5d, '#', '\'', '#'},
{0x0e, '^', '°', '^'}, {0x0e, '^', '°', '^'},
{0x61, '<', '>', '|'}, {0x61, '<', '>', '|'},
{0x66, '\b', '\b', '\b'},
{0} //sentinel {0} //sentinel
}; };
@@ -607,7 +628,54 @@ void Screen_csr_set_y(UINT32 coord)
cg_set_csr_y(&vga_if, coord); cg_set_csr_y(&vga_if, coord);
} }
UINT32 Screen_get_resx(void)
{
UINT32 volatile *pVGA_res = (UINT32*)SYS_VGA_RES;
return (0xFFF & (*pVGA_res >> 0));
}
UINT32 Screen_get_resy(void)
{
UINT32 volatile *pVGA_res = (UINT32*)SYS_VGA_RES;
return (0xFFF & (*pVGA_res >> 12));
}
UINT32 Screen_get_fps(void)
{
UINT32 volatile *pVGA_res = (UINT32*)SYS_VGA_RES;
return (0xFF & (*pVGA_res >> 24));
}
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
void flush(UINT32 port)
{
int c;
con_if_in_t *pIF;
pIF = &con_if_in[port];
do
{
switch(pIF->type)
{
case IF_TYPE_UART:
c = UART_readchar((uart_if_t*)pIF->pIF);
break;
case IF_TYPE_PS2:
c = con_readchar((ps2_if_t*)pIF->pIF);
break;
default:
break;
}
} while(c > 0);
}
char readchar(UINT32 port) char readchar(UINT32 port)
{ {
int c; int c;
@@ -837,26 +905,29 @@ int read(int file, char *ptr, int len)
int i; int i;
char c; char c;
// sputs("read ("); print_word(file); sputs(")\n"); // sputs("read (file="); print_word(file); sputs(", len ="); print_word(len); sputs(")\n");
i = 0; i = 0;
port = GetPort(file); port = GetPort(file);
while (i < len) while (i < len)
{ {
c = readchar(port); c = readchar(port);
_putchar(port, c);
if (c == 0x04)
break;
if ((c == 0x0D) || (c == 0x0A)) if ((c == 0x0D) || (c == 0x0A))
{ {
if (i==0) writechar(port, 0x0D);
continue; ptr[i++] = 0x0D;
writechar(port, 0x0A);
ptr[i++] = c; ptr[i++] = 0x0A;
break; break;
} }
else
{ writechar(port, c);
ptr[i++] = c; ptr[i++] = c;
}
} }
return i; return i;
} }
@@ -881,6 +952,38 @@ int isatty(int file)
return 1; return 1;
} }
int getpid(void)
{
return 1;
}
#include <errno.h>
#undef errno
extern int errno;
int kill(int pid, int sig)
{
errno = EINVAL;
return -1;
}
#include <errno.h>
#undef errno
extern int errno;
int link(char *old, char *new)
{
errno = EMLINK;
return -1;
}
#include <errno.h>
#undef errno
extern int errno;
int unlink(char *name)
{
errno = ENOENT;
return -1;
}
int sputs(char *pStr) int sputs(char *pStr)
{ {
char *start; char *start;