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

Last change on this file since 517 was 505, checked in by krille_n_@…, 12 years ago

Changes:

  • Reverted the changes to MenuEvents.inc done in r492 since they broke the F1 key function in XTIDECFG.
  • Added a tail-call optimized variant of the CALL_DISPLAY_LIBRARY macro (JMP_DISPLAY_LIBRARY).
  • Put a block size limit in AH1Eh_ChangeXTCFmodeBasedOnControlRegisterInAL. I think it's needed but if not, it's easy to remove.
  • Other optimizations and fixes.
File size: 4.9 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.ideVars0+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags], ax
73
74 mov [di+ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
75 mov [di+ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags], ax
76
77 mov [di+ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
78 mov [di+ROMVARS.ideVars2+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags], ax
79
80 mov [di+ROMVARS.ideVars3+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags], ax
81 mov [di+ROMVARS.ideVars3+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags], ax
82 ret
83
84
85;--------------------------------------------------------------------
86; DetectIdePortsAndDevices
87; Parameters:
88; DS:DI: Ptr to ROMVARS
89; Returns:
90; CX: Number of controllers detected
91; Corrupts registers:
92; AX, BX, DX, SI
93;--------------------------------------------------------------------
94ALIGN JUMP_ALIGN
95DetectIdePortsAndDevices:
96 xor cx, cx ; Number of devices found
97 xor dx, dx ; IDE_PORT_TO_START_DETECTION
98 lea si, [di+ROMVARS.ideVarsBegin] ; DS:SI points to first IDEVARS
99
100.DetectFromNextPort:
101 call IdeAutodetect_IncrementDXtoNextIdeBasePort
102 jz SHORT .AllPortsAlreadyDetected
103 push si
104 call IdeAutodetect_DetectIdeDeviceFromPortDXAndReturnControlBlockInSI
105 mov bx, si
106 pop si
107 jc SHORT .DetectFromNextPort
108
109 ; Device found from port DX, Device Type returned in AL
110 inc cx ; Increment number of controllers found
111 mov [si+IDEVARS.wBasePort], dx
112 mov [si+IDEVARS.wControlBlockPort], bx
113 mov [si+IDEVARS.bDevice], al
114
115 ; Point to next IDEVARS
116 add si, IDEVARS_size
117 cmp si, ROMVARS.ideVars3
118 jbe SHORT .DetectFromNextPort
119.AllPortsAlreadyDetected:
120 ret
121
122
123;--------------------------------------------------------------------
124; StoreAndDisplayNumberOfControllers
125; Parameters:
126; CX: Number of controllers detected
127; DS:DI: Ptr to ROMVARS
128; SS:BP: Ptr to MENU
129; Returns:
130; Nothing
131; Corrupts registers:
132; AX, BX, DX, DI, SI, DS, ES
133;--------------------------------------------------------------------
134ALIGN JUMP_ALIGN
135StoreAndDisplayNumberOfControllers:
136 mov ax, 1
137 MAX_U al, cl ; Cannot store zero
138 test BYTE [di+ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
139 jnz SHORT .FullModeSoNoNeedToLimit
140 MIN_U al, MAX_LITE_MODE_CONTROLLERS
141.FullModeSoNoNeedToLimit:
142
143 ; Store number of IDE Controllers. This will also modify
144 ; menu and set unsaved changes flag.
145 push cs
146 pop ds
147 mov si, g_MenuitemConfigurationIdeControllers
148 call Menuitem_StoreValueFromAXtoMenuitemInDSSI
149
150 ; Display results (should be changed to proper string formatting)
151 add cl, '0'
152 mov [cs:g_bControllersDetected], cl
153 mov dx, g_szDlgAutoConfigure
154 jmp Dialogs_DisplayNotificationFromCSDX
Note: See TracBrowser for help on using the repository browser.