home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / source / video.seq < prev    next >
Text File  |  1989-07-05  |  3KB  |  79 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 VMODE-VAR      \ Video mode save variable
  14. VARIABLE BLANKING       \ Are we blanking during screen drawing?
  15.  0 VALUE COLS           \ Screen columns
  16.  0 VALUE ROWS           \ Screen rows
  17.  0 VALUE CROWS          \ Cursor DOT rows
  18.  
  19. CODE ?VMODE     ( --- N1 )              \ Get the video mode from DOS
  20.                 MOV AH, # $0F
  21.                 INT $10
  22.                 SUB AH, AH
  23.                 MOV VMODE-VAR AX        \ Save video mode in VMODE-VAR
  24.                 PUSH AX
  25.                 MOV AX, # $40           \ absolute segment $40:00
  26.                 MOV DS, AX              \ goes into DS
  27.                 MOV BL, $4A             \ get the # of COLS from    $40:$4A
  28.                 MOV CL, $84             \ get the # of ROWS FROM    $40:$84
  29.                 MOV BH, $60             \ get the Cursor bottom row $40:$60
  30.                 MOV AX, CS              \ restore DS from CS
  31.                 MOV DS, AX
  32.                 MOV ' CROWS >BODY BH
  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.                 NEXT            END-CODE
  40.  
  41. DEFER INITMONO  ' NOOP IS INITMONO      \ INITIALIZATION VECTOR AVAILABLE
  42. DEFER INITCOLOR ' NOOP IS INITCOLOR     \ FOR MONOCHROME AND COLOR
  43.  
  44. : VMODE.SET     ( --- )
  45.                 ?VMODE 7 =
  46.                 IF      $0B000   INITMONO
  47.                 ELSE    $0B800   INITCOLOR
  48.                 THEN    VIDEO-SEG ! ;
  49.  
  50. CODE BLANK.COLOR ( --- )              \ Blanks screen if in COLOR mode
  51.                 MOV BX, # 1                     \ Bit mask for retrace
  52.                 MOV AX, VMODE-VAR
  53.                 CMP AX, # 7                     \ If video mode <> 7 (mono)
  54.         0<> IF          MOV AX, BLANKING
  55.                         OR AX, AX
  56.             0<> IF      MOV DX, # 986           \ CGA status port
  57.                         BEGIN   IN AL, DX       \ Wait for retrace
  58.                                 TEST AL, BX
  59.                     0<> UNTIL
  60.                         MOV DL, # 216           \ Address control reg
  61.                         MOV AL, # 37            \ Disable the CRT
  62.                         OUT DX, AL
  63.                 THEN
  64.             THEN
  65.                 next            end-code
  66.  
  67. CODE SHOW.COLOR ( --- )                 \ Re-enable the display
  68.                 MOV AX, VMODE-VAR
  69.                 CMP AX, # 7
  70.         0<> IF          MOV AX, BLANKING
  71.                         OR AX, AX
  72.             0<> IF      MOV DX, # 984           \ CGA mode control reg
  73.                         MOV AL, # $2D           \ Enable byte for mode 3
  74.                         OUT DX, AL
  75.                 THEN
  76.             THEN
  77.                 NEXT            END-CODE
  78.  
  79.