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