home *** CD-ROM | disk | FTP | other *** search
- \ TVIDEO.SEQ by Tom Zimmer
-
- comment:
-
- Direct video screen write display routine.
-
- This is not the fastest possible display routine, but it is much better
- than the normal DOS output routine. Be sure to call VMODE.SET before using
- VTYPE or VIDEO-TYPE, then use VAT to position the cursor instead of AT.
-
- comment;
-
- FORTH DECIMAL TARGET >LIBRARY \ A Library file
-
- 80 VALUE COLS
- 25 VALUE ROWS
- VARIABLE VIDEO-SEG
- VARIABLE VSPCS-PTR
-
- CODE VIDEO-TYPE ( string length x y -- )
- [ASSEMBLER]
- PUSH BX
- MOV AX, BX
- MOV DX, 0 [SI]
- MOV BX, 2 [SI]
- ADD DX, BX MOV DH, AL
- SUB BX, BX
- MOV AH, # 2
- INT $10
- POP BX
- MOV AX, # 160
- MUL BX
- MOV DI, AX
- LODSW SHL AX
- ADD DI, AX
- LODSW MOV CX, AX
- LODSW MOV BX, AX
- XCHG DI, BX
- CX<>0 IF MOV DX, ES
- MOV ES, VIDEO-SEG \ destination address
- MOV AH, ATTRIB \ load attribute into AH
- 0 $: MOV AL, 0 [DI]
- MOV ES: 0 [BX], AX
- INC DI
- INC BX
- INC BX
- LOOP 0 $
- MOV ES, DX
- THEN
- LODSW
- MOV BX, AX
- RET END-CODE
-
- : %VTYPE ( addr len -- )
- PRINTING @
- IF %TYPE
- ELSE TUCK #OUT @ #LINE @ VIDEO-TYPE #OUT +!
- THEN ;
-
- : %VSPACES ( n1 -- ) \ Display n1 spaces up to 80
- VSPCS-PTR @ SWAP 0MAX 80 MIN %VTYPE ;
-
- : %VEMIT ( c1 -- )
- PRINTING @
- IF (EMIT)
- ELSE SP@ 1 %VTYPE DROP
- THEN ;
-
- : NORM-DARK ( --- )
- VIDEO-SEG @ 0 ROWS COLS 2* *
- ATTRIB C@ FLIP $20 OR LFILLW
- 0 0 AT ;
-
- : VMODE.SET ( --- ) \ must be done during initialization
- ?VMODE 7 =
- IF $0B000
- ELSE $0B800
- THEN VIDEO-SEG !
- 7 ATTRIB !
- 80 DS:ALLOC VSPCS-PTR ! \ allocate a 80 char buffer
- VSPCS-PTR @ 80 $20 FILL \ for 80 space characters
- ['] CRLF !> CR
- ['] IBM-AT? !> AT?
- ['] IBM-AT !> AT
- ['] %KEY !> KEY
- ['] %VEMIT !> EMIT
- ['] %VTYPE !> TYPE
- ['] %VSPACES !> SPACES
- ['] NORM-DARK !> DARK
- AT? AT ;
-
- : >NORM ( --- ) $07 ATTRIB ! ; \ NORMAL
- : >REV ( --- ) $78 ATTRIB ! ; \ REVERSE
- : >UL ( --- ) $01 ATTRIB ! ; \ UNDERLINE
- : >BOLD ( --- ) $7F ATTRIB ! ; \ BRIGHT
- : >BOLDUL ( --- ) $79 ATTRIB ! ; \ BOLD UNDERLINE
- : >BOLDBLNK ( --- ) $8F ATTRIB ! ; \ BOLD BLINK
- : >REVBLNK ( --- ) $F0 ATTRIB ! ; \ REVERSE BLINK
-
- CODE BLINK_OFF ( -- )
- SAVE_BX
- MOV AX, # $1003
- MOV BL, # $00 \ DISABLE BLINK
- INT $10
- LOAD_BX
- RET END-CODE
-
- CODE BLINK_ON ( -- )
- SAVE_BX
- MOV AX, # $1003
- MOV BL, # $01 \ ENABLE BLINK
- INT $10
- LOAD_BX
- RET END-CODE
-
- FORTH TARGET >TARGET
-
-