Changeset 241 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Boot


Ignore:
Timestamp:
Feb 9, 2012, 11:08:59 AM (12 years ago)
Author:
gregli@…
google:author:
gregli@hotmail.com
Message:

Space optimizations in the Boot Menu and BootInfo routines, taking advantage of nested %s. Optimization in the init of RamVars to avoid writing the signature twice. Preparing for addition of serial floppy support, starting to break the assumption that our drives are always 80h or higher.

Location:
trunk/XTIDE_Universal_BIOS/Src/Boot
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootInfo.asm

    r181 r241  
    1616;   Returns:
    1717;       ES:BX:  Ptr to BOOTNFO (if successful)
    18 ;       CF:     Cleared if BOOTNFO created succesfully
    19 ;               Set if any error
    2018;   Corrupts registers:
    21 ;       AX, BX, CX, DX
     19;       AX, BX, CX, DX, DI, SI
    2220;--------------------------------------------------------------------
    2321BootInfo_CreateForHardDisk:
    24     call    BootInfo_GetOffsetToBX      ; ES:BX now points to new BOOTNFO
    25     ; Fall to .StoreSectorCount
     22    call    BootInfo_ConvertDPTtoBX     ; ES:BX now points to new BOOTNFO
     23    push    bx                          ; Preserve for return
    2624
    27 ;--------------------------------------------------------------------
    28 ; .StoreSectorCount
    29 ;   Parameters:
    30 ;       ES:BX:  Ptr to BOOTNFO
    31 ;       ES:SI:  Ptr to 512-byte ATA information read from the drive
    32 ;       DS:DI:  Ptr to Disk Parameter Table
    33 ;   Returns:
    34 ;       Nothing
    35 ;   Corrupts registers:
    36 ;       AX, CX, DX
    37 ;--------------------------------------------------------------------
    38 .StoreSectorCount:
    39     push    bx
    40     call    AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI
    41     mov     cx, bx                          ; Now in CX:DX:AX
    42     pop     bx
    43     mov     [es:bx+BOOTNFO.twSectCnt], ax
    44     mov     [es:bx+BOOTNFO.twSectCnt+2], dx
    45     mov     [es:bx+BOOTNFO.twSectCnt+4], cx
    46     ; Fall to .StoreDriveName
     25    mov     di, bx                      ; Starting pointer at beginning of structure
    4726
    48 ;--------------------------------------------------------------------
    49 ; .StoreDriveName
    50 ;   Parameters:
    51 ;       ES:BX:  Ptr to BOOTNFO
    52 ;       ES:SI:  Ptr to 512-byte ATA information read from the drive
    53 ;       DS:DI:  Ptr to Disk Parameter Table
    54 ;   Returns:
    55 ;       CF:     Cleared if variables stored succesfully
    56 ;               Set if any error
    57 ;   Corrupts registers:
    58 ;       AX, CX
    59 ;--------------------------------------------------------------------
    60 .StoreDriveName:
    61     push    ds
    62     push    si
    63     push    di
     27;
     28; Store Drive Name
     29;       
     30    push    ds                          ; Preserve RAMVARS
     31    push    si                          ; Preserve SI for call to GetTotalSectorCount...
    6432
    65     push    es
     33    push    es                          ; ES copied to DS
    6634    pop     ds
     35
    6736    add     si, BYTE ATA1.strModel      ; DS:SI now points drive name
    6837    lea     di, [bx+BOOTNFO.szDrvName]  ; ES:DI now points to name destination
     
    7443    loop    .CopyNextWord
    7544    xor     ax, ax                      ; Zero AX and clear CF
    76     stosb                               ; Terminate with NULL
     45    stosw                               ; Terminate with NULL
    7746
    78     pop     di
    7947    pop     si
    8048    pop     ds
     49
     50;
     51; Store Sector Count
     52;
     53    call    AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI
     54
     55    stosw
     56    xchg    ax, dx
     57    stosw
     58    xchg    ax, bx
     59    stosw
     60
     61    pop     bx
     62       
    8163    ret
    8264
    83 
     65       
    8466;--------------------------------------------------------------------
    8567; Finds BOOTNFO for drive and returns total sector count.
     
    8769; BootInfo_GetTotalSectorCount
    8870;   Parameters:
    89 ;       DL:     Drive number
    90 ;       DS:     RAMVARS segment
     71;       DS:DI:      DPT Pointer
    9172;   Returns:
    9273;       BX:DX:AX:   48-bit sector count
     
    9778BootInfo_GetTotalSectorCount:
    9879    push    ds
    99     call    BootInfo_GetOffsetToBX
     80    call    BootInfo_ConvertDPTtoBX
    10081    LOAD_BDA_SEGMENT_TO ds, ax
    10182    mov     ax, [bx+BOOTNFO.twSectCnt]
     
    10788
    10889;--------------------------------------------------------------------
    109 ; Returns offset to BOOTNFO for wanted drive.
     90; Returns offset to BOOTNFO based on DPT pointer.
    11091;
    111 ; BootInfo_GetOffsetToBX
     92; BootInfo_ConvertDPTtoBX
    11293;   Parameters:
    113 ;       DL:     Drive number
    114 ;       DS:     RAMVARS segment
     94;       DS:DI:  DPT Pointer
    11595;   Returns:
    11696;       BX:     Offset to BOOTNFO struct
     
    11999;--------------------------------------------------------------------
    120100ALIGN JUMP_ALIGN
    121 BootInfo_GetOffsetToBX:
    122     mov     bl, dl                      ; Copy drive number to BL
    123     mov     al, BOOTNFO_size            ; Size of struct
    124     sub     bl, [RAMVARS.bFirstDrv]     ; Drive number to index
    125     mul     bl                          ; AX = Offset inside BOOTNFO array
    126     add     ax, BOOTVARS.rgBootNfo      ; Add offset to BOOTNFO array
    127     xchg    bx, ax                      ; Move result to BX
    128     ret
     101BootInfo_ConvertDPTtoBX:
     102    mov     ax, di
     103    sub     ax, RAMVARS_size                ; subtract off base of DPTs
     104    mov     bl, DPT_BOOTNFO_SIZE_MULTIPLIER ; BOOTNFO's are a whole number multiple of DPT size
     105    mul     bl                             
     106    add     ax, BOOTVARS.rgBootNfo          ; add base of BOOTNFO
     107    xchg    ax, bx
     108    ret         
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenu.asm

    r181 r241  
    2222    call    BootMenu_Enter          ; Get selected menuitem index to CX
    2323    call    BootMenuPrint_ClearScreen
    24     cmp     cx, BYTE NO_ITEM_SELECTED
    25     je      SHORT BootMenu_DisplayAndReturnSelection    ; Clear screen and display menu
    26     ; Fall to BootMenu_GetDriveToDXforMenuitemInCX
     24    call    BootMenu_GetDriveToDXforMenuitemInCX
     25    jnc     BootMenu_DisplayAndReturnSelection
     26    ret
    2727
    2828;--------------------------------------------------------------------
     
    3030;   Parameters:
    3131;       CX:     Index of menuitem selected from Boot Menu
    32 ;       DS:     RAMVARS segment
    3332;   Returns:
    3433;       DX:     Drive number to be used for booting
    35 ;   Corrupts registers:
    36 ;       CX
    37 ;--------------------------------------------------------------------
     34;       DS:     RAMVARS segment
     35;       CF:     Set: There is a selected menu item, DL is valid
     36;               Clear: There is no selected menu item, DL is not valid
     37;   Corrupts registers:
     38;       CX, DI
     39;--------------------------------------------------------------------
     40ALIGN JUMP_ALIGN
     41BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS:
     42    call    RamVars_GetSegmentToDS
     43;;; fall-through
     44                       
    3845ALIGN JUMP_ALIGN
    3946BootMenu_GetDriveToDXforMenuitemInCX:
    40     mov     dx, cx                  ; Copy menuitem index to DX
    41     call    FloppyDrive_GetCountToCX
    42     cmp     dx, cx                  ; Floppy drive?
    43     jb      SHORT .ReturnFloppyDriveInDX
    44     sub     dx, cx                  ; Remove floppy drives from index
    45     or      dl, 80h
     47    cmp     cl, NO_ITEM_HIGHLIGHTED
     48    je      SHORT .ReturnFloppyDriveInDX    ; Clear CF if branch taken
     49
     50    mov     dl, cl                          ; Copy menuitem index to DX
     51    call    FloppyDrive_GetCountToCX
     52    cmp     dl, cl                          ; Floppy drive?
     53    jb      SHORT .ReturnFloppyDriveInDX    ; Set CF if branch taken
     54    or      cl, 80h                         ; Or 80h into CL before the sub
     55                                            ; to cause CF to be set after
     56                                            ; and result has high order bit set
     57    sub     dl, cl                          ; Remove floppy drives from index
     58
    4659.ReturnFloppyDriveInDX:
    4760    ret
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuEvent.asm

    r212 r241  
    2525
    2626MENUEVENT_InitializeMenuinitFromDSSI equ  (BootMenuEvent_Handler.InitializeMenuinitFromDSSI - BootMenuEvent_Handler)
    27 MENUEVENT_ExitMenu equ  (BootMenuEvent_Handler.EventCompleted - BootMenuEvent_Handler)
     27MENUEVENT_ExitMenu equ  (BootMenuEvent_EventCompleted - BootMenuEvent_Handler)
    2828MENUEVENT_ItemHighlightedFromCX equ (BootMenuEvent_Handler.ItemHighlightedFromCX - BootMenuEvent_Handler)
    2929MENUEVENT_ItemSelectedFromCX equ (BootMenuEvent_Handler.ItemSelectedFromCX - BootMenuEvent_Handler)
    3030MENUEVENT_KeyStrokeInAX equ (BootMenuEvent_Handler.KeyStrokeInAX - BootMenuEvent_Handler)
    3131MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - BootMenuEvent_Handler)
    32 MENUEVENT_RefreshInformation equ (BootMenuEvent_Handler.RefreshInformation - BootMenuEvent_Handler)
    33 MENUEVENT_RefreshItemFromCX equ (BootMenuEvent_Handler.RefreshItemFromCX - BootMenuEvent_Handler)
     32MENUEVENT_RefreshInformation equ (BootMenuPrint_RefreshInformation - BootMenuEvent_Handler)
     33MENUEVENT_RefreshItemFromCX equ (BootMenuPrint_RefreshItem - BootMenuEvent_Handler)
    3434;
    3535; Note that there is no entry for MENUEVENT_IdleProcessing.  If MENUEVENT_IDLEPROCESSING_ENABLE is not %defined,
     
    4949ALIGN WORD_ALIGN
    5050.rgfnEventSpecificHandlers:
    51     dw      .InitializeMenuinitFromDSSI ; MENUEVENT.InitializeMenuinitFromDSSI
    52     dw      .EventCompleted             ; MENUEVENT.ExitMenu
    53     dw      .EventNotHandled            ; MENUEVENT.IdleProcessing
    54     dw      .ItemHighlightedFromCX      ; MENUEVENT.ItemHighlightedFromCX
    55     dw      .ItemSelectedFromCX         ; MENUEVENT.ItemSelectedFromCX
    56     dw      .KeyStrokeInAX              ; MENUEVENT.KeyStrokeInAX
    57     dw      BootMenuPrint_TitleStrings  ; MENUEVENT.RefreshTitle
    58     dw      .RefreshInformation         ; MENUEVENT.RefreshInformation
    59     dw      .RefreshItemFromCX          ; MENUEVENT.RefreshItemFromCX
     51    dw      .InitializeMenuinitFromDSSI         ; MENUEVENT.InitializeMenuinitFromDSSI
     52    dw      BootMenuEvent_EventCompleted        ; MENUEVENT.ExitMenu
     53    dw      .EventNotHandled                    ; MENUEVENT.IdleProcessing
     54    dw      .ItemHighlightedFromCX              ; MENUEVENT.ItemHighlightedFromCX
     55    dw      .ItemSelectedFromCX                 ; MENUEVENT.ItemSelectedFromCX
     56    dw      .KeyStrokeInAX                      ; MENUEVENT.KeyStrokeInAX
     57    dw      BootMenuPrint_TitleStrings          ; MENUEVENT.RefreshTitle
     58    dw      BootMenuPrint_RefreshInformation    ; MENUEVENT.RefreshInformation
     59    dw      BootMenuPrint_RefreshItem           ; MENUEVENT.RefreshItemFromCX
    6060
    6161%endif
     
    103103.ItemHighlightedFromCX:
    104104    push    cx
    105     call    RamVars_GetSegmentToDS
     105    call    BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS     
    106106    call    DriveXlate_Reset
    107     call    BootMenu_GetDriveToDXforMenuitemInCX
    108107    call    DriveXlate_SetDriveToSwap
    109108
     
    134133    call    BootMenu_GetMenuitemToAXforAsciiHotkeyInAL
    135134    cmp     ax, [bp+MENUINIT.wItems]
    136     jae     SHORT .EventCompleted   ; Invalid key
     135    jae     SHORT BootMenuEvent_EventCompleted  ; Invalid key
    137136    CALL_MENU_LIBRARY HighlightItemFromAX
    138137    ; Fall to .ItemSelectedFromCX
     
    144143.ItemSelectedFromCX:
    145144    CALL_MENU_LIBRARY Close
    146 .EventCompleted:
     145       
     146BootMenuEvent_EventCompleted:
    147147    stc
    148148    ret
    149149
    150 
    151 ; Parameters:
    152 ;   CX:         Index of item to refresh
    153 ;   Cursor has been positioned to the beginning of item line
    154 ALIGN JUMP_ALIGN
    155 .RefreshItemFromCX:
    156     xor     bl, bl      ; will result in SF being clear in .RefreshItemOrInformation...
    157     SKIP2B  dx          ; dx corrupted below by BootMenu_GetDriveToDXforMenuitemInCX
    158     ; Fall to .RefreshInformation
    159 
    160 ; Parameters:
    161 ;   CX:         Index of highlighted item
    162 ;   Cursor has been positioned to the beginning of first line
    163 ; NO ALIGN - in the shadow of SKIP2B
    164 .RefreshInformation:
    165     mov     bl,040h     ;  will result in SF being set in .RefreshItemOrInformation...
    166     ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX
    167 
    168 ;--------------------------------------------------------------------
    169 ; RefreshItemOrInformationWithJumpTableInCSBX
    170 ;   Parameters:
    171 ;       CX:     Index of selected menuitem
    172 ;       CS:BX:  Ptr to ITEM_TYPE_REFRESH jump table
    173 ;   Returns:
    174 ;       CF:     set since event processed
    175 ;--------------------------------------------------------------------
    176 .RefreshItemOrInformationWithJumpTableInCSBX:
    177     cmp     cl, NO_ITEM_HIGHLIGHTED
    178     je      SHORT .EventCompleted
    179 
    180     call    RamVars_GetSegmentToDS
    181     call    BootMenu_GetDriveToDXforMenuitemInCX
    182     or      bl,dl               ;  or drive number with bit from .RefreshItemFromCX or .RefreshInformation
    183     shl     bl,1                ;  drive letter high order bit to CF, Item/Information bit to SF
    184     jc      SHORT BootMenuPrint_HardDiskMenuitem
    185     ; fall through to BootMenuEvent_FallThroughToFloppyMenuitem
    186 
    187 ;;;
    188 ;;; Fall-through (to BootMenuPrint_FloppyMenuitem)
    189 ;;; (checked at assembler time with the code after BootMenuPrint_FloppyMenuitem)
    190 ;;;
    191 ALIGN JUMP_ALIGN
    192 BootMenuEvent_FallThroughToFloppyMenuitem:
    193     ; fall through to BootMenuPrint_FloppyMenuitem
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrint.asm

    r200 r241  
    55SECTION .text
    66
    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
     7;--------------------------------------------------------------------
     8; BootMenuPrint_RefreshItem
     9;
    1410;   Parameters:
    1511;       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 ;--------------------------------------------------------------------
    22 ALIGN JUMP_ALIGN
    23 BootMenuPrint_FloppyMenuitem:
    24     js      short BootMenuPrint_FloppyMenuitemInformation
    25     call    PrintDriveNumberAfterTranslationFromDL
     12;   Returns:
     13;       Nothing
     14;   Corrupts registers:
     15;       AX, BX, DX, SI, DI
     16;--------------------------------------------------------------------
     17ALIGN JUMP_ALIGN
     18BootMenuPrint_RefreshItem:
     19    call    BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS
     20    jnc     BootMenuEvent_EventCompleted            ; if no menu item selected, out we go
     21       
    2622    push    bp
    2723    mov     bp, sp
    28     mov     si, g_szFDLetter
    29     ePUSH_T ax, g_szFloppyDrv
    30     add     dl, 'A'
    31     push    dx                  ; Drive letter
     24
     25    call    RamVars_IsDriveHandledByThisBIOS               
     26    jnc     .notOurs
     27
     28    call    FindDPT_ForDriveNumber                  ; if it is one of ours, print the string in bootnfo
     29    call    BootInfo_ConvertDPTtoBX
     30    mov     si, g_szDriveNumBOOTNFO                 ; special g_szDriveNum that prints from BDA
     31    jmp     .go
     32       
     33.notOurs:
     34    mov     si,g_szDriveNum                                 
     35    mov     bx,g_szForeignHD                        ; assume a hard disk for the moment
     36       
     37    test    dl,80h                                         
     38    js      .go
     39    mov     bl,((g_szFloppyDrv)-$$ & 0xff)          ; and revisit the earlier assumption...
     40       
     41.go:
     42    mov     ax, dx                                  ; preserve DL for the floppy drive letter addition
     43    call    DriveXlate_ToOrBack
     44    push    dx                                      ; translated drive number
     45    push    bx                                      ; sub string
     46    add     al, 'A'                                 ; floppy drive letter (we always push this although
     47    push    ax                                      ; the hard disks don't ever use it, but it does no harm)
     48       
    3249    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 ;--------------------------------------------------------------------
    49 ALIGN JUMP_ALIGN
    50 ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
    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 
    6050
    6151;--------------------------------------------------------------------
     
    7767    mov     si, ROMVARS.szVersion
    7868    ; Fall to BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
    79 
    8069
    8170;--------------------------------------------------------------------
     
    10291       
    10392;--------------------------------------------------------------------
    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 ;--------------------------------------------------------------------
    114 ALIGN JUMP_ALIGN
    115 BootMenuPrint_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 ;--------------------------------------------------------------------
    150 ALIGN JUMP_ALIGN
    151 .HardDiskMenuitemForForeignDrive:
    152     mov     si, g_szforeignHD
    153     jmp     SHORT BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
    154 
    155 
    156 ;--------------------------------------------------------------------
    15793; BootMenuPrint_FloppyMenuitemInformation
    15894;   Parameters:
     
    165101;--------------------------------------------------------------------
    166102
    167 FloppyTypes:
    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        
    183 ALIGN JUMP_ALIGN
    184 BootMenuPrint_FloppyMenuitemInformation:
    185     call    BootMenuPrint_ClearInformationArea
    186     call    FloppyDrive_GetType         ; Get Floppy Drive type to BX
     103ALIGN JUMP_ALIGN
     104BootMenuPrint_RefreshInformation:
     105    CALL_MENU_LIBRARY ClearInformationArea     
     106       
     107    call    BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS
     108    jnc     BootMenuEvent_EventCompleted                ; if no menu selection, abort
    187109
    188110    push    bp
    189111    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
     112
     113    test    dl, dl                                      ; are we a hard disk?
     114    js      BootMenuPrint_HardDiskRefreshInformation       
     115       
     116    call    FloppyDrive_GetType                         ; Get Floppy Drive type to BX
     117
     118    mov     cx, g_szFddSizeOr                           ; .PrintXTFloppyType
     119    test    bx, bx                                      ; Two possibilities? (FLOPPY_TYPE_525_OR_35_DD)     
     120    jz      SHORT BootMenuPrint_HardDiskRefreshInformation.output
     121
     122    mov     cl, (g_szFddUnknown - $$) & 0xff            ; .PrintUnknownFloppyType
    197123    cmp     bl, FLOPPY_TYPE_35_ED
    198     ja      SHORT .output
     124    ja      SHORT BootMenuPrint_HardDiskRefreshInformation.output
    199125       
    200126    ; Fall to .PrintKnownFloppyType
    201 
    202127
    203128;--------------------------------------------------------------------
     
    223148;--------------------------------------------------------------------
    224149.PrintKnownFloppyType:
    225     mov     si, g_szFddSize
    226        
    227     mov     ax, g_szFddThreeHalf
     150    mov     cl, (g_szFddSize - $$) & 0xff
     151    push    cx
     152       
     153    mov     cl, (g_szFddThreeHalf - $$) & 0xff
    228154    cmp     bl, FLOPPY_TYPE_525_HD
    229155    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
     156    mov     cl, (g_szFddFiveQuarter - $$) & 0xff
    238157.ThreeHalf:     
    239     push    ax                      ; "5 1/4" or "3 1/2"
     158    push    cx                                          ; "5 1/4" or "3 1/2"
    240159
    241160    mov     al,FloppyTypes.rgbCapacityMultiplier
     
    243162    push    ax
    244163
     164    jmp     short BootMenuPrint_HardDiskRefreshInformation.output
     165
     166
     167;--------------------------------------------------------------------
     168; Prints Hard Disk Menuitem information strings.
     169;
     170; BootMenuPrint_HardDiskMenuitemInformation
     171;   Parameters:
     172;       DL:     Untranslated Hard Disk number
     173;       DS:     RAMVARS segment
     174;   Returns:
     175;       CF:     Set since menu event was handled successfully
     176;   Corrupts registers:
     177;       BX, CX, DX, SI, DI, ES
     178;--------------------------------------------------------------------
     179ALIGN JUMP_ALIGN
     180BootMenuPrint_HardDiskRefreshInformation:       
     181    call    RamVars_IsDriveHandledByThisBIOS
     182    jnc     SHORT .HardDiskMenuitemInfoForForeignDrive
     183    call    FindDPT_ForDriveNumber                      ; DS:DI to point DPT
     184    ; Fall to .HardDiskMenuitemInfoForOurDrive
     185
     186;--------------------------------------------------------------------
     187; .HardDiskMenuitemInfoForOurDrive
     188;   Parameters:
     189;       DL:     Untranslated Hard Disk number
     190;       DS:DI:  Ptr to DPT
     191;   Returns:
     192;       Nothing
     193;   Corrupts registers:
     194;       AX, BX, CX, DX, SI, DI, ES
     195;--------------------------------------------------------------------
     196.HardDiskMenuitemInfoForOurDrive:
     197    ePUSH_T ax, g_szSizeDual
     198       
     199    ; Get and push L-CHS size
     200    call    AH15h_GetSectorCountToDXAX
     201    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
     202
     203    ; Get and push total LBA size
     204    call    BootInfo_GetTotalSectorCount
     205    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat       
     206    jmp     BootMenuPrintCfg_ForOurDrive
     207               
     208;--------------------------------------------------------------------
     209; .HardDiskMenuitemInfoForForeignDrive
     210;   Parameters:
     211;       DL:     Untranslated Hard Disk number
     212;       DS:     RAMVARS segment
     213;   Returns:
     214;       CF:     Set since menu event was handled successfully
     215;   Corrupts registers:
     216;       AX, BX, CX, DX, SI, DI
     217;--------------------------------------------------------------------
     218ALIGN JUMP_ALIGN
     219.HardDiskMenuitemInfoForForeignDrive:
     220    call    DriveXlate_ToOrBack
     221    call    AH15h_GetSectorCountFromForeignDriveToDXAX
     222    call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
     223
    245224ALIGN JUMP_ALIGN       
    246225.output:
     226    mov     si, g_szCapacity
    247227;;; fall-through
    248228
     
    263243    stc             ; Successfull return from menu event
    264244    pop     bp
    265     ret     
    266 
    267        
    268 ;--------------------------------------------------------------------
    269 ; Prints Hard Disk Menuitem information strings.
    270 ;
    271 ; BootMenuPrint_HardDiskMenuitemInformation
    272 ;   Parameters:
    273 ;       DL:     Untranslated Hard Disk number
    274 ;       DS:     RAMVARS segment
    275 ;   Returns:
    276 ;       CF:     Set since menu event was handled successfully
    277 ;   Corrupts registers:
    278 ;       BX, CX, DX, SI, DI, ES
    279 ;--------------------------------------------------------------------
    280 ALIGN JUMP_ALIGN
    281 BootMenuPrint_HardDiskMenuitemInformation:
    282     call    RamVars_IsDriveHandledByThisBIOS
    283     jnc     SHORT .HardDiskMenuitemInfoForForeignDrive
    284     call    FindDPT_ForDriveNumber      ; DS:DI to point DPT
    285     ; Fall to .HardDiskMenuitemInfoForOurDrive
    286 
    287 ;--------------------------------------------------------------------
    288 ; .HardDiskMenuitemInfoForOurDrive
    289 ;   Parameters:
    290 ;       DL:     Untranslated Hard Disk number
    291 ;       DS:DI:  Ptr to DPT
    292 ;   Returns:
    293 ;       Nothing
    294 ;   Corrupts registers:
    295 ;       AX, BX, CX, DX, SI, DI, ES
    296 ;--------------------------------------------------------------------
    297 .HardDiskMenuitemInfoForOurDrive:
    298     push    di
    299     ePUSH_T ax, BootMenuPrintCfg_ForOurDrive    ; Return from BootMenuPrint_FormatCSSIfromParamsInSSBP
    300     push    bp
    301     mov     bp, sp
    302     ePUSH_T ax, g_szCapacity
    303 
    304     ; Get and push L-CHS size
    305     mov     [RAMVARS.bTimeoutTicksLeft], dl     ; Store drive number
    306     call    AH15h_GetSectorCountToDXAX
    307     call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
    308 
    309     ; Get and push total LBA size
    310     mov     dl, [RAMVARS.bTimeoutTicksLeft]     ; Restore drive number
    311     call    BootInfo_GetTotalSectorCount
    312     call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
    313 
    314     mov     si, g_szSizeDual
    315     jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
    316 
    317 
    318 ;--------------------------------------------------------------------
    319 ; .HardDiskMenuitemInfoForForeignDrive
    320 ;   Parameters:
    321 ;       DL:     Untranslated Hard Disk number
    322 ;       DS:     RAMVARS segment
    323 ;   Returns:
    324 ;       CF:     Set since menu event was handled successfully
    325 ;   Corrupts registers:
    326 ;       AX, BX, CX, DX, SI, DI
    327 ;--------------------------------------------------------------------
    328 ALIGN JUMP_ALIGN
    329 .HardDiskMenuitemInfoForForeignDrive:
    330     push    bp
    331     mov     bp, sp
    332     ePUSH_T ax, g_szCapacity
    333 
    334     call    DriveXlate_ToOrBack
    335     call    AH15h_GetSectorCountFromForeignDriveToDXAX
    336     call    ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
    337 
    338     mov     si, g_szSizeSingle
    339     jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
    340 
    341        
    342 ;--------------------------------------------------------------------
    343 ; BootMenuPrint_ClearInformationArea
    344 ;   Parameters:
    345 ;       Nothing
    346 ;   Returns:
    347 ;       CF:     Set
    348 ;   Corrupts registers:
    349 ;       AX, DI
    350 ;--------------------------------------------------------------------
    351 ALIGN JUMP_ALIGN
    352 BootMenuPrint_ClearInformationArea:
    353     CALL_MENU_LIBRARY ClearInformationArea
    354     stc
    355245    ret
    356 
     246       
    357247       
    358248;--------------------------------------------------------------------
     
    373263    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
    374264    ret
    375 
    376        
    377 ;--------------------------------------------------------------------
    378 ; PrintDriveNumberAfterTranslationFromDL
    379 ;   Parameters:
    380 ;       DL:     Untranslated Floppy Drive number
    381 ;       DS:     RAMVARS segment
    382 ;   Returns:
    383 ;       Nothing
    384 ;   Corrupts registers:
    385 ;       AX, DI
    386 ;--------------------------------------------------------------------
    387 ALIGN JUMP_ALIGN
    388 PrintDriveNumberAfterTranslationFromDL:
    389     mov     ax, dx
    390     call    DriveXlate_ToOrBack
    391     xchg    dx, ax              ; Restore DX, WORD to print in AL
    392     xor     ah, ah
    393     push    bp
    394     mov     bp, sp
    395     mov     si, g_szDriveNum
    396     push    ax
    397        
    398 BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay:
    399     jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
    400265
    401266
     
    510375    push    cx          ; Key attribute for last space
    511376    mov     si, g_szHotkey
    512     jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay
     377       
     378BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay:
     379    jmp     SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP
    513380
    514381
     
    528395
    529396
    530        
    531 
    532 
    533        
     397;--------------------------------------------------------------------
     398; ConvertSectorCountInBXDXAXtoSizeAndPushForFormat
     399;   Parameters:
     400;       BX:DX:AX:   Sector count
     401;   Returns:
     402;       Size in stack
     403;   Corrupts registers:
     404;       AX, BX, CX, DX, SI
     405;--------------------------------------------------------------------
     406ALIGN JUMP_ALIGN
     407ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:
     408    pop     si                      ; Pop return address
     409    ePUSH_T cx, g_szCapacityNum     ; Push format substring
     410    call    Size_ConvertSectorCountInBXDXAXtoKiB
     411    mov     cx, BYTE_MULTIPLES.kiB
     412    call    Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX
     413    push    ax                      ; Size in magnitude
     414    push    cx                      ; Tenths
     415    push    dx                      ; Magnitude character
     416    jmp     si
     417
     418
     419FloppyTypes:
     420.rgbCapacityMultiplier equ 20           ; Multiplier to reduce word sized values to byte size
     421.rgbCapacity:
     422    db      360   / FloppyTypes.rgbCapacityMultiplier    ;  type 1
     423    db      1200  / FloppyTypes.rgbCapacityMultiplier    ;  type 2
     424    db      720   / FloppyTypes.rgbCapacityMultiplier    ;  type 3
     425    db      1440  / FloppyTypes.rgbCapacityMultiplier    ;  type 4
     426    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 5
     427    db      2880  / FloppyTypes.rgbCapacityMultiplier    ;  type 6
     428
     429
     430
     431
     432       
     433
     434
     435       
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrintCfg.asm

    r200 r241  
    1212; BootMenuPrintCfg_ForOurDrive
    1313;   Parameters:
    14 ;       DS:     Segment to DPT
    15 ;       Stack:  Offset to DPT
     14;       DS:DI:      Pointer to DPT
    1615;   Returns:
    1716;       Nothing
     
    2120ALIGN JUMP_ALIGN
    2221BootMenuPrintCfg_ForOurDrive:
    23     mov     si, g_szCfgHeader
    24     call    BootMenuPrint_NullTerminatedStringFromCSSIandSetCF
    25     pop     di
    2622    eMOVZX  ax, BYTE [di+DPT.bIdevarsOffset]
    2723    xchg    si, ax                      ; CS:SI now points to IDEVARS
    2824    ; Fall to .PushAndFormatCfgString
    29 
    30 ;--------------------------------------------------------------------
    31 ; PushAndFormatCfgString
    32 ;   Parameters:
    33 ;       DS:DI:  Ptr to DPT
    34 ;       CS:SI:  Ptr to IDEVARS
    35 ;   Returns:
    36 ;       Nothing
    37 ;   Corrupts registers:
    38 ;       AX, DX, SI, DI
    39 ;--------------------------------------------------------------------
    40 .PushAndFormatCfgString:
    41     push    bp
    42     mov     bp, sp
    43     ; Fall to first push below
    4425
    4526;--------------------------------------------------------------------
     
    11495;--------------------------------------------------------------------
    11596.PushIRQ:
    116     eMOVZX  ax, BYTE [cs:si+IDEVARS.bIRQ]
     97    mov     al, BYTE [cs:si+IDEVARS.bIRQ]
     98    cbw
    11799    push    ax
    118100
     
    129111.PushResetStatus:
    130112    mov     al, [di+DPT.bFlagsHigh]
    131     and     ax, MASKH_DPT_RESET
     113    and     al, MASKH_DPT_RESET         ;  ah already zero from last push
    132114    push    ax
    133115
     
    142124;--------------------------------------------------------------------
    143125.PrintValuesFromStack:
    144     mov     si, g_szCfgFormat
    145     jmp     BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay
     126    jmp     BootMenuPrint_HardDiskRefreshInformation.output
    146127
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootPrint.asm

    r192 r241  
    2222    mov     si, g_szReadError
    2323       
    24 BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay:       
    2524    jmp     short BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay
    2625       
     
    5453
    5554    mov     si, g_szTryToBoot
    56     jmp     short BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay     
     55    jmp     short BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay       
    5756
    5857
Note: See TracChangeset for help on using the changeset viewer.