home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / DOCS / DOCS&CHAETSVolume1.dms / in.adf / HDSOURCE / File.Exe.S < prev    next >
Encoding:
Text File  |  1980-01-04  |  2.5 KB  |  149 lines

  1. ; File.Exe.S: Source for loading files.
  2. ;
  3. ;                                   Mars Bar
  4.  
  5.     Section    "LoaderCode",Code_F
  6.     Opt    C-
  7.  
  8. Execbase    =    4
  9. OpenLibrary    =    -408
  10. CloseLibrary    =    -414
  11.  
  12. Open        =    -30
  13. Close        =    -36
  14. Seek        =    -66
  15. Read        =    -42
  16.  
  17. Start:    Bsr    OpenDos
  18.     Bsr    SaveProperVbase
  19.  
  20. ; ----------------------------------------- Start Of Patching -----------
  21.  
  22. ; Before calling 'LoadFile', D4=Address Of FileName
  23. ;                 D3=Address To Load To
  24. ; Length of loaded file will be returned in LengthRead.
  25.  
  26. ; ----- End Of Patching -------------------------------------------------
  27.  
  28. OpenDos:Move.L    ExecBase,A6
  29.     Lea    Dosname,A1
  30.     Moveq.L    #0,D0
  31.     Jsr    OpenLibrary(A6)
  32.     Move.L    D0,DosBase
  33.     Rts
  34.  
  35. OpenFile:Move.L    DosBase,A6
  36.     Move.L    FileNamePointer,D1
  37.     Move.L    #1005,D2
  38.     Jsr    Open(A6)
  39.     Move.L    D0,FileBcpl
  40.     Rts
  41.  
  42. SaveProperVbase:
  43.     Movem.L    D0/A0-A1,-(Sp)
  44.     Lea    $0.L,A0
  45.     Lea    VBasePropDat,A1
  46.     Move.L    #$BF,D0
  47. .Loop:    Move.B    (A0)+,(A1)+
  48.     Dbra.W    D0,.Loop
  49.     Movem.L    (Sp)+,D0/A0-A1
  50.     Rts
  51.  
  52. RestoreProperVBase:
  53.     Movem.L    D0/A0-A1,-(Sp)
  54.     Lea    $0.L,A0
  55.     Lea    VbasePropDat,A1
  56.     Move.L    #$BF,D0
  57. .Loop:    Move.B    (A1)+,(A0)+
  58.     Dbra.W    D0,.Loop
  59.     Movem.L    (Sp)+,D0/A0-A1
  60.     Rts
  61.  
  62. SaveCurrentVbase:
  63.     Movem.L    D0/A0-A1,-(Sp)
  64.     Lea    $0.L,A0
  65.     Lea    VbasePresDat,A1
  66.     Move.L    #$BF,D0
  67. .Loop:    Move.B    (A0)+,(A1)+
  68.     Dbra.W    D0,.Loop
  69.     Movem.L    (Sp)+,D0/A0-A1
  70.     Rts
  71.  
  72. RestoreCurrentVbase:
  73.     Movem.L    D0/A0-A1,-(Sp)
  74.     Lea    $0.L,A0
  75.     Lea    VbasePresDat,A1
  76.     Move.L    #$BF,D0
  77. .Loop:    Move.B    (A1)+,(A0)+
  78.     Dbra.W    D0,.Loop
  79.     Movem.L    (Sp)+,D0/A0-A1
  80.     Rts
  81.  
  82. LoadFile:
  83.                     ; A3 = Address to load to
  84.                     ; D4 = Address of filename
  85.     Movem.L    D0-D7/A0-A6,-(Sp)
  86.     Move.L    D4,FileNamePointer
  87.     Move.L    A3,FileAddy
  88.  
  89.     Move.W    $Dff01C,OldInts
  90.     Move.W    $Dff01E,OldIntr
  91.     Or.W    #$8000,OldInts
  92.     Or.W    #$8000,OldIntr
  93.     Move.W    #$7FFF,$Dff09A
  94.     Move.W    #$7FFF,$DFF09C
  95.  
  96.     Bsr    SaveCurrentVbase
  97.     Bsr    RestoreProperVBase
  98.     Move.W    #$C008,$Dff09A
  99.  
  100.     Bsr    OpenFile
  101.  
  102.     Move.L    FileBCPL,D1
  103.     Move.L    FileAddy,D2
  104.     move.L    #1000000,D3
  105.     Jsr    Read(A6)
  106.     Move.L    D0,LengthRead        ; Save length of file read
  107.     Bsr    CloseFile
  108.  
  109.     Move.W    #$7FFF,$Dff09a
  110.     Move.W    #$7FFF,$Dff09c
  111.     Bsr    RestoreCurrentVbase
  112.     Move.W    OldInts,$Dff09A
  113.     Move.W    OldIntr,$Dff09C
  114.  
  115.     Movem.L    (Sp)+,D0-D7/A0-A6
  116.     Rts
  117.  
  118. CloseFile:
  119.     Move.L    DosBase,A6
  120.     Move.L    FileBCPL,D1
  121.     Jsr    Close(A6)
  122.     Rts
  123.  
  124. FileAddy:Dc.L    0
  125. DosName:Dc.B    'dos.library',0
  126.     Even
  127. DosBase:Dc.L    0
  128.  
  129. FileNamePointer:Dc.L    0
  130. FileBCPL:    Dc.L    0
  131.  
  132. FilePointers:
  133. Disk1BCPL:Dc.L    0
  134.  
  135. OldInts:Dc.W    0
  136. OldIntr:Dc.W    0
  137. OldDsk:Dc.W    0
  138. LengthRead:Dc.L    0
  139.  
  140. FileNames:
  141.     Dc.L    Disk1Name
  142.     Dc.L    0
  143. Disk1Name:Dc.b    'AFileName',0
  144.     Even
  145.  
  146.     Section    "BssData",BSS_F
  147. VBasePropDat:Ds.b    $C0
  148. VBasePresDat:Ds.b    $C0
  149.