A project to implement a console using the Mbed using VGA for video output and a PS/2 keyboard for the input. The eventual goal is to also include tools for managing SD cards, and a semi-self-hosting programming environment.
Dependencies: PS2_MbedConsole fastlib SDFileSystem vga640x480g_mbedconsole lightvm mbed
MbedConsole is a cool little project to have a self-contained computer all on an Mbed. So far it has VGA and PS/2 support and can stand alone without a computer powering it. Next planned features are SD card support and a lightweight programmable VM complete with a file editor and self-hosted assembler.
You can view additional details about it at http://earlz.net/tags/mbedconsole
Diff: textio.cpp
- Revision:
- 12:3ee3062cc11c
- Parent:
- 11:fede136943a9
- Child:
- 13:442bd2fb4ea0
--- a/textio.cpp Fri Sep 28 04:03:54 2012 +0000 +++ b/textio.cpp Fri Sep 28 04:35:00 2012 +0000 @@ -1,126 +1,127 @@ -#include "mbedconsole.h" - -#define FONTHEIGHT 16 -#define FONTWIDTH 8 - -int console_x=0, console_y=0; -int console_color=WHITE; //text color - - -void vsetcursor(int x, int y) -{ - console_x=x; - console_y=y; -} - -void vrawputc(char c) -{ - //fuck that shitv - if(console_x>80) - { - return; - } - //shift left for fast multiply - vga_putchar(console_x<<3, console_y<<4, c, console_color); -} -void vputc(char c) -{ - //shift left for fast multiply - if(console_x>=79) - { - console_x=0; - console_y++; - } - if(console_y>=24) - { - console_y--; - vga_scroll(); - } - switch(c){ - case '\n': - case '\r': - console_y++; - console_x=0; - break; - case '\b': - vrawputc(' '); - if(console_x>0) - { - console_x--; - } - vrawputc(' '); - break; - case '\t': - for(int i=0;i<4;i++) - { - console_x++; - vrawputc(' '); - } - default: - vga_putchar(console_x<<3, console_y<<4, c, console_color); - console_x++; - } -} - -void vputs(char *s){ - while(*s!=0){ - vputc(*s); - s++; - } -} - -char vgetc() -{ - char tmp=kbd_GetKey(); - vputc(tmp); - return tmp; -} -int vgetsl(char *buf, int len) -{ - int pos=0; - while(1){ - buf[pos]=kbd_GetKey(); - if(buf[pos]=='\r'){ - buf[pos]='\n'; - } - - vputc(buf[pos]); - if(buf[pos]=='\b'){ - buf[pos]=0; - if(pos>0){ - pos--; - buf[pos--]=0; - } - } - if(pos>len-1){ - break; - } - if(buf[pos]=='\n'){ - buf[pos]=0; - return 1; - } - pos++; - } - return 0; -} - - - -int strlcmp(const char *s1,const char *s2,size_t count){ - int i=0; - while((s1[i]!=0) && (s2[i]!=0)){ - if(s1[i]!=s2[i]){ - return -1; - } - if(i>=count){ - return -1; - } - i++; - - } - if(s1[i]!=s2[i]){ - return -1; - } - return 0; -} - +#include "mbedconsole.h" +#include "keyboard.h" + +#define FONTHEIGHT 16 +#define FONTWIDTH 8 + +int console_x=0, console_y=0; +int console_color=WHITE; //text color + + +void vsetcursor(int x, int y) +{ + console_x=x; + console_y=y; +} + +void vrawputc(char c) +{ + //fuck that shitv + if(console_x>80) + { + return; + } + //shift left for fast multiply + vga_putchar(console_x<<3, console_y<<4, c, console_color); +} +void vputc(char c) +{ + //shift left for fast multiply + if(console_x>=79) + { + console_x=0; + console_y++; + } + if(console_y>=24) + { + console_y--; + vga_scroll(); + } + switch(c){ + case '\n': + case '\r': + console_y++; + console_x=0; + break; + case '\b': + vrawputc(' '); + if(console_x>0) + { + console_x--; + } + vrawputc(' '); + break; + case '\t': + for(int i=0;i<4;i++) + { + console_x++; + vrawputc(' '); + } + default: + vga_putchar(console_x<<3, console_y<<4, c, console_color); + console_x++; + } +} + +void vputs(char *s){ + while(*s!=0){ + vputc(*s); + s++; + } +} + +char vgetc() +{ + char tmp=kbd_GetKey(); + vputc(tmp); + return tmp; +} +int vgetsl(char *buf, int len) +{ + int pos=0; + while(1){ + buf[pos]=kbd_GetKey(); + if(buf[pos]=='\r'){ + buf[pos]='\n'; + } + + vputc(buf[pos]); + if(buf[pos]=='\b'){ + buf[pos]=0; + if(pos>0){ + pos--; + buf[pos--]=0; + } + } + if(pos>len-1){ + break; + } + if(buf[pos]=='\n'){ + buf[pos]=0; + return 1; + } + pos++; + } + return 0; +} + + + +int strlcmp(const char *s1,const char *s2,size_t count){ + int i=0; + while((s1[i]!=0) && (s2[i]!=0)){ + if(s1[i]!=s2[i]){ + return -1; + } + if(i>=count){ + return -1; + } + i++; + + } + if(s1[i]!=s2[i]){ + return -1; + } + return 0; +} +