home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG091P.ASM < prev   
Assembly Source File  |  1988-05-25  |  3KB  |  73 lines

  1.  
  2. ;************************************************************************
  3. ; Restore screen from a file PICTURE.001                                *
  4. ; Assumes default settings of EGA registers for modes E,F,10            *
  5. ;************************************************************************
  6.  
  7. Load_Name_Seg   EQU     [BP+8]
  8. Load_Name_Ofs    EQU    [BP+6]
  9. Load_Handle     DW      0
  10. Load_Counter    DB      0
  11.  
  12.         PUBLIC  Screen_Load
  13.  
  14. Screen_Load    PROC    FAR
  15.         PUSH    BP                      ;Standard high level entry
  16.         MOV     BP,SP
  17.         PUSH    DS                      ;Preserve DS
  18.  
  19.         ;--- Open the file
  20.  
  21.         MOV     DX,Load_Name_Ofs        ;Fetch pointer to the file name
  22.     MOV    DS,Load_Name_Seg
  23.         MOV     CX,0                    ;Normal attribute for the file
  24.         MOV     AH,3DH                  ;DOS function to open file
  25.         MOV     AL,0                    ;Open file for READ
  26.         INT     21H                     ;Ask DOS to open the file
  27.         JC      Load_Error              ;Quit on open error
  28.         MOV     CS:Load_Handle,AX       ;Save the handle to the opened file
  29.  
  30.         ;--- Enable next plane and read 28,000 bytes into it
  31.  
  32.         MOV     CS:Load_Counter,8       ;Initialize counter of planes done
  33.         MOV     AX,0A000H               ;Point DS:DX to display buffer
  34.         MOV     DS,AX
  35.         MOV     DX,3C4H                 ;Select PLANE ENABLE register
  36.         MOV     AL,2                    ;in SEQUENCER
  37.         OUT     DX,AL
  38. Load_Loop:
  39.         MOV     AL,CS:Load_Counter      ;Select next plane for write
  40.         MOV     DX,3C5H
  41.         OUT     DX,AL
  42.         XOR     DX,DX
  43.         MOV     CX,28000                ;Number of bytes to read
  44.         MOV     BX,CS:Load_Handle       ;File handle
  45.         MOV     AH,3FH                  ;DOS function to read from a file
  46.         INT     21H                     ;Ask DOS to read data from a file
  47.         JC      Close_Load_File         ;Quit on error
  48.         CMP     AX,28000
  49.         JNE     Close_Load_File
  50.         SHR     CS:Load_Counter,1       ;Check if all planes are done
  51.         JNZ     Load_Loop               ;and if not go do next plane
  52.  
  53.         ;--- Close the file
  54.  
  55. Close_Load_File:
  56.         MOV     BX,CS:Load_Handle       ;Fetch handle
  57.         MOV     AH,3EH                  ;DOS function to close a file
  58.         INT     21H                     ;Ask DOS to close the file
  59. Load_Done:
  60.         MOV     DX,3C4H                 ;Restore all four planes for write
  61.         MOV     AL,2                    ;By loading PLANE ENABLE register
  62.         OUT     DX,AL                   ;in the SEQUENCER
  63.         INC     DX
  64.         MOV     AL,0FH
  65.         OUT     DX,AL
  66.  
  67.         POP     DS                      ;Restore DS
  68.         POP     BP
  69.         RET    4
  70. Load_Error:                             ;This is where we can add error
  71.         JMP     Load_Done               ;reporting
  72. Screen_Load    ENDP
  73.