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