home *** CD-ROM | disk | FTP | other *** search
- ; File.Exe.S: Source for loading files.
- ;
- ; Mars Bar
-
- Section "LoaderCode",Code_F
- Opt C-
-
- Execbase = 4
- OpenLibrary = -408
- CloseLibrary = -414
-
- Open = -30
- Close = -36
- Seek = -66
- Read = -42
-
- Start: Bsr OpenDos
- Bsr SaveProperVbase
-
- ; ----------------------------------------- Start Of Patching -----------
-
- ; Before calling 'LoadFile', D4=Address Of FileName
- ; D3=Address To Load To
- ; Length of loaded file will be returned in LengthRead.
-
- ; ----- End Of Patching -------------------------------------------------
-
- OpenDos:Move.L ExecBase,A6
- Lea Dosname,A1
- Moveq.L #0,D0
- Jsr OpenLibrary(A6)
- Move.L D0,DosBase
- Rts
-
- OpenFile:Move.L DosBase,A6
- Move.L FileNamePointer,D1
- Move.L #1005,D2
- Jsr Open(A6)
- Move.L D0,FileBcpl
- Rts
-
- SaveProperVbase:
- Movem.L D0/A0-A1,-(Sp)
- Lea $0.L,A0
- Lea VBasePropDat,A1
- Move.L #$BF,D0
- .Loop: Move.B (A0)+,(A1)+
- Dbra.W D0,.Loop
- Movem.L (Sp)+,D0/A0-A1
- Rts
-
- RestoreProperVBase:
- Movem.L D0/A0-A1,-(Sp)
- Lea $0.L,A0
- Lea VbasePropDat,A1
- Move.L #$BF,D0
- .Loop: Move.B (A1)+,(A0)+
- Dbra.W D0,.Loop
- Movem.L (Sp)+,D0/A0-A1
- Rts
-
- SaveCurrentVbase:
- Movem.L D0/A0-A1,-(Sp)
- Lea $0.L,A0
- Lea VbasePresDat,A1
- Move.L #$BF,D0
- .Loop: Move.B (A0)+,(A1)+
- Dbra.W D0,.Loop
- Movem.L (Sp)+,D0/A0-A1
- Rts
-
- RestoreCurrentVbase:
- Movem.L D0/A0-A1,-(Sp)
- Lea $0.L,A0
- Lea VbasePresDat,A1
- Move.L #$BF,D0
- .Loop: Move.B (A1)+,(A0)+
- Dbra.W D0,.Loop
- Movem.L (Sp)+,D0/A0-A1
- Rts
-
- LoadFile:
- ; A3 = Address to load to
- ; D4 = Address of filename
- Movem.L D0-D7/A0-A6,-(Sp)
- Move.L D4,FileNamePointer
- Move.L A3,FileAddy
-
- Move.W $Dff01C,OldInts
- Move.W $Dff01E,OldIntr
- Or.W #$8000,OldInts
- Or.W #$8000,OldIntr
- Move.W #$7FFF,$Dff09A
- Move.W #$7FFF,$DFF09C
-
- Bsr SaveCurrentVbase
- Bsr RestoreProperVBase
- Move.W #$C008,$Dff09A
-
- Bsr OpenFile
-
- Move.L FileBCPL,D1
- Move.L FileAddy,D2
- move.L #1000000,D3
- Jsr Read(A6)
- Move.L D0,LengthRead ; Save length of file read
- Bsr CloseFile
-
- Move.W #$7FFF,$Dff09a
- Move.W #$7FFF,$Dff09c
- Bsr RestoreCurrentVbase
- Move.W OldInts,$Dff09A
- Move.W OldIntr,$Dff09C
-
- Movem.L (Sp)+,D0-D7/A0-A6
- Rts
-
- CloseFile:
- Move.L DosBase,A6
- Move.L FileBCPL,D1
- Jsr Close(A6)
- Rts
-
- FileAddy:Dc.L 0
- DosName:Dc.B 'dos.library',0
- Even
- DosBase:Dc.L 0
-
- FileNamePointer:Dc.L 0
- FileBCPL: Dc.L 0
-
- FilePointers:
- Disk1BCPL:Dc.L 0
-
- OldInts:Dc.W 0
- OldIntr:Dc.W 0
- OldDsk:Dc.W 0
- LengthRead:Dc.L 0
-
- FileNames:
- Dc.L Disk1Name
- Dc.L 0
- Disk1Name:Dc.b 'AFileName',0
- Even
-
- Section "BssData",BSS_F
- VBasePropDat:Ds.b $C0
- VBasePresDat:Ds.b $C0
-