Skip to content

Commit

Permalink
Fix spi commands on python editions.
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobly0 committed Apr 13, 2021
1 parent 6ec5430 commit 7034217
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 36 deletions.
4 changes: 2 additions & 2 deletions font/genfont.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ int main(int argc, char **argv) {
if (c >= U' ' && c <= U'~')
fprintf(source, "%c", (char)c);
else
fprintf(source, "\\x%02X", (uint8_t)c);
fprintf(source, "\\x%02hhX", (unsigned char)c);
fprintf(source, "'\n");
for (int sy = 0, dy = (face->size->metrics.ascender >> 6) - face->glyph->bitmap_top; sy != face->glyph->bitmap.rows; ++sy, ++dy) {
for (int sx = 0, dx = face->glyph->bitmap_left; sx != face->glyph->bitmap.width; ++sx, ++dx) {
Expand All @@ -67,7 +67,7 @@ int main(int argc, char **argv) {
fprintf(source, "\t\t{ ");
for (int y = 0; y != height_bytes; ++y) {
if (y) fprintf(source, ", ");
fprintf(source, "0x%02X", *p++);
fprintf(source, "0x%02hhX", (unsigned char)~*p++);
}
fprintf(source, " },\n");
}
Expand Down
25 changes: 9 additions & 16 deletions src/spi.asm
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
define ti? ti
namespace ti?
pSpiRange := 0D000h
mpSpiRange := 0F80000h
spiValid := 8
pSpiValid := pSpiRange + spiValid
mpSpiValid := mpSpiRange + spiValid
spiStatus := 12
pSpiStatus := pSpiRange + spiStatus
mpSpiStatus := mpSpiRange + spiStatus
spiData := 24
pSpiData := pSpiRange + spiData
mpSpiData := mpSpiRange + spiData
end namespace
private ti.bSpiTxFifoBytes
private ti.bmSpiChipEn
private ti.mpSpiCtrl2
private ti.spiData
private ti.spiStatus
include 'ti84pceg.inc'

section .text
public _spi_write
_spi_write:
pop hl,de
push de,hl
ld hl,ti.mpSpiValid or 1 shl 8
ld hl,ti.mpSpiCtrl2 or ti.bmSpiChipEn shl 8
ld (hl),h
ld a,(de)
ld c,a
Expand All @@ -40,7 +33,7 @@ end virtual
djnz .shift
ld l,ti.spiStatus+1
.wait:
bit 15-8,(hl)
bit ti.bSpiTxFifoBytes+3-8,(hl)
jq nz,.wait
.enter:
dec c
Expand Down
4 changes: 2 additions & 2 deletions src/spi.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ enum {
SPI_CMD_SLEEP_MODE_OFF = 0x11,
SPI_CMD_PARTIAL_MODE_ON = 0x12,
SPI_CMD_PARTIAL_MODE_OFF = 0x13,
SPI_CMD_INVERT_MODE_ON = 0x20,
SPI_CMD_INVERT_MODE_OFF = 0x21,
SPI_CMD_INVERT_MODE_OFF = 0x20,
SPI_CMD_INVERT_MODE_ON = 0x21,
SPI_CMD_DISPLAY_OFF = 0x28,
SPI_CMD_DISPLAY_ON = 0x29,
SPI_CMD_SET_COL_ADDR = 0x2A,
Expand Down
108 changes: 108 additions & 0 deletions src/ti84pceg.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4133,6 +4133,114 @@ namespace ti?
?pBlLevel := 0B024h
?mpBlLevel := 0F60024h

;SPI Ports
;-----------------------------------
?pSpiRange := 0D000h
?mpSpiRange := 0F80000h

?spiCtrl0 := 000h
?pSpiCtrl0 := pSpiRange + spiCtrl0
?mpSpiCtrl0 := mpSpiRange + spiCtrl0
?bSpiClkPolarity := 0
?bmSpiClkPolarity := 1 shl bSpiClkPolarity
?bSpiClkPhase := 1
?bmSpiClkPhase := 1 shl bSpiClkPhase
?bSpiOpMode := 2
?bmSpiSlave := 0 shl bSpiOpMode
?bmSpiMaster := 3 shl bSpiOpMode
?bmSpiSlaveMono := 0 shl bSpiOpMode
?bmSpiSlaveStereo := 1 shl bSpiOpMode
?bmSpiMasterMono := 2 shl bSpiOpMode
?bmSpiMasterStereo := 3 shl bSpiOpMode
?bmSpiOpMode := 3 shl bSpiOpMode
?bSpiFsJustify := 4
?bmSpiFsJustify := 1 shl bSpiFsJustify
?bSpiFsPolarity := 5
?bmSpiFsPolarity := 1 shl bSpiFsPolarity
?bSpiLsb := 6
?bmSpiLsb := 1 shl bSpiLsb
?bSpiLoopback := 7
?bmSpiLoopback := 1 shl bSpiLoopback
?bSpiFsDist := 8
?bmSpiFsDist := 3 shl bSpiFsDist
?bSpiFlash := 11
?bmSpiFlash := 1 shl bSpiFlash
?bSpiFrFmt := 12
?spiSspFrFmt := 0 shl bSpiFrFmt
?spiSpiFrFmt := 1 shl bSpiFrFmt
?spiMicrowaveFrFmt := 2 shl bSpiFrFmt
?spiI2sFrFmt := 3 shl bSpiFrFmt
?bmSpiFrFmt := 3 shl bSpiFrFmt

?spiCtrl1 := 004h
?pSpiCtrl1 := pSpiRange + spiCtrl1
?mpSpiCtrl1 := mpSpiRange + spiCtrl1
?spiClkDiv := spiCtrl1 + 0
?pSpiClkDiv := pSpiRange + spiClkDiv
?mpSpiClkDiv := mpSpiRange + spiClkDiv
?bSpiClkDiv := 0
?bmSpiClkDiv := 0FFFFh shl bSpiClkDiv
?spiDataWidth := spiCtrl1 + 2
?pSpiDataWidth := pSpiRange + spiDataWidth
?mpSpiDataWidth := mpSpiRange + spiDataWidth
?bSpiDataWidth := 0
?bmSpiDataWidth := 01Fh shl bSpiDataWidth
?spiPadWidth := spiCtrl1 + 3
?pSpiPadWidth := pSpiRange + spiPadWidth
?mpSpiPadWidth := mpSpiRange + spiPadWidth
?bSpiPadWidth := 0
?bmSpiPadWidth := 0FFh shl bSpiPadWidth

?spiCtrl2 := 008h
?pSpiCtrl2 := pSpiRange + spiCtrl2
?mpSpiCtrl2 := mpSpiRange + spiCtrl2
?bSpiChipEn := 0
?bmSpiChipEn := 1 shl bSpiChipEn
?bSpiTxDataOutEn := 1
?bmSpiTxDataOutEn := 1 shl bSpiTxDataOutEn
?bSpiRxClr := 2
?bmSpiRxClr := 1 shl bSpiRxClr
?bSpiTxClr := 3
?bmSpiTxClr := 1 shl bSpiTxClr
?bSpiChipReset := 6
?bmSpiChipReset := 1 shl bSpiChipReset
?bSpiRxEn := 7
?bmSpiRxEn := 1 shl bSpiRxEn
?bSpiTxEn := 8
?bmSpiTxEn := 1 shl bSpiTxEn
?bSpiFs := 9
?bmSpiFs := 1 shl bSpiFs
?bSpiCs := 10
?bmSpiCs := 3 shl bSpiCs

?spiStatus := 00Ch
?pSpiStatus := pSpiRange + spiStatus
?mpSpiStatus := mpSpiRange + spiStatus
?bSpiRxFifoFull := 0
?bmSpiRxFifoFull := 1 shl bSpiRxFifoFull
?bSpiTxFifoNotFull := 1
?bmSpiTxFifoNotFull := 1 shl bSpiTxFifoNotFull
?bSpiChipBusy := 2
?bmSpiChipBusy := 1 shl bSpiChipBusy
?bSpiRxFifoBytes := 4
?bmSpiRxFifoBytes := 01Fh shl bSpiRxFifoBytes
?bSpiTxFifoBytes := 12
?bmSpiTxFifoBytes := 01Fh shl bSpiTxFifoBytes

?spiIntCtrl := 010h
?pSpiIntCtrl := pSpiRange + spiIntCtrl
?mpSpiIntCtrl := mpSpiRange + spiIntCtrl

?spiIntStatus := 014h
?pSpiIntStatus := pSpiRange + spiIntStatus
?mpSpiIntStatus := mpSpiRange + spiIntStatus

?spiData := 018h
?pSpiData := pSpiRange + spiData
?mpSpiData := mpSpiRange + spiData
?bSpiData := 0
?bmSpiData := 0FFFFFFFFh

;Character Font Equates
;-------------------------------------
?LrecurN := 001h
Expand Down
25 changes: 9 additions & 16 deletions src/ui.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include "ui.h"

#include "font.h"
#include "spi.h"

Expand All @@ -13,34 +15,25 @@ static uint8_t row, col, swap;

void ui_Init(void) {
os_DisableAPD();
spi(DISPLAY_OFF);
ui_Cleanup();
spi(SET_COL_ADDR, spi16(0), spi16(LCD_HEIGHT - 1));
spi(SET_PAGE_ADDR, spi16(0), spi16(LCD_WIDTH - 1));
spi(MEM_ACC_CTL, 0x2C);
*(volatile uint8_t *)&lcd_Control = 0x25;
*(volatile uint8_t *volatile *)&lcd_UpBase = &buffer(0)[0][0];
for (uint8_t i = 0; i <= 15; ++i) {
uint8_t component = 63 * (i ^ 15) / 15;
uint8_t component = 63 * i / 15;
lcd_Palette[i] =
(component & 1) << 15 |
(component >> 1) << 10 |
(component >> 1) << 5 |
(component >> 1) << 0;
}
memset(buffer(0), 0, sizeof(buffer(0)));
spi(DISPLAY_ON);
*(volatile uint8_t *)&lcd_Control = 0x25;
*(volatile uint8_t *volatile *)&lcd_UpBase = &buffer(0)[0][0];
}

void ui_Cleanup(void) {
spi(DISPLAY_OFF);
delay(1000 / 64);
*(volatile uint16_t *volatile *)&lcd_UpBase = lcd_Ram;
*(volatile uint8_t *)&lcd_Control = 0x2D;
spi(SET_COL_ADDR, spi16(0), spi16(LCD_WIDTH - 1));
spi(SET_PAGE_ADDR, spi16(0), spi16(LCD_HEIGHT - 1));
spi(MEM_ACC_CTL, 0x08);
memset((uint16_t *)lcd_Ram, 0xFF, LCD_SIZE);
spi(DISPLAY_ON);
boot_ClearVRAM();
boot_TurnOn();
}

void outchar(char c) {
Expand All @@ -65,7 +58,7 @@ void outchar(char c) {
memcpy(&buffer(0)[x][0], &buffer(1)[x][0],
FONT_HEIGHT_BYTES * STATIC_ROWS);
memset(&buffer(0)[x][((LCD_HEIGHT / FONT_HEIGHT - 1) *
FONT_HEIGHT) >> 1], 0, FONT_HEIGHT_BYTES);
FONT_HEIGHT) >> 1], 0xFF, FONT_HEIGHT_BYTES);
}
*(volatile uint8_t *volatile *)&lcd_UpBase = &buffer(0)[0][0];
lcd_IntAcknowledge = 1 << 2;
Expand Down

0 comments on commit 7034217

Please sign in to comment.