home *** CD-ROM | disk | FTP | other *** search
- opt l-
-
- *************************************************
- * Programm: EraseDisk *
- * Version: V0.69 *
- * Kickstart: 1.2/1.3 *
- * Sprache: Devpac Assembler *
- * Datum: 29.5.91 *
- * Autor: Otto Bernhart *
- * P.S: * erased Disk in beliebigen Laufw. *
- * * nur unter CLI *
- * Greetings: Elke, Nicole, Sabine, Peter, *
- * Sandra, Michi, Heiko, Heli, Mum, *
- * Dad, Karli, Pechti, Fam.Jurak, *
- * and all the pretty Girls out there.*
- *************************************************
-
- include df0:include/exec/exec_lib.i
- include df0:include/libraries/dos_lib.i
- include df0:include/intuition/intuition_lib.i
-
- * Parameter auswerten und Laufwerk in "Laufwerk" merken
-
- start1:
- movem.l d0-d7/a0-a6,-(a7) ; alle Register retten
- cmp.b #"?",(a0) ; ? gewählt ?
- bne.s start2 ; nein -> normaler Start
- moveq #1,d0
- move.l d0,merker ; ja in "merker" notieren
- start2:
- subq.w #1,d0
- beq.s parameterlos ; ohne Parameter = df0:
- suche:
- cmp.b #$20,(a0)
- bne.s erfolg
- addq #1,a0
- dbf d0,suche
- raus:
- tst.b merker ; "?" gewählt?
- bne OpenDos ; Ja -> bereite Ausgabe vor
- movem.l (a7)+,d0-d7/a0-a6
- moveq #0,d0 ; Kommentarlos
- rts ; raus weil falscher Kommentar
- erfolg:
- cmp.b #"d",(a0)
- beq.s gut
- cmp.b #"D",(a0)
- bne.s raus
- gut:
- addq.l #1,a0
- cmp.b #"f",(a0)
- beq.s gut2
- cmp.b #"F",(a0)
- bne.s raus
- gut2:
- addq #1,a0
- moveq #0,d7
- move.b (a0),d7
- cmp.b #$30,d7
- blo.s raus
- cmp.b #$33,d7
- bhi.s raus
- sub.b #$30,d7
- move.l d7,Laufwerk
- bra.s OpenDos ; Laufwerk in d7
- parameterlos:
- moveq #0,d0
- move.l d0,Laufwerk
-
- *************** Start des Hauptprogramms **************
-
- * Dos-Library öffnen
-
- OpenDos:
- movem.l (a7)+,d0-d7/a0-a6 ; Register zurückholen (wichtig)
- lea.l dosname,a1 ; Zeiger auf Dosname
- moveq #0,d0 ; Version egal
- CALLEXEC OpenLibrary ; öffnen
- move.l d0,_DOSBase ; Zeiger merken
- tst.l merker
- bne Info ; "?" angewählt? -> InfoTextausgeben
- OpenInt:
- lea.l intname,a1
- moveq #0,d0
- CALLEXEC OpenLibrary
- move.l d0,_IntuitionBase
-
- OutputHandle:
- CALLDOS Output
- move.l d0,d4
-
- ResSpeicher:
- move.l #5632,d0 ; größe
- move.l #$10002,d1 ; Bedingungscode
- CALLEXEC AllocMem
- move.l d0,TrackPuffer ; Adresse Puffer
-
- A lea.l portadr,a1 ; Zeiger auf Portstruktur
- CALLEXEC AddPort ; Port anmelden
-
- B sub.l a1,a1 ; A1 löschen
- CALLEXEC FindTask ; Zeiger auf eigenen Task holen
- move.l d0,portadr+16 ; in Portstruktur eintragen
-
-
- OpenDevice:
- move.l Laufwerk,d0
- lea.l iorequest,a1 ; Zeiger auf IORequest-Struktur
- lea.l devname,a0 ; Zeiger auf Devicenamen
- moveq #0,d1 ; keine Flags
- CALLEXEC OpenDevice ; Device öffnen
- tst.l d0
- bne error ; Fehler beim Öffnen
-
- *********** Starttext ausgeben und auf Return warten ************
-
- Work:
- move.l d4,d1 ; Ausgabehandle
- move.l #EraseText,d2
- moveq #len1,d3 ; Länge String
- CALLDOS Write ; String ausgeben
- WaitReturn:
- CALLDOS Input ; Eingabehandle ermitteln
- move.l d0,d5 ; in d5 merken
- move.l d5,d1
- move.l #buffer,d2
- moveq #1,d3
- CALLDOS Read ; auf Return warten
-
- ************** Eingabe Start- & EndTrack *************************
-
- Test1:
- lea.l iorequest,a1
- move.w #14,command
- CALLEXEC DoIO
- move.l IOerror,d5
- beq.s TestProtection
-
- NotInserted:
- moveq #1,d0 ; Typ: Recovery ALERT
- moveq #45,d1 ; Höhe der Alertbox
- lea.l IText,a0 ; Textadresse
- CALLINT DisplayAlert
- move.l d0,Maustaste
- tst.l Maustaste
- bne Work ; 0 = rechte Taste
- bra fini
-
- TestProtection:
- lea.l iorequest,a1
- move.w #15,command
- CALLEXEC DoIO
- move.l IOerror,d5
- beq.s GOon
-
- Protected:
- moveq #1,d0 ; Typ: Recovery ALERT
- moveq #45,d1 ; Höhe der Box
- lea.l PText,a0 ; Textadresse
- CALLINT DisplayAlert
- move.l d0,Maustaste
- tst.l Maustaste
- bne Work
- bra fini
-
- GOon:
- lea.l iorequest,a1 ; Zeiger auf IORequest
- move.w #11,command
- move.l #160*5632,IOlenght ; 160 Tracks
- move.l #TrackPuffer,IOdata ; TrackPuffer
- moveq #0,d0
- move.l d0,IOoffset ; starte Track 0
- CALLEXEC DoIO ; Device starten
-
- Message:
- move.l d4,d1
- move.l #FinishText,d2
- moveq #len4,d3
- CALLDOS Write
-
- Motoraus:
- lea.l iorequest,a1
- move.w #9,command
- moveq #0,d0 ; Kommando: Motor aus
- move.l d0,IOlenght ; löschen für Motor an
- CALLEXEC DoIO ; aktiviere Device
-
- fini:
- * Speicher wieder freigeben
-
- move.l TrackPuffer,a1 ; Startadresse
- move.l #5632,d0 ; Speichergröße
- CALLEXEC FreeMem
-
- * Trackdisk.device schließen
- lea.l iorequest,a1
- CALLEXEC CloseDevice ; Device schließen
-
- error:
- * Port abmelden
- lea.l portadr,a1
- CALLEXEC RemPort ; Port abmelden
-
- * IntLib schließen
- move.l _IntuitionBase,a1
- CALLEXEC CloseLibrary
-
- * DosLib schließen
-
- CloseDos:
- move.l _DOSBase,a1
- CALLEXEC CloseLibrary
-
- moveq #0,d0 ; Errorflag löschen
- rts ; BABA
-
- ***************** Unterprogramme ***************
-
- Info:
- CALLDOS Output
- move.l d0,d1
- move.l #InfoText,d2
- move.l #InfoTextlen,d3
- CALLDOS Write
- bra.s CloseDos
-
- * Strukturen
-
- portadr dc.l 0
- dc.l 0
- dc.b 4 ; Typ = Message-Port
- dc.b 0 ; Priorität = 0
- dc.l portname ; Zeiger auf Portnamen
- dc.b 0
- dc.b 31 ; Nummer von Signal-Bit
- dc.l 0,0,0,0
- dc.b 0,0
- ; ------------------------------------------------------
-
- iorequest dc.l 0,0
- dc.b 5 ; Typ = Message
- dc.b 0
- dc.l 0
- dc.l portadr ; Zeiger auf Reply-Port
- dc.w 48 ; Strukturgröße in Byte
- dc.l 0,0
- command dc.w 0 ; Kommando: formatieren
- dc.w 0
- IOerror dc.l 0
- IOlenght dc.l 0 ; 160 Tracks formatieren
- IOdata dc.l 0
- IOoffset dc.l 0 ; starte bei Track 0
-
- ; ------------------------------------------------------
-
- * Datenbereich
-
- _DOSBase dc.l 0
- _IntuitionBase dc.l 0
- dosname dc.b "dos.library",0
- intname dc.b "intuition.library",0
- portname dc.b "trackdisk.port",0
- devname dc.b "trackdisk.device",0
-
- Laufwerk dc.l 0
- TrackPuffer dc.l 0
- buffer ds.b 1
- STbuffer ds.l 0
- ETbuffer ds.l 0
- Maustaste ds.l 1
- merker dc.l 0
-
- EraseText dc.b $9b,"1;33;40m"
- dc.b 10,10,10," EraseDisk V0.69",10
- dc.b $9b,"0;31;40m"
- dc.b " Please insert disk to be erased and press RETURN:"
- len1 equ *-EraseText
- FinishText dc.b 10," ...all done! AUTHOR: "
- dc.b $9b,"0;32;40mOtto Bernhart",10
- dc.b $9b,"0;31;40m"
- len4 equ *-FinishText
-
- ************************* ALERT-Texte ************************
-
- PText dc.b 0,120,16,"ATTENTION ! Disk in selected drive is write-protected!!!"
- dc.b 0,$FF,0,17,32," left button: CONTINUE right button: CANCEL",0,0
-
- IText dc.b 0,120,16," ATTENTION ! No disk in selected drive!!!"
- dc.b 0,$FF,0,17,32," left button: CONTINUE right button: CANCEL",0,0
-
- ************************* INFO-Text **********************
-
- InfoText:
- dc.b 12,10,10
- dc.b $9b,"1;33;40mEraseDisk V0.69"
- dc.b $9b,"0;31;40m by "
- dc.b $9b,"1;33;40mOtto Bernhart "
- dc.b $9b,"0;31;40m29/5/91",10,10
- dc.b $9b,"1;32;40m USAGE: "
- dc.b $9b,"0;31;40m"
- dc.b " EraseDisk [DRIVE],[?]",10,10
-
- dc.b " This program erases a disk in a selected drive.",10
- dc.b " (It sets all bits zero)",10,10
-
- dc.b " Write to me: Otto Bernhart",10
- dc.b " Postfach 10",10
- dc.b " 8423 St.Veit a.V.",10
- dc.b " AUSTRIA",10,10
-
- dc.b $9b,"0;32;40m"
- dc.b " EraseDisk is a PUBLIC DOMAIN program,",10
- dc.b " but if you like it, please send $5 (or more)",10
- dc.b " to the adress above. (I`m a poor pupil)",10
- dc.b $9b,"0;31;40m",10,10
- dc.b " EraseDisk is dedicated to all the pretty girls out there!!!",10,10
-
- InfoTextlen equ *-InfoText
- even
-
-