📄 llvga.asm
字号:
TITLE LLVGA - VGA screen mode support
;***
;LLVGA - VGA screen mode support
;
; Copyright <C> 1987, Microsoft Corporation
;
;Purpose:
; Support for VGA graphics screen modes (BIOS 11,12,13).
; Note that this module module contains support
; code for all adapters capable of handling these
; screen modes and also attempts to compensate for
; the subtle differences in their treatment.
;
; This module sets hooks in the mode-independent
; modules to routines here for mode-dependent
; graphics support. See the mode-independent
; modules for more precise descriptions of the
; purposes and interfaces of these routines.
;
; The following table summarizes the information for
; the modes and configurations covered:
;
; C | A B
; O | B T I
; L | I T P T
; O A M | O R A C S
; S R D O | S I C G H / P
; C B A N | B O E A P P L
; R U C R P I | M U L X Y S R A I A
; E R O O T T | O T O R R I B G X N
; E S L W E O | D E R E E Z O E E E
; N T S S R R | E S S S S E X S L S
; -- - -- -- - -- | -- --- ---- --- --- --- ---- --- - -
; 11 x 80 30 S x | 11 2 256K 640 480 64 8x16 1 1 1
; 11 x 80 30 I x | " " " " " " " " " "
; 11 x 80 60 S x | " " " " " " 8x8 " " "
; 11 x 80 60 I x | " " " " " " " " " "
;
; 12 x 80 30 S x | 12 16 256K 640 480 256 8x16 1 1 4
; 12 x 80 60 S x | " " " " " " 8x8 " " "
;
; 13 x 40 25 S x | 13 256 256K 320 200 64 8x8 1 8 1
; 13 x 40 25 I x | " " " " " " " " " "
;
;******************************************************************************
INCLUDE switch.inc ;feature switches
INCLUDE rmacros.inc
USESEG _DATA
USESEG _BSS
USESEG GR_TEXT
USESEG CN_TEXT
USESEG XIB
USESEG XI
USESEG XIE
INCLUDE seg.inc
INCLUDE ibmunv.inc
INCLUDE baslibma.inc
INCLUDE llgrp.inc
INCLUDE idmac.inc
INCLUDE grmac.inc ;ModeData macros
INITIALIZER B$xINITVGA ;Put B$xINITVGA in initializer list
sBegin _BSS
;
; ***************************************************************************
; External function vectors
; ***************************************************************************
;
externW b$PalTrans
;
; ***************************************************************************
; External variables
; ***************************************************************************
;
externB b$BiosMode
externB b$Adapter
externB b$Monitor
externB b$VGAmodesH ; hardware support for BIOS modes 10h-13h
externW b$CurPages
externW b$VideoBase
externB b$MaskC
externB b$AttrC
externD b$AddrC
externW b$OffC
externW b$SegC
externB b$MaxAttr
externW B$VLOFST
externW B$VROFST
externW B$LEOFST
externW B$REOFST
externB b$ForeColor
externB b$ScrHeight
externW b$PutVector
externB b$PaintBorder
externW b$Incr1
externW b$Incr2
externW b$IncrY
externB b$ForeMapped
externW b$CURSOR
externW b$CSRTYP
externB b$EgaPalSup
externW b$SaveCa
externW b$UpSub
externW b$DnSub
externW b$UpDnAdd
externW b$ScreenTab
;
; ***************************************************************************
; Local variables
; ***************************************************************************
;
sEnd _BSS
sBegin CN_TEXT
externNP B$USRCSR
sEnd CN_TEXT
assumes CS,GR_TEXT
sBegin GR_TEXT
externNP B$ErrorReturn
externNP B$BumpDS
externNP B$BumpES
externNP B$InitModeData
externNP B$GetParm
externNP B$ResetEGA
externNP B$EgaPalSet
externNP B$EgaMapXYC
externNP B$EgaSetAttr
externNP B$EgaSetC
externNP B$EgaSetPixC
externNP B$EgaSetPixFirstC
externNP B$EgaLineX
externNP B$EgaLineY
externNP B$EgaLineV
externNP B$EgaNSetC
externNP B$EgaDownC
externNP B$EgaLeftC
externNP B$EgaLeftC_13
externNP B$EgaChkUpC
externNP B$EgaReadC
externNP B$EgaPutAction
externNP B$EgaNReadL
externNP B$EgaNWriteL
externNP B$EgaPaintBound
externNP B$EgaPaintBound_11
externNP B$EgaSetTile
externNP B$EgaScanL
externNP B$EgaScanR
externNP B$EgaUpC
externNP B$EgaChkDownC
externNP B$CgaSetC
externNP B$CgaSetAttr
externNP B$CgaSetPixC
externNP B$CgaSetPixFirstC
externNP B$CgaSetPixLastC
externNP B$CgaNSetC
externNP B$CgaReadC
externNP B$CgaPutAction
externNP B$CgaNReadL
externNP B$CgaNWriteL
externNP B$CgaSetTile
externNP B$CgaScanL
externNP B$CgaScanR
externNP B$CgaLineX
externNP B$CgaLineY
externNP B$CgaLineV
;===========================================================================
mModeData Mode11Data
;
; SCREEN 11, BIOS mode 11
;
; Mode-dependent data follows to initialize the the "b$ModeData" table
; in LLCGRP.
;
;===========================================================================
mScreenMode 11
mBiosMode 11H
mBurst 0
mScrWidth 80
mScrHeight 30
mHorzRes 640
mVertRes 480
mVideoBase 0A000H
mMaxAttr 1
mMaxColor -1 ;maximum color (unused for this mode)
mPageSize 64 ;page size in K
mCurrPSize <(64*1024) shr 4> ;page size in paragraphs (1 plane)
mMaxPage 0
mNullColor 0
mForeColor 1
mBackColor 0
mEgaWrMd 0
mInitPalette b$VgaPalette
mInitVgaPal b$VgaPalette
mAlphaDim AlphaDim_11_12
mSetMode SetMode
mSetPages SetPages
mPalReset B$VgaPalReset
mPalPut B$VgaPalPut
mPalTrans B$VgaPalTrans11
mPalSet PalSet
mSetColor B$ErrorReturn
mForeMapped 1
mBitsPerPixel 1
mPlanes 1
mMapXYC B$EgaMapXYC
mLeftC B$EgaLeftC
mChkUpC B$EgaChkUpC
mUpC B$EgaUpC
mChkDownC B$EgaChkDownC
mDownC B$EgaDownC
mSetAttr B$CgaSetAttr
mReadC B$CgaReadC
mSetC B$CgaSetC
mSetPixC B$CgaSetPixC
mSetPixFirstC B$CgaSetPixFirstC
mSetPixLastC B$CgaSetPixLastC
mLineX B$CgaLineX
mLineY B$CgaLineY
mLineV B$CgaLineV
mPutAction B$CgaPutAction
mNReadL B$CgaNReadL
mNWriteL B$CgaNWriteL
mNSetC B$CgaNSetC
mPaintBound B$EgaPaintBound_11
mSetTile B$CgaSetTile
mScanL B$CgaScanL
mScanR B$CgaScanR
mEnd GraphDataLen
;===========================================================================
;===========================================================================
mModeData Mode12Data
;
; SCREEN 12, BIOS mode 12
;
; Mode-dependent data follows to initialize the the "b$ModeData" table
; in LLCGRP.
;
;===========================================================================
mScreenMode 12
mBiosMode 12H
mBurst 0
mScrWidth 80
mScrHeight 30
mHorzRes 640
mVertRes 480
mVideoBase 0A000H
mMaxAttr 15
mMaxColor -1 ;maximum color (unused for this mode)
mPageSize -1 ;page size in K (unused for this mode)
mCurrPSize <(256/4*1024) shr 4> ;page size in paragraphs (1 plane)
mMaxPage 0
mNullColor 0
mForeColor 15
mBackColor 0
mEgaWrMd 2
mInitPalette b$VgaPalette
mInitVgaPal b$VgaPalette
mAlphaDim AlphaDim_11_12
mSetMode SetMode
mSetPages SetPages
mPalReset B$VgaPalReset
mPalPut B$VgaPalPut
mPalTrans PalTrans_12
mPalSet PalSet
mSetColor SetColor
mForeMapped 15
mBitsPerPixel 1
mPlanes 4
mMapXYC B$EgaMapXYC
mLeftC B$EgaLeftC
mChkUpC B$EgaChkUpC
mUpC B$EgaUpC
mChkDownC B$EgaChkDownC
mDownC B$EgaDownC
mSetAttr B$EgaSetAttr
mReadC B$EgaReadC
mSetC B$EgaSetC
mSetPixC B$EgaSetPixC
mSetPixFirstC B$EgaSetPixFirstC
mSetPixLastC B$ResetEGA
mLineX B$EgaLineX
mLineY B$EgaLineY
mLineV B$EgaLineV
mPutAction B$EgaPutAction
mNReadL B$EgaNReadL
mNWriteL B$EgaNWriteL
mNSetC B$EgaNSetC
mPaintBound B$EgaPaintBound
mSetTile B$EgaSetTile
mScanL B$EgaScanL
mScanR B$EgaScanR
mEnd GraphDataLen
;===========================================================================
;===========================================================================
mModeData Mode13Data
;
; SCREEN 13, BIOS mode 13
;
; Mode-dependent data follows to initialize the the "b$ModeData" table
; in LLCGRP.
;
;===========================================================================
mScreenMode 13
mBiosMode 13H
mBurst 0
mScrWidth 40
mScrHeight 25
mHorzRes 320
mVertRes 200
mVideoBase 0A000H
mMaxAttr 255
mMaxColor -1 ;maximum color (unused for this mode)
mPageSize 64 ;page size in K
mCurrPSize <(64*1024) shr 4> ;page size in paragraphs (1 plane)
mMaxPage 0
mNullColor 0
mForeColor 15
mBackColor 0
mEgaWrMd 2
mInitPalette b$VgaPalette
mInitVgaPal b$VgaPalette
mAlphaDim AlphaDim_13
mSetMode SetMode
mSetPages SetPages
mPalReset PalReset_13
mPalPut B$VgaPalPut
mPalTrans PalTrans_13
mPalSet PalSet
mSetColor SetColor
mForeMapped 15
mBitsPerPixel 8
mPlanes 1
mMapXYC MapXYC_13
mLeftC B$EgaLeftC_13
mChkUpC B$EgaChkUpC
mUpC B$EgaUpC
mChkDownC B$EgaChkDownC
mDownC B$EgaDownC
mSetAttr SetAttr_13
mReadC ReadC_13
mSetC SetC_13
mSetPixC SetPixC_13
mSetPixFirstC B$CgaSetPixFirstC
mSetPixLastC B$CgaSetPixLastC
mLineX LineX_13
mLineY LineY_13
mLineV LineV_13
mPutAction PutAction_13
mNReadL NReadL_13
mNWriteL NWriteL_13
mNSetC NSetC_13
mPaintBound PaintBound_13
mSetTile B$CgaSetTile
mScanL ScanL_13
mScanR ScanR_13
mEnd GraphDataLen
;===========================================================================
;
; Mode11Palette/Mode12Palette
; These default palettes are used in VGA modes 11H & 12H (screen 11 & 12)
; to make the EGA palette transparent. EGA palette entries 0-16 (includes
; overscan) are mapped directly to the VGA palette. Any palette
; manipulations are then done only to the VGA palette.
;
labelB Mode11Palette ;[24] designed to also work on certain clones
DB 0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0 ;[24]
;
labelB Mode12Palette ;[24]
DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ;[24]
;
; b$VgaPalette
; is identical to that setup by the BIOS for mode 13H (screen 13). The
; first 17 entries happen to match what we want for modes 11H & 12H as
; well. This includes entry #16 which is black for overscan.
; NOTE: It would be nice to find a way to avoid keeping such a huge
; table around, even in CS!
;
labelB b$VgaPalette
; RED GREEN BLUE
; --- ----- ----
DB 00H, 00H, 00H
DB 00H, 00H, 2AH
DB 00H, 2AH, 00H
DB 00H, 2AH, 2AH
DB 2AH, 00H, 00H
DB 2AH, 00H, 2AH
DB 2AH, 15H, 00H
DB 2AH, 2AH, 2AH
DB 15H, 15H, 15H
DB 15H, 15H, 3FH
DB 15H, 3FH, 15H
DB 15H, 3FH, 3FH
DB 3FH, 15H, 15H
DB 3FH, 15H, 3FH
DB 3FH, 3FH, 15H
DB 3FH, 3FH, 3FH
DB 00H, 00H, 00H
DB 05H, 05H, 05H
DB 08H, 08H, 08H
DB 0BH, 0BH, 0BH
DB 0EH, 0EH, 0EH
DB 11H, 11H, 11H
DB 14H, 14H, 14H
DB 18H, 18H, 18H
DB 1CH, 1CH, 1CH
DB 20H, 20H, 20H
DB 24H, 24H, 24H
DB 28H, 28H, 28H
DB 2DH, 2DH, 2DH
DB 32H, 32H, 32H
DB 38H, 38H, 38H
DB 3FH, 3FH, 3FH
DB 00H, 00H, 3FH
DB 10H, 00H, 3FH
DB 1FH, 00H, 3FH
DB 2FH, 00H, 3FH
DB 3FH, 00H, 3FH
DB 3FH, 00H, 2FH
DB 3FH, 00H, 1FH
DB 3FH, 00H, 10H
DB 3FH, 00H, 00H
DB 3FH, 10H, 00H
DB 3FH, 1FH, 00H
DB 3FH, 2FH, 00H
DB 3FH, 3FH, 00H
DB 2FH, 3FH, 00H
DB 1FH, 3FH, 00H
DB 10H, 3FH, 00H
DB 00H, 3FH, 00H
DB 00H, 3FH, 10H
DB 00H, 3FH, 1FH
DB 00H, 3FH, 2FH
DB 00H, 3FH, 3FH
DB 00H, 2FH, 3FH
DB 00H, 1FH, 3FH
DB 00H, 10H, 3FH
DB 1FH, 1FH, 3FH
DB 27H, 1FH, 3FH
DB 2FH, 1FH, 3FH
DB 37H, 1FH, 3FH
DB 3FH, 1FH, 3FH
DB 3FH, 1FH, 37H
DB 3FH, 1FH, 2FH
DB 3FH, 1FH, 27H
DB 3FH, 1FH, 1FH
DB 3FH, 27H, 1FH
DB 3FH, 2FH, 1FH
DB 3FH, 37H, 1FH
DB 3FH, 3FH, 1FH
DB 37H, 3FH, 1FH
DB 2FH, 3FH, 1FH
DB 27H, 3FH, 1FH
DB 1FH, 3FH, 1FH
DB 1FH, 3FH, 27H
DB 1FH, 3FH, 2FH
DB 1FH, 3FH, 37H
DB 1FH, 3FH, 3FH
DB 1FH, 37H, 3FH
DB 1FH, 2FH, 3FH
DB 1FH, 27H, 3FH
DB 2DH, 2DH, 3FH
DB 31H, 2DH, 3FH
DB 36H, 2DH, 3FH
DB 3AH, 2DH, 3FH
DB 3FH, 2DH, 3FH
DB 3FH, 2DH, 3AH
DB 3FH, 2DH, 36H
DB 3FH, 2DH, 31H
DB 3FH, 2DH, 2DH
DB 3FH, 31H, 2DH
DB 3FH, 36H, 2DH
DB 3FH, 3AH, 2DH
DB 3FH, 3FH, 2DH
DB 3AH, 3FH, 2DH
DB 36H, 3FH, 2DH
DB 31H, 3FH, 2DH
DB 2DH, 3FH, 2DH
DB 2DH, 3FH, 31H
DB 2DH, 3FH, 36H
DB 2DH, 3FH, 3AH
DB 2DH, 3FH, 3FH
DB 2DH, 3AH, 3FH
DB 2DH, 36H, 3FH
DB 2DH, 31H, 3FH
DB 00H, 00H, 1CH
DB 07H, 00H, 1CH
DB 0EH, 00H, 1CH
DB 15H, 00H, 1CH
DB 1CH, 00H, 1CH
DB 1CH, 00H, 15H
DB 1CH, 00H, 0EH
DB 1CH, 00H, 07H
DB 1CH, 00H, 00H
DB 1CH, 07H, 00H
DB 1CH, 0EH, 00H
DB 1CH, 15H, 00H
DB 1CH, 1CH, 00H
DB 15H, 1CH, 00H
DB 0EH, 1CH, 00H
DB 07H, 1CH, 00H
DB 00H, 1CH, 00H
DB 00H, 1CH, 07H
DB 00H, 1CH, 0EH
DB 00H, 1CH, 15H
DB 00H, 1CH, 1CH
DB 00H, 15H, 1CH
DB 00H, 0EH, 1CH
DB 00H, 07H, 1CH
DB 0EH, 0EH, 1CH
DB 11H, 0EH, 1CH
DB 15H, 0EH, 1CH
DB 18H, 0EH, 1CH
DB 1CH, 0EH, 1CH
DB 1CH, 0EH, 18H
DB 1CH, 0EH, 15H
DB 1CH, 0EH, 11H
DB 1CH, 0EH, 0EH
DB 1CH, 11H, 0EH
DB 1CH, 15H, 0EH
DB 1CH, 18H, 0EH
DB 1CH, 1CH, 0EH
DB 18H, 1CH, 0EH
DB 15H, 1CH, 0EH
DB 11H, 1CH, 0EH
DB 0EH, 1CH, 0EH
DB 0EH, 1CH, 11H
DB 0EH, 1CH, 15H
DB 0EH, 1CH, 18H
DB 0EH, 1CH, 1CH
DB 0EH, 18H, 1CH
DB 0EH, 15H, 1CH
DB 0EH, 11H, 1CH
DB 14H, 14H, 1CH
DB 16H, 14H, 1CH
DB 18H, 14H, 1CH
DB 1AH, 14H, 1CH
DB 1CH, 14H, 1CH
DB 1CH, 14H, 1AH
DB 1CH, 14H, 18H
DB 1CH, 14H, 16H
DB 1CH, 14H, 14H
DB 1CH, 16H, 14H
DB 1CH, 18H, 14H
DB 1CH, 1AH, 14H
DB 1CH, 1CH, 14H
DB 1AH, 1CH, 14H
DB 18H, 1CH, 14H
DB 16H, 1CH, 14H
DB 14H, 1CH, 14H
DB 14H, 1CH, 16H
DB 14H, 1CH, 18H
DB 14H, 1CH, 1AH
DB 14H, 1CH, 1CH
DB 14H, 1AH, 1CH
DB 14H, 18H, 1CH
DB 14H, 16H, 1CH
DB 00H, 00H, 10H
DB 04H, 00H, 10H
DB 08H, 00H, 10H
DB 0CH, 00H, 10H
DB 10H, 00H, 10H
DB 10H, 00H, 0CH
DB 10H, 00H, 08H
DB 10H, 00H, 04H
DB 10H, 00H, 00H
DB 10H, 04H, 00H
DB 10H, 08H, 00H
DB 10H, 0CH, 00H
DB 10H, 10H, 00H
DB 0CH, 10H, 00H
DB 08H, 10H, 00H
DB 04H, 10H, 00H
DB 00H, 10H, 00H
DB 00H, 10H, 04H
DB 00H, 10H, 08H
DB 00H, 10H, 0CH
DB 00H, 10H, 10H
DB 00H, 0CH, 10H
DB 00H, 08H, 10H
DB 00H, 04H, 10H
DB 08H, 08H, 10H
DB 0AH, 08H, 10H
DB 0CH, 08H, 10H
DB 0EH, 08H, 10H
DB 10H, 08H, 10H
DB 10H, 08H, 0EH
DB 10H, 08H, 0CH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -