; ------------------------------------------------------------------------------------
; DISC UTILITY V4.7 (C) J.P.B SYSTEM 1990
;
; |SECTEUR.LIRE,< numero >,< piste >,< drive >,< adresse du buffer >
; |SECTEUR.ECRIRE,< numero >,< piste >,< drive >,< adresse du buffer >
;
; |PISTE.LIRE,< numero >,< premier secteur >,< nbre secteur >,< drive >,< adresse buffer >
; |PISTE.ECRIRE,< numero >,< premier secteur >,< nbre secteur >,< drive >,< adresse buffer >
;
; |PISTE.POSITION.0,< drive >
;
; |FORMATER,< piste >,< premier secteur >,< nombre de secteur >,< drive >
; |FORMATAGE,< type de lecteur en decimal >,< numero du secteur >,< drive >
;
; |PC.LIRE.525,< numero de tete >,< numero de piste >,< buffer >,< drive >
; |PC.ECRIRE.525,< numero de tete >,< numero de piste >,< buffer >,< drive >
; |PC.FORMATAGE.525,< numero de tete >,< numero de piste >,< drive >
;
; |PC.LIRE.035,< numero de tete >,< numero de piste >,< buffer >,< drive >
; |PC.ECRIRE.035,< numero de tete >,< numero de piste >,< buffer >,< drive >
; |PC.FORMATAGE.035,< numero de tete >,< numero de piste >,< drive >
;
; ------------------------------------------------------------------------------------
ORG &9800 ; Debut de l'assemblage
LD HL,BUFFA
LD BC,TABLE
CALL KERNEL ; Definition des RSX
LD HL,MESSA7
JP BOUCLE
BUFFA DEFS 4
TABLE DEFW SECTA
JP RUNA ; Saut au programme 1
JP RUNB ; Saut au programme 2
JP RUNC ; Saut au programme 3
JP RUND ; Saut au programme 4
JP RUNC0 ; Saut au programme 5
JP RUNE ; Saut au programme 6
JP RUNF ; Saut au programme 7
JP RUNG ; Saut au programme 8
JP RUNAA ; Saut au programme 9
JP RUNAB ; SAUT AU PROGRAMME 10
JP RUNAC ; SAUT AU PROGRAMME 11
JP RUNBA ; SAUT AU PROGRAMME 12
JP RUNBB ; SAUT AU PROGRAMME 13
JP RUNBC ; SAUT AU PROGRAMME 14
SECTA DEFM "SECTEUR.LIR","E"+128 ; Definition du nom 1
DEFM "SECTEUR.ECRIR","E"+128 ; Definition du nom 2
DEFM "PISTE.LIR","E"+128 ; Definition du nom 3
DEFM "PISTE.ECRIR","E"+128 ; Definition du nom 4
DEFM "PISTE.POSITION.","0"+128 ; DEFINITION DU NOM 5
DEFM "FORMATE","R"+128 ; Definition du nom 6
DEFM "FORMATAG","E"+128 ; Definition du nom 7
DEFM "HELP.DIS","C"+128 ; Definition du nom 8
DEFM "PC.LIRE.52","5"+128 ; Definition du nom 9
DEFM "PC.FORMATAGE.52","5"+128 ; DEFINITION DU NOM 10
DEFM "PC.ECRIRE.52","5"+128 ; DEFINITION DU NOM 11
DEFM "PC.LIRE.03","5"+128 ; Definition du nom 12
DEFM "PC.FORMATAGE.03","5"+128 ; DEFINITION DU NOM 13
DEFM "PC.ECRIRE.03","5"+128 ; DEFINITION DU NOM 14
; ---------------------------------------------------------------------
; ------------- ENSEMBLE DE SOUS PROGRAMMES COMMUN A TOUTES LES RSX ---
; ---------------------------------------------------------------------
VERI0 CP 5 ; Y-a-t-il assez de parametres
JP NZ,ERROR
LD A,(IX+9)
CP 0
JP NZ,ERL2
LD A,(IX+8)
CP 43
JR C,CAPS
JP ERL2
CAPS LD A,(IX+7)
CP 0
JP NZ,ERL3
LD A,(IX+5)
CP 0
JP NZ,ERL4
LD A,(IX+3)
CP 0
JP NZ,ERL1
LD A,(IX+2)
CP 2
JR C,PLOT
JP ERL1
PLOT RET ; Fin de la verification des erreurs
DRIVE LD BC,MOTEUR ; commande le moteur du lecteur de disquette
OUT (C),A
RET
FETAR LD A,(IX+7) ; Verification de l'exactitude des parametres
CP 0
JP NZ,ERL3
LD A,(IX+3)
CP 0
JP NZ,ERL1
LD A,(IX+5)
CP 0
JP NZ,ERL2
LD A,(IX+2)
CP 2
JR C,OUI
JP ERL1
OUI LD A,(IX+4)
CP 43 ; Piste de reference = 43
JR C,NON
JP ERL2
NON RET
TEMPOX LD B,&66 ; routine de temporisation
TEMPO2 PUSH BC
LD B,&55
TEMPO1 PUSH BC
LD B,&11
TEMPO0 DJNZ TEMPO0
POP BC
DJNZ TEMPO1
POP BC
DJNZ TEMPO2
RET
BOUCLE LD A,(HL) ; routine d'ecriture de caracteres ASCII
CP 255
RET Z
CALL ECRIT
INC HL
JR BOUCLE
KOMMPOS LD A,(DE) ; Effectue le positionnement
LD B,A
INC DE
FDCP PUSH BC
LD A,(DE)
INC DE
PUSH DE
CALL ENVOIE
POP DE
POP BC
DJNZ FDCP
RET
WAIT LD B,&05
WAIT1 PUSH BC
LD DE,&DDDD
ENCORE DEC DE
LD A,D
OR E
JR NZ,ENCORE
POP BC
DJNZ WAIT1
RET
KOMMFOR LD A,(DE) ; Formatage phase commande
LD B,A
INC DE
FDCFOR PUSH BC
LD A,(DE)
INC DE
PUSH DE
CALL ENVOIE
POP DE
POP BC
DJNZ FDCFOR
LD BC,&FB7E ; Formatage phase execution ROM 07 CP/M #C6EF
YET IN A,(C)
JP P,YET
AND A,&20
JR Z,GO
INC C
LD A,(HL)
OUT (C),A
DEC C
INC HL
JR YET
GO LD HL,RESUL ; Formatage phase resultat ROM 07 CP/M #C91C
LD BC,&FB7E
LD DE,&C010
TOTOFOR IN A,(C)
BIT 4,A
JP Z,FIN
CP D
JR C,TOTOFOR
INC C
IN A,(C)
LD (HL),A
INC HL
DEC C
JR TOTOFOR
KOMMAND LD A,(DE) ; PHASE COMMANDE
LD B,A
INC DE
FDC PUSH BC
LD A,(DE)
INC DE
PUSH DE
CALL ENVOIE
POP DE
POP BC
DJNZ FDC
LD BC,REGSTA ; phase resultat ROM 07 CP/M #C91C
LD DE,&C010
TOTO IN A,(C)
BIT 4,A
JR Z,FIN
CP D
JR C,TOTO
INC C
IN A,(C)
LD (HL),A
INC HL
DEC C
JR TOTO
ENVOIE PUSH AF ; Envoie une donnee au FDC si celui ci est pret
PUSH AF ; ROM 07 CP/M #C95C
LD BC,REGSTA
NON2 IN A,(C)
ADD A,A
JR NC,NON2
ADD A,A
JR NC,TOTO3
POP AF
POP AF
RET
TOTO3 POP AF
INC C
OUT (C),A
DEC C
LD A,5
TEMPO DEC A
NOP
JR NZ,TEMPO
POP AF
FIN RET
; ---------------------------------------------------------------------
; ------------------------------------ RSX |PISTE.POSITION.0 ----------
; ---------------------------------------------------------------------
RUNC0 CP 1 ; VERIFIE S'IL Y A UN SEUL PARAMETRE
JR NZ,ERROR
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00)
LD (RECALI),A
LD A,&01
CALL DRIVE
CALL TEMPOX
LD DE,TARC
CALL KOMMAND
CALL WAIT
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; ------------------------------------ RSX |SECTEUR.LIRE --------------
; ---------------------------------------------------------------------
RUNA CP 4 ; Verifie les 4 parametres
JR Z,SUITE
ERROR LD HL,MESSA1 ; Pas assez de parametres
JP BOUCLE
SUITE CALL FETAR ; Debut de la premiere RSX
INTERA LD A,&01
CALL DRIVE
LD H,(IX+1) ; Charge le buffer dans HL
LD L,(IX+0)
LD E,(IX+2) ; Charge le drive dans E
LD D,(IX+4) ; Charge la piste dans D
LD C,(IX+6) ; Charge le numero de secteur
RST &18 ; Appel ROM7 READ SECTOR
DEFW BOUTON
XOR A
JP DRIVE
; --------------------------------------------------------------------
; --------------------------------- RSX |SECTEUR.ECRIRE --------------
; --------------------------------------------------------------------
RUNB CP 4
JR NZ,ERROR
CALL FETAR ; Verifie l'exactitude des parametres
LD A,&01
CALL DRIVE
LD H,(IX+1)
LD L,(IX+0)
LD E,(IX+2)
LD D,(IX+4)
LD C,(IX+6)
RST &18
DEFW MALIN
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; ------------------------------------- RSX |PISTE.LIRE ---------------
; ---------------------------------------------------------------------
RUNC CALL VERI0 ; Verification des bons parametres
CP 255
RET Z
DEB0 LD A,&01
CALL DRIVE
LD H,(IX+1) ; Adresse du buffer
LD L,(IX+0)
LD B,(IX+4) ; Nombre de secteur a lire
LD D,(IX+8) ; Numero de piste
LD E,(IX+2) ; Numero de drive
LD C,(IX+6) ; Premier secteur a lire
FOIN0 PUSH BC ; Sauvegarde les parametres dans la pile
PUSH DE
PUSH HL
RST &18
DEFW BOUTON ; Appel ROM7 READ SECTOR
POP HL ; Restore les parametres de la pile
POP DE
POP BC
INC H ; Augmente le buffer de 512 octets
INC H
INC C ; Passe au secteur suivant
DJNZ FOIN0 ; Tant que B<>0
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; ----------------------------------- RSX |PISTE.ECRIRE ---------------
; ---------------------------------------------------------------------
RUND CALL VERI0 ; Verification DU NOMBRE ADEQUAT DE parametres
CP 255
RET Z
DEB1 LD A,&01
CALL DRIVE
LD H,(IX+1) ; Adresse du buffer
LD L,(IX+0)
LD B,(IX+4) ; Nombre de secteur a lire
LD D,(IX+8) ; Numero de piste
LD E,(IX+2) ; Numero de drive
LD C,(IX+6) ; Premier secteur a lire
FOIN1 PUSH BC ; Sauvegarde les parametres dans la pile
PUSH DE
PUSH HL
RST &18
DEFW MALIN ; Appel ROM7 WRITE SECTOR
POP HL ; Restore les parametres de la pile
POP DE
POP BC
INC H ; Augmente le buffer de 512 octets
INC H
INC C ; Passe au secteur suivant
DJNZ FOIN1 ; Tant que B<>0
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; ---------------------------------------- RSX |FORMATER --------------
; ---------------------------------------------------------------------
RUNE CP 4 ; Verifie le nombre adequat de parametres
JP NZ,ERROR
LD A,(IX+7)
CP 0
JP NZ,ERL2
LD A,(IX+5)
CP 0
JP NZ,ERL3
LD A,(IX+3)
CP 0
JP NZ,ERL4
LD A,(IX+1)
CP 0
JP NZ,ERL1
LD A,(IX+6)
CP 84 ; Piste de reference
JR C,VISSA
JP ERL2
VISSA LD A,(IX+0)
CP 2
JR C,VISSB
JP ERL1
VISSB LD C,(IX+4) ; Creation de la table necessaire pour le formatage
LD IY,TABLE1
LD B,(IX+2) ; Nombre de fois a repeter
VISSC XOR A
LD D,(IX+6)
LD (IY+0),D
LD (IY+1),A
LD (IY+2),C
LD A,2 ; Taille du secteur imposee 512 octets par secteur
LD (IY+3),A
INC C
INC IY
INC IY
INC IY
INC IY
DJNZ VISSC ; Remplir toute la table
LD D,(IX+6) ; Charge le numero de piste
LD E,(IX+0) ; Charge le drive actif
LD HL,TABLE1
RST &18
DEFW POST
RET
; ---------------------------------------------------------------------
; -------------------------------------------- RSX |FORMATAGE ---------
; ---------------------------------------------------------------------
RUNF CP 3 ; Verifie le nombre adequat de parametres
JP NZ,ERROR
LD A,(IX+5)
CP 0
JP NZ,ERL5
LD A,(IX+3)
CP 0
JP NZ,ERL3
LD A,(IX+1)
CP 0
JP NZ,ERL1
LD HL,VALUE
LD A,(IX+4)
CP &50
JR NZ,VALUE1
VALUE3 ADD A,2
LD (HL),A
JR VALUE2
VALUE1 CP &28
JP NZ,ERL5
JR VALUE3
VALUE2 LD A,(IX+0)
CP 2
JR C,OUF
JP ERL1
OUF LD C,(IX+2) ; Commence a creer la table en fonction de la demande
LD IY,TABLE2
LD B,5
VORT1 LD (IY+2),C
INC C
PUSH BC
LD B,8
VORT6 INC IY
DJNZ VORT6
POP BC
DJNZ VORT1
LD C,(IX+2)
LD B,5
VORT7 INC C
DJNZ VORT7
LD IY,TABLE3
LD B,4
VORT8 LD (IY+2),C
INC C
PUSH BC
LD B,8
VORT9 INC IY
DJNZ VORT9
POP BC
DJNZ VORT8
LD E,(IX+00)
XOR A
NOIR LD D,A ; Numero de piste compris entre 0 et 41
LD HL,TABLE2
LD IY,TABLE2
LD (IY+00),D
LD (IY+4),D
LD (IY+8),D
LD (IY+12),D
LD (IY+16),D
LD (IY+20),D
LD (IY+24),D
LD (IY+28),D
LD (IY+32),D
PUSH AF
PUSH HL
PUSH DE
RST &18
DEFW POST
POP DE
POP HL
POP AF
INC A
DEFM &FE ; Code operation de CP xx
VALUE DEFM &00 ; Piste de reference determinee par IX+4
JR NZ,NOIR
RET
; ---------------------------------------------------------------------
; --------------------- RSX |PC.FORMATAGE.525 -------------------------
; ---------------------------------------------------------------------
RUNAB CP &03 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&05)
CP &00
JP NZ,ERROR3
LD A,(IX+&04)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&03)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00)
LD (DRIVE3),A
LD (DRIVE4),A
LD A,(IX+&04)
LD (TETE1),A
LD (TETE2),A
LD (TETE3),A
LD (TETE4),A
LD (TETE5),A
LD (TETE6),A
LD (TETE7),A
LD (TETE8),A
LD (TETE9),A
LD A,(IX+&02)
LD (TRACK1),A
LD (TRACK2),A
LD (TRACK3),A
LD (TRACK4),A
LD (TRACK5),A
LD (TRACK6),A
LD (TRACK7),A
LD (TRACK8),A
LD (TRACK9),A ; PREPARE L'ID DE LA PISTE
RLCA
LD (TRACK0),A ; SE POSITIONNE SUR LE CPC POUR ETRE OK AVEC LE PC
DI
LD A,&01
CALL DRIVE
CALL TEMPOX
LD DE,TABLP
CALL KOMMPOS
CALL TEMPOX
LD DE,TABLEE ;
LD HL,TRACK1
CALL KOMMFOR ; APPELLE DE LA COMMANDE DE FORMATAGE
CALL TEMPOX
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; --------------------- RSX |PC.FORMATAGE.035 -------------------------
; ---------------------------------------------------------------------
RUNBB CP &03 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&05)
CP &00
JP NZ,ERROR3
LD A,(IX+&04)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&03)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00) ; ACQUIERT LE NUMERO DU LECTEUR
LD (DRIVE3),A
LD (DRIVE4),A
LD A,(IX+&04) ; ACQUIERT LE NUMERO DE LA TETE
LD (TETE1),A
LD (TETE2),A
LD (TETE3),A
LD (TETE4),A
LD (TETE5),A
LD (TETE6),A
LD (TETE7),A
LD (TETE8),A
LD (TETE9),A
LD A,(IX+&02) ; ACQUIERT LA PISTE A FORMATER
LD (TRACK0),A
LD (TRACK1),A
LD (TRACK2),A
LD (TRACK3),A
LD (TRACK4),A
LD (TRACK5),A
LD (TRACK6),A
LD (TRACK7),A
LD (TRACK8),A
LD (TRACK9),A
DI
LD A,&01
CALL DRIVE
CALL TEMPOX
LD DE,TABLP
CALL KOMMPOS
CALL TEMPOX
LD DE,TABLEE ;
LD HL,TRACK1
CALL KOMMFOR ; APPELLE DE LA COMMANDE DE FORMATAGE
CALL TEMPOX
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; -------------------------------- RSX |PC.LIRE.525 -------------------
; ---------------------------------------------------------------------
RUNAA CP &04 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&07)
CP &00
JP NZ,ERROR3
LD A,(IX+&06)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&05)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00)
LD (DRIVE0),A
LD (DRIVE1),A
LD (DRIVE2),A
LD A,(IX+&06)
LD (TETE0),A
LD A,(IX+&02)
LD L,A
LD A,(IX+&03)
LD H,A
LD (BUFFRD),HL
LD A,(IX+&04)
LD (TRACKY),A
DI
LD A,&01
CALL DRIVE
CALL TEMPOX
LD A,(TRACKY) ; NUMERO DE LA PISTE A ETUDIER
LD (TRAC1),A
RLCA
LD (TRACK),A
LD DE,TABLE11 ; POSITION SUR LA PISTE DEFINIE
CALL KOMMAND
CALL WAIT
LD DE,TABRE ; LIT LA PISTE APRES S'ETRE POSITIONNNE DESSUS
LD HL,(BUFFRD)
CALL KOMMAND
CALL WAIT
LD DE,TABLE4 ; EFFECTUE LE POSITIONNEMENT PISTE 00
CALL KOMMAND
CALL WAIT
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; -------------------------------- RSX |PC.LIRE.035 -------------------
; ---------------------------------------------------------------------
RUNBA CP &04 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&07)
CP &00
JP NZ,ERROR3
LD A,(IX+&06)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&05)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00) ; ACQUIERT LE LECTEUR COURANT
LD (DRIVE0),A
LD (DRIVE1),A
LD (DRIVE2),A
LD A,(IX+&06) ; ACQUIERT LE NUMERO DE LA FACE
LD (TETE0),A
LD A,(IX+&02) ; ACQUIERT L'ADRESSE DU BUFFER
LD L,A
LD A,(IX+&03)
LD H,A
LD (BUFFRD),HL ; SAUVE CETTE ADRESSE
LD A,(IX+&04)
LD (TRACKY),A
DI
LD A,&01
CALL DRIVE
CALL TEMPOX
LD A,(TRACKY) ; NUMERO DE LA PISTE A ETUDIER
LD (TRACK),A
LD (TRAC1),A
LD DE,TABLE11 ; POSITION SUR LA PISTE DEFINIE
CALL KOMMAND
CALL WAIT
LD DE,TABRE ; LIT LA PISTE APRES S'ETRE POSITIONNNE DESSUS
LD HL,(BUFFRD) ; RETROUVE L'ADRESSE PRECEDEMENT CREE
CALL KOMMAND
CALL WAIT
LD DE,TABLE4 ; EFFECTUE LE POSITIONNEMENT PISTE 00
CALL KOMMAND
CALL WAIT
XOR A
JP DRIVE
; --------------------------------------------------------------------
; ---------------------------------- RSX |PC.ECRIRE.525 --------------
; --------------------------------------------------------------------
RUNAC CP &04 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&07)
CP &00
JP NZ,ERROR3
LD A,(IX+&06)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&05)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00)
LD (DRIVE5),A
LD (DRIVE6),A
LD (DRIVE7),A
LD A,(IX+&06)
LD (TETE00),A
LD A,(IX+&02)
LD L,A
LD A,(IX+&03)
LD H,A
LD (BUFFWR),HL
LD A,(IX+&04) ; ACQUISITION DU NUMERO DE PISTE A ECRIRE
LD (PISTE1),A
RLCA ; EFFECTUE LA MISE A JOUR POUR IBM
LD (PISTE0),A
DI
LD A,&01
CALL DRIVE ; MET LE MOTEUR SOUS TENSION
CALL TEMPOX ; ATTENDRE QUE LA VITESSE SOIT CORRECTE
LD DE,TABLEP
CALL KOMMPOS ; EFFECTUE LE DEPLACEMENT DE LA TETE
CALL TEMPOX ; ATTENDRE QUE LA TETE AIT FINI LE TRAVAIL
LD DE,TABWR
LD HL,(BUFFWR)
CALL KOMMFOR ; APPELLE DE LA COMMANDE D'ECRITURE
CALL TEMPOX ; ATTENDRE LE DELAI NECESSAIRE POUR L'ECRITURE
LD DE,TABLE0
CALL KOMMPOS ; EFFECTUE LE DEPLACEMENT VERS LA PISTE 00
CALL TEMPOX ; ATTENDRE QUE LA TETE AIT FINI LE TRAVAIL
XOR A
JP DRIVE
; --------------------------------------------------------------------
; ---------------------------------- RSX |PC.ECRIRE.035 --------------
; --------------------------------------------------------------------
RUNBC CP &04 ; VERIFIE LE NOMBRE ADEQUAT DE PARAMETRES
JP NZ,ERROR ; EXECUTE LA ROUTINE D'ERREUR
LD A,(IX+&07)
CP &00
JP NZ,ERROR3
LD A,(IX+&06)
AND A,&FE
JP NZ,ERROR3
LD A,(IX+&05)
CP &00
JP NZ,ERL2
LD A,(IX+&01)
CP &00
JP NZ,ERL1
LD A,(IX+&00)
AND A,&FC
JP NZ,ERL1
LD A,(IX+&00)
LD (DRIVE5),A
LD (DRIVE6),A
LD (DRIVE7),A
LD A,(IX+&06)
LD (TETE00),A
LD A,(IX+&02)
LD L,A
LD A,(IX+&03)
LD H,A
LD (BUFFWR),HL
LD A,(IX+&04) ; ACQUISITION DU NUMERO DE PISTE A ECRIRE
LD (PISTE0),A
LD (PISTE1),A
DI
LD A,&01
CALL DRIVE ; MET LE MOTEUR SOUS TENSION
CALL TEMPOX ; ATTENDRE QUE LA VITESSE SOIT CORRECTE
LD DE,TABLEP
CALL KOMMPOS ; EFFECTUE LE DEPLACEMENT DE LA TETE
CALL TEMPOX ; ATTENDRE QUE LA TETE AIT FINI LE TRAVAIL
LD DE,TABWR
LD HL,(BUFFWR)
CALL KOMMFOR ; APPELLE DE LA COMMANDE D'ECRITURE
CALL TEMPOX ; ATTENDRE LE DELAI NECESSAIRE POUR L'ECRITURE
LD DE,TABLE0
CALL KOMMPOS ; EFFECTUE LE DEPLACEMENT VERS LA PISTE 00
CALL TEMPOX ; ATTENDRE QUE LA TETE AIT FINI LE TRAVAIL
XOR A
JP DRIVE
; ---------------------------------------------------------------------
; ----------------------------------------- RSX |HELP.DISC ------------
; ---------------------------------------------------------------------
RUNG CP &00 ; Verifie aucun parametres
JP NZ,ERROR
XOR A
PUSH AF ; Sauvegarde A et les flags
PUSH AF
INC A
INC A
CALL MODE ; Installe le mode
POP AF ; Restitue A et les flags
LD B,A
LD C,B
CALL BORDURE ; Installe la bordure
POP AF
LD B,A
LD C,A
PUSH AF
CALL ENCRE ; Installe l'encre 0
POP AF
INC A
LD B,&1A
LD C,&1A
CALL ENCRE ; Installe l'encre 1
LD HL,MESSA6
JP BOUCLE
ERL1 LD HL,MESSA2 ; Message d'erreur drive
JP BOUCLE
ERL2 LD HL,MESSA3 ; Message d'erreur piste
JP BOUCLE
ERL3 LD HL,MESSA4 ; Message d'erreur secteur
JP BOUCLE
ERL4 LD HL,MESSA5 ; Message d'erreur secteur
JP BOUCLE
ERL5 LD HL,MESSA0 ; Message d'erreur lecteur
JP BOUCLE
ERROR3 LD HL,MESS3
JP BOUCLE
; ---------------------------------------------------------------------
; ---------------------------------- LISTE DES MESSAGES D'ERREURS -----
; ---------------------------------------------------------------------
MESSA0 DEFM "Type de lecteur errone"
DEFM 255
MESSA1 DEFM "Nombre incorrect de parametres"
DEFM 255
MESSA2 DEFM "Numero de drive errone "
DEFM 255
MESSA3 DEFM "Numero de piste errone "
DEFM 255
MESS3 DEFM "Numero de tete errone."
DEFM &FF
MESSA4 DEFM "Numero de secteur errone "
DEFM 255
MESSA5 DEFM "Nombre de secteur errone "
DEFM 255
; ---------------------------------------------------------------------
; ------------------------------------ MESSAGE D'AIDE -----------------
; ---------------------------------------------------------------------
MESSA6 DEFM " ",24,"DISC UTILITY V4.7",24," ",24,"J.P.B SYSTEM 1990 ",24,13,10
DEFM " ------------------ ----------------- ",13,10,10
DEFM "|SECTEUR.LIRE,< numero >,< piste >,< drive >,< adresse du buffer >",13,10
DEFM "|SECTEUR.ECRIRE,< numero >,< piste >,< drive >,< adresse du buffer >",13,10,10
DEFM "|PISTE.LIRE,< numero >,< premier secteur >,< nbre secteur >,< drive >,< adresse buffer >",13,10
DEFM "|PISTE.ECRIRE,< numero >,< premier secteur >,< nbre secteur >,< drive >,< adresse buffer >",13,10
DEFM "|PISTE.POSITION.0,< drive >",13,10,10
DEFM "|FORMATER,< piste >,< premier secteur >,< nombre de secteur >,< drive >",13,10
DEFM "|FORMATAGE,< type de lecteur en decimal >,< numero du secteur >,< drive >",13,10,10
DEFM "|PC.LIRE.525,< numero de tete >,< numero de piste du PC >,< buffer >,< drive >",13,10
DEFM "|PC.ECRIRE.525,< numero de tete >,< numero de piste du PC >,< buffer >,< drive >",13,10
DEFM "|PC.FORMATAGE.525,< numero de tete >,< numero de piste du PC >,< drive >",13,10,10
DEFM "|PC.LIRE.035,< numero de tete >,< numero de piste >,< buffer >,< drive >",13,10
DEFM "|PC.ECRIRE.035,< numero de tete >,< numero de piste >,< buffer >,< drive >",13,10
DEFM "|PC.FORMATAGE.035,< numero de tete >,< numero de piste >,< drive >",13,10,10
DEFM 255
MESSA7 DEFM 13,10," DISC UTILITY V4.7 Installed .",13,10,10
DEFM 255
; ---------------------------------------------------------------------
; ----------------- ENSEMBLE DES TABLES POUR LES COMMANDES FDC --------
; ---------------------------------------------------------------------
; EMPLACEMENT DES LABELS
; ----------------------
MOTEUR EQU &FA7E ; COMMANDE DU MOTEUR DU LECTEUR
REGSTA EQU &FB7E ; REGISTRE DE STATUS PRINCIPAL
KERNEL EQU &BCD1 ; INTRODUCTION D'UNE RSX
ECRIT EQU &BB5A ; ECRITURE D'UN CARACTERE
MODE EQU &BC0E
BORDURE EQU &BC38
ENCRE EQU &BC32
POST DEFM &52,&C6,&07 ; Adresse ROM7 FORMAT TRACK
BOUTON DEFM &66,&C6,&07 ; Adresse ROM7 READ SECTOR
MALIN DEFM &4E,&C6,&07 ; Adresse ROM7 WRITE SECTOR
; ----------------------------------
; TABLES DE COMMANDE DE |PC.LIRE.xxx
; ----------------------------------
BUFFRD DEFS &02
TRACKY DEFS &01
TABRE DEFM &09 ; NOMBRE DE PARAMETRES POUR LA LECTURE D'UNE PISTE
DEFM &46 ; CODE OPERATION DE LA LECTURE D'UNE PISTE
DRIVE0 DEFS &01 ; DRIVE SELECTIONNE
TRAC1 DEFS &01 ; NUMERO DE LA PISTE A ETUDIER C
TETE0 DEFS &01 ; TETE SELECTIONNEE H
DEFM &01 ; NUMERO DU PREMIER SECTEUR R
DEFM &02 ; NOMBRE DE DONNEES ECRITES DANS UN SECTEUR N
DEFM &09 ; NUMERO DU DERNIER SECTEUR DE LA PISTE
DEFM &50 ; VALEUR DU GAP
DEFM &00 ; VALEUR SI N=00 ICI LA DOC SPECIFY &FF
TABLE11 DEFM &03 ; NOMBRE DE PARAMETRES
DEFM &0F ; CODE OPERATION POSITIONNEMENT
DRIVE1 DEFS &01 ; DRIVE SELECTIONNE
TRACK DEFS &01 ; NUMERO DE LA PISTE A ETUDIER
TABLE4 DEFM &02 ; NOMBRE DE PARAMETRES
DEFM &07 ; CODE OPERATION POSITIONNEMENT PISTE 00
DRIVE2 DEFS &01 ; DRIVE SELECTIONNE
; -------------------------------------
; TABLES DE COMMANDES DE |PC.ECRIRE.xxx
; -------------------------------------
BUFFWR DEFS &02
TABLE0 DEFM &02 ; NOMBRE DE PARAMETRES
DEFM &07 ; CODE OPERATION POSITIONNEMENT PISTE 00
DRIVE5 DEFS &01 ; DRIVE SELECTIONNE
TABLEP DEFM &03 ; NOMBRE DE PARAMETRES POUR LE POSITIONNEMENT
DEFM &0F ; CODE OPERATION COMMANDE DE POSITIONNEMENT
DRIVE6 DEFS &01 ; DRIVE SELECTIONNE
PISTE0 DEFS &01 ; PISTE COURANTE
TABWR DEFM &09 ; NOMBRE DE PARAMETRES POUR L'ECRITURE D'UNE PISTE
DEFM &45 ; CODE OPERATION COMMANDE D'ECRITURE
DRIVE7 DEFS &01 ; DRIVE SELECTIONNE
PISTE1 DEFS &01 ; NUMERO DE LA PISTE VUE DE LA TETE C
TETE00 DEFM &00 ; NUMERO DE LA TETE COURANTE H
DEFM &01 ; NUMERO DU PREMIER SECTEUR R
DEFM &02 ; NOMBRE DE DONNEES ECRITES SUR UN SECTEUR N
DEFM &09 ; NUMERO DU DERNIER SECTEUR
DEFM &50 ; VALEUR DU GAP
DEFM &00 ; VALEUR DE DTL SI N=00
; ----------------------------------------
; TABLES DE COMMANDES DE |PC.FORMATAGE.xxx
; ----------------------------------------
TABLP DEFM &03 ; NOMBRE DE PARAMETRES POUR LE POSITIONNEMENT
DEFM &0F ; CODE OPERATION COMMANDE DE POSITIONNEMENT
DRIVE3 DEFS &01 ; DRIVE SELECTIONNE
TRACK0 DEFS &01 ; NUMERO DE PISTE POUR LE FDC
TABLEE DEFM &06 ; NOMBRE DE PARAMETRES POUR LE FORMATAGE
DEFM &4D ; CODE OPERATION COMMANDE DE FORMATAGE
DRIVE4 DEFS &01 ; DRIVE SELECTIONNE
DEFM &02 ; TAILLE DU SECTEUR
DEFM &09 ; NOMBRE DE SECTEURS PAR PISTE
DEFM &50 ; LONGUEUR DU GAP
DEFM &F6 ; OCTET DE FORMATAGE
TRACK1 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE1 DEFS &01 ; NUMERO DE LA TETE H
DEFM &01 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK2 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE2 DEFS &01 ; NUMERO DE LA TETE H
DEFM &02 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK3 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE3 DEFS &01 ; NUMERO DE LA TETE H
DEFM &03 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK4 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE4 DEFS &01 ; NUMERO DE LA TETE H
DEFM &04 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK5 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE5 DEFS &01 ; NUMERO DE LA TETE H
DEFM &05 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK6 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE6 DEFS &01 ; NUMERO DE LA TETE H
DEFM &06 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK7 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE7 DEFS &01 ; NUMERO DE LA TETE H
DEFM &07 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK8 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE8 DEFS &01 ; NUMERO DE LA TETE H
DEFM &08 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
TRACK9 DEFS &01 ; NUMERO DE LA PISTE A FORMATER VUE DE LA TETE C
TETE9 DEFS &01 ; NUMERO DE LA TETE H
DEFM &09 ; NUMERO DE CE SECTEUR R
DEFM &02 ; NOMBRE D'OCTETS DANS CE SECTEUR N
DEFM &FF ; FLAG INDIQUANT LA FIN DE TABLE REQFOUR
RESUL DEFS 14
; --------------------------------
; TABLE DE COMMANDES DE |FORMATAGE
; --------------------------------
TABLE2 DEFM 0,0,0,2
TABLE3 DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
DEFM 0,0,0,2
; ---------------------------------------
; TABLE DE COMMANDES DE |PISTE.POSITION.0
; ---------------------------------------
TARC DEFM &02 ; NOMBRE DE PARAMETRES
DEFM &07 ; CODE OPERATION DU RECALIBRAGE
RECALI DEFS &01 ; RESERVE UNE PLACE POUR LE LECTEUR ACTIF
; -------------------------------
; TABLE DE COMMANDES DE |FORMATER
; -------------------------------
TABLE1 DEFS 104