NOLIST
ORG 38000 ;------------------ ;- INITIALISATION - ;------------------ CALL INIPROG RECTSDR CALL MOTON CALL TST2DR CALL MOTOFF CALL OUNO JR NC,RECTSDR ; ;- Affichage menu - ; MENU LD HL,TMENU CALL PRT CALL PRTDRIV TSTMENU CALL MOTOFF CALL #BB06 PUSH AF CALL MOTON RETERR LD HL,TEFFLB1 CALL PRT LD HL,TCOMMAN LD IY,#0218 CALL PRTLOC CALL RAZINTE POP AF AND #DF CP "A" CALL Z,TST2DR CP "B" CALL Z,CHGDRIV CP "C" CALL Z,TROICON CP "D" CALL Z,GOZERO CP "E" CALL Z,GOPISTE CP "Q" JR NZ,TSTMENU LD HL,TQUIT CALL PRT CALL OUNO JP C,MOTOFF JR TSTMENU ; TCOMMAN DEFB 18,24," COMMANDE : ",24," ?",7,8,8+#80 TQUIT DEFB " Fini"," "+#80 ;--------------------------- ;- ROUTINE TESTER 2 DRIVES - ;--------------------------- TST2DR LD HL,TCOMDRV CALL PRT LD A,(DRSELEC) ;Pres.Dr. en cours PUSH AF XOR A LD (DRSELEC),A ;DR.A ; ;- Effectuer un test pour A et 1 pour B - ; TST2DR1 CALL CALIBRE CALL TSTDRIV LD A,1 LD (DRSELEC),A ;Dr.B RECALI CALL CALIBRE ;Test si actif CP #80 ;Si test etat apres CALIBRE=#80 JR NZ,BALLUME ;B connecte mais eteint ; LD HL,TJEVEUB ;Interdire B:ETEINT CALL AFFERR JR RECALI ; BALLUME CALL TSTDRIV ;ET3=1=B debranche ; ;- Afficher l'etat drives - ; AFRESDR LD A,"A" ;Drive A LD DE,ETDRA ;ET3 pour drive A ; LD HL,TETDRV1 BCLAFRD PUSH AF PUSH AF CALL PRT POP AF CALL INV CALL #BB5A ;A ou B CALL SPACE CALL INV LD A,(DE) ;ETDRA ou B CP #1 ;Si 1 . B HS. JR Z,DRBHS BIT 5,A ;BIT 5 ET3=D.Miss. JR NZ,DREADY LD HL,TMISS CALL PRT ;Aff.D.Miss. et fini JR FINDRIV DREADY LD HL,TPROT BIT 6,A ;BIT 6 JR NZ,OUIPROT ;1=WP LD HL,TNOPROT ;0=OK OUIPROT CALL PRT LD HL,TECRIT CALL PRT LD HL,TPISTZ DRBHS CALL PRT ; FINDRIV CALL CR POP AF CP "B" JR Z,FINDR1 INC DE INC A LD HL,TETDRIV JR BCLAFRD FINDR1 POP AF ;Recuperer Dr.en cours LD (DRSELEC),A RET ; TCOMDRV DEFB " Tester Drives"," "+#80 TETDRV1 DEFB 31,1,1 TETDRIV DEFB 24," Etat lecteur : ",24,18+#80 DEFB " Pas de lecteur",7+#80 TMISS DEFB " Disque manque !",7+#80 TPROT DEFB " Prot","."+#80 TNOPROT DEFB " Read","y"+#80 TECRIT DEFB " Ecritur","e"+#80 TPISTZ DEFB " Sur piste : &0","0"+#80 TDRSELE DEFB 31,1,3,24," Drive choisi : A ",24+#80 TJEVEUB DEFB 24," ALLUMER DRIVE B ! ",24,7,13+#80 ;----------------------------- ;- Changer le drive en cours - ;----------------------------- CHGDRIV LD A,(DRSELEC) DEC A JR Z,DR0 ;1=0 LD A,(ETDRB) ;Test si B OK CP 1 RET Z LD A,1 JR DR1 DR0 XOR A DR1 LD HL,TCHGDR CALL PRT LD (DRSELEC),A ADD A,#41 ;Dec.ASC LD HL,TDRSELE+20 LD (HL),A ;Modif. text Dr. SUB #41 ;Aff. JP PRTDRIV TCHGDR DEFB " Change drive"," "+#80 ;-------------------- ;- ALLER EN PISTE 0 - ;-------------------- GOZERO LD A,"0" CALL PRTGO CALL CALIBRE PRTRES1 PUSH AF ;Preserver flag RESULT CALL PRTBIN ;Aff.ET0 LD HL,TPSFIND CALL PRT LD A,(ET1) ;Piste CALL PRTHEX1 CALL AFFPIST POP AF ;Recuperer flag JR NC,ERRPIST ; INCPTPIS LD HL,PISTDRA ;Avance LD A,(ET1) ;piste B JR INCPTR INCPTET3 LD HL,ETDRA INCPTR PUSH AF CALL QUELDRV POP AF LD (HL),A RET ; AFFPIST PUSH HL ;Aff.P.face Dr. PUSH AF LD HL,#3001 CALL QUELDRV CALL #BB75 POP AF POP HL JP PRTHEX1 ; QUELDRV LD A,(DRSELEC) ;Inc. HL si B select. OR A RET Z INC HL RET ; PRTGO LD HL,TGOZERO CALL PRT CALL #BB5A JP SPACE ; ERRPIST LD HL,TERRPIS JP PRTLOC2 ; TERRPIS DEFB 24," ERREUR : ",24," Pas trouve piste ",7,13+#80 TGOZERO DEFB " Aller en piste : ","&"+#80 TPSFIND DEFB " Sur piste : " ,"&"+#80 ;--------------------------- ;- PLACER TETE SUR PISTE N - ;--------------------------- GOPISTE LD A,"N" ;Aff. CALL PRTGO CALL #BB78 ;Memo.Pos.Cur. PUSH HL NEWNUM LD HL,TQUELPS ;Input P. CALL INPUPRT2 LD A,(PISTMAX) ;Test. > maxi LD B,A LD A,(VALEUR) CP B JR NC,NEWNUM ;Oui CALL EFFLIN1 ;Non Eff.Input LD (PISTSEL),A POP HL ;Pos.Cur. DEC H ;Reculer de 2 DEC H CALL #BB75 LD A,(PISTSEL) CALL PRTHEX1 ;Aff.Num. ; LD A,(NBTENT) LD B,A BCLPIST CALL GOPISTN JR C,SURPIST ;Si CARRY OK DEC B JR Z,FINPIS1 ;Echec apres N tent.Fini CALL RAZINTE CALL CALIBRE JR BCLPIST ; SURPIST PUSH AF LD A,(PISTSEL) ;Pas erreur FDC PUSH BC LD B,A ;Verifier piste LD A,(ET1) CP B POP BC JR Z,FINPIST ;OK POP AF DEC B JR NZ,BCLPIST ;Si Z fini et erreur FINPIST POP AF FINPIS1 PUSH AF LD HL,TRETRY CALL PRT LD A,(NBTENT) DEC B SUB B CALL PRTHEX1 POP AF JP PRTRES1 ; TQUELPS DEFB 18,"Numero de piste ?"," "+#80 TRETRY DEFB " Tentatives : ","&"+#80 ; ;*************************** ;*** ANALYSE DES ERREURS *** ;*************************** ; ; ;****************** ;*** DIVERS FDC *** ;****************** ;---------------------------------------------- ;- TEMPORISATION DE A*27 Ms . STANDARD AMSDOS - ;---------------------------------------------- TEMPAMS PUSH AF LD A,12 CALL TEMPMIL POP AF DEC A JR NZ,TEMPAMS LD A,15 CALL TEMPMIL JR LITSTAT ; TEMPMIL PUSH AF LD A,#F6 BCLTEMP DEC A JR NZ,BCLTEMP POP AF DEC A JR NZ,TEMPMIL RET ;--------------------------- ;- RAZ CAUSES INTERRUPTION - ;--------------------------- RAZINTE CALL LITSTAT CP #80 JR NZ,RAZINTE RET ; ;***************************** ;*** COMMANDES POUR LE FDC *** ;***************************** ;--------------------- ;- TESTER ETAT DRIVE - ;--------------------- TSTDRIV CALL RAZINTE LD A,4 CALL INSTRU1 ;Ins.+ dr. CALL RESULT JP INCPTET3 ;---------------------------- ;- LIRE CAUSE INTERRUPTIONS - ;---------------------------- LITSTAT LD A,#08 CALL ENVOFDC JP RESULT ;--------------------------- ;- PLACER TETE SUR PISTE 0 - ;--------------------------- CALIBRE LD A,7 CALL INSTRU1 TEMP1 LD A,(WAITPIS) JP TEMPAMS ;----------------------- ;- PLACER TETE PISTE N - ;----------------------- GOPISTN LD A,#F CALL INSTRU ;Ins.Dr.Ps. JR TEMP1 ;*************************** ;*** ROUTINES E/S DU FDC *** ;*************************** ;- Ins.Dr.P.- ; INSTRU CALL ENVOFDC LD DE,(DRSELEC) ;E=Dr.D=P. LD A,E CALL ENVOFDC LD A,D HOP JP ENVOFDC ; ;- Idem drive - ; INSTRU1 CALL ENVOFDC LD A,(DRSELEC) JR HOP ;----------------------------------------------------------------------------- ;- PHASE INSTRUCTION DU FDC . Attendre que le FDC soit pret et envoyer octet - ;----------------------------------------------------------------------------- ;--- Attendre que le FDC soit pret --- ; ENVOFDC PUSH BC LD BC,#FB7E PUSH AF PUSH AF DI WAITFDC IN A,(C) ADD A,A JR NC,WAITFDC ADD A,A JR NC,VEUTOCT EI POP AF POP AF POP BC RET ; ;--- Transmettre un octet instruction au FDC --- ; VEUTOCT POP AF INC C OUT (C),A DEC C LD A,5 DIGERE DEC A NOP JR NZ,DIGERE EI POP AF POP BC RET ;----------------------------------------------------------------------------- ;- PHASE EXECUTION ECRITURE . ENVOYER TOUS LES OCTETS DE DONNEES NECESSAIRES - ;----------------------------------------------------------------------------- ; ;--- Envoyer un octet de donnee au FDC --- ; WRITFDC LD HL,(ADBUFF) WRITFDC1 LD BC,#FB7E DI JR TESTFDC ; BCLWRT INC C LD A,(HL) OUT (C),A DEC C INC HL ; ;--- Tester si FDC Ready on est ici sur #FB7E registre d'etat --- ; TESTFDC IN A,(C) JP P,TESTFDC AND #20 JR NZ,BCLWRT EI RET ;-------------------------------------------------------------------- ;- PHASE EXECUTION LECTURE . LIRE TOUS LES OCTETS DE DONNEES VOULUS - ;-------------------------------------------------------------------- LITFDC LD HL,(ADBUFF) LITFDC1 LD DE,(NBALIRE) LD BC,#FB7E DI JR TSTFDC1 ; BCLLITF DEC DE LD A,E OR D JR Z,TSTFDC1 INC C IN A,(C) LD (HL),A DEC C INC HL TSTFDC1 IN A,(C) JP P,TSTFDC1 AND #20 JR NZ,BCLLITF EI RET ;------------------------------------------------------ ;- EXTRAIRE ET RANGER LES OCTETS DE LA PHASE RESULTAT - ;------------------------------------------------------ RESULT PUSH BC LD BC,#FB7E PUSH HL PUSH DE LD D,0 LD HL,ET0 PUSH HL DI JEBOSSE IN A,(C) CP #C0 JR C,JEBOSSE INC C IN A,(C) LD (HL),A INC HL INC D DEC C LD A,5 TEMPRES DEC A JR NZ,TEMPRES IN A,(C) AND #10 JR NZ,JEBOSSE POP HL LD A,(HL) AND #C0 DEC HL LD (HL),D POP DE POP HL POP BC EI LD A,(ET0) RET NZ SCF RET ;-------------------- ;- COMMANDE MOTEUR - ;-------------------- MOTON LD A,(FLAGMOT) CP 1 RET Z LD A,1 CALL MOTCOM LD A,(TEMPMOT) ;Mini 55 JP TEMPAMS MOTCOM LD (FLAGMOT),A LD BC,#FA7E OUT (C),A RET MOTOFF XOR A JR MOTCOM ;-------------------------- ;- SOUS PROGRAMMES DIVERS - ;-------------------------- ;- Initialisation programme - ; INIPROG LD BC,#0000 CALL #BC38 LD BC,0 XOR A CALL #BC32 LD A,1 LD BC,#0F0F CALL #BC32 XOR A CALL #BB96 LD A,1 CALL #BB90 LD A,2 CALL #BC0E XOR A LD (DRSELEC),A ADD A,#41 LD HL,TDRSELE+20 LD (HL),A TYPE CALL #B900 LD A,(#DE01) CP #71 JR Z,L464 CP #C9 JR NZ,L664 L6128 LD HL,#BD5E JR INIT L664 LD HL,#BD5B JR INIT L464 LD HL,#BD3A INIT LD (EDIT1+1),HL CALL #B903 LD A,41 LD (WAITPIS),A LD HL,TUS JP PRT ; INPUPRT2 CALL PRTLOC2 ;Inp.Nb.5 Ch.Hex("&") INPUNB PUSH HL PUSH DE PUSH BC PUSH AF LD HL,0 LD (VALEUR),HL LD HL,BUFFNB ;RAZ BUFFNB LD B,5 RAZBNB LD (HL),"0" INC HL DJNZ RAZBNB LD HL,TTXEDIT LD (HL),0 CALL EDITNB ; DECI LD HL,TTXEDIT LD A,(LENEDIT) ;Tst.non deci LD B,A BCLDECI LD A,(HL) INC HL CP "&" JR Z,HEXA CP "0" JR C,RECNB CP "@" JR NC,RECNB DJNZ BCLDECI JR OKDECI RECNB CALL CHVIDE JR DECI OKDECI CALL RANGENB LDIR ; ASCDECI LD C,5 LD HL,BUFFNB LD IX,DIXMILL SUIVANT LD A,(HL) CP "0" JR NZ,PASZERO CONT INC IX INC IX INC HL DEC C JR Z,EXITNB JR SUIVANT PASZERO LD E,(IX+0) LD D,(IX+1) SUB #30 LD B,A PUSH HL LD HL,(VALEUR) ADDI ADD HL,DE DJNZ ADDI LD (VALEUR),HL POP HL JR CONT ; DIXMILL DEFW 10000 MILLE DEFW 1000 CENT DEFW 100 DIX DEFW 10 UN DEFW 1 ; HEXA DEC B BCLHEXA LD A,(HL) CP "0" JR C,RECNB CP "G" JR NC,RECNB INC HL DJNZ BCLHEXA CALL RANGENB INC HL DEC C LDIR ; HEXVAL LD IX,BUFFNB LD DE,4096 LD HL,0 LD B,4 BCLHXVA LD A,(IX+0) SUB #30 CP 10 JR C,BCLCALC SUB 7 BCLCALC OR A JR Z,FINCALC ADD HL,DE DEC A JR BCLCALC FINCALC PUSH BC LD B,4 DIVIS SRL D RR E DJNZ DIVIS POP BC INC IX DJNZ BCLHXVA LD (VALEUR),HL EXITNB POP AF POP BC POP DE POP HL RET ; RANGENB LD A,(LENEDIT) ;NB dans BUF compl.vides par 0 LD C,A LD B,0 LD A,5 SUB C LD D,0 LD E,A LD HL,BUFFNB ADD HL,DE EX DE,HL LD HL,TTXEDIT RET ; EDITNB LD A,5 LD (MAXEDIT),A EDIT CALL #BB78 LD (CURPOS),HL REFAIRE LD HL,TTXEDIT CALL #B900 EDIT1 CALL #BD3A CALL #B903 LD B,0 LD HL,TTXEDIT COMPTE LD A,(HL) OR A JR Z,FINI INC B INC HL JR COMPTE FINI LD A,B LD (LENEDIT),A OR A JR Z,CHVIDE LD A,(MAXEDIT) CP B RET NC CHVIDE LD A,7 CALL #BB5A LD HL,(CURPOS) CALL #BB75 JR REFAIRE ; PRTBIN2 LD A,H ;16B CALL PRTBIN LD A,L ; PRTBIN PUSH BC ;8B PUSH AF LD C,A LD B,8 BCLBIN LD A,#30 RLC C JR NC,BINZERO INC A BINZERO CALL #BB5A DJNZ BCLBIN POP AF POP BC JP SPACE ; PRTHEX2 LD A,"&" CALL #BB5A LD A,H CALL PRTHEX1 ;16B LD A,8 CALL #BB5A LD A,L ; PRTHEX1 PUSH AF ;8B PUSH AF RRCA RRCA RRCA RRCA CALL AFFHEX POP AF CALL AFFHEX POP AF JP SPACE ; AFFHEX AND #F ADD A,#30 CP #3A JR C,OKHEX ADD A,7 OKHEX JP #BB5A ; PRTDECI PUSH HL PUSH DE PUSH BC PUSH AF LD HL,(VALEUR) DEC1 LD B,5 DEC2 LD IY,DIXMILL CONDEC LD E,(IY+0) LD D,(IY+1) LD A,#30 CALCUL AND A SBC HL,DE JR C,CARRY INC A JR CALCUL CARRY CALL #BB5A ADD HL,DE INC IY INC IY DJNZ CONDEC FINCONV POP AF POP BC POP DE POP HL JP SPACE ; TROICON LD HL,TCONVER CALL PRT CALL INPUNB LD HL,TCON2 CALL PRT LD HL,(VALEUR) CALL PRTBIN2 CALL PRTHEX2 CALL PRTDECI RET ; TCONVER DEFB " CONVERTIR ?"," "+#80 TCON2 DEFB " ="," "+#80 ; LIST VALEUR DEFW 0 NOLIST BUFFNB DEFS 5 TTXEDIT DEFS 256,0 MAXEDIT DEFB 0 LENEDIT DEFB 0 CURPOS DEFW 0 ; ;- Affichage - ; PRTCR CALL PRT ;SL+CR JR CR ; PRTLOC2 LD IY,#0217 ;Aff.Av.Der.L. PRTLOC PUSH AF PUSH HL PUSH IY POP HL CALL #BB75 POP HL JR BCLPRT ; PRTDRIV PUSH HL ;Aff.drive LD HL,TDRSELE CALL PRT POP HL RET ; PRT PUSH AF BCLPRT LD A,(HL) CP #80 JR NC,FINPRT CALL #BB5A INC HL JR BCLPRT FINPRT AND %01111111 INC HL PRT2 CALL #BB5A POP AF RET ; CR PUSH AF LD A,10 CALL #BB5A LD A,13 JR PRT2 ; SPACE PUSH AF LD A,32 JR PRT2 ; INV PUSH AF LD A,24 JR PRT2 ; EFFLIN1 PUSH AF LD A,13 CALL #BB5A JR EF1 EFFLINE PUSH AF EF1 LD A,18 JR PRT2 ; OUNO PUSH HL LD HL,TOUNO CALL PRT POP HL CALL #BB06 CALL EFFLINE AND #DF ;Majuscules CP "N" RET Z CP "O" ;Oui = CARRY mis JR NZ,OUNO SCF RET ; TOUNO DEFB 24," OK ? (O/N) ",24,7,13+#80 ; AFFERR LD IY,#0218 CALL PRTLOC CALL #BB06 XOR A JP EFFLINE ; CALE DEFS 40000-CALE ; LIST FLAGMOT DEFB 0 NOLIST ADBUFF DEFW 0 NBALIRE DEFW 0 ;Nb.oct. a lire ROMANT DEFW 0 ; ;- Resultat - ; ETOCLUS DEFB 0 ET0 DEFB 0 ET1 DEFB 0 ET2 DEFB 0 ETPIST DEFB 0 ETHEAD DEFB 0 ETNUMSEC DEFB 0 ETLENSEC DEFB 0 ; DRSELEC DEFB 0 PISTSEL DEFB 0 ;Ne rien inserer entre les 2 ! DERPIST DEFB 0 ;P.fin pour op. multipi. PISTMAX DEFB 42 ;P. a pas dep. WAITPIS DEFB 41 ;Temp.Dep.Head NBTENT DEFB 4 ;Nb.Retry TEMPMOT DEFB 55 ; LIST ETDRA DEFB 0 ;ET3 A et B ETDRB DEFB 0 ;Ne rien inserer ; PISTDRA DEFB 0 ;P. A et B PISTDRB DEFB 0 ;Ne rien inserer NOLIST ; TUS DEFB 24," SOS PROGRAMMEURS - Etude du FDC - (C) M.MAIGROT Nov 88 " DEFB 24,26,0,79,1,24+#80 TEFFLB1 DEFB 31,1,23,18+#80 ; TMENU DEFB 31,1,5," [A] Tester etat drive ",10,13 DEFB " [B] Bascule drive A/B ",10,13 DEFB " [C] Convers.numerique ",10,13 DEFB " [D] Aller en piste 0 ",10,13 DEFB " [E] Aller en piste ? ",10,13 DEFB " [Q] Quitter programme ",10,13+#80 LIST DEFB 0-------------- ;- INITIALISATION - ;------------------ CALL INIPROG RECTSDR CALL MOTON - Etude du FDC - (C) M.MAIGROT Nov 88 " DEFB 24,26,0,79,1,24+#80 TEFFLB1 DEFB 31,1,23,18+#80 ; TMENU DEFB 31,1,5," [A] Tester etat drive ",10,13 DEFB " [B] Bascule drive A/B ",10,13 DEFB " [C] Convers.numerique ",10,13 DEFB " [D] Aller en piste 0 ",10,13 DEFB " [E] Aller en piste ? ",10,13 DEFB " [Q] Quitter programme ",tre ces 2 DEFB NOLIST ;-------------------------- ;- TEXTES DE PRESENTATION - ;-------------------------- TUS DEFB 24," SOS PROGRAMMEURS - Etude du FDC - (C) M.MAIGROT Nov 88 " DEFB 24,26,0,79,1,24+#80 TEFFLB1 DEFB 31,1,23,18+#80 ; ;- Textes du menu principal - ; TMENU DEFB 31,1,5," [A] Tester etat drive ",10,13 DEFB " [B] Bascule drive A/B ",10,13 DEFB " [C] Convers.numerique ",10,13 DEFB " [D] Aller en piste 0 ",10,13 DEFB " [E] Aller en piste |