mirror of https://github.com/yasm/yasm.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1327 lines
15 KiB
1327 lines
15 KiB
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[extern _AllocMem] |
|
[extern _AllocSelector] |
|
[extern _FreeSelector] |
|
[extern _GetPhysicalMapping] |
|
[extern _FreePhysicalMapping] |
|
[extern _LockArea] |
|
|
|
_AllocMem_arglen equ 4 |
|
_AllocSelector_arglen equ 4 |
|
_FreeSelector_arglen equ 2 |
|
_GetPhysicalMapping_arglen equ 16 |
|
_FreePhysicalMapping_arglen equ 8 |
|
_LockArea_arglen equ 10 |
|
|
|
|
|
|
|
|
|
|
|
[extern _OpenFile] |
|
[extern _CloseFile] |
|
[extern _ReadFile] |
|
[extern _ReadFile_Sel] |
|
[extern _WriteFile] |
|
[extern _WriteFile_Sel] |
|
[extern _SeekFile] |
|
|
|
_OpenFile_arglen equ 6 |
|
_CloseFile_arglen equ 4 |
|
_ReadFile_arglen equ 12 |
|
_ReadFile_Sel_arglen equ 14 |
|
_WriteFile_arglen equ 12 |
|
_WriteFile_Sel_arglen equ 14 |
|
_SeekFile_arglen equ 10 |
|
|
|
[bits 32] |
|
|
|
|
|
[extern ___sbrk] |
|
[extern _getenv] |
|
|
|
___sbrk_arglen equ 4 |
|
_getenv_arglen equ 4 |
|
|
|
|
|
[extern _djgpp_es] |
|
[extern _djgpp_fs] |
|
[extern _djgpp_gs] |
|
|
|
|
|
[extern ___dos_argv0] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
afHaveMultiBuffer equ 0001h |
|
afHaveVirtualScroll equ 0002h |
|
afHaveBankedBuffer equ 0004h |
|
afHaveLinearBuffer equ 0008h |
|
afHaveAccel2D equ 0010h |
|
afHaveDualBuffers equ 0020h |
|
afHaveHWCursor equ 0040h |
|
afHave8BitDAC equ 0080h |
|
afNonVGAMode equ 0100h |
|
afHaveDoubleScan equ 0200h |
|
afHaveInterlaced equ 0400h |
|
afHaveTripleBuffer equ 0800h |
|
afHaveStereo equ 1000h |
|
afHaveROP2 equ 2000h |
|
afHaveHWStereoSync equ 4000h |
|
afHaveEVCStereoSync equ 8000h |
|
|
|
|
|
[absolute 0] |
|
AF_MODE_INFO: |
|
.Attributes resw 1 |
|
.XResolution resw 1 |
|
.YResolution resw 1 |
|
.BytesPerScanLine resw 1 |
|
.BitsPerPixel resw 1 |
|
.MaxBuffers resw 1 |
|
.RedMaskSize resb 1 |
|
.RedFieldPosition resb 1 |
|
.GreenMaskSize resb 1 |
|
.GreenFieldPosition resb 1 |
|
.BlueMaskSize resb 1 |
|
.BlueFieldPosition resb 1 |
|
.RsvdMaskSize resb 1 |
|
.RsvdFieldPosition resb 1 |
|
.MaxBytesPerScanLine resw 1 |
|
.MaxScanLineWidth resw 1 |
|
|
|
.LinBytesPerScanLine resw 1 |
|
.BnkMaxBuffers resb 1 |
|
.LinMaxBuffers resb 1 |
|
.LinRedMaskSize resb 1 |
|
.LinRedFieldPosition resb 1 |
|
.LinGreenMaskSize resb 1 |
|
.LinGreenFieldPosition resb 1 |
|
.LinBlueMaskSize resb 1 |
|
.LinBlueFieldPosition resb 1 |
|
.LinRsvdMaskSize resb 1 |
|
.LinRsvdFieldPosition resb 1 |
|
.MaxPixelClock resd 1 |
|
.VideoCapabilities resd 1 |
|
.VideoMinXScale resw 1 |
|
.VideoMinYScale resw 1 |
|
.VideoMaxXScale resw 1 |
|
.VideoMaxYScale resw 1 |
|
.Reserved resb 76 |
|
AF_MODE_INFO_size: |
|
[section .text] |
|
|
|
|
|
[absolute 0] |
|
AF_DRIVER: |
|
|
|
.Signature resb 12 |
|
.Version resd 1 |
|
.DriverRev resd 1 |
|
.OemVendorName resb 80 |
|
.OemCopyright resb 80 |
|
.AvailableModes resd 1 |
|
.TotalMemory resd 1 |
|
.Attributes resd 1 |
|
.BankSize resd 1 |
|
.BankedBasePtr resd 1 |
|
.LinearSize resd 1 |
|
.LinearBasePtr resd 1 |
|
.LinearGranularity resd 1 |
|
.IOPortsTable resd 1 |
|
.IOMemoryBase resd 4 |
|
.IOMemoryLen resd 4 |
|
.LinearStridePad resd 1 |
|
.PCIVendorID resw 1 |
|
.PCIDeviceID resw 1 |
|
.PCISubSysVendorID resw 1 |
|
.PCISubSysID resw 1 |
|
.Checksum resd 1 |
|
.res2 resd 6 |
|
|
|
.IOMemMaps resd 4 |
|
.BankedMem resd 1 |
|
.LinearMem resd 1 |
|
.res3 resd 5 |
|
|
|
.BufferEndX resd 1 |
|
.BufferEndY resd 1 |
|
.OriginOffset resd 1 |
|
.OffscreenOffset resd 1 |
|
.OffscreenStartY resd 1 |
|
.OffscreenEndY resd 1 |
|
.res4 resd 10 |
|
|
|
.SetBank32Len resd 1 |
|
.SetBank32 resd 1 |
|
|
|
.Int86 resd 1 |
|
.CallRealMode resd 1 |
|
|
|
.InitDriver resd 1 |
|
|
|
.af10Funcs resd 40 |
|
|
|
.PlugAndPlayInit resd 1 |
|
|
|
.OemExt resd 1 |
|
|
|
.SupplementalExt resd 1 |
|
|
|
.GetVideoModeInfo resd 1 |
|
.SetVideoMode resd 1 |
|
.RestoreTextMode resd 1 |
|
.GetClosestPixelClock resd 1 |
|
.SaveRestoreState resd 1 |
|
.SetDisplayStart resd 1 |
|
.SetActiveBuffer resd 1 |
|
.SetVisibleBuffer resd 1 |
|
.GetDisplayStartStatus resd 1 |
|
.EnableStereoMode resd 1 |
|
.SetPaletteData resd 1 |
|
.SetGammaCorrectData resd 1 |
|
.SetBank resd 1 |
|
|
|
.SetCursor resd 1 |
|
.SetCursorPos resd 1 |
|
.SetCursorColor resd 1 |
|
.ShowCursor resd 1 |
|
|
|
.WaitTillIdle resd 1 |
|
.EnableDirectAccess resd 1 |
|
.DisableDirectAccess resd 1 |
|
.SetMix resd 1 |
|
.Set8x8MonoPattern resd 1 |
|
.Set8x8ColorPattern resd 1 |
|
.Use8x8ColorPattern resd 1 |
|
.SetLineStipple resd 1 |
|
.SetLineStippleCount resd 1 |
|
.SetClipRect resd 1 |
|
.DrawScan resd 1 |
|
.DrawPattScan resd 1 |
|
.DrawColorPattScan resd 1 |
|
.DrawScanList resd 1 |
|
.DrawPattScanList resd 1 |
|
.DrawColorPattScanList resd 1 |
|
.DrawRect resd 1 |
|
.DrawPattRect resd 1 |
|
.DrawColorPattRect resd 1 |
|
.DrawLine resd 1 |
|
.DrawStippleLine resd 1 |
|
.DrawTrap resd 1 |
|
.DrawTri resd 1 |
|
.DrawQuad resd 1 |
|
.PutMonoImage resd 1 |
|
.PutMonoImageLin resd 1 |
|
.PutMonoImageBM resd 1 |
|
.BitBlt resd 1 |
|
.BitBltSys resd 1 |
|
.BitBltLin resd 1 |
|
.BitBltBM resd 1 |
|
.SrcTransBlt resd 1 |
|
.SrcTransBltSys resd 1 |
|
.SrcTransBltLin resd 1 |
|
.SrcTransBltBM resd 1 |
|
.DstTransBlt resd 1 |
|
.DstTransBltSys resd 1 |
|
.DstTransBltLin resd 1 |
|
.DstTransBltBM resd 1 |
|
.StretchBlt resd 1 |
|
.StretchBltSys resd 1 |
|
.StretchBltLin resd 1 |
|
.StretchBltBM resd 1 |
|
.SrcTransStretchBlt resd 1 |
|
.SrcTransStretchBltSys resd 1 |
|
.SrcTransStretchBltLin resd 1 |
|
.SrcTransStretchBltBM resd 1 |
|
.DstTransStretchBlt resd 1 |
|
.DstTransStretchBltSys resd 1 |
|
.DstTransStretchBltLin resd 1 |
|
.DstTransStretchBltBM resd 1 |
|
|
|
.SetVideoInput resd 1 |
|
.SetVideoOutput resd 1 |
|
.StartVideoFrame resd 1 |
|
.EndVideoFrame resd 1 |
|
AF_DRIVER_size: |
|
[section .text] |
|
|
|
|
|
[absolute 0] |
|
FAF_KEYBOARD_DATA: |
|
.INT resb 1 |
|
.IRQ resb 1 |
|
.Port resw 1 |
|
FAF_KEYBOARD_DATA_size: |
|
[section .text] |
|
|
|
[section .bss] |
|
|
|
DriverOffset resd 1 |
|
DriverSize resd 1 |
|
InGraphicsMode resb 1 |
|
ModeInfo resb AF_MODE_INFO_size |
|
Filename resb 256 |
|
FreeBEExt resb 1 |
|
|
|
[section .data] |
|
|
|
rcsid db '$Id: vbeaf.asm,v 1.1 2001/11/21 08:41:53 peter Exp $',0 |
|
|
|
VBEAFName db 'VBEAF.DRV', 0 |
|
VBEAFEnv db 'VBEAF_PATH', 0 |
|
|
|
[section .text] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_LoadGraphicsDriver_arglen equ 4 |
|
[global _LoadGraphicsDriver] |
|
_LoadGraphicsDriver: push ebp |
|
mov ebp, esp |
|
|
|
|
|
.Filename equ 8 |
|
|
|
|
|
|
|
.file equ -4 |
|
.STACK_FRAME_SIZE equ 4 |
|
|
|
sub esp, .STACK_FRAME_SIZE |
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push word 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [ebp+.Filename] |
|
|
|
call _OpenFile |
|
add esp, byte _OpenFile_arglen |
|
cmp eax, -1 |
|
je near .error |
|
mov [ebp+.file], eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push word 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [ebp+.file] |
|
|
|
call _SeekFile |
|
add esp, byte _SeekFile_arglen |
|
cmp eax, -1 |
|
je near .error |
|
mov [DriverSize], eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push word 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [ebp+.file] |
|
|
|
call _SeekFile |
|
add esp, byte _SeekFile_arglen |
|
cmp eax, -1 |
|
je .error |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [DriverSize] |
|
|
|
call ___sbrk |
|
add esp, byte ___sbrk_arglen |
|
test eax, eax |
|
jz .error |
|
mov [DriverOffset], eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [DriverSize] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [DriverOffset] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [ebp+.file] |
|
|
|
call _ReadFile |
|
add esp, byte _ReadFile_arglen |
|
cmp eax, [DriverSize] |
|
jne .errorfree |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [ebp+.file] |
|
|
|
call _CloseFile |
|
add esp, byte _CloseFile_arglen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [DriverSize] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword [DriverOffset] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
o16 push cs |
|
|
|
call _LockArea |
|
add esp, byte _LockArea_arglen |
|
xor eax, eax |
|
jmp short .done |
|
|
|
.errorfree: |
|
mov eax, [DriverSize] |
|
neg eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push eax |
|
|
|
call ___sbrk |
|
add esp, byte ___sbrk_arglen |
|
mov dword [DriverOffset], 0 |
|
.error: |
|
xor eax, eax |
|
inc eax |
|
.done: |
|
pop gs |
|
pop fs |
|
pop es |
|
mov esp, ebp |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _InitGraphics] |
|
_InitGraphics: push ebp |
|
mov ebp, esp |
|
|
|
|
|
.kbINT equ 8 |
|
|
|
|
|
.kbIRQ equ 12 |
|
|
|
|
|
.kbPort equ 16 |
|
|
|
|
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
push esi |
|
push edi |
|
|
|
|
|
mov esi, [DriverOffset] |
|
test esi, esi |
|
jnz near .foundit |
|
|
|
|
|
|
|
|
|
|
|
mov ecx, 256 |
|
mov esi, [___dos_argv0] |
|
mov edi, Filename |
|
.argv0copy: |
|
mov al, [esi] |
|
mov [edi], al |
|
inc esi |
|
inc edi |
|
or al, al |
|
jnz .argv0copy |
|
|
|
.findlastslash: |
|
cmp byte [edi], '/' |
|
je .lastslashfound |
|
cmp byte [edi], '\' |
|
je .lastslashfound |
|
cmp edi, Filename |
|
je .lastslashnotfound |
|
dec edi |
|
jmp short .findlastslash |
|
.lastslashfound: |
|
inc edi |
|
|
|
mov ecx, 10 |
|
mov esi, VBEAFName |
|
rep movsb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Filename |
|
|
|
call _LoadGraphicsDriver |
|
add esp, byte _LoadGraphicsDriver_arglen |
|
test eax, eax |
|
jz near .foundit |
|
|
|
.lastslashnotfound: |
|
|
|
mov edi, Filename |
|
mov dword [edi], 'C:\v' |
|
add edi, byte 3 |
|
mov esi, VBEAFName |
|
mov ecx, 10 |
|
rep movsb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Filename |
|
|
|
call _LoadGraphicsDriver |
|
add esp, byte _LoadGraphicsDriver_arglen |
|
test eax, eax |
|
jz .foundit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword VBEAFEnv |
|
|
|
call _getenv |
|
add esp, byte _getenv_arglen |
|
test eax, eax |
|
jz near .error |
|
|
|
|
|
mov ecx, 256 |
|
mov esi, eax |
|
mov edi, Filename |
|
.envcopy: |
|
mov al, [esi] |
|
mov [edi], al |
|
inc esi |
|
inc edi |
|
or al, al |
|
jnz .envcopy |
|
|
|
|
|
dec edi |
|
cmp byte [edi], '/' |
|
je .slashpresent |
|
cmp byte [edi], '\' |
|
je .slashpresent |
|
mov byte [edi], '/' |
|
.slashpresent: |
|
|
|
inc edi |
|
mov esi, VBEAFName |
|
mov ecx, 10 |
|
rep movsb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Filename |
|
|
|
call _LoadGraphicsDriver |
|
add esp, byte _LoadGraphicsDriver_arglen |
|
test eax, eax |
|
jz .foundit |
|
|
|
jmp .error |
|
.foundit: |
|
mov esi, [DriverOffset] |
|
|
|
|
|
cmp dword [esi+AF_DRIVER.Signature], 'VBEA' |
|
jne near .errorfree |
|
cmp dword [esi+AF_DRIVER.Signature+4], 'F.DR' |
|
jne near .errorfree |
|
cmp byte [esi+AF_DRIVER.Signature+8], 'V' |
|
jne near .errorfree |
|
|
|
|
|
cmp word [esi+AF_DRIVER.Version], 0200h |
|
jb near .errorfree |
|
|
|
|
|
mov edi, [esi+AF_DRIVER.OemExt] |
|
add edi, esi |
|
push dword (('I'<<24) | ('N'<<16) | ('I'<<8) | 'T') |
|
push esi |
|
call edi |
|
add esp, byte 8 |
|
|
|
|
|
|
|
cmp al, '0' |
|
jb .noext |
|
cmp al, '9' |
|
ja .noext |
|
cmp ah, '0' |
|
jb .noext |
|
cmp al, '9' |
|
ja .noext |
|
|
|
and eax, 0FFFF0000h |
|
cmp eax, (('E'<<24) | ('X'<<16) | (0<<8) | 0) |
|
jne .noext |
|
|
|
|
|
mov byte [FreeBEExt], 1 |
|
|
|
|
|
push dword (('D'<<24) | ('I'<<16) | ('C'<<8) | 'L') |
|
push esi |
|
call [esi+AF_DRIVER.OemExt] |
|
add esp, byte 8 |
|
test eax, eax |
|
jz .noext |
|
|
|
mov dword [eax], _DispatchCall |
|
|
|
.noext: |
|
|
|
|
|
mov edi, [esi+AF_DRIVER.PlugAndPlayInit] |
|
add edi, esi |
|
mov ebx, esi |
|
call edi |
|
test eax, eax |
|
jnz near .errorfree |
|
|
|
mov esi, [DriverOffset] |
|
|
|
|
|
|
|
|
|
mov edi, [esi+AF_DRIVER.InitDriver] |
|
add edi, esi |
|
mov ebx, esi |
|
call edi |
|
test eax, eax |
|
jnz near .errorfree |
|
|
|
mov esi, [DriverOffset] |
|
|
|
|
|
cmp byte [FreeBEExt], 0 |
|
jz .defaultkb |
|
|
|
|
|
push dword (('K'<<24) | ('E'<<16) | ('Y'<<8) | 'S') |
|
push esi |
|
call [esi+AF_DRIVER.OemExt] |
|
add esp, byte 8 |
|
|
|
|
|
test eax, eax |
|
jz .defaultkb |
|
|
|
|
|
mov edi, eax |
|
mov al, [edi+FAF_KEYBOARD_DATA.INT] |
|
mov ebx, [ebp+.kbINT] |
|
mov [ebx], al |
|
mov al, [edi+FAF_KEYBOARD_DATA.IRQ] |
|
mov ebx, [ebp+.kbIRQ] |
|
mov [ebx], al |
|
mov ax, [edi+FAF_KEYBOARD_DATA.Port] |
|
mov ebx, [ebp+.kbPort] |
|
mov [ebx], ax |
|
|
|
jmp short .retokay |
|
|
|
.defaultkb: |
|
|
|
mov edi, [ebp+.kbINT] |
|
mov byte [edi], 9 |
|
mov edi, [ebp+.kbIRQ] |
|
mov byte [edi], 1 |
|
mov edi, [ebp+.kbPort] |
|
mov word [edi], 60h |
|
|
|
.retokay: |
|
xor eax, eax |
|
jmp short .done |
|
|
|
.errorfree: |
|
mov eax, [DriverSize] |
|
neg eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push eax |
|
|
|
call ___sbrk |
|
add esp, byte ___sbrk_arglen |
|
mov dword [DriverOffset], 0 |
|
.error: |
|
xor eax, eax |
|
inc eax |
|
.done: |
|
pop edi |
|
pop esi |
|
pop gs |
|
pop fs |
|
pop es |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _ExitGraphics] |
|
_ExitGraphics |
|
|
|
|
|
call _UnsetGraphicsMode |
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
push esi |
|
|
|
|
|
mov esi, [DriverOffset] |
|
test esi, esi |
|
jz .notloaded |
|
mov eax, [DriverSize] |
|
neg eax |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push eax |
|
|
|
call ___sbrk |
|
add esp, byte ___sbrk_arglen |
|
mov dword [DriverOffset], 0 |
|
.notloaded: |
|
|
|
pop esi |
|
pop gs |
|
pop fs |
|
pop es |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _FindGraphicsMode] |
|
_FindGraphicsMode: push ebp |
|
mov ebp, esp |
|
|
|
.Width equ 8 |
|
|
|
|
|
.Height equ 10 |
|
|
|
|
|
.Depth equ 12 |
|
|
|
|
|
.Emulated equ 14 |
|
|
|
|
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
push esi |
|
push edi |
|
|
|
mov esi, [DriverOffset] |
|
|
|
|
|
mov edi, [esi+AF_DRIVER.AvailableModes] |
|
.modeloop: |
|
cmp word [edi], -1 |
|
je .notfound |
|
|
|
|
|
push dword ModeInfo |
|
push dword [edi] |
|
push esi |
|
call [esi+AF_DRIVER.GetVideoModeInfo] |
|
add esp, byte 12 |
|
test eax, eax |
|
jnz .nextmode |
|
|
|
|
|
mov ax, [ebp+.Width] |
|
cmp [ModeInfo+AF_MODE_INFO.XResolution], ax |
|
jne .nextmode |
|
|
|
mov ax, [ebp+.Height] |
|
cmp [ModeInfo+AF_MODE_INFO.YResolution], ax |
|
jne .nextmode |
|
|
|
mov ax, [ebp+.Depth] |
|
cmp [ModeInfo+AF_MODE_INFO.BitsPerPixel], ax |
|
jne .nextmode |
|
|
|
|
|
mov eax, [ebp+.Emulated] |
|
test eax, eax |
|
jnz .foundit |
|
|
|
|
|
mov eax, [ModeInfo+AF_MODE_INFO.VideoCapabilities] |
|
cmp eax, (('E'<<24) | ('M'<<16) | ('U'<<8) | 'L') |
|
jne .foundit |
|
|
|
.nextmode: |
|
add edi, byte 2 |
|
jmp short .modeloop |
|
|
|
.foundit: |
|
movzx eax, word [edi] |
|
jmp short .done |
|
.notfound: |
|
xor eax, eax |
|
.done: |
|
pop edi |
|
pop esi |
|
pop gs |
|
pop fs |
|
pop es |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _SetGraphicsMode] |
|
_SetGraphicsMode: push ebp |
|
mov ebp, esp |
|
|
|
.Mode equ 8 |
|
|
|
|
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
|
|
mov eax, [DriverOffset] |
|
xor ecx, ecx |
|
push ecx |
|
inc ecx |
|
push ecx |
|
push dword ModeInfo+AF_MODE_INFO.BytesPerScanLine |
|
movzx ecx, word [ModeInfo+AF_MODE_INFO.YResolution] |
|
push ecx |
|
movzx ecx, word [ModeInfo+AF_MODE_INFO.XResolution] |
|
push ecx |
|
push dword [ebp+.Mode] |
|
push eax |
|
call [eax+AF_DRIVER.SetVideoMode] |
|
add esp, byte 28 |
|
|
|
|
|
mov byte [InGraphicsMode], 1 |
|
|
|
|
|
|
|
pop gs |
|
pop fs |
|
pop es |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _UnsetGraphicsMode] |
|
_UnsetGraphicsMode |
|
|
|
|
|
cmp byte [InGraphicsMode], 0 |
|
jz .notingraphics |
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
push esi |
|
push edi |
|
|
|
|
|
mov esi, [DriverOffset] |
|
|
|
|
|
mov edi, [esi+AF_DRIVER.EnableDirectAccess] |
|
test edi, edi |
|
jz .noEDA |
|
push esi |
|
call edi |
|
add esp, byte 4 |
|
.noEDA: |
|
|
|
mov edi, [esi+AF_DRIVER.WaitTillIdle] |
|
test edi, edi |
|
jz .noWTI |
|
push esi |
|
call edi |
|
add esp, byte 4 |
|
.noWTI: |
|
|
|
push esi |
|
call [esi+AF_DRIVER.RestoreTextMode] |
|
add esp, byte 4 |
|
|
|
|
|
mov byte [InGraphicsMode], 0 |
|
|
|
pop edi |
|
pop esi |
|
pop gs |
|
pop fs |
|
pop es |
|
|
|
.notingraphics: |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _CopyToScreen] |
|
_CopyToScreen: push ebp |
|
mov ebp, esp |
|
|
|
|
|
.Source equ 8 |
|
|
|
|
|
.SourcePitch equ 12 |
|
|
|
|
|
.SourceLeft equ 16 |
|
|
|
|
|
.SourceTop equ 20 |
|
|
|
|
|
.Width equ 24 |
|
|
|
|
|
.Height equ 28 |
|
|
|
|
|
.DestLeft equ 32 |
|
|
|
|
|
.DestTop equ 36 |
|
|
|
|
|
|
|
push es |
|
push fs |
|
push gs |
|
mov gs, [_djgpp_gs] |
|
mov fs, [_djgpp_fs] |
|
mov es, [_djgpp_es] |
|
push esi |
|
|
|
mov esi, [DriverOffset] |
|
cmp dword [esi+AF_DRIVER.BitBltSys], 0 |
|
jz .NoBitBltSys |
|
|
|
|
|
|
|
push dword 0 |
|
push dword [ebp+.DestTop] |
|
push dword [ebp+.DestLeft] |
|
push dword [ebp+.Height] |
|
push dword [ebp+.Width] |
|
push dword [ebp+.SourceTop] |
|
push dword [ebp+.SourceLeft] |
|
push dword [ebp+.SourcePitch] |
|
push dword [ebp+.Source] |
|
push esi |
|
call [esi+AF_DRIVER.BitBltSys] |
|
add esp, byte 40 |
|
|
|
|
|
.NoBitBltSys: |
|
|
|
|
|
.done: |
|
pop esi |
|
pop gs |
|
pop fs |
|
pop es |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _DispatchCall] |
|
_DispatchCall: push ebp |
|
mov ebp, esp |
|
|
|
|
|
.Handle equ 8 |
|
|
|
|
|
.Command equ 12 |
|
|
|
|
|
.Data equ 16 |
|
|
|
|
|
|
|
push fs |
|
push esi |
|
|
|
mov eax, ds |
|
mov fs, eax |
|
|
|
mov eax, [ebp+.Command] |
|
shl eax, 16 |
|
mov ax, [ebp+.Handle] |
|
clc |
|
mov esi, [ebp+.Data] |
|
db 0C4h, 0C4h, 058h, 002h |
|
salc |
|
movsx eax, al |
|
|
|
pop esi |
|
pop fs |
|
mov esp, ebp |
|
pop ebp |
|
ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|