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

Last change on this file since 150 was 150, checked in by aitotat, 13 years ago

Changes to XTIDE Universal BIOS:

  • Redesigned Disk Parameter Tables.
  • Code generalizations for supporting non-IDE devices in the future.
File size: 4.6 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:
[127]23    pop     di
[96]24    mov     si, g_szCfgHeader
25    call    BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
[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:
[96]53;       AX
[3]54;--------------------------------------------------------------------
[88]55PushAddressingMode:
[150]56    call    AccessDPT_GetAddressingModeForWordLookToBX
57    push    WORD [cs:bx+rgszAddressingModeString]
[3]58
59;--------------------------------------------------------------------
[88]60; PushBlockMode
[3]61;   Parameters:
62;       DS:DI:  Ptr to DPT
63;       CS:SI:  Ptr to IDEVARS
64;   Returns:
65;       Nothing (falls to next push below)
66;   Corrupts registers:
[88]67;       AX
[3]68;--------------------------------------------------------------------
[88]69PushBlockMode:
[150]70    mov     ax, 1
71    test    WORD [di+DPT.wFlags], FLG_DPT_BLOCK_MODE_SUPPORTED
72    jz      SHORT .PushBlockSizeFromAX
73    mov     al, [di+DPT_ATA.bSetBlock]
74.PushBlockSizeFromAX:
[3]75    push    ax
76
77;--------------------------------------------------------------------
[88]78; PushBusType
[3]79;   Parameters:
80;       DS:DI:  Ptr to DPT
81;       CS:SI:  Ptr to IDEVARS
82;   Returns:
83;       Nothing (jumps to next push below)
84;   Corrupts registers:
85;       AX, DX
86;--------------------------------------------------------------------
[88]87PushBusType:
[3]88    xchg    ax, bx      ; Store BX to AX
[150]89    eMOVZX  bx, BYTE [cs:si+IDEVARS.bDevice]
90    mov     bx, [cs:bx+rgwBusTypeValues]    ; Char to BL, Int to BH
[3]91    eMOVZX  dx, bh
[88]92    push    bx          ; Push character
[150]93    push    dx          ; Push 1, 8, 16 or 32
[3]94    xchg    bx, ax      ; Restore BX
95
96;--------------------------------------------------------------------
[88]97; PushIRQ
[3]98;   Parameters:
99;       DS:DI:  Ptr to DPT
100;       CS:SI:  Ptr to IDEVARS
101;   Returns:
102;       Nothing (falls to next push below)
103;   Corrupts registers:
[88]104;       AX, DX
[3]105;--------------------------------------------------------------------
[88]106PushIRQ:
107    mov     dl, ' '                     ; Load space to DL
108    mov     al, [cs:si+IDEVARS.bIRQ]
109    test    al, al                      ; Interrupts disabled?
110    jz      SHORT .PushIrqDisabled
111    add     al, '0'                     ; Digit to ASCII
112    cmp     al, '9'                     ; Only one digit needed?
113    jbe     SHORT .PushCharacters
114
115    ; Two digits needed
116    sub     al, 10                      ; Limit to single digit ASCII
117    mov     dl, '1'                     ; Load '1 to DX
118    jmp     SHORT .PushCharacters
119ALIGN JUMP_ALIGN
120.PushIrqDisabled:
121    mov     al, '-'                     ; Load line to AL
122    xchg    ax, dx                      ; Space to AL, line to DL
123ALIGN JUMP_ALIGN
124.PushCharacters:
125    push    dx
[3]126    push    ax
127
128;--------------------------------------------------------------------
[88]129; PushResetStatus
[3]130;   Parameters:
131;       DS:DI:  Ptr to DPT
132;       CS:SI:  Ptr to IDEVARS
133;   Returns:
[88]134;       Nothing (falls to next push below)
[3]135;   Corrupts registers:
[88]136;       AX
[3]137;--------------------------------------------------------------------
[88]138PushResetStatus:
[150]139    mov     ax, [di+DPT.wFlags]
140    and     ax, MASK_DPT_RESET
[88]141    push    ax
[3]142
143;--------------------------------------------------------------------
[96]144; PrintValuesFromStack
[3]145;   Parameters:
146;       Stack:  All formatting parameters
147;   Returns:
148;       Nothing
149;   Corrupts registers:
[88]150;       AX, SI, DI
[3]151;--------------------------------------------------------------------
[96]152PrintValuesFromStack:
[3]153    mov     si, g_szCfgFormat
[127]154    jmp     BootMenuPrint_FormatCSSIfromParamsInSSBP
[96]155
156
[150]157ALIGN WORD_ALIGN
158rgszAddressingModeString:
159    dw      g_szLCHS
160    dw      g_szPCHS
161    dw      g_szLBA28
162    dw      g_szLBA48
163
164rgwBusTypeValues:
165    db      'D', 8      ; DEVICE_8BIT_DUAL_PORT_XTIDE
166    db      'X', 8      ; DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
167    db      'S', 8      ; DEVICE_8BIT_SINGLE_PORT
168    db      ' ', 16     ; DEVICE_16BIT_ATA
169    db      ' ', 32     ; DEVICE_32BIT_ATA
170    db      ' ', 1      ; DEVICE_SERIAL_PORT
Note: See TracBrowser for help on using the repository browser.