home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG016P.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-04-17  |  2.1 KB  |  82 lines

  1.  
  2. ;************************************************************************
  3. ; Clear memory according to the current mode                *
  4. ;************************************************************************
  5.  
  6.     PUBLIC    Clear_Screen
  7.  
  8. Clear_Table    DW    OFFSET    Clear_Col_Text        ;mode 0
  9.         DW    OFFSET    Clear_Col_Text        ;mode 1
  10.         DW    OFFSET    Clear_Col_Text        ;mode 2
  11.         DW    OFFSET    Clear_Col_Text        ;mode 3
  12.         DW    OFFSET    Clear_One_Plane     ;mode 4
  13.         DW    OFFSET    Clear_One_Plane     ;mode 5
  14.         DW    OFFSET    Clear_One_Plane     ;mode 6
  15.         DW    OFFSET    Clear_Mono_Text     ;mode 7
  16.         DW    OFFSET    Clear_All_Planes    ;mode 8
  17.         DW    OFFSET    Clear_All_Planes    ;mode 9
  18.         DW    OFFSET    Clear_All_Planes    ;mode a
  19.         DW    OFFSET    Clear_All_Planes    ;mode b
  20.         DW    OFFSET    Clear_All_Planes    ;mode c
  21.         DW    OFFSET    Clear_All_Planes    ;mode d
  22.         DW    OFFSET    Clear_All_Planes    ;mode e
  23.         DW    OFFSET    Clear_All_Planes    ;mode f
  24.         DW    OFFSET    Clear_All_Planes    ;mode 10
  25.  
  26. Clear_Screen    PROC FAR
  27.     PUSH    ES
  28.     PUSH    DI
  29.  
  30.     XOR    AX,AX            ;Point ES to segment zero
  31.     MOV    ES,AX
  32.     MOV    BL,ES:[BIOS_Mode]    ;Fetch current video mode
  33.     XOR    BH,BH
  34.     CMP    BX,10H
  35.     JA    Clear_Done
  36.     SHL    BX,1
  37.     JMP    Clear_Table[BX]     ;Select clear according to mode
  38.  
  39. Clear_Mono_Text:            ;Load constants for mode 7
  40.     MOV    CX,ES:[BIOS_Page_Size]
  41.     MOV    AX,0B000H
  42.     MOV    ES,AX
  43.     MOV    AX,0720H
  44.     JMP    Clear
  45.  
  46. Clear_Col_Text:             ;Load constants for modes 0-3
  47.     MOV    CX,ES:[BIOS_Page_Size]
  48.     MOV    AX,0B800H
  49.     MOV    ES,AX
  50.     MOV    AX,0720H
  51.     JMP    Clear
  52.  
  53. Clear_One_Plane:            ;Load constants for graphics modes
  54.     MOV    CX,ES:[BIOS_Page_Size]    ;4,5 and 6
  55.     MOV    AX,0B800H
  56.     MOV    ES,AX
  57.     MOV    AX,0
  58.     JMP    Clear
  59.  
  60. Clear_All_Planes:            ;Load constanst for all new graphics
  61.     MOV    CX,ES:[BIOS_Page_Size]    ;modes D,E,F,10
  62.     MOV    AX,0A000H
  63.     MOV    ES,AX
  64.     MOV    AX,0
  65.     MOV    DX,3C4H         ;Address of Sequencer
  66.     MOV    AL,2            ;Index for PLANE ENABLE register
  67.     OUT    DX,AL            ;Select register
  68.     INC    DX
  69.     MOV    AL,0FH            ;Fetch value to enable all 4 planes
  70.     OUT    DX,AL            ;Set PLANE ENABLE register
  71.     MOV    AX,0
  72.     JMP    Clear
  73.  
  74. Clear:                    ;Using pre-loaded constants
  75.     XOR    DI,DI            ;for segment, count, and value
  76.     REP    STOSW            ;clear the display memory
  77. Clear_Done:
  78.     POP    DI
  79.     POP    ES
  80.     RET
  81. Clear_Screen    ENDP
  82.