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