home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / emulate / fast_a_m.lha / Fast_A-Max_2.5 / Read_File.a < prev    next >
Text File  |  1991-04-18  |  2KB  |  65 lines

  1. ;ReadFile.a  written by John O'Leary, 90.4.18
  2.  
  3.  
  4.         SECTION    CODE
  5. _ReadFile:
  6.         XDEF    _ReadFile
  7.  
  8.         MOVEM.L    D0-D7/A0-A6,-(SP)    ;Save all registers
  9.  
  10.         MOVE.L    4,A6            ;AbsExecBase
  11.         LEA    DOS_NAME(PC),A1        ;library Name
  12.         MOVEQ    #0,D0            ;version
  13.         JSR    -$228(A6)        ;OpenLibrary
  14.         MOVE.L    D0,A6            ;DOSBase, don't bother to check
  15.  
  16.         LEA    FILE_NAME(PC),A1
  17.         MOVE.L    A1,D1
  18.         MOVE.L    #1005,D2        ;MODE_OLDFILE
  19.         JSR    -$1E(A6)        ;Open
  20.         TST.L    D0
  21.         BEQ.S    ERROR            ;couldn't open ROMs file
  22.         MOVE.L    D0,D7            ;save file handle in D7
  23.         MOVE.L    D0,D1
  24.         MOVE.L    64(SP),D2        ;buffer address on stack
  25.         MOVE.L    #4,D3            ;number bytes to read
  26.         JSR    -$2A(A6)        ;Read
  27.         CMP.L    #4,D0
  28.         BEQ.S    NOT_EMPTY
  29.         MOVE.L    D7,D1            ;file handle
  30.         JSR    -$24(A6)        ;Close
  31.         BRA.S    ERROR            ;empty ROMs file
  32. NOT_EMPTY:
  33.         MOVE.L    D2,A0            ;buffer
  34.         MOVE.L    (A0),D0            ;original return code
  35.         MOVE.L    D0,(SP)
  36.         SWAP    D0            ;D0.W = $69 or $75
  37.         MOVEQ    #2,D3
  38.         SWAP    D3            ;D3.L = $20000
  39.         CMP.W    #$69,D0
  40.         BNE    READ
  41.         LSR.L    #1,D3            ;D3.L = $10000
  42. READ:
  43.         MOVE.L    D3,D6            ;save ROM size in D6
  44.         MOVE.L    D7,D1            ;file handle
  45.         JSR    -$2A(A6)        ;Read
  46.         MOVE.L    D7,D1            ;file handle
  47.         MOVE.L    D0,D7            ;save number bytes read in D7
  48.         JSR    -$24(A6)        ;Close
  49.         CMP.L    D6,D7
  50.         BEQ.S    CLOSE_DOS        ;correct number bytes read
  51.  
  52. ERROR:        MOVE.L    #-13,(SP)        ;error return code
  53. CLOSE_DOS:    MOVE.L    A6,A1            ;DOSBase
  54.         MOVE.L    4,A6            ;AbsExecBase
  55.         JSR    -$19E(A6)        ;CloseLibrary
  56.  
  57.         MOVEM.L    (SP)+,D0-D7/A0-A6    ;restore regs., ret code --> D0
  58.         RTS
  59.  
  60. DOS_NAME:    DC.B    "dos.library",0
  61. FILE_NAME:    DC.B    "Mac ROMs",0
  62.         DC.B    "FastMax patch version 2, written by John O'Leary, 1991."
  63.  
  64.         END
  65.