title BVORTEX, das Vortex-Format unter CP/M+ f}r den CPC 6128 ; Copyright 1986 by Andreas Ki~linger ; Version 1.0 vom 28.04.1987 ; Diese Datei ist dem ZMAC angepasst. Zum Assemblieren ; mu~ man die folgende Befehlssequenz eingeben: ; ; >ZMAC bvortex=bvortex.zsm ; >ZLINK bvortex=bvortex ; ; Der Aufruf von BVORTEX oder BVORTEX ON stellt auf dem B-Laufwerk ; das Vortex-Format ein. Der Aufruf von BVORTEX OFF stellt das B- ; Laufwerk auf die normalen CPC-Formate wieder ein. base = 0000h wboot = base bdos = base+5 stdfcb1 = base+5ch stdfcb2 = base+6ch ccpline = base+80h tpa = base+100h strout = 9 ; gibt einen String auf der Console aus cpmver = 12 ; holt die aktuelle CP/M-Versionsnummer dskreset= 13 ; setzt die Diskverwaltung zur}ck seldisk = 14 ; w{hlt das gew}nschte Diskettenlaufwerk aus curdisk = 25 ; holt das aktuell gew{hlte Laufwerk getdpb = 31 ; holt die Adresse des Diskparameterblocks cr = 0dh ; Wagenr}cklauf lf = 0ah ; Zeilenvorschub blank = ' ' ; Leerzeichen strende = '$' ; Stringendekennzeichen start: ld c,cpmver ; BDOS-Funktion CP/M-Version holen call bdos ; CP/M Version bestimmen ld a,l ; Versionsnummer in A holen cp 31h ; ist es CP/M+ (CP/M 3.1)? jr z,cpm31ok ; ja, dann weiter ld de,wrongcpm ; String f}r falsches CP/M adr. ld c,strout ; BDOS-Stringausgabe call bdos ; String auf Console ausgeben ret ; R}ckkehr zum CCP cpm31ok: ; CP/M-Version war ok, also weitermachen ld hl,ccpline ; Parameterzeile adressieren ld a,(hl) ; Anzahl der Zeichen holen or a ; keine Parameter? jr z,dobvortexon ; ==> g}ltige Parameterkonfig. ld b,a ; Anzahl der Zeichen in B laden delblanks: ; ]berlesen von Blanks inc hl ; n{chstes Zeichen adr. ld a,(hl) ; n{chstes Zeichen holen cp blank ; ist es ein Blank? jr nz,isparam ; nein, dann Parameter djnz delblanks ; sonst sooft wie Anzahl Zeichen wdh. jr dobvortexon ; wenn nur Blanks ==> wie ohne Param. isparam: ; Nun kann auf Parameter getestet werden cp 'O' ; erstes Zeichen = 'O'? jr nz,paramerr ; nein, dann Parameterfehler inc hl ; zweites Zeichen adressieren ld a,(hl) ; zweites Zeichen holen cp 'N' ; ist es 'ON' erreicht? jr z,dobvortexon ; ja, dann Vortex-Format installieren cp 'F' ; ist es ein 'F'? jr nz,paramerr ; nein, dann Parameterfehler inc hl ; sonst drittes Zeichen adr. ld a,(hl) ; drittes Zeichen holen cp 'F' ; ist 'OFF' erreicht? jr z,dobvortexoff ; ja, dann Vortex-Format ausschalten paramerr: ; falscher Parameter angegeben ld de,perrmsg ; Fehlermeldung adressieren ld c,strout ; BDOS-Stringausgabe call bdos ; einleiten ret ; R}ckkehr zum CCP dobvortexon: ; Hier weiter, wenn ohne Parameter oder 'ON' ld de,mesg1 ; Installierungsmeldung adressieren ld c,strout ; zum Meldungen ausgeben call bdos ; und ausgeben call getbdpb ; DPB-Adresse von B holen ex de,hl ; Adresse in DE holen ld hl,new31dpb ; Adresse des neuen 3.1 DPB ld bc,dpb31ende-new31dpb ; DPB-L{nge in BC ldir ; alten ersetzen call diskreset ; Diskverwaltung zur}cksetzen ret ; zum CCP zur}ckkehren dobvortexoff: ; BVORTEX-Format wieder abschalten ld de,mesg2 ; Abschaltungsmeldung adressieren ld c,strout ; BDOS-Stringausgabefunktion call bdos ; String auf Console ausgeben call getbdpb ; DPB-Adresse f}r B holen ld de,dpb31ende-new31dpb-1 ; letztes DPB-Byte in CP/M 3.1 add hl,de ; Freeze-Flag wird adressiert ld (hl),0 ; automatische Formaterkennung zulassen call diskreset ; Diskverwaltung zur}cksetzen ret ; R}ckkehr zum CCP getcpmversion: ; CP/M-Version holen ld c,cpmver ; BDOS-CP/M-Version holen call bdos ; BDOS aufrufen ld a,l ; CP/M Version in Akku laden ret ; R}ckkehr zum Aufrufer getbdpb: ; DPB-Adresse von laufwerk B holen ld c,curdisk ; aktuelles call bdos ; Laufw. holen push af ; und sichern ld c,seldisk ; Laufwerk B ld e,01h ; selektieren call bdos ld c,getdpb ; DiskParam.Block call bdos ; dazu holen pop af ; vorheriges Laufwerk holen push hl ; DPB-Adresse retten ld e,a ; in E als Parameter f}r BDOS ld c,seldisk ; BDOS-Funktion Laufwerk w{hlen call bdos ; Laufwerk selektieren pop hl ; DPB-Adresse holen ret ; R}ckkehr zum Aufrufer diskreset: ; Diskettenverwaltung zur}cksetzen ld c,dskreset ; BDOS-Funktion Diskreset laden call bdos ; Diskettenverwaltung zur}cksetzen ret ; R}ckkehr zum Aufrufer mesg1: db 'Das Vortex-Format fuer 2*80 Spur-Laufwerke ' db 'wird nun installiert!',cr,lf,strende mesg2: db 'Das Vortex-Format fuer 2*80 Spur-Laufwerke ' db 'wird nun abgeschaltet!',cr,lf,strende perrmsg: db 'BVORTEX darf nur mit ON oder OFF oder ganz ohne ' db 'Parameter',cr,lf,'aufgerufen werden. Ein Aufruf ' db 'ohne Parameter wirkt wie BVORTEX ON!',cr,lf,strende wrongcpm: db 'Dieses Programm l{uft nur unter CP/M+',cr,lf,strende new31dpb: dw 36 ; 36 Records pro Spur db 5 ; Blockshift := 5 ( 2^5=32 Records/Block) db 31 ; Blockmask := 31 (31+1=32 Records/Block) db 3 ; Extentmask := 3 (4 Extents/Direntry) dw 176 ; Maxblock := 176 (gr|~te Blocknummer) dw 127 ; Maxdir := 127 (gr|~ter Direntry) db 80h,00h ; 1 Directoryblock (Bitmap) dw 32 ; 128 gepr}fte Direintr{ge (128/4=32) dw 2 ; 2 reservierte Spuren db 2 ; 2^2=4 Records pro Sektor (PSH) db 3 ; max. Recordnr. im Sektor (PHM) ; Bis hierher wars CP/M 3.X Standard, jetzt kommt Amstrad dran db 1 ; Seitenstruktur doppelseitig (flip sides) db 80 ; 80 Spuren pro Seite db 9 ; 9 physikalische Sektoren pro Spur db 1h ; Nummer des ersten Sektors dw 512 ; Sektorl{nge ist 512 Byte db 2ah ; L{nge von GAP 3 zum Lesen und Schreiben db 52h ; L{nge von GAP 3 zum Formatieren db 60h ; Modus = MFM und Skip Deleted Data db 0ffh ; kein neuer Formatlogin dpb31ende = $ end ; Ende des Assemblertextes