Changeset 50 in xtideuniversalbios for trunk/Assembly_Library/Src/Display/CgaSnow.asm


Ignore:
Timestamp:
Oct 9, 2010, 5:47:26 PM (14 years ago)
Author:
aitotat
google:author:
aitotat
Message:

Changes to Assembly Library:
Removed Memory_ExchangeSSBPwithESDI since it obviously corrupted stack.
CGA detection is now only done once when initializing Display Context.
Moved File Library defines to File.inc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Assembly_Library/Src/Display/CgaSnow.asm

    r49 r50  
    22; Project name  :   Assembly Library
    33; Created date  :   8.10.2010
    4 ; Last update   :   8.10.2010
     4; Last update   :   9.10.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Functions for preventing CGA snow.
     
    88; Section containing code
    99SECTION .text
     10
     11;--------------------------------------------------------------------
     12; CgaSnow_IsCgaPresent
     13;   Parameters:
     14;       DS:     BDA segment (zero)
     15;   Returns:
     16;       CF:     Set if CGA detected
     17;               Cleared if CGA not detected
     18;   Corrupts registers:
     19;       AX
     20;--------------------------------------------------------------------
     21ALIGN JUMP_ALIGN
     22CgaSnow_IsCgaPresent:
     23    cmp     WORD [BDA.wVidPort], CGA_STATUS_REGISTER - OFFSET_TO_CGA_STATUS_REGISTER
     24    jne     SHORT .CgaNotFound
     25    call    DisplayPage_GetColumnsToALandRowsToAH
     26    cmp     ah, [BDA.bVidRows]      ; Video rows stored only by EGA and later
     27    je      SHORT .CgaNotFound      ; Must be EGA or later
     28    stc
     29    ret
     30ALIGN JUMP_ALIGN
     31.CgaNotFound:
     32    clc
     33    ret
    1034
    1135
     
    2953ALIGN JUMP_ALIGN
    3054CgaSnow_Stosb:
    31     call    LoadAndVerifyStatusRegisterFromBDA
    32     jne     SHORT .StosbWithoutWaitSinceUnknownPort
     55    call    LoadCgaStatusRegisterAddressToDXifCgaPresent
     56    jz      SHORT .StosbWithoutWaitSinceUnknownPort
    3357
    3458    mov     ah, al
     
    4468CgaSnow_Stosw:
    4569    push    bx
    46     call    LoadAndVerifyStatusRegisterFromBDA
    47     jne     SHORT .StoswWithoutWaitSinceUnknownPort
     70    call    LoadCgaStatusRegisterAddressToDXifCgaPresent
     71    jz      SHORT .StoswWithoutWaitSinceUnknownPort
    4872
    4973    xchg    bx, ax
     
    7195ALIGN JUMP_ALIGN
    7296CgaSnow_Scasb:
    73     call    LoadAndVerifyStatusRegisterFromBDA
    74     jne     SHORT .ScasbWithoutWaitSinceUnknownPort
     97    call    LoadCgaStatusRegisterAddressToDXifCgaPresent
     98    jz      SHORT .ScasbWithoutWaitSinceUnknownPort
    7599
    76100    mov     ah, al
     
    98122ALIGN JUMP_ALIGN
    99123CgaSnow_RepMovsb:
    100     call    LoadAndVerifyStatusRegisterFromBDA
    101     jne     SHORT .RepMovsbWithoutWaitSinceUnknownPort
     124    call    LoadCgaStatusRegisterAddressToDXifCgaPresent
     125    jz      SHORT .RepMovsbWithoutWaitSinceUnknownPort
    102126
    103127.MovsbNextByte:
     
    115139
    116140;--------------------------------------------------------------------
    117 ; LoadAndVerifyStatusRegisterFromBDA
     141; LoadCgaStatusRegisterAddressToDXifCgaPresent
    118142;   Parameters:
    119143;       DS:     BDA segment (zero)
    120144;   Returns:
    121145;       DX:     CGA Status Register Address
    122 ;       ZF:     Set if CGA Base Port found in BDA
     146;       ZF:     Set if CGA not present
     147;               Cleared if CGA present
    123148;   Corrupts registers:
    124149;       Nothing
    125150;--------------------------------------------------------------------
    126151ALIGN JUMP_ALIGN
    127 LoadAndVerifyStatusRegisterFromBDA:
    128     mov     dx, [BDA.wVidPort]
    129     add     dl, OFFSET_TO_CGA_STATUS_REGISTER
    130     cmp     dx, CGA_STATUS_REGISTER
    131     je      SHORT .CheckIfEgaOrLater
    132     ret
    133 
    134 ALIGN JUMP_ALIGN
    135 .CheckIfEgaOrLater:
    136     push    ax
    137     call    DisplayPage_GetColumnsToALandRowsToAH
    138     cmp     ah, [BDA.bVidRows]      ; Video rows stored only by EGA and later
    139     lahf
    140     xor     ah, 1<<6                ; Invert ZF
    141     sahf
    142     pop     ax
     152LoadCgaStatusRegisterAddressToDXifCgaPresent:
     153    test    BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], FLG_CONTEXT_CGA
     154    jz      SHORT .NoCgaDetected
     155    mov     dx, CGA_STATUS_REGISTER
     156ALIGN JUMP_ALIGN, ret
     157.NoCgaDetected:
    143158    ret
    144159
Note: See TracChangeset for help on using the changeset viewer.