From da0299fc11263c63bf48d4d525718c2a58bec78a Mon Sep 17 00:00:00 2001 From: "Christian A. Weber" Date: Sat, 27 Jun 2020 02:17:36 +0200 Subject: ReadFile, WriteFile, LoadFile Copy-Paste von SysCDisk und CDisk in FileIO ausgelagert --- CDisk.S | 152 ++++++++-------------------------------------------------------- 1 file changed, 17 insertions(+), 135 deletions(-) (limited to 'CDisk.S') diff --git a/CDisk.S b/CDisk.S index fce2e0f..60c959e 100644 --- a/CDisk.S +++ b/CDisk.S @@ -34,6 +34,7 @@ ** 29-Dec-90 V3.24 Gecrunchte Files werden automatisch entcruncht ** ** 06-May-91 V4.00 Tada! Schreibroutine eingebaut ** ** 16-Apr-92 V4.01 PP_SAVEMARGIN added, PowerPacker jetzt 100% ** +** 27-Jun-20 V4.02 File-Routinen nach FileIO.S gegen CopyPasta ** ** ** ***************************************************************************** @@ -42,7 +43,6 @@ CRUNCH -;;DEBUG ;;LIGHTSHOW IFD DEBUG @@ -55,16 +55,17 @@ DERR_WRONGDISK: EQU $26 DERR_WRONGPRODUCT: EQU $27 ENDC -CUSTOMOFFSET: EQU $19BE INCLUDE "MyExec.i" INCLUDE "relcustom.i" - ;; INCLUDE "protcustom.i" INCLUDE "hardware/intbits.i" INCLUDE "hardware/cia.i" + + XREF ReplyPacket + IFD RAMVERSION XREF ProcessFFSPacket ; Für ramdrive.device ENDC @@ -73,13 +74,15 @@ CUSTOMOFFSET: EQU $19BE XREF PPDecrunch ENDC - XDEF InitDiskFunc ; Disk-System initialisieren - XDEF SetNoDiskHandlerFunc - XDEF ReadFileFunc ; 'Datei' lesen - XDEF LoadFileFunc ; Speicher reservieren & File lesen - XDEF LoadFastFileFunc ; FAST alloc & File lesen - XDEF WriteFileFunc ; 'Datei' schreiben - XDEF SendPacketFunc ; Asynchronen Lese-Request schicken + XDEF InitDiskFunc ; Disk-System initialisieren + XDEF SetNoDiskHandlerFunc ; Wird aufgerufen für Diskchange + + XDEF ProcessNextRequest ; Wird von SendPacket() aufgerufen + + IFND SYSTEM + XDEF GetD7A4A5 + ENDC + *************************************************************************** @@ -297,96 +300,6 @@ SetNoDiskHandlerFunc: rts -*************************************************************************** -** ** -** R E A D F I L E - Datei von Disk an angegebene Adresse laden ** -** ** -** Parameter : D0.L : DiskAdresse (Disk/Track/Offset) der Datei ** -** A0.L : Ladeadresse ** -** ** -** Resultat : nix ** -** ** -*************************************************************************** - -ReadFileFunc: movem.l d1/a0-a1,-(SP) - moveq #0|DPF_REPLYBYTE,d1 ; LESEN - bra.s APost ; Paket aufgeben - - -*************************************************************************** -** ** -** W R I T E F I L E - Existierende 'Datei' auf Disk überschreiben ** -** ** -** Parameter : D0.L : DiskAdresse (Disk/Track/Offset) der Datei ** -** A0.L : Adresse der Daten für das File ** -** ** -** Resultat : nix ** -** ** -*************************************************************************** - -WriteFileFunc: movem.l d1/a0-a1,-(SP) - move.b #DPF_WRITE|DPF_REPLYBYTE,d1 ; SCHREIBEN - bra.s APost ; Paket aufgeben - - -*************************************************************************** -** ** -** L O A D F I L E - Speicher reservieren, Datei von Disk lesen ** -** ** -** Parameter : D0.L : DiskAdresse (Disk/Track/Offset) der Datei ** -** ** -** Resultat : D0.L : Adresse des Files, 0 if error ** -** Z-Bit: gelöscht wenn OK, gesetzt wenn Error ** -** ** -*************************************************************************** - -LoadFileFunc: movem.l d1/a0-a1,-(SP) - moveq #DPF_REPLYBYTE|DPF_ALLOCMEM,d1 ; Packet Flags - bra.s APost ; Paket aufgeben - -LoadFastFileFunc: - movem.l d1/a0-a1,-(SP) - moveq #DPF_REPLYBYTE|DPF_ALLOCFASTMEM,d1 ; Packet Flags - ;; bra.s APost ; Paket aufgeben - - -APost: lea -dp_SIZEOF-2(SP),SP ; DiskPacket erstellen - move.l a0,dp_Address(SP) ; Ladeadresse eintragen - movea.l SP,a0 ; A0 : Packet - move.l d0,dp_FileName(a0) ; Dateinamen eintragen - lea dp_SIZEOF(SP),a1 ; A1 : End-Flag - clr.b (a1) ; löschen - move.l a1,dp_Reply(a0) - move.b d1,dp_Flags(a0) ; DPF_REPLYBYTE [|DPF_WRITE] usw. - bsr.s SendPacketFunc -1$: tst.b (a1) ; Warten bis File geladen/geschrieben - beq.s 1$ - move.l dp_Address(SP),d0 ; Resultat: Adresse - lea dp_SIZEOF+2(SP),SP ; DiskPacket freigeben - movem.l (SP)+,d1/a0-a1 - rts - - -*************************************************************************** -** ** -** S E N D P A C K E T - Asynchronen Read-Request aufgeben ** -** ** -** Parameter : A0.L : Zeiger auf struct DiskPacket ** -** ** -** Resultat : nix ** -** ** -*************************************************************************** - -SendPacketFunc: movem.l d7/a0-a1/a4-a5,-(SP) - bsr GetD7A4A5 ; Für ProcessNextRequest() - movea.l a0,a1 ; Packet - lea meb_DiskList(a6),a0 - jsr meb_AddTail(a6) ; Packet anhängen - bsr.s ProcessNextRequest ; System ankicken - movem.l (SP)+,d7/a0-a1/a4-a5 - rts - - *************************************************************************** *** Nächsten Request aus Diskliste verarbeiten @@ -410,7 +323,7 @@ ProcessNextRequest: movea.l meb_RAMDiskBase(a6),a1 ; Filename=RAM-Basis cmpi.l #FFSMAGIC,(a1) ; RAM-Disk in Ordnung ? beq.s 1$ ; ja ---> - MSG <"RAMDISK CORRUPT, A0=PACKET, A1=BASE"> + SMSG <"RAMDISK CORRUPT, PACKET=$%08lx, BASE=$%08lx">,a0,a1 1$: bsr ProcessFFSPacket ; Packet (A0) bearbeiten (FFS) bsr ReplyPacket ; Packet (A0) beantworten bra .EndProcReq ; ---> @@ -518,37 +431,6 @@ StartUnit: move.l d0,-(SP) move.l (SP)+,d0 rts -*************************************************************************** - - *** Packet (A0) beantworten - -ReplyPacket: movem.l a0-a2,-(SP) - movea.l a0,a2 ; A2 : Packet - - IFD CRUNCH - bclr.b #DPB_CRUNCHED,dp_Flags(a2) - beq.s 1$ - movea.l dp_Address(a2),a0 ; A0 : Start der gecrunchten Daten - move.l dp_FileSize(a2),d0 ; D0 : File-Länge gecruncht - move.l (a0),dp_FileSize(a2) ; Echte Länge für User - bsr PPDecrunch ; File decrunchen -1$: - ENDC - movea.l dp_Reply(a2),a1 ; A1 : User's Reply-Adresse - btst.b #DPB_REPLYHANDLER,dp_Flags(a2) - beq.s 2$ - movea.l a2,a0 ; A0 : Packet für User - jsr (a1) ; ReplyHandler aufrufen - bra.s 99$ ; ---> -2$: - btst.b #DPB_REPLYBYTE,dp_Flags(a2) - beq.s 3$ - st.b (a1) ; ReplyByte setzen - ;; bra.s 99$ ; ---> -3$: -99$: movem.l (SP)+,a0-a2 - rts - *************************************************************************** ** ** @@ -924,9 +806,9 @@ DoWaitDMA: .ReadError: IFD DEBUG - movea.l du_ActPacket(a3),a0 ; Für MSG - MSG <"Read Error D0=Error A0=Packet A2=MFM A3=Unit"> - ELSEIF + movea.l du_ActPacket(a3),a0 ; Für SMSG + SMSG <"Read Error %d, Packet=$%08lx MFM=$%08lx Unit=$%08lx">,d0,a0,a2,a3 + ELSE move.w #$fff,$dff180 ; Weiss=Failure ENDC clr.w du_DiskNumber(a3) ; Ungültige Diskette -- cgit v1.2.3