; --------------------------------------------------------------------------------------------------------------
; -- --
; -- RSX POUR UTILITAIRE DE DISQUETTE --
; -- --
; -- ùSECTEUR.LIRE,<numero>,<piste>,<drive>,<adresse du buffer> --
; -- --
; -- ùSECTEUR.ECRIRE,<numero>,<piste>,<drive>,<adresse du buffer> --
; -- --
; -- ùPISTE.LIRE,<numero>,<premier secteur>,<nombre de secteur>,<drive>,<adresse du buffer> --
; -- --
; -- ùPISTE.ECRIRE,<numero>,<premier secteur>,<nombre de secteur>,<drive>,<adresse du buffer> --
; -- --
; -- ùFORMATER,<piste>,<premier secteur>,<nombre de secteur>,<drive> --
; -- --
; -- ùFORMATAGE,<type de lecteur en decimal>,<numero du secteur>,<drive> --
; -- --
; -- VERSION 4.0 (C) J.P.B SYSTEM 1989 --
; -- --
; --------------------------------------------------------------------------------------------------------------
;
ORG &9600 ; Debut de l'assemblage
LD HL,BUFFA
LD BC,TABLE
CALL KERNEL ; Definition des RSX
LD HL,MESSA7
STYZ LD A,(HL)
CP 255
RET Z
CALL ECRIT
INC HL
JR STYZ
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 RUNE ; Saut au programme 5
JP RUNF ; Saut au programme 6
JP RUNG ; Saut au programme 7
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 "FORMATE","R"+128 ; Definition du nom 5
DEFM "FORMATAG","E"+128 ; Definition du nom 6
DEFM "HELP.DIS","C"+128 ; Definition du nom 7
RUNA CP 4 ; Verifie les 4 parametres
JR Z,SUITE
ERROR LD HL,MESSA1 ; Pas assez de parametres
BOUCLE LD A,(HL)
CP 255
RET Z
CALL ECRIT
INC HL
JR BOUCLE
SUITE CALL FETAR ; Debut de la premiere RSX
JR INTERA
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
INTERA 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
RET ; Fin et retour BASIC
MODE EQU &BC0E
BORDURE EQU &BC38
ENCRE EQU &BC32
ECRIT EQU &BB5A
KERNEL EQU &BCD1
RUNB CP 4
JR NZ,ERROR
CALL FETAR ; Verifie l'exactitude des parametres
LD H,(IX+1)
LD L,(IX+0)
LD E,(IX+2)
LD D,(IX+4)
LD C,(IX+6)
RST &18
DEFW MALIN
RET
RUNC CALL VERI0 ; Verification des bons parametres
CP 255
RET Z
JR DEB0
RUND CALL VERI0 ; Verification des bons parametres
CP 255
RET Z
JR DEB1
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
DEB0 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
RET
DEB1 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
RET
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
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 determine par IX+4
JR NZ,NOIR
RET
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
SYSZ LD A,(HL) ; Charge dans A le contenu de
CP &FF ; HL et incremente le pointeur
RET Z ; jusqu'a la fin de l'ecriture
CALL ECRIT
INC HL
JR SYSZ
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
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
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
MESSA4 DEFM "Numero de secteur errone "
DEFM 255
MESSA5 DEFM "Nombre de secteur errone "
DEFM 255
MESSA6 DEFM 10 ; Message d'aide pour utilisateur
DEFM " ",24,"DISC UTILITY V4.0",24,13,10
DEFM " ------------------",13,10,10
DEFM " ******************************",13,10
DEFM " ** (C) J.P.B SYSTEM 1989 **",13,10
DEFM " ******************************",13,10,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,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,10
DEFM 255
MESSA7 DEFM 13,10," DISC UTILITY V4.0 Installed .",13,10,10
DEFM 255
TABLE2 DEFM 0,0,0,2 ; Emplacement reserve pour la table
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
TABLE1 DEFM 0 ; Derniere table pour le formatage