\ VIDEO.SEQ Direct VIDEO Screen output by Tom Zimmer FILES DEFINITIONS VARIABLE VIDEO.SEQ FORTH DEFINITIONS VARIABLE ATTRIB 7 ATTRIB !-T \ display attribute value VARIABLE VIDEO-SEG \ Segment of display VARIABLE TYPESEG \ video type segment, the segment we are typing from. CODE ?VMODE ( --- N1 ) MOV AH, # 15 INT 16 SUB AH, AH 1PUSH END-CODE DEFER INITMONO ' NOOP IS INITMONO \ INITIALIZATION VECTOR AVAILABLE DEFER INITCOLOR ' NOOP IS INITCOLOR \ FOR MONOCHROME AND COLOR HEX : VMODE.SET ( --- ) ?VMODE 7 = IF 0B000 INITMONO ELSE 0B800 INITCOLOR THEN VIDEO-SEG ! ; DECIMAL comment: CODE VTYPE ( string length x y -- ) POP AX \ Y POP DX \ X POP BX \ LENGTH PUSH BX \ Save them back again PUSH DX PUSH AX ADD DX, BX \ Set length + X position to DL cmp dx, # 79 >= if mov dx, # 79 then mov #out dx MOV DH, AL \ Move Y to DH XOR BX, BX \ Clear BX MOV AH, # 2 INT 16 \ Move cursor to end of typed string MOV AX, # 160 POP BX MUL BX MOV DI, AX POP AX SHL AX, # 1 ADD DI, AX POP CX POP BX XCHG SI, BX \ SI is the source PUSH BX \ Save SI for later restoral PUSH ES \ save ES MOV AH, ATTRIB \ display attributes MOV ES, VIDEO-SEG \ destination segment MOV DS, TYPESEG \ source segment LABEL VTYPE1 LODSB STOSW \ Move a byte to display LOOP VTYPE1 \ LOOP till CX is zero POP ES \ restore ES POP SI \ Restore IP MOV BX, CS MOV DS, BX \ restore DS NEXT END-CODE DECIMAL comment;