home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / b / bgi256-3.zip / V7INIT.INC < prev    next >
Text File  |  1992-12-27  |  5KB  |  192 lines

  1. ;V7INIT.INC - Copyright 1991,1992  Knight Software
  2. ;    History:
  3. ;         17 May 1991 - first release
  4. ;        
  5. ;----------------------------------------------------------------------
  6. ;Determine what sort of card is out there
  7. ;Assume:  DS = data segment
  8. ;Entry:   N/A
  9. ;Return:  Correct procedure pointers installed
  10. ;Destroy: AX
  11.  
  12. DetectCard PROC NEAR
  13.     PUSH    ES
  14.     PUSH    BX        ;check if this is a Video Seven
  15.  
  16.     MOV    BX,DS:[SEGA000]
  17.     MOV    DS:[VideoSegment],BX  ;init Video Segment/selector info
  18.  
  19.     MOV    BX,0
  20.     MOV    AX,6F00H
  21.     INT    10H
  22.     CMP    BX,'V7'
  23.     JZ    @IsVideoSeven    ;yup, so go init it
  24.  
  25.     MOV    AX,1         ;bummer, it ain't so error out
  26.     MOV    DS:[NumberModes],AX ;set number modes available
  27.     LEA    BX,VGABankSelect ;set bank select proc pointer
  28.     MOV    DS:[BankSelectProc],BX
  29.  
  30.     LEA    BX,VGA320x200Init    ;we do all this so as to
  31.     MOV    DS:[InitDisplayProc],BX    ;keep things in some 
  32.     LEA    BX,DummyCard        ;form of order to prevent
  33.     MOV    DS:[CardNamePtr],BX    ;nasty things from happening
  34.     MOV    BX,64            ;we are just telling the code
  35.     MOV    DS:[WinGran],BX        ;that we have a simple VGA 
  36.     MOV    AH,grNotDetected    ;or MCGA card set to mode 13H
  37.     MOV    DS:[StatBlock.stat],AH    ;then set no detect error
  38.     MOV    BYTE PTR DS:[ModeSelect],0 ;force mode to 0
  39.     OR    AX,255
  40.     JMP    @DetectExit
  41.  
  42. @IsVideoSeven:
  43.     MOV    AX,MaxModes    ;set number modes available
  44.     MOV    DS:[NumberModes],AX
  45.     LEA    BX,V7BankSelect ;set bank select proc pointer
  46.     MOV    DS:[BankSelectProc],BX
  47.  
  48.     MOV    AL,DS:[ModeSelect]
  49.     AND    AX,7
  50.     LEA    BX,V7ModeProcTable ;set display init proc pointer
  51.     ADD    BX,AX
  52.     ADD    BX,AX
  53.     MOV    BX,CS:[BX]
  54.     MOV    DS:[InitDisplayProc],BX
  55.     LEA    BX,V7name
  56.     MOV    DS:[CardNamePtr],BX   ;set up pointer to card name
  57.     MOV    BX,64
  58.     MOV    DS:[WinGran],BX       ;set window granularity
  59.     XOR    AX,AX
  60. @DetectExit:
  61.     POP    BX
  62.     POP    ES
  63.     RET
  64. DetectCard ENDP
  65.  
  66. MaxModes EQU 5    ;max number modes available for Video Seven
  67.  
  68. V7ModeProcTable:
  69.     DW    VGA320x200Init       ;table of init proc ptrs
  70.     DW    V7vga640x400Init  ;for the various modes
  71.     DW    V7vga640x480Init 
  72.     DW    V7vga800x600Init 
  73.     DW    V7vga1024x768Init ;(V7 VRAM II only)
  74.  
  75.     DW    VGA320x200Init     ;dummy excess mode selects
  76.     DW    VGA320x200Init  ;to fill out to 8 positions
  77.     DW    VGA320x200Init 
  78.  
  79. V7name:
  80.     DB 7        ;name length
  81.     DB ' Video7',0  ;Card name preceeded with space
  82.             ;and taged with a zero
  83.  
  84. ;----------------------------------------------------------------------
  85. ;Select V7vga640x400 mode operation
  86. ;Assume:  DS = data segment
  87. ;Entry:   N/A
  88. ;Return:  Correct display mode selected
  89. ;Destroy: AX,BX
  90.  
  91. V7vga640x400Init PROC NEAR
  92.     MOV    AX,6F05H
  93.     MOV    BL,66H    ;get graph mode to select
  94.     INT    10H    ;call BIOS to set the mode
  95.     XOR    AX,AX
  96.     RET
  97. V7vga640x400Init ENDP
  98.  
  99. ;----------------------------------------------------------------------
  100. ;Select V7vga640x480 mode operation
  101. ;Assume:  DS = data segment
  102. ;Entry:   N/A
  103. ;Return:  Correct display mode selected
  104. ;Destroy: AX,BX
  105.  
  106. V7vga640x480Init PROC NEAR
  107.     MOV    AX,6F05H
  108.     MOV    BL,67h    ;get graph mode to select
  109.     INT    10H    ;call BIOS to set the mode
  110.     XOR    AX,AX
  111.     RET
  112. V7vga640x480Init ENDP
  113.  
  114. ;----------------------------------------------------------------------
  115. ;Select V7vga800x600 mode operation
  116. ;Assume:  DS = data segment
  117. ;Entry:   N/A
  118. ;Return:  Correct display mode selected
  119. ;Destroy: AX,BX
  120.  
  121. V7vga800x600Init PROC NEAR
  122.     MOV    AX,6F05H
  123.     MOV    BL,69h    ;get graph mode to select
  124.     INT    10H    ;call BIOS to set the mode
  125.     XOR    AX,AX
  126.     RET
  127. V7vga800x600Init ENDP
  128.  
  129. ;----------------------------------------------------------------------
  130. ;Select V7vga1024x768 mode operation
  131. ;Assume:  DS = data segment
  132. ;Entry:   N/A
  133. ;Return:  Correct display mode selected
  134. ;Destroy: AX,BX
  135.  
  136. V7vga1024x768Init PROC NEAR    ;@@@ Is this the right select code? @@@
  137.     MOV    AX,6F05H
  138.     MOV    BL,6Ah    ;get graph mode to select
  139.     INT    10H    ;call BIOS to set the mode
  140.     XOR    AX,AX
  141.     RET
  142. V7vga1024x768Init ENDP
  143.  
  144. ;----------------------------------------------------------------------
  145. ;Video Seven Bank select routines - We assume that full memory is
  146. ;available if you try to access it.
  147. ;Assume:  DS = data segment
  148. ;Entry:   DX = Bank to select
  149. ;Return:  Display Bank is selected
  150. ;Destroy: nothing
  151.  
  152. V7BankSelect PROC NEAR
  153.     PUSH    AX
  154.     PUSH    BX
  155.     PUSH    DX
  156.     MOV     BL,DL
  157.     AND     BL,1        ;bl=extended page select
  158.     MOV     AH,DL
  159.     AND     AH,2
  160.     SHL     AH,1
  161.     SHL    AH,1
  162.     SHL    AH,1
  163.     SHL    AH,1        ;ah = page select bit
  164.     AND    DL,0CH
  165.     MOV    BH,DL
  166.     SHR    DL,1
  167.     SHR    DL,1
  168.     OR    BH,DL        ;bh=256k bank select
  169.     MOV    DX,3CCH
  170.     IN    AL,DX        ;get misc output reg
  171.     AND    AL,0FFH-20H  ;clear page select bit
  172.     OR    AL,AH        ;set page select bit
  173.     MOV    DX,3C2H      ;write misc output register
  174.     OUT    DX,AL
  175.     MOV    DX,3C4H      ;sequencer
  176.     MOV    AL,0F9H      ;extended page select register
  177.     MOV    AH,BL        ;extended page select value
  178.     OUT    DX,AX
  179.     MOV    AL,0F6H      ;256k bank select
  180.     OUT    DX,AL
  181.     INC    DX           ;point to data
  182.     IN    AL,DX
  183.     AND    AL,0F0H      ;clear out bank select banks
  184.     OR    AL,BH        ;set bank select banks
  185.     OUT    DX,AL
  186.     POP    DX
  187.     POP    BX
  188.     POP    AX
  189.     RET
  190. V7BankSelect ENDP
  191.  
  192.