impulsetracker/it_vesa.s

217 lines
7.6 KiB
ArmAsm

;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Vesa Module ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ Functions provided: ³
;³ DetectVESA ³
;³ SetVESAMode ³
;³ ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ DetectVESA ³
;³ - No parameters required ³
;³ - Detects the presence of a VESA driver ³
;³ - Returns carry SET if no VESA driver found ³
;³ - Returns carry CLEAR if VESA driver found ³
;³ - All registers preserved ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ SetVESAMode ³
;³ - Requires AX = VESA Mode ³
;³ - Returns carry SET if VESA Mode isn't supported ³
;³ - Returns carry CLEAR if VESA mode change OK ³
;³ - All registers preserved ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ VESAGetInfo ³
;³ - Requires AX = VESA Mode to get information on ³
;³ - Returns carry SET if VESA Mode isn't supported ³
;³ - Returns carry clear if information is OK ³
;³ - Returns ES:DI to Table, all other registers preserved ³
;³ ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
%include "switch.inc"
%IF SPECTRUMANALYSER
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Externals ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Globals ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
;Segment Vesa BYTE Public 'Code' USE16
%warning "USE16"
section .text
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Variables ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
VESAInformationTable:; Label
VESASignature DB 4 Dup (0)
VESAVersion DW 0
VESAOEMStringPrt DD 0
VESACapabilities DD 0
VESAVideoModePtr DD 0
VESATotalMemory DW 0
DB 256-($-VESAInformationTable) Dup(0)
VESAModeInformationTable:; Label
DB 256-($-VESAModeInformationTable) Dup (0)
ModeInformationStructure Struc
ModeAtributes DW ?
WindowAAtributes DB ?
WindowBAttributes DB ?
WindowGranularity DW ?
WindowSize DW ?
WindowASegment DW ?
WindowBSegment DW ?
WindowFunction DD ?
BytesPerScanLine DW ?
XResolution DW ?
YResolution DW ?
XCharacterSize DB ?
YCharacterSize DB ?
NumberOfPlanes DB ?
BitsPerPixel DB ?
NumberOfBanks DB ?
MemoryModel DB ?
BankSize DB ?
NumberOfImagePages DB ?
Reserved DB ?
RedMaskSize DB ?
RedFieldPosition DB ?
GreenMaskSize DB ?
GreenFieldPosition DB ?
BlueMaskSize DB ?
BlueFieldPosition DB ?
RSVDMaskSize DB ?
DirectColourModeInfo DB ?
ModeInformationStructure EndS
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Functions ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
VESA_Detect:; Far
global VESA_Detect
PushA
Push ES
Mov AX, 4F00h
Push CS
Pop ES
Mov DI, Offset VESAInformationTable
Int 10h
Cmp AX, 4Fh
JNE DetectVESA1
Cmp [DWord Ptr ES:DI], "ASEV" ; 'VESA' identification
JNE DetectVESA1
DB 85h
DetectVESA1:
StC
Pop ES
PopA
Ret
;EndP VESA_Detect
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
VESA_SetMode:; Far
global VESA_SetMode
PushA
Push DS
Push ES
Call VESA_GetInfo
JC VESA_SetMode3
Mov BX, AX
Mov AX, 4F02h ; Set Mode
Int 10h
Cmp AX, 4Fh
JE VESA_SetMode3
StC
VESA_SetMode3:
Pop ES
Pop DS
PopA
Mov CX, [VESAModeInformationTable.XResolution]
Mov DX, [VESAModeInformationTable.YResolution]
Ret
;EndP VESA_SetMode
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
VESA_GetInfo:
global VESA_GetInfo
Push AX
Push CX
Mov CX, AX
Push CS
Pop ES
Mov DI, Offset VESAModeInformationTable
Mov AX, 4F01h
Int 10h
Cmp AX, 4Fh
JE VESA_GetInfo1
StC
VESA_GetInfo1:
Pop CX
Pop AX
Ret
;EndP VESA_GetInfo
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
VESA_SetBlock:; Far ; Gives access to a 64kb block
global VESA_SetBlock ; Given AX = block number.
PushA
Push AX
Mov AX, 64
Xor DX, DX
Div Word Ptr [VESAModeInformationTable.WindowGranularity]
Mov DX, AX
Pop AX
Mul DX
Mov DX, AX
Xor BX, BX
Call DWord Ptr [VESAModeInformationTable.WindowFunction]
PopA
Ret
;EndP VESA_SetBlock
%ENDIF