From 114e753b64b2ea3f1cc5c92c88f15493976de469 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Fri, 8 May 2020 06:50:34 -0400 Subject: [PATCH] ti84: WIP --- blk/555 | 17 +---------------- blk/556 | 25 ++++++++++++++----------- blk/557 | 16 +++++++++++++--- blk/558 | 17 ++++++++++++++--- recipes/ti84/Makefile | 14 +++++++------- recipes/ti84/xcomp.fs | 20 ++++++++++++++++++++ 6 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 recipes/ti84/xcomp.fs diff --git a/blk/555 b/blk/555 index 6415987..2a492bf 100644 --- a/blk/555 +++ b/blk/555 @@ -1,16 +1 @@ -( Required config: TI_MEM ) -: TI_MEM+ [ TI_MEM LITN ] + ; -: LCD_PORT_CMD 0x10 ; -: LCD_PORT_DATA 0x11 ; -: FNT_WIDTH 3 ; -: FNT_HEIGHT 5 ; -( Current Y position on the LCD, that is, where we're going to - spit our next glyph. ) -: LCD_CURY 0 TI_MEM+ ; -: LCD_CURX 1 TI_MEM+ ; -( two pixel buffers that are 8 pixels wide (1b) by FNT_HEIGHT - pixels high. This is where we compose our resulting pixels - blocks when spitting a glyph. ) -: LCD_BUF 2 TI_MEM+ ; - -1 2 LOADR+ +1 3 LOADR+ diff --git a/blk/556 b/blk/556 index 028716e..cfb2ce1 100644 --- a/blk/556 +++ b/blk/556 @@ -1,11 +1,14 @@ -: _wait ( Wait until the lcd is ready to receive a command ) - ( When 7th bit is cleared, we can send a new command ) - BEGIN LCD_PORT_CMD PC@ 0x80 AND NOT UNTIL ; -: _cmd LCD_PORT_CMD PC! _wait ; -: _data! LCD_PORT_DATA PC! _wait ; -: _data@ LCD_PORT_DATA PC@ _wait ; -: LCDOFF 0x02 ( CMD_DISABLE ) _cmd ; -: _col! ( col -- ) - 0x20 ( CMD_COL ) + _cmd ; -: _row! ( row -- ) - 0x80 ( CMD_ROW ) + _cmd ; +( Required config: TI_MEM ) +: TI_MEM+ [ TI_MEM LITN ] @ + ; +: LCD_PORT_CMD 0x10 ; +: LCD_PORT_DATA 0x11 ; +: FNTW 3 ; +: FNTH 5 ; +( Current Y position on the LCD, that is, where we're going to + spit our next glyph. ) +: LCD_CURY 0 TI_MEM+ ; +: LCD_CURX 1 TI_MEM+ ; +( two pixel buffers that are 8 pixels wide (1b) by FNT_HEIGHT + pixels high. This is where we compose our resulting pixels + blocks when spitting a glyph. ) +: LCD_BUF 2 TI_MEM+ ; diff --git a/blk/557 b/blk/557 index 743d2b7..df01a7a 100644 --- a/blk/557 +++ b/blk/557 @@ -1,3 +1,13 @@ -( Load a "glyph line" from buffer, left part being in MSB and - right part being in LSB. ) -: _gl@ + +: _wait ( Wait until the lcd is ready to receive a command ) + ( When 7th bit is cleared, we can send a new command ) + BEGIN LCD_PORT_CMD PC@ 0x80 AND NOT UNTIL ; +: _cmd LCD_PORT_CMD PC! _wait ; +: _data! LCD_PORT_DATA PC! _wait ; +: _data@ LCD_PORT_DATA PC@ _wait ; +: LCDOFF 0x02 ( CMD_DISABLE ) _cmd ; +: _col! ( col -- ) + 0x20 ( CMD_COL ) + _cmd ; +: _row! ( row -- ) + 0x80 ( CMD_ROW ) + _cmd ; +: LCD$ H@ TI_MEM ! FNTH 2 * 2+ ALLOT ; diff --git a/blk/558 b/blk/558 index 2af8a16..930cb68 100644 --- a/blk/558 +++ b/blk/558 @@ -1,5 +1,16 @@ : _glyph> ( a -- ) LCD_CURY C@ _row! LCD_CURX C@ 8 /MOD _col! ( a coff ) - 0x05 ( XINC ) _cmd _data@ DROP - FNT_HEIGHT 0 DO LOOP - + 0x05 ( XINC ) _cmd _data@ DROP SWAP + FNTH 0 DO ( coff a ) + C@+ 2 PICK 8 -^ LSHIFT + _data@ 8 LSHIFT OR + LCD_BUF I + 2DUP FNTH + C! + SWAP 8 RSHIFT DUP 42 PC! SWAP C! + LOOP 2DROP + LCD_CURY C@ _row! + FNTH 0 DO LCD_BUF I + C@ _data! LOOP + LCD_CURY C@ _row! LCD_CURX C@ 8 / 1+ _col! + FNTH 0 DO LCD_BUF FNTH + I + C@ _data! LOOP + LCD_CURX C@ FNTW + 1+ + DUP [ 96 FNTW - LITN ] > IF DROP 0 THEN + LCD_CURX C! ; diff --git a/recipes/ti84/Makefile b/recipes/ti84/Makefile index 5808a62..a63b174 100644 --- a/recipes/ti84/Makefile +++ b/recipes/ti84/Makefile @@ -1,15 +1,15 @@ -TARGET = os.bin +TARGET = stage1.bin BASEDIR = ../.. -ZASM = $(BASEDIR)/emul/zasm/zasm -KERNEL = $(BASEDIR)/kernel -APPS = $(BASEDIR)/apps +FDIR = $(BASEDIR)/forth +EDIR = $(BASEDIR)/emul +STAGE2 = $(EDIR)/stage2 EMUL = $(BASEDIR)/emul/hw/ti/ti84 MKTIUPGRADE = mktiupgrade .PHONY: all -all: $(TARGET) -$(TARGET): glue.asm - $(ZASM) $(KERNEL) $(APPS) < glue.asm > $@ +all: $(TARGET) +$(TARGET): xcomp.fs $(STAGE2) + cat xcomp.fs | $(STAGE2) > $@ $(EMUL): $(MAKE) -C ${@:%/ti84=%} diff --git a/recipes/ti84/xcomp.fs b/recipes/ti84/xcomp.fs new file mode 100644 index 0000000..83eadb1 --- /dev/null +++ b/recipes/ti84/xcomp.fs @@ -0,0 +1,20 @@ +0x8000 CONSTANT RAMSTART +0xb000 CONSTANT RS_ADDR +RAMSTART 0x70 + CONSTANT TI_MEM +212 LOAD ( z80 assembler ) +262 LOAD ( xcomp ) +: CODE XCODE ; +: IMMEDIATE XIMM ; +: (entry) (xentry) ; +: : [ ' X: , ] ; + +CURRENT @ XCURRENT ! + +282 LOAD ( boot.z80 ) +393 LOAD ( icore ) +(entry) _ +( Update LATEST ) +PC ORG @ 8 + ! +," 42 42 PC! BYE " +ORG @ 256 /MOD 2 PC! 2 PC! +H@ 256 /MOD 2 PC! 2 PC!