IDNT SysCDisk SECTION text,CODE INCLUDE "MyExec.i" INCLUDE "exec/macros.i" INCLUDE "dos/dos.i" XREF _DOSBase,@CheckFile ;CRUNCH XREF _RawPrintfFunc XREF ReplyPacket IFD CRUNCH XREF PPDecrunch ENDC XDEF InitDiskFunc ; Disk-System initialisieren XDEF SetNoDiskHandlerFunc XDEF ProcessNextRequest ; Wird von SendPacket() aufgerufen *************************************************************************** ** ** ** I N I T D I S K - Disk-System init, Recalibrate, Timer alloc ... ** ** ** ** Parameter : nix ** ** ** *************************************************************************** InitDiskFunc: movem.l d0/a0,-(SP) clr.l InsertDiskRoutine *** DiskRequest-Liste initialisieren lea meb_DiskList(a6),a0 SYSJSR NewList movem.l (SP)+,d0/a0 rts *************************************************************************** ** ** ** S E T N O D I S K H A N D L E R - NoDisk-Handler setzen ** ** ** ** Parameter : A0.L: InsertDisk-Handler oder 0 ** ** ** *************************************************************************** SetNoDiskHandlerFunc: move.l a0,InsertDiskRoutine rts ************************************************************************** *** Nächsten Request aus Diskliste verarbeiten ProcessNextRequest: movem.l d0-d7/a0-a5,-(SP) lea meb_DiskList(a6),a0 jsr meb_RemHead(a6) ; setzt CCR beq .EndProcReq ; Kein Request pending ---> movea.l d0,a2 ; A2 : Aktuelles Packet IFD DEBUG moveq #0,d0 move.b dp_Flags(a2),d0 ; für SMSG SMSG <"Loading '%s' (flags=$%02lx) ... ">,dp_FileName(a2),d0 ENDC *** Packet bearbeiten movea.l a6,a5 ; A5 : MyExecBase movea.l dp_FileName(a2),a0 bsr @CheckFile move.l d0,d2 ; D2 : File-Länge bne 1$ ; OK --> SMSG <"'%s': file not found!">,dp_FileName(a2) bra .Error 1$: btst.b #DPB_ALLOCMEM,dp_Flags(a2) ; CHIP-Alloc gewünscht ? beq.s .NoChipAlloc ; nein ---> move.l d2,d0 ; File-Länge movea.l a5,a6 ; MyExecBase SYSJSR AllocMem bra.s .AllocCont ; ---> .NoChipAlloc: btst.b #DPB_ALLOCFASTMEM,dp_Flags(a2) ; FAST-Alloc gewünscht? beq.s .NoFastAlloc ; nein ---> move.l d2,d0 ; File-Länge movea.l a5,a6 ; MyExecBase SYSJSR AllocFastMem .AllocCont: move.l d0,dp_Address(a2) ; Adresse ins Packet .NoFastAlloc: move.l dp_FileName(a2),d1 move.l #MODE_OLDFILE,d2 movea.l _DOSBase,a6 JSRLIB Open move.l d0,d7 bne.s 2$ .Error: movea.l a5,a6 ; MyExecBase jmp meb_ColdReboot(a6) ; Raus hier! 2$: move.l d7,d1 move.l dp_Address(a2),d2 move.l #10000000,d3 JSRLIB Read SMSG <"Loaded %ld bytes at $%08lx">,d0,d2 move.l d7,d1 JSRLIB Close .DoReply movea.l a2,a0 movea.l a5,a6 ; MyExecBase bsr ReplyPacket ; Packet (A0) beantworten .EndProcReq: movem.l (SP)+,d0-d7/a0-a5 rts ************************************************************************** * D A T E N (auch im CODE-Segment wegen PC-relativ) * ************************************************************************** InsertDiskRoutine: ds.l 1 ; User's InsertDisk handler END