source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrint.asm @ 194

Last change on this file since 194 was 194, checked in by gregli@…, 12 years ago

ifdef'd out more unused code. Also added a tool for looking through the listing and the output of the precompiler to aid in finding dead code. Some changes in the files are to add annotations for the tool to avoid false positives.

File size: 15.5 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Functions for printing boot menu strings.
3
4; Section containing code
5SECTION .text
6
7;;;
8;;; Fall-through from BootMenuEvent.asm!
9;;; BootMenuPrint_FloppyMenuitem must be the first routine in this file
10;;; (checked at assembler time with the code after BootMenuPrint_FloppyMenuitem)
11;;;
12;--------------------------------------------------------------------
13; BootMenuPrint_FloppyMenuitem
14;   Parameters:
15;       DL:     Untranslated Floppy Drive number
16;       SF:     set for Information, clear for Item
17;   Returns:
18;       Nothing
19;   Corrupts registers:
20;       AX, DX, SI, DI
21;--------------------------------------------------------------------
22ALIGN JUMP_ALIGN
23BootMenuPrint_FloppyMenuitem:
24    js      short BootMenuPrint_FloppyMenuitemInformation
25    call    PrintDriveNumberAfterTranslationFromDL
26    push    bp
27    mov     bp, sp
28    mov     si, g_szFDLetter
29    ePUSH_T ax, g_szFloppyDrv
30    add     dl, 'A'
31    push    dx                  ; Drive letter
32    jmp     short BootMenuPrint_FormatCSSIfromParamsInSSBP
33
34%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
35%if BootMenuPrint_FloppyMenuitem <> BootMenuEvent_FallThroughToFloppyMenuitem
36%error "BootMenuPrint.asm must follow BootMenuEvent.asm, and BootMenuPrint_FloppyMenuitem must be the first routine in BootMenuPrint.asm"
37%endif
38%endif
39       
40;--------------------------------------------------------------------
41; ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
42;   Parameters:
43;       BX:DX:AX:   Sector count
44;   Returns:
45;       Size in stack
46;   Corrupts registers:
47;       AX, BX, CX, DX, SI
48;--------------------------------------------------------------------
49ALIGN JUMP_ALIGN
50ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
51    pop     si      ; Pop return address
52    call    Size_ConvertSectorCountInBXDXAXtoKiB
53    mov     cx, BYTE_MULTIPLES.kiB
54    call    Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
55    push    ax      ; Size in magnitude
56    push    cx      ; Tenths
57    push    dx      ; Magnitude character
58    jmp     si
59
60
61;--------------------------------------------------------------------
62; Prints Boot Menu title strings.
63;
64; BootMenuPrint_TitleStrings
65;   Parameters:
66;       Nothing
67;   Returns:
68;       CF:     Set since menu event handled
69;   Corrupts registers:
70;       AX, SI, DI
71;--------------------------------------------------------------------
72ALIGN JUMP_ALIGN
73BootMenuPrint_TitleStrings:
74    mov     si, ROMVARS.szTitle
75    call    BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
76    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
77    mov     si, ROMVARS.szVersion
78    ; Fall to BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
79
80
81;--------------------------------------------------------------------
82; BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
83;   Parameters:
84;       CS:SI:  Ptr to NULL terminated string to print
85;   Returns:
86;       CF:     Set since menu event was handled successfully
87;   Corrupts registers:
88;       AX, DI
89;--------------------------------------------------------------------
90ALIGN JUMP_ALIGN
91BootMenuPrint_NullTerminatedStringFromCSSIandSetCF:
92;
93; We send all CSSI strings through the Format routine for the case of
94; compressed strings, but this doesn't hurt in the non-compressed case either
95; (perhaps a little slower, but shouldn't be noticeable to the user)
96; and results in smaller code size.
97;
98    push    bp
99    mov     bp,sp
100    jmp     short BootMenuPrint_FormatCSSIfromParamsInSSBP
101
102       
103;--------------------------------------------------------------------
104; BootMenuPrint_HardDiskMenuitem
105;   Parameters:
106;       DL:     Untranslated Hard Disk number
107;       DS:     RAMVARS segment
108;       SF:     set for Information, clear for Item     
109;   Returns:
110;       CF:     Set since menu event handled
111;   Corrupts registers:
112;       AX, BX, SI, DI
113;--------------------------------------------------------------------
114ALIGN JUMP_ALIGN
115BootMenuPrint_HardDiskMenuitem:
116    js      short BootMenuPrint_HardDiskMenuitemInformation
117    call    PrintDriveNumberAfterTranslationFromDL
118    call    RamVars_IsDriveHandledByThisBIOS
119    jnc     SHORT .HardDiskMenuitemForForeignDrive
120    ; Fall to .HardDiskMenuitemForOurDrive
121
122;--------------------------------------------------------------------
123; .HardDiskMenuitemForOurDrive
124;   Parameters:
125;       DL:     Untranslated Hard Disk number
126;       DS:     RAMVARS segment
127;   Returns:
128;       CF:     Set since menu event handled
129;   Corrupts registers:
130;       AX, BX, SI, DI
131;--------------------------------------------------------------------
132.HardDiskMenuitemForOurDrive:
133    call    BootInfo_GetOffsetToBX
134    lea     si, [bx+BOOTNFO.szDrvName]
135    xor     bx, bx          ; BDA segment
136    CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromBXSI
137    stc
138    ret
139
140;--------------------------------------------------------------------
141; BootMenuPrint_HardDiskMenuitemForForeignDrive
142;   Parameters:
143;       DL:     Untranslated Hard Disk number
144;       DS:     RAMVARS segment
145;   Returns:
146;       CF:     Set since menu event handled
147;   Corrupts registers:
148;       AX, SI, DI
149;--------------------------------------------------------------------
150ALIGN JUMP_ALIGN
151.HardDiskMenuitemForForeignDrive:
152    mov     si, g_szforeignHD
153    jmp     SHORT BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
154
155
156;--------------------------------------------------------------------
157; BootMenuPrint_FloppyMenuitemInformation
158;   Parameters:
159;       DL:     Untranslated Floppy Drive number
160;       DS:     RAMVARS segment
161;   Returns:
162;       CF:     Set since menu event was handled successfully
163;   Corrupts registers:
164;       AX, BX, CX, DX, SI, DI, ES
165;--------------------------------------------------------------------
166
167FloppyTypes:
168.rgbCapacityMultiplier equ 20           ; Multiplier to reduce word sized values to byte size
169.rgbCapacity:
170    db      360   / FloppyTypes.rgbCapacityMultiplier    ;  type 1
171    db      1200  / FloppyTypes.rgbCapacityMultiplier    ;  type 2
172    db      720   / FloppyTypes.rgbCapacityMultiplier    ;  type 3
173    db      1440  / FloppyTypes.rgbCapacityMultiplier    ;  type 4
174    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 5
175    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 6
176
177%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
178%if g_szFddFiveQuarter <> g_szFddThreeHalf+g_szFddThreeFive_Displacement
179%error "FddThreeFive_Displacement incorrect"
180%endif
181%endif
182       
183ALIGN JUMP_ALIGN
184BootMenuPrint_FloppyMenuitemInformation:
185    call    BootMenuPrint_ClearInformationArea
186    call    FloppyDrive_GetType         ; Get Floppy Drive type to BX
187
188    push    bp
189    mov     bp, sp
190    ePUSH_T ax, g_szCapacity
191       
192    mov     si, g_szFddSizeOr           ; .PrintXTFloppyType
193    test    bx, bx                      ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)     
194    jz      SHORT .output
195
196    mov     si, g_szFddUnknown          ; .PrintUnknownFloppyType
197    cmp     bl, FLOPPY_TYPE_35_ED
198    ja      SHORT .output
199       
200    ; Fall to .PrintKnownFloppyType
201
202
203;--------------------------------------------------------------------
204; .PrintKnownFloppyType
205;   Parameters:
206;       BX:     Floppy drive type
207;   Returns:
208;       CF:     Set since menu event was handled successfully
209;   Corrupts registers:
210;       AX, BX, SI, DI
211; 
212; Floppy Drive Types:
213;
214;   0  Handled above 
215;   1  FLOPPY_TYPE_525_DD          5 1/4   360K
216;   2  FLOPPY_TYPE_525_HD          5 1/4   1.2M
217;   3  FLOPPY_TYPE_35_DD           3 1/2   720K
218;   4  FLOPPY_TYPE_35_HD           3 1/2   1.44M
219;   5  3.5" ED on some BIOSes      3 1/2   2.88M
220;   6  FLOPPY_TYPE_35_ED           3 1/2   2.88M
221;   >6 Unknwon, handled above
222; 
223;--------------------------------------------------------------------
224.PrintKnownFloppyType:
225    mov     si, g_szFddSize
226       
227    mov     ax, g_szFddThreeHalf
228    cmp     bl, FLOPPY_TYPE_525_HD
229    ja      .ThreeHalf
230%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
231%if g_szFddThreeFive_Displacement = 2       
232    inc     ax                      ; compressed string case
233    inc     ax
234%else
235    add     ax, g_szFddThreeFive_Displacement
236%endif
237%endif
238.ThreeHalf:     
239    push    ax                      ; "5 1/4" or "3 1/2"
240
241    mov     al,FloppyTypes.rgbCapacityMultiplier
242    mul     byte [cs:bx+FloppyTypes.rgbCapacity - 1]    ; -1 since 0 is handled above and not in the table
243    push    ax
244
245ALIGN JUMP_ALIGN       
246.output:
247;;; fall-through
248
249;--------------------------------------------------------------------
250; BootMenuPrint_FormatCSSIfromParamsInSSBP
251;   Parameters:
252;       CS:SI:  Ptr to string to format
253;       BP:     SP before pushing parameters
254;   Returns:
255;       BP:     Popped from stack
256;   Corrupts registers:
257;       AX, DI
258;--------------------------------------------------------------------
259ALIGN JUMP_ALIGN
260BootMenuPrint_FormatCSSIfromParamsInSSBP:
261    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
262    stc             ; Successfull return from menu event
263    pop     bp
264    ret     
265
266       
267;--------------------------------------------------------------------
268; Prints Hard Disk Menuitem information strings.
269;
270; BootMenuPrint_HardDiskMenuitemInformation
271;   Parameters:
272;       DL:     Untranslated Hard Disk number
273;       DS:     RAMVARS segment
274;   Returns:
275;       CF:     Set since menu event was handled successfully
276;   Corrupts registers:
277;       BX, CX, DX, SI, DI, ES
278;--------------------------------------------------------------------
279ALIGN JUMP_ALIGN
280BootMenuPrint_HardDiskMenuitemInformation:
281    call    RamVars_IsDriveHandledByThisBIOS
282    jnc     SHORT .HardDiskMenuitemInfoForForeignDrive
283    call    FindDPT_ForDriveNumber      ; DS:DI to point DPT
284    ; Fall to .HardDiskMenuitemInfoForOurDrive
285
286;--------------------------------------------------------------------
287; .HardDiskMenuitemInfoForOurDrive
288;   Parameters:
289;       DL:     Untranslated Hard Disk number
290;       DS:DI:  Ptr to DPT
291;   Returns:
292;       Nothing
293;   Corrupts registers:
294;       AX, BX, CX, DX, SI, DI, ES
295;--------------------------------------------------------------------
296.HardDiskMenuitemInfoForOurDrive:
297    push    di
298    ePUSH_T ax, BootMenuPrintCfg_ForOurDrive    ; Return from BootMenuPrint_FormatCSSIfromParamsInSSBP
299    push    bp
300    mov     bp, sp
301    ePUSH_T ax, g_szCapacity
302
303    ; Get and push L-CHS size
304    mov     [RAMVARS.bTimeoutTicksLeft], dl     ; Store drive number
305    call    AH15h_GetSectorCountToDXAX
306    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
307
308    ; Get and push total LBA size
309    mov     dl, [RAMVARS.bTimeoutTicksLeft]     ; Restore drive number
310    call    BootInfo_GetTotalSectorCount
311    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
312
313    mov     si, g_szSizeDual
314    jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
315
316
317;--------------------------------------------------------------------
318; .HardDiskMenuitemInfoForForeignDrive
319;   Parameters:
320;       DL:     Untranslated Hard Disk number
321;       DS:     RAMVARS segment
322;   Returns:
323;       CF:     Set since menu event was handled successfully
324;   Corrupts registers:
325;       AX, BX, CX, DX, SI, DI
326;--------------------------------------------------------------------
327ALIGN JUMP_ALIGN
328.HardDiskMenuitemInfoForForeignDrive:
329    push    bp
330    mov     bp, sp
331    ePUSH_T ax, g_szCapacity
332
333    call    DriveXlate_ToOrBack
334    call    AH15h_GetSectorCountFromForeignDriveToDXAX
335    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
336
337    mov     si, g_szSizeSingle
338    jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
339
340       
341;--------------------------------------------------------------------
342; BootMenuPrint_ClearInformationArea
343;   Parameters:
344;       Nothing
345;   Returns:
346;       CF:     Set
347;   Corrupts registers:
348;       AX, DI
349;--------------------------------------------------------------------
350ALIGN JUMP_ALIGN
351BootMenuPrint_ClearInformationArea:
352    CALL_MENU_LIBRARY ClearInformationArea
353    stc
354    ret
355
356       
357;--------------------------------------------------------------------
358; BootMenuPrint_ClearScreen
359;   Parameters:
360;       Nothing
361;   Returns:
362;       Nothing
363;   Corrupts registers:
364;       AX, DI
365;--------------------------------------------------------------------
366ALIGN JUMP_ALIGN
367BootMenuPrint_ClearScreen:
368    call    BootMenuPrint_InitializeDisplayContext
369    xor     ax, ax
370    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
371    mov     ax, ' ' | (MONO_NORMAL<<8)
372    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
373    ret
374
375       
376;--------------------------------------------------------------------
377; PrintDriveNumberAfterTranslationFromDL
378;   Parameters:
379;       DL:     Untranslated Floppy Drive number
380;       DS:     RAMVARS segment
381;   Returns:
382;       Nothing
383;   Corrupts registers:
384;       AX, DI
385;--------------------------------------------------------------------
386ALIGN JUMP_ALIGN
387PrintDriveNumberAfterTranslationFromDL:
388    mov     ax, dx
389    call    DriveXlate_ToOrBack
390    xchg    dx, ax              ; Restore DX, WORD to print in AL
391    xor     ah, ah
392    push    bp
393    mov     bp, sp
394    mov     si, g_szDriveNum
395    push    ax
396       
397BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay: 
398    jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
399
400
401;--------------------------------------------------------------------
402; BootMenuPrint_TheBottomOfScreen
403;   Parameters:
404;       DS:     RAMVARS segment
405;   Returns:
406;       Nothing
407;   Corrupts registers:
408;       AX, BX, CX, DX, SI, DI
409;--------------------------------------------------------------------
410ALIGN JUMP_ALIGN
411BootMenuPrint_TheBottomOfScreen:
412    call    FloppyDrive_GetCountToCX
413    mov     bl, cl                  ; Floppy Drive count to BL
414    call    RamVars_GetHardDiskCountFromBDAtoCX
415    mov     bh, cl                  ; Hard Disk count to BH
416    ; Fall to .MoveCursorToHotkeyStrings
417
418;--------------------------------------------------------------------
419; .MoveCursorToHotkeyStrings
420;   Parameters:
421;       Nothing
422;   Returns:
423;       Nothing
424;   Corrupts registers:
425;       AX, DI
426;--------------------------------------------------------------------
427.MoveCursorToHotkeyStrings:
428    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
429    xor     al, al
430    dec     ah
431    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
432    ; Fall to .PrintHotkeyString
433
434;--------------------------------------------------------------------
435; .PrintHotkeyString
436;   Parameters:
437;       BL:     Floppy Drives
438;       BH:     Hard Drives
439;   Returns:
440;       Nothing
441;   Corrupts registers:
442;       AX, CX, DX, SI, DI
443;--------------------------------------------------------------------
444.PrintHotkeyString:
445    ; Display Library should not be called like this
446    mov     si, ATTRIBUTE_CHARS.cHighlightedItem
447    call    MenuAttribute_GetToAXfromTypeInSI
448    xchg    dx, ax
449    mov     cx, MONO_BRIGHT
450
451    test    bl, bl      ; Any Floppy Drives?
452    jz      SHORT .SkipFloppyDriveHotkeys
453    mov     ax, 'A' | (ANGLE_QUOTE_RIGHT<<8)
454    mov     si, g_szFDD
455    call    PushHotkeyParamsAndFormat
456
457.SkipFloppyDriveHotkeys:
458    test    bh, bh      ; Any Hard Drives?
459    jz      SHORT .SkipHardDriveHotkeys
460    xchg    ax, cx      ; Store Key Attribute
461    call    BootMenu_GetLetterForFirstHardDiskToCL
462    mov     ch, ANGLE_QUOTE_RIGHT
463    xchg    ax, cx
464    mov     si, g_szHDD
465    call    PushHotkeyParamsAndFormat
466
467.SkipHardDriveHotkeys:
468    ; Fall to .PrintRomBootHotkey
469
470;--------------------------------------------------------------------
471; .PrintRomBootHotkey
472;   Parameters:
473;       CX:     Key Attribute
474;       DX:     Description Attribute
475;   Returns:
476;       Nothing
477;   Corrupts registers:
478;       AX, SI, DI
479;--------------------------------------------------------------------
480.PrintRomBootHotkey:
481    mov     ax, 'F' | ('8'<<8)      ; F8
482    mov     si, g_szRomBoot
483    ; Fall to PushHotkeyParamsAndFormat
484
485;--------------------------------------------------------------------
486; PushHotkeyParamsAndFormat
487;   Parameters:
488;       AL:     First character
489;       AH:     Second character
490;       CX:     Key Attribute
491;       DX:     Description Attribute
492;       CS:SI:  Description string
493;   Returns:
494;       Nothing
495;   Corrupts registers:
496;       AX, SI, DI
497;--------------------------------------------------------------------
498ALIGN JUMP_ALIGN
499PushHotkeyParamsAndFormat:
500    push    bp
501    mov     bp, sp
502
503    push    cx          ; Key attribute
504    push    ax          ; First character
505    xchg    al, ah
506    push    ax          ; Second character
507    push    dx          ; Description attribute
508    push    si          ; Description string
509    push    cx          ; Key attribute for last space
510    mov     si, g_szHotkey
511    jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay
512
513
514;--------------------------------------------------------------------
515; BootMenuPrint_InitializeDisplayContext
516;   Parameters:
517;       Nothing
518;   Returns:
519;       Nothing
520;   Corrupts registers:
521;       AX, DI
522;--------------------------------------------------------------------
523ALIGN JUMP_ALIGN
524BootMenuPrint_InitializeDisplayContext:
525    CALL_DISPLAY_LIBRARY InitializeDisplayContext
526    ret
527
528
529       
530
531
532       
Note: See TracBrowser for help on using the repository browser.