summaryrefslogtreecommitdiff
path: root/CDisk.S
diff options
context:
space:
mode:
Diffstat (limited to 'CDisk.S')
-rw-r--r--CDisk.S152
1 files changed, 17 insertions, 135 deletions
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
+
***************************************************************************
@@ -298,96 +301,6 @@ SetNoDiskHandlerFunc:
***************************************************************************
-** **
-** 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