Changeset 48 in xtideuniversalbios
- Timestamp:
- Oct 8, 2010, 3:44:05 PM (14 years ago)
- google:author:
- aitotat
- Location:
- trunk/Assembly_Library
- Files:
-
- 2 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Inc/AssemblyLibrary.inc
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 2.7.2010 4 ; Last update : 16.9.20104 ; Last update : 8.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Common defines for all library functions. … … 12 12 %include "BiosData.inc" 13 13 %include "BiosFunctions.inc" 14 %include "CgaSnow.inc" 14 15 %include "Debug.inc" 15 16 %include "DosFunctions.inc" -
trunk/Assembly_Library/Inc/Display.inc
r45 r48 2 2 ; Project name : AssemblyLibrary 3 3 ; Created date : 25.6.2010 4 ; Last update : 28.9.20104 ; Last update : 6.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Defines for display library. … … 26 26 %elifidn %1, PopDisplayContext 27 27 call DisplayContext_Pop 28 %elifidn %1, PrepareOffScreenBufferInESBXtoESDI 29 call DisplayContext_PrepareOffScreenBufferInESBXtoESDI 28 30 %else 29 31 mov di, DISPLAY_LIB.%1 … … 37 39 .PushDisplayContext: 38 40 .PopDisplayContext: 41 .PrepareOffScreenBufferInESBXtoESDI: 39 42 .InitializeDisplayContext resb 2 40 43 … … 181 184 COLOR_TEXT_SEGMENT EQU 0B800h ; Text modes 0...3 (CGA+) 182 185 MONO_TEXT_SEGMENT EQU 0B000h ; Text mode 7 (MDA, Hercules) 186 187 OFFSET_TO_CGA_STATUS_REGISTER EQU 6 ; Base port 3D4h + 6 = 3DAh 188 CGA_STATUS_REGISTER EQU 3DAh 183 189 184 190 -
trunk/Assembly_Library/Inc/Menu.inc
r45 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 13.7.2010 4 ; Last update : 15.9.20104 ; Last update : 5.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Defines for Menu library. … … 35 35 call MenuInit_SetTitleHeightFromAL 36 36 37 %elifidn %1, GetHighlightedItemToAX 38 call MenuInit_GetHighlightedItemToAX 39 37 40 %elifidn %1, SetTotalItemsFromAX 38 41 call MenuInit_SetTotalItemsFromAX … … 60 63 61 64 .SetTitleHeightFromAL: 65 .ClearTitleArea resb 2 62 66 .RefreshTitle resb 2 63 67 68 .GetHighlightedItemToAX: 64 69 .HighlightItemFromAX resb 2 65 70 .SetTotalItemsFromAX: … … 67 72 68 73 .SetInformationHeightFromAL: 74 .ClearInformationArea resb 2 69 75 .RefreshInformation resb 2 70 76 … … 130 136 NO_ITEM_SELECTED EQU -1 131 137 NO_ITEM_HIGHLIGHTED EQU -1 138 NO_TIMEOUT_USED EQU 0 132 139 133 140 -
trunk/Assembly_Library/Inc/MenuEvents.inc
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 13.7.2010 4 ; Last update : 11.8.20104 ; Last update : 5.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Defines for Menu events send to the user. … … 49 49 50 50 ; Parameters: 51 ; None but cursor has been positioned to the beginning of first line 51 ; CX: Index of highlighted item 52 ; Cursor has been positioned to the beginning of first line 52 53 .RefreshTitle resb 2 53 54 .RefreshInformation resb 2 -
trunk/Assembly_Library/Src/AssemblyLibrary.asm
r45 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 15.9.2010 4 ; Last update : 29.9.20104 ; Last update : 8.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Assembly Library main file. This is the only file that … … 11 11 12 12 %ifdef INCLUDE_DISPLAY_LIBRARY 13 %include "CgaSnow.asm" 13 14 %include "Display.asm" 14 15 %include "DisplayCharOut.asm" -
trunk/Assembly_Library/Src/Display/DisplayCharOut.asm
r47 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 26.6.2010 4 ; Last update : 4.10.20104 ; Last update : 8.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for outputting characters to video memory. … … 11 11 ; Section containing code 12 12 SECTION .text 13 14 ;--------------------------------------------------------------------15 ; WAIT_RETRACE_IF_NECESSARY_THEN16 ; Parameters:17 ; AL: Character to output18 ; AH: Attribute to output (stosw only)19 ; DS: BDA segment (zero)20 ; ES:DI: Ptr to video memory where to output21 ; Returns:22 ; DI: Incremented for next character23 ; Corrupts registers:24 ; AX, DX25 ;--------------------------------------------------------------------26 %macro WAIT_RETRACE_IF_NECESSARY_THEN 127 %ifdef ELIMINATE_CGA_SNOW28 %ifidn %1, stosb29 call StosbWithoutCgaSnow30 %else31 call StoswWithoutCgaSnow32 %endif33 %else34 %1 ; STOSB or STOSW35 %endif36 %endmacro37 38 13 39 14 ;-------------------------------------------------------------------- … … 155 130 .BufferFull: 156 131 ret 157 158 159 ; STOSB and STOSW replacement functions to prevent CGA snow. These will slow160 ; drawing a lot so use them only if it is necessary to eliminate CGA snow.161 %ifdef ELIMINATE_CGA_SNOW162 163 OFFSET_TO_CGA_STATUS_REGISTER EQU 6 ; Base port 3D4h + 6 = 3DAh164 CGA_STATUS_REGISTER EQU 3DAh165 166 ;--------------------------------------------------------------------167 ; WAIT_UNTIL_SAFE_CGA_WRITE168 ; Parameters:169 ; DX: CGA Status Register Address (3DAh)170 ; Returns:171 ; Nothing172 ; Corrupts registers:173 ; AL174 ;--------------------------------------------------------------------175 %macro WAIT_UNTIL_SAFE_CGA_WRITE 0176 %%WaitUntilNotInRetrace:177 in al, dx178 shr al, 1 ; 1 = Bit 0: A 1 indicates that regen-buffer memory access can be179 ; made without interfering with the display. (H or V retrace)180 jc SHORT %%WaitUntilNotInRetrace181 %%WaitUntilNextRetraceStarts:182 in al, dx183 shr al, 1184 jnc SHORT %%WaitUntilNextRetraceStarts185 %endmacro186 187 ;--------------------------------------------------------------------188 ; StosbWithoutCgaSnow189 ; StoswWithoutCgaSnow190 ; Parameters:191 ; AL: Character to output192 ; AH: Attribute to output (StoswWithoutCgaSnow only)193 ; DS: BDA segment (zero)194 ; ES:DI: Ptr to video memory where to output195 ; Returns:196 ; DI: Incremented for next character197 ; Corrupts registers:198 ; AX, DX199 ;--------------------------------------------------------------------200 ALIGN JUMP_ALIGN201 StosbWithoutCgaSnow:202 call DisplayCharOut_LoadAndVerifyStatusRegisterFromBDA203 jne SHORT .StosbWithoutWaitSinceUnknownPort204 205 mov ah, al206 cli ; Interrupt request would mess up timing207 WAIT_UNTIL_SAFE_CGA_WRITE208 mov al, ah209 .StosbWithoutWaitSinceUnknownPort:210 stosb211 sti212 ret213 214 ALIGN JUMP_ALIGN215 StoswWithoutCgaSnow:216 push bx217 call DisplayCharOut_LoadAndVerifyStatusRegisterFromBDA218 jne SHORT .StoswWithoutWaitSinceUnknownPort219 220 xchg bx, ax221 cli ; Interrupt request would mess up timing222 WAIT_UNTIL_SAFE_CGA_WRITE223 xchg ax, bx224 .StoswWithoutWaitSinceUnknownPort:225 stosw226 pop bx227 sti228 ret229 230 231 ;--------------------------------------------------------------------232 ; DisplayCharOut_LoadAndVerifyStatusRegisterFromBDA233 ; Parameters:234 ; DS: BDA segment (zero)235 ; Returns:236 ; DX: CGA Status Register Address237 ; ZF: Set if CGA Base Port found in BDA238 ; Corrupts registers:239 ; Nothing240 ;--------------------------------------------------------------------241 ALIGN JUMP_ALIGN242 DisplayCharOut_LoadAndVerifyStatusRegisterFromBDA:243 mov dx, [BDA.wVidPort]244 add dl, OFFSET_TO_CGA_STATUS_REGISTER245 cmp dx, CGA_STATUS_REGISTER246 ret247 248 %endif ; ELIMINATE_CGA_SNOW -
trunk/Assembly_Library/Src/Display/DisplayContext.asm
r45 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 25.6.2010 4 ; Last update : 28.9.20104 ; Last update : 5.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for managing display context. … … 102 102 103 103 ;-------------------------------------------------------------------- 104 ; DisplayContext_PrepareOffScreenBufferInESBXtoESDI 105 ; Parameters: 106 ; BX:AX: Ptr to off screen buffer 107 ; Returns: 108 ; Nothing 109 ; Corrupts registers: 110 ; AX 111 ;-------------------------------------------------------------------- 112 ALIGN JUMP_ALIGN 113 DisplayContext_PrepareOffScreenBufferInESBXtoESDI: 114 push ds 115 116 LOAD_BDA_SEGMENT_TO ds, di 117 xchg ax, bx 118 mov bx, es 119 call DisplayContext_SetCharacterPointerFromBXAX ; ES:DI now has the pointer 120 121 mov bl, ATTRIBUTES_NOT_USED 122 mov ax, BUFFER_OUTPUT_WITH_CHAR_ONLY 123 call DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL 124 125 mov bx, di 126 pop ds 127 ret 128 129 130 ;-------------------------------------------------------------------- 104 131 ; DisplayContext_SynchronizeToHardware 105 132 ; Parameters: … … 123 150 ; DS: BDA segment (zero) 124 151 ; Returns: 125 ; ES:DI: Pointer that was in DX:AX152 ; ES:DI: Pointer that was in BX:AX 126 153 ; Corrupts registers: 127 154 ; AX -
trunk/Assembly_Library/Src/Display/DisplayFormat.asm
r47 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 29.6.2010 4 ; Last update : 4.10.20104 ; Last update : 8.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for displaying formatted strings. … … 220 220 dec di ; DI = Offset where to move last byte formatted 221 221 xchg bx, ax ; BX = BYTEs to prepend 222 call .Reverse MoveCXbytesFromESSItoESDI222 call .ReverseCopyCXbytesFromESSItoESDI 223 223 xchg ax, bx 224 224 call .ReversePrintAXspacesStartingFromESDI … … 231 231 232 232 ;-------------------------------------------------------------------- 233 ; .Reverse MoveCXbytesFromESSItoESDI234 ; Parameters: 235 ; CX: Number of bytes to move236 ; DS: BDA segment (zero) 237 ; ES:SI: Ptr to source in video RAM238 ; ES:DI: Ptr to destination in video RAM239 ; Returns: 240 ; DI: Offset to character preceeding string just moved233 ; .ReverseCopyCXbytesFromESSItoESDI 234 ; Parameters: 235 ; CX: Number of bytes to copy 236 ; DS: BDA segment (zero) 237 ; ES:SI: Ptr to old location 238 ; ES:DI: Ptr to new location 239 ; Returns: 240 ; DI: Updated to before last character copied 241 241 ; Corrupts registers: 242 242 ; AX, CX, DX, SI 243 243 ;-------------------------------------------------------------------- 244 244 ALIGN JUMP_ALIGN 245 .ReverseMoveCXbytesFromESSItoESDI: 246 %ifdef ELIMINATE_CGA_SNOW 247 call DisplayCharOut_LoadAndVerifyStatusRegisterFromBDA 248 je SHORT .WaitUntilReadyToMoveNextByte 249 %endif 250 245 .ReverseCopyCXbytesFromESSItoESDI: 246 test BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], FLG_CONTEXT_ATTRIBUTES 247 jz SHORT .CopyWithoutDisplayProcessing 248 249 WAIT_RETRACE_IF_NECESSARY_THEN rep movsb 250 dec di ; Point to preceeding character instead of attribute 251 ret 252 ALIGN JUMP_ALIGN 253 .CopyWithoutDisplayProcessing: 251 254 eSEG_STR rep, es, movsb 252 253 %ifdef ELIMINATE_CGA_SNOW254 jmp SHORT .AlignDIforFirstPreceedingSpace255 .WaitUntilReadyToMoveNextByte:256 cli ; Interrupt request would mess up timing257 WAIT_UNTIL_SAFE_CGA_WRITE258 .MovsbWithoutWaitSinceUnknownPort:259 eSEG es260 movsb261 sti262 loop .WaitUntilReadyToMoveNextByte263 %endif264 ; Fall to .AlignDIforFirstPreceedingSpace265 266 ;--------------------------------------------------------------------267 ; .AlignDIforFirstPreceedingSpace268 ; Parameters:269 ; DS: BDA segment (zero)270 ; ES:DI: Byte offset before last byte moved271 ; Returns:272 ; DI: Offset to space preceeding moved string273 ; Corrupts registers:274 ; AX275 ;--------------------------------------------------------------------276 ALIGN JUMP_ALIGN277 .AlignDIforFirstPreceedingSpace:278 mov al, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags]279 and ax, BYTE FLG_CONTEXT_ATTRIBUTES280 not ax281 and di, ax282 255 ret 283 256 -
trunk/Assembly_Library/Src/Display/DisplayPrint.asm
r44 r48 25 25 ; minimum number of characters. For example %8d would append spaces 26 26 ; after integer so that at least 8 characters would be printed. 27 ; 28 ; When placing '-' after number, then spaces will be used for prepending. 29 ; For example %8-d would prepend integer with spaces so that at least 30 ; 8 characters would be printed. 27 31 ; 28 32 ; DisplayPrint_FormattedNullTerminatedStringFromCSSI -
trunk/Assembly_Library/Src/Keyboard/Keyboard.asm
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 5.7.2010 4 ; Last update : 12.8.20104 ; Last update : 7.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for managing keyboard. … … 97 97 loop .GetCharacterFromUser 98 98 .PlayBellForRejectedCharacter: 99 cmp al, BS ; No bell for backspace 100 je SHORT .GetCharacterFromUser 99 101 call Keyboard_PlayBellForUnwantedKeystroke 100 102 jmp SHORT .GetCharacterFromUser … … 169 171 dec di 170 172 call Keyboard_PrintBackspace 173 mov al, BS ; Restore character 171 174 .RejectCharacter: 172 175 test al, al ; Clear ZF... … … 227 230 push di 228 231 CALL_DISPLAY_LIBRARY PrintCharacterFromAL 229 CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware 232 CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware ; Hardware cursor 230 233 pop di 231 234 ret -
trunk/Assembly_Library/Src/LibraryTests.asm
r46 r48 83 83 ret 84 84 .szMenuTitle: 85 db "First line for menu title.",CR,LF, 86 db "This is the second line.",NULL 85 db "Simple test program for Assembly Library. Can be used to find bugs.",NULL 87 86 88 87 ALIGN JUMP_ALIGN … … 97 96 .szInfoTitle: 98 97 db "Information line 1,",CR,LF, 99 db "Information line 2 ,",CR,LF,100 db "This is the last information line.",NULL98 db "Information line 2. ", 99 db "This comes (12) right after Information line 2.",NULL 101 100 102 101 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm
r46 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 6.8.2010 4 ; Last update : 1.10.20104 ; Last update : 7.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Common functions for many dialogs. … … 291 291 ALIGN JUMP_ALIGN 292 292 .RedrawDialogAreaAndWholeParentWindow: 293 push si 294 call MenuBorders_AdjustDisplayContextForDrawingBorders 295 pop si 293 296 mov al, SCREEN_BACKGROUND_ATTRIBUTE 294 297 CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL 295 call MenuLocation_GetTitleBordersTopLeftCoordinatesToAX296 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX297 298 mov ax, [bp+MENUINIT.wWidthAndHeight] 298 299 CALL_DISPLAY_LIBRARY ClearAreaWithHeightInAHandWidthInAL -
trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm
r46 r48 260 260 mov bx, di 261 261 CALL_DISPLAY_LIBRARY PushDisplayContext 262 263 xchg ax, bx 264 mov bx, es 265 CALL_DISPLAY_LIBRARY SetCharacterPointerFromBXAX 266 mov bl, ATTRIBUTES_NOT_USED 267 mov ax, BUFFER_OUTPUT_WITH_CHAR_ONLY 268 CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL 262 CALL_DISPLAY_LIBRARY PrepareOffScreenBufferInESBXtoESDI 269 263 270 264 call .FormatFileOrDirectoryToBufferFromDTAinDSSI 271 265 272 266 CALL_DISPLAY_LIBRARY GetCharacterPointerToBXAX 273 mov es, bx274 267 xchg bx, ax 275 268 CALL_DISPLAY_LIBRARY PopDisplayContext -
trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm
r45 r48 33 33 ; Nothing 34 34 ; Corrupts registers: 35 ; AX, BX, DX, SI, DI35 ; AX, BX, CX, DX, SI, DI 36 36 ;-------------------------------------------------------------------- 37 37 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/Menu.asm
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 3.8.2010 4 ; Last update : 15.9.20104 ; Last update : 7.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Menu Library functions for CALL_MENU_LIBRARY macro … … 46 46 47 47 ;at MENU_LIB.SetTitleHeightFromAL, dw MenuInit_SetTitleHeightFromAL ; Special case in CALL_MENU_LIBRARY 48 at MENU_LIB.ClearTitleArea, dw MenuText_ClearTitleArea 48 49 at MENU_LIB.RefreshTitle, dw MenuText_RefreshTitle 49 50 … … 53 54 54 55 ;at MENU_LIB.SetInformationHeightFromAL, dw MenuInit_SetInformationHeightFromAL ; Special case in CALL_MENU_LIBRARY 56 at MENU_LIB.ClearInformationArea, dw MenuText_ClearInformationArea 55 57 at MENU_LIB.RefreshInformation, dw MenuText_RefreshInformation 56 58 -
trunk/Assembly_Library/Src/Menu/MenuCharOut.asm
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 15.7.2010 4 ; Last update : 4.8.20104 ; Last update : 8.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Character out function for printing withing menu window. … … 29 29 ALIGN JUMP_ALIGN 30 30 .PrintCRandAdjustColumnToMenuBorders: 31 call DisplayCharOut_ TeletypeOutputWithAttribute31 call DisplayCharOut_BiosTeletypeOutput 32 32 xor ax, ax ; No offset, cursor to start of border 33 33 jmp SHORT SetCursorToNextMenuLine … … 35 35 36 36 ;-------------------------------------------------------------------- 37 ; MenuCharOut_MenuTextTeletypeOutputWithAttributeAndAutomaticLineChange 37 38 ; MenuCharOut_MenuTextTeletypeOutputWithAttribute 38 39 ; Parameters: … … 47 48 ;-------------------------------------------------------------------- 48 49 ALIGN JUMP_ALIGN 50 MenuCharOut_MenuTextTeletypeOutputWithAttributeAndAutomaticLineChange: 51 push di 52 push ax 53 mov al, DOUBLE_VERTICAL 54 add di, BYTE MENU_TEXT_COLUMN_OFFSET ; Border char comes after space 55 WAIT_RETRACE_IF_NECESSARY_THEN scasb 56 pop ax 57 pop di 58 je SHORT MovePartialWordToNewTextLineAndPrintCharacterFromAX 59 ; Fall to MenuCharOut_MenuTextTeletypeOutputWithAttribute 60 61 ALIGN JUMP_ALIGN 49 62 MenuCharOut_MenuTextTeletypeOutputWithAttribute: 50 63 cmp al, CR ; Carriage return? 51 je SHORT .PrintCRandAdjustColumnToMenuText64 je SHORT PrintCRfromALandAdjustColumnToMenuText 52 65 jmp DisplayCharOut_TeletypeOutputWithAttribute 53 66 54 ALIGN JUMP_ALIGN 55 .PrintCRandAdjustColumnToMenuText: 56 call DisplayCharOut_TeletypeOutputWithAttribute 67 68 ;-------------------------------------------------------------------- 69 ; MovePartialWordToNewTextLineAndPrintCharacterFromAX 70 ; Parameters: 71 ; AL: Character to output 72 ; AH: Attribute to output 73 ; DS: BDA segment (zero) 74 ; ES:DI: Ptr to end of text line in video memory 75 ; Returns: 76 ; DI: Incremented for next character 77 ; Corrupts registers: 78 ; AX, DX 79 ;-------------------------------------------------------------------- 80 ALIGN JUMP_ALIGN 81 MovePartialWordToNewTextLineAndPrintCharacterFromAX: 82 cmp al, ' ' 83 je SHORT .MoveCursorInDItoBeginningOfNextLine 84 push si 85 push cx 86 push ax 87 88 call .GetOffsetToPartialWordToSIandSizeToCX 89 call .MoveCursorInDItoBeginningOfNextLine 90 jcxz .NothingToMove 91 call .MovePartialWordFromPreviousLineInESSItoNewLineInESDIwithSizeInCX 92 .NothingToMove: 93 pop ax 94 pop cx 95 pop si 96 jmp DisplayCharOut_TeletypeOutputWithAttribute 97 98 ;-------------------------------------------------------------------- 99 ; .GetOffsetToPartialWordToSIandSizeToCX 100 ; Parameters: 101 ; ES:DI: Ptr to space before border character 102 ; Returns: 103 ; CX: Number of bytes that needs to be moved 104 ; ES:SI: Ptr to beginning of partial word that needs to be moved to new line 105 ; Corrupts registers: 106 ; Nothing 107 ;-------------------------------------------------------------------- 108 ALIGN JUMP_ALIGN 109 .GetOffsetToPartialWordToSIandSizeToCX: 110 xor cx, cx 111 mov si, di 112 ALIGN JUMP_ALIGN 113 .ScanNextCharacter: ; Space will always be found since one comes after border 114 dec si 115 dec si 116 cmp BYTE [es:si], ' ' 117 je SHORT .PartialWordFound 118 inc cx 119 jmp SHORT .ScanNextCharacter 120 ALIGN JUMP_ALIGN 121 .PartialWordFound: 122 inc si 123 inc si ; SI now points one past space 124 shl cx, 1 ; Characters to bytes 125 ret 126 127 ;-------------------------------------------------------------------- 128 ; .MovePartialWordFromPreviousLineInESSItoNewLineInESDIwithSizeInCX 129 ; Parameters: 130 ; CX: Number of bytes in partial word 131 ; DS: BDA segment (zero) 132 ; ES:SI: Ptr to partial word on previous line 133 ; ES:DI: Ptr to new empty line 134 ; Returns: 135 ; ES:DI: Ptr where to store next character 136 ; Corrupts registers: 137 ; AX, CX, DX, SI 138 ;-------------------------------------------------------------------- 139 ALIGN JUMP_ALIGN 140 .MovePartialWordFromPreviousLineInESSItoNewLineInESDIwithSizeInCX: 141 push si 142 push cx 143 WAIT_RETRACE_IF_NECESSARY_THEN rep movsb 144 pop cx 145 pop si 146 xchg di, si 147 shr cx, 1 ; Bytes to characters 148 mov al, ' ' 149 call DisplayPrint_RepeatCharacterFromALwithCountInCX 150 mov di, si 151 ret 152 153 ;-------------------------------------------------------------------- 154 ; .MoveCursorInDItoBeginningOfNextLine 155 ; Parameters: 156 ; DS: BDA segment (zero) 157 ; ES:DI: Ptr to cursor location 158 ; Returns: 159 ; ES:DI: Ptr to beginning of new line 160 ; Corrupts registers: 161 ; AX, DX 162 ;-------------------------------------------------------------------- 163 ALIGN JUMP_ALIGN 164 .MoveCursorInDItoBeginningOfNextLine: 165 mov al, LF 166 call DisplayCharOut_BiosTeletypeOutput 167 mov al, CR 168 ; Fall to PrintCRfromALandAdjustColumnToMenuText 169 170 171 ;-------------------------------------------------------------------- 172 ; PrintCRfromALandAdjustColumnToMenuText 173 ; Parameters: 174 ; AL: Character to output (CR) 175 ; DS: BDA segment (zero) 176 ; ES:DI: Ptr to video memory where to output 177 ; Returns: 178 ; DI: Incremented for next text line 179 ; Corrupts registers: 180 ; AX, DX 181 ;-------------------------------------------------------------------- 182 ALIGN JUMP_ALIGN 183 PrintCRfromALandAdjustColumnToMenuText: 184 call DisplayCharOut_BiosTeletypeOutput 57 185 mov al, MENU_TEXT_COLUMN_OFFSET ; Offset to start of text 58 186 ; Fall to SetCursorToNextMenuLine -
trunk/Assembly_Library/Src/Menu/MenuEvent.asm
r41 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 13.7.2010 4 ; Last update : 11.8.20104 ; Last update : 5.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for initializing menu system. … … 65 65 ; MenuEvent_RefreshInformation 66 66 ; Parameters 67 ; SS:BP: Ptr to MENU 67 68 ; Cursor will be positioned to beginning of window 68 69 ; Returns: … … 70 71 ; Cleared if event not processed 71 72 ; Corrupts registers: 72 ; AX, BX, DX73 ; AX, CX, BX, DX 73 74 ;-------------------------------------------------------------------- 74 75 ALIGN JUMP_ALIGN 75 76 MenuEvent_RefreshTitle: 76 77 mov bx, MENUEVENT.RefreshTitle 77 jmp SHORT MenuEvent_SendFromBX 78 jmp SHORT LoadHighlightedItemToCXandSendMessageFromBX 79 78 80 ALIGN JUMP_ALIGN 79 81 MenuEvent_RefreshInformation: 80 82 mov bx, MENUEVENT.RefreshInformation 83 LoadHighlightedItemToCXandSendMessageFromBX: 84 mov cx, [bp+MENU.wHighlightedItem] 81 85 jmp SHORT MenuEvent_SendFromBX 82 86 … … 86 90 ; Parameters 87 91 ; CX: Index of item to refresh 92 ; SS:BP: Ptr to MENU 88 93 ; Cursor has been positioned to the beginning of item line 89 94 ; Returns: … … 103 108 ; Parameters 104 109 ; CX: Index of item to highlight 110 ; SS:BP: Ptr to MENU 105 111 ; Returns: 106 112 ; Nothing … … 128 134 ; AL: ASCII character for the key 129 135 ; AH: Keyboard library scan code for the key 136 ; SS:BP: Ptr to MENU 130 137 ; Returns: 131 138 ; CF: Set if event processed … … 144 151 ; Parameters 145 152 ; CX: Index of selected item 153 ; SS:BP: Ptr to MENU 146 154 ; Returns: 147 155 ; CF: Set if event processed -
trunk/Assembly_Library/Src/Menu/MenuInit.asm
r46 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 13.7.2010 4 ; Last update : 1.10.20104 ; Last update : 5.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for initializing menu system. … … 113 113 jmp MenuScrollbars_MoveHighlightedItemByAX 114 114 115 ;-------------------------------------------------------------------- 116 ; MenuInit_GetHighlightedItemToAX 117 ; Parameters 118 ; SS:BP: Ptr to MENU 119 ; Returns: 120 ; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED 121 ; Corrupts registers: 122 ; Nothing 123 ;-------------------------------------------------------------------- 124 ALIGN JUMP_ALIGN 125 MenuInit_GetHighlightedItemToAX: 126 mov ax, [bp+MENU.wHighlightedItem] 127 ret 128 115 129 116 130 ;-------------------------------------------------------------------- -
trunk/Assembly_Library/Src/Menu/MenuText.asm
r45 r48 2 2 ; Project name : Assembly Library 3 3 ; Created date : 21.7.2010 4 ; Last update : 28.9.20104 ; Last update : 7.10.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for drawing menu texts by the user. … … 10 10 11 11 ;-------------------------------------------------------------------- 12 ; MenuText_ClearTitleArea 13 ; MenuText_ClearInformationArea 14 ; Parameters 15 ; SS:BP: Ptr to MENU 16 ; Returns: 17 ; Nothing 18 ; Corrupts registers: 19 ; AX, BX, CX, DX, SI, DI 20 ;-------------------------------------------------------------------- 21 ALIGN JUMP_ALIGN 22 MenuText_ClearTitleArea: 23 call PrepareToDrawTitleArea 24 mov cl, [bp+MENUINIT.bTitleLines] 25 jmp SHORT ClearCLlinesOfText 26 27 ALIGN JUMP_ALIGN 28 MenuText_ClearInformationArea: 29 call PrepareToDrawInformationArea 30 mov cl, [bp+MENUINIT.bInfoLines] 31 ClearCLlinesOfText: 32 mov al, [bp+MENUINIT.bWidth] 33 sub al, MENU_HORIZONTAL_BORDER_LINES+MENU_TEXT_COLUMN_OFFSET 34 mul cl 35 xchg cx, ax 36 mov al, ' ' 37 CALL_DISPLAY_LIBRARY PrintRepeatedCharacterFromALwithCountInCX 38 ret 39 40 41 ;-------------------------------------------------------------------- 12 42 ; MenuText_RefreshTitle 13 43 ; MenuText_RefreshInformation … … 17 47 ; Nothing 18 48 ; Corrupts registers: 19 ; AX, BX, DX, SI, DI49 ; AX, BX, CX, DX, SI, DI 20 50 ;-------------------------------------------------------------------- 21 51 ALIGN JUMP_ALIGN … … 23 53 cmp BYTE [bp+MENUINIT.bTitleLines], 0 24 54 jz SHORT NothingToRefresh 25 26 mov si, ATTRIBUTE_CHARS.cTitle 27 call AdjustDisplayContextForDrawingTexts 28 call MenuLocation_GetTitleTextTopLeftCoordinatesToAX 29 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 55 call PrepareToDrawTitleArea 30 56 jmp MenuEvent_RefreshTitle 31 57 … … 34 60 cmp BYTE [bp+MENUINIT.bInfoLines], 0 35 61 jz SHORT NothingToRefresh 36 62 call PrepareToDrawInformationArea 63 jmp MenuEvent_RefreshInformation 64 65 ;-------------------------------------------------------------------- 66 ; PrepareToDrawTitleArea 67 ; PrepareToDrawInformationArea 68 ; Parameters 69 ; SS:BP: Ptr to MENU 70 ; Returns: 71 ; Nothing 72 ; Corrupts registers: 73 ; AX, BX, DX, SI, DI 74 ;-------------------------------------------------------------------- 75 ALIGN JUMP_ALIGN 76 PrepareToDrawTitleArea: 77 mov si, ATTRIBUTE_CHARS.cTitle 78 mov ax, MenuCharOut_MenuTextTeletypeOutputWithAttributeAndAutomaticLineChange 79 call AdjustDisplayContextForDrawingTextsWithCharOutFunctionFromAX 80 call MenuLocation_GetTitleTextTopLeftCoordinatesToAX 81 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 82 ret 83 84 ALIGN JUMP_ALIGN 85 PrepareToDrawInformationArea: 37 86 mov si, ATTRIBUTE_CHARS.cInformation 38 call AdjustDisplayContextForDrawingTexts 87 mov ax, MenuCharOut_MenuTextTeletypeOutputWithAttributeAndAutomaticLineChange 88 call AdjustDisplayContextForDrawingTextsWithCharOutFunctionFromAX 39 89 call MenuLocation_GetInformationTextTopLeftCoordinatesToAX 40 90 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 41 jmp MenuEvent_RefreshInformation91 ret 42 92 43 93 … … 109 159 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 110 160 call .GetItemTextAttributeTypeToSIforItemInCX 111 jmp SHORT AdjustDisplayContextForDrawingTexts 161 mov ax, MenuCharOut_MenuTextTeletypeOutputWithAttribute 162 jmp SHORT AdjustDisplayContextForDrawingTextsWithCharOutFunctionFromAX 112 163 113 164 ;-------------------------------------------------------------------- … … 142 193 ; Nothing 143 194 ; Corrupts registers: 144 ; AX, DX, SI, DI195 ; AX, BX, DX, SI, DI 145 196 ;-------------------------------------------------------------------- 146 197 ALIGN JUMP_ALIGN … … 188 239 ; Nothing 189 240 ; Corrupts registers: 190 ; AX, DX, SI, DI241 ; AX, BX, DX, SI, DI 191 242 ;-------------------------------------------------------------------- 192 243 ALIGN JUMP_ALIGN … … 194 245 push cx 195 246 196 mov si, ATTRIBUTE_CHARS.cBordersAndBackground 197 call MenuAttribute_SetToDisplayContextFromTypeInSI 247 call MenuBorders_AdjustDisplayContextForDrawingBorders 198 248 199 249 mov ax, cx … … 211 261 212 262 ;-------------------------------------------------------------------- 213 ; AdjustDisplayContextForDrawingTexts 214 ; Parameters 263 ; AdjustDisplayContextForDrawingTextsWithCharOutFunctionFromAX 264 ; Parameters 265 ; AX: Character output function 215 266 ; SI: Attribute type (from ATTRIBUTE_CHARS) 216 267 ; SS:BP: Ptr to MENU … … 221 272 ;-------------------------------------------------------------------- 222 273 ALIGN JUMP_ALIGN 223 AdjustDisplayContextForDrawingTexts :274 AdjustDisplayContextForDrawingTextsWithCharOutFunctionFromAX: 224 275 mov bl, ATTRIBUTES_ARE_USED 225 mov ax, MenuCharOut_MenuTextTeletypeOutputWithAttribute226 276 CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL 227 277
Note:
See TracChangeset
for help on using the changeset viewer.