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

  1.  
  2. ;***********************************************************************
  3. ; Save current screen into a file PICTURE.001                          *
  4. ; Assumes default settings of EGA registers for modes E,F,10           *
  5. ;***********************************************************************
  6.  
  7. Save_Name        DB      'PICTURE.000',0
  8. Save_Handle      DW      0
  9. Save_Counter     DB      0
  10.  
  11.         PUBLIC  _Screen_Dump
  12.  
  13. _Screen_Dump    PROC    NEAR
  14.         PUSH    DS                      ;Preserve DS
  15.  
  16.         ;--- Open next file (*.001 first time, *.002 next,  ...)
  17.  
  18.         MOV     AX,CS                   ;Setup pointer to file name
  19.         MOV     DS,AX                   ;into DS:DX
  20.  
  21.         INC     Save_Name[10]           ;Change name so that we can call
  22.                                         ;this routine several times
  23.         LEA     DX,Save_Name
  24.         MOV     CX,0                    ;Normal attribute for the file
  25.         MOV     AH,3CH                  ;DOS function to open file
  26.         INT     21H                     ;Ask DOS to open the file
  27.         JC      Dump_Error              ;Quit on open error
  28.         MOV     Save_Handle,AX          ;Save the handle to the opened file
  29.  
  30.         ;--- Enable next plane and write the 28,000 bytes into a file
  31.  
  32.         MOV     Save_Counter,3          ;Initialize counter of planes done
  33.         MOV     DX,3CEH                 ;Select READ MAP SELECT register
  34.         MOV     AL,4                    ;in graphics controller
  35.         OUT     DX,AL
  36.         MOV     AX,0A000H               ;Point DS:DX to display buffer
  37.         MOV     DS,AX
  38. Dump_Plane_Loop:
  39.         MOV     AL,CS:Save_Counter      ;Select next plane for read
  40.         MOV     DX,3CFH
  41.         OUT     DX,AL
  42.         XOR     DX,DX
  43.         MOV     CX,28000                ;Number of bytes to write
  44.         MOV     BX,CS:Save_Handle       ;File handle
  45.         MOV     AH,40H                  ;DOS function to write into a file
  46.         INT     21H                     ;Ask DOS to write data into a file
  47.         JC      Close_Dump_File         ;Quit on error
  48.         CMP     AX,28000
  49.         JNE     Close_Dump_File
  50.         DEC     CS:Save_Counter         ;Check if all planes are done
  51.         JGE     Dump_Plane_Loop ;and if not go do next plane
  52.  
  53.         ;--- Close the file
  54.  
  55. Close_Dump_File:
  56.         MOV     BX,CS:Save_Handle       ;Fetch handle
  57.         MOV     AH,3EH                  ;DOS function to close a file
  58.         INT     21H                     ;Ask DOS to close the file
  59. Dump_Done:
  60.         MOV     DX,3CEH                 ;Restore plane 0 for read by
  61.         MOV     AL,3                    ;setting READ MAP register
  62.         OUT     DX,AL                   ;in GRAPHICS controller
  63.         INC     DX
  64.         MOV     AL,0
  65.         OUT     DX,AL
  66.  
  67.         POP     DS                      ;Restore DS
  68.         RET
  69. Dump_Error:                             ;This is where we can add error
  70.         JMP     Dump_Done               ;reporting
  71. _Screen_Dump    ENDP
  72.