home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / FPC225_2.ZIP / F-PCMETA.ZIP / VIDEO.SEQ < prev   
Encoding:
Text File  |  1988-10-15  |  3.5 KB  |  88 lines

  1. \ VIDEO.SEQ     Direct VIDEO Screen output              by Tom Zimmer
  2.  
  3. FILES DEFINITIONS
  4.  
  5. VARIABLE VIDEO.SEQ
  6.  
  7. FORTH DEFINITIONS
  8.  
  9. DECIMAL
  10.  
  11. VARIABLE ATTRIB   7 ATTRIB !-T          \ display attribute value
  12. VARIABLE VIDEO-SEG                      \ Segment of display
  13. VARIABLE TYPESEG        \ video type segment, the segment we are typing from.
  14. VARIABLE VMODE-VAR      \ Video mode save variable
  15. VARIABLE BLANKING       \ Are we blanking during screen drawing?
  16. 0 VALUE COLS            \ Screen columns
  17. 0 VALUE ROWS            \ Screen rows
  18. 0 VALUE CROWS           \ Cursor DOT rows
  19.  
  20. CODE ?VMODE     ( --- N1 )              \ Get the video mode from DOS
  21.                 MOV AH, # $0F
  22.                 INT $10
  23.                 SUB AH, AH
  24.                 MOV VMODE-VAR AX        \ Save video mode in VMODE-VAR
  25.                 PUSH AX
  26.                 MOV AX, # $40           \ absolute segment $40:00
  27.                 MOV DS, AX              \ goes into DS
  28.                 MOV BL, $4A             \ get the # of COLS from $40:$4A
  29.                 MOV CL, $84             \ get the # of ROWS FROM $40:$84
  30.                 MOV BH, $85             \ get the # of Cursor DOTs $40:$85
  31.                 MOV AX, CS              \ restore DS from CS
  32.                 MOV DS, AX
  33.                 MOV ' COLS >BODY BL
  34.                 CMP CL, # 24
  35.               < IF      MOV CL, # 25    \ AT LEAST 25 ROWS
  36.                 ELSE    INC CL
  37.                 THEN
  38.                 MOV ' ROWS >BODY CL
  39.                 CMP BH, # 8             \ test DOT rows to less than 8
  40.                                         \ CGA & MDA will be zero
  41.               < IF      CMP VMODE-VAR # 7 WORD
  42.                      0= IF      MOV BH, # 14    \ MDA is 14 DOTs high
  43.                         ELSE    MOV BH, # 8     \ CGA is  8 DOTs high
  44.                         THEN
  45.                 THEN
  46.                 MOV ' CROWS >BODY BH
  47.                 NEXT
  48.                 END-CODE
  49.  
  50. DEFER INITMONO  ' NOOP IS INITMONO      \ INITIALIZATION VECTOR AVAILABLE
  51. DEFER INITCOLOR ' NOOP IS INITCOLOR     \ FOR MONOCHROME AND COLOR
  52.  
  53. : VMODE.SET     ( --- )
  54.                 ?VMODE 7 =
  55.                 IF      $0B000   INITMONO
  56.                 ELSE    $0B800   INITCOLOR
  57.                 THEN    VIDEO-SEG ! ;
  58.  
  59. CODE BLANK.COLOR ( --- )              \ Blanks screen if in COLOR mode
  60.                 MOV BX, # 1                     \ Bit mask for retrace
  61.                 MOV AX, VMODE-VAR
  62.                 CMP AX, # 7                     \ If video mode <> 7 (mono)
  63.         0<> IF          MOV AX, BLANKING
  64.                         OR AX, AX
  65.             0<> IF      MOV DX, # 986           \ CGA status port
  66.                         BEGIN   IN AL, DX       \ Wait for retrace
  67.                                 TEST AL, BX
  68.                     0<> UNTIL
  69.                         MOV DL, # 216           \ Address control reg
  70.                         MOV AL, # 37            \ Disable the CRT
  71.                         OUT DX, AL
  72.                 THEN
  73.             THEN
  74.                 next            end-code
  75.  
  76. CODE SHOW.COLOR ( --- )                 \ Re-enable the display
  77.                 MOV AX, VMODE-VAR
  78.                 CMP AX, # 7
  79.         0<> IF          MOV AX, BLANKING
  80.                         OR AX, AX
  81.             0<> IF      MOV DX, # 984           \ CGA mode control reg
  82.                         MOV AL, # $2D           \ Enable byte for mode 3
  83.                         OUT DX, AL
  84.                 THEN
  85.             THEN
  86.                 NEXT            END-CODE
  87.  
  88.