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

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;
+}
+