source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/AutoConfigure.asm @ 497

Last change on this file since 497 was 497, checked in by aitotat@…, 11 years ago

Changes to Configurator v2:

  • Added Auto Configure.
File size: 5.5 KB
Line 
1; Project name  :   XTIDE Universal BIOS Configurator v2
2; Description   :   Functions to automatically configure XTIDE
3;                   Universal BIOS for current system.
4
5;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
8;
9; This program is free software; you can redistribute it and/or modify
10; it under the terms of the GNU General Public License as published by
11; the Free Software Foundation; either version 2 of the License, or
12; (at your option) any later version.
13;
14; This program is distributed in the hope that it will be useful,
15; but WITHOUT ANY WARRANTY; without even the implied warranty of
16; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17; GNU General Public License for more details.
18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19;
20
21; Section containing code
22SECTION .text
23
24
25;--------------------------------------------------------------------
26; AutoConfigure_ForThisSystem
27; MENUITEM activation function (.fnActivate)
28;   Parameters:
29;       SS:BP:  Ptr to MENU
30;   Returns:
31;       Nothing
32;   Corrupts registers:
33;       All, except segments
34;--------------------------------------------------------------------
35ALIGN JUMP_ALIGN
36AutoConfigure_ForThisSystem:
37    push    es
38    push    ds
39
40    call    Buffers_GetFileBufferToESDI     ; ROMVARS now in ES:DI
41    push    es
42    pop     ds                              ; ROMVARS now in DS:DI
43    call    ResetIdevarsToDefaultValues
44    call    DetectIdePortsAndDevices
45    call    StoreAndDisplayNumberOfControllers
46
47    pop     ds
48    pop     es
49    ret
50
51
52;--------------------------------------------------------------------
53; ResetIdevarsToDefaultValues
54;   Parameters:
55;       DS:DI:  Ptr to ROMVARS
56;   Returns:
57;       Nothing
58;   Corrupts registers:
59;       AX, CX
60;--------------------------------------------------------------------
61ALIGN JUMP_ALIGN
62ResetIdevarsToDefaultValues:
63    push    di
64    add     di, BYTE ROMVARS.ideVarsBegin
65    mov     cx, ROMVARS.ideVarsEnd - ROMVARS.ideVarsBegin
66    call    Memory_ZeroESDIwithSizeInCX ; Never clears ROMVARS.ideVarsSerialAuto
67    pop     di
68
69    ; Set default values (other than zero)
70    mov     ax, DISABLE_WRITE_CACHE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION) | FLG_DRVPARAMS_BLOCKMODE
71    mov     [di+ROMVARS.ideVars0+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
72    mov     [di+ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
73    mov     [di+ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
74    mov     [di+ROMVARS.ideVars3+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
75    ret
76
77
78;--------------------------------------------------------------------
79; DetectIdePortsAndDevices
80;   Parameters:
81;       DS:DI:  Ptr to ROMVARS
82;   Returns:
83;       CX:     Number of controllers detected
84;   Corrupts registers:
85;       AX, BX, DX, SI
86;--------------------------------------------------------------------
87ALIGN JUMP_ALIGN
88DetectIdePortsAndDevices:
89    xor     cx, cx                          ; Number of devices found
90    xor     dx, dx                          ; IDE_PORT_TO_START_DETECTION
91    lea     si, [di+ROMVARS.ideVarsBegin]   ; DS:SI points to first IDEVARS
92
93.DetectFromNextPort:
94    call    IdeAutodetect_IncrementDXtoNextIdeBasePort
95    jz      SHORT .AllPortsAlreadyDetected
96    push    cx
97    call    IdeAutodetect_DetectIdeDeviceFromPortDX
98    pop     cx
99    jc      SHORT .DetectFromNextPort
100
101    ; Device found from port DX, Device Type returned in AL
102    inc     cx  ; Increment number of controllers found
103    call    GetControlBlockPortToBXfromDeviceTypeInALandBasePortInDX
104    mov     [si+IDEVARS.wBasePort], dx
105    mov     [si+IDEVARS.wControlBlockPort], bx
106    mov     [si+IDEVARS.bDevice], al
107
108    ; Point to next IDEVARS
109    cmp     si, ROMVARS.ideVars3
110    jae     SHORT .AllPortsAlreadyDetected
111    add     si, IDEVARS_size
112    jmp     SHORT .DetectFromNextPort
113.AllPortsAlreadyDetected:
114    ret
115
116
117;--------------------------------------------------------------------
118; GetControlBlockPortToBXfromDeviceTypeInALandBasePortInDX
119;   Parameters:
120;       AL:     Device Type
121;       DX:     Base port
122;   Returns:
123;       BX:     Control Block Port
124;   Corrupts registers:
125;       Nothing
126;--------------------------------------------------------------------
127ALIGN JUMP_ALIGN
128GetControlBlockPortToBXfromDeviceTypeInALandBasePortInDX:
129    mov     bx, dx
130    cmp     al, DEVICE_8BIT_XTIDE_REV1
131    jae     SHORT .NonStandardControlBlockPortLocation
132
133    ; Standard IDE Devices
134    add     bx, STANDARD_CONTROL_BLOCK_OFFSET
135    ret
136
137.NonStandardControlBlockPortLocation:
138    cmp     al, DEVICE_8BIT_JRIDE_ISA
139    je      SHORT .JrIdeIsaDoesNotNeedControlBlockAddress
140
141    ; 8-bit Devices
142    add     bx, BYTE XTIDE_CONTROL_BLOCK_OFFSET ; XT-CF also
143.JrIdeIsaDoesNotNeedControlBlockAddress:
144    ret
145
146
147;--------------------------------------------------------------------
148; StoreAndDisplayNumberOfControllers
149;   Parameters:
150;       CX:     Number of controllers detected
151;       DS:DI:  Ptr to ROMVARS
152;       SS:BP:  Ptr to MENU
153;   Returns:
154;       Nothing
155;   Corrupts registers:
156;       AX, BX, DX, DI, SI, DS, ES
157;--------------------------------------------------------------------
158ALIGN JUMP_ALIGN
159StoreAndDisplayNumberOfControllers:
160    mov     ax, 1
161    MAX_U   al, cl                      ; Cannot store zero
162    test    BYTE [di+ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
163    jnz     SHORT .FullModeSoNoNeedToLimit
164    MIN_U   al, MAX_LITE_MODE_CONTROLLERS
165.FullModeSoNoNeedToLimit:
166
167    ; Store number of IDE Controllers. This will also modify
168    ; menu and set unsaved changes flag.
169    push    cs
170    pop     ds
171    mov     si, g_MenuitemConfigurationIdeControllers
172    call    Menuitem_StoreValueFromAXtoMenuitemInDSSI
173
174    ; Display results (should be changed to proper string formatting)
175    add     cl, '0'
176    mov     [cs:g_bControllersDetected], cl
177    mov     dx, g_szDlgAutoConfigure
178    jmp     Dialogs_DisplayNotificationFromCSDX
Note: See TracBrowser for help on using the repository browser.