home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG016.ASM < prev    next >
Assembly Source File  |  1988-04-10  |  3KB  |  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 NEAR
  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.