Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- * ›33;40m0815Copy Version c›0m
- * Bei diesem Programm handelt es sich wohl um das kürzeste
- * Diskettenkopierprogramm das zur Zeit auf dem PD-Mark zu
- * erhalten ist ! <aufjedenfall han isch noch kin kürtzeres
- * entdecken könne, un wenn doch... ja dann lauf isch Amok>
- * 0815Copy benötigt ein externes Laufwerk <DF1:> ! Kopiert
- * wird immer von DF0: <intern> nach DF1: <extern> <Logen!>
- * Durch drücken der linken Maustaste kann zu jeder Zeit
- * der laufende Kopiervorgang abgebrochen werden! <Hurz...>
- * Programmiert hat das Ganze: Peace / Testaware am 18/01/94
- * mit dem AZ Editor V1.50! Assembliert wurde letztendlich
- * mit GenAm Macro Assembler V2.11D © 85/88 by HiSoft <Yeah>
- * Variablen definieren
- * --------------------
- _SYSBase equ 4 ; Basis von EXEC
- _LVOAllocMem equ -198 ; EXEC Offsets
- _LVOFreeMem equ -210
- _LVOFindTask equ -294
- _LVOSetSignal equ -306
- _LVOAddPort equ -354
- _LVORemPort equ -360
- _LVOOldOpenLibrary equ -408
- _LVOCloseLibrary equ -414
- _LVOOpenDevice equ -444
- _LVOCloseDevice equ -450
- _LVODoIO equ -456
- _LVORead equ -42 ; DOS Offsets
- _LVOWrite equ -48
- _LVOOutput equ -60
- * Vorbereitungen für 0815Copy Vc
- * ------------------------------
- _OPENLIB move.l _SYSBase,a6 ; System-Basis nach a6
- lea DosName(pc),a1 ; dos.library nach a1
- jsr _LVOOldOpenLibrary(a6) ; Library öffnen
- move.l d0,_DOSBase ; & Basis sichern
- move.l _DOSBase(pc),a6 ; DosBasis nach a6
- jsr _LVOOutput(a6) ; Ausgabekanal ermitteln
- move.l d0,Handle ; & sichern
- * Speicher bereitstellen
- * ----------------------
- _ALLOCMEM move.l #5632,d0 ; Speichergröße in Bytes
- bsr.s _MEM
- move.l d0,DiskBuff ; Speicheradresse sichern
- moveq #80,d0
- bsr.s _MEM
- move.l d0,DiskIO0
- moveq #80,d0
- bsr.s _MEM
- move.l d0,DiskIO1
- bra.s _OPENDEV1
- _MEM move.l _SYSBase,a6
- move.l #$10003,d1
- jsr _LVOAllocMem(a6)
- rts
- * Device für DF1: öffnen
- * ----------------------
- _OPENDEV1 sub.l a1,a1 ; 0 für eigene Taskadresse
- jsr _LVOFindTask(a6) ; Eigenen Task ermitteln
- move.l d0,DiskRep+$10 ; Antwort-Task festlegen
- lea DiskRep(pc),a1 ; ReplyPort
- jsr _LVOAddPort(a6) ; anmelden
- move.l DiskIO1(pc),a1 ; IORequest für DF1: angeben
- clr.l d1 ; Flags brauchn wa nisch
- moveq #1,d0 ; DF1: <Destination>
- lea Device(pc),a0 ; Devicename nach a0
- jsr _LVOOpenDevice(a6) ; trackdisk.device öffnen
- bne _DEVFEHLER ; Ext. Laufwerk nicht vorhanden
- move.l #DiskRep,14(a1) ; ReplyPort installieren
- * Device für DF0: öffnen
- * ----------------------
- _OPENDEV0 move.l DiskIO0(pc),a1 ; IORequest für DF0: angeben
- clr.l d1 ; Wie gehabt
- moveq #0,d0 ; DF0: <Source>
- lea Device(pc),a0 ; Devicename nach a0
- jsr _LVOOpenDevice(a6) ; trackdisk.device öffnen
- move.l #DiskRep,14(a1) ; ReplyPort installieren
- * Message & Warten
- * ----------------
- _WELCOME lea Message(pc),a0
- bsr _PRINT
- move.l Handle(pc),d1
- move.l #Message,d2 ; Wird nicht mehr benötigt
- moveq #1,d3 ; 1 x Bitte
- jsr _LVORead(a6) ; Auf Return warten
- * Diskettentests
- * --------------
- _CHECKDISKS move.l _SYSBase,a6
- move.l DiskIO0(pc),a1 ; IORequest 0 nach a1
- move #14,28(a1) ; TD_CHANGESTATE
- jsr _LVODoIO(a6)
- tst.l 32(a1) ; Ist Disk in DF0: ?
- bne _NODISK0 ; Nein
- move #2,28(a1) ; CMD_READ
- move.l #5632,36(a1) ; 11*512 Blöcke
- move.l DiskBuff(pc),40(a1) ; Speicheradresse angeben
- move.l DiskIO1(pc),a1 ; IORequest 1 nach a1
- move #14,28(a1) ; TD_CHANGESTATE
- jsr _LVODoIO(a6)
- tst.l 32(a1) ; Ist Disk in DF1: ?
- bne _NODISK1 ; Nein
- move #15,28(a1) ; TD_PROSTATUS
- jsr _LVODoIO(a6)
- tst.l 32(a1) ; Ist Disk schreibgeschützt ?
- bne _YESPRO1 ; Ja <und warum ?>
- move #11,28(a1) ; TD_FORMAT
- move.l #5632,36(a1) ; 1 Track
- move.l DiskBuff(pc),40(a1) ; Speicheradresse angeben
- * 0815Copy starten
- * ----------------
- _DISKCOPY clr.l d7 ; d7 löschen
- moveq #49,d4 ; head = `0` - 1
- _LOOPstart bsr.s _HEAD ; Cylinder & head zeigen
- move.l _SYSBase,a6 ; Hatten wir schon
- _READ move.l DiskIO0(pc),a1 ; Track einlesen 0
- jsr _LVODoIO(a6) ; !
- bne.s _READERR ; Rülps... Fehler auf Source
- _WRITE move.l DiskIO1(pc),a1 ; Track schreiben 1
- jsr _LVODoIO(a6) ; !
- moveq #0,d0 ; Mittels
- moveq #0,d1 ; CTRL+C
- jsr _LVOSetSignal(a6) ; Kopiervorgang
- btst #12,d0 ; vorzeitig beenden ?
- bne.s _LOOPende ; Ja
- addq #1,d7 ; Cylinderanzahl erhöhen
- cmp.l #160,d7 ; max. Cylinder-1 erreicht ?
- beq.s _LOOPende ; Ja
- move.l DiskIO0(pc),a1 ; IORequest DF0:
- add.l #5632,44(a1) ; Cylinder um 1 erhöhen
- move.l DiskIO1(pc),a1 ; IORequest DF1:
- add.l #5632,44(a1) ; Cylinder um 1 erhöhen
- bra.s _LOOPstart ; Und weiter geht`s
- _LOOPende bra.s _ALLFIN0 ; Kopieren beendet
- * Aktuellen Cylinder & head ermitteln
- * -----------------------------------
- _HEAD lea Work(pc),a0 ; Adr. von Worktext nach a0
- addq.b #1,d4 ; head erhöhen
- cmp.b #50,d4 ; ist head > 1
- beq.s _P01 ; Jawohl
- move.b #49,d4 ; head = 1
- bra.s _SHOW ; Dann zeig`s mal
- _P01 move.b #48,d4 ; head = 0
- addq.b #1,19(a0) ; Einer erhöhen
- cmp.b #58,19(a0) ; Ist Einer > 9
- blt.s _SHOW ; Ne, is nisch
- _P10 addq.b #1,18(a0) ; Zehner erhöhen
- move.b #48,19(a0) ; Einer equ `0`
- _SHOW move.b d4,27(a0) ; `head` angeben
- bsr.s _PRINT ; Cylinderpos. ausgeben
- rts ; Und das 160 mal...
- * Lesefehler aufgetreten
- * ----------------------
- _READERR lea ReadErr(pc),a0
- lea Work(pc),a1
- move.b 18(a1),35(a0) ; Cylinderposition
- move.b 19(a1),36(a0) ; übergeben
- divu #10,d0 ; Zehner ermitteln
- add.b #48,d0 ; und in ASCII wandeln
- move.b d0,9(a0) ; Wert übergeben <Würg...>
- swap d0 ; Einer ermitteln
- add.b #48,d0 ; ebenfalls in ASCII wandeln
- move.b d0,10(a0) ; & eintragen
- move.b d4,44(a0) ; `head` übergeben
- bsr.s _PRINT
- move.l _SYSBase,a6 ; Ui, Hui, sehr wichtig !
- bra _WRITE
- * Wo ist die Sourcedisk ?
- * -----------------------
- _NODISK0 lea NoDisk0(pc),a0
- bsr.s _PRINT
- _ALLFIN0 bra.s _ALLEND
- * Und wo ist die Targetdisk ?
- * ---------------------------
- _NODISK1 lea NoDisk1(pc),a0
- bsr.s _PRINT
- bra.s _ALLEND
- * Wie soll man kopieren mit aktiven Schreibschutz ?
- * -------------------------------------------------
- _YESPRO1 lea YesPro1(pc),a0
- bsr.s _PRINT
- bra.s _ALLEND
- * Device konnte nicht geöffnet werden
- * -----------------------------------
- _DEVFEHLER lea DevErr(pc),a0 ; DevErrtext
- bsr.s _PRINT
- bra _ABORT ; Da is wat schief jelaufen
- * Allgemeine Textausgebe
- * ----------------------
- _PRINT move.l _DOSBase(pc),a6
- clr.l d3
- move.l a0,a1
- _PLOOP tst.b (a0)+
- beq.s _PEND
- addq #1,d3
- bra.s _PLOOP
- _PEND move.l a1,d2
- move.l Handle(pc),d1
- jsr _LVOWrite(a6)
- rts
- * Alles beenden
- * -------------
- _ALLEND bsr.s _CLOSEDEV0
- bsr.s _CLOSEDEV1
- _ALLFIN1 bra.s _CLOSELIB
- * Motor aus 0 & Device 0 schließen
- * --------------------------------
- _CLOSEDEV0 move.l _SYSBase,a6 ; System-Basis nach a6
- move.l DiskIO0(pc),a1 ; IORequest 0 angeben
- move #10,(a1) ; TD_SEEK
- move.l #0,44(a1) ; Offset: Sektor 0
- jsr _LVODoIO(a6) ; Kopf positionieren
- move #9,28(a1) ; TD_MOTOR
- move.l #0,36(a1) ; von DF0:
- jsr _LVODoIO(a6) ; aus !
- jsr _LVOCloseDevice(a6) ; Device <DF0:> schließen
- rts
- * Motor aus 1 & Device 1 schließen
- * --------------------------------
- _CLOSEDEV1 move.l DiskIO1(pc),a1 ; IORequest 1 angeben
- move #10,(a1) ; TD_SEEK
- move.l #0,44(a1) ; Offset: Sektor 0
- jsr _LVODoIO(a6) ; Kopf positionieren
- move #9,28(a1) ; TD_MOTOR
- move.l #0,36(a1) ; von DF1:
- jsr _LVODoIO(a6) ; aus !
- jsr _LVOCloseDevice(a6) ; Device <DF1:> schließen
- rts
- * Speicher freigeben, dos.library schließen & Zurück
- * --------------------------------------------------
- _CLOSELIB lea Bye(pc),a0 ; Tschüsstext
- bsr _PRINT
- _ABORT move.l _SYSBase,a6
- move.l #5632,d0
- move.l DiskBuff(pc),a1
- jsr _LVOFreeMem(a6) ; Speicher freigeben
- move.l #80,d0
- move.l DiskIO0(pc),a1
- jsr _LVOFreeMem(a6) ; Speicher freigeben
- move.l #80,d0
- move.l DiskIO1(pc),a1
- jsr _LVOFreeMem(a6) ; Speicher freigeben
- lea DiskRep(pc),a1 ; Und Port auch
- jsr _LVORemPort(a6) ; wieder schön abmelden
- move.l _DOSBase(pc),a1 ; DosBasis angeben
- jsr _LVOCloseLibrary(a6) ; & dos.library schließen
- RTS ; Und... Tschüss !
- * Speicherreservierung
- * --------------------
- _DOSBase dc.l 0
- Handle dc.l 0
- DiskBuff dc.l 0
- DiskIO0 dc.l 0
- DiskIO1 dc.l 0
- DiskRep ds.l 8
- DosName dc.b 'dos.library',0
- Device dc.b 'trackdisk.device',0
- Message dc.b 10,$9b,'33;40m0815Copy Vc (r)1994 by Peace / Testaware',10
- dc.b $9b,'0mSourcedisk in DF0: & Targetdisk in DF1:',10
- dc.b 'Press RETURN when ready:',0
- Work dc.b 'Copying cylinder: 0/, head 0',10,$9b,$b,0
- Bye dc.b 10,10,'Operation finished !',10,10,0
- NoDisk0 dc.b 10,$9b,'3mNo disk in sourcedrive !',$9b,'0m',0
- NoDisk1 dc.b 10,$9b,'3mNo disk in targetdrive !',$9b,'0m',0
- YesPro1 dc.b 10,$9b,'3mDisk is write protected !',$9b,'0m',0
- ReadErr dc.b 'TDError #00 while reading cylinder 00, head 0 !',10,0
- DevErr dc.b 'External drive not available !',10,0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement