Просмотр исходного кода

Add Grid subsystem

The goal is to offload the SMS VDP driver a little bit.
master
Virgil Dupras 3 лет назад
Родитель
Сommit
b97e761942
11 измененных файлов: 63 добавлений и 31 удалений
  1. +0
    -1
      arch/z80/sms/blk/603
  2. +3
    -9
      arch/z80/sms/blk/607
  3. +0
    -8
      arch/z80/sms/blk/608
  4. +5
    -4
      arch/z80/sms/xcomp.fs
  5. +5
    -4
      arch/z80/sms/xcompkbd.fs
  6. +5
    -4
      arch/z80/sms/xcompsdc.fs
  7. +1
    -1
      blk/001
  8. +11
    -0
      blk/401
  9. +10
    -0
      blk/402
  10. +7
    -0
      blk/403
  11. +16
    -0
      doc/protocol.txt

+ 0
- 1
arch/z80/sms/blk/603 Просмотреть файл

@@ -1,4 +1,3 @@
: XYPOS [ VDP_MEM LITN ] ;
CODE _ctl ( a -- sends LSB then MSB )
HL POP, chkPS,
A L LDrr, VDP_CTLPORT OUTiA,


+ 3
- 9
arch/z80/sms/blk/607 Просмотреть файл

@@ -1,9 +1,3 @@
: _cell! ( tilenum pos )
2 * 0x7800 OR _ctl ( tilenum ) _data 1 _zero ;
: _lf
XYPOS @ BEGIN ( pos )
0 ( blank ) SWAP TUCK _cell!
1+ DUP [ VDP_COLS LITN ] MOD NOT UNTIL
[ VDP_COLS VDP_ROWS * LITN ] MOD XYPOS ! ;
: _bs 0 ( blank ) XYPOS @ TUCK _cell! ( pos ) 1-
[ VDP_COLS VDP_ROWS * LITN ] MOD XYPOS ! ;
: CELL! ( tilenum pos )
2 * 0x7800 OR _ctl ( tilenum )
0x5e MOD _data 1 _zero ;

+ 0
- 8
arch/z80/sms/blk/608 Просмотреть файл

@@ -1,10 +1,3 @@
: (emit)
DUP 0x08 = IF DROP _bs EXIT THEN
DUP 0x0d = IF DROP _lf EXIT THEN
0x20 - DUP 0< IF DROP EXIT THEN
DUP 0x5e > IF DROP 0x5e THEN ( tilenum ) XYPOS @ _cell!
XYPOS @ 1+ DUP [ VDP_COLS VDP_ROWS * LITN ]
= IF DROP 0 THEN XYPOS ! ;
: VDP$
9 0 DO _idat I 2 * + @ _ctl LOOP _blank
( palettes )
@@ -12,5 +5,4 @@
( BG ) 1 _zero 0x3f _data 14 _zero
( sprite, inverted colors ) 0x3f _data 15 _zero
0x4000 _ctl 0x5e 0 DO ~FNT I 7 * + _sfont LOOP
0 XYPOS !
( bit 6, enable display, bit 7, ?? ) 0x81c0 _ctl ;

+ 5
- 4
arch/z80/sms/xcomp.fs Просмотреть файл

@@ -4,11 +4,11 @@
0xddca CONSTANT PS_ADDR
RS_ADDR 0x80 - CONSTANT SYSVARS
0xc000 CONSTANT HERESTART
SYSVARS 0x70 + CONSTANT VDP_MEM
0xbf CONSTANT VDP_CTLPORT
0xbe CONSTANT VDP_DATAPORT
32 CONSTANT VDP_COLS
24 CONSTANT VDP_ROWS
SYSVARS 0x70 + CONSTANT GRID_MEM
32 CONSTANT COLS
24 CONSTANT ROWS
SYSVARS 0x72 + CONSTANT CPORT_MEM
0x3f CONSTANT CPORT_CTL
0xdc CONSTANT CPORT_D1
@@ -30,12 +30,13 @@ CURRENT @ XCURRENT !
353 LOAD ( xcomp core low )
CREATE ~FNT CPFNT7x7
603 608 LOADR ( VDP )
402 404 LOADR ( Grid )
625 626 LOADR ( SMS ports )
612 617 LOADR ( PAD )
390 LOAD ( xcomp core high )
(entry) _
( Update LATEST )
PC ORG @ 8 + !
," VDP$ PAD$ (im1) " EOT,
," VDP$ 0 0 AT-XY PAD$ (im1) " EOT,
ORG @ 0x100 - 256 /MOD 2 PC! 2 PC!
H@ 256 /MOD 2 PC! 2 PC!

+ 5
- 4
arch/z80/sms/xcompkbd.fs Просмотреть файл

@@ -5,11 +5,11 @@
0xddca CONSTANT PS_ADDR
RS_ADDR 0x80 - CONSTANT SYSVARS
0xc000 CONSTANT HERESTART
SYSVARS 0x70 + CONSTANT VDP_MEM
0xbf CONSTANT VDP_CTLPORT
0xbe CONSTANT VDP_DATAPORT
32 CONSTANT VDP_COLS
24 CONSTANT VDP_ROWS
SYSVARS 0x70 + CONSTANT GRID_MEM
32 CONSTANT COLS
24 CONSTANT ROWS
SYSVARS 0x72 + CONSTANT CPORT_MEM
0x3f CONSTANT CPORT_CTL
0xdc CONSTANT CPORT_D1
@@ -31,12 +31,13 @@ CURRENT @ XCURRENT !
353 LOAD ( xcomp core low )
CREATE ~FNT CPFNT7x7
603 608 LOADR ( VDP )
402 404 LOADR ( Grid )
625 626 LOADR ( SMS ports )
620 LOAD ( PAD ) : (ps2kc) (ps2kcA) ; 411 414 LOADR
390 LOAD ( xcomp core high )
(entry) _
( Update LATEST )
PC ORG @ 8 + !
," VDP$ PS2$ (im1) " EOT,
," VDP$ 0 0 AT-XY PS2$ (im1) " EOT,
ORG @ 0x100 - 256 /MOD 2 PC! 2 PC!
H@ 256 /MOD 2 PC! 2 PC!

+ 5
- 4
arch/z80/sms/xcompsdc.fs Просмотреть файл

@@ -6,11 +6,11 @@
0xddca CONSTANT PS_ADDR
RS_ADDR 0x80 - CONSTANT SYSVARS
0xc000 CONSTANT HERESTART
SYSVARS 0x70 + CONSTANT VDP_MEM
0xbf CONSTANT VDP_CTLPORT
0xbe CONSTANT VDP_DATAPORT
32 CONSTANT VDP_COLS
24 CONSTANT VDP_ROWS
SYSVARS 0x70 + CONSTANT GRID_MEM
32 CONSTANT COLS
24 CONSTANT ROWS
SYSVARS 0x72 + CONSTANT CPORT_MEM
0x3f CONSTANT CPORT_CTL
0xdc CONSTANT CPORT_D1
@@ -32,6 +32,7 @@ CURRENT @ XCURRENT !
353 LOAD ( xcomp core low )
CREATE ~FNT CPFNT7x7
603 608 LOADR ( VDP )
402 404 LOADR ( Grid )
625 626 LOADR ( SMS ports )
620 LOAD ( PAD ) : (ps2kc) (ps2kcA) ; 411 414 LOADR
622 LOAD ( SPI )
@@ -40,6 +41,6 @@ CREATE ~FNT CPFNT7x7
(entry) _
( Update LATEST )
PC ORG @ 8 + !
," VDP$ PS2$ BLK$ (im1) " EOT,
," VDP$ 0 0 AT-XY PS2$ BLK$ (im1) " EOT,
ORG @ 0x100 - 256 /MOD 2 PC! 2 PC!
H@ 256 /MOD 2 PC! 2 PC!

+ 1
- 1
blk/001 Просмотреть файл

@@ -6,7 +6,7 @@ MASTER INDEX
160 AVR SPI programmer
170-259 unused 260 Cross compilation
280 Z80 boot code 350 Core words
400 AT28 EEPROM driver 401-410 unused
400 AT28 EEPROM driver 401 Grid subsystem
410 PS/2 keyboard subsystem 418 Z80 SPI Relay driver
420 SD Card subsystem 440 8086 boot code
470-519 unused 520 Fonts

+ 11
- 0
blk/401 Просмотреть файл

@@ -0,0 +1,11 @@
Grid subsystem

Given a device driver following the Grid protocol, implement
AT-XY and (emit). (emit) makes the grid behave like a regular
terminal, honoring line feeds and backspaces, wrapping at the
end of a line.

2 bytes of system memory at GRID_MEM are needed for cursor
position.

Load range: B402-B403

+ 10
- 0
blk/402 Просмотреть файл

@@ -0,0 +1,10 @@
: XYPOS [ GRID_MEM LITN ] ;
: AT-XY ( x y -- ) [ ROWS LITN ] * +
[ COLS ROWS * LITN ] MOD XYPOS ! ;
: _lf
XYPOS @ BEGIN ( pos )
0 ( blank ) SWAP TUCK CELL!
1+ DUP [ COLS LITN ] MOD NOT UNTIL
[ COLS ROWS * LITN ] MOD XYPOS ! ;
: _bs 0 ( blank ) XYPOS @ TUCK CELL! ( pos ) 1-
[ COLS ROWS * LITN ] MOD XYPOS ! ;

+ 7
- 0
blk/403 Просмотреть файл

@@ -0,0 +1,7 @@
: (emit)
DUP 0x08 = IF DROP _bs EXIT THEN
DUP 0x0d = IF DROP _lf EXIT THEN
0x20 - DUP 0< IF DROP EXIT THEN
XYPOS @ CELL!
XYPOS @ 1+ DUP [ COLS ROWS * LITN ]
= IF DROP 0 THEN XYPOS ! ;

+ 16
- 0
doc/protocol.txt Просмотреть файл

@@ -37,3 +37,19 @@ previously enabled one.
(spix) n -- n Perform SPI exchange (push a number, get a
number back)
# Grid protocol

A grid is a device that shows as a grid of ASCII characters and
allows random access to it.

COLS -- n Number of columns in the device
ROWS -- n Number of rows in the device
CELL! g pos -- Set glyph at pos

"pos" is a simple number (y * cols) + x. For example, if we
have 40 columns per row, the position (x, y) (12, 10) is 412.

A glyph is ASCII-0x20. If the resulting glyph number exceeds the
number of glyphs in the font, it's up to CELL! to ignore it.

Glyph 0 is always blank.

Загрузка…
Отмена
Сохранить