opt o+ **************************************************************************** * * * DiskToolLib V1.1 © 2000 by Testaware * * DiskToolLib V1.1 ® 19-01-00 by Volker Stepprath * * * **************************************************************************** * * * Editor: CygnusEd Professional Release II - from CygnusSoft Software * * Assembler: GenAm Macro Assembler Copyright © HiSoft 1985,8 Version 2.11D * * * **************************************************************************** * * * Besonderen Dank möchte ich den Autoren von 'AMIGA intern', 'Das große * * Floppybuch' sowie dem Programmierer der 'sample.library' für das Projekt * * Amiga ROM Kernel Reference Manual aussprechen! * * * **************************************************************************** SECTION code Output SYS:LIBS/disktool.library Incdir DevPac:Include/ Include devices/bootblock.i Include devices/trackdisk.i Include exec/exec_lib.i Include exec/types.i Include exec/initializers.i Include exec/libraries.i Include exec/lists.i Include exec/alerts.i Include exec/resident.i Include exec/memory.i Include libraries/dos.i Include libraries/dos_lib.i Include libraries/dosextens.i Include libraries/disktool.i VERSION equ 1 ;Version der Library REVISION equ 1 ;Überarbeitung der Library MYPRI equ 0 ;Priorität der Library FALSE MACRO moveq #0,\1 ENDM TRUE MACRO moveq #-1,\1 ENDM CALLSYS MACRO jsr _LVO\1(a6) ENDM XLIB MACRO XREF _LVO\1 ENDM GETDEV MACRO lea IOStdReq(pc),\1 mulu #IOTD_SIZE,\2 adda.l \2,\1 tst.l 14(\1) ENDM GETRMA MACRO move.l a0,-(sp) cmpi.l #DT_RESERVENUM,\1 bge.s 0$ lea Reserve(pc),a0 lsl.l #3,\1 move.l (a0,\1.l),\1 0$ move.l (sp)+,a0 ENDM ERROR MACRO move.l a0,-(sp) lea Error(pc),a0 move.l \1,(a0) move.l (sp)+,a0 ENDM IOERROR MACRO FALSE \1 move.b IO_ERROR(a1),\1 ERROR \1 tst.l \1 ENDM XREF _AbsExecBase XLIB OpenLibrary XLIB CloseLibrary XLIB Alert XLIB FreeMem XLIB Remove XLIB FindTask XLIB AddPort XLIB OpenDevice XLIB CloseDevice XLIB DoIO XLIB PutMsg XLIB WaitPort XLIB GetMsg ;Damit kein Absturz des Systems erfolgt, wenn die Library versehentlich als ;Programm geladen wird, stehen die beiden folgenden Befehle. Start FALSE D0 rts ;Die Resident-Struktur wird von der InitResident-Funktion benutzt, um die ;Library aufzubauen. Die Exec-Funktion InitResident wird von der Routine ;zum Laden einer Library aus der RAM-Library aufgerufen. RomTag dc.w RTC_MATCHWORD ;Code für Resident dc.l RomTag ;Zeiger auf den Anfang der Struktur dc.l EndCode ;Zeiger auf Ende der Struktur dc.b RTF_AUTOINIT ;Flag für automatischen Aufruf dc.b VERSION ;Version der Library dc.b NT_LIBRARY ;Typ der Resident-Struktur = Library dc.b MYPRI ;Priorität der Resident-Struktur dc.l LibName ;Zeiger auf den Namen der Library dc.l IDString ;Erläuterungs-String für Library dc.l InitTable ;Zeiger auf die Initialisierungstabelle LibName DTNAME IDString dc.b 'V1.1 (19-01-00) © by Volker Stepprath',13,10,0 dosName DOSNAME TrackName TD_NAME Error dc.l 0 MsgPort ds.b MP_SIZE IOStdReq ds.b IOTD_SIZE*NUMUNITS Reserve ds.l DT_RESERVENUM*2 cnop 0,4 ;Ende der Resident-Struktur ;Initialisierungstabelle, die von der InitResident-Funktion verwendet wird, ;um die entsprechenden Parameter an die MakeLibrary-Funktion zu übergeben. InitTable dc.l DiskToolBase_SIZEOF ;Größe der Library-Struktur dc.l funcTable ;Zeiger auf Tabelle Lib-Funktionen dc.l dataTable ;Zeiger auf Tabelle Init-Funktionen dc.l initRoutine ;Zeiger auf die eigene Erstell- ;Routine (Aufruf von MakeLibrary) funcTable dc.l Open dc.l Close dc.l Expunge dc.l Null ;Hier nun die Routinen der DiskToolLib 1.1 dc.l dtDriveAvail ;-30 dc.l dtDriveBusy ;-36 dc.l dtMotorOff ;-42 dc.l dtDiskInsert ;-48 dc.l dtDiskProtect ;-54 dc.l dtDiskChange ;-60 dc.l dtReadBlock ;-66 dc.l dtWriteBlock ;-72 dc.l dtReadTrack ;-78 dc.l dtWriteTrack ;-84 dc.l dtReadRaw ;-90 dc.l dtWriteRaw ;-96 dc.l dtQuickFormat ;-102 dc.l dtRenameDisk ;-108 dc.l dtBBInstall ;-114 dc.l dtBBCheckSum ;-120 dc.l dtMemReserve ;-126 dc.l dtMemErase ;-132 dc.l dtMemStart ;-138 dc.l dtMemLength ;-144 dc.l dtErrorNum ;-150 dc.l dtErrorMsg ;-156 dc.l -1 ;Endmarkierung ;Tabelle, die der Funktion InitStruct übergeben wird. dataTable INITBYTE LN_TYPE,NT_LIBRARY INITLONG LN_NAME,LibName INITBYTE LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED INITWORD LIB_VERSION,VERSION INITWORD LIB_REVISION,REVISION INITLONG LIB_IDSTRING,IDString dc.l 0 ;Die folgende Routine wird von der MakeLibrary-Funktion aufgerufen. Sie ;dient der Initialisierung weiterer Library-Einträge, die nicht über den ;DataTable erfolgen können. ;D0 <= Zeiger auf die Library-Struktur ;A0 <= Zeiger auf die Segmentliste der geladenen Library ;A6 <= Zeiger auf die Execbase ;D0 => Zeiger auf die Library-Struktur initRoutine move.l a5,-(sp) ;A5 retten movea.l d0,a5 ;Zeiger auf DiskToolLib move.l a6,dt_SysLib(a5) ;Zeiger auf ExecLib move.l a0,dt_SegList(a5) ;Segmentliste eintragen lea dosName(pc),a1 ;Zeiger auf DOS-Namen FALSE D0 ;Version ist uninteressant CALLSYS OpenLibrary move.l d0,dt_DosLib(a5) bne.s 1$ ;Ok, Lib gefunden ;DOS-Library konnte nicht geöffnet werden (Guru). ALERT AG_OpenLib!AO_DOSLib rts ;DiskToolLib 1.1 spezifische Initialisierungsroutine - Laufwerke anmelden. 1$ movem.l a0-a7/d0-d7,-(sp) suba.l a1,a1 CALLSYS FindTask lea MsgPort(pc),a0 move.l d0,16(a0) lea IOStdReq(pc),a1 move.l a1,d5 FALSE D6 2$ FALSE D1 move.l d6,d0 movea.l d5,a1 lea MsgPort(pc),a0 move.l a0,14(a1) lea TrackName(pc),a0 CALLSYS OpenDevice tst.l d0 bne.s 3$ addq.l #1,d6 cmpi.l #NUMUNITS,d6 beq.s 4$ addi.l #IOTD_SIZE,d5 bra.s 2$ 3$ movea.l d5,a0 ;Wenn Laufwerk nicht verfügbar, clr.l 14(a0) ;MsgPort = 0 für GETDEV (Macro) 4$ movem.l (sp)+,a0-a7/d0-d7 move.l a5,d0 move.l (sp)+,a5 rts ;Die folgende Routine wird von der Funktion OpenLibrary() aufgerufen, ;nachdem die Library vollständig erstellt wurde. ;A6 <= Zeiger auf die eigene Library-Struktur ;D0 => Zeiger auf die eigene Library-Struktur Open addq.w #1,LIB_OPENCNT(a6) ;Zähler für die Anzahl ;der Zugriffe erhöhrn bclr #LIBB_DELEXP,dt_Flags(a6) ;Flag für entfernen ;der Library (löschen) move.l a6,d0 ;Rückgabeparameter setzen rts ;Wenn die Library von einem Task nicht mehr gebraucht wird, so schließt er ;sie, um dem Betriebssytem die Möglichkeit zu geben, die unbenutzte Library ;aus dem System zu entfernen. Die Library wird erst entfernt, wenn die ;AllocMem-Funktion feststellt, daß nicht genügend Speicher zur Verfügung ;steht, und kein Task auf die Library zugreift. ;Es kann erzwungen werden, daß die Library entfernt wird, wenn vor dem ;Aufruf der CloseLibrary-Funktion das LIBB_DELEXP-Flag gesetzt wird. Close FALSE D0 ;Zeiger auf Segmentliste löschen subq.w #1,LIB_OPENCNT(a6) ;Zähler für Öffnung der Library -1 bne.s 1$ ;Library wird noch verwendet btst #LIBB_DELEXP,dt_Flags(a6) beq.s 1$ bsr.s Expunge 1$ rts ;Routine zum Entfernen der Library aus dem Speicher. ;A6 <= Zeiger auf Library ;D0 => Zeiger auf Segmentliste der geladenen Library Expunge movem.l d2/a5/a6,-(sp) ;Register retten movea.l a6,a5 ;Zeiger auf Library nach A5 move.l dt_SysLib(a5),a6 ;ExecBase nach A6 tst.w LIB_OPENCNT(a5) ;wird Library noch gebraucht ? beq.s 1$ ;Springe, wenn nicht gebraucht bset #LIBB_DELEXP,dt_Flags(a5) FALSE D0 bra.s Expunge_End 1$ move.l dt_SegList(a5),d2 movea.l a5,a1 CALLSYS Remove move.l dt_DosLib(a5),a1 CALLSYS CloseLibrary ;Hier alle Laufwerke abmelden (s.DiskToolLib 1.1 Initialisierung). moveq #NUMUNITS-1,d6 2$ move.l d6,d0 GETDEV A1,D0 beq.s 3$ CALLSYS CloseDevice 3$ dbra d6,2$ FALSE D0 movea.l a5,a1 move.w LIB_NEGSIZE(a5),d0 suba.l d0,a1 add.w LIB_POSSIZE(a5),d0 CALLSYS FreeMem move.l d2,d0 Expunge_End movem.l (sp)+,d2/a5/a6 rts Null FALSE D0 rts **************************************************************************** * Ab hier beginnen die DiskToolLib 1.1 Funktionen !!! * **************************************************************************** * -------------------------------------------------------------------------- * devbase = dtDriveAvail ( drive ) * D0 -30 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * ERGEBNIS: devbase = Adresse von IOStdReq des Laufwerks * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtDriveAvail movem.l a0-a7/d1-d7,-(sp) cmpi.l #NUMUNITS,d1 bge.s 1$ GETDEV A0,D1 beq.s 1$ ERROR #DTERR_OK move.l a0,d0 bra.s 2$ 1$ FALSE D0 ERROR #DTERR_DRIVENOTAVAIL 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * dtDriveBusy ( drive , argument ) * -36 D1 D2 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * argument = [0] für DriveBusyOff * [1] für DriveBusyOn * -------------------------------------------------------------------------- dtDriveBusy movem.l a0-a7/d0-d7,-(sp) cmpi.l #NUMUNITS,d1 bge 1$ move.l d1,d6 move.l d2,d7 movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A4,D1 beq 1$ lea 3$(pc),a0 addi.l #48,d6 move.b d6,2(a0) move.l a0,d1 move.l dt_DosLib(a5),a6 CALLSYS DeviceProc move.l d0,d6 beq 2$ suba.l a1,a1 move.l dt_SysLib(a5),a6 CALLSYS FindTask move.l d0,d5 addi.l #pr_MsgPort,d5 moveq #dp_SIZEOF,d0 move.l #MEMF_CLEAR,d1 CALLSYS AllocMem move.l d0,IO_DATA(a4) movea.l d0,a0 adda.l #sp_Pkt,a0 movea.l d0,a1 adda.l #sp_Msg,a1 move.l a0,LN_NAME(a1) move.l a1,dp_Link(a0) move.l d5,dp_Port(a0) move.l #ACTION_INHIBIT,dp_Type(a0) move.l d7,dp_Arg1(a0) movea.l d6,a0 CALLSYS PutMsg movea.l d5,a0 CALLSYS WaitPort movea.l d5,a0 CALLSYS GetMsg move.l IO_DATA(a4),a1 moveq #dp_SIZEOF,d0 CALLSYS FreeMem move.l dt_DosLib(a5),a6 moveq #25,d1 CALLSYS Delay ERROR #DTERR_OK bra.s 2$ 1$ ERROR #DTERR_DRIVENOTAVAIL 2$ movem.l (sp)+,a0-a7/d0-d7 rts 3$ dc.b 'DF0:',0 cnop 0,4 * -------------------------------------------------------------------------- * dtMotorOff ( drive ) * -42 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * -------------------------------------------------------------------------- dtMotorOff movem.l a0-a7/d0-d7,-(sp) cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ move.w #TD_MOTOR,IO_COMMAND(a1) clr.l IO_LENGTH(a1) CALLSYS DoIO move.w #TD_SEEK,IO_COMMAND(a1) clr.l IO_OFFSET(a1) CALLSYS DoIO IOERROR D0 bra.s 2$ 1$ ERROR #DTERR_DRIVENOTAVAIL 2$ movem.l (sp)+,a0-a7/d0-d7 rts * -------------------------------------------------------------------------- * status = dtDiskInsert ( drive ) * D0 -48 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * ERGEBNIS: status = [-1 TRUE] Disk ist eingelegt * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtDiskInsert movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ ERROR #DTERR_OK move.w #TD_CHANGESTATE,IO_COMMAND(a1) CALLSYS DoIO TRUE D0 tst.l IO_ACTUAL(a1) beq.s 2$ ERROR #TDERR_DiskChanged 1$ FALSE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * status = dtDiskProtect ( drive ) * D0 -54 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * ERGEBNIS: status = [-1 TRUE] Disk ist beschreibbar * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtDiskProtect movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ ERROR #DTERR_OK move.w #TD_PROTSTATUS,IO_COMMAND(a1) CALLSYS DoIO TRUE D0 tst.l IO_ACTUAL(a1) beq.s 2$ ERROR #TDERR_WriteProt 1$ FALSE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * change = dtDiskChange ( drive ) * D0 -60 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * ERGEBNIS: change = Anzahl der Diskwechsel * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtDiskChange movem.l a0-a7/d1-d7,-(sp) cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ ERROR #DTERR_OK move.w #TD_CHANGENUM,IO_COMMAND(a1) CALLSYS DoIO move.l IO_ACTUAL(a1),d0 lsr.l #1,d0 addq.l #1,d0 bra.s 2$ 1$ FALSE D0 ERROR #DTERR_DRIVENOTAVAIL 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtReadBlock ( drive , startblk , numblk , memadr ) * D0 -66 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * startblk = Blocknr. von wo ab gelesen wird * numblk = Blockanzahl die gelesen werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtReadBlock movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ move.l #TD_SECTOR,d0 ;Offset & Length × 512 mulu d0,d2 mulu d0,d3 GETRMA D4 ;MRnum oder Adresse in D4 move.w #CMD_READ,IO_COMMAND(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtWriteBlock ( drive , startblk , numblk , memadr ) * D0 -72 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * startblk = Blocknr. von wo ab geschrieben wird * numblk = Blockanzahl die geschrieben werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtWriteBlock movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ move.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ move.l #TD_SECTOR,d0 ; × 512 mulu d0,d2 mulu d0,d3 GETRMA D4 move.w #CMD_WRITE,IO_COMMAND(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 bne.s 1$ move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtReadTrack ( drive , starttrk , numtrk , memadr ) * D0 -78 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * starttrk = Tracknr. von wo ab gelesen wird * numtrk = Tracks die gelesen werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtReadTrack movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ move.l #TD_SECTOR*NUMSECS,d0 ;Offset & Length × 5632 mulu d0,d2 mulu d0,d3 GETRMA D4 move.w #CMD_READ,IO_COMMAND(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L d0 rts * -------------------------------------------------------------------------- * result = dtWriteTrack ( drive , starttrk , numtrk , memadr ) * D0 -84 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * starttrk = Tracknr. von wo ab gelesen wird * numtrk = Tracks die gelesen werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtWriteTrack movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ move.l #TD_SECTOR*NUMSECS,d0 mulu d0,d2 mulu d0,d3 GETRMA D4 move.w #TD_FORMAT,IO_COMMAND(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtReadRaw ( drive , starttrk , bytes , memadr ) * D0 -90 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * starttrk = Tracknr. von wo ab gelesen wird * bytes = Bytes die gelesen werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtReadRaw movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ GETRMA D4 move.w #TD_RAWREAD,IO_COMMAND(a1) move.b #IOTDF_INDEXSYNC,IO_FLAGS(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtWriteRaw ( drive , starttrk , bytes , memadr ) * D0 -96 D1 D2 D3 D4 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * startblk = Tracknr. von wo ab gelesen wird * bytes = Bytes die gelesen werden * memadr = Adresse/MRnum des Speichers * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtWriteRaw movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq.s 1$ GETRMA D4 move.w #TD_RAWWRITE,IO_COMMAND(a1) move.b #IOTDF_INDEXSYNC,IO_FLAGS(a1) move.l d2,IO_OFFSET(a1) move.l d3,IO_LENGTH(a1) move.l d4,IO_DATA(a1) CALLSYS DoIO IOERROR D0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtQuickFormat ( drive , diskname ) * D0 -102 D1 D2 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * diskname = Zeiger auf den neuen Disknamem + NULL Byte * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtQuickFormat movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq 1$ move.l d2,d6 ;DiskName => D6 ERROR #TDERR_DiskChanged move.w #TD_CHANGESTATE,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ ERROR #TDERR_WriteProt move.w #TD_PROTSTATUS,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ move.l a1,-(sp) move.l #TD_SECTOR*NUMHEADS,d0 move.l #MEMF_CHIP!MEMF_CLEAR,d1 CALLSYS AllocMem move.l (sp)+,a1 move.l d0,IO_DATA(a1) movea.l d0,a0 ;DOS0 BB installieren move.l #BBNAME_DOS,BB_ID(a0) ;DOS-Kennung move.w #CMD_WRITE,IO_COMMAND(a1) clr.l IO_OFFSET(a1) move.l #TD_SECTOR*BOOTSECTS,IO_LENGTH(a1) CALLSYS DoIO IOERROR D0 bne 1$ move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 bne 1$ move.l IO_DATA(a1),a0 ;BitMap als frei deklarieren adda.l #516,a0 moveq #54,d0 3$ move.l #$FFFFFFFF,(a0)+ dbra d0,3$ move.l IO_DATA(a1),a0 ;RootBuffer => A0 adda.l #$1B1,a0 FALSE D0 movea.l d6,a2 4$ move.b (a2)+,(a0)+ ;Disk-Name eintragen beq.s 5$ addq.b #1,d0 bra.s 4$ 5$ move.l IO_DATA(a1),a0 move.b d0,$1B0(a0) ;Länge des Disk-Names move.l #$2,(a0) move.b #$48,15(a0) move.w #$1,$13A(a0) move.w #$371,$13E(a0) move.b #$1,$1FF(a0) move.l #$C000C037,$200(a0) move.b #$3F,$272(a0) move.b #$3F,$2DC(a0) FALSE D0 ;RootBlock-CheckSum berechnen FALSE D1 movea.l a0,a2 move.w #$7F,d1 6$ sub.l (a2)+,d0 dbf d1,6$ move.l d0,20(a0) ;Check-Summe eintragen move.w #CMD_WRITE,IO_COMMAND(a1) move.l #$6E000,IO_OFFSET(a1) ;RootBlock = 880 × 512 move.l #TD_SECTOR*NUMHEADS,IO_LENGTH(a1) CALLSYS DoIO move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 move.w #TD_MOTOR,IO_COMMAND(a1) clr.l IO_LENGTH(a1) CALLSYS DoIO move.l IO_DATA(a1),a1 move.l #TD_SECTOR*NUMHEADS,d0 CALLSYS FreeMem lea Error(pc),a0 move.l (a0),d0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtRenameDisk ( drive , diskname ) * D0 -108 D1 D2 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * diskname = Zeiger auf den neuen Disknamem + NULL Byte * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtRenameDisk movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq 1$ move.l d2,d6 ;DiskName => D6 ERROR #TDERR_DiskChanged move.w #TD_CHANGESTATE,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ ERROR #TDERR_WriteProt move.w #TD_PROTSTATUS,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ move.l a1,-(sp) move.l #TD_SECTOR,d0 moveq #MEMF_CHIP,d1 CALLSYS AllocMem move.l (sp)+,a1 move.w #CMD_READ,IO_COMMAND(a1) move.l #$6E000,IO_OFFSET(a1) move.l #TD_SECTOR,IO_LENGTH(a1) move.l d0,IO_DATA(a1) CALLSYS DoIO IOERROR D0 bne 6$ ERROR #DTERR_BITMAPNOTGUILTY move.l IO_DATA(a1),a0 ;RootBuffer => A0 cmpi.l #-1,312(a0) ;BMFLAG - Bitmap ist OK? bne.s 6$ ;Bitmap ungültig, keine DOS-Disk adda.l #$1B1,a0 FALSE D0 movea.l d6,a2 3$ move.b (a2)+,(a0)+ ;Disk-Name eintragen beq.s 4$ addq.b #1,d0 bra.s 3$ 4$ move.l IO_DATA(a1),a0 move.b d0,$1B0(a0) ;Länge des Disk-Names FALSE D0 ;RootBlock-CheckSum berechnen FALSE D1 clr.l 20(a0) ;CheckSum löschen movea.l a0,a2 move.w #$7F,d1 5$ sub.l (a2)+,d0 dbf d1,5$ move.l d0,20(a0) ;CheckSum eintragen move.w #CMD_WRITE,IO_COMMAND(a1) move.l #$6E000,IO_OFFSET(a1) ;RootBlock = 880 × 512 move.l #TD_SECTOR,IO_LENGTH(a1) CALLSYS DoIO move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 6$ move.w #TD_MOTOR,IO_COMMAND(a1) clr.l IO_LENGTH(a1) CALLSYS DoIO move.l IO_DATA(a1),a1 move.l #TD_SECTOR,d0 CALLSYS FreeMem lea Error(pc),a0 move.l (a0),d0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * result = dtBBInstall ( drive , bbtype ) * D0 -114 D1 D2 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * bbtype = Typ des BootBlocks [0-4] * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtBBInstall movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq 1$ ERROR #DTERR_ILLEGALBBTYPE cmpi.l #DT_BBTYPENUM,d2 bge 1$ move.l d2,d6 ;BBType => D6 ERROR #TDERR_DiskChanged move.w #TD_CHANGESTATE,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ ERROR #TDERR_WriteProt move.w #TD_PROTSTATUS,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ move.l a1,-(sp) move.l #TD_SECTOR*BOOTSECTS,d0 move.l #MEMF_CHIP!MEMF_CLEAR,d1 CALLSYS AllocMem move.l (sp)+,a1 move.l d0,IO_DATA(a1) move.l a1,-(sp) lea BOOT(pc),a0 lsl.l #2,d6 move.l (a0,d6.l),d1 ;Start move.l 4(a0,d6.l),d0 ;Finish sub.l d1,d0 ;Size movea.l d1,a0 move.l IO_DATA(a1),a1 ;Dest CALLSYS CopyMem move.l (sp)+,a1 move.w #CMD_WRITE,IO_COMMAND(a1) clr.l IO_OFFSET(a1) move.l #TD_SECTOR*BOOTSECTS,IO_LENGTH(a1) CALLSYS DoIO move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 move.w #TD_MOTOR,IO_COMMAND(a1) clr.l IO_LENGTH(a1) CALLSYS DoIO move.l IO_DATA(a1),a1 move.l #TD_SECTOR*BOOTSECTS,d0 CALLSYS FreeMem lea Error(pc),a0 move.l (a0),d0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts BOOT ;Tabelle für BB Adressen dc.l BB00,BB01,BB02,BB03,BB04,BB99 BB00 ;DOS Markierung BBID_DOS BB01 ;OS1.3 dc.l $444F5300,$C0200F19,$00000370,$43FA0018,$4EAEFFA0,$4A80670A dc.l $20402068,$00167000,$4E7570FF,$60FA646F,$732E6C69,$62726172 dc.l $79000000 BB02 ;OS2.0 dc.l $444F5300,$C6D52AD5,$00000370,$43FA0032,$70254EAE,$FDD84A80 dc.l $670C2240,$08E90006,$00224EAE,$FE6243FA,$002A4EAE,$FFA04A80 dc.l $670A2040,$20680016,$70004E75,$70FF4E75,$65787061,$6E73696F dc.l $6E2E6C69,$62726172,$7900646F,$732E6C69,$62726172,$79000000 BB03 ;OS3.0 dc.l $444F5303,$E33D0E70,$00000370,$43FA003E,$70254EAE,$FDD84A80 dc.l $670C2240,$08E90006,$00224EAE,$FE6243FA,$00184EAE,$FFA04A80 dc.l $670A2040,$20680016,$70004E75,$70FF4E75,$646F732E,$6C696272 dc.l $61727900,$65787061,$6E73696F,$6E2E6C69,$62726172,$79000000 BB04 ;Quartex Utility Boot dc.l $444F5300,$1C2238A9,$00000370,$48E7FF7E,$70026100,$022E7009 dc.l $42A90024,$6100023A,$41FA03CC,$22690014,$20A9003C,$22690038 dc.l $2F0943FA,$02B8303C,$4E20222E,$003E0481,$00080004,$6B043340 dc.l $001E4AAE,$004E6704,$3340000A,$43FA02B6,$207A0394,$41E80034 dc.l $4A986604,$33400008,$4A986604,$33400012,$4A986604,$3340001C dc.l $4AAE002A,$660C4AAE,$002E6606,$4AAE022A,$671A43FA,$03237020 dc.l $1340001A,$12C012BC,$004145FA,$02D424FC,$56495249,$43F90007 dc.l $80002449,$4299B3FC,$0007F000,$66F62C57,$33FC01A0,$00DFF096 dc.l $43FA01CE,$2D490032,$41F90007,$1000214A,$00087001,$223C0000 dc.l $0300243C,$00000100,$4EAEFE7A,$43F90007,$11004EAE,$FF3A43F9 dc.l $00071100,$237C0007,$10000004,$70014EAE,$FEAA4BFA,$01C87800 dc.l $7632181D,$672E610E,$06830000,$01806106,$4BED001F,$60E843F9 dc.l $00071100,$20032204,$4EAEFF10,$43F90007,$1100204D,$701F4EAE dc.l $FFC44E75,$33FC8380,$00DFF096,$283C000F,$F0002C78,$00045384 dc.l $670000B8,$43FA025A,$0C110041,$661243FA,$01663011,$02400F00 dc.l $06400100,$32805284,$4BF900BF,$E0010815,$00066700,$008E102D dc.l $0C00422D,$0C004600,$B03C00A0,$670000D4,$B03C00A2,$660A203C dc.l $00080000,$600000C8,$B03C00A4,$66164BF9,$00FC00D0,$42AE0026 dc.l $4EAEFFE2,$41F80002,$4E704ED0,$B03C00A6,$6738B03C,$00A86606 dc.l $4BFAFFEA,$60DEB03C,$00AA6756,$B03C00AC,$66040855,$0001B03C dc.l $00AE6612,$47FA020C,$32130841,$00053681,$33C100DF,$F1DC6000 dc.l $FF52207A,$01F241E8,$003470FF,$20C020C0,$20806112,$43FA01E6 dc.l $4EAEFFA0,$20402068,$00167000,$4E75205F,$588F4CDF,$7EFF2F08 dc.l $4E7561F2,$700541F9,$00050000,$610C7003,$61087004,$61046000 dc.l $FDCC41F9,$00030000,$23480028,$237C0000,$04000024,$42A9002C dc.l $3340001C,$4EAEFE38,$4E75202E,$003E204E,$4BF900FC,$02800C65 dc.l $21FC66FA,$99CC4DF8,$06762640,$43F900DF,$F096203C,$7FFF7FFF dc.l $22C022C0,$4EE8FFE2,$01002200,$01020001,$00920020,$009400D8 dc.l $008E3000,$009030FF,$00E00007,$00E28870,$00E40007,$00E688A0 dc.l $01860AAA,$01840EEE,$01820777,$01800002,$FFFFFFFE,$223C3C3C dc.l $3C3C3C20,$5554494C,$49545920,$424F4F54,$2056322E,$30203E3E dc.l $3E3E3E3E,$35464153,$544D454D,$3A4F4646,$20202020,$20203120 dc.l $4D454720,$43484950,$3A4F4646,$2C202044,$46313A4F,$46462020 dc.l $20444632,$3A4F4646,$20202044,$46333A4F,$46462020,$43463120 dc.l $46415354,$4D454D20,$4F464620,$46322043,$4849502F,$46415354 dc.l $204F4646,$4C463320,$414C4C20,$4D454D20,$4F4E2020,$4634204B dc.l $494C4C20,$44524956,$45532120,$55463520,$48415244,$20524553 dc.l $45542020,$46362049,$4E535441,$4C4C2042,$4F4F5420,$5E463720 dc.l $544F4747,$4C45204C,$45442020,$46382054,$4F472050,$414C2F4E dc.l $54534320,$6C20204E,$4F205649,$52555320,$48415320,$4245454E dc.l $20444554,$45435445,$44212020,$75424F4F,$54204259,$20204E2E dc.l $4F2E4D2E,$412E4420,$204F4620,$51554152,$54455821,$00000000 dc.l $00000000,$646F732E,$6C696272,$61727900 BB99 ;End of BootBlocks * -------------------------------------------------------------------------- * result = dtBBCheckSum ( drive ) * D0 -120 D1 * -------------------------------------------------------------------------- * PARAMS : drive = Disk-Laufwerksnummer [0-3] * ERGEBNIS: result = [0 FALSE] Alles OK * FEHLER : [-1 TRUE] * -------------------------------------------------------------------------- dtBBCheckSum movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_DRIVENOTAVAIL cmpi.l #NUMUNITS,d1 bge 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 GETDEV A1,D1 beq 1$ ERROR #TDERR_DiskChanged move.w #TD_CHANGESTATE,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ ERROR #TDERR_WriteProt move.w #TD_PROTSTATUS,IO_COMMAND(a1) CALLSYS DoIO tst.l IO_ACTUAL(a1) bne 1$ move.l a1,-(sp) move.l #TD_SECTOR*BOOTSECTS,d0 moveq #MEMF_CHIP,d1 CALLSYS AllocMem move.l (sp)+,a1 move.w #CMD_READ,IO_COMMAND(a1) clr.l IO_OFFSET(a1) move.l #TD_SECTOR*BOOTSECTS,IO_LENGTH(a1) move.l d0,IO_DATA(a1) CALLSYS DoIO IOERROR D0 bne.s 5$ move.l IO_DATA(a1),a0 clr.l 4(a0) move.w #$FF,d1 FALSE D0 3$ add.l (a0)+,d0 bcc.s 4$ addq.l #1,d0 4$ dbf d1,3$ not.l d0 move.l IO_DATA(a1),a0 move.l d0,BB_CHKSUM(a0) move.w #CMD_WRITE,IO_COMMAND(a1) clr.l IO_OFFSET(a1) move.l #TD_SECTOR*BOOTSECTS,IO_LENGTH(a1) move.l a0,IO_DATA(a1) CALLSYS DoIO move.w #CMD_UPDATE,IO_COMMAND(a1) CALLSYS DoIO IOERROR D0 5$ move.w #TD_MOTOR,IO_COMMAND(a1) clr.l IO_LENGTH(a1) CALLSYS DoIO move.l IO_DATA(a1),a1 move.l #TD_SECTOR*BOOTSECTS,d0 CALLSYS FreeMem lea Error(pc),a0 move.l (a0),d0 beq.s 2$ 1$ TRUE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * address = dtMemReserve ( mrnum , size ) * D0 -126 D1 D2 * -------------------------------------------------------------------------- * PARAMS : mrnum = Nummer des Speicherbereiches [0-9] * size = Größe in Bytes * ERGEBNIS: address = Adresse des Speicherbereiches * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtMemReserve movem.l a0-a7/d1-d7,-(sp) ERROR #DTERR_ILLEGALRESERVENUM cmpi.l #DT_RESERVENUM,d1 bge.s 1$ movea.l a6,a5 move.l dt_SysLib(a5),a6 lea Reserve(pc),a0 lsl.l #3,d1 adda.l d1,a0 move.l 4(a0),d0 ;MemLength bereits vorhanden ? beq.s 3$ ;JA also erst löschen movem.l a0/d2,-(sp) move.l (a0),a1 ;Adr. von bereits reserviertem Speicher CALLSYS FreeMem movem.l (sp)+,a0/d2 3$ move.l a0,-(sp) move.l d2,4(a0) move.l d2,d0 move.l #MEMF_CHIP!MEMF_CLEAR,d1 CALLSYS AllocMem move.l (sp)+,a0 move.l d0,(a0) ERROR #DTERR_OK tst.l d0 bne.s 2$ ERROR #DTERR_OUTOFCHIPMEM clr.l (a0) clr.l 4(a0) 1$ FALSE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * dtMemErase ( mrnum ) * -132 D1 * -------------------------------------------------------------------------- * PARAMS : mrnum = Nummer des Speicherbereiches [-1] oder [0-9]. * -------------------------------------------------------------------------- dtMemErase movem.l a0-a7/d0-d7,-(sp) ERROR #DTERR_ILLEGALRESERVENUM cmpi.l #DT_RESERVENUM,d1 bge.s 2$ ERROR #DTERR_OK movea.l a6,a5 move.l dt_SysLib(a5),a6 cmpi.l #DT_ERASEALL,d1 bne.s 1$ moveq #DT_RESERVENUM-1,d6 ;Erase All lea Reserve(pc),a0 3$ move.l (a0),a1 ;Adresse move.l 4(a0),d0 ;Bytes clr.l (a0)+ clr.l (a0)+ tst.l d0 beq.s 4$ ;Nicht belegt move.l a0,-(sp) CALLSYS FreeMem move.l (sp)+,a0 4$ dbra d6,3$ bra.s 2$ 1$ lea Reserve(pc),a0 lsl.l #3,d1 adda.l d1,a0 move.l 4(a0),d0 beq.s 2$ move.l (a0),a1 clr.l (a0) clr.l 4(a0) CALLSYS FreeMem 2$ movem.l (sp)+,a0-a7/d0-d7 rts * -------------------------------------------------------------------------- * address = dtMemStart ( mrnum ) * D0 -138 D1 * -------------------------------------------------------------------------- * PARAMS : mrnum = Nummer des Speicherbereiches [0-9] * ERGEBNIS: address = Adresse des Speicherbereiches * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtMemStart movem.l a0-a7/d1-d7,-(sp) cmpi.l #DT_RESERVENUM,d1 bge.s 1$ ERROR #DTERR_OK lea Reserve(pc),a0 lsl.l #3,d1 move.l (a0,d1.l),d0 bne.s 2$ 1$ ERROR #DTERR_ILLEGALRESERVENUM FALSE D0 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * size = dtMemLength ( mrnum ) * D0 -144 D1 * -------------------------------------------------------------------------- * PARAMS : mrnum = Nummer des Speicherbereiches [0-9] * ERGEBNIS: size = Größe in Bytes * FEHLER : [0 FALSE] * -------------------------------------------------------------------------- dtMemLength movem.l a0-a7/d1-d7,-(sp) cmpi.l #DT_RESERVENUM,d1 bge.s 1$ ERROR #DTERR_OK lea Reserve(pc),a0 lsl.l #3,d1 move.l 4(a0,d1.l),d0 bne.s 2$ 1$ FALSE D0 ERROR #DTERR_ILLEGALRESERVENUM 2$ movem.l (sp)+,a0-a7/d1-d7 TST.L D0 rts * -------------------------------------------------------------------------- * errnum = dtErrorNum * D0 -150 * -------------------------------------------------------------------------- * ERGEBNIS: errnum = Fehlernummer des letzten Funktionsaufruf * -------------------------------------------------------------------------- dtErrorNum movem.l a0-a7/d1-d7,-(sp) lea Error(pc),a0 move.l (a0),d0 movem.l (sp)+,a0-a7/d1-d7 TST.l D0 rts * -------------------------------------------------------------------------- * pointer = dtErrorMsg ( errnum ) * D0 -156 D1 * -------------------------------------------------------------------------- * PARAMS : errnum = Fehlernummer * ERGEBNIS: pointer = Zeiger auf den Fehlertext + NULL Byte * -------------------------------------------------------------------------- dtErrorMsg movem.l a0-a7/d1-d7,-(sp) cmpi.l #DTERR_OK,d1 blt.s 1$ lea DTERR(pc),a0 cmpi.l #DTERR_OUTOFCHIPMEM,d1 ble.s 3$ cmpi.l #TDERR_PostReset,d1 bgt.s 1$ lea TDERR(pc),a0 subi.l #TDERR_NotSpecified,d1 3$ lsl.l #2,d1 move.l (a0,d1.l),d0 bra.s 2$ 1$ lea ERR00(pc),a0 move.l a0,d0 2$ movem.l (sp)+,a0-a7/d1-d7 rts DTERR dc.l DTERR00,DTERR01,DTERR02,DTERR03,DTERR04 dc.l DTERR05 TDERR dc.l TDERR20,TDERR21,TDERR22,TDERR23,TDERR24 dc.l TDERR25,TDERR26,TDERR27,TDERR28,TDERR29 dc.l TDERR30,TDERR31,TDERR32,TDERR33,TDERR34 dc.l TDERR35 ERR00 dc.b 'Unknown error',0 DTERR00 dc.b 'OK',0 DTERR01 dc.b 'Drive not available',0 DTERR02 dc.b 'Bitmap not guilty',0 DTERR03 dc.b 'Illegal type of bootblock',0 DTERR04 dc.b 'Illegal reserved number',0 DTERR05 dc.b 'Out of chip memory',0 TDERR20 dc.b 'Not specified',0 TDERR21 dc.b 'No sector header',0 TDERR22 dc.b 'Bad sector preamble',0 TDERR23 dc.b 'Bad sector ID',0 TDERR24 dc.b 'Bad header checksum',0 TDERR25 dc.b 'Bad sector checksum',0 TDERR26 dc.b 'Too few sectors',0 TDERR27 dc.b 'Bad sector header',0 TDERR28 dc.b 'Disc is write protected',0 TDERR29 dc.b 'No disc in drive',0 TDERR30 dc.b 'Seek error',0 TDERR31 dc.b 'No memory',0 TDERR32 dc.b 'Bad unit number',0 TDERR33 dc.b 'Bad drive type',0 TDERR34 dc.b 'Drive in use',0 TDERR35 dc.b 'Post reset',0 cnop 0,4 **************************************************************************** * Ende der DiskToolLib 1.1 Funktionen !!! * **************************************************************************** EndCode END