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
textio.cpp
- Committer:
- earlz
- Date:
- 2012-09-17
- Revision:
- 1:eb209f0468de
- Child:
- 4:b44c27404035
File content as of revision 1:eb209f0468de:
#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; }