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

Committer:
earlz
Date:
Mon Sep 17 03:25:23 2012 +0000
Revision:
0:6906dbde03da
Child:
1:eb209f0468de
Made it do something

Who changed what in which revision?

UserRevisionLine numberNew contents of line
earlz 0:6906dbde03da 1 #include "mbed.h"
earlz 0:6906dbde03da 2 #include "vga640x480g.h"
earlz 0:6906dbde03da 3
earlz 0:6906dbde03da 4 #define FONTHEIGHT 16
earlz 0:6906dbde03da 5 #define FONTWIDTH 8
earlz 0:6906dbde03da 6
earlz 0:6906dbde03da 7 int console_x=0, console_y=0;
earlz 0:6906dbde03da 8 int console_color=WHITE; //text color
earlz 0:6906dbde03da 9
earlz 0:6906dbde03da 10 DigitalOut myled(LED1);
earlz 0:6906dbde03da 11
earlz 0:6906dbde03da 12 Serial serial(USBTX,USBRX);
earlz 0:6906dbde03da 13
earlz 0:6906dbde03da 14 void rawputc(char c)
earlz 0:6906dbde03da 15 {
earlz 0:6906dbde03da 16 //fuck that shitv
earlz 0:6906dbde03da 17 if(console_x>80)
earlz 0:6906dbde03da 18 {
earlz 0:6906dbde03da 19 return;
earlz 0:6906dbde03da 20 }
earlz 0:6906dbde03da 21 //shift left for fast multiply
earlz 0:6906dbde03da 22 vga_putchar(console_x<<3, console_y<<4, c, console_color);
earlz 0:6906dbde03da 23 }
earlz 0:6906dbde03da 24 void putc(char c)
earlz 0:6906dbde03da 25 {
earlz 0:6906dbde03da 26 //shift left for fast multiply
earlz 0:6906dbde03da 27 if(console_x>=79)
earlz 0:6906dbde03da 28 {
earlz 0:6906dbde03da 29 console_x=0;
earlz 0:6906dbde03da 30 console_y++;
earlz 0:6906dbde03da 31 }
earlz 0:6906dbde03da 32 switch(c){
earlz 0:6906dbde03da 33 case '\n':
earlz 0:6906dbde03da 34 case '\r':
earlz 0:6906dbde03da 35 console_y++;
earlz 0:6906dbde03da 36 console_x=0;
earlz 0:6906dbde03da 37 break;
earlz 0:6906dbde03da 38 case '\b':
earlz 0:6906dbde03da 39 rawputc(' ');
earlz 0:6906dbde03da 40 if(console_x>0)
earlz 0:6906dbde03da 41 {
earlz 0:6906dbde03da 42 console_x--;
earlz 0:6906dbde03da 43 }
earlz 0:6906dbde03da 44 rawputc(' ');
earlz 0:6906dbde03da 45 break;
earlz 0:6906dbde03da 46 case '\t':
earlz 0:6906dbde03da 47 for(int i=0;i<4;i++)
earlz 0:6906dbde03da 48 {
earlz 0:6906dbde03da 49 console_x++;
earlz 0:6906dbde03da 50 rawputc(' ');
earlz 0:6906dbde03da 51 }
earlz 0:6906dbde03da 52 default:
earlz 0:6906dbde03da 53 vga_putchar(console_x<<3, console_y<<4, c, console_color);
earlz 0:6906dbde03da 54 console_x++;
earlz 0:6906dbde03da 55 }
earlz 0:6906dbde03da 56 }
earlz 0:6906dbde03da 57
earlz 0:6906dbde03da 58 /*void puts(char *s){
earlz 0:6906dbde03da 59 while(*s!=0){
earlz 0:6906dbde03da 60 char c=*s;
earlz 0:6906dbde03da 61 switch(c)
earlz 0:6906dbde03da 62 case '\n':
earlz 0:6906dbde03da 63 case '\r':
earlz 0:6906dbde03da 64 console_x=0;
earlz 0:6906dbde03da 65 vga_putchar(console_x,console_y,*s,console_color);
earlz 0:6906dbde03da 66 }
earlz 0:6906dbde03da 67 */
earlz 0:6906dbde03da 68
earlz 0:6906dbde03da 69 int main() {
earlz 0:6906dbde03da 70 init_vga();
earlz 0:6906dbde03da 71
earlz 0:6906dbde03da 72 serial.baud(115200);
earlz 0:6906dbde03da 73
earlz 0:6906dbde03da 74 vga_cls();
earlz 0:6906dbde03da 75
earlz 0:6906dbde03da 76 while(1)
earlz 0:6906dbde03da 77 {
earlz 0:6906dbde03da 78 if(serial.readable()){
earlz 0:6906dbde03da 79 putc(serial.getc());
earlz 0:6906dbde03da 80 }
earlz 0:6906dbde03da 81 }
earlz 0:6906dbde03da 82 }