source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrintCfg.asm @ 3

Last change on this file since 3 was 3, checked in by aitotat, 14 years ago
File size: 6.4 KB
Line 
1; File name     :   BootMenuPrintCfg.asm
2; Project name  :   IDE BIOS
3; Created date  :   28.3.2010
4; Last update   :   9.4.2010
5; Author        :   Tomi Tilli
6; Description   :   Functions for printing drive configuration
7;                   information on Boot Menu.
8
9; Section containing code
10SECTION .text
11
12;--------------------------------------------------------------------
13; Prints Hard Disk configuration for drive handled by our BIOS.
14; Cursor is set to configuration header string position.
15;
16; BootMenuPrintCfg_ForOurDrive
17;   Parameters:
18;       DS:DI:  Ptr to DPT
19;   Returns:
20;       Nothing
21;   Corrupts registers:
22;       AX, BX, CX, DX, SI, ES
23;--------------------------------------------------------------------
24ALIGN JUMP_ALIGN
25BootMenuPrintCfg_ForOurDrive:
26    call    BootMenuPrintCfg_HeaderAndChangeLine
27    call    BootMenuPrintCfg_GetPointers
28    call    BootMenuPrintCfg_PushAndFormatCfgString
29    jmp     BootMenuPrint_ClearOneInfoLine
30
31
32;--------------------------------------------------------------------
33; Prints configuration header and changes for printing values.
34;
35; BootMenuPrintCfg_HeaderAndChangeLine
36;   Parameters:
37;       Nothing
38;   Returns:
39;       Nothing
40;   Corrupts registers:
41;       AX, BX, DX
42;--------------------------------------------------------------------
43ALIGN JUMP_ALIGN
44BootMenuPrintCfg_HeaderAndChangeLine:
45    mov     si, g_szCfgHeader
46    call    PrintString_FromCS
47    jmp     BootMenuPrint_ClearOneInfoLine
48
49
50;--------------------------------------------------------------------
51; Return all necessary pointers to drive information structs.
52;
53; BootMenuPrintCfg_GetPointers
54;   Parameters:
55;       DS:DI:  Ptr to DPT
56;   Returns:
57;       DS:DI:  Ptr to DPT
58;       ES:BX:  Ptr to BOOTNFO
59;       CS:SI:  Ptr to IDEVARS
60;   Corrupts registers:
61;       AX, DL
62;--------------------------------------------------------------------
63ALIGN JUMP_ALIGN
64BootMenuPrintCfg_GetPointers:
65    mov     dl, [di+DPT.bDrvNum]        ; Load Drive number to DL
66    call    BootInfo_GetOffsetToBX      ; ES:BX now points...
67    LOAD_BDA_SEGMENT_TO es, ax          ; ...to BOOTNFO
68    mov     al, [di+DPT.bIdeOff]
69    xchg    si, ax                      ; CS:SI now points to IDEVARS
70    ret
71
72
73;--------------------------------------------------------------------
74; Pushes all string formatting parameters and prints
75; formatted configuration string.
76;
77; BootMenuPrintCfg_PushAndFormatCfgString
78;   Parameters:
79;       DS:DI:  Ptr to DPT
80;       ES:BX:  Ptr to BOOTNFO
81;       CS:SI:  Ptr to IDEVARS
82;   Returns:
83;       Nothing
84;   Corrupts registers:
85;       AX, CX, DX, SI
86;--------------------------------------------------------------------
87ALIGN JUMP_ALIGN
88BootMenuPrintCfg_PushAndFormatCfgString:
89    ; Fall to first push below
90
91;--------------------------------------------------------------------
92; BootMenuPrintCfg_PushResetStatus
93;   Parameters:
94;       DS:DI:  Ptr to DPT
95;       ES:BX:  Ptr to BOOTNFO
96;       CS:SI:  Ptr to IDEVARS
97;   Returns:
98;       Nothing (falls to next push below)
99;   Corrupts registers:
100;       AX
101;--------------------------------------------------------------------
102BootMenuPrintCfg_PushResetStatus:
103    eMOVZX  ax, BYTE [di+DPT.bReset]
104    push    ax
105
106;--------------------------------------------------------------------
107; BootMenuPrintCfg_PushIRQ
108;   Parameters:
109;       DS:DI:  Ptr to DPT
110;       ES:BX:  Ptr to BOOTNFO
111;       CS:SI:  Ptr to IDEVARS
112;   Returns:
113;       Nothing (falls to next push below)
114;   Corrupts registers:
115;       AX, DX
116;--------------------------------------------------------------------
117BootMenuPrintCfg_PushIRQ:
118    mov     dl, ' '                     ; Load space to DL
119    mov     al, [cs:si+IDEVARS.bIRQ]
120    test    al, al                      ; Interrupts disabled?
121    jz      SHORT .PushIrqDisabled
122    add     al, '0'                     ; Digit to ASCII
123    cmp     al, '9'                     ; Only one digit needed?
124    jbe     SHORT .PushCharacters
125
126    ; Two digits needed
127    sub     al, 10                      ; Limit to single digit ASCII
128    mov     dl, '1'                     ; Load '1 to DX
129    jmp     SHORT .PushCharacters
130ALIGN JUMP_ALIGN
131.PushIrqDisabled:
132    mov     al, '-'                     ; Load line to AL
133    xchg    ax, dx                      ; Space to AL, line to DL
134ALIGN JUMP_ALIGN
135.PushCharacters:
136    push    ax
137    push    dx
138
139;--------------------------------------------------------------------
140; BootMenuPrintCfg_PushBusType
141;   Parameters:
142;       DS:DI:  Ptr to DPT
143;       ES:BX:  Ptr to BOOTNFO
144;       CS:SI:  Ptr to IDEVARS
145;   Returns:
146;       Nothing (jumps to next push below)
147;   Corrupts registers:
148;       AX, DX
149;--------------------------------------------------------------------
150BootMenuPrintCfg_PushBusType:
151    xchg    ax, bx      ; Store BX to AX
152    eMOVZX  bx, BYTE [cs:si+IDEVARS.bBusType]
153    mov     bx, [cs:bx+.rgwBusTypeValues]   ; Char to BL, Int to BH 
154    eMOVZX  dx, bh
155    push    dx          ; Push 8, 16 or 32
156    push    bx          ; Push character
157    xchg    bx, ax      ; Restore BX
158    jmp     SHORT .NextPush
159ALIGN WORD_ALIGN
160.rgwBusTypeValues:
161    db      'D', 8      ; BUS_TYPE_8_DUAL
162    db      ' ', 16     ; BUS_TYPE_16
163    db      ' ', 32     ; BUS_TYPE_32
164    db      'S', 8      ; BUS_TYPE_8_SINGLE
165ALIGN JUMP_ALIGN
166.NextPush:
167
168;--------------------------------------------------------------------
169; BootMenuPrintCfg_PushBlockMode
170;   Parameters:
171;       DS:DI:  Ptr to DPT
172;       ES:BX:  Ptr to BOOTNFO
173;       CS:SI:  Ptr to IDEVARS
174;   Returns:
175;       Nothing (falls to next push below)
176;   Corrupts registers:
177;       AX
178;--------------------------------------------------------------------
179BootMenuPrintCfg_PushBlockMode:
180    eMOVZX  ax, BYTE [di+DPT.bSetBlock]
181    push    ax
182
183;--------------------------------------------------------------------
184; BootMenuPrintCfg_PushAddressingMode
185;   Parameters:
186;       DS:DI:  Ptr to DPT
187;       ES:BX:  Ptr to BOOTNFO
188;       CS:SI:  Ptr to IDEVARS
189;   Returns:
190;       Nothing (jumps to next push below)
191;   Corrupts registers:
192;       AX, DX
193;--------------------------------------------------------------------
194BootMenuPrintCfg_PushAddressingMode:
195    mov     dx, bx              ; Backup BX to DX
196    mov     bx, MASK_DPT_ADDR   ; Load addressing mode mask
197    and     bl, [di+DPT.bFlags] ; Addressing mode now in BX
198    push    WORD [cs:bx+.rgszAddressingModeString]
199    mov     bx, dx
200    jmp     SHORT .NextPush
201ALIGN WORD_ALIGN
202.rgszAddressingModeString:
203    dw  g_szLCHS
204    dw  g_szPCHS
205    dw  g_szLBA28
206    dw  g_szLBA48
207ALIGN JUMP_ALIGN
208.NextPush:
209
210;--------------------------------------------------------------------
211; Prints formatted configuration string from parameters pushed to stack.
212;
213; BootMenuPrintCfg_ValuesFromStack
214;   Parameters:
215;       Stack:  All formatting parameters
216;   Returns:
217;       Nothing
218;   Corrupts registers:
219;       AX, CX, DX, SI
220;--------------------------------------------------------------------
221BootMenuPrintCfg_ValuesFromStack:
222    mov     si, g_szCfgFormat
223    mov     dh, 14                      ; 14 bytes pushed to stack
224    jmp     PrintString_JumpToFormat
Note: See TracBrowser for help on using the repository browser.