Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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-19
- Revision:
- 4:b44c27404035
- Parent:
- 1:eb209f0468de
- Child:
- 11:fede136943a9
File content as of revision 4:b44c27404035:
#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;
}