mirror of
https://github.com/JorjBauer/aiie.git
synced 2024-11-26 11:49:19 +00:00
fixups for teensy display
This commit is contained in:
parent
5c701b9418
commit
b7ac5ad2b4
@ -37,7 +37,9 @@ extern const unsigned char interface_glyphs[256];
|
|||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "applevm.h"
|
#include "applevm.h"
|
||||||
|
|
||||||
DMAMEM uint16_t dmaBuffer[240][320]; // 240 rows, 320 columns
|
#define PHYSMAXX 320
|
||||||
|
#define PHYSMAXY 240
|
||||||
|
DMAMEM uint16_t dmaBuffer[PHYSMAXY][PHYSMAXX]; // 240 rows, 320 columns
|
||||||
|
|
||||||
#define RGBto565(r,g,b) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3))
|
#define RGBto565(r,g,b) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3))
|
||||||
#define _565toR(c) ( ((c) & 0xF800) >> 8 )
|
#define _565toR(c) ( ((c) & 0xF800) >> 8 )
|
||||||
@ -140,16 +142,13 @@ void TeensyDisplay::clrScr(uint8_t coloridx)
|
|||||||
} else if (coloridx == c_white) {
|
} else if (coloridx == c_white) {
|
||||||
memset(dmaBuffer, 0xFF, sizeof(dmaBuffer));
|
memset(dmaBuffer, 0xFF, sizeof(dmaBuffer));
|
||||||
} else {
|
} else {
|
||||||
const uint8_t *rgbptr = &loresPixelColors[0][0];
|
uint16_t color16 = loresPixelColors[c_black];
|
||||||
if (coloridx <= 16)
|
if (coloridx < 16)
|
||||||
rgbptr = loresPixelColors[coloridx];
|
color16 = loresPixelColors[coloridx];
|
||||||
uint16_t color16 = ((rgbptr[0] & 0xF8) << 8) |
|
|
||||||
((rgbptr[1] & 0xFC) << 3) |
|
|
||||||
((rgbptr[2] & 0xF8) >> 3);
|
|
||||||
// This could be faster - make one line, then memcpy the line to the other
|
// This could be faster - make one line, then memcpy the line to the other
|
||||||
// lines?
|
// lines?
|
||||||
for (uint8_t y=0; y<sizey; y++) {
|
for (uint8_t y=0; y<PHYSMAXY; y++) {
|
||||||
for (uint16_t x=0; x<sizex; x++) {
|
for (uint16_t x=0; x<PHYSMAXX; x++) {
|
||||||
dmaBuffer[y][x] = color16;
|
dmaBuffer[y][x] = color16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,7 +189,7 @@ void TeensyDisplay::blit()
|
|||||||
static uint32_t nextMessageTime = 0;
|
static uint32_t nextMessageTime = 0;
|
||||||
if (millis() >= nextMessageTime) {
|
if (millis() >= nextMessageTime) {
|
||||||
if (overlayMessage[0]) {
|
if (overlayMessage[0]) {
|
||||||
drawString(M_SELECTDISABLED, 1, 240 - 16 - 12, overlayMessage);
|
drawString(M_SELECTDISABLED, 1, PHYSMAXY - 16 - 12, overlayMessage);
|
||||||
}
|
}
|
||||||
nextMessageTime = millis() + 1000;
|
nextMessageTime = millis() + 1000;
|
||||||
}
|
}
|
||||||
@ -231,9 +230,9 @@ void TeensyDisplay::drawCharacter(uint8_t mode, uint16_t x, uint8_t y, char c)
|
|||||||
// This does not scale when drawing, because drawPixel scales.
|
// This does not scale when drawing, because drawPixel scales.
|
||||||
const unsigned char *ch = asciiToAppleGlyph(c);
|
const unsigned char *ch = asciiToAppleGlyph(c);
|
||||||
for (int8_t y_off = 0; y_off <= ysize; y_off++) {
|
for (int8_t y_off = 0; y_off <= ysize; y_off++) {
|
||||||
if (y + y_off < 240) { // FIXME constant
|
if (y + y_off < PHYSMAXY) {
|
||||||
for (int8_t x_off = 0; x_off <= xsize; x_off++) {
|
for (int8_t x_off = 0; x_off <= xsize; x_off++) {
|
||||||
if (x+x_off < 320) { // FIXME constant
|
if (x+x_off < PHYSMAXX) {
|
||||||
if (*ch & (1 << (x_off))) {
|
if (*ch & (1 << (x_off))) {
|
||||||
dmaBuffer[y+y_off][x+x_off] = onPixel;
|
dmaBuffer[y+y_off][x+x_off] = onPixel;
|
||||||
} else {
|
} else {
|
||||||
@ -252,8 +251,8 @@ void TeensyDisplay::drawString(uint8_t mode, uint16_t x, uint8_t y, const char *
|
|||||||
|
|
||||||
for (int8_t i=0; i<strlen(str); i++) {
|
for (int8_t i=0; i<strlen(str); i++) {
|
||||||
drawCharacter(mode, x, y, str[i]);
|
drawCharacter(mode, x, y, str[i]);
|
||||||
x += xsize; // fixme: any inter-char spacing?
|
x += xsize;
|
||||||
if (x >= 320) break; // FIXME constant
|
if (x >= PHYSMAXX) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,7 +288,6 @@ void TeensyDisplay::cacheDoubleWidePixel(uint16_t x, uint16_t y, uint8_t color)
|
|||||||
void TeensyDisplay::cache2DoubleWidePixels(uint16_t x, uint16_t y,
|
void TeensyDisplay::cache2DoubleWidePixels(uint16_t x, uint16_t y,
|
||||||
uint8_t colorA, uint8_t colorB)
|
uint8_t colorA, uint8_t colorB)
|
||||||
{
|
{
|
||||||
// FIXME: Convert 4-bit colors to 16-bit colors?
|
|
||||||
dmaBuffer[y+VOFFSET][x+ HOFFSET] = loresPixelColors[colorB&0xF];
|
dmaBuffer[y+VOFFSET][x+ HOFFSET] = loresPixelColors[colorB&0xF];
|
||||||
dmaBuffer[y+VOFFSET][x+1+HOFFSET] = loresPixelColors[colorA&0xF];
|
dmaBuffer[y+VOFFSET][x+1+HOFFSET] = loresPixelColors[colorA&0xF];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user