mirror of
https://github.com/jscrane/Apple1.git
synced 2025-02-16 17:30:28 +00:00
use smaller font; add shiftmap
This commit is contained in:
parent
6aa496cbac
commit
0d20af47d6
103
TinyFont.h
Normal file
103
TinyFont.h
Normal file
@ -0,0 +1,103 @@
|
||||
// TinyFont.c
|
||||
// Font Size : 8x8
|
||||
// Memory usage : 764 bytes
|
||||
// # characters : 95
|
||||
|
||||
const unsigned char TinyFont[764]={
|
||||
0x08,0x08,0x20,0x5F,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <Space>
|
||||
0x18,0x3C,0x3C,0x18,0x18,0x00,0x18,0x00, // !
|
||||
0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00, // "
|
||||
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
|
||||
0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
|
||||
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00, // %
|
||||
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00, // &
|
||||
0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00, // '
|
||||
0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
|
||||
0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
|
||||
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
|
||||
0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, // +
|
||||
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
|
||||
0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
|
||||
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
|
||||
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00, // /
|
||||
0x7C,0xC6,0xCE,0xD6,0xE6,0xC6,0x7C,0x00, // 0
|
||||
0x18,0x38,0x18,0x18,0x18,0x18,0x7E,0x00, // 1
|
||||
0x7C,0xC6,0x06,0x1C,0x30,0x66,0xFE,0x00, // 2
|
||||
0x7C,0xC6,0x06,0x3C,0x06,0xC6,0x7C,0x00, // 3
|
||||
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00, // 4
|
||||
0xFE,0xC0,0xC0,0xFC,0x06,0xC6,0x7C,0x00, // 5
|
||||
0x38,0x60,0xC0,0xFC,0xC6,0xC6,0x7C,0x00, // 6
|
||||
0xFE,0xC6,0x0C,0x18,0x30,0x30,0x30,0x00, // 7
|
||||
0x7C,0xC6,0xC6,0x7C,0xC6,0xC6,0x7C,0x00, // 8
|
||||
0x7C,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00, // 9
|
||||
0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
|
||||
0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
|
||||
0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00, // <
|
||||
0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
|
||||
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00, // >
|
||||
0x7C,0xC6,0x0C,0x18,0x18,0x00,0x18,0x00, // ?
|
||||
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00, // @
|
||||
0x38,0x6C,0xC6,0xFE,0xC6,0xC6,0xC6,0x00, // A
|
||||
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00, // B
|
||||
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00, // C
|
||||
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00, // D
|
||||
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00, // E
|
||||
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00, // F
|
||||
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3A,0x00, // G
|
||||
0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00, // H
|
||||
0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
|
||||
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00, // J
|
||||
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00, // K
|
||||
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00, // L
|
||||
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00, // M
|
||||
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00, // N
|
||||
0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, // O
|
||||
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00, // P
|
||||
0x7C,0xC6,0xC6,0xC6,0xC6,0xCE,0x7C,0x0E, // Q
|
||||
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00, // R
|
||||
0x7C,0xC6,0x60,0x38,0x0C,0xC6,0x7C,0x00, // S
|
||||
0x7E,0x7E,0x5A,0x18,0x18,0x18,0x3C,0x00, // T
|
||||
0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, // U
|
||||
0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x00, // V
|
||||
0xC6,0xC6,0xC6,0xD6,0xD6,0xFE,0x6C,0x00, // W
|
||||
0xC6,0xC6,0x6C,0x38,0x6C,0xC6,0xC6,0x00, // X
|
||||
0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
|
||||
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00, // Z
|
||||
0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
|
||||
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00, // <Backslash>
|
||||
0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
|
||||
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00, // ^
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
|
||||
0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // '
|
||||
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00, // a
|
||||
0xE0,0x60,0x7C,0x66,0x66,0x66,0xDC,0x00, // b
|
||||
0x00,0x00,0x7C,0xC6,0xC0,0xC6,0x7C,0x00, // c
|
||||
0x1C,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00, // d
|
||||
0x00,0x00,0x7C,0xC6,0xFE,0xC0,0x7C,0x00, // e
|
||||
0x3C,0x66,0x60,0xF8,0x60,0x60,0xF0,0x00, // f
|
||||
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8, // g
|
||||
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00, // h
|
||||
0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
|
||||
0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
|
||||
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00, // k
|
||||
0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
|
||||
0x00,0x00,0xEC,0xFE,0xD6,0xD6,0xD6,0x00, // m
|
||||
0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x00, // n
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0x00, // o
|
||||
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0, // p
|
||||
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E, // q
|
||||
0x00,0x00,0xDC,0x76,0x60,0x60,0xF0,0x00, // r
|
||||
0x00,0x00,0x7E,0xC0,0x7C,0x06,0xFC,0x00, // s
|
||||
0x30,0x30,0xFC,0x30,0x30,0x36,0x1C,0x00, // t
|
||||
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00, // u
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0x6C,0x38,0x00, // v
|
||||
0x00,0x00,0xC6,0xD6,0xD6,0xFE,0x6C,0x00, // w
|
||||
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00, // x
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0x7E,0x06,0xFC, // y
|
||||
0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
|
||||
0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, // |
|
||||
0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
|
||||
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00, // ~
|
||||
};
|
97
io.cpp
97
io.cpp
@ -1,6 +1,7 @@
|
||||
#include <UTFT.h>
|
||||
#include <memory.h>
|
||||
#include <utftdisplay.h>
|
||||
#include <keyboard.h>
|
||||
|
||||
#include "io.h"
|
||||
#include "config.h"
|
||||
@ -12,19 +13,27 @@ static unsigned kbd_int, dsp_out;
|
||||
#define ROWS 24
|
||||
#define COLS 40
|
||||
static unsigned r, c;
|
||||
static char screen[ROWS * COLS];
|
||||
static char screen[ROWS][COLS];
|
||||
|
||||
#include "TinyFont.h"
|
||||
|
||||
void io::reset() {
|
||||
utft.setFont((uint8_t *)TinyFont);
|
||||
UTFTDisplay::begin(TFT_BG, TFT_FG);
|
||||
clear();
|
||||
|
||||
r = c = 0;
|
||||
for (int j = 0; j < ROWS; j++)
|
||||
for (int i = 0; i < COLS; i++)
|
||||
screen[j][i] = ' ';
|
||||
|
||||
// PIA state
|
||||
dsp_cr = kbd_cr = 0;
|
||||
kbd_int = dsp_out = 0;
|
||||
r = c = 0;
|
||||
}
|
||||
|
||||
// need ascii map for scan-codes
|
||||
static const byte scanmap[] {
|
||||
// ascii map for scan-codes
|
||||
static const byte scanmap[] = {
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x00
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0xff, // 0x08
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x51, 0x31, 0xff, // 0x10
|
||||
@ -37,42 +46,73 @@ static const byte scanmap[] {
|
||||
0xff, 0x2e, 0x2f, 0x4c, 0x3b, 0x50, 0x2d, 0xff, // 0x48
|
||||
0xff, 0xff, 0x27, 0xff, 0x5b, 0x3d, 0xff, 0xff, // 0x50
|
||||
0xff, 0xff, 0x0d, 0x5d, 0xff, 0x23, 0xff, 0xff, // 0x58
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, // 0x60
|
||||
0xff, 0x5c, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, // 0x60
|
||||
0xff, 0x31, 0xff, 0x34, 0x37, 0xff, 0xff, 0xff, // 0x68
|
||||
0x30, 0xff, 0x32, 0x35, 0x36, 0x38, 0xff, 0xff, // 0x70
|
||||
0xff, 0x2b, 0x33, 0x2d, 0x2a, 0x39, 0xff, 0xff, // 0x78
|
||||
};
|
||||
|
||||
void io::down(unsigned scan) {
|
||||
static const byte shiftmap[] = {
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x00
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x08
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, // 0x10
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x22, 0xff, // 0x18
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x23, 0xff, // 0x20
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x25, 0xff, // 0x28
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xff, // 0x30
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x2a, 0xff, // 0x38
|
||||
0xff, 0x3c, 0xff, 0xff, 0xff, 0x29, 0x28, 0xff, // 0x40
|
||||
0xff, 0x3e, 0x3f, 0xff, 0x3a, 0xff, 0x5f, 0xff, // 0x48
|
||||
0xff, 0xff, 0x40, 0xff, 0x7b, 0x2b, 0xff, 0xff, // 0x50
|
||||
0xff, 0xff, 0xff, 0x7d, 0xff, 0x7e, 0xff, 0xff, // 0x58
|
||||
0xff, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x60
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x68
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x70
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x78
|
||||
};
|
||||
|
||||
void io::down(byte scan) {
|
||||
kbd = 0;
|
||||
if (isshift(scan))
|
||||
_shift = true;
|
||||
}
|
||||
|
||||
void io::up(unsigned scan) {
|
||||
kbd = scanmap[scan] + 0x80;
|
||||
void io::up(byte scan) {
|
||||
if (isshift(scan)) {
|
||||
_shift = false;
|
||||
return;
|
||||
}
|
||||
byte m = _shift? shiftmap[scan]: scanmap[scan];
|
||||
kbd = m + 0x80;
|
||||
kbd_cr = 0xa7;
|
||||
}
|
||||
|
||||
void io::display(byte b) {
|
||||
int x = c * _cx, y = r * _cy;
|
||||
char ch = (char)b;
|
||||
void io::draw(char ch, int i, int j) {
|
||||
if (screen[j][i] != ch) {
|
||||
screen[j][i] = ch;
|
||||
utft.print(&ch, i*_cx, j*_cy);
|
||||
}
|
||||
}
|
||||
|
||||
switch(b) {
|
||||
case 0x5f:
|
||||
if (--c < 0) {
|
||||
void io::display(byte b) {
|
||||
char ch = (char)b;
|
||||
switch(ch) {
|
||||
case 0x7f:
|
||||
if (c-- == 0) {
|
||||
r--;
|
||||
c = COLS-1;
|
||||
}
|
||||
ch = ' ';
|
||||
utft.print(&ch, x, y);
|
||||
draw(' ', c, r);
|
||||
break;
|
||||
case 0x0a:
|
||||
// case 0x0a:
|
||||
case 0x0d:
|
||||
c = 0;
|
||||
r++;
|
||||
break;
|
||||
default:
|
||||
if (ch >= 0x20 && ch != 0x7f) {
|
||||
utft.print(&ch, x, y);
|
||||
// if (ch >= 0x20 && ch != 0x7f) {
|
||||
if (ch >= 0x20) {
|
||||
draw(ch, c, r);
|
||||
if (++c == COLS) {
|
||||
c = 0;
|
||||
r++;
|
||||
@ -83,21 +123,12 @@ void io::display(byte b) {
|
||||
// scroll
|
||||
r--;
|
||||
for (int j = 0; j < (ROWS-1); j++)
|
||||
for (int i = 0; i < COLS; i++) {
|
||||
int o = j*COLS + i, p = o + COLS;
|
||||
if (screen[p] != screen[o]) {
|
||||
screen[p] = screen[o];
|
||||
utft.print(&screen[p], i*_cx, j*_cy);
|
||||
}
|
||||
}
|
||||
for (int i = COLS; i-- > 0; ) {
|
||||
int o = ROWS*COLS - i;
|
||||
if (screen[o] != ' ') {
|
||||
screen[o] = ' ';
|
||||
utft.print(&screen[o], i*_cx, (ROWS-1)*_cy);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < COLS; i++)
|
||||
draw(screen[j+1][i], i, j);
|
||||
for (int i = 0; i < COLS; i++)
|
||||
draw(' ', i, ROWS-1);
|
||||
}
|
||||
// FIXME: draw cursor?
|
||||
}
|
||||
|
||||
void io::operator=(byte b) {
|
||||
|
10
io.h
10
io.h
@ -1,23 +1,25 @@
|
||||
#ifndef _IO_H
|
||||
#define _IO_H
|
||||
|
||||
class io: public UTFTDisplay {
|
||||
class io: public UTFTDisplay, public Keyboard {
|
||||
public:
|
||||
io(): UTFTDisplay(256) {}
|
||||
|
||||
void operator=(byte);
|
||||
operator byte();
|
||||
|
||||
void reset();
|
||||
void down(unsigned scan);
|
||||
void up(unsigned scan);
|
||||
virtual void reset();
|
||||
virtual void down(byte scan);
|
||||
virtual void up(byte scan);
|
||||
|
||||
void checkpoint(Stream &);
|
||||
void restore(Stream &);
|
||||
|
||||
private:
|
||||
void display(byte);
|
||||
void draw(char, int, int);
|
||||
|
||||
bool _shift;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user