Changeset 241 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS
- Timestamp:
- Feb 9, 2012, 11:08:59 AM (13 years ago)
- google:author:
- gregli@hotmail.com
- Location:
- trunk/XTIDE_Universal_BIOS
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc
r221 r241 13 13 LEN_BOOTNFO_DRV EQU 26 ; Bytes reserved for drive name 14 14 struc BOOTNFO 15 .szDrvName resb LEN_BOOTNFO_DRV ; Drive name 16 resb 2 ; Zero word (ensures string terminates) 15 17 .twSectCnt resb 6 ; Total user addressable sectors 16 .szDrvName resb LEN_BOOTNFO_DRV+1 ; Drive name 17 resb 1 ; Alignment 18 resb 2 ; padding to make BOOTNFO size an even multiple of DPT size 18 19 endstruc 20 21 DPT_BOOTNFO_SIZE_MULTIPLIER equ BOOTNFO_size / LARGEST_DPT_SIZE 22 23 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 24 25 %if BOOTNFO_size % LARGEST_DPT_SIZE <> 0 26 %error "BOOTNFO's size must be an even multiple of DPT's size. Add or remove padding at the bottom of BOOTNFO to bring the two sizes into alignment. As BOOTNFO is only used at boot time, with plenty of memory to consume, it is OK to waste some space here." 27 %endif 28 29 %if BOOTNFO.szDrvName <> 0 30 %error "BOOTNFO.szDrvName is assumed to be the first member of struc BOOTNFO, in BootMenuPrint_RefreshItem" 31 %endif 32 33 %if BOOTNFO.szDrvName + LEN_BOOTNFO_DRV + 2 <> BOOTNFO.twSectCnt 34 %error "BOOTNFO.twSectCnt is assumed to come immediately after BOOTNFO.szDrvName (with zero padding), in BootInfo_CreateForHardDisk" 35 %endif 36 37 %endif 19 38 20 39 -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootInfo.asm
r181 r241 16 16 ; Returns: 17 17 ; ES:BX: Ptr to BOOTNFO (if successful) 18 ; CF: Cleared if BOOTNFO created succesfully19 ; Set if any error20 18 ; Corrupts registers: 21 ; AX, BX, CX, DX 19 ; AX, BX, CX, DX, DI, SI 22 20 ;-------------------------------------------------------------------- 23 21 BootInfo_CreateForHardDisk: 24 call BootInfo_ GetOffsetToBX ; ES:BX now points to new BOOTNFO25 ; Fall to .StoreSectorCount22 call BootInfo_ConvertDPTtoBX ; ES:BX now points to new BOOTNFO 23 push bx ; Preserve for return 26 24 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 47 26 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... 64 32 65 push es 33 push es ; ES copied to DS 66 34 pop ds 35 67 36 add si, BYTE ATA1.strModel ; DS:SI now points drive name 68 37 lea di, [bx+BOOTNFO.szDrvName] ; ES:DI now points to name destination … … 74 43 loop .CopyNextWord 75 44 xor ax, ax ; Zero AX and clear CF 76 stos b; Terminate with NULL45 stosw ; Terminate with NULL 77 46 78 pop di79 47 pop si 80 48 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 81 63 ret 82 64 83 65 84 66 ;-------------------------------------------------------------------- 85 67 ; Finds BOOTNFO for drive and returns total sector count. … … 87 69 ; BootInfo_GetTotalSectorCount 88 70 ; Parameters: 89 ; DL: Drive number 90 ; DS: RAMVARS segment 71 ; DS:DI: DPT Pointer 91 72 ; Returns: 92 73 ; BX:DX:AX: 48-bit sector count … … 97 78 BootInfo_GetTotalSectorCount: 98 79 push ds 99 call BootInfo_ GetOffsetToBX80 call BootInfo_ConvertDPTtoBX 100 81 LOAD_BDA_SEGMENT_TO ds, ax 101 82 mov ax, [bx+BOOTNFO.twSectCnt] … … 107 88 108 89 ;-------------------------------------------------------------------- 109 ; Returns offset to BOOTNFO for wanted drive.90 ; Returns offset to BOOTNFO based on DPT pointer. 110 91 ; 111 ; BootInfo_ GetOffsetToBX92 ; BootInfo_ConvertDPTtoBX 112 93 ; Parameters: 113 ; DL: Drive number 114 ; DS: RAMVARS segment 94 ; DS:DI: DPT Pointer 115 95 ; Returns: 116 96 ; BX: Offset to BOOTNFO struct … … 119 99 ;-------------------------------------------------------------------- 120 100 ALIGN JUMP_ALIGN 121 BootInfo_ GetOffsetToBX:122 mov bl, dl ; Copy drive number to BL123 mov al, BOOTNFO_size ; Size of struct124 sub bl, [RAMVARS.bFirstDrv] ; Drive number to index125 mul bl ; AX = Offset inside BOOTNFO array126 add ax, BOOTVARS.rgBootNfo ; Add offset to BOOTNFO array127 xchg bx, ax ; Move result to BX128 ret 101 BootInfo_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 22 22 call BootMenu_Enter ; Get selected menuitem index to CX 23 23 call BootMenuPrint_ClearScreen 24 c mp cx, BYTE NO_ITEM_SELECTED25 j e SHORT BootMenu_DisplayAndReturnSelection ; Clear screen and display menu26 ; Fall to BootMenu_GetDriveToDXforMenuitemInCX24 call BootMenu_GetDriveToDXforMenuitemInCX 25 jnc BootMenu_DisplayAndReturnSelection 26 ret 27 27 28 28 ;-------------------------------------------------------------------- … … 30 30 ; Parameters: 31 31 ; CX: Index of menuitem selected from Boot Menu 32 ; DS: RAMVARS segment33 32 ; Returns: 34 33 ; 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 ;-------------------------------------------------------------------- 40 ALIGN JUMP_ALIGN 41 BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS: 42 call RamVars_GetSegmentToDS 43 ;;; fall-through 44 38 45 ALIGN JUMP_ALIGN 39 46 BootMenu_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 46 59 .ReturnFloppyDriveInDX: 47 60 ret -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuEvent.asm
r212 r241 25 25 26 26 MENUEVENT_InitializeMenuinitFromDSSI equ (BootMenuEvent_Handler.InitializeMenuinitFromDSSI - BootMenuEvent_Handler) 27 MENUEVENT_ExitMenu equ (BootMenuEvent_ Handler.EventCompleted - BootMenuEvent_Handler)27 MENUEVENT_ExitMenu equ (BootMenuEvent_EventCompleted - BootMenuEvent_Handler) 28 28 MENUEVENT_ItemHighlightedFromCX equ (BootMenuEvent_Handler.ItemHighlightedFromCX - BootMenuEvent_Handler) 29 29 MENUEVENT_ItemSelectedFromCX equ (BootMenuEvent_Handler.ItemSelectedFromCX - BootMenuEvent_Handler) 30 30 MENUEVENT_KeyStrokeInAX equ (BootMenuEvent_Handler.KeyStrokeInAX - BootMenuEvent_Handler) 31 31 MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - BootMenuEvent_Handler) 32 MENUEVENT_RefreshInformation equ (BootMenu Event_Handler.RefreshInformation - BootMenuEvent_Handler)33 MENUEVENT_RefreshItemFromCX equ (BootMenu Event_Handler.RefreshItemFromCX- BootMenuEvent_Handler)32 MENUEVENT_RefreshInformation equ (BootMenuPrint_RefreshInformation - BootMenuEvent_Handler) 33 MENUEVENT_RefreshItemFromCX equ (BootMenuPrint_RefreshItem - BootMenuEvent_Handler) 34 34 ; 35 35 ; Note that there is no entry for MENUEVENT_IdleProcessing. If MENUEVENT_IDLEPROCESSING_ENABLE is not %defined, … … 49 49 ALIGN WORD_ALIGN 50 50 .rgfnEventSpecificHandlers: 51 dw .InitializeMenuinitFromDSSI ; MENUEVENT.InitializeMenuinitFromDSSI52 dw .EventCompleted; MENUEVENT.ExitMenu53 dw .EventNotHandled ; MENUEVENT.IdleProcessing54 dw .ItemHighlightedFromCX ; MENUEVENT.ItemHighlightedFromCX55 dw .ItemSelectedFromCX ; MENUEVENT.ItemSelectedFromCX56 dw .KeyStrokeInAX ; MENUEVENT.KeyStrokeInAX57 dw BootMenuPrint_TitleStrings ; MENUEVENT.RefreshTitle58 dw .RefreshInformation; MENUEVENT.RefreshInformation59 dw .RefreshItemFromCX; MENUEVENT.RefreshItemFromCX51 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 60 60 61 61 %endif … … 103 103 .ItemHighlightedFromCX: 104 104 push cx 105 call RamVars_GetSegmentToDS105 call BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS 106 106 call DriveXlate_Reset 107 call BootMenu_GetDriveToDXforMenuitemInCX108 107 call DriveXlate_SetDriveToSwap 109 108 … … 134 133 call BootMenu_GetMenuitemToAXforAsciiHotkeyInAL 135 134 cmp ax, [bp+MENUINIT.wItems] 136 jae SHORT .EventCompleted ; Invalid key135 jae SHORT BootMenuEvent_EventCompleted ; Invalid key 137 136 CALL_MENU_LIBRARY HighlightItemFromAX 138 137 ; Fall to .ItemSelectedFromCX … … 144 143 .ItemSelectedFromCX: 145 144 CALL_MENU_LIBRARY Close 146 .EventCompleted: 145 146 BootMenuEvent_EventCompleted: 147 147 stc 148 148 ret 149 149 150 151 ; Parameters:152 ; CX: Index of item to refresh153 ; Cursor has been positioned to the beginning of item line154 ALIGN JUMP_ALIGN155 .RefreshItemFromCX:156 xor bl, bl ; will result in SF being clear in .RefreshItemOrInformation...157 SKIP2B dx ; dx corrupted below by BootMenu_GetDriveToDXforMenuitemInCX158 ; Fall to .RefreshInformation159 160 ; Parameters:161 ; CX: Index of highlighted item162 ; Cursor has been positioned to the beginning of first line163 ; NO ALIGN - in the shadow of SKIP2B164 .RefreshInformation:165 mov bl,040h ; will result in SF being set in .RefreshItemOrInformation...166 ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX167 168 ;--------------------------------------------------------------------169 ; RefreshItemOrInformationWithJumpTableInCSBX170 ; Parameters:171 ; CX: Index of selected menuitem172 ; CS:BX: Ptr to ITEM_TYPE_REFRESH jump table173 ; Returns:174 ; CF: set since event processed175 ;--------------------------------------------------------------------176 .RefreshItemOrInformationWithJumpTableInCSBX:177 cmp cl, NO_ITEM_HIGHLIGHTED178 je SHORT .EventCompleted179 180 call RamVars_GetSegmentToDS181 call BootMenu_GetDriveToDXforMenuitemInCX182 or bl,dl ; or drive number with bit from .RefreshItemFromCX or .RefreshInformation183 shl bl,1 ; drive letter high order bit to CF, Item/Information bit to SF184 jc SHORT BootMenuPrint_HardDiskMenuitem185 ; fall through to BootMenuEvent_FallThroughToFloppyMenuitem186 187 ;;;188 ;;; Fall-through (to BootMenuPrint_FloppyMenuitem)189 ;;; (checked at assembler time with the code after BootMenuPrint_FloppyMenuitem)190 ;;;191 ALIGN JUMP_ALIGN192 BootMenuEvent_FallThroughToFloppyMenuitem:193 ; fall through to BootMenuPrint_FloppyMenuitem -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrint.asm
r200 r241 5 5 SECTION .text 6 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 7 ;-------------------------------------------------------------------- 8 ; BootMenuPrint_RefreshItem 9 ; 14 10 ; Parameters: 15 11 ; DL: Untranslated Floppy Drive number 16 ; SF: set for Information, clear for Item17 ; Returns:18 ; Nothing19 ; Corrupts registers:20 ; AX, DX, SI, DI21 ;-------------------------------------------------------------------- 22 ALIGN JUMP_ALIGN 23 BootMenuPrint_FloppyMenuitem: 24 j s short BootMenuPrint_FloppyMenuitemInformation25 call PrintDriveNumberAfterTranslationFromDL12 ; Returns: 13 ; Nothing 14 ; Corrupts registers: 15 ; AX, BX, DX, SI, DI 16 ;-------------------------------------------------------------------- 17 ALIGN JUMP_ALIGN 18 BootMenuPrint_RefreshItem: 19 call BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS 20 jnc BootMenuEvent_EventCompleted ; if no menu item selected, out we go 21 26 22 push bp 27 23 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 32 49 jmp short BootMenuPrint_FormatCSSIfromParamsInSSBP 33 34 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS35 %if BootMenuPrint_FloppyMenuitem <> BootMenuEvent_FallThroughToFloppyMenuitem36 %error "BootMenuPrint.asm must follow BootMenuEvent.asm, and BootMenuPrint_FloppyMenuitem must be the first routine in BootMenuPrint.asm"37 %endif38 %endif39 40 ;--------------------------------------------------------------------41 ; ConvertSectorCountInBXDXAXtoSizeAndPushForFormat42 ; Parameters:43 ; BX:DX:AX: Sector count44 ; Returns:45 ; Size in stack46 ; Corrupts registers:47 ; AX, BX, CX, DX, SI48 ;--------------------------------------------------------------------49 ALIGN JUMP_ALIGN50 ConvertSectorCountInBXDXAXtoSizeAndPushForFormat:51 pop si ; Pop return address52 call Size_ConvertSectorCountInBXDXAXtoKiB53 mov cx, BYTE_MULTIPLES.kiB54 call Size_GetSizeToAXAndCharToDLfromBXDXAXwithMagnitudeInCX55 push ax ; Size in magnitude56 push cx ; Tenths57 push dx ; Magnitude character58 jmp si59 60 50 61 51 ;-------------------------------------------------------------------- … … 77 67 mov si, ROMVARS.szVersion 78 68 ; Fall to BootMenuPrint_NullTerminatedStringFromCSSIandSetCF 79 80 69 81 70 ;-------------------------------------------------------------------- … … 102 91 103 92 ;-------------------------------------------------------------------- 104 ; BootMenuPrint_HardDiskMenuitem105 ; Parameters:106 ; DL: Untranslated Hard Disk number107 ; DS: RAMVARS segment108 ; SF: set for Information, clear for Item109 ; Returns:110 ; CF: Set since menu event handled111 ; Corrupts registers:112 ; AX, BX, SI, DI113 ;--------------------------------------------------------------------114 ALIGN JUMP_ALIGN115 BootMenuPrint_HardDiskMenuitem:116 js short BootMenuPrint_HardDiskMenuitemInformation117 call PrintDriveNumberAfterTranslationFromDL118 call RamVars_IsDriveHandledByThisBIOS119 jnc SHORT .HardDiskMenuitemForForeignDrive120 ; Fall to .HardDiskMenuitemForOurDrive121 122 ;--------------------------------------------------------------------123 ; .HardDiskMenuitemForOurDrive124 ; Parameters:125 ; DL: Untranslated Hard Disk number126 ; DS: RAMVARS segment127 ; Returns:128 ; CF: Set since menu event handled129 ; Corrupts registers:130 ; AX, BX, SI, DI131 ;--------------------------------------------------------------------132 .HardDiskMenuitemForOurDrive:133 call BootInfo_GetOffsetToBX134 lea si, [bx+BOOTNFO.szDrvName]135 xor bx, bx ; BDA segment136 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromBXSI137 stc138 ret139 140 ;--------------------------------------------------------------------141 ; BootMenuPrint_HardDiskMenuitemForForeignDrive142 ; Parameters:143 ; DL: Untranslated Hard Disk number144 ; DS: RAMVARS segment145 ; Returns:146 ; CF: Set since menu event handled147 ; Corrupts registers:148 ; AX, SI, DI149 ;--------------------------------------------------------------------150 ALIGN JUMP_ALIGN151 .HardDiskMenuitemForForeignDrive:152 mov si, g_szforeignHD153 jmp SHORT BootMenuPrint_NullTerminatedStringFromCSSIandSetCF154 155 156 ;--------------------------------------------------------------------157 93 ; BootMenuPrint_FloppyMenuitemInformation 158 94 ; Parameters: … … 165 101 ;-------------------------------------------------------------------- 166 102 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 103 ALIGN JUMP_ALIGN 104 BootMenuPrint_RefreshInformation: 105 CALL_MENU_LIBRARY ClearInformationArea 106 107 call BootMenu_GetDriveToDXforMenuitemInCX_And_RamVars_GetSegmentToDS 108 jnc BootMenuEvent_EventCompleted ; if no menu selection, abort 187 109 188 110 push bp 189 111 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 197 123 cmp bl, FLOPPY_TYPE_35_ED 198 ja SHORT .output124 ja SHORT BootMenuPrint_HardDiskRefreshInformation.output 199 125 200 126 ; Fall to .PrintKnownFloppyType 201 202 127 203 128 ;-------------------------------------------------------------------- … … 223 148 ;-------------------------------------------------------------------- 224 149 .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 228 154 cmp bl, FLOPPY_TYPE_525_HD 229 155 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 238 157 .ThreeHalf: 239 push ax; "5 1/4" or "3 1/2"158 push cx ; "5 1/4" or "3 1/2" 240 159 241 160 mov al,FloppyTypes.rgbCapacityMultiplier … … 243 162 push ax 244 163 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 ;-------------------------------------------------------------------- 179 ALIGN JUMP_ALIGN 180 BootMenuPrint_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 ;-------------------------------------------------------------------- 218 ALIGN JUMP_ALIGN 219 .HardDiskMenuitemInfoForForeignDrive: 220 call DriveXlate_ToOrBack 221 call AH15h_GetSectorCountFromForeignDriveToDXAX 222 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat 223 245 224 ALIGN JUMP_ALIGN 246 225 .output: 226 mov si, g_szCapacity 247 227 ;;; fall-through 248 228 … … 263 243 stc ; Successfull return from menu event 264 244 pop bp 265 ret266 267 268 ;--------------------------------------------------------------------269 ; Prints Hard Disk Menuitem information strings.270 ;271 ; BootMenuPrint_HardDiskMenuitemInformation272 ; Parameters:273 ; DL: Untranslated Hard Disk number274 ; DS: RAMVARS segment275 ; Returns:276 ; CF: Set since menu event was handled successfully277 ; Corrupts registers:278 ; BX, CX, DX, SI, DI, ES279 ;--------------------------------------------------------------------280 ALIGN JUMP_ALIGN281 BootMenuPrint_HardDiskMenuitemInformation:282 call RamVars_IsDriveHandledByThisBIOS283 jnc SHORT .HardDiskMenuitemInfoForForeignDrive284 call FindDPT_ForDriveNumber ; DS:DI to point DPT285 ; Fall to .HardDiskMenuitemInfoForOurDrive286 287 ;--------------------------------------------------------------------288 ; .HardDiskMenuitemInfoForOurDrive289 ; Parameters:290 ; DL: Untranslated Hard Disk number291 ; DS:DI: Ptr to DPT292 ; Returns:293 ; Nothing294 ; Corrupts registers:295 ; AX, BX, CX, DX, SI, DI, ES296 ;--------------------------------------------------------------------297 .HardDiskMenuitemInfoForOurDrive:298 push di299 ePUSH_T ax, BootMenuPrintCfg_ForOurDrive ; Return from BootMenuPrint_FormatCSSIfromParamsInSSBP300 push bp301 mov bp, sp302 ePUSH_T ax, g_szCapacity303 304 ; Get and push L-CHS size305 mov [RAMVARS.bTimeoutTicksLeft], dl ; Store drive number306 call AH15h_GetSectorCountToDXAX307 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat308 309 ; Get and push total LBA size310 mov dl, [RAMVARS.bTimeoutTicksLeft] ; Restore drive number311 call BootInfo_GetTotalSectorCount312 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat313 314 mov si, g_szSizeDual315 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP316 317 318 ;--------------------------------------------------------------------319 ; .HardDiskMenuitemInfoForForeignDrive320 ; Parameters:321 ; DL: Untranslated Hard Disk number322 ; DS: RAMVARS segment323 ; Returns:324 ; CF: Set since menu event was handled successfully325 ; Corrupts registers:326 ; AX, BX, CX, DX, SI, DI327 ;--------------------------------------------------------------------328 ALIGN JUMP_ALIGN329 .HardDiskMenuitemInfoForForeignDrive:330 push bp331 mov bp, sp332 ePUSH_T ax, g_szCapacity333 334 call DriveXlate_ToOrBack335 call AH15h_GetSectorCountFromForeignDriveToDXAX336 call ConvertSectorCountInBXDXAXtoSizeAndPushForFormat337 338 mov si, g_szSizeSingle339 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP340 341 342 ;--------------------------------------------------------------------343 ; BootMenuPrint_ClearInformationArea344 ; Parameters:345 ; Nothing346 ; Returns:347 ; CF: Set348 ; Corrupts registers:349 ; AX, DI350 ;--------------------------------------------------------------------351 ALIGN JUMP_ALIGN352 BootMenuPrint_ClearInformationArea:353 CALL_MENU_LIBRARY ClearInformationArea354 stc355 245 ret 356 246 357 247 358 248 ;-------------------------------------------------------------------- … … 373 263 CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH 374 264 ret 375 376 377 ;--------------------------------------------------------------------378 ; PrintDriveNumberAfterTranslationFromDL379 ; Parameters:380 ; DL: Untranslated Floppy Drive number381 ; DS: RAMVARS segment382 ; Returns:383 ; Nothing384 ; Corrupts registers:385 ; AX, DI386 ;--------------------------------------------------------------------387 ALIGN JUMP_ALIGN388 PrintDriveNumberAfterTranslationFromDL:389 mov ax, dx390 call DriveXlate_ToOrBack391 xchg dx, ax ; Restore DX, WORD to print in AL392 xor ah, ah393 push bp394 mov bp, sp395 mov si, g_szDriveNum396 push ax397 398 BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay:399 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP400 265 401 266 … … 510 375 push cx ; Key attribute for last space 511 376 mov si, g_szHotkey 512 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay 377 378 BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay: 379 jmp SHORT BootMenuPrint_FormatCSSIfromParamsInSSBP 513 380 514 381 … … 528 395 529 396 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 ;-------------------------------------------------------------------- 406 ALIGN JUMP_ALIGN 407 ConvertSectorCountInBXDXAXtoSizeAndPushForFormat: 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 419 FloppyTypes: 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 12 12 ; BootMenuPrintCfg_ForOurDrive 13 13 ; Parameters: 14 ; DS: Segment to DPT 15 ; Stack: Offset to DPT 14 ; DS:DI: Pointer to DPT 16 15 ; Returns: 17 16 ; Nothing … … 21 20 ALIGN JUMP_ALIGN 22 21 BootMenuPrintCfg_ForOurDrive: 23 mov si, g_szCfgHeader24 call BootMenuPrint_NullTerminatedStringFromCSSIandSetCF25 pop di26 22 eMOVZX ax, BYTE [di+DPT.bIdevarsOffset] 27 23 xchg si, ax ; CS:SI now points to IDEVARS 28 24 ; Fall to .PushAndFormatCfgString 29 30 ;--------------------------------------------------------------------31 ; PushAndFormatCfgString32 ; Parameters:33 ; DS:DI: Ptr to DPT34 ; CS:SI: Ptr to IDEVARS35 ; Returns:36 ; Nothing37 ; Corrupts registers:38 ; AX, DX, SI, DI39 ;--------------------------------------------------------------------40 .PushAndFormatCfgString:41 push bp42 mov bp, sp43 ; Fall to first push below44 25 45 26 ;-------------------------------------------------------------------- … … 114 95 ;-------------------------------------------------------------------- 115 96 .PushIRQ: 116 eMOVZX ax, BYTE [cs:si+IDEVARS.bIRQ] 97 mov al, BYTE [cs:si+IDEVARS.bIRQ] 98 cbw 117 99 push ax 118 100 … … 129 111 .PushResetStatus: 130 112 mov al, [di+DPT.bFlagsHigh] 131 and a x, MASKH_DPT_RESET113 and al, MASKH_DPT_RESET ; ah already zero from last push 132 114 push ax 133 115 … … 142 124 ;-------------------------------------------------------------------- 143 125 .PrintValuesFromStack: 144 mov si, g_szCfgFormat 145 jmp BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay 126 jmp BootMenuPrint_HardDiskRefreshInformation.output 146 127 -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootPrint.asm
r192 r241 22 22 mov si, g_szReadError 23 23 24 BootPrint_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay:25 24 jmp short BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay 26 25 … … 54 53 55 54 mov si, g_szTryToBoot 56 jmp short Boot Print_BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay55 jmp short BootMenuPrint_FormatCSSIfromParamsInSSBP_Relay 57 56 58 57 -
trunk/XTIDE_Universal_BIOS/Src/Strings.asm
r233 r241 8 8 ; Section containing code 9 9 SECTION .text 10 11 ; POST drive detection strings12 g_szRomAt: db "%s @ %x",LF,CR,NULL13 10 14 11 ; The following strings are used by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP … … 29 26 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 30 27 %if ((g_szDetectEnd-$$) & 0xff00) <> ((g_szDetectStart-$$) & 0xff00) 31 %error "g_szDetect* strings must be on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm" 32 %endif 33 %endif 28 %error "g_szDetect* strings must start on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm" 29 %endif 30 %endif 31 32 ; Boot Menu menuitem strings 33 ; 34 ; The following strings are used by BootMenuPrint_* routines. 35 ; To support optimizations in that code, these strings must start on the same 256 byte page, 36 ; which is checked at assembly time below. 37 ; 38 g_szBootMenuPrintStart: 39 g_szDriveNum: db "%x %s",NULL 40 g_szDriveNumBOOTNFO: db "%x %z",NULL 41 g_szFloppyDrv: db "Floppy Drive %c",NULL 42 g_szBootMenuPrintEnd: 43 g_szForeignHD: db "Foreign Hard Disk",NULL 44 45 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 46 %if ((g_szBootMenuPrintStart-$$) & 0xff00) <> ((g_szBootMenuPrintEnd-$$) & 0xff00) 47 %error "g_szBootMenuPrint* strings must start on the same 256 byte page, required by the BootMenuPrint_* routines. Please move this block up or down within strings.asm" 48 %endif 49 %endif 50 51 ; POST drive detection strings 52 g_szRomAt: db "%s @ %x",LF,CR,NULL 34 53 35 54 ; Boot loader strings … … 44 63 g_szRomBoot: db "ROM Boot",NULL 45 64 g_szHotkey: db "%A%c%c%A%s%A ",NULL 46 47 48 ; Boot Menu menuitem strings 49 g_szDriveNum: db "%x ",NULL 50 g_szFDLetter: db "%s %c",NULL 51 g_szFloppyDrv: db "Floppy Drive",NULL 52 g_szforeignHD: db "Foreign Hard Disk",NULL 53 65 54 66 ; Boot Menu information strings 55 g_szCapacity: db "Capacity : ",NULL 56 g_szSizeSingle: db "%s%u.%u %ciB",NULL 57 g_szSizeDual: db "%s%5-u.%u %ciB /%5-u.%u %ciB",LF,CR,NULL 58 g_szCfgHeader: db "Addr.",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus", SINGLE_VERTICAL,"IRQ", SINGLE_VERTICAL,"Reset",LF,CR,NULL 59 g_szCfgFormat: db "%s" ,SINGLE_VERTICAL,"%5-u", SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x", NULL 60 67 g_szCapacity: db "Capacity : %s",NULL 68 g_szCapacityNum: db "%5-u.%u %ciB",NULL 69 g_szSizeDual: db "%s /%s",LF,CR 70 db "Addr.",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL, "IRQ",SINGLE_VERTICAL,"Reset",LF,CR 71 db "%s",SINGLE_VERTICAL, "%5-u",SINGLE_VERTICAL, "%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x" ,NULL 72 73 ; Boot Menu Floppy Disk strings 74 ; 75 ; The following strings are used by BootMenuPrint_RefreshInformation 76 ; To support optimizations in that code, these strings must start on the same 256 byte page, 77 ; which is checked at assembly time below. 78 ; 79 g_szFddStart: 80 g_szFddUnknown: db "Unknown",NULL 81 g_szFddSizeOr: db "5",ONE_QUARTER,QUOTATION_MARK," or 3",ONE_HALF,QUOTATION_MARK," DD",NULL 82 g_szFddSize: db "%s",QUOTATION_MARK,", %u kiB",NULL ; 3½", 1440 kiB 83 g_szFddThreeHalf: db "3",ONE_HALF,NULL 84 g_szFddEnd: 85 g_szFddFiveQuarter: db "5",ONE_QUARTER,NULL 86 87 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 88 %if ((g_szFddStart-$$) & 0xff00) <> ((g_szFddEnd-$$) & 0xff00) 89 %error "g_szFdd* strings must start on the same 256 byte page, required by the BootMenuPrint_RefreshInformation routines for floppy drives. Please move this block up or down within strings.asm" 90 %endif 91 %endif 92 61 93 g_szAddressingModes: 62 94 g_szLCHS: db "L-CHS",NULL … … 83 115 %endif 84 116 85 g_szFddUnknown: db "%sUnknown",NULL86 g_szFddSizeOr: db "%s5",ONE_QUARTER,QUOTATION_MARK," or 3",ONE_HALF,QUOTATION_MARK," DD",NULL87 g_szFddSize: db "%s%s",QUOTATION_MARK,", %u kiB",NULL ; 3½", 1440 kiB88 89 g_szFddThreeHalf: db "3",ONE_HALF,NULL90 g_szFddFiveQuarter: db "5",ONE_QUARTER,NULL91 g_szFddThreeFive_Displacement equ (g_szFddFiveQuarter - g_szFddThreeHalf)92 93 117 g_szBusTypeValues: 94 118 g_szBusTypeValues_8Dual: db "D8 ",NULL … … 152 176 ;$translate{200} = 18; # DOUBLE_BOTTOM_LEFT_CORNER 153 177 ;$translate{181} = 19; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL 154 ;$translate{ord('0')} = 20; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL178 ;$translate{ord('0')} = 20; 155 179 ; 156 180 ; Formats begin immediately after the last Translated character (they are in the same table) … … 167 191 ;$format{"2-u"} = 28; # must be even 168 192 ;$format{"A"} = 29; # n/a 169 ;$format{"s"} = 30; # n/a 193 ;$format{"s"} = 30; # n/a, normal string from DS 194 ;$format{"z"} = 31; # n/a, boot string from BDA 170 195 ; 171 196 ; NOTE: The last $format cannot exceed 31 (stored in a 5-bit quantity). -
trunk/XTIDE_Universal_BIOS/Src/StringsCompressed.asm
r233 r241 17 17 SECTION .text 18 18 19 ; The following strings are used by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP 20 ; To support an optimization in that code, these strings must start on the same 256 byte page, 21 ; which is checked at assembly time below. 22 ; 23 g_szDetectStart: 24 g_szDetectMaster: ; db "Master",NULL 25 ; db 4dh, 61h, 73h, 74h, 65h, 72h, 00h ; uncompressed 26 db 53h, 67h, 79h, 7ah, 6bh, 0b8h ; compressed 27 28 g_szDetectSlave: ; db "Slave ",NULL 29 ; db 53h, 6ch, 61h, 76h, 65h, 20h, 00h ; uncompressed 30 db 59h, 72h, 67h, 7ch, 6bh, 00h ; compressed 31 32 g_szDetectOuter: ; db "IDE %s at %s: ",NULL 33 ; db 49h, 44h, 45h, 20h, 25h, 73h, 20h, 61h, 74h, 20h, 25h, 73h, 3ah, 20h, 00h ; uncompressed 34 db 4fh, 4ah, 0cbh, 3eh, 20h, 67h, 0fah, 3eh, 40h, 00h ; compressed 35 36 g_szDetectPort: ; db "%x",NULL ; IDE Master at 1F0h: 37 ; db 25h, 78h, 00h ; uncompressed 38 db 19h ; compressed 39 40 g_szDetectCOM: ; db "COM%c%s",NULL 41 ; db 43h, 4fh, 4dh, 25h, 63h, 25h, 73h, 00h ; uncompressed 42 db 49h, 55h, 53h, 35h, 1eh ; compressed 43 44 g_szDetectCOMAuto: ; db " Auto",NULL 45 ; db 20h, 41h, 75h, 74h, 6fh, 00h ; uncompressed 46 db 20h, 47h, 7bh, 7ah, 0b5h ; compressed 47 48 g_szDetectCOMSmall: ; db "/%u%u00",NULL ; IDE Master at COM1/9600: 49 ; db 2fh, 25h, 75h, 25h, 75h, 30h, 30h, 00h ; uncompressed 50 db 2ah, 37h, 37h, 34h, 14h ; compressed 51 52 g_szDetectEnd: 53 g_szDetectCOMLarge: ; db "/%u.%uK",NULL ; IDE Master at COM1/19.2K: 54 ; db 2fh, 25h, 75h, 2eh, 25h, 75h, 4bh, 00h ; uncompressed 55 db 2ah, 37h, 29h, 37h, 91h ; compressed 56 57 58 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 59 %if ((g_szDetectEnd-$$) & 0xff00) <> ((g_szDetectStart-$$) & 0xff00) 60 %error "g_szDetect* strings must start on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm" 61 %endif 62 %endif 63 64 ; Boot Menu menuitem strings 65 ; 66 ; The following strings are used by BootMenuPrint_* routines. 67 ; To support optimizations in that code, these strings must start on the same 256 byte page, 68 ; which is checked at assembly time below. 69 ; 70 g_szBootMenuPrintStart: 71 g_szDriveNum: ; db "%x %s",NULL 72 ; db 25h, 78h, 20h, 25h, 73h, 00h ; uncompressed 73 db 39h, 20h, 1eh ; compressed 74 75 g_szDriveNumBOOTNFO: ; db "%x %z",NULL 76 ; db 25h, 78h, 20h, 25h, 7ah, 00h ; uncompressed 77 db 39h, 20h, 1fh ; compressed 78 79 g_szFloppyDrv: ; db "Floppy Drive %c",NULL 80 ; db 46h, 6ch, 6fh, 70h, 70h, 79h, 20h, 44h, 72h, 69h, 76h, 65h, 20h, 25h, 63h, 00h ; uncompressed 81 db 4ch, 72h, 75h, 76h, 76h, 0ffh, 4ah, 78h, 6fh, 7ch, 0ebh, 15h ; compressed 82 83 g_szBootMenuPrintEnd: 84 g_szForeignHD: ; db "Foreign Hard Disk",NULL 85 ; db 46h, 6fh, 72h, 65h, 69h, 67h, 6eh, 20h, 48h, 61h, 72h, 64h, 20h, 44h, 69h, 73h, 6bh, 00h ; uncompressed 86 db 4ch, 75h, 78h, 6bh, 6fh, 6dh, 0f4h, 4eh, 67h, 78h, 0eah, 4ah, 6fh, 79h, 0b1h ; compressed 87 88 89 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 90 %if ((g_szBootMenuPrintStart-$$) & 0xff00) <> ((g_szBootMenuPrintEnd-$$) & 0xff00) 91 %error "g_szBootMenuPrint* strings must start on the same 256 byte page, required by the BootMenuPrint_* routines. Please move this block up or down within strings.asm" 92 %endif 93 %endif 94 19 95 ; POST drive detection strings 20 96 g_szRomAt: ; db "%s @ %x",LF,CR,NULL … … 23 99 24 100 25 ; The following strings are used by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP26 ; To support an optimization in that code, these strings must start on the same 256 byte page,27 ; which is checked at assembly time below.28 ;29 g_szDetectStart:30 g_szDetectMaster: ; db "Master",NULL31 ; db 4dh, 61h, 73h, 74h, 65h, 72h, 00h ; uncompressed32 db 53h, 67h, 79h, 7ah, 6bh, 0b8h ; compressed33 34 g_szDetectSlave: ; db "Slave ",NULL35 ; db 53h, 6ch, 61h, 76h, 65h, 20h, 00h ; uncompressed36 db 59h, 72h, 67h, 7ch, 6bh, 00h ; compressed37 38 g_szDetectOuter: ; db "IDE %s at %s: ",NULL39 ; db 49h, 44h, 45h, 20h, 25h, 73h, 20h, 61h, 74h, 20h, 25h, 73h, 3ah, 20h, 00h ; uncompressed40 db 4fh, 4ah, 0cbh, 3eh, 20h, 67h, 0fah, 3eh, 40h, 00h ; compressed41 42 g_szDetectPort: ; db "%x",NULL ; IDE Master at 1F0h:43 ; db 25h, 78h, 00h ; uncompressed44 db 19h ; compressed45 46 g_szDetectCOM: ; db "COM%c%s",NULL47 ; db 43h, 4fh, 4dh, 25h, 63h, 25h, 73h, 00h ; uncompressed48 db 49h, 55h, 53h, 35h, 1eh ; compressed49 50 g_szDetectCOMAuto: ; db " Auto",NULL51 ; db 20h, 41h, 75h, 74h, 6fh, 00h ; uncompressed52 db 20h, 47h, 7bh, 7ah, 0b5h ; compressed53 54 g_szDetectCOMSmall: ; db "/%u%u00",NULL ; IDE Master at COM1/9600:55 ; db 2fh, 25h, 75h, 25h, 75h, 30h, 30h, 00h ; uncompressed56 db 2ah, 37h, 37h, 34h, 14h ; compressed57 58 g_szDetectEnd:59 g_szDetectCOMLarge: ; db "/%u.%uK",NULL ; IDE Master at COM1/19.2K:60 ; db 2fh, 25h, 75h, 2eh, 25h, 75h, 4bh, 00h ; uncompressed61 db 2ah, 37h, 29h, 37h, 91h ; compressed62 63 64 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS65 %if ((g_szDetectEnd-$$) & 0xff00) <> ((g_szDetectStart-$$) & 0xff00)66 %error "g_szDetect* strings must be on the same 256 byte page, required by DetectPrint_StartDetectWithMasterOrSlaveStringInAXandIdeVarsInCSBP. Please move this block up or down within strings.asm"67 %endif68 %endif69 70 101 ; Boot loader strings 71 102 g_szTryToBoot: ; db "Booting from %s %x",ANGLE_QUOTE_RIGHT,"%x",LF,CR,NULL … … 104 135 105 136 106 107 ; Boot Menu menuitem strings108 g_szDriveNum: ; db "%x ",NULL109 ; db 25h, 78h, 20h, 00h ; uncompressed110 db 39h, 00h ; compressed111 112 g_szFDLetter: ; db "%s %c",NULL113 ; db 25h, 73h, 20h, 25h, 63h, 00h ; uncompressed114 db 3eh, 20h, 15h ; compressed115 116 g_szFloppyDrv: ; db "Floppy Drive",NULL117 ; db 46h, 6ch, 6fh, 70h, 70h, 79h, 20h, 44h, 72h, 69h, 76h, 65h, 00h ; uncompressed118 db 4ch, 72h, 75h, 76h, 76h, 0ffh, 4ah, 78h, 6fh, 7ch, 0abh ; compressed119 120 g_szforeignHD: ; db "Foreign Hard Disk",NULL121 ; db 46h, 6fh, 72h, 65h, 69h, 67h, 6eh, 20h, 48h, 61h, 72h, 64h, 20h, 44h, 69h, 73h, 6bh, 00h ; uncompressed122 db 4ch, 75h, 78h, 6bh, 6fh, 6dh, 0f4h, 4eh, 67h, 78h, 0eah, 4ah, 6fh, 79h, 0b1h ; compressed123 124 125 137 ; Boot Menu information strings 126 g_szCapacity: ; db "Capacity : ",NULL 127 ; db 43h, 61h, 70h, 61h, 63h, 69h, 74h, 79h, 20h, 3ah, 20h, 00h ; uncompressed 128 db 49h, 67h, 76h, 67h, 69h, 6fh, 7ah, 0ffh, 40h, 00h ; compressed 129 130 g_szSizeSingle: ; db "%s%u.%u %ciB",NULL 131 ; db 25h, 73h, 25h, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 00h ; uncompressed 132 db 3eh, 37h, 29h, 37h, 20h, 35h, 6fh, 88h ; compressed 133 134 g_szSizeDual: ; db "%s%5-u.%u %ciB /%5-u.%u %ciB",LF,CR,NULL 135 ; db 25h, 73h, 25h, 35h, 2dh, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 20h, 2fh, 25h, 35h, 2dh, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 0ah, 0dh, 00h ; uncompressed 136 db 3eh, 38h, 29h, 37h, 20h, 35h, 6fh, 0c8h, 2ah, 38h, 29h, 37h, 20h, 35h, 6fh, 48h, 1bh ; compressed 137 138 g_szCfgHeader: ; db "Addr.",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus", SINGLE_VERTICAL,"IRQ", SINGLE_VERTICAL,"Reset",LF,CR,NULL 139 ; db 41h, 64h, 64h, 72h, 2eh, 0b3h, 42h, 6ch, 6fh, 63h, 6bh, 0b3h, 42h, 75h, 73h, 0b3h, 49h, 52h, 51h, 0b3h, 52h, 65h, 73h, 65h, 74h, 0ah, 0dh, 00h ; uncompressed 140 db 47h, 6ah, 6ah, 78h, 29h, 23h, 48h, 72h, 75h, 69h, 71h, 23h, 48h, 7bh, 79h, 23h, 4fh, 58h, 57h, 23h, 58h, 6bh, 79h, 6bh, 7ah, 1bh ; compressed 141 142 g_szCfgFormat: ; db "%s" ,SINGLE_VERTICAL,"%5-u", SINGLE_VERTICAL,"%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x", NULL 143 ; db 25h, 73h, 0b3h, 25h, 35h, 2dh, 75h, 0b3h, 25h, 73h, 0b3h, 20h, 25h, 32h, 2dh, 49h, 0b3h, 25h, 35h, 2dh, 78h, 00h ; uncompressed 144 db 3eh, 23h, 38h, 23h, 3eh, 23h, 20h, 36h, 23h, 1ah ; compressed 145 138 g_szCapacity: ; db "Capacity : %s",NULL 139 ; db 43h, 61h, 70h, 61h, 63h, 69h, 74h, 79h, 20h, 3ah, 20h, 25h, 73h, 00h ; uncompressed 140 db 49h, 67h, 76h, 67h, 69h, 6fh, 7ah, 0ffh, 0c0h, 1eh ; compressed 141 142 g_szCapacityNum: ; db "%5-u.%u %ciB",NULL 143 ; db 25h, 35h, 2dh, 75h, 2eh, 25h, 75h, 20h, 25h, 63h, 69h, 42h, 00h ; uncompressed 144 db 38h, 29h, 37h, 20h, 35h, 6fh, 88h ; compressed 145 146 g_szSizeDual: ; db "%s /%s",LF,CR 147 ; db 25h, 73h, 20h, 2fh, 25h, 73h, 0ah, 0dh ; uncompressed 148 db 3eh, 20h, 2ah, 3eh, 3bh ; compressed 149 150 ; db "Addr.",SINGLE_VERTICAL,"Block",SINGLE_VERTICAL,"Bus",SINGLE_VERTICAL, "IRQ",SINGLE_VERTICAL,"Reset",LF,CR 151 ; db 41h, 64h, 64h, 72h, 2eh, 0b3h, 42h, 6ch, 6fh, 63h, 6bh, 0b3h, 42h, 75h, 73h, 0b3h, 49h, 52h, 51h, 0b3h, 52h, 65h, 73h, 65h, 74h, 0ah, 0dh ; uncompressed 152 db 47h, 6ah, 6ah, 78h, 29h, 23h, 48h, 72h, 75h, 69h, 71h, 23h, 48h, 7bh, 79h, 23h, 4fh, 58h, 57h, 23h, 58h, 6bh, 79h, 6bh, 7ah, 3bh ; compressed 153 154 ; db "%s",SINGLE_VERTICAL, "%5-u",SINGLE_VERTICAL, "%s",SINGLE_VERTICAL," %2-I",SINGLE_VERTICAL,"%5-x" ,NULL 155 ; db 25h, 73h, 0b3h, 25h, 35h, 2dh, 75h, 0b3h, 25h, 73h, 0b3h, 20h, 25h, 32h, 2dh, 49h, 0b3h, 25h, 35h, 2dh, 78h, 00h ; uncompressed 156 db 3eh, 23h, 38h, 23h, 3eh, 23h, 20h, 36h, 23h, 1ah ; compressed 157 158 159 ; Boot Menu Floppy Disk strings 160 ; 161 ; The following strings are used by BootMenuPrint_RefreshInformation 162 ; To support optimizations in that code, these strings must start on the same 256 byte page, 163 ; which is checked at assembly time below. 164 ; 165 g_szFddStart: 166 g_szFddUnknown: ; db "Unknown",NULL 167 ; db 55h, 6eh, 6bh, 6eh, 6fh, 77h, 6eh, 00h ; uncompressed 168 db 5bh, 74h, 71h, 74h, 75h, 7dh, 0b4h ; compressed 169 170 g_szFddSizeOr: ; db "5",ONE_QUARTER,QUOTATION_MARK," or 3",ONE_HALF,QUOTATION_MARK," DD",NULL 171 ; db 35h, 0ach, 22h, 20h, 6fh, 72h, 20h, 33h, 0abh, 22h, 20h, 44h, 44h, 00h ; uncompressed 172 db 2fh, 21h, 26h, 20h, 75h, 0f8h, 2dh, 22h, 26h, 20h, 4ah, 8ah ; compressed 173 174 g_szFddSize: ; db "%s",QUOTATION_MARK,", %u kiB",NULL ; 3½", 1440 kiB 175 ; db 25h, 73h, 22h, 2ch, 20h, 25h, 75h, 20h, 6bh, 69h, 42h, 00h ; uncompressed 176 db 3eh, 26h, 27h, 20h, 37h, 20h, 71h, 6fh, 88h ; compressed 177 178 g_szFddThreeHalf: ; db "3",ONE_HALF,NULL 179 ; db 33h, 0abh, 00h ; uncompressed 180 db 2dh, 02h ; compressed 181 182 g_szFddEnd: 183 g_szFddFiveQuarter: ; db "5",ONE_QUARTER,NULL 184 ; db 35h, 0ach, 00h ; uncompressed 185 db 2fh, 01h ; compressed 186 187 188 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 189 %if ((g_szFddStart-$$) & 0xff00) <> ((g_szFddEnd-$$) & 0xff00) 190 %error "g_szFdd* strings must start on the same 256 byte page, required by the BootMenuPrint_RefreshInformation routines for floppy drives. Please move this block up or down within strings.asm" 191 %endif 192 %endif 146 193 147 194 g_szAddressingModes: … … 180 227 %endif 181 228 %endif 182 183 g_szFddUnknown: ; db "%sUnknown",NULL184 ; db 25h, 73h, 55h, 6eh, 6bh, 6eh, 6fh, 77h, 6eh, 00h ; uncompressed185 db 3eh, 5bh, 74h, 71h, 74h, 75h, 7dh, 0b4h ; compressed186 187 g_szFddSizeOr: ; db "%s5",ONE_QUARTER,QUOTATION_MARK," or 3",ONE_HALF,QUOTATION_MARK," DD",NULL188 ; db 25h, 73h, 35h, 0ach, 22h, 20h, 6fh, 72h, 20h, 33h, 0abh, 22h, 20h, 44h, 44h, 00h ; uncompressed189 db 3eh, 2fh, 21h, 26h, 20h, 75h, 0f8h, 2dh, 22h, 26h, 20h, 4ah, 8ah ; compressed190 191 g_szFddSize: ; db "%s%s",QUOTATION_MARK,", %u kiB",NULL ; 3½", 1440 kiB192 ; db 25h, 73h, 25h, 73h, 22h, 2ch, 20h, 25h, 75h, 20h, 6bh, 69h, 42h, 00h ; uncompressed193 db 3eh, 3eh, 26h, 27h, 20h, 37h, 20h, 71h, 6fh, 88h ; compressed194 195 196 g_szFddThreeHalf: ; db "3",ONE_HALF,NULL197 ; db 33h, 0abh, 00h ; uncompressed198 db 2dh, 02h ; compressed199 200 g_szFddFiveQuarter: ; db "5",ONE_QUARTER,NULL201 ; db 35h, 0ach, 00h ; uncompressed202 db 2fh, 01h ; compressed203 204 g_szFddThreeFive_Displacement equ (g_szFddFiveQuarter - g_szFddThreeHalf)205 229 206 230 g_szBusTypeValues: … … 289 313 ;$translate{200} = 18; # DOUBLE_BOTTOM_LEFT_CORNER [StringsCompress Processed] 290 314 ;$translate{181} = 19; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL [StringsCompress Processed] 291 ;$translate{ord('0')} = 20; # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL[StringsCompress Processed]315 ;$translate{ord('0')} = 20; [StringsCompress Processed] 292 316 ; 293 317 ; Formats begin immediately after the last Translated character (they are in the same table) … … 304 328 ;$format{"2-u"} = 28; # must be even [StringsCompress Processed] 305 329 ;$format{"A"} = 29; # n/a [StringsCompress Processed] 306 ;$format{"s"} = 30; # n/a [StringsCompress Processed] 330 ;$format{"s"} = 30; # n/a, normal string from DS [StringsCompress Processed] 331 ;$format{"z"} = 31; # n/a, boot string from BDA [StringsCompress Processed] 307 332 ; 308 333 ; NOTE: The last $format cannot exceed 31 (stored in a 5-bit quantity). … … 358 383 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_A) ; 29 359 384 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_s) ; 30 385 db (DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_z) ; 31 360 386 361 387 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS … … 390 416 %error "DisplayFormatCompressed_Format_s is out of range of DisplayFormatCompressed_BaseFormatOffset" 391 417 %endif 418 %if DisplayFormatCompressed_BaseFormatOffset < DisplayFormatCompressed_Format_z || DisplayFormatCompressed_BaseFormatOffset - DisplayFormatCompressed_Format_z > 255 419 %error "DisplayFormatCompressed_Format_z is out of range of DisplayFormatCompressed_BaseFormatOffset" 420 %endif 392 421 %endif 393 422 394 423 ;; translated usage stats 395 ;; total translated: 424 ;; 33:1 425 ;; 32:31 426 ;; 181:1 427 ;; 53:2 428 ;; 48:2 429 ;; 200:1 430 ;; 46:3 431 ;; 179:8 432 ;; 44:1 433 ;; 50:2 434 ;; 51:3 435 ;; 47:3 436 ;; 52:1 437 ;; 172:2 438 ;; 34:3 439 ;; 49:1 440 ;; 56:5 441 ;; 45:3 442 ;; 175:1 443 ;; 171:2 444 ;; 54:1 445 ;; total translated: 21 396 446 397 447 ;; format usage stats 398 448 ;; A:4 399 449 ;; 2-u:1 400 ;; 5-u: 3401 ;; x: 6402 ;; s:1 5450 ;; 5-u:2 451 ;; x:7 452 ;; s:13 403 453 ;; 5-x:1 404 454 ;; nl:6 405 455 ;; 2-I:1 406 ;; c:7 407 ;; u:9 408 ;; total format: 10 456 ;; c:5 457 ;; u:6 458 ;; z:1 459 ;; total format: 11 409 460 410 461 ;; alphabet usage stats … … 417 468 ;; 64,@:1 418 469 ;; 65,A:4 419 ;; 66,B: 11470 ;; 66,B:9 420 471 ;; 67,C:4 421 472 ;; 68,D:10 … … 456 507 ;; 103,g:2 457 508 ;; 104,h: 458 ;; 105,i: 11509 ;; 105,i:9 459 510 ;; 106,j: 460 511 ;; 107,k:4 -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm
r181 r241 31 31 ;-------------------------------------------------------------------- 32 32 .StealMemoryForRAMVARS: 33 mov ax, LITE_MODE_RAMVARS_SEGMENT 33 34 test BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE 34 35 jz SHORT .InitializeRamvars ; No need to steal RAM … … 39 40 mov ax, [BDA.wBaseMem] 40 41 eSHL_IM ax, 6 ; Segment to first stolen kB (*=40h) 42 ; Fall to .InitializeRamvars 43 44 ;-------------------------------------------------------------------- 45 ; .InitializeRamvars 46 ; Parameters: 47 ; AX: RAMVARS segment 48 ; Returns: 49 ; DS: RAMVARS segment 50 ; Corrupts registers: 51 ; AX, CX, DI, ES 52 ;-------------------------------------------------------------------- 53 .InitializeRamvars: 41 54 mov ds, ax 42 mov WORD [RAMVARS.wSignature], RAMVARS_SIGNATURE 43 ; Fall to .InitializeRamvars 44 45 ;-------------------------------------------------------------------- 46 ; .InitializeRamvars 47 ; Parameters: 48 ; Nothing 49 ; Returns: 50 ; DS: RAMVARS segment 51 ; Corrupts registers: 52 ; AX, CX, DI, ES 53 ;-------------------------------------------------------------------- 54 .InitializeRamvars: 55 call RamVars_GetSegmentToDS 55 mov es, ax 56 56 mov cx, RAMVARS_size 57 57 xor di, di 58 push ds59 pop es60 58 call Memory_ZeroESDIwithSizeInCX 61 59 mov WORD [RAMVARS.wSignature], RAMVARS_SIGNATURE
Note:
See TracChangeset
for help on using the changeset viewer.