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
main.cpp@0:6906dbde03da, 2012-09-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |