⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 llvga.asm

📁 [随书类]Dos6.0源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -