source: xtideuniversalbios/trunk/Assembly_Library/Inc/CgaSnow.inc @ 390

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

Changes to Assembly Library:
Completely rewritten line splitting (slower but no need to modify string).
Some changes to string processing functions.
Saved few bytes from CGA detection.

File size: 1.9 KB
Line 
1; File name     :   CgaSnow.inc
2; Project name  :   AssemblyLibrary
3; Created date  :   8.10.2010
4; Last update   :   11.10.2010
5; Author        :   Tomi Tilli
6; Description   :   Macros for preventing CGA snow.
7%ifndef CGASNOW_INC
8%define CGASNOW_INC
9
10;--------------------------------------------------------------------
11; WAIT_RETRACE_IF_NECESSARY_THEN
12;   Parameters:
13;       %1:     Instruction that accessed CGA memory
14;       AL:     Character to output
15;       AH:     Attribute to output (stosw only)
16;       DS:     BDA segment (zero)
17;       ES:SI:  Ptr to video memory where to read from (if %1 reads)
18;       ES:DI:  Ptr to video memory where to output (if %1 writes)
19;   Returns:
20;       SI, DI: Updated according to instruction
21;   Corrupts registers:
22;       AX, DX
23;--------------------------------------------------------------------
24%macro WAIT_RETRACE_IF_NECESSARY_THEN 1
25%ifdef ELIMINATE_CGA_SNOW
26    %ifidn %1, stosb
27        call    CgaSnow_Stosb
28    %elifidn %1, stosw
29        call    CgaSnow_Stosw
30    %elifidn %1, rep movsb
31        call    CgaSnow_RepMovsb
32    %else
33        %error  "Invalid instruction passed to WAIT_RETRACE_IF_NECESSARY_THEN"
34    %endif
35%else   ; No CGA snow prevention
36    %ifidn %1, rep movsb
37        eSEG_STR rep, es, movsb
38    %else
39        %1  ; Single instruction
40    %endif
41%endif
42%endmacro
43
44
45;--------------------------------------------------------------------
46; WAIT_UNTIL_SAFE_CGA_WRITE
47;   Parameters:
48;       DX:     CGA Status Register Address (3DAh)
49;   Returns:
50;       Nothing
51;   Corrupts registers:
52;       AL
53;--------------------------------------------------------------------
54%macro WAIT_UNTIL_SAFE_CGA_WRITE 0
55%%WaitUntilNotInRetrace:
56    in      al, dx
57    shr     al, 1   ; 1 = Bit 0: A 1 indicates that regen-buffer memory access can be
58                    ; made without interfering with the display. (H or V retrace)
59    jc      SHORT %%WaitUntilNotInRetrace
60%%WaitUntilNextRetraceStarts:
61    in      al, dx
62    shr     al, 1
63    jnc     SHORT %%WaitUntilNextRetraceStarts
64%endmacro
65
66
67%endif ; CGASNOW_INC
Note: See TracBrowser for help on using the repository browser.