Ver código fonte

ti-84+: wip

I need RSHIFT and LSHIFT first...
pull/102/head
Virgil Dupras 4 anos atrás
pai
commit
4e98ef11bd
10 arquivos alterados com 93 adições e 1 exclusões
  1. +1
    -1
      blk/001
  2. +6
    -0
      blk/550
  3. +16
    -0
      blk/551
  4. +16
    -0
      blk/552
  5. +16
    -0
      blk/553
  6. +3
    -0
      blk/554
  7. +16
    -0
      blk/555
  8. +11
    -0
      blk/556
  9. +3
    -0
      blk/557
  10. +5
    -0
      blk/558

+ 1
- 1
blk/001 Ver arquivo

@@ -9,7 +9,7 @@ MASTER INDEX
370 SD Card driver 390 Inner core
420 Core words 480 AT28 Driver
490 TRS-80 Recipe 520 Fonts
550 TI-84+ Recipe





+ 6
- 0
blk/550 Ver arquivo

@@ -0,0 +1,6 @@
TI-84+ Recipe

Support code for the TI-84+ recipe. Contains drivers for the
keyboard and LCD.

551 LCD

+ 16
- 0
blk/551 Ver arquivo

@@ -0,0 +1,16 @@
TI-84+ LCD driver

Implement (emit) on TI-84+ (for now)'s LCD screen. Load with
"555 LOAD".

The screen is 96x64 pixels. The 64 rows are addressed directly
with CMD_ROW but columns are addressed in chunks of 6 or 8 bits
(there are two modes).

In 6-bit mode, there are 16 visible columns. In 8-bit mode,
there are 12.

Note that "X-increment" and "Y-increment" work in the opposite
way than what most people expect. Y moves left and right, X
moves up and down.
(cont.)

+ 16
- 0
blk/552 Ver arquivo

@@ -0,0 +1,16 @@
# Z-Offset

This LCD has a "Z-Offset" parameter, allowing to offset rows on
the screen however we wish. This is handy because it allows us
to scroll more efficiently. Instead of having to copy the LCD
ram around at each linefeed (or instead of having to maintain
an in-memory buffer), we can use this feature.

The Z-Offet goes upwards, with wrapping. For example, if we
have an 8 pixels high line at row 0 and if our offset is 8,
that line will go up 8 pixels, wrapping itself to the bottom of
the screen.

The principle is this: The active line is always the bottom
one. Therefore, when active row is 0, Z is FNT_HEIGHT+1, when
row is 1, Z is (FNT_HEIGHT+1)*2, When row is 8, Z is 0. (cont.)

+ 16
- 0
blk/553 Ver arquivo

@@ -0,0 +1,16 @@
# 6/8 bit columns and smaller fonts

If your glyphs, including padding, are 6 or 8 pixels wide,
you're in luck because pushing them to the LCD can be done in a
very efficient manner. Unfortunately, this makes the LCD
unsuitable for a Collapse OS shell: 6 pixels per glyph gives us
only 16 characters per line, which is hardly usable.

This is why we have this buffering system. How it works is that
we're always in 8-bit mode and we hold the whole area (8 pixels
wide by FNT_HEIGHT high) in memory. When we want to put a glyph
to screen, we first read the contents of that area, then add
our new glyph, offsetted and masked, to that buffer, then push
the buffer back to the LCD. If the glyph is split, move to the
next area and finish the job.
(cont.)

+ 3
- 0
blk/554 Ver arquivo

@@ -0,0 +1,3 @@
That being said, it's important to define clearly what CURX and
CURY variable mean. Those variable keep track of the current
position *in pixels*, in both axes.

+ 16
- 0
blk/555 Ver arquivo

@@ -0,0 +1,16 @@
( 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+

+ 11
- 0
blk/556 Ver arquivo

@@ -0,0 +1,11 @@
: _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 ;

+ 3
- 0
blk/557 Ver arquivo

@@ -0,0 +1,3 @@
( Load a "glyph line" from buffer, left part being in MSB and
right part being in LSB. )
: _gl@

+ 5
- 0
blk/558 Ver arquivo

@@ -0,0 +1,5 @@
: _glyph> ( a -- )
LCD_CURY C@ _row! LCD_CURX C@ 8 /MOD _col! ( a coff )
0x05 ( XINC ) _cmd _data@ DROP
FNT_HEIGHT 0 DO LOOP


Carregando…
Cancelar
Salvar