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

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

Optimized away some long jumps, by rearranging routines within files, and file order within main.asm. Also added some 'relay' entry points for popular destinations, so that a short jump can go to an existing short jump and then on to the final destination, instead of using a long jump - clearly space over speed optimization. All 'relay's are limited to the UI code, and will not have an impact on IDE operational performance.

File size: 3.8 KB
RevLine 
[88]1; Project name  :   XTIDE Universal BIOS
[3]2; Description   :   Functions for printing drive configuration
3;                   information on Boot Menu.
4
5; Section containing code
6SECTION .text
7
8;--------------------------------------------------------------------
9; Prints Hard Disk configuration for drive handled by our BIOS.
10; Cursor is set to configuration header string position.
11;
12; BootMenuPrintCfg_ForOurDrive
13;   Parameters:
[127]14;       DS:     Segment to DPT
15;       Stack:  Offset to DPT
[3]16;   Returns:
17;       Nothing
18;   Corrupts registers:
[150]19;       AX, BX, CX, DX, SI, DI
[3]20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22BootMenuPrintCfg_ForOurDrive:
[96]23    mov     si, g_szCfgHeader
24    call    BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
[186]25    pop     di
[150]26    eMOVZX  ax, BYTE [di+DPT.bIdevarsOffset]
27    xchg    si, ax                      ; CS:SI now points to IDEVARS
[96]28    ; Fall to PushAndFormatCfgString
[3]29
30;--------------------------------------------------------------------
[96]31; PushAndFormatCfgString
[3]32;   Parameters:
33;       DS:DI:  Ptr to DPT
34;       CS:SI:  Ptr to IDEVARS
35;   Returns:
36;       Nothing
37;   Corrupts registers:
[88]38;       AX, DX, SI, DI
[3]39;--------------------------------------------------------------------
[96]40PushAndFormatCfgString:
[88]41    push    bp
42    mov     bp, sp
[3]43    ; Fall to first push below
44
45;--------------------------------------------------------------------
[88]46; PushAddressingMode
[3]47;   Parameters:
48;       DS:DI:  Ptr to DPT
49;       CS:SI:  Ptr to IDEVARS
50;   Returns:
[88]51;       Nothing (jumps to next push below)
[3]52;   Corrupts registers:
[191]53;       AX, BX
[3]54;--------------------------------------------------------------------
[88]55PushAddressingMode:
[191]56    call    AccessDPT_GetAddressingModeToAXZF
57    mov     bl,g_szAddressingModes_Displacement
[182]58    mul     bl
59    add     ax,g_szAddressingModes
60    push    ax
61       
[3]62;--------------------------------------------------------------------
[88]63; PushBlockMode
[3]64;   Parameters:
65;       DS:DI:  Ptr to DPT
66;       CS:SI:  Ptr to IDEVARS
67;   Returns:
68;       Nothing (falls to next push below)
69;   Corrupts registers:
[88]70;       AX
[3]71;--------------------------------------------------------------------
[88]72PushBlockMode:
[150]73    mov     ax, 1
[158]74    test    BYTE [di+DPT.bFlagsHigh], FLGH_DPT_BLOCK_MODE_SUPPORTED
[150]75    jz      SHORT .PushBlockSizeFromAX
76    mov     al, [di+DPT_ATA.bSetBlock]
77.PushBlockSizeFromAX:
[3]78    push    ax
79
80;--------------------------------------------------------------------
[88]81; PushBusType
[3]82;   Parameters:
83;       DS:DI:  Ptr to DPT
84;       CS:SI:  Ptr to IDEVARS
85;   Returns:
86;       Nothing (jumps to next push below)
87;   Corrupts registers:
88;       AX, DX
89;--------------------------------------------------------------------
[181]90;PushBusType:
[182]91    mov     al,g_szBusTypeValues_Displacement
92    mul     BYTE [cs:si+IDEVARS.bDevice]
[186]93       
94    shr     ax,1            ; divide by 2 since IDEVARS.bDevice is multiplied by 2
95       
[182]96    add     ax,g_szBusTypeValues
97    push    ax 
98               
[3]99;--------------------------------------------------------------------
[88]100; PushIRQ
[3]101;   Parameters:
102;       DS:DI:  Ptr to DPT
103;       CS:SI:  Ptr to IDEVARS
104;   Returns:
105;       Nothing (falls to next push below)
106;   Corrupts registers:
[88]107;       AX, DX
[3]108;--------------------------------------------------------------------
[88]109PushIRQ:
[184]110    eMOVZX  ax, BYTE [cs:si+IDEVARS.bIRQ]
[3]111    push    ax
112
113;--------------------------------------------------------------------
[88]114; PushResetStatus
[3]115;   Parameters:
116;       DS:DI:  Ptr to DPT
117;       CS:SI:  Ptr to IDEVARS
118;   Returns:
[88]119;       Nothing (falls to next push below)
[3]120;   Corrupts registers:
[88]121;       AX
[3]122;--------------------------------------------------------------------
[88]123PushResetStatus:
[158]124    mov     al, [di+DPT.bFlagsHigh]
125    and     ax, MASKH_DPT_RESET
[88]126    push    ax
[3]127
128;--------------------------------------------------------------------
[96]129; PrintValuesFromStack
[3]130;   Parameters:
131;       Stack:  All formatting parameters
132;   Returns:
133;       Nothing
134;   Corrupts registers:
[88]135;       AX, SI, DI
[3]136;--------------------------------------------------------------------
[96]137PrintValuesFromStack:
[3]138    mov     si, g_szCfgFormat
[192]139    jmp     BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay
[96]140
Note: See TracBrowser for help on using the repository browser.