Changeset 181 in xtideuniversalbios
- Timestamp:
- Nov 13, 2011, 3:38:40 PM (13 years ago)
- google:author:
- krille_n_@hotmail.com
- Location:
- trunk
- Files:
-
- 57 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Inc/Emulate.inc
r168 r181 452 452 times %2 %3 %1, 1 453 453 %else 454 %if %2 > 7 454 ; %if %2 > 7 ; Original value 455 %if %2 > 3 ; Size optimized value 455 456 push cx 456 457 mov cl, %2 -
trunk/Assembly_Library/Inc/Math.inc
r172 r181 43 43 ; %2: Operand 2 44 44 ; Returns: 45 ; %1: Lesser operand45 ; %1: Greater operand 46 46 ; Corrupts registers: 47 47 ; Nothing -
trunk/Assembly_Library/Src/Display/Display.asm
r177 r181 57 57 jmp ax 58 58 59 60 %define InitializeDisplayContext DisplayContext_Initialize59 60 %define InitializeDisplayContext DisplayContext_Initialize 61 61 62 62 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS 63 %define SetCharacterPointerFromBXAX DisplayContext_SetCharacterPointerFromBXAX63 %define SetCharacterPointerFromBXAX DisplayContext_SetCharacterPointerFromBXAX 64 64 %endif 65 %define SetCharOutputFunctionFromAXwithAttribFlagInBL DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL66 %define SetCharacterOutputParameterFromAX DisplayContext_SetCharacterOutputParameterFromAX67 %define SetCharacterAttributeFromAL DisplayContext_SetCharacterAttributeFromAL68 %define SetCursorShapeFromAX DisplayCursor_SetShapeFromAX69 %define SetCursorCoordinatesFromAX DisplayCursor_SetCoordinatesFromAX70 %define SetNewPageFromAL DisplayPage_SetFromAL71 %define SynchronizeDisplayContextToHardware DisplayContext_SynchronizeToHardware65 %define SetCharOutputFunctionFromAXwithAttribFlagInBL DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL 66 %define SetCharacterOutputParameterFromAX DisplayContext_SetCharacterOutputParameterFromAX 67 %define SetCharacterAttributeFromAL DisplayContext_SetCharacterAttributeFromAL 68 %define SetCursorShapeFromAX DisplayCursor_SetShapeFromAX 69 %define SetCursorCoordinatesFromAX DisplayCursor_SetCoordinatesFromAX 70 %define SetNewPageFromAL DisplayPage_SetFromAL 71 %define SynchronizeDisplayContextToHardware DisplayContext_SynchronizeToHardware 72 72 73 73 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS 74 %define GetCharacterPointerToBXAX DisplayContext_GetCharacterPointerToBXAX74 %define GetCharacterPointerToBXAX DisplayContext_GetCharacterPointerToBXAX 75 75 %endif 76 %define GetSoftwareCoordinatesToAX DisplayCursor_GetSoftwareCoordinatesToAX77 %define GetColumnsToALandRowsToAH DisplayPage_GetColumnsToALandRowsToAH76 %define GetSoftwareCoordinatesToAX DisplayCursor_GetSoftwareCoordinatesToAX 77 %define GetColumnsToALandRowsToAH DisplayPage_GetColumnsToALandRowsToAH 78 78 79 %define FormatNullTerminatedStringFromCSSI Display_FormatNullTerminatedStringFromCSSI79 %define FormatNullTerminatedStringFromCSSI Display_FormatNullTerminatedStringFromCSSI 80 80 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS 81 %define PrintSignedWordFromAXWithBaseInBX DisplayPrint_SignedWordFromAXWithBaseInBX81 %define PrintSignedWordFromAXWithBaseInBX DisplayPrint_SignedWordFromAXWithBaseInBX 82 82 %endif 83 %define PrintWordFromAXwithBaseInBX DisplayPrint_WordFromAXWithBaseInBX84 %define PrintCharBufferFromBXSIwithLengthInCX DisplayPrint_CharacterBufferFromBXSIwithLengthInCX85 %define PrintNullTerminatedStringFromBXSI DisplayPrint_NullTerminatedStringFromBXSI86 %define PrintNullTerminatedStringFromCSSI DisplayPrint_NullTerminatedStringFromCSSI87 %define PrintRepeatedCharacterFromALwithCountInCX DisplayPrint_RepeatCharacterFromALwithCountInCX88 %define PrintCharacterFromAL DisplayPrint_CharacterFromAL89 %define PrintNewlineCharacters DisplayPrint_Newline83 %define PrintWordFromAXwithBaseInBX DisplayPrint_WordFromAXWithBaseInBX 84 %define PrintCharBufferFromBXSIwithLengthInCX DisplayPrint_CharacterBufferFromBXSIwithLengthInCX 85 %define PrintNullTerminatedStringFromBXSI DisplayPrint_NullTerminatedStringFromBXSI 86 %define PrintNullTerminatedStringFromCSSI DisplayPrint_NullTerminatedStringFromCSSI 87 %define PrintRepeatedCharacterFromALwithCountInCX DisplayPrint_RepeatCharacterFromALwithCountInCX 88 %define PrintCharacterFromAL DisplayPrint_CharacterFromAL 89 %define PrintNewlineCharacters DisplayPrint_Newline 90 90 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS 91 %define ClearAreaWithHeightInAHandWidthInAL DisplayPrint_ClearAreaWithHeightInAHandWidthInAL91 %define ClearAreaWithHeightInAHandWidthInAL DisplayPrint_ClearAreaWithHeightInAHandWidthInAL 92 92 %endif 93 %define ClearScreenWithCharInALandAttrInAH DisplayPrint_ClearScreenWithCharInALandAttributeInAH93 %define ClearScreenWithCharInALandAttrInAH DisplayPrint_ClearScreenWithCharInALandAttributeInAH 94 94 -
trunk/Assembly_Library/Src/Display/DisplayContext.asm
r162 r181 268 268 ; Nothing 269 269 ;-------------------------------------------------------------------- 270 ;%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS ; This appears to be completely unused 271 ;ALIGN JUMP_ALIGN272 ;DisplayContext_GetCharacterOutputParameterToDX:273 ;mov dx, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam]274 ;ret275 ;%endif270 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS OR EXCLUDE_FROM_XTIDECFG ; This is currently unused (dead code) 271 ALIGN JUMP_ALIGN 272 DisplayContext_GetCharacterOutputParameterToDX: 273 mov dx, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam] 274 ret 275 %endif 276 276 277 277 -
trunk/Assembly_Library/Src/Display/DisplayFormat.asm
r134 r181 52 52 dec bp 53 53 dec bp ; SS:BP now points to next parameter 54 test cx,cx55 jnz SHORTPrependOrAppendSpaces54 inc cx 55 loop PrependOrAppendSpaces 56 56 ReturnFromFormat: 57 57 ret -
trunk/Assembly_Library/Src/Display/DisplayPrint.asm
r162 r181 158 158 loop .PrintNextCharacter 159 159 160 mov ds, cx ; Restore DS to BDA. Not needed unless DisplayPrint_CharacterFromAL changes DS.160 ;mov ds, cx ; Restore DS to BDA. Not needed unless DisplayPrint_CharacterFromAL changes DS. 161 161 pop cx 162 162 pop si … … 304 304 ; DI: Updated offset to video RAM 305 305 ; Corrupts registers: 306 ; AX,DX306 ; DX 307 307 ;-------------------------------------------------------------------- 308 308 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/File/Drive.asm
r133 r181 72 72 call Drive_SetDefaultFromDL 73 73 eMOVZX cx, al ; Number of potentially valid drive letters available 74 MIN_U cx, 32 74 cmp cl, 32 75 jb SHORT .Return 76 mov cl, 32 77 ALIGN JUMP_ALIGN, ret 78 .Return: 75 79 ret 76 80 -
trunk/Assembly_Library/Src/Menu/CharOutLineSplitter.asm
r104 r181 104 104 ;-------------------------------------------------------------------- 105 105 .GetOffsetToPartialWordToSIandSizeToCX: 106 xor cx, cx106 mov cx, di 107 107 mov si, di 108 108 ALIGN JUMP_ALIGN … … 111 111 dec si 112 112 cmp BYTE [es:si], ' ' 113 je SHORT .PartialWordFound 114 inc cx 115 jmp SHORT .ScanNextCharacter 116 ALIGN JUMP_ALIGN 117 .PartialWordFound: 113 jne SHORT .ScanNextCharacter 118 114 inc si 119 115 inc si ; SI now points one past space 120 s hl cx, 1 ; Characters to bytes116 sub cx, si 121 117 ; Fall to .ChangeLine 122 118 -
trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm
r162 r181 127 127 ret 128 128 129 129 130 ;-------------------------------------------------------------------- 130 131 ; .GetWidthBasedOnParentMenuToAL … … 141 142 mov al, [ss:bx+MENUINIT.bWidth] 142 143 sub al, DIALOG_DELTA_WIDTH_FROM_PARENT 143 MIN_U al, DIALOG_MAX_WIDTH 144 ret 144 cmp al, DIALOG_MAX_WIDTH 145 jb .ALlessThanDIALOG_MAX_WIDTH 146 mov al, DIALOG_MAX_WIDTH 147 ALIGN JUMP_ALIGN, ret 148 .ALlessThanDIALOG_MAX_WIDTH: 149 ret 150 145 151 146 152 ;-------------------------------------------------------------------- … … 161 167 add ah, [bp+MENUINIT.bInfoLines] 162 168 add ah, BYTE MENU_VERTICAL_BORDER_LINES 163 MIN_U ah, bh 164 MIN_U ah, DIALOG_MAX_HEIGHT 169 cmp ah, bh 170 jb .AHlessThanBH 171 xchg bx, ax 172 ALIGN JUMP_ALIGN 173 .AHlessThanBH: 174 cmp ah, DIALOG_MAX_HEIGHT 175 jb .AHlessThanDIALOG_MAX_HEIGHT 176 mov ah, DIALOG_MAX_HEIGHT 177 ALIGN JUMP_ALIGN, ret 178 .AHlessThanDIALOG_MAX_HEIGHT: 165 179 ret 166 180 -
trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm
r170 r181 265 265 .FilterCurrentDirectory: 266 266 cmp WORD [si+DTA.szFile], CURRENTDIR_CHARACTERS 267 je SHORT . ReturnWithFiltering267 je SHORT .DoFilter 268 268 ret 269 269 … … 274 274 cmp WORD [si+DTA.szFile], UPDIR_CHARACTERS 275 275 jne SHORT .ReturnWithoutFiltering 276 . ReturnWithFiltering:276 .DoFilter: 277 277 add sp, BYTE 2 ; Remove return address from stack 278 278 ALIGN JUMP_ALIGN, ret … … 375 375 SortDirectoryContentsStringFromESDIwithCountInCX: 376 376 call Registers_CopyESDItoDSSI 377 call .AddDirectoryContentsStringLengthToDI 378 mov bx, .FileStringComparator 379 xchg dx, cx 380 mov cx, FILE_STRING_LENGTH 381 jmp Sort_ItemsFromDSSIwithCountInDXsizeInCXandComparatorInBX 382 383 ALIGN JUMP_ALIGN 384 .AddDirectoryContentsStringLengthToDI: 377 378 ; Add directory contents string length to DI 385 379 mov ax, FILE_STRING_LENGTH 380 push ax 386 381 mul cx 387 382 add di, ax 388 ret 383 384 mov dx, cx 385 pop cx 386 mov bx, .FileStringComparator 387 jmp Sort_ItemsFromDSSIwithCountInDXsizeInCXandComparatorInBX 389 388 390 389 ;-------------------------------------------------------------------- … … 395 394 ; ES:DI: Ptr to second item to compare 396 395 ; Returns: 397 ; FLAGS: Signed compari tion between first and second item396 ; FLAGS: Signed comparison between first and second item 398 397 ; Corrupts registers: 399 398 ; Nothing -
trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm
r73 r181 1 ; File name : DialogProgress.asm2 1 ; Project name : Assembly Library 3 ; Created date : 15.8.20104 ; Last update : 10.12.20105 ; Author : Tomi Tilli6 2 ; Description : Displays progress bar dialog and starts progress task. 7 3 … … 41 37 lds si, [bp+DIALOG.fpDialogIO] 42 38 mov bx, [si+PROGRESS_DIALOG_IO.wMaxProgressValue] 43 MIN_U ax, bx 44 cmp ax, bx ; Make sure that last progress character is shown 45 je SHORT .UpdateProgressBar 46 39 cmp ax, bx 40 jb SHORT .AXlessThanBX 41 mov ax, bx 42 jmp SHORT .UpdateProgressBar 43 ALIGN JUMP_ALIGN 44 .AXlessThanBX: 47 45 mov bx, ax 48 46 sub bx, [si+PROGRESS_DIALOG_IO.wCurrentProgressValue] … … 172 170 ALIGN JUMP_ALIGN 173 171 DrawProgressBarFromDialogIoInDSSI: 174 call .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI 175 176 mov al, PROGRESS_COMPLETE_CHARACTER 177 call .RepeatProgressCharacterCXtimesFromAL 178 179 mov cx, dx 180 mov al, PROGRESS_INCOMPLETE_CHARACTER 181 jmp SHORT .RepeatProgressCharacterCXtimesFromAL 182 183 ;-------------------------------------------------------------------- 184 ; .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI 185 ; Parameters: 186 ; DS:SI: Ptr to PROGRESS_DIALOG_IO 187 ; SS:BP: Ptr to DIALOG 188 ; Returns: 189 ; CX: Number of full progress bar characters 190 ; DX: Number of empty progress bar characters 191 ; Corrupts: 192 ; AX, BX 193 ;-------------------------------------------------------------------- 194 ALIGN JUMP_ALIGN 195 .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI: 172 ; Get full chars to CX and empty chars to DX 196 173 call MenuLocation_GetMaxTextLineLengthToAX 197 174 mov cx, ax … … 200 177 div bx 201 178 xchg cx, ax ; AX = Text line length, CX = Number of full chars 202 203 179 sub ax, cx 204 180 xchg dx, ax ; DX = Number of empty chars 205 ret 181 182 mov al, PROGRESS_COMPLETE_CHARACTER 183 call .RepeatProgressCharacterCXtimesFromAL 184 185 mov cx, dx 186 mov al, PROGRESS_INCOMPLETE_CHARACTER 187 ; Fall to .RepeatProgressCharacterCXtimesFromAL 206 188 207 189 ;-------------------------------------------------------------------- … … 239 221 ret 240 222 241 223 242 224 ;-------------------------------------------------------------------- 243 225 ; DrawTimeElapsedFromDX … … 286 268 287 269 sub cx, [si+PROGRESS_DIALOG_IO.wMinProgressValue] 288 j cxz.PreventDivisionByZero270 jz SHORT .PreventDivisionByZero 289 271 div cx ; AX = Estimated ticks left 290 272 xchg dx, ax 291 jmp SHORT FormatTicksFromDX273 SKIP2B f ; cmp ax, <next instruction> 292 274 .PreventDivisionByZero: 293 275 xor dx, dx -
trunk/Assembly_Library/Src/Menu/Dialog/ItemLineSplitter.asm
r133 r181 115 115 ALIGN JUMP_ALIGN 116 116 .CheckLineLength: 117 cmp cx, [bp+ITEM_LINE_SPLITTER.wMaxTextLineLength] 118 ja SHORT .ChangeToNextLine 119 clc 120 ret 117 cmp [bp+ITEM_LINE_SPLITTER.wMaxTextLineLength], cx 118 jb SHORT .ChangeToNextLine 119 ret ; With CF cleared 121 120 122 121 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/Menu.asm
r177 r181 31 31 32 32 33 %define DisplayWithHandlerInBXandUserDataInDXAXMenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX34 ;%define CloseMenuInit_CloseMenuWindow ; Special case in CALL_MENU_LIBRARY35 %define RefreshWindowMenuInit_RefreshMenuWindow33 %define DisplayWithHandlerInBXandUserDataInDXAX MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX 34 ;%define Close MenuInit_CloseMenuWindow ; Special case in CALL_MENU_LIBRARY 35 %define RefreshWindow MenuInit_RefreshMenuWindow 36 36 37 ;%define SetUserDataFromDSSIMenuInit_SetUserDataFromDSSI ; Special case in CALL_MENU_LIBRARY38 ;%define GetUserDataToDSSIMenuInit_GetUserDataToDSSI ; Special case in CALL_MENU_LIBRARY37 ;%define SetUserDataFromDSSI MenuInit_SetUserDataFromDSSI ; Special case in CALL_MENU_LIBRARY 38 ;%define GetUserDataToDSSI MenuInit_GetUserDataToDSSI ; Special case in CALL_MENU_LIBRARY 39 39 40 ;%define SetTitleHeightFromALMenuInit_SetTitleHeightFromAL ; Special case in CALL_MENU_LIBRARY41 %define ClearTitleAreaMenuText_ClearTitleArea42 %define RefreshTitleMenuText_RefreshTitle40 ;%define SetTitleHeightFromAL MenuInit_SetTitleHeightFromAL ; Special case in CALL_MENU_LIBRARY 41 %define ClearTitleArea MenuText_ClearTitleArea 42 %define RefreshTitle MenuText_RefreshTitle 43 43 44 %define HighlightItemFromAXMenuInit_HighlightItemFromAX45 ;%define SetTotalItemsFromAXMenuInit_SetTotalItemsFromAX ; Special case in CALL_MENU_LIBRARY46 %define RefreshItemFromAXMenuText_RefreshItemFromAX44 %define HighlightItemFromAX MenuInit_HighlightItemFromAX 45 ;%define SetTotalItemsFromAX MenuInit_SetTotalItemsFromAX ; Special case in CALL_MENU_LIBRARY 46 %define RefreshItemFromAX MenuText_RefreshItemFromAX 47 47 48 ;%define SetInformationHeightFromAL MenuInit_SetInformationHeightFromAL ; Special case in CALL_MENU_LIBRARY49 %define ClearInformationArea MenuText_ClearInformationArea50 %define RefreshInformation MenuText_RefreshInformation48 ;%define SetInformationHeightFromAL MenuInit_SetInformationHeightFromAL ; Special case in CALL_MENU_LIBRARY 49 %define ClearInformationArea MenuText_ClearInformationArea 50 %define RefreshInformation MenuText_RefreshInformation 51 51 52 %define StartSelectionTimeoutWithTicksInAX MenuTime_StartSelectionTimeoutWithTicksInAX52 %define StartSelectionTimeoutWithTicksInAX MenuTime_StartSelectionTimeoutWithTicksInAX 53 53 54 54 %ifdef INCLUDE_MENU_DIALOGS 55 %define StartProgressTaskWithIoInDSSIandParamInDXAX DialogProgress_StartProgressTaskWithIoInDSSIandParamInDXAX56 %define SetProgressValueFromAX DialogProgress_SetProgressValueFromAX55 %define StartProgressTaskWithIoInDSSIandParamInDXAX DialogProgress_StartProgressTaskWithIoInDSSIandParamInDXAX 56 %define SetProgressValueFromAX DialogProgress_SetProgressValueFromAX 57 57 58 %define DisplayMessageWithInputInDSSI DialogMessage_DisplayMessageWithInputInDSSI59 %define GetSelectionToAXwithInputInDSSI DialogSelection_GetSelectionToAXwithInputInDSSI60 %define GetWordWithIoInDSSI DialogWord_GetWordWithIoInDSSI61 %define GetStringWithIoInDSSI DialogString_GetStringWithIoInDSSI62 %define GetFileNameWithIoInDSSI DialogFile_GetFileNameWithIoInDSSI63 %define GetDriveWithIoInDSSI DialogDrive_GetDriveWithIoInDSSI58 %define DisplayMessageWithInputInDSSI DialogMessage_DisplayMessageWithInputInDSSI 59 %define GetSelectionToAXwithInputInDSSI DialogSelection_GetSelectionToAXwithInputInDSSI 60 %define GetWordWithIoInDSSI DialogWord_GetWordWithIoInDSSI 61 %define GetStringWithIoInDSSI DialogString_GetStringWithIoInDSSI 62 %define GetFileNameWithIoInDSSI DialogFile_GetFileNameWithIoInDSSI 63 %define GetDriveWithIoInDSSI DialogDrive_GetDriveWithIoInDSSI 64 64 %endif 65 65 -
trunk/Assembly_Library/Src/Menu/MenuLocation.asm
r104 r181 4 4 ; Section containing code 5 5 SECTION .text 6 7 ;--------------------------------------------------------------------8 ; MenuLocation_GetTitleTextTopLeftCoordinatesToAX9 ; MenuLocation_GetInformationTextTopLeftCoordinatesToAX10 ; Parameters11 ; SS:BP: Ptr to MENU12 ; Returns:13 ; AL: Column (X)14 ; AH: Row (Y)15 ; Corrupts registers:16 ; Nothing17 ;--------------------------------------------------------------------18 ALIGN JUMP_ALIGN19 MenuLocation_GetTitleTextTopLeftCoordinatesToAX:20 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET21 jmp SHORT MenuLocation_AddTitleBordersTopLeftCoordinatesToAX22 23 ALIGN JUMP_ALIGN24 MenuLocation_GetInformationTextTopLeftCoordinatesToAX:25 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET26 jmp SHORT AddInformationBordersTopLeftCoordinatesToAX27 28 6 29 7 ;-------------------------------------------------------------------- … … 43 21 xchg al, ah ; Line to AH, clear AL 44 22 add ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 45 jmp SHORT AddItemBordersTopLeftCoordinatesToAX46 23 SKIP2B f ; cmp ax, <next instruction> 24 ; Fall to MenuLocation_GetItemBordersTopLeftCoordinatesToAX 47 25 48 26 ;-------------------------------------------------------------------- 27 ; MenuLocation_GetItemBordersTopLeftCoordinatesToAX 28 ; MenuLocation_GetTitleTextTopLeftCoordinatesToAX 49 29 ; MenuLocation_GetTitleBordersTopLeftCoordinatesToAX 50 ; MenuLocation_GetI temBordersTopLeftCoordinatesToAX30 ; MenuLocation_GetInformationTextTopLeftCoordinatesToAX 51 31 ; MenuLocation_GetBottomBordersTopLeftCoordinatesToAX 52 32 ; Parameters … … 58 38 ; Nothing 59 39 ;-------------------------------------------------------------------- 40 MenuLocation_GetItemBordersTopLeftCoordinatesToAX: 41 xor ax, ax 42 jmp SHORT AddItemBordersTopLeftCoordinatesToAX 43 60 44 ALIGN JUMP_ALIGN 45 MenuLocation_GetTitleTextTopLeftCoordinatesToAX: 46 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 47 SKIP2B f ; cmp ax, <next instruction> 61 48 MenuLocation_GetTitleBordersTopLeftCoordinatesToAX: 62 49 xor ax, ax … … 64 51 65 52 ALIGN JUMP_ALIGN 66 MenuLocation_GetI temBordersTopLeftCoordinatesToAX:67 xor ax, ax68 jmp SHORT AddI temBordersTopLeftCoordinatesToAX53 MenuLocation_GetInformationTextTopLeftCoordinatesToAX: 54 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 55 jmp SHORT AddInformationBordersTopLeftCoordinatesToAX 69 56 70 57 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/MenuScrollbars.asm
r133 r181 37 37 MenuScrollbars_GetScrollCharacterToALForLineInDI: 38 38 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 39 call .GetFirstThumbLineToAX 39 ; Get first thumb line to AX 40 mov ax, [bp+MENU.wFirstVisibleItem] 41 call .CalculateFirstOrLastThumbLineToAX 42 40 43 cmp di, ax ; Before first thumb line? 41 44 jb SHORT .ReturnTrackCharacter 42 45 call .GetLastThumbLineToAX 43 cmp di, ax ; After last thumb line? 44 ja SHORT .ReturnTrackCharacter 45 mov al, SCROLL_THUMB_CHARACTER 46 ret 46 cmp ax, di ; After last thumb line? 47 47 ALIGN JUMP_ALIGN 48 48 .ReturnTrackCharacter: 49 49 mov al, SCROLL_TRACK_CHARACTER 50 jb SHORT .Return 51 mov al, SCROLL_THUMB_CHARACTER 52 ALIGN JUMP_ALIGN, ret 53 .Return: 50 54 ret 51 55 … … 63 67 .GetLastThumbLineToAX: 64 68 call MenuScrollbars_GetLastVisibleItemOnPageToAX 65 jmp SHORT .CalculateFirstOrLastThumbLineToAX 66 67 ;-------------------------------------------------------------------- 68 ; .GetFirstThumbLineToAX 69 ; Parameters 69 ; Fall to .CalculateFirstOrLastThumbLineToAX 70 71 ;-------------------------------------------------------------------- 72 ; .CalculateFirstOrLastThumbLineToAX 73 ; Parameters 74 ; AX: Index of first or last visible item on page 70 75 ; CX: Max visible items on page 71 76 ; SS:BP: Ptr to MENU … … 76 81 ;-------------------------------------------------------------------- 77 82 ALIGN JUMP_ALIGN 78 .GetFirstThumbLineToAX:79 mov ax, [bp+MENU.wFirstVisibleItem]80 83 .CalculateFirstOrLastThumbLineToAX: 81 84 mul cx … … 98 101 mov cx, [bp+MENUINIT.wHighlightedItem] 99 102 add cx, ax 100 call .RotateItemInCX 103 ; Fall to .RotateItemInCX 104 105 ;-------------------------------------------------------------------- 106 ; .RotateItemInCX 107 ; Parameters 108 ; CX: Possibly under of overflown item to be rotated 109 ; SS:BP: Ptr to MENU 110 ; Returns: 111 ; CX: Valid item index 112 ; Corrupts registers: 113 ; DX 114 ;-------------------------------------------------------------------- 115 ;.RotateItemInCX: 116 mov dx, [bp+MENUINIT.wItems] 117 test cx, cx 118 js SHORT .RotateNegativeItemInCX 119 sub cx, dx 120 jae SHORT .ScrollPageForNewItemInCX 121 122 ALIGN JUMP_ALIGN 123 .RotateNegativeItemInCX: 124 add cx, dx 101 125 ; Fall to .ScrollPageForNewItemInCX 102 126 … … 111 135 ; AX, BX, CX, DX, SI, DI 112 136 ;-------------------------------------------------------------------- 137 ALIGN JUMP_ALIGN 113 138 .ScrollPageForNewItemInCX: 114 139 call MenuScrollbars_IsItemInCXonVisiblePage … … 117 142 mov dx, [bp+MENU.wFirstVisibleItem] 118 143 sub dx, [bp+MENUINIT.wHighlightedItem] 144 145 ; Get MaxFirstVisibleItem to AX 146 push cx 147 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 148 mov ax, [bp+MENUINIT.wItems] 149 sub ax, cx 150 pop cx 151 119 152 add dx, cx 120 MAX_S dx, 0 121 call .GetMaxFirstVisibleItemToAX 122 MIN_U ax, dx 153 jns .DXisPositive 154 cwd ; This won't work if MaxFirstVisibleItem > 32767 155 156 ALIGN JUMP_ALIGN 157 .DXisPositive: 158 cmp ax, dx 159 jb .AXisLessThanDX 160 xchg dx, ax 161 162 ALIGN JUMP_ALIGN 163 .AXisLessThanDX: 123 164 mov [bp+MENU.wFirstVisibleItem], ax 124 165 call MenuText_RefreshAllItems … … 127 168 .HighlightNewItemOnCX: 128 169 jmp MenuEvent_HighlightItemFromCX 129 130 ;--------------------------------------------------------------------131 ; .GetMaxFirstVisibleItemToAX132 ; Parameters133 ; SS:BP: Ptr to MENU134 ; Returns:135 ; AX: Max first visible item136 ; Corrupts registers:137 ; Nothing138 ;--------------------------------------------------------------------139 ALIGN JUMP_ALIGN140 .GetMaxFirstVisibleItemToAX:141 push cx142 143 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX144 mov ax, [bp+MENUINIT.wItems]145 sub ax, cx146 147 pop cx148 ret149 150 ;--------------------------------------------------------------------151 ; .RotateItemInCX152 ; Parameters153 ; CX: Possibly under of overflown item to be rotated154 ; SS:BP: Ptr to MENU155 ; Returns:156 ; CX: Valid item index157 ; Corrupts registers:158 ; DX159 ;--------------------------------------------------------------------160 ALIGN JUMP_ALIGN161 .RotateItemInCX:162 mov dx, [bp+MENUINIT.wItems]163 test cx, cx164 js SHORT .RotateNegativeItemInCX165 cmp cx, dx166 jae SHORT .RotatePositiveItemInCX167 ret168 169 ALIGN JUMP_ALIGN170 .RotatePositiveItemInCX:171 sub cx, dx172 ;jae SHORT .RotatePositiveItemInCX ; Not needed by scrolling173 ret174 175 ALIGN JUMP_ALIGN176 .RotateNegativeItemInCX:177 add cx, dx178 ;js SHORT .RotateNegativeItemInCX ; Not needed by scrolling179 ret180 170 181 171 … … 216 206 ALIGN JUMP_ALIGN 217 207 MenuScrollbars_GetLastVisibleItemOnPageToAX: 218 push cx 219 208 xchg cx, ax 220 209 call MenuScrollbars_GetActualVisibleItemsOnPageToCX 221 210 xchg ax, cx 222 211 dec ax 223 212 add ax, [bp+MENU.wFirstVisibleItem] 224 225 pop cx226 213 ret 227 214 … … 239 226 MenuScrollbars_GetActualVisibleItemsOnPageToCX: 240 227 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 241 MIN_U cx, [bp+MENUINIT.wItems] 228 cmp cx, [bp+MENUINIT.wItems] 229 jb SHORT .Return 230 mov cx, [bp+MENUINIT.wItems] 231 ALIGN JUMP_ALIGN, ret 232 .Return: 242 233 ret 243 234 -
trunk/Assembly_Library/Src/String/Char.asm
r162 r181 161 161 Char_ALtoLowerCaseLetter: 162 162 call Char_IsUpperCaseLetterInAL ; Is upper case character? 163 jnc SHORT .Return ; If not, return 164 add al, 'a'-'A' ; Convert to lower case 165 .Return: 166 ret 163 jmp SHORT Char_ALtoUpperCaseLetter.CheckCF 167 164 %endif 168 165 … … 179 176 Char_ALtoUpperCaseLetter: 180 177 call Char_IsLowerCaseLetterInAL ; Is lower case character? 181 jnc SHORT .Return ; If not, return 182 sub al, 'a'-'A' ; Convert to upper case 178 .CheckCF: 179 jnc SHORT Char_ChangeCaseInAL.Return 180 ; Fall to Char_ChangeCaseInAL 181 182 ;-------------------------------------------------------------------- 183 ; Char_ChangeCaseInAL 184 ; Parameters: 185 ; AL: Character to convert (must be A-Z or a-z) 186 ; Returns: 187 ; AL: Character converted 188 ; Corrupts registers: 189 ; Nothing 190 ;-------------------------------------------------------------------- 191 Char_ChangeCaseInAL: 192 xor al, 32 183 193 .Return: 184 194 ret 185 186 195 187 196 ;-------------------------------------------------------------------- -
trunk/Assembly_Library/Src/Util/Math.asm
r174 r181 17 17 ; AX 18 18 ;-------------------------------------------------------------------- 19 %ifndef EXCLUDE_FROM_XTIDECFG ; Not used in XTIDECFG 19 20 ALIGN JUMP_ALIGN 20 Math_DivQWatSSBPbyCX: ; This procedure is included but not used in XTIDECFG21 Math_DivQWatSSBPbyCX: 21 22 xor dx, dx 22 23 mov ax, [bp+6] ; Load highest divident WORD to DX:AX … … 36 37 mov [bp], ax 37 38 ret 39 %endif 38 40 39 41 … … 49 51 ; Nothing 50 52 ;-------------------------------------------------------------------- 51 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS 53 %ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS OR EXCLUDE_FROM_XTIDECFG 52 54 ALIGN JUMP_ALIGN 53 Math_DivDXAXbyCX: ; This procedure is included but not used in XTIDECFG55 Math_DivDXAXbyCX: ; This is currently unused (dead code) 54 56 xor bx, bx 55 57 xchg bx, ax -
trunk/Configurator/Src/BiosFile.asm
r145 r181 29 29 30 30 ; Ask if user wants to save 31 mov ax, cs 32 mov ds, ax 33 mov es, ax 31 push cs 32 pop ds 33 push cs 34 pop es 34 35 call BiosFile_DoesUserWantToSaveChanges 35 36 jnc SHORT .Return -
trunk/Configurator/Src/Libraries/math.asm
r78 r181 1 ; File name : math.asm2 1 ; Project name : Math library 3 ; Created date : 7.10.2009 4 ; Last update : 4.1.2011 5 ; Author : Tomi Tilli, 6 ; : Krister Nordvall (optimizations) 7 ; Description : ASM library to for math related functions. 2 ; Description : ASM library for math related functions. 8 3 9 4 ;--------------- Equates ----------------------------- … … 27 22 ;-------------------------------------------------------------------- 28 23 ; Macro to select lesser of two unsigned operands. 29 ; 24 ; 30 25 ; MIN_U 31 26 ; Parameters: … … 48 43 ;-------------------------------------------------------------------- 49 44 ; Macro to select greater of two unsigned operands. 50 ; 45 ; 51 46 ; MAX_U 52 47 ; Parameters: … … 69 64 ;-------------------------------------------------------------------- 70 65 ; Macro to select lesser and greater of two unsigned operands. 71 ; 66 ; 72 67 ; MINMAX_U 73 68 ; Parameters: … … 82 77 %macro MINMAX_U 2 83 78 cmp %1, %2 ; Is %1 smaller? 84 jb e%%Return ; If so, return79 jb %%Return ; If so, return 85 80 xchg %1, %2 ; Exchange operands 86 81 ALIGN JUMP_ALIGN … … 93 88 ; Multiplies unsigned 32-bit integer by unsigned 16-bit integer. 94 89 ; Result is unsigned 32-bit integer, so overflow is possible. 95 ; 90 ; 96 91 ; Math_MulDWbyW 97 92 ; Parameters: … … 130 125 ;-------------------------------------------------------------------- 131 126 ; Divide a 32-bit unsigned integer so that quotient can be 32-bit. 132 ; 127 ; 133 128 ; Math_DivDWbyW 134 129 ; Parameters: … … 157 152 ;-------------------------------------------------------------------- 158 153 ; Converts remainder to tenths. 159 ; 154 ; 160 155 ; Math_RemToTenths 161 156 ; Parameters: -
trunk/Configurator/Src/Libraries/menu/menudraw.asm
r170 r181 287 287 test BYTE [bp+MENUVARS.bFlags], FLG_MNU_HIDENFO ; Information hidden? 288 288 jnz SHORT .JumpToBottomBorder 289 test cx, cx ; Any info strings? 290 jz SHORT MenuDraw_BottomBorder 289 jcxz MenuDraw_BottomBorder ; Any info strings? 291 290 push cx 292 291 call MenuDraw_MiddleBorder ; Draw middle border -
trunk/Configurator/Src/Libraries/menu/menumsg.asm
r2 r181 1 ; File name : menumsg.asm2 1 ; Project name : Menu library 3 ; Created date : 13.11.2009 4 ; Last update : 10.1.2010 5 ; Author : Tomi Tilli 6 ; Description : ASM library to menu system. 2 ; Description : ASM library for menu system. 7 3 ; Contains functions for displaying messages. 8 4 … … 156 152 ALIGN JUMP_ALIGN 157 153 MenuMsg_GetTokenForLine: 158 test cx, cx ; Line 0 wanted? 159 jz .GetFirst ; If so, just get token length 154 jcxz .GetFirst ; Line 0 wanted? If so, just get token length 160 155 push bp 161 156 push si … … 218 213 jnc .EndOfString ; Return if no tokens 219 214 eMOVZX dx, BYTE [bp+MENUVARS.bWidth] ; Menu width 220 sub dl, SIZE_MSG_HBRDR ; To line length 215 sub dl, SIZE_MSG_HBRDR ; To line length 221 216 mov bl, ' ' ; Space character 222 217 ALIGN JUMP_ALIGN -
trunk/Configurator/Src/Libraries/print.asm
r78 r181 1 ; File name : print.asm2 1 ; Project name : Print library 3 ; Created date : 6.10.20094 ; Last update : 4.1.20115 ; Author : Tomi Tilli,6 ; : Krister Nordvall (optimizations)7 2 ; Description : ASM library for character and string 8 3 ; printing related functions. … … 95 90 ;-------------------------------------------------------------------- 96 91 ; Debugging macro that prints wanted character and newline. 97 ; 92 ; 98 93 ; PRINT_DBG_CH 99 94 ; Parameters: … … 141 136 ; 142 137 ; NOTE! Caller must clean the stack variables! 143 ; 138 ; 144 139 ; Print_Format 145 140 ; Parameters: … … 341 336 ;-------------------------------------------------------------------- 342 337 ; Prints newline character to change line. 343 ; 338 ; 344 339 ; Print_Newline 345 340 ; Parameters: … … 363 358 ret 364 359 %endif 365 360 366 361 367 362 ;-------------------------------------------------------------------- 368 363 ; Prints wanted number of characters. 369 ; 364 ; 370 365 ; Print_CharBuffer 371 366 ; Parameters: … … 404 399 ;-------------------------------------------------------------------- 405 400 ; Repeats wanted character. 406 ; 401 ; 407 402 ; Print_Repeat 408 403 ; Parameters: … … 429 424 ;-------------------------------------------------------------------- 430 425 ; Prints boolean value. 431 ; 426 ; 432 427 ; Print_Bool 433 428 ; Parameters: … … 455 450 ;-------------------------------------------------------------------- 456 451 ; Prints signed or unsigned 16-bit integer. 457 ; 452 ; 458 453 ; Print_IntSW Prints signed 16-bit word 459 454 ; Print_IntUW Prints unsigned 16-bit word … … 506 501 PRINT_CHAR ; Print character 507 502 inc di ; Increment chars printed 508 test cx, cx; Characters left509 jnz.PrintLoop ; If so, loop503 inc cx ; Characters left 504 loop .PrintLoop ; If so, loop 510 505 mov dx, di ; Copy chars printed to DX 511 506 pop cx … … 518 513 ;-------------------------------------------------------------------- 519 514 ; Prints unsigned 32-bit integer. 520 ; 515 ; 521 516 ; Print_IntUDW 522 517 ; Parameters: … … 552 547 PRINT_CHAR ; Print character 553 548 inc di ; Increment chars printed 554 test cx, cx; Characters left555 jnz.PrintLoop ; If so, loop549 inc cx ; Characters left 550 loop .PrintLoop ; If so, loop 556 551 mov dx, di ; Copy characters printed to DX 557 552 pop cx … … 565 560 ;-------------------------------------------------------------------- 566 561 ; Prints 8-bit byte as hexadecimal string. 567 ; 562 ; 568 563 ; Print_IntHexB 569 564 ; Parameters: … … 593 588 ;-------------------------------------------------------------------- 594 589 ; Prints 16-bit word as hexadecimal string. 595 ; 590 ; 596 591 ; Print_IntHexW 597 592 ; Parameters: … … 621 616 ;-------------------------------------------------------------------- 622 617 ; Prints 32-bit dword as hexadecimal string. 623 ; 618 ; 624 619 ; Print_IntHexDW 625 620 ; Parameters: … … 658 653 ;-------------------------------------------------------------------- 659 654 ; Prints hexadecimal character for every nybble for WORD. 660 ; 655 ; 661 656 ; Print_HexString 662 657 ; Parameters: -
trunk/Configurator/Src/MenuPageItem.asm
r145 r181 65 65 ALIGN JUMP_ALIGN 66 66 MenuPageItem_DisplayHelpDialog: 67 push cs 68 pop es 67 69 mov di, [di+MENUPAGEITEM.szHelp] ; ES:DI now points to help string 68 push cs69 pop es70 70 mov bl, WIDTH_DLG ; Dialog width 71 71 jmp Menu_ShowMsgDlg -
trunk/Configurator/Src/Menupages/FlashMenu.asm
r145 r181 371 371 FlashMenu_CalculateCompletionPercentage: 372 372 cmp WORD [si+FLASHVARS.wPagesLeft], 0 373 mov ax, 100 373 374 je SHORT .FlashComplete 374 mov ax, 100375 375 mul WORD [si+FLASHVARS.wPagesLeft] 376 376 div WORD [si+FLASHVARS.wTotalPages] ; AX = Percentage left to write … … 382 382 ALIGN JUMP_ALIGN 383 383 .FlashComplete: 384 mov ax, 100385 384 stc 386 385 ret -
trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc
r179 r181 5 5 %define ROMVARS_INC 6 6 7 ; ROM Variables. There are written toROM image before flashing.7 ; ROM Variables. Written to the ROM image before flashing. 8 8 struc ROMVARS 9 .wRomSign resb 2 ; ROM Signature (AA55h)10 .bRomSize resb 1 ; ROM size in 512 byte blocks11 .rgbJump resb 3 ; First instruction to ROM init (jmp)9 .wRomSign resb 2 ; ROM Signature (AA55h) 10 .bRomSize resb 1 ; ROM size in 512 byte blocks 11 .rgbJump resb 3 ; First instruction to ROM init (jmp) 12 12 13 .rgbSign resb 8 ; Signature for XTIDE Configurator Program14 .szTitle resb 31 ; BIOS title string15 .szVersion resb 25 ; BIOS version string13 .rgbSign resb 8 ; Signature for XTIDE Configurator Program 14 .szTitle resb 31 ; BIOS title string 15 .szVersion resb 25 ; BIOS version string 16 16 17 .wFlags resb 2 ; Word for ROM flags18 .wDisplayMode resb 2 ; Display mode for boot menu19 .wBootTimeout resb 2 ; Boot Menu selection timeout in system timer ticks20 .bIdeCnt resb 1 ; Number of available IDE controllers21 .bBootDrv resb 1 ; Boot Menu default drive22 .bMinFddCnt resb 1 ; Minimum number of Floppy Drives23 .bStealSize resb 1 ; Number of 1kB blocks stolen from 640kB base RAM17 .wFlags resb 2 ; Word for ROM flags 18 .wDisplayMode resb 2 ; Display mode for boot menu 19 .wBootTimeout resb 2 ; Boot Menu selection timeout in system timer ticks 20 .bIdeCnt resb 1 ; Number of available IDE controllers 21 .bBootDrv resb 1 ; Boot Menu default drive 22 .bMinFddCnt resb 1 ; Minimum number of Floppy Drives 23 .bStealSize resb 1 ; Number of 1kB blocks stolen from 640kB base RAM 24 24 25 .ideVars0 resb IDEVARS_size26 .ideVars1 resb IDEVARS_size27 .ideVars2 resb IDEVARS_size28 .ideVars3 resb IDEVARS_size25 .ideVars0 resb IDEVARS_size 26 .ideVars1 resb IDEVARS_size 27 .ideVars2 resb IDEVARS_size 28 .ideVars3 resb IDEVARS_size 29 29 30 30 %ifdef MODULE_SERIAL … … 34 34 35 35 ; Bit defines for ROMVARS.wFlags 36 FLG_ROMVARS_FULLMODE EQU (1<<0) ; Full operating mode (steals base RAM, supports EBIOS etc.)37 FLG_ROMVARS_DRVXLAT EQU (1<<2) ; Enable drive number translation36 FLG_ROMVARS_FULLMODE EQU (1<<0) ; Full operating mode (steals base RAM, supports EBIOS etc.) 37 FLG_ROMVARS_DRVXLAT EQU (1<<2) ; Enable drive number translation 38 38 FLG_ROMVARS_MODULE_SERIAL EQU (1<<3) 39 39 FLG_ROMVARS_MODULE_EBIOS EQU (1<<4) -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootInfo.asm
r165 r181 125 125 mul bl ; AX = Offset inside BOOTNFO array 126 126 add ax, BOOTVARS.rgBootNfo ; Add offset to BOOTNFO array 127 xchg bx, ax ; Copyresult to BX127 xchg bx, ax ; Move result to BX 128 128 ret -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenu.asm
r130 r181 102 102 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH 103 103 sub ah, MENU_SCREEN_BOTTOM_LINES*2 ; Leave space for bottom info 104 MIN_U ah, cl 104 cmp ah, cl 105 jb SHORT .Return 106 mov ah, cl 107 ALIGN JUMP_ALIGN, ret 108 .Return: 105 109 ret 106 110 … … 148 152 call FloppyDrive_GetCountToCX 149 153 add cl, 'A' 150 MAX_U cl, 'C' 154 cmp cl, 'C' 155 ja .Return 156 mov cl, 'C' 157 ALIGN JUMP_ALIGN, ret 158 .Return: 151 159 ret 152 160 -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrintCfg.asm
r158 r181 85 85 ; AX, DX 86 86 ;-------------------------------------------------------------------- 87 PushBusType: 87 ;PushBusType: 88 cwd ; Clear DX using sign extension 88 89 xchg ax, bx ; Store BX to AX 89 90 eMOVZX bx, BYTE [cs:si+IDEVARS.bDevice] 90 91 mov bx, [cs:bx+rgwBusTypeValues] ; Char to BL, Int to BH 91 eMOVZX dx, bh92 mov dl, bh 92 93 push bx ; Push character 93 94 push dx ; Push 1, 8, 16 or 32 -
trunk/XTIDE_Universal_BIOS/Src/Device/Device.asm
r175 r181 16 16 ; AX, BX, CX, DX 17 17 ;-------------------------------------------------------------------- 18 %ifdef MODULE_SERIAL 18 19 Device_FinalizeDPT: 19 %ifdef MODULE_SERIAL20 20 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 21 21 jnz SHORT .FinalizeDptForSerialPortDevice 22 jmp IdeDPT_Finalize 23 24 .FinalizeDptForSerialPortDevice: 25 jmp SerialDPT_Finalize 26 %else 27 Device_FinalizeDPT EQU IdeDPT_Finalize 22 28 %endif 23 jmp IdeDPT_Finalize 24 %ifdef MODULE_SERIAL 25 .FinalizeDptForSerialPortDevice: 26 jmp SerialDPT_Finalize 27 %endif 29 28 30 29 31 ;-------------------------------------------------------------------- … … 37 39 ; AL, BX, CX, DX 38 40 ;-------------------------------------------------------------------- 41 %ifdef MODULE_SERIAL 39 42 Device_ResetMasterAndSlaveController: 40 %ifdef MODULE_SERIAL41 43 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 42 44 jnz SHORT ReturnSuccessForSerialPort 45 jmp IdeCommand_ResetMasterAndSlaveController 46 %else 47 Device_ResetMasterAndSlaveController EQU IdeCommand_ResetMasterAndSlaveController 43 48 %endif 44 jmp IdeCommand_ResetMasterAndSlaveController45 49 46 50 … … 58 62 ; AL, BL, CX, DX, SI, DI, ES 59 63 ;-------------------------------------------------------------------- 64 %ifdef MODULE_SERIAL 60 65 Device_IdentifyToBufferInESSIwithDriveSelectByteInBH: 61 %ifdef MODULE_SERIAL62 66 cmp BYTE [cs:bp+IDEVARS.bDevice], DEVICE_SERIAL_PORT 63 67 je SHORT .IdentifyDriveFromSerialPort 64 %endif65 68 jmp IdeCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH 66 %ifdef MODULE_SERIAL 69 67 70 .IdentifyDriveFromSerialPort: 68 71 jmp SerialCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH 72 %else 73 Device_IdentifyToBufferInESSIwithDriveSelectByteInBH EQU IdeCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH 69 74 %endif 75 70 76 71 77 ;-------------------------------------------------------------------- … … 83 89 ; AL, BX, CX, DX, (ES:SI for data transfer commands) 84 90 ;-------------------------------------------------------------------- 91 %ifdef MODULE_SERIAL 85 92 ALIGN JUMP_ALIGN 86 93 Device_OutputCommandWithParameters: 87 %ifdef MODULE_SERIAL88 94 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 89 95 jnz SHORT .OutputCommandToSerialPort 90 %endif91 96 jmp IdeCommand_OutputWithParameters 92 %ifdef MODULE_SERIAL 97 93 98 ALIGN JUMP_ALIGN 94 99 .OutputCommandToSerialPort: 95 100 jmp SerialCommand_OutputWithParameters 101 %else 102 Device_OutputCommandWithParameters EQU IdeCommand_OutputWithParameters 96 103 %endif 104 97 105 98 106 ;-------------------------------------------------------------------- … … 107 115 ; AL, BX, CX, DX 108 116 ;-------------------------------------------------------------------- 117 %ifdef MODULE_SERIAL 109 118 ALIGN JUMP_ALIGN 110 119 Device_SelectDrive: 111 %ifdef MODULE_SERIAL112 120 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 113 121 jnz SHORT ReturnSuccessForSerialPort 114 %endif115 122 jmp IdeCommand_SelectDrive 116 %ifdef MODULE_SERIAL 123 117 124 ReturnSuccessForSerialPort: 118 125 xor ax, ax 119 126 ret 127 %else 128 Device_SelectDrive EQU IdeCommand_SelectDrive 120 129 %endif 130 -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm
r160 r181 7 7 ;-------------------------------------------------------------------- 8 8 ; IdeIO_OutputALtoIdeRegisterInDL 9 ; IdeIO_OutputALtoIdeControlBlockRegisterInDL 9 10 ; Parameters: 10 11 ; AL: Byte to output 11 ; DL: IDE Register 12 ; DL: IDE Register (IdeIO_OutputALtoIdeRegisterInDL) 13 ; IDE Control Block Register (IdeIO_OutputALtoIdeControlBlockRegisterInDL) 12 14 ; DS:DI: Ptr to DPT (in RAMVARS segment) 13 15 ; Returns: … … 18 20 ALIGN JUMP_ALIGN 19 21 IdeIO_OutputALtoIdeRegisterInDL: 20 mov bx, IDEVARS.wPort 21 call GetPortToDXandTranslateA0andA3ifNecessary 22 out dx, al 23 ret 22 mov bl, IDEVARS.wPort 23 SKIP2B f ; cmp ax, <next instruction> 24 ; Fall to IdeIO_OutputALtoIdeControlBlockRegisterInDL 24 25 25 26 ;--------------------------------------------------------------------27 ; IdeIO_OutputALtoIdeControlBlockRegisterInDL28 ; Parameters:29 ; AL: Byte to output30 ; DL: IDE Control Block Register31 ; DS:DI: Ptr to DPT (in RAMVARS segment)32 ; Returns:33 ; Nothing34 ; Corrupts registers:35 ; BX, DX36 ;--------------------------------------------------------------------37 ALIGN JUMP_ALIGN38 26 IdeIO_OutputALtoIdeControlBlockRegisterInDL: 39 mov b x, IDEVARS.wPortCtrl27 mov bl, IDEVARS.wPortCtrl 40 28 call GetPortToDXandTranslateA0andA3ifNecessary 41 29 out dx, al … … 55 43 ALIGN JUMP_ALIGN 56 44 IdeIO_InputToALfromIdeRegisterInDL: 57 mov b x, IDEVARS.wPort45 mov bl, IDEVARS.wPort 58 46 call GetPortToDXandTranslateA0andA3ifNecessary 59 47 in al, dx … … 64 52 ; GetPortToDXandTranslateA0andA3ifNecessary 65 53 ; Parameters: 66 ; B X: Offset to port in IDEVARS (IDEVARS.wPort or IDEVARS.wPortCtrl)54 ; BL: Offset to port in IDEVARS (IDEVARS.wPort or IDEVARS.wPortCtrl) 67 55 ; DL: IDE Register 68 56 ; DS:DI: Ptr to DPT (in RAMVARS segment) … … 74 62 ALIGN JUMP_ALIGN 75 63 GetPortToDXandTranslateA0andA3ifNecessary: 64 xor bh, bh 76 65 xor dh, dh ; DX now has IDE register offset 77 66 add bl, [di+DPT.bIdevarsOffset] ; CS:BX now points port address -
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm
r171 r181 230 230 ALIGN JUMP_ALIGN 231 231 DualByteReadForXtide: 232 %ifdef USE_186 233 shr cx, 2 ; Smaller but slower on 186/286 234 %else 235 times 2 shr cx, 1 ; Loop unrolling 236 %endif 232 eSHR_IM cx, 2 ; Loop unrolling 237 233 mov bx, 8 ; Bit mask for toggling data low/high reg 238 234 ALIGN JUMP_ALIGN … … 322 318 push ds 323 319 push bx 324 %ifdef USE_186 325 shr cx, 2 ; Smaller but slower on 186/286 326 %else 327 times 2 shr cx, 1 ; Loop unrolling 328 %endif 320 eSHR_IM cx, 2 ; Loop unrolling 329 321 mov bx, 8 ; Bit mask for toggling data low/high reg 330 322 push es ; Copy ES... … … 372 364 WordWriteForXTIDEmod: 373 365 push ds 374 %ifdef USE_186 375 shr cx, 2 ; Smaller but slower on 186/286 376 %else 377 times 2 shr cx, 1 ; Loop unrolling 378 %endif 366 eSHR_IM cx, 2 ; Loop unrolling 379 367 push es ; Copy ES... 380 368 pop ds ; ...to DS -
trunk/XTIDE_Universal_BIOS/Src/Device/Idepack.asm
r180 r181 20 20 jmp ax 21 21 22 %ifdef MODULE_EBIOS 22 23 23 ;-------------------------------------------------------------------- 24 24 ; Idepack_ConvertDapToIdepackAndIssueCommandFromAH … … 36 36 ; AL, BX, CX, DX, SI, ES 37 37 ;-------------------------------------------------------------------- 38 %ifdef MODULE_EBIOS 38 39 ALIGN JUMP_ALIGN 39 40 Idepack_ConvertDapToIdepackAndIssueCommandFromAH: … … 60 61 %endif 61 62 63 62 64 ;-------------------------------------------------------------------- 63 65 ; Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH … … 83 85 Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH: 84 86 mov [bp+IDEPACK.bCommand], ah 85 test al, al 86 eCSETZ ah 87 88 xor ah, ah 89 cmp ah, al 90 cmc 91 adc ah, ah 92 87 93 mov [bp+IDEPACK.bSectorCount], al 88 94 mov [bp+IDEPACK.bSectorCountHighExt], ah … … 100 106 call AccessDPT_GetDeviceControlByteToAL 101 107 mov [bp+IDEPACK.bDeviceControl], al 102 jmp Device_OutputCommandWithParameters 108 jmp Device_OutputCommandWithParameters 103 109 104 110 -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm
r179 r181 10 10 ; http://en.wikibooks.org/wiki/Serial_Programming 11 11 ; 12 12 13 13 SerialCommand_UART_base EQU 0 14 14 SerialCommand_UART_transmitByte EQU 0 15 15 SerialCommand_UART_receiveByte EQU 0 16 16 SerialCommand_UART_divisorLow EQU 0 17 ; Values for UART_divisorLow: 17 ; Values for UART_divisorLow: 18 18 ; 60h = 1200, 30h = 2400, 18h = 4800, 0ch = 9600, 6 = 19200, 3 = 38400, 2 = 57600, 1 = 115200 19 19 … … 23 23 ; Note: hardware baud multipliers (2x, 4x) will impact the final baud rate and are not known at this level 24 24 25 SerialCommand_UART_interruptEnable EQU 1 25 SerialCommand_UART_interruptEnable EQU 1 26 26 SerialCommand_UART_divisorHigh EQU 1 27 27 ; UART_divisorHigh is zero for all speeds including and above 1200 baud … … 31 31 32 32 SerialCommand_UART_lineControl EQU 3 33 33 34 34 SerialCommand_UART_modemControl EQU 4 35 35 … … 40 40 SerialCommand_UART_scratch EQU 7 41 41 42 SerialCommand_PackedPortAndBaud_StartingPort EQU 240h 42 SerialCommand_PackedPortAndBaud_StartingPort EQU 240h 43 43 SerialCommand_PackedPortAndBaud_PortMask EQU 0fch ; upper 6 bits - 240h through 438h 44 44 SerialCommand_PackedPortAndBaud_BaudMask EQU 3 ; lower 2 bits - 4 baud rates … … 48 48 SerialCommand_Protocol_Inquire EQU 0 49 49 SerialCommand_Protocol_Header EQU 0a0h 50 50 51 51 ;-------------------------------------------------------------------- 52 52 ; SerialCommand_OutputWithParameters … … 65 65 ; AL, BX, CX, DX, (ES:SI for data transfer commands) 66 66 ;-------------------------------------------------------------------- 67 68 67 ALIGN JUMP_ALIGN 69 68 SerialCommand_OutputWithParameters: 70 69 71 70 mov ah,(SerialCommand_Protocol_Header | SerialCommand_Protocol_Read) 72 71 73 72 mov al,[bp+IDEPACK.bCommand] 74 73 … … 78 77 cmp al,30h ; Write Sectors IDE command 79 78 jz .readOrWrite 80 79 81 80 ; all other commands return success 82 81 ; including function 0ech which should return drive information, this is handled with the identify functions 83 82 xor ah,ah ; also clears carry 84 83 ret 85 86 .readOrWrite: 84 85 .readOrWrite: 87 86 mov [bp+IDEPACK.bFeatures],ah ; store protocol command 88 89 mov dl, byte [d s:di+DPT.bSerialPortAndBaud]90 87 88 mov dl, byte [di+DPT.bSerialPortAndBaud] 89 91 90 ; fall-through 92 91 … … 94 93 ; SerialCommand_OutputWithParameters_DeviceInDL 95 94 ; Parameters: 96 ; AH: Protocol Command 95 ; AH: Protocol Command 97 96 ; DL: Packed I/O port and baud rate 98 97 ; ES:SI: Ptr to buffer (for data transfer commands) … … 103 102 ; Corrupts registers: 104 103 ; AL, BX, CX, DX, (ES:SI for data transfer commands) 105 ;-------------------------------------------------------------------- 104 ;-------------------------------------------------------------------- 106 105 SerialCommand_OutputWithParameters_DeviceInDL: 107 106 108 107 push si 109 108 push di … … 111 110 push es 112 111 113 ; 112 ; 114 113 ; Unpack I/O port and baud from DPT 115 114 ; Port to DX more or less for the remainder of the routine … … 117 116 ; 118 117 mov cl, dl 119 118 120 119 and cl, SerialCommand_PackedPortAndBaud_BaudMask 121 120 shl cl, 1 … … 125 124 126 125 and dl, SerialCommand_PackedPortAndBaud_PortMask 127 mov dh, 0 126 mov dh, 0 128 127 shl dx, 1 129 128 add dx, SerialCommand_PackedPortAndBaud_StartingPort … … 131 130 ; 132 131 ; Buffer is referenced through ES:DI throughout, since we need to store faster than we read 133 ; 132 ; 134 133 mov di,si 135 134 … … 138 137 ; 139 138 ; Command byte and sector count live at the top of the stack, pop/push are used to access 140 ; 139 ; 141 140 push ax 142 143 cld 141 142 ; cld ; Shouldn't be needed. DF has already been cleared (line 24, Int13h.asm) 144 143 145 144 ;---------------------------------------------------------------------- … … 147 146 ; Initialize UART 148 147 ; 149 ; We do this each time since DOS (at boot) or another program may have 148 ; We do this each time since DOS (at boot) or another program may have 150 149 ; decided to reprogram the UART 151 150 ; 152 151 push dx 153 152 154 153 mov al,83h 155 154 add dl,SerialCommand_UART_lineControl … … 167 166 mov al,047h 168 167 inc dx ; fifo 169 out dx,al 168 out dx,al 170 169 171 170 mov al,03h … … 192 191 push es ; save off real buffer location 193 192 push di 194 195 mov di,bp ; point to IDEREGS for command dispatch; 193 194 mov di,bp ; point to IDEREGS for command dispatch; 196 195 push ss 197 196 pop es 198 197 199 198 xor si,si ; initialize checksum for write 200 dec si 199 dec si 201 200 mov bp,si 202 201 203 202 mov bl,03h ; writing 3 words 204 203 205 204 call SerialCommand_WriteProtocol 206 205 … … 213 212 ; 214 213 ; Top of the read/write loop, one iteration per sector 215 ; 214 ; 216 215 .nextSector: 217 216 xor si,si ; initialize checksum for read or write … … 220 219 221 220 mov bx,0100h 222 221 223 222 shr ah,1 ; command byte, are we doing a write? 224 223 jnc .readSector 225 224 call SerialCommand_WriteProtocol 226 225 227 226 xor bx,bx 228 227 … … 230 229 mov cx,bx 231 230 inc cx 232 231 233 232 mov bl,dl ; setup bl with proper values for read loop (bh comes later) 234 233 … … 246 245 push cx 247 246 xor cx,cx 248 .readTimeoutLoop: 247 .readTimeoutLoop: 249 248 push dx 250 249 or dl,SerialCommand_UART_lineStatus … … 257 256 mov bh,1 258 257 call SerialCommand_WaitAndPoll_Init 259 cli 258 cli 260 259 .readTimeoutComplete: 261 260 mov bh,bl 262 261 or bh,SerialCommand_UART_lineStatus 263 262 264 263 pop cx 265 264 test dl,1 … … 271 270 ; Read Block (without interrupts, used when there is a FIFO, high speed) 272 271 ; 273 ; NOTE: This loop is very time sensitive. Literally, another instruction 272 ; NOTE: This loop is very time sensitive. Literally, another instruction 274 273 ; cannot be inserted into this loop without us falling behind at high 275 ; speed (460.8K baud) on a 4.77Mhz 8088, making it hard to receive 274 ; speed (460.8K baud) on a 4.77Mhz 8088, making it hard to receive 276 275 ; a full 512 byte block. 277 276 ; 278 .readLoop: 277 .readLoop: 278 stosw ; store word in caller's data buffer 279 279 280 add bp, ax ; update Fletcher's checksum 280 281 adc bp, 0 … … 282 283 adc si, 0 283 284 284 stosw ; store word in caller's data buffer 285 286 mov dl,bh 287 in al,dx 285 mov dl,bh 286 in al,dx 288 287 shr al,1 ; data ready (byte 1)? 289 mov dl,bl ; get ready to read data 288 mov dl,bl ; get ready to read data 290 289 jnc .readTimeout ; nope not ready, update timeouts 291 292 ; 290 291 ; 293 292 ; Entry point after initial timeout. We enter here so that the checksum word 294 293 ; is not stored (and is left in AX after the loop is complete). 295 ; 296 .readByte1Ready: 294 ; 295 .readByte1Ready: 297 296 in al, dx ; read data byte 1 298 297 299 298 mov ah, al ; store byte in ah for now 300 301 ; 302 ; note the placement of this reset of dl to bh, and that it is 303 ; before the return, which is assymetric with where this is done 304 ; above for byte 1. The value of dl is used by the timeout routine 305 ; to know which byte to return to (.read_byte1_ready or 299 300 ; 301 ; note the placement of this reset of dl to bh, and that it is 302 ; before the return, which is assymetric with where this is done 303 ; above for byte 1. The value of dl is used by the timeout routine 304 ; to know which byte to return to (.read_byte1_ready or 306 305 ; .read_byte2_ready) 307 306 ; 308 mov dl,bh 309 307 mov dl,bh 308 310 309 in al,dx 311 310 shr al,1 ; data ready (byte 2)? 312 311 jnc .readTimeout 313 .readByte2Ready: 314 mov dl,bl 312 .readByte2Ready: 313 mov dl,bl 315 314 in al, dx ; read data byte 2 316 315 317 316 xchg al, ah ; ah was holding byte 1, reverse byte order 318 317 319 318 loop .readLoop 320 319 320 sti ; interrupts back on ASAP, if we turned them off 321 321 322 ; 322 323 ; Compare checksums 323 ; 324 ; 324 325 xor bp,si 325 326 cmp ax,bp 326 327 jnz SerialCommand_OutputWithParameters_Error 327 328 328 sti ; interrupts back on ASAP, if we turned them off 329 329 330 330 ;---------------------------------------------------------------------- 331 ; 331 ; 332 332 ; Clear read buffer 333 333 ; 334 334 ; In case there are extra characters or an error in the FIFO, clear it out. 335 ; In theory the initialization of the UART registers above should have 335 ; In theory the initialization of the UART registers above should have 336 336 ; taken care of this, but I have seen cases where this is not true. 337 337 ; 338 338 .clearBuffer: 339 mov dl,bh 339 mov dl,bh 340 340 in al,dx 341 mov dl,bl 341 mov dl,bl 342 342 test al,08fh 343 343 jz .clearBufferComplete 344 344 shr al,1 345 in al,dx 345 in al,dx 346 346 jc .clearBuffer ; note CF from shr above 347 347 jmp SerialCommand_OutputWithParameters_Error 348 349 .clearBufferComplete: 348 349 .clearBufferComplete: 350 350 pop ax ; sector count and command byte 351 351 dec al ; decrememnt sector count 352 352 push ax ; save 353 353 jz SerialCommand_OutputWithParameters_ReturnCodeInALCF ; CF clear from .clearBuffer test above 354 354 355 355 cli ; interrupts back off for ACK byte to host 356 356 ; (host could start sending data immediately) 357 357 out dx,al ; ACK with next sector number 358 358 359 359 jmp .nextSector ; all is well, time for next sector 360 360 … … 363 363 ; Cleanup, error reporting, and exit 364 364 ; 365 366 ; 365 366 ; 367 367 ; Used in situations where a call is underway, such as with SerialCommand_WaitAndPoll 368 ; 368 ; 369 369 SerialCommand_OutputWithParameters_ErrorAndPop2Words: 370 370 pop ax 371 371 pop ax 372 372 373 SerialCommand_OutputWithParameters_Error: 373 SerialCommand_OutputWithParameters_Error: 374 stc 374 375 mov al,1 375 stc 376 377 SerialCommand_OutputWithParameters_ReturnCodeInALCF: 376 377 SerialCommand_OutputWithParameters_ReturnCodeInALCF: 378 sti 378 379 mov ah,al 379 sti380 380 381 381 pop bp ; recover ax from stack, throw away … … 398 398 ; Returns when desired UART_LineStatus bit is cleared 399 399 ; Jumps directly to error exit if timeout elapses (and cleans up stack) 400 ; Corrupts registers: 400 ; Corrupts registers: 401 401 ; CX, flags 402 402 ;-------------------------------------------------------------------- … … 404 404 SerialCommand_WaitAndPoll_SoftDelayTicks EQU 20 405 405 406 ALIGN JUMP_ALIGN 406 ALIGN JUMP_ALIGN 407 407 SerialCommand_WaitAndPoll_Init: 408 408 mov cl,SerialCommand_WaitAndPoll_SoftDelayTicks 409 409 call Timer_InitializeTimeoutWithTicksInCL 410 410 ; fall-through 411 411 412 412 SerialCommand_WaitAndPoll: 413 413 call Timer_SetCFifTimeout … … 422 422 jz SerialCommand_WaitAndPoll 423 423 ; fall-through 424 425 SerialCommand_WaitAndPoll_Done: 424 425 SerialCommand_WaitAndPoll_Done: 426 426 ret 427 427 … … 442 442 SerialCommand_WriteProtocol: 443 443 mov bh,20h 444 444 445 445 .writeLoop: 446 446 test bh,1 447 447 jnz SerialCommand_WaitAndPoll_Done 448 448 449 449 mov ax,[es:di] ; fetch next word 450 450 inc di 451 451 inc di 452 452 453 453 add bp,ax ; update checksum 454 454 adc bp,0 … … 458 458 .writeLoopChecksum: 459 459 call SerialCommand_WaitAndPoll_Init 460 460 461 461 out dx,al ; output first byte 462 462 463 463 call SerialCommand_WaitAndPoll 464 464 465 465 mov al,ah ; output second byte 466 466 out dx,al … … 468 468 dec bl 469 469 jnz .writeLoop 470 470 471 471 inc bh 472 472 473 473 mov ax,bp ; merge checksum for possible write (last loop) 474 xor ax,si 475 474 xor ax,si 475 476 476 jmp .writeLoopChecksum 477 477 … … 501 501 mov dx,[cs:bp+IDEVARS.wPortCtrl] 502 502 inc dx 503 dec dx 503 dec dx 504 504 jz SerialCommand_AutoSerial 505 505 506 506 ; fall-through 507 SerialCommand_IdentifyDeviceInDL_DriveInBH: 507 SerialCommand_IdentifyDeviceInDL_DriveInBH: 508 508 509 509 push bp ; setup fake IDEREGS_AND_INTPACK … … 516 516 mov bl,0a0h ; protocol command to ah and onto stack with bh 517 517 mov ah,bl 518 518 519 519 push bx 520 520 … … 524 524 525 525 pop bx 526 527 pop cx 526 527 pop cx 528 528 pop dx 529 529 530 530 pop bp 531 531 532 ; place packed port/baud in vendor area of packet, read by FinalizeDPT 533 mov byte [es:si+SerialCommand_IdentifyDevice_PackedPortAndBaud], dl 532 ; place packed port/baud in vendor area of packet, read by FinalizeDPT 533 mov byte [es:si+SerialCommand_IdentifyDevice_PackedPortAndBaud], dl 534 534 535 535 ret … … 540 540 ; 541 541 ; When the SerialAuto IDEVARS entry is used, scans the COM ports on the machine for a possible serial connection. 542 ; 543 542 ; 543 544 544 SerialCommand_ScanPortAddresses: db 0b8h, 0f8h, 0bch, 0bah, 0fah, 0beh, 0feh, 0 545 545 ; Corresponds to I/O port: 3f8, 2f8, 3e8, 2e8, 2f0, 3e0, 2e0, 260, 368, 268, 360, 270 546 546 ; COM Assignments: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 547 547 548 ALIGN JUMP_ALIGN 549 SerialCommand_AutoSerial: 548 ALIGN JUMP_ALIGN 549 SerialCommand_AutoSerial: 550 550 mov di,SerialCommand_ScanPortAddresses-1 551 551 552 552 .nextPort: 553 553 inc di ; load next port address 554 554 mov dl,[cs:di] 555 555 556 556 mov dh,0 ; shift from one byte to two 557 shl dx,1 558 shl dx,1 557 eSHL_IM dx, 2 559 558 jz .exitNotFound 560 559 561 560 ; 562 561 ; Test for COM port presence, write to and read from registers 563 ; 564 push dx 562 ; 563 push dx 565 564 add dl,SerialCommand_UART_lineControl 566 565 mov al, 09ah … … 569 568 pop dx 570 569 cmp al, 09ah 571 jnz .nextPort 570 jnz .nextPort 572 571 573 572 mov al, 0ch … … 579 578 ; 580 579 ; Pack into dl, baud rate starts at 0 581 ; 580 ; 582 581 add dx,-(SerialCommand_PackedPortAndBaud_StartingPort) 583 582 shr dx,1 584 583 585 584 jmp .testFirstBaud 586 585 587 586 ; 588 587 ; Walk through 4 possible baud rates 589 ; 590 .nextBaud: 588 ; 589 .nextBaud: 591 590 inc dx 592 591 test dl,3 593 592 jz .nextPort 594 595 .testFirstBaud: 593 594 .testFirstBaud: 596 595 call SerialCommand_IdentifyDeviceInDL_DriveInBH 597 596 jc .nextBaud 598 597 599 598 ret 600 599 601 600 .exitNotFound: 601 stc 602 602 mov ah,1 603 stc604 603 605 604 ret -
trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm
r179 r181 18 18 or byte [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 19 19 mov al, byte [es:si+SerialCommand_IdentifyDevice_PackedPortAndBaud] 20 mov byte [d s:di+DPT.bSerialPortAndBaud], al20 mov byte [di+DPT.bSerialPortAndBaud], al 21 21 ret 22 22 23 -
trunk/XTIDE_Universal_BIOS/Src/Device/Timer.asm
r155 r181 59 59 %ifndef USE_AT 60 60 mov ax, 2 61 ; Fall to Delay_TimerTicksFromAX61 ; Fall to Timer_DelayTimerTicksFromAX 62 62 %else 63 63 push dx … … 68 68 mov ah, EVENT_WAIT 69 69 int BIOS_SYSTEM_INTERRUPT_15h 70 sti ; XT BIOSes return with interrupt disabled70 sti ; XT BIOSes return with interrupts disabled. TODO: Maybe we can remove this since it's in an AT-only block? 71 71 72 72 pop cx -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm
r176 r181 53 53 cmp ah, 48h 54 54 ja SHORT Int13h_UnsupportedFunction 55 sub b x, 41h<<1 ; BX = Offset to eINT 13h jump table56 j lSHORT Int13h_UnsupportedFunction55 sub bl, 41h<<1 ; BX = Offset to eINT 13h jump table 56 jb SHORT Int13h_UnsupportedFunction 57 57 jmp [cs:bx+g_rgwEbiosFunctionJumpTable] 58 58 %endif … … 169 169 mov di, [RAMVARS.fpOldI13h+2] 170 170 xchg di, [es:BIOS_DISK_INTERRUPT_13h*4+2] 171 sti 171 172 mov [RAMVARS.fpOldI13h+2], di 172 sti173 173 pop es 174 174 ret -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH24h_HSetBlocks.asm
r170 r181 60 60 call Idepack_StoreNonExtParametersAndIssueCommandFromAL 61 61 pop bx 62 j c SHORT .DisableBlockMode63 64 ; Store new block size to DPT and return65 mov [di+DPT_ATA.bSetBlock], bl ; Store new block size62 jnc .StoreBlockSize 63 mov bl, 1 ; Disable block mode 64 .StoreBlockSize: ; Store new block size to DPT and return 65 mov [di+DPT_ATA.bSetBlock], bl 66 66 ret 67 .DisableBlockMode:68 mov BYTE [di+DPT_ATA.bSetBlock], 1 ; Disable block mode69 ret -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/CommandLookup.asm
r176 r181 5 5 SECTION .text 6 6 7 %ifdef MODULE_EBIOS8 7 ;-------------------------------------------------------------------- 9 8 ; CommandLookup_GetEbiosIndexToBX … … 16 15 ; AX, DX 17 16 ;-------------------------------------------------------------------- 17 %ifdef MODULE_EBIOS 18 18 ALIGN JUMP_ALIGN 19 19 CommandLookup_GetEbiosIndexToBX: … … 29 29 ret 30 30 %endif 31 31 32 32 ;-------------------------------------------------------------------- 33 33 ; CommandLookup_GetOldInt13hIndexToBX … … 63 63 db COMMAND_VERIFY_SECTORS_EXT 64 64 db COMMAND_VERIFY_SECTORS 65 db COMMAND_VERIFY_SECTORS_EXT 65 db COMMAND_VERIFY_SECTORS_EXT 66 -
trunk/XTIDE_Universal_BIOS/Src/Initialization/AtaID.asm
r174 r181 121 121 ;-------------------------------------------------------------------- 122 122 AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI: 123 call Registers_ExchangeDSSIwithESDI ; ATA info now in DSDI 123 mov bx, Registers_ExchangeDSSIwithESDI 124 call bx ; ATA info now in DS:DI 125 push bx ; We will return via Registers_ExchangeDSSIwithESDI 124 126 xor bx, bx 125 127 test BYTE [di+ATA1.wCaps+1], A1_wCaps_LBA>>8 … … 133 135 ; Parameters: 134 136 ; BX: Zero 135 ; DS: SI: Ptr to 512-byte ATA information read from the drive137 ; DS:DI: Ptr to 512-byte ATA information read from the drive 136 138 ; Returns: 137 139 ; BX:DX:AX: 48-bit sector count … … 145 147 mov dx, [di+ATA6.qwLBACnt+2] 146 148 mov bx, [di+ATA6.qwLBACnt+4] 147 jmp SHORT .ExchangePtrAndReturn149 ret 148 150 149 151 .GetLba28SectorCount: 150 152 mov ax, [di+ATA1.dwLBACnt] 151 153 mov dx, [di+ATA1.dwLBACnt+2] 152 jmp SHORT .ExchangePtrAndReturn154 ret 153 155 154 156 .GetChsSectorCount: … … 156 158 mul BYTE [di+ATA1.wHeadCnt] ; AX=Sectors per track * number of heads 157 159 mul WORD [di+ATA1.wCylCnt] ; DX:AX=Sectors per track * number of heads * number of cylinders 158 .ExchangePtrAndReturn: 159 jmp Registers_ExchangeDSSIwithESDI 160 ret -
trunk/XTIDE_Universal_BIOS/Src/Initialization/DriveXlate.asm
r148 r181 55 55 ; DL: Translated drive number 56 56 ; Corrupts registers: 57 ; Nothing57 ; AL 58 58 ;-------------------------------------------------------------------- 59 59 ALIGN JUMP_ALIGN … … 62 62 je SHORT .SwapToXXhInAL 63 63 cmp al, dl ; Swap DL from xxh to 00h/80h? 64 je SHORT .SwapTo00hOr80hInAH 65 ret 66 ALIGN JUMP_ALIGN 67 .SwapTo00hOr80hInAH: 68 mov dl, ah 69 ret 64 jne SHORT .Return 65 mov al, ah 70 66 ALIGN JUMP_ALIGN 71 67 .SwapToXXhInAL: 72 68 mov dl, al 69 ALIGN JUMP_ALIGN, ret 70 .Return: 73 71 ret 74 72 … … 83 81 ; Nothing 84 82 ; Corrupts registers: 85 ; AX83 ; Nothing 86 84 ;-------------------------------------------------------------------- 87 85 ALIGN JUMP_ALIGN -
trunk/XTIDE_Universal_BIOS/Src/Initialization/FloppyDrive.asm
r152 r181 136 136 call GetCountFromBDA 137 137 %endif 138 MAX_U cl, [cs:ROMVARS.bMinFddCnt] 138 mov ch, [cs:ROMVARS.bMinFddCnt] 139 MAX_U cl, ch 140 pop es 139 141 xor ch, ch 140 pop es141 142 ret 142 143 -
trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm
r162 r181 29 29 ;-------------------------------------------------------------------- 30 30 .InitializeInt13hAnd40h: 31 mov ax, [es:BIOS_DISK_INTERRUPT_13h*4+2]; Load old INT 13h segment 32 mov [RAMVARS.fpOldI13h+2], ax ; Store old INT 13h segment 33 xchg dx, ax 31 34 mov ax, [es:BIOS_DISK_INTERRUPT_13h*4] ; Load old INT 13h offset 32 mov dx, [es:BIOS_DISK_INTERRUPT_13h*4+2]; Load old INT 13h segment33 35 mov [RAMVARS.fpOldI13h], ax ; Store old INT 13h offset 34 mov [RAMVARS.fpOldI13h+2], dx ; Store old INT 13h segment 36 35 37 mov bx, BIOS_DISK_INTERRUPT_13h ; INT 13h interrupt vector offset 36 38 mov si, Int13h_DiskFunctionsHandler ; Interrupt handler offset -
trunk/XTIDE_Universal_BIOS/Src/Main.asm
r179 r181 3 3 ; : aitotat@gmail.com 4 4 ; : 5 ; : Greg Lindhorst 6 ; : gregli@hotmail.com 7 ; ; 5 8 ; : Krister Nordvall 6 9 ; : krille_n_@hotmail.com … … 13 16 14 17 15 ; Included .inc files16 %include "AssemblyLibrary.inc" ; Assembly Library. Must be included first!17 %include "IntController.inc" ; For Interrupt Controller equates18 %include "ATA_ID.inc" ; For ATA Drive Information structs19 %include "IdeRegisters.inc" ; For ATA Registers, flags and commands20 %include "Int13h.inc" ; Equates for INT 13h functions18 ; Included .inc files 19 %include "AssemblyLibrary.inc" ; Assembly Library. Must be included first! 20 %include "IntController.inc" ; For Interrupt Controller equates 21 %include "ATA_ID.inc" ; For ATA Drive Information structs 22 %include "IdeRegisters.inc" ; For ATA Registers, flags and commands 23 %include "Int13h.inc" ; Equates for INT 13h functions 21 24 %ifdef MODULE_EBIOS 22 %include "EBIOS.inc" ; Equates for EBIOS functions23 %endif 24 %include "CustomDPT.inc" ; For Disk Parameter Table25 %include "RomVars.inc" ; For ROMVARS and IDEVARS structs26 %include "RamVars.inc" ; For RAMVARS struct27 %include "BootVars.inc" ; For BOOTVARS and BOOTNFO structs28 %include "BootMenu.inc" ; For Boot Menu29 %include "IDE_8bit.inc" ; For IDE 8-bit data port macros30 %include "DeviceIDE.inc" ; For IDE device equates25 %include "EBIOS.inc" ; Equates for EBIOS functions 26 %endif 27 %include "CustomDPT.inc" ; For Disk Parameter Table 28 %include "RomVars.inc" ; For ROMVARS and IDEVARS structs 29 %include "RamVars.inc" ; For RAMVARS struct 30 %include "BootVars.inc" ; For BOOTVARS and BOOTNFO structs 31 %include "BootMenu.inc" ; For Boot Menu 32 %include "IDE_8bit.inc" ; For IDE 8-bit data port macros 33 %include "DeviceIDE.inc" ; For IDE device equates 31 34 32 35 … … 39 42 at ROMVARS.wRomSign, dw 0AA55h ; PC ROM signature 40 43 at ROMVARS.bRomSize, db CNT_ROM_BLOCKS ; ROM size in 512B blocks 41 at ROMVARS.rgbJump, 44 at ROMVARS.rgbJump, jmp Initialize_FromMainBiosRomSearch 42 45 at ROMVARS.rgbSign, db "XTIDE120" ; Signature for flash program 43 46 at ROMVARS.szTitle … … 53 56 54 57 ;;; For OR'ing into wFlags below 55 ;;; 58 ;;; 56 59 %ifdef MODULE_SERIAL 57 MAIN_FLG_MODULE_SERIAL equFLG_ROMVARS_MODULE_SERIAL58 %else 59 MAIN_FLG_MODULE_SERIAL equ060 MAIN_FLG_MODULE_SERIAL equ FLG_ROMVARS_MODULE_SERIAL 61 %else 62 MAIN_FLG_MODULE_SERIAL equ 0 60 63 %endif 61 64 62 65 %ifdef MODULE_EBIOS 63 MAIN_FLG_MODULE_EBIOS equFLG_ROMVARS_MODULE_EBIOS64 %else 65 MAIN_FLG_MODULE_EBIOS equ066 MAIN_FLG_MODULE_EBIOS equ FLG_ROMVARS_MODULE_EBIOS 67 %else 68 MAIN_FLG_MODULE_EBIOS equ 0 66 69 %endif 67 70 … … 109 112 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT 110 113 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 111 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 112 %endif 114 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 115 %endif 113 116 %else 114 117 ;-----------------------------------; … … 142 145 at ROMVARS.ideVarsSerialAuto+IDEVARS.bDevice, db DEVICE_SERIAL_PORT 143 146 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 144 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 145 %endif 147 at ROMVARS.ideVarsSerialAuto+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags, db FLG_DRVPARAMS_BLOCKMODE 148 %endif 146 149 %endif 147 150 iend 148 151 149 152 150 ; Libraries and data151 %include "AssemblyLibrary.asm"152 %include "Strings.asm" ; For BIOS message strings153 154 ; Initialization and drive detection155 %include "Initialize.asm" ; For BIOS initialization156 %include "Interrupts.asm" ; For Interrupt initialization157 %include "RamVars.asm" ; For RAMVARS initialization and access158 %include "CreateDPT.asm" ; For creating DPTs159 %include "FindDPT.asm" ; For finding DPTs160 %include "AccessDPT.asm" ; For accessing DPTs161 %include "BootInfo.asm" ; For creating BOOTNFO structs162 %include "AtaID.asm" ; For ATA Identify Device information163 %include "DetectDrives.asm" ; For detecting IDE drives164 %include "DetectPrint.asm" ; For printing drive detection strings165 166 ; Boot menu167 %include "BootMenu.asm" ; For Boot Menu operations168 %include "BootMenuEvent.asm" ; For menu library event handling169 %include "FloppyDrive.asm" ; Floppy Drive related functions170 %include "BootSector.asm" ; For loading boot sector171 %include "BootPrint.asm" ; For printing boot information172 %include "BootMenuPrint.asm" ; For printing Boot Menu strings173 %include "BootMenuPrintCfg.asm" ; For printing hard disk configuration174 175 ; Boot loader153 ; Libraries and data 154 %include "AssemblyLibrary.asm" 155 %include "Strings.asm" ; For BIOS message strings 156 157 ; Initialization and drive detection 158 %include "Initialize.asm" ; For BIOS initialization 159 %include "Interrupts.asm" ; For Interrupt initialization 160 %include "RamVars.asm" ; For RAMVARS initialization and access 161 %include "CreateDPT.asm" ; For creating DPTs 162 %include "FindDPT.asm" ; For finding DPTs 163 %include "AccessDPT.asm" ; For accessing DPTs 164 %include "BootInfo.asm" ; For creating BOOTNFO structs 165 %include "AtaID.asm" ; For ATA Identify Device information 166 %include "DetectDrives.asm" ; For detecting IDE drives 167 %include "DetectPrint.asm" ; For printing drive detection strings 168 169 ; Boot menu 170 %include "BootMenu.asm" ; For Boot Menu operations 171 %include "BootMenuEvent.asm" ; For menu library event handling 172 %include "FloppyDrive.asm" ; Floppy Drive related functions 173 %include "BootSector.asm" ; For loading boot sector 174 %include "BootPrint.asm" ; For printing boot information 175 %include "BootMenuPrint.asm" ; For printing Boot Menu strings 176 %include "BootMenuPrintCfg.asm" ; For printing hard disk configuration 177 178 ; Boot loader 176 179 %ifndef USE_AT 177 %include "Int19hLate.asm" ; For late initialization 178 %endif 179 %include "Int19hMenu.asm" ; For Int 19h, Boot Loader for Boot Menu 180 181 ; For all device types 182 %include "Device.asm" 183 %include "Idepack.asm" 184 %include "Timer.asm" ; For timeout and delay 185 186 ; IDE Device support 187 %include "IdeCommand.asm" 188 %include "IdeTransfer.asm" ; Must be included after IdeCommand.asm 189 %include "IdeDPT.asm" 190 %include "IdeIO.asm" 191 %include "IdeIrq.asm" 192 %include "IdeWait.asm" 193 %include "IdeError.asm" ; Must be included after IdeWait.asm 194 195 %ifdef MODULE_SERIAL 196 ; Serial Port Device support 197 %include "SerialCommand.asm" 198 %include "SerialDPT.asm" 199 %endif 200 201 ; INT 13h Hard Disk BIOS functions 202 %include "DriveXlate.asm" ; For swapping drive numbers 203 %include "Address.asm" ; For sector address translations 204 %include "CommandLookup.asm" ; For getting correct transfer command 205 %include "Int13h.asm" ; For Int 13h, Disk functions 206 %include "AH0h_HReset.asm" ; Required by Int13h_Jump.asm 207 %include "AH1h_HStatus.asm" ; Required by Int13h_Jump.asm 208 %include "AH2h_HRead.asm" ; Required by Int13h_Jump.asm 209 %include "AH3h_HWrite.asm" ; Required by Int13h_Jump.asm 210 %include "AH4h_HVerify.asm" ; Required by Int13h_Jump.asm 211 %include "AH8h_HParams.asm" ; Required by Int13h_Jump.asm 212 %include "AH9h_HInit.asm" ; Required by Int13h_Jump.asm 213 %include "AHCh_HSeek.asm" ; Required by Int13h_Jump.asm 214 %include "AHDh_HReset.asm" ; Required by Int13h_Jump.asm 215 %include "AH10h_HReady.asm" ; Required by Int13h_Jump.asm 216 %include "AH11h_HRecal.asm" ; Required by Int13h_Jump.asm 217 %include "AH15h_HSize.asm" ; Required by Int13h_Jump.asm 218 %include "AH23h_HFeatures.asm" ; Required by Int13h_Jump.asm 219 %include "AH24h_HSetBlocks.asm" ; Required by Int13h_Jump.asm 220 %include "AH25h_HDrvID.asm" ; Required by Int13h_Jump.asm 180 %include "Int19hLate.asm" ; For late initialization 181 %endif 182 %include "Int19hMenu.asm" ; For Int 19h, Boot Loader for Boot Menu 183 184 ; For all device types 185 %include "Device.asm" 186 %include "Idepack.asm" 187 %include "Timer.asm" ; For timeout and delay 188 189 ; IDE Device support 190 %include "IdeCommand.asm" 191 %include "IdeTransfer.asm" ; Must be included after IdeCommand.asm 192 %include "IdeDPT.asm" 193 %include "IdeIO.asm" 194 %include "IdeIrq.asm" 195 %include "IdeWait.asm" 196 %include "IdeError.asm" ; Must be included after IdeWait.asm 197 198 %ifdef MODULE_SERIAL ; Serial Port Device support 199 %include "SerialCommand.asm" 200 %include "SerialDPT.asm" 201 %endif 202 203 ; INT 13h Hard Disk BIOS functions 204 %include "DriveXlate.asm" ; For swapping drive numbers 205 %include "Address.asm" ; For sector address translations 206 %include "CommandLookup.asm" ; For getting correct transfer command 207 %include "Int13h.asm" ; For Int 13h, Disk functions 208 %include "AH0h_HReset.asm" ; Required by Int13h_Jump.asm 209 %include "AH1h_HStatus.asm" ; Required by Int13h_Jump.asm 210 %include "AH2h_HRead.asm" ; Required by Int13h_Jump.asm 211 %include "AH3h_HWrite.asm" ; Required by Int13h_Jump.asm 212 %include "AH4h_HVerify.asm" ; Required by Int13h_Jump.asm 213 %include "AH8h_HParams.asm" ; Required by Int13h_Jump.asm 214 %include "AH9h_HInit.asm" ; Required by Int13h_Jump.asm 215 %include "AHCh_HSeek.asm" ; Required by Int13h_Jump.asm 216 %include "AHDh_HReset.asm" ; Required by Int13h_Jump.asm 217 %include "AH10h_HReady.asm" ; Required by Int13h_Jump.asm 218 %include "AH11h_HRecal.asm" ; Required by Int13h_Jump.asm 219 %include "AH15h_HSize.asm" ; Required by Int13h_Jump.asm 220 %include "AH23h_HFeatures.asm" ; Required by Int13h_Jump.asm 221 %include "AH24h_HSetBlocks.asm" ; Required by Int13h_Jump.asm 222 %include "AH25h_HDrvID.asm" ; Required by Int13h_Jump.asm 221 223 %ifdef MODULE_EBIOS 222 %include "AH41h_CheckIfExtensionsPresent.asm"223 %include "AH42h_ExtendedReadSectors.asm"224 %include "AH43h_ExtendedWriteSectors.asm"225 %include "AH44h_ExtendedVerifySectors.asm"226 %include "AH47h_ExtendedSeek.asm"227 %include "AH48h_GetExtendedDriveParameters.asm"224 %include "AH41h_CheckIfExtensionsPresent.asm" 225 %include "AH42h_ExtendedReadSectors.asm" 226 %include "AH43h_ExtendedWriteSectors.asm" 227 %include "AH44h_ExtendedVerifySectors.asm" 228 %include "AH47h_ExtendedSeek.asm" 229 %include "AH48h_GetExtendedDriveParameters.asm" 228 230 %endif 229 231 -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm
r173 r181 78 78 ; Only need to limit sectors for LBA assist 79 79 test BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA 80 j nz SHORT .ReturnLbaAssistedLCHS80 jz SHORT AccessDPT_ShiftPCHinBXDXtoLCH 81 81 82 ; P-CHS to L-CHS translation when necessary83 j mp SHORT AccessDPT_ShiftPCHinBXDXtoLCH82 cmp WORD [di+DPT.dwCylinders+2], BYTE 0 83 jnz SHORT .Return_MAX_LCHS_CYLINDERS 84 84 85 .ReturnLbaAssistedLCHS: 86 cmp WORD [di+DPT.dwCylinders+2], BYTE 0 87 jz SHORT .LimitCylindersTo1024 85 ; Limit cylinders to 1024 86 cmp bx, MAX_LCHS_CYLINDERS 87 jb SHORT .Return 88 ALIGN JUMP_ALIGN 89 .Return_MAX_LCHS_CYLINDERS: 88 90 mov bx, MAX_LCHS_CYLINDERS 89 .LimitCylindersTo1024: 90 MIN_U bx, MAX_LCHS_CYLINDERS 91 ALIGN JUMP_ALIGN, ret 92 .Return: 91 93 ret 92 94 … … 114 116 jmp SHORT .ShiftLoop 115 117 .LimitHeadsTo255: ; DOS does not support drives with 256 heads 116 sub dl, dh ; BH set only when 256 logical heads118 sub dl, dh ; DH set only when 256 logical heads 117 119 xor dh, dh 118 120 ret -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm
r175 r181 66 66 %ifdef MODULE_SERIAL 67 67 cmp byte [cs:bp+IDEVARS.bDevice], DEVICE_SERIAL_PORT 68 jnz . around68 jnz .StoreAddressing 69 69 or byte [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE 70 .around: 71 %endif 72 70 %endif 73 71 ; Fall to .StoreAddressing 74 72 … … 117 115 118 116 ; We need to get number of bits to shift for translation 119 push bx120 117 push ax 121 118 eMOVZX dx, bl ; Heads now in DX 122 xchg bx, ax ; Sectors now in BX 123 call AccessDPT_ShiftPCHinBXDXtoLCH 119 xchg bx, ax ; Cylinders now in BX 120 call AccessDPT_ShiftPCHinBXDXtoLCH ; Leaves AX untouched 121 xchg bx, ax ; Restore HeadsAndSectors to BX 124 122 or cl, ADDRESSING_MODE_PCHS<<ADDRESSING_MODE_FIELD_POSITION 125 123 or [di+DPT.bFlagsLow], cl ; Store bits to shift 126 124 pop ax 127 pop bx128 125 ; Fall to .StoreChsFromAXBX 129 126 -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm
r161 r181 167 167 ; CF: Set if wanted DPT found 168 168 ; Cleared if DPT not found 169 ; Unchanged if no drives 169 170 ; Corrupts registers: 170 171 ; Nothing unless corrupted by callback function -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm
r155 r181 93 93 test BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE 94 94 jnz SHORT .GetStolenSegmentToDS 95 %ifndef USE_186 95 96 mov di, LITE_MODE_RAMVARS_SEGMENT 96 97 mov ds, di 98 %else 99 push LITE_MODE_RAMVARS_SEGMENT 100 pop ds 101 %endif 97 102 ret 98 103 … … 183 188 LOAD_BDA_SEGMENT_TO es, cx, ! ; Zero CX 184 189 call RamVars_GetCountOfKnownDrivesToDL 185 MAX_U dl, [es:BDA.bHDCount]186 movcl, dl190 mov cl, [es:BDA.bHDCount] 191 MAX_U cl, dl 187 192 188 193 pop dx -
trunk/XTIDE_Universal_BIOS/makefile
r176 r181 65 65 # Assembler preprocessor defines. # 66 66 ################################################################# 67 DEFINES = INCLUDE_MENU_LIBRARY EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS MODULE_EBIOS 67 DEFINES = INCLUDE_MENU_LIBRARY EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS MODULE_EBIOS MODULE_SERIAL 68 68 DEFINES_XT = ELIMINATE_CGA_SNOW 69 69 DEFINES_XTPLUS = ELIMINATE_CGA_SNOW USE_186 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/BiosFile.asm
r138 r181 92 92 call Registers_ExchangeDSSIwithESDI 93 93 call FileIO_ReadDXCXbytesToDSSIusingHandleFromBX 94 jnc SHORT .StoreFileNameToCfgvarsFromESDI 95 96 pop es 97 ret 98 99 ALIGN JUMP_ALIGN 100 .StoreFileNameToCfgvarsFromESDI: 94 jc SHORT .ReturnError 95 96 ; Store filename to Cfgvars from ESDI 101 97 push cx 102 98 … … 107 103 cld 108 104 call String_CopyDSSItoESDIandGetLengthToCX 105 clc 109 106 110 107 pop cx 108 ALIGN JUMP_ALIGN 109 .ReturnError: 111 110 pop es 112 clc113 111 ret 114 112 … … 157 155 xor dx, dx 158 156 shl cx, 1 159 rcl dx, 1 ; WORDs to BYTEs 157 rcl dx, 1 ; WORDs to BYTEs 160 158 161 159 mov al, FILE_ACCESS.WriteOnly -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Dialogs.asm
r170 r181 159 159 ALIGN JUMP_ALIGN 160 160 Dialogs_DisplayProgressDialogForFlashingWithDialogIoInDSSIandFlashvarsInDSBX: 161 call .InitializeProgressDialogIoInDSSIwithFlashvarsInDSBX 162 mov dx, ds 163 mov ax, bx 164 CALL_MENU_LIBRARY StartProgressTaskWithIoInDSSIandParamInDXAX 165 ret 166 167 ALIGN JUMP_ALIGN 168 .InitializeProgressDialogIoInDSSIwithFlashvarsInDSBX: 161 ; Initialize progress dialog I/O in DS:SI with flashvars in DS:BX 169 162 call InitializeDialogInputFromDSSI 170 163 mov WORD [si+DIALOG_INPUT.fszTitle], g_szFlashTitle … … 177 170 mov WORD [si+PROGRESS_DIALOG_IO.fnTaskWithParamInDSSI], Flash_EepromWithFlashvarsInDSSI 178 171 mov [si+PROGRESS_DIALOG_IO.fnTaskWithParamInDSSI+2], cs 172 ; Init done 173 174 mov dx, ds 175 mov ax, bx 176 CALL_MENU_LIBRARY StartProgressTaskWithIoInDSSIandParamInDXAX 179 177 ret 180 178 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/EEPROM.asm
r159 r181 169 169 call Buffers_IsXtideUniversalBiosSignatureInESDI 170 170 je SHORT .RomFound 171 add b x, 200h; Increment by 8kB171 add bh, 2 ; Increment by 8kB 172 172 jnc SHORT .SegmentLoop ; Loop until segment overflows 173 173 clc -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Flash.asm
r159 r181 1 ; File name : Flash.asm2 1 ; Project name : XTIDE Universal BIOS Configurator v2 3 ; Created date : 1.12.20104 ; Last update : 3.12.20105 ; Author : Tomi Tilli6 2 ; Description : Functions for flashing the EEPROM. 7 3 … … 37 33 38 34 loop .FlashNextPage 35 %if FLASH_RESULT.success = 0 ; Just in case this should ever change 36 mov [bp+FLASHVARS.flashResult], cl 37 %else 39 38 mov BYTE [bp+FLASHVARS.flashResult], FLASH_RESULT.success 39 %endif 40 40 ret 41 41 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuEvents.asm
r138 r181 135 135 .KeyStrokeInAX: 136 136 cmp ah, KEY_DISPLAY_ITEM_HELP 137 je SHORT .DisplayHelp 138 jmp SHORT .EventNotHandled 139 140 ALIGN JUMP_ALIGN 141 .DisplayHelp: 137 jne SHORT .EventNotHandled 138 139 ;ALIGN JUMP_ALIGN 140 ;.DisplayHelp: 142 141 call Menupage_GetActiveMenupageToDSDI 143 142 CALL_MENU_LIBRARY GetHighlightedItemToAX -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
r108 r181 150 150 add di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset] 151 151 jmp [cs:bx+.rgfnJumpToStoreValueBasedOnItemType] 152 .InvalidItemType:153 ret154 152 155 153 ALIGN WORD_ALIGN … … 242 240 CALL_MENU_LIBRARY GetHighlightedItemToAX 243 241 CALL_MENU_LIBRARY RefreshItemFromAX 242 .InvalidItemType: 244 243 ret 245 244 … … 268 267 ALIGN JUMP_ALIGN 269 268 Menuitem_GetValueToAXfromMenuitemInDSSI: 270 call .GetMenuitemValueToAX271 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE272 jnz SHORT .ConvertWordToByteValue273 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE274 jnz SHORT .ConvertWordToFlagValue275 ret276 277 ALIGN JUMP_ALIGN278 .GetMenuitemValueToAX:279 269 push es 280 270 push di … … 284 274 pop di 285 275 pop es 286 ret 287 276 277 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE 278 jnz SHORT .ConvertWordToByteValue 279 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE 280 jz SHORT .Return 281 282 test ax, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask] 283 mov ax, TRUE<<1 ; Shift for lookup 284 jnz SHORT .Return 285 xor ax, ax 288 286 ALIGN JUMP_ALIGN 289 287 .ConvertWordToByteValue: 290 288 xor ah, ah 291 ret 292 293 ALIGN JUMP_ALIGN 294 .ConvertWordToFlagValue: 295 test ax, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask] 296 jnz SHORT .ReturnTrue 297 xor ax, ax 298 ret 299 ALIGN JUMP_ALIGN 300 .ReturnTrue: 301 mov ax, TRUE<<1 ; Shift for lookup 289 ALIGN JUMP_ALIGN, ret 290 .Return: 302 291 ret 303 292 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/ConfigurationMenu.asm
r153 r181 168 168 call .GetIdeControllerCountToCX 169 169 dec cx ; Primary always enabled 170 j cxz.PrimaryControllerAlreadyEnabled170 jz .PrimaryControllerAlreadyEnabled 171 171 mov bx, g_MenuitemConfigurationSecondaryIdeController 172 172 ALIGN JUMP_ALIGN … … 191 191 call Buffers_GetRomvarsFlagsToAX 192 192 test ax, FLG_ROMVARS_FULLMODE 193 mov al, 1 ; Assume lite mode 193 194 jz SHORT .AllowOnlyOneIdeControllerInLiteMode 194 195 195 196 mov bx, ROMVARS.bIdeCnt 196 197 call Buffers_GetRomvarsValueToAXfromOffsetInBX 197 eMOVZX cx, al198 ret199 198 ALIGN JUMP_ALIGN 200 199 .AllowOnlyOneIdeControllerInLiteMode: 201 mov cx, 1 200 cbw ; A maximum of 127 controllers should be sufficient 201 xchg cx, ax 202 202 ret 203 203 -
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/FlashMenu.asm
r159 r181 390 390 mov al, 0FEh ; System reset (AT+ keyboard controller) 391 391 out 64h, al ; Reset computer (AT+) 392 mov a x, 10392 mov al, 10 393 393 call Delay_MicrosecondsFromAX 394 394 .ResetXT: -
trunk/XTIDE_Universal_BIOS_Configurator_v2/makefile
r145 r181 58 58 # Assembler preprocessor defines. # 59 59 ################################################################# 60 DEFINES = 60 DEFINES = EXCLUDE_FROM_XTIDECFG 61 61 DEFINES_XT = ELIMINATE_CGA_SNOW 62 62 DEFINES_XTPLUS = USE_186 ELIMINATE_CGA_SNOW
Note:
See TracChangeset
for help on using the changeset viewer.