home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d544
/
erasedisk.lha
/
EraseDisk
/
EraseDisk.asm
< prev
next >
Wrap
Assembly Source File
|
1991-09-18
|
8KB
|
321 lines
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