Changeset 48 in xtideuniversalbios for trunk/Assembly_Library/Src/Display/DisplayFormat.asm
- Timestamp:
- Oct 8, 2010, 3:44:05 PM (15 years ago)
- google:author:
- aitotat
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.