source: xtideuniversalbios/trunk/Assembly_Library/Src/Display/CgaSnow.asm @ 49

Last change on this file since 49 was 49, checked in by aitotat, 14 years ago

Changes to Assembly Library:
Small changes to function names in CgaSnow.asm.

File size: 3.6 KB
Line 
1; File name     :   CgaSnow.asm
2; Project name  :   Assembly Library
3; Created date  :   8.10.2010
4; Last update   :   8.10.2010
5; Author        :   Tomi Tilli
6; Description   :   Functions for preventing CGA snow.
7
8; Section containing code
9SECTION .text
10
11
12; CGA snow preventing must be kept optional so unnecerrasy overhead
13; can be prevented when building program ment for non-CGA systems.
14%ifdef ELIMINATE_CGA_SNOW
15
16;--------------------------------------------------------------------
17; CgaSnow_Stosb
18; CgaSnow_Stosw
19;   Parameters:
20;       AL:     Character to output
21;       AH:     Attribute to output (CgaSnow_StoswWithoutCgaSnow only)
22;       DS:     BDA segment (zero)
23;       ES:DI:  Ptr to video memory where to output
24;   Returns:
25;       DI:     Incremented for next character
26;   Corrupts registers:
27;       AX, DX
28;--------------------------------------------------------------------
29ALIGN JUMP_ALIGN
30CgaSnow_Stosb:
31    call    LoadAndVerifyStatusRegisterFromBDA
32    jne     SHORT .StosbWithoutWaitSinceUnknownPort
33
34    mov     ah, al
35    cli             ; Interrupt request would mess up timing
36    WAIT_UNTIL_SAFE_CGA_WRITE
37    mov     al, ah
38.StosbWithoutWaitSinceUnknownPort:
39    stosb
40    sti
41    ret
42
43ALIGN JUMP_ALIGN
44CgaSnow_Stosw:
45    push    bx
46    call    LoadAndVerifyStatusRegisterFromBDA
47    jne     SHORT .StoswWithoutWaitSinceUnknownPort
48
49    xchg    bx, ax
50    cli             ; Interrupt request would mess up timing
51    WAIT_UNTIL_SAFE_CGA_WRITE
52    xchg    ax, bx
53.StoswWithoutWaitSinceUnknownPort:
54    stosw
55    pop     bx
56    sti
57    ret
58
59
60;--------------------------------------------------------------------
61; CgaSnow_Scasb
62;   Parameters:
63;       AL:     Byte for comparison
64;       DS:     BDA segment (zero)
65;       ES:DI:  Ptr to video memory where to output
66;   Returns:
67;       DI:     Incremented for next character
68;   Corrupts registers:
69;       AX, DX
70;--------------------------------------------------------------------
71ALIGN JUMP_ALIGN
72CgaSnow_Scasb:
73    call    LoadAndVerifyStatusRegisterFromBDA
74    jne     SHORT .ScasbWithoutWaitSinceUnknownPort
75
76    mov     ah, al
77    cli             ; Interrupt request would mess up timing
78    WAIT_UNTIL_SAFE_CGA_WRITE
79    mov     al, ah
80.ScasbWithoutWaitSinceUnknownPort:
81    scasb
82    sti
83    ret
84
85
86;--------------------------------------------------------------------
87; CgaSnow_RepMovsb
88;   Parameters:
89;       CX:     Number of characters to copy
90;       DS:     BDA segment (zero)
91;       ES:SI:  Ptr to video memory where to read from
92;       ES:DI:  Ptr to video memory where to write to
93;   Returns:
94;       SI, DI: Updated for next character
95;   Corrupts registers:
96;       AX, CX, DX
97;--------------------------------------------------------------------
98ALIGN JUMP_ALIGN
99CgaSnow_RepMovsb:
100    call    LoadAndVerifyStatusRegisterFromBDA
101    jne     SHORT .RepMovsbWithoutWaitSinceUnknownPort
102
103.MovsbNextByte:
104    cli             ; Interrupt request would mess up timing
105    WAIT_UNTIL_SAFE_CGA_WRITE
106    eSEG    es
107    movsb
108    sti
109    loop    .MovsbNextByte
110    ret
111.RepMovsbWithoutWaitSinceUnknownPort:
112    eSEG_STR rep, es, movsb
113    ret
114
115
116;--------------------------------------------------------------------
117; LoadAndVerifyStatusRegisterFromBDA
118;   Parameters:
119;       DS:     BDA segment (zero)
120;   Returns:
121;       DX:     CGA Status Register Address
122;       ZF:     Set if CGA Base Port found in BDA
123;   Corrupts registers:
124;       Nothing
125;--------------------------------------------------------------------
126ALIGN JUMP_ALIGN
127LoadAndVerifyStatusRegisterFromBDA:
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
134ALIGN 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
143    ret
144
145
146%endif ; ELIMINATE_CGA_SNOW
Note: See TracBrowser for help on using the repository browser.