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:
- 1:eb209f0468de
- Child:
- 4:b44c27404035
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textio.cpp Mon Sep 17 04:41:37 2012 +0000 @@ -0,0 +1,129 @@ +#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() +{ + while(!serial.readable()){ + return serial.getc(); + } + return '!'; //unreachable +} +int vgetsl(char *buf, int len) +{ + int pos=0; + while(1){ + if(serial.readable()){ + buf[pos]=serial.getc(); + 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; +} +