home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG091.ASM < prev    next >
Assembly Source File  |  1988-05-15  |  3KB  |  71 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       EQU     [BP+4]
  8. Load_Handle     DW      0
  9. Load_Counter    DB      0
  10.  
  11.         PUBLIC  _Screen_Load
  12.  
  13. _Screen_Load    PROC    NEAR
  14.         PUSH    BP                      ;Standard high level entry
  15.         MOV     BP,SP
  16.         PUSH    DS                      ;Preserve DS
  17.  
  18.         ;--- Open the file
  19.  
  20.         MOV     DX,Load_Name            ;Fetch pointer to the file name
  21.         MOV     CX,0                    ;Normal attribute for the file
  22.         MOV     AH,3DH                  ;DOS function to open file
  23.         MOV     AL,0                    ;Open file for READ
  24.         INT     21H                     ;Ask DOS to open the file
  25.         JC      Load_Error              ;Quit on open error
  26.         MOV     Load_Handle,AX          ;Save the handle to the opened file
  27.  
  28.         ;--- Enable next plane and read 28,000 bytes into it
  29.  
  30.         MOV     Load_Counter,8          ;Initialize counter of planes done
  31.         MOV     AX,0A000H               ;Point DS:DX to display buffer
  32.         MOV     DS,AX
  33.         MOV     DX,3C4H                 ;Select PLANE ENABLE register
  34.         MOV     AL,2                    ;in SEQUENCER
  35.         OUT     DX,AL
  36. Load_Loop:
  37.         MOV     AL,CS:Load_Counter      ;Select next plane for write
  38.         MOV     DX,3C5H
  39.         OUT     DX,AL
  40.         XOR     DX,DX
  41.         MOV     CX,28000                ;Number of bytes to read
  42.         MOV     BX,CS:Load_Handle       ;File handle
  43.         MOV     AH,3FH                  ;DOS function to read from a file
  44.         INT     21H                     ;Ask DOS to read data from a file
  45.         JC      Close_Load_File         ;Quit on error
  46.         CMP     AX,28000
  47.         JNE     Close_Load_File
  48.         SHR     CS:Load_Counter,1       ;Check if all planes are done
  49.         JNZ     Load_Loop               ;and if not go do next plane
  50.  
  51.         ;--- Close the file
  52.  
  53. Close_Load_File:
  54.         MOV     BX,CS:Load_Handle       ;Fetch handle
  55.         MOV     AH,3EH                  ;DOS function to close a file
  56.         INT     21H                     ;Ask DOS to close the file
  57. Load_Done:
  58.         MOV     DX,3C4H                 ;Restore all four planes for write
  59.         MOV     AL,2                    ;By loading PLANE ENABLE register
  60.         OUT     DX,AL                   ;in the SEQUENCER
  61.         INC     DX
  62.         MOV     AL,0FH
  63.         OUT     DX,AL
  64.  
  65.         POP     DS                      ;Restore DS
  66.         POP     BP
  67.         RET
  68. Load_Error:                             ;This is where we can add error
  69.         JMP     Load_Done               ;reporting
  70. _Screen_Load    ENDP
  71.