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