Pārlūkot izejas kodu

grid: change the meaning of CELL!

Replace the "g" arg (glyph) with "c" (character). The reason why "g"
was used was to save a "0x20 -" operation at all CELL! implementations,
but this came with too big a drawback: it made CELL! hardly usable
outside of the Grid subsystem, mostly because the user of CELL! would
often have to do "0x20 -".

For example, I want the SMS's Pad driver to use CELL! directly instead
of having to do EMIT+XYPOS-messing-around. I would have had to do a
"0x20 -" there.
master
Virgil Dupras pirms 3 gadiem
vecāks
revīzija
b1e162b8a3
7 mainītis faili ar 19 papildinājumiem un 19 dzēšanām
  1. +1
    -1
      arch/z80/sms/Makefile
  2. +3
    -3
      arch/z80/sms/blk.fs
  3. +1
    -1
      arch/z80/ti84/Makefile
  4. +3
    -3
      arch/z80/ti84/blk.fs
  5. +5
    -5
      blk.fs
  6. +1
    -1
      cvm/forth.fs
  7. +5
    -5
      doc/protocol.txt

+ 1
- 1
arch/z80/sms/Makefile Parādīt failu

@@ -15,7 +15,7 @@ $(SMSROM):
$(BLKPACK):
$(MAKE) -C ../tools

blkfs: $(BLKPACK)
blkfs: $(BLKPACK) $(BASE)/blk.fs blk.fs
cat $(BASE)/blk.fs blk.fs | $(BLKPACK) > $@

$(STAGE):


+ 3
- 3
arch/z80/sms/blk.fs Parādīt failu

@@ -27,9 +27,9 @@ always stay zero. )
: _sfont ( a -- Send font to VDP )
7 0 DO C@+ _data 3 _zero LOOP DROP
( blank row ) 4 _zero ;
: CELL! ( tilenum pos )
2 * 0x7800 OR _ctl ( tilenum )
0x5e MOD _data 1 _zero ;
: CELL! ( c pos )
2 * 0x7800 OR _ctl ( c )
0x20 - ( glyph ) 0x5e MOD _data 0 _data ;
( ----- 604 )
: VDP$
9 0 DO _idat I 2 * + @ _ctl LOOP _blank


+ 1
- 1
arch/z80/ti84/Makefile Parādīt failu

@@ -15,7 +15,7 @@ $(TARGET): xcomp.fs $(STAGE) blkfs
$(BLKPACK):
$(MAKE) -C ../tools

blkfs: $(BLKPACK)
blkfs: $(BLKPACK) $(BASE)/blk.fs blk.fs
cat $(BASE)/blk.fs blk.fs | $(BLKPACK) > $@

$(STAGE):


+ 3
- 3
arch/z80/ti84/blk.fs Parādīt failu

@@ -110,9 +110,9 @@ CODE _wait
( ----- 609 )
: _atrow! ( pos -- ) COLS / FNTH 1+ * _row! ;
: _tocol ( pos -- col off ) COLS MOD FNTW 1+ * 8 /MOD ;
: CELL! ( g pos -- )
DUP _atrow! DUP _tocol _col! ROT ( pos coff g )
FNTH * ~FNT + ( pos coff a )
: CELL! ( c pos -- )
DUP _atrow! DUP _tocol _col! ROT ( pos coff c )
0x20 - FNTH * ~FNT + ( pos coff a )
_xinc _data@ DROP
FNTH 0 DO ( pos coff a )
C@+ 2 PICK 8 -^ LSHIFT


+ 5
- 5
blk.fs Parādīt failu

@@ -2218,7 +2218,7 @@ Load range: B402-B403
: XYPOS! COLS LINES * MOD DUP CURSOR! XYPOS ! ;
: AT-XY ( x y -- ) COLS * + XYPOS! ;
'? NEWLN NIP NOT [IF]
: NEWLN ( ln -- ) COLS * DUP COLS + SWAP DO 0 I CELL! LOOP ;
: NEWLN ( ln -- ) COLS * DUP COLS + SWAP DO 0x20 I CELL! LOOP ;
[THEN]
: _lf XYMODE C@ IF EXIT THEN
XYPOS @ COLS / 1+ LINES MOD DUP NEWLN
@@ -2228,7 +2228,7 @@ Load range: B402-B403
: (emit)
DUP 0x08 = IF DROP _bs EXIT THEN
DUP 0x0d = IF DROP _lf EXIT THEN
0x20 - DUP 0< IF DROP EXIT THEN
DUP 0x20 < IF DROP EXIT THEN
XYPOS @ CELL!
XYPOS @ 1+ DUP COLS MOD IF XYPOS! ELSE _lf THEN ;
: GRID$ 0 XYPOS! 0 XYMODE C! ;
@@ -2795,15 +2795,15 @@ them. We insert a blank one at the end of those 7. )
: _sfont ( a -- Send font to TMS )
7 0 DO C@+ _data LOOP DROP
( blank row ) 0 _data ;
: CELL! ( tilenum pos )
: CELL! ( c pos )
0x7800 OR _ctl ( tilenum )
0x5e MOD _data ;
0x20 - ( glyph ) 0x5e MOD _data ;
: COLS 40 ; : LINES 24 ;
: TMS$
0x8100 _ctl ( blank screen ) _blank
0x4000 _ctl 0x5e 0 DO ~FNT I 7 * + _sfont LOOP
0x820e _ctl ( name table 0x3800 )
0x8400 _ctl ( patter table 0x0000 )
0x8400 _ctl ( pattern table 0x0000 )
0x87f0 _ctl ( colors 0 and 1 )
0x8000 _ctl 0x81d0 _ctl ( text mode, display on ) ;
( ----- 520 )


+ 1
- 1
cvm/forth.fs Parādīt failu

@@ -1,6 +1,6 @@
: COLS 80 ; : LINES 32 ;
: CURSOR! ( pos -- ) COLS /MOD 6 PC! ( y ) 5 PC! ( x ) ;
: CELL! ( g pos -- ) CURSOR! 0x20 + 0 PC! ;
: CELL! ( c pos -- ) CURSOR! 0 PC! ;
: NEWLN ( ln -- ) DROP 0xa 0 PC! ;

SYSVARS 0x70 + CONSTANT GRID_MEM


+ 5
- 5
doc/protocol.txt Parādīt failu

@@ -44,7 +44,7 @@ allows random access to it.

COLS -- n Number of columns in the device
LINES -- n Number of lines in the device
CELL! g pos -- Set glyph at pos
CELL! c pos -- Set character at pos

Optional:
NEWLN ln -- "Enter" line ln
@@ -53,10 +53,10 @@ CURSOR! pos -- Set cursor's position
"pos" is a simple number (y * cols) + x. For example, if we
have 40 columns per line, 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.
CELL! is not expected to be called with an out-of-range char-
acter. For example, glyphs are often mapped starting at 0x20
(space). On most systems, CELL! should not be called with c <
0x20.If it is, CELL! should do nothing.

NEWLN is called when we "enter" a new line, that is, when we
overflow from previous line or when 0x0d ( ASCII CR ) is emit-


Notiek ielāde…
Atcelt
Saglabāt