;**************************************************************** ;* Z80 Micro System * ;* ROM V1.5 * ;* 1999/2000 by Jeff / HxC2001 * ;**************************************************************** .ORG 0 DI ;Point de depart LD SP,RAMTOP ;Pointeur de pile … la fin de la RAM IM 1 ;Mode d'interruption 1 JP $100 ;Saut … la suite du programme IDROM: .byte " Z80 Micro System ROM V1.5 ",0 ;>>>>>>>>>>>>>>>>>>>>>>>>>INTERRUPTION HARDWARE<<<<<<<<<<<<<<<<<<<<<<<<< .ORG $38 ; Int mode 1 DI ;inhibition de la broche INT (Disable Interrupt) EX AF,AF' ;Sauvegarde des registres EXX PUSH HL LD HL,INTCOUNT1 INC (HL) JP Z,JPINT001 JP JPINT002 JPINT001: INC HL INC (HL) JP Z,JPINT051 JP JPINT002 JPINT051: INC HL INC (HL) JP Z,JPINT061 JP JPINT002 JPINT061: INC HL INC (HL) JPINT002: LD A,1 LD HL,IRQSTAT LD (HL),A POP HL IN A,(UART2) AND 00000001B ;L'Int viens de l'Uart? CALL Z,GESTINTUARTPROC ;Si oui alors appel de la routine ;de L'Uart LD A,$C ;L'Int viens du RTC? OUT (RTCADR),A IN A,(RTCIO) LD C,A AND 10000000B CALL NZ,GESTINTRTCPROC ;Si oui alors appel de la Routine ;de gestion du RTC LD A,(EXTHANDLER) ;Y a t'il une extension d'INT? CP 1 JP NZ,FININTGEST ;Si non alors fin de l'Int LD A,(EXTHANDLERADR) ;Recuperation de l'adresse de LD B,A ;l'extension LD A,(EXTHANDLERADR + 1) LD C,A LD HL,POINTDERETOUROUTEXT PUSH AF ;Sauvegarde des registres PUSH BC PUSH DE PUSH HL PUSH HL PUSH BC RET ;Appel POINTDERETOUROUTEXT: POP HL ;Restauration des registres POP DE POP BC POP AF FININTGEST: EX AF,AF' ;Restauration des registres EXX EI RETI ;Retour a programme interronpu GESTINTUARTPROC: ;Procedure de gestion de l'uart PUSH BC PUSH HL PUSH HL LD HL,INTCOUNT2 INC (HL) JP Z,JPINT001b JP JPINT002b JPINT001b: INC HL INC (HL) JP Z,JPINT051b JP JPINT002b JPINT051b: INC HL INC (HL) JP Z,JPINT061b JP JPINT002 JPINT061b: INC HL INC (HL) JPINT002b: POP HL LD HL,UARTSTATUS LD A,1 LD (HL),A ;Registres systŠme Buffer chang‚ LD HL,UARTBUFFER PUSH HL POP BC LD A,(UARTPOINTEURBUFFERE) ADD A,C LD C,A PUSH BC POP HL RX_BUSYLPB: IN A,(UART5) BIT 0,A JP Z,RX_BUSYLPB ;Uart pret pour la R‚ception? IN A,(UART0) ;Lecture du caractŠre re‡u LD (HL),A ;plac‚ dans le buffer LD A,(UARTPOINTEURBUFFERE) ;Deplacement du pointeur d'ecriture du Buffer INC A LD C,A LD A,(UARTPOINTEURBUFFERL) CP C ;Comparaison avec le pointeur de lecture JP Z,BUFFERPLEIN ;Pointeur lecture =Pointeur Ecriture ? si oui Buffer plein LD A,C CP 13 ;On est arriv‚ a la fin de la boucle?si oui retour JP NZ,FERMELABOUCLE ;(C'est un buffer Cyclique) LD A,0 FERMELABOUCLE: LD (UARTPOINTEURBUFFERE),A BUFFERPLEIN: POP HL POP BC RET ;Fin de la procedure ;>>>>>>>>>>>>>>>>>>>>>>>>>>Programme principal<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;***************INITIALISATION HARDWARE**************************************** .ORG $100 LD A,$A OUT (RTCADR),A LD A,00100101B OUT (RTCIO),A LD A,$B OUT (RTCADR),A LD A,00000010B OUT (RTCIO),A ;-------------------------TEST MEMOIRE--------------------------------------- LD HL,$3FFF ;MISE A ZERO DE LA RAM LD E,0 BOUCLERAZRAM: INC HL LD (HL),E LD A,H CP $BF JP NZ,BOUCLERAZRAM LD A,L CP $FF JP NZ,BOUCLERAZRAM JP OKRAZMEM CYCLE4: LD E,'A' JP RETOUR32 OKRAZMEM: LD HL,$3FFF LD E,'A' BOUCLECHECKRAM: INC HL LD A,(HL) CP 0 JP NZ,ERREURMEMOIRE LD (HL),E LD A,(HL) CP E JP NZ,ERREURMEMOIRE INC E LD A,E CP 'Z' JP Z,CYCLE4 RETOUR32: LD A,H CP $BF JP NZ,BOUCLECHECKRAM LD A,L CP $FF JP NZ,BOUCLECHECKRAM JP OKMEMOIRE ERREURMEMOIRE: ;Procedure Execut‚ lorsqu'il y a un problŠme de M‚moire LD A,1 ;Configuration de l'uart en 9600 baud 8 bit et 1 bit de stop SET 2,A OUT (UART4),A RES 2,A OUT (UART4),A LD A,80H OUT (UART3),A LD A,0ch ;9600 baud OUT (UART0),A LD A,0 OUT (UART1),A LD A,03H OUT (UART3),A LD A,$A OUT (RTCADR),A LD A,00100101B OUT (RTCIO),A LD A,$B OUT (RTCADR),A LD A,00001010B OUT (RTCIO),A LD A,'M' BOUCLEOUTERREURM: OUT (UART0),A ;Boucle Sans fin affichant des M dans le terminale JP BOUCLEOUTERREURM ;(M comme memoire) OKMEMOIRE: LD HL,$3FFF ;REMISE A ZERO DE LA RAM LD E,0 BOUCLERAZRAMB: INC HL LD (HL),E LD A,H CP $BF JP NZ,BOUCLERAZRAMB LD A,L CP $FF JP NZ,BOUCLERAZRAMB ;------------------------------------------------------------- LD C,14 ;Calcul du Checksum de la Ram du DS1287 LD A,0 LD D,A CHECKSUM: LD A,D PUSH AF CALL READRTC LD B,A POP AF ADD A,B LD D,A INC C LD A,C CP 63 JP NZ,CHECKSUM CALL READRTC CP D JP Z,CHECKRTCSUMOK ;Si le resultat correpond a la valeur present en Ram du RTC ;alors c'est OK JP FINCLEARRTC ;Sinon Remise a zero CHECKRTCSUMOK: LD C,62 LD A,'O' CALL WRITERTC ;Cmos valid‚ JP OKRTC454 FINCLEARRTC: LD C,62 LD A,'M' ;Cmos invalid‚ CALL WRITERTC OKRTC454: CALL INITUARTPROC ;Appel de l'initialisation de l'Uart IN A,(UART4) OR 1 OUT (UART4),A LD A,10000000B LD (PIO1MODE),A LD (PIO2MODE),A CALL INIT_PIO ;Initialisation des 8255 LD A,0 LD (PIO1AOUT),A OUT (PIO1A),A LD (PIO1BOUT),A OUT (PIO1B),A LD (PIO1COUT),A OUT (PIO1C),A LD (PIO2AOUT),A OUT (PIO2A),A LD (PIO2BOUT),A OUT (PIO2B),A LD (PIO2COUT),A OUT (PIO2C),A LD A,$A ;Initialisation du RTC OUT (RTCADR),A LD A,00101101B OUT (RTCIO),A LD A,$B OUT (RTCADR),A LD A,00010010B OUT (RTCIO),A ;**************************************************** LD A,00000110B LD B,50 CALL BEEPPROC LD A,00000101B LD B,50 CALL BEEPPROC LD A,00000100B LD B,50 CALL BEEPPROC LD HL,FONDNOIR ;Mise en place du fond noir CALL AFFICHEMESSAGEPROC LD A,12 ;EFFACE ECRAN CALL OUTCHARACTERPROC LD A,7 ;Beep CALL OUTCHARACTERPROC LD HL,LOGO ;AFFICHE LOGO CALL AFFICHEMESSAGEPROC EI ;INT HARDWARE possible ici LD C,62 ;EFFACEMENT DE LA RAM RTC SI NECESSAIRE CALL READRTC CP 'O' JP Z,CHECKSUMOK LD HL,RTCCHECKMES01 CALL AFFICHEMESSAGEPROC ;Message d'erreur LD C,14 CLEARRTC: LD A,0 CALL WRITERTC INC C LD A,C CP 64 JP NZ,CLEARRTC LD C,62 LD A,'O' CALL WRITERTC LD C,63 LD A,'O' CALL WRITERTC CHECKSUMOK: LD C,14 ;Gestion Mot de passe CALL READRTC CP 'P' JP NZ,PASDEMOTDEPASSE CALL DEMANDEMOTDEPASSE PASDEMOTDEPASSE: LD HL,MESSAGEINIT ;Message de demarage CALL AFFICHEMESSAGEPROC LD HL,MESSAGEHEURE ;Heure CALL AFFICHEMESSAGEPROC CALL GETCLOCKPROC CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD HL,MESSAGEDATE ;Date CALL AFFICHEMESSAGEPROC CALL GETDATEPROC CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,'2' CALL OUTCHARACTERPROC LD A,'0' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC LD HL,MEMORYMAP ;INITIALISATION DE LA TABLE DE LA MEMOIRE LD A,1 LD (HL),A INC HL LD (HL),A INC HL LD (HL),A INC HL LD (HL),A INC HL LD (HL),A INC HL LD (HL),A LD HL,MEMORYMAP + $FF LD (HL),A ;pile ;<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>> ATTENDCOMMANDE: LD HL,PRET ;Prompt CALL AFFICHEMESSAGEPROC ;*********************Capture de txt******* LD B,$FF LD HL,BUFFERCOMMANDEADR LD D,0 JFF: CALL WAITCHARACTERPROC CP 8 JP Z,JDELETE CALL OUTCHARACTERPROC LD (HL),A CP 13 JP Z,JFINCOMMANDE DEC B JP Z,JFF7 INC HL JP JFF JFF7: LD B,1 JP JFF JDELETE: DEC HL INC B JP NZ,JFFOP INC HL DEC B JP JFF JFFOP: LD A,8 CALL OUTCHARACTERPROC LD A,' ' CALL OUTCHARACTERPROC LD A,8 CALL OUTCHARACTERPROC JP JFF JFINCOMMANDE: LD HL,COMMANDERAZ LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CP $0 JP NZ,COMMANDENONVIDE JP ATTENDCOMMANDE COMMANDENONVIDE: LD HL,COMMANDERAZ LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,$0 LD HL,COMMANDECLS LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,EFFACEECRANPROC LD HL,COMMANDEAIDE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,AFFICHEAIDEPROC LD HL,COMMANDECONFIGES LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,CONFIG8255PROC LD HL,COMMANDERECEPTIONXMODEM LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,RECEPTIONXMODEMPROC LD HL,COMMANDEEXECUTE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,EXECUTEPROC LD HL,COMMANDEOUT LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,OUTPUTPROC LD HL,COMMANDEINPUT LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,INPUTPROC LD HL,COMMANDEHEURE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,AFFICHEHEUREPROC LD HL,COMMANDEDATE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,AFFICHEDATEPROC LD HL,COMMANDEMARCHE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,MARCHECOMPROC LD HL,COMMANDEARRET LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,ARRETCOMPROC LD HL,COM5745 LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,COM5746 LD HL,COMMANDEHORLOGE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,HORLOGEPROC LD HL,COMMANDEMOTDEPASSE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,SETPASSWORDPROC LD HL,COMMANDEMEMOIRE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,AFFICHEMEMOIRE LD HL,COMMANDELISTE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,AFFICHELISTE LD HL,COMMANDEACTIVEAUTO LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,ACTIVEAUTO LD HL,COMMANDEMODENORM LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,DESACTIVEAUTO LD HL,COMMANDEEFFACE LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,EFFACEFICHIERPROC LD HL,COMMANDECONFUART LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,CONFIGUARTPROC LD HL,COMMANDEBEEP LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,OUTBEEPPROC LD HL,COMMANDEPLAY LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,PLAYCOMMANDEEX LD HL,COMMANDEINFO LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,INFOCOMMANDE LD HL,COMMANDEHALT LD DE,BUFFERCOMMANDEADR CALL COMPAREPROC ;HL=Chaine a comparer avec DE CALL C,HALTPROC LD HL,COMMANDEINCONNUE ;Commande inexistante CALL AFFICHEMESSAGEPROC JP ATTENDCOMMANDE ;Retour a l'attende ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>Les Procedures<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;****************************Gestion Horloge******************************* ;>>>>>>>Gestion du mode AUTOMATIQUE GESTIONDES8255AUTO: PUSH AF PUSH BC PUSH HL LD DE,NOMFICHTABLE CALL OUVREFICHIERPROC LD B,2 JP C,ERREURFINAUTO BOUCLEANALYSEFICHIER: LD A,(HL) CP '!' JP Z,FINAUTONORM CP '(' JP Z,ANALYSECOMMANDE INC HL JP NZ,BOUCLEANALYSEFICHIER LD B,255 ERREURFINAUTO: LD A,B LD (AUTOMATIQUEMODE),A POP HL POP BC POP AF RET FINAUTONORM: POP HL POP BC POP AF RET ANALYSECOMMANDE: INC HL LD A,(HL) CP '<' JP Z,COMPAREHEURE CP '{' JP Z,COMPAREDATE CP '[' JP Z,GESTMARCHEARRET CP '"' JP Z,GESTLECTURE8255 CP '@' JP Z,FINAUTONORM CP 'B' JP Z,BEEPPROCAUTO CP 'P' JP Z,PLAYPROCAUTO CP ')' JP Z,BOUCLEANALYSEFICHIER LD B,3 JP ERREURFINAUTO GESTLECTURE8255: PUSH HL POP DE INC DE CALL LECTURE8255PROC JP C,ERREURFINAUTO LD C,A INC DE INC DE INC DE LD A,(DE) CP '=' JP NZ,ERREURFINAUTO INC DE LD A,(DE) CP '0' JP Z,TESTEZERO8255 CP '1' JP Z,TESTEUN8255 LD B,4 JP ERREURFINAUTO TESTEZERO8255: LD A,C CP 0 JP NZ,BOUCLEANALYSEFICHIER JP SUITE023124 TESTEUN8255: LD A,C CP 0 JP Z,BOUCLEANALYSEFICHIER JP SUITE023124 SUITE023124: INC DE LD A,(DE) LD B,4 CP ''' JP NZ,ERREURFINAUTO PUSH DE POP HL JP ANALYSECOMMANDE COMPAREDATE: INC HL LD A,(HL) CP '?' JP Z,JPCOMPDATE01 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur JP C,ERREURFINAUTO LD D,A CALL GETDATEPROC CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPDATE01: INC HL INC HL LD A,(HL) LD B,5 CP '/' JP NZ,ERREURFINAUTO INC HL LD A,(HL) CP '?' JP Z,JPCOMPDATE02 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur LD B,5 JP C,ERREURFINAUTO LD D,A CALL GETDATEPROC LD A,B CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPDATE02: INC HL INC HL LD A,(HL) LD B,5 CP '/' JP NZ,ERREURFINAUTO INC HL LD A,(HL) CP '?' JP Z,JPCOMPDATE03 LD B,5 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur JP C,ERREURFINAUTO LD D,A CALL GETDATEPROC LD A,C CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPDATE03: INC HL INC HL LD A,(HL) LD B,5 CP '}' JP NZ,ERREURFINAUTO JP ANALYSECOMMANDE COMPAREHEURE: INC HL LD A,(HL) CP '?' JP Z,JPCOMPHEURE01 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur LD B,6 JP C,ERREURFINAUTO LD D,A CALL GETCLOCKPROC CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPHEURE01: INC HL INC HL LD A,(HL) LD B,6 CP ':' JP NZ,ERREURFINAUTO INC HL LD A,(HL) CP '?' JP Z,JPCOMPHEURE02 LD B,6 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur JP C,ERREURFINAUTO LD D,A CALL GETCLOCKPROC LD A,B CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPHEURE02: INC HL INC HL LD B,6 LD A,(HL) CP ':' JP NZ,ERREURFINAUTO INC HL LD A,(HL) CP '?' JP Z,JPCOMPHEURE03 CALL CONVERTSTRINGBCD ;HL=Pointeur chaine Heure A=Valeur bcd CF=1>erreur LD B,6 JP C,ERREURFINAUTO LD D,A CALL GETCLOCKPROC LD A,C CP D JP NZ,BOUCLEANALYSEFICHIER JPCOMPHEURE03: INC HL INC HL LD A,(HL) LD B,6 CP '>' JP NZ,ERREURFINAUTO JP ANALYSECOMMANDE BEEPPROCAUTO: PUSH BC LD A,00000110B LD B,50 CALL BEEPPROC POP BC JP ANALYSECOMMANDE GESTMARCHEARRET: INC HL PUSH HL POP DE CALL MARCHEARRETPROC LD B,7 JP C,ERREURFINAUTO LD DE,4 ADD HL,DE LD A,(HL) CP ']' JP NZ,ERREURFINAUTO JP ANALYSECOMMANDE PLAYPROCAUTO: INC HL PUSH HL POP DE CALL PLAYPROC PUSH DE POP HL LD A,(HL) LD B,8 CP '|' JP NZ,ERREURFINAUTO JP ANALYSECOMMANDE ;>>>>>>>Gestion sonore BEEPPROC: ;A=frecquence B=Duree PUSH AF PUSH BC PUSH DE PUSH AF LD C,$0B CALL READRTC LD D,A AND 10111111B OR 00001000B CALL WRITERTC LD C,$0A CALL READRTC LD E,A AND 11110000B LD C,A POP AF OR C LD C,$0A CALL WRITERTC LD A,B BOUCLEATTENDBEEP: NOP PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF PUSH AF PUSH BC PUSH DE POP DE POP BC POP AF DEC A JP NZ,BOUCLEATTENDBEEP LD C,$0B LD A,D CALL WRITERTC LD C,$0A LD A,E CALL WRITERTC POP DE POP BC POP AF RET ;>>>>>>>Gestion des interuptions RTC ENDUPDATEPROC: PUSH AF PUSH BC LD A,$B OUT (RTCADR),A IN A,(RTCIO) AND 00100000B JP Z,FINEXECUTIONENDUPDATE CALL GETCLOCKPROC ; Retour A=heure B=minutes C=seconde LD (HEURESTAT),A LD A,B LD (MINUTESTAT),A LD A,C LD (SECONDESTAT),A LD A,$FF LD (UPDATERTC),A FINEXECUTIONENDUPDATE: POP BC POP AF RET GESTALARMEPROC: PUSH AF PUSH BC PUSH HL LD A,$B OUT (RTCADR),A IN A,(RTCIO) AND 00100000B JP Z,FINEXECUTIONALARME LD A,$FF LD (ALARMESTAT),A LD A,(ALARMERTCMODE) CP 1 JP Z,EXECUTIONROUTINEALARME FINEXECUTIONALARME: POP HL POP BC POP AF RET EXECUTIONROUTINEALARME: LD HL,ALARMEADRESSE LD A,(HL) LD B,A INC HL LD A,(HL) LD C,A LD HL,POINTDERETOURALARME PUSH AF PUSH BC PUSH DE PUSH HL PUSH HL PUSH BC RET POINTDERETOURALARME: POP HL POP DE POP BC POP AF JP FINEXECUTIONALARME GESTPERIODICPROC: PUSH AF PUSH HL PUSH BC LD A,$B OUT (RTCADR),A IN A,(RTCIO) AND 01000000B JP Z,FINEXECUTIONPERIODIC LD HL,PERIODICCOUNT INC (HL) LD A,$FF LD (PERIODICSTAT),A LD A,(PERIODICMODE) CP 1 JP Z,EXECUTIONROUTINEPERIODIC FINEXECUTIONPERIODIC: POP BC POP HL POP AF RET EXECUTIONROUTINEPERIODIC: LD HL,PERIODICADRESSE LD A,(HL) LD B,A INC HL LD A,(HL) LD C,A LD HL,POINTDERETOURPERIODIC PUSH AF PUSH BC PUSH DE PUSH HL PUSH HL PUSH BC RET POINTDERETOURPERIODIC: POP HL POP DE POP BC POP AF JP FINEXECUTIONPERIODIC GESTINTRTCPROC: PUSH HL LD HL,INTCOUNT3 INC (HL) JP Z,JPINT001c JP JPINT002c JPINT001c: INC HL INC (HL) JP Z,JPINT051c JP JPINT002c JPINT051c: INC HL INC (HL) JP Z,JPINT061c JP JPINT002c JPINT061c: INC HL INC (HL) JPINT002c: LD A,1 LD (RTCSTAT),A POP HL PUSH AF PUSH BC J7878s: LD A,$C OUT (RTCADR),A IN A,(RTCIO) AND 10000000B JP NZ,J7878s LD A,C AND 00010000B CALL NZ,ENDUPDATEPROC LD A,C AND 00100000B CALL NZ,GESTALARMEPROC LD A,C AND 01000000B CALL NZ,GESTPERIODICPROC LD A,(AUTOMATIQUEMODE) ;Mode d'action auto activ‚? CP 1 CALL Z,GESTIONDES8255AUTO POP BC POP AF RET ;>>>>>Commande Beep OUTBEEPPROC: PUSH BC LD A,00000110B LD B,50 CALL BEEPPROC POP BC POP HL JP ATTENDCOMMANDE ;>>>>>>COMMANDE HEURE AFFICHEHEUREPROC: PUSH AF LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC CALL GETCLOCKPROC CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>>LECTURE DE L'HEURE GETCLOCKPROC: ; Retour : A=heure B=minutes C=seconde LD A,4 OUT (RTCADR),A IN A,(RTCIO) PUSH AF LD A,2 OUT (RTCADR),A IN A,(RTCIO) LD B,A LD A,0 OUT (RTCADR),A IN A,(RTCIO) LD C,A POP AF RET ;>>>>>>>>>Lecture de la date GETDATEPROC: ; Retour : A=jour B=mois C=ann‚e LD A,7 OUT (RTCADR),A IN A,(RTCIO) PUSH AF LD A,8 OUT (RTCADR),A IN A,(RTCIO) LD B,A LD A,9 OUT (RTCADR),A IN A,(RTCIO) LD C,A POP AF RET ;>>>>>>>COMMANDE DATE AFFICHEDATEPROC: PUSH AF LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC CALL GETDATEPROC CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,'2' CALL OUTCHARACTERPROC LD A,'0' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>>>>>COMMANDE HORLOGE HORLOGEPROC: PUSH AF BOUCLEHORL00445469689: LD A,12 CALL OUTCHARACTERPROC LD HL,HORLOGEMES01 CALL AFFICHEMESSAGEPROC BOUCLEHORLOGE02: LD A,13 CALL OUTCHARACTERPROC LD HL,MESSAGEHEURE ;Message de demarage CALL AFFICHEMESSAGEPROC CALL GETCLOCKPROC CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD HL,MESSAGEDATE ;Message de demarage CALL AFFICHEMESSAGEPROC CALL GETDATEPROC CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC BOUCLEATTENTEHORLOGE: LD A,$A OUT (RTCADR),A IN A,(RTCIO) AND 10000000B JP NZ,TIMEUPDT006 JP JP100233 TIMEUPDT006: LD HL,UPANSI CALL AFFICHEMESSAGEPROC CALL AFFICHEMESSAGEPROC CALL AFFICHEMESSAGEPROC TIMEUPDT05: LD A,$A OUT (RTCADR),A IN A,(RTCIO) AND 10000000B JP Z,BOUCLEHORLOGE02 JP TIMEUPDT05 JP100233: CALL READBUFFERUART JP C,BOUCLEATTENTEHORLOGE CP 'Q' JP Z,FINHORLOGE CP 'D' JP Z,SETDATEHORLOGE CP 'H' JP Z,SETHEUREHORLOGE JP BOUCLEATTENTEHORLOGE SETDATEHORLOGE: CALL AFFICHEDATEPROC4 BOUCLEHORL002: CALL WAITCHARACTERPROC CP '+' JP Z,ADDJOUR CP '-' JP Z,SUBJOUR CP 13 JP Z,MOISPR JP BOUCLEHORL002 ADDJOUR: CALL GETDATEPROC LD D,A AND 00001111B CP 9 JP NZ,JP4887 LD A,D AND 11110000B ADD A,00010000B JP JP5445 JP4887: LD A,D ADD A,1 JP5445: CP $32 JP NZ,JP4886 LD A,$31 JP4886: PUSH AF LD A,7 OUT (RTCADR),A POP AF OUT (RTCIO),A JP SETDATEHORLOGE SUBJOUR: CALL GETDATEPROC LD D,A AND 00001111B CP 0 JP NZ,JP48t87 LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45 JP48t87: LD A,D ADD A,11111111B JP54t45: CP $0 JP NZ,JP48t86 LD A,1 JP48t86: PUSH AF LD A,7 OUT (RTCADR),A POP AF OUT (RTCIO),A JP SETDATEHORLOGE MOISPR: BOUCLEHORL003: CALL WAITCHARACTERPROC CP '+' JP Z,ADDMOIS CP '-' JP Z,SUBMOIS CP 13 JP Z,ANNEEPR JP BOUCLEHORL003 ADDMOIS: CALL GETDATEPROC LD D,B LD A,B AND 00001111B CP 9 JP NZ,JP4887p LD A,D AND 11110000B ADD A,00010000B JP JP5445p JP4887p: LD A,D ADD A,1 JP5445p: CP $13 JP NZ,JP4886p LD A,$12 JP4886p: PUSH AF LD A,8 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEDATEPROC4 JP BOUCLEHORL003 SUBMOIS: CALL GETDATEPROC LD A,B LD D,A AND 00001111B CP 0 JP NZ,JP48t87p LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45p JP48t87p: LD A,D ADD A,11111111B JP54t45p: CP $0 JP NZ,JP48t86p LD A,1 JP48t86p: PUSH AF LD A,8 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEDATEPROC4 JP BOUCLEHORL003 ANNEEPR: BOUCLEHORL004: CALL WAITCHARACTERPROC CP '+' JP Z,ADDANNEE CP '-' JP Z,SUBANNEE CP 13 JP Z,BOUCLEHORL00445469689 JP BOUCLEHORL004 ADDANNEE: CALL GETDATEPROC LD D,C LD A,C AND 00001111B CP 9 JP NZ,JP4887pp LD A,D AND 11110000B ADD A,00010000B JP JP5445pp JP4887pp: LD A,D ADD A,1 JP5445pp: CP $A0 JP NZ,JP4886pp LD A,$99 JP4886pp: PUSH AF LD A,9 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEDATEPROC4 JP BOUCLEHORL004 SUBANNEE: CALL GETDATEPROC LD A,C LD D,A AND 00001111B CP 0 JP NZ,JP48t87pp LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45pp JP48t87pp: LD A,D ADD A,11111111B JP54t45pp: CP $F9 JP NZ,JP48t86pp LD A,0 JP48t86pp: PUSH AF LD A,9 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEDATEPROC4 JP BOUCLEHORL004 SETHEUREHORLOGE: CALL AFFICHEHEUREPROC4 BOUCLEHORL0022: CALL WAITCHARACTERPROC CP '+' JP Z,ADDHEURE CP '-' JP Z,SUBHEURE CP 13 JP Z,MINUTEPR JP BOUCLEHORL0022 ADDHEURE: CALL GETCLOCKPROC LD D,A AND 00001111B CP 9 JP NZ,JP4887h LD A,D AND 11110000B ADD A,00010000B JP JP5445h JP4887h: LD A,D ADD A,1 JP5445h: CP $24 JP NZ,JP4886h LD A,$0 JP4886h: PUSH AF LD A,4 OUT (RTCADR),A POP AF OUT (RTCIO),A JP SETHEUREHORLOGE SUBHEURE: CALL GETCLOCKPROC LD D,A AND 00001111B CP 0 JP NZ,JP48t87h LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45h JP48t87h: LD A,D ADD A,11111111B JP54t45h: CP $F9 JP NZ,JP48t86h LD A,0 JP48t86h: PUSH AF LD A,4 OUT (RTCADR),A POP AF OUT (RTCIO),A JP SETHEUREHORLOGE MINUTEPR: BOUCLEHORL0033: CALL WAITCHARACTERPROC CP '+' JP Z,ADDMINUTE CP '-' JP Z,SUBMINUTE CP 13 JP Z,SECONDE JP BOUCLEHORL0033 ADDMINUTE: CALL GETCLOCKPROC LD D,B LD A,B AND 00001111B CP 9 JP NZ,JP4887ph LD A,D AND 11110000B ADD A,00010000B JP JP5445ph JP4887ph: LD A,D ADD A,1 JP5445ph: CP $60 JP NZ,JP4886ph LD A,$00 JP4886ph: PUSH AF LD A,2 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEHEUREPROC4 JP BOUCLEHORL0033 SUBMINUTE: CALL GETCLOCKPROC LD A,B LD D,A AND 00001111B CP 0 JP NZ,JP48t87ph LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45ph JP48t87ph: LD A,D ADD A,11111111B JP54t45ph: CP $F9 JP NZ,JP48t86ph LD A,0 JP48t86ph: PUSH AF LD A,2 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEHEUREPROC4 JP BOUCLEHORL0033 SECONDE: BOUCLEHORL0044: CALL WAITCHARACTERPROC CP '+' JP Z,ADDSECONDE CP '-' JP Z,SUBSECONDE CP 13 JP Z,BOUCLEHORL00445469689 JP BOUCLEHORL0044 ADDSECONDE: CALL GETCLOCKPROC LD D,C LD A,C AND 00001111B CP 9 JP NZ,JP4887pph LD A,D AND 11110000B ADD A,00010000B JP JP5445pph JP4887pph: LD A,D ADD A,1 JP5445pph: CP $60 JP NZ,JP4886pph LD A,$00 JP4886pph: PUSH AF LD A,0 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEHEUREPROC4 JP BOUCLEHORL0044 SUBSECONDE: CALL GETCLOCKPROC LD A,C LD D,A AND 00001111B CP 0 JP NZ,JP48t87pph LD A,D AND 11110000B ADD A,11110000B OR 00001001B JP JP54t45pph JP48t87pph: LD A,D ADD A,11111111B JP54t45pph: CP $79 JP NZ,JP48t86pph LD A,0 JP48t86pph: PUSH AF LD A,0 OUT (RTCADR),A POP AF OUT (RTCIO),A CALL AFFICHEHEUREPROC4 JP BOUCLEHORL0044 FINHORLOGE: POP AF POP HL JP ATTENDCOMMANDE AFFICHEDATEPROC4: PUSH AF LD A,12 CALL OUTCHARACTERPROC LD HL,HORLOGEMES02 CALL AFFICHEMESSAGEPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC CALL GETDATEPROC CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,'/' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC LD HL,UPANSI CALL AFFICHEMESSAGEPROC POP AF RET AFFICHEHEUREPROC4: PUSH AF LD A,12 CALL OUTCHARACTERPROC LD HL,HORLOGEMES03 CALL AFFICHEMESSAGEPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC CALL GETCLOCKPROC CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,B CALL OUTBCDCHIFFREPROC LD A,':' CALL OUTCHARACTERPROC LD A,C CALL OUTBCDCHIFFREPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC LD HL,UPANSI CALL AFFICHEMESSAGEPROC POP AF RET ;******************************Gestion E/S********************************** ;>>>>>>INITIALISATION DE L'UART INITUARTPROC: PUSH AF LD A,1 SET 2,A ; RESET bit 2 (lav) OUT (UART4),A ; AD-Converter WR lav RES 2,A ; SET bit 2 (h›j) OUT (UART4),A ; AD-Converter WR h›j (Convertering startes) LD A,80H OUT (UART3),A ; SET DLAB FLAG LD B,0ch LD D,0 LD C,24 CALL READRTC CP 'B' JP NZ,INITUART002 LD C,26 CALL READRTC LD B,A LD C,25 CALL READRTC LD D,A INITUART002: LD A,B ; 9600 baud OUT (UART0),A ; LD A,D OUT (UART1),A ; LD A,03H OUT (UART3),A ; Set 8 bit data, 1 stopbit LD A,00000001B OUT (UART1),A IN A,(UART0) IN A,(UART5) IN A,(UART6) LD A,00001000B OUT (UART4),A POP AF RET ;>>>>>>INITIALISATION DES 8255 INIT_PIO: PUSH AF LD A,(PIO1MODE) ; A = OUTPUT, B = OUTPUT C= OUTPUT OUT (PIO1CONT),A LD A,(PIO2MODE) ; A = OUTPUT, B = OUTPUT C= OUTPUT OUT (PIO2CONT),A POP AF RET ;>>>>>>>>GESTION COMMANDE OUT OUTPUTPROC: PUSH AF DEC DE CONTINUE022: INC DE LD A,(DE) CP $20 JP Z,CONTINUE022 CP 13 JP Z,ERRSYNTAX CALL CONVERTDECBINPROC JP C,ERRSYNTAX LD C,A INC DE LD A,(DE) CP ',' JP NZ,ERRSYNTAX INC DE CALL CONVERTDECBINPROC JP C,ERRSYNTAX OUT (C),A POP AF POP HL JP ATTENDCOMMANDE RET ERRSYNTAX: LD HL,OUTPMESS01 CALL AFFICHEMESSAGEPROC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>>>>GESTION COMMANDE INPUT INPUTPROC: PUSH AF DEC DE CONTINUE023: INC DE LD A,(DE) CP $20 JP Z,CONTINUE023 CP 13 JP Z,ERRSYNTAX2 CALL CONVERTDECBINPROC JP C,ERRSYNTAX2 LD C,A IN A,(C) PUSH AF LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC POP AF CALL AFFICHEBINDECPROC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC POP AF POP HL JP ATTENDCOMMANDE RET ERRSYNTAX2: LD HL,INPMESS01 CALL AFFICHEMESSAGEPROC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>GESTION COMMANDE CONFIGE/S CONFIG8255PROC: PUSH AF J8255CONFIG001: LD A,12 CALL OUTCHARACTERPROC LD HL,MESS01CONF8255 CALL AFFICHEMESSAGEPROC LD HL,MESS02CONF8255 CALL AFFICHEMESSAGEPROC LD HL,MESS11CONF8255 CALL AFFICHEMESSAGEPROC LD A,(PIO1MODE) LD B,A LD HL,MESS05CONF8255 ;1A CALL AFFICHEMESSAGEPROC LD HL,MESS04CONF8255 AND 00010000B JP Z,J4455 LD HL,MESS03CONF8255 J4455: CALL AFFICHEMESSAGEPROC LD HL,MESS06CONF8255 ;1B CALL AFFICHEMESSAGEPROC LD A,B LD HL,MESS04CONF8255 AND 00000010B JP Z,J4456 LD HL,MESS03CONF8255 J4456: CALL AFFICHEMESSAGEPROC LD HL,MESS07CONF8255 ;1C CALL AFFICHEMESSAGEPROC LD A,B LD HL,MESS04CONF8255 AND 00001001B JP Z,J4457 LD HL,MESS03CONF8255 J4457: CALL AFFICHEMESSAGEPROC LD A,(PIO2MODE) LD B,A LD HL,MESS08CONF8255 ;2A CALL AFFICHEMESSAGEPROC LD HL,MESS04CONF8255 AND 00010000B JP Z,J4458 LD HL,MESS03CONF8255 J4458: CALL AFFICHEMESSAGEPROC LD HL,MESS09CONF8255 ;2B CALL AFFICHEMESSAGEPROC LD A,B LD HL,MESS04CONF8255 AND 00000010B JP Z,J4459 LD HL,MESS03CONF8255 J4459: CALL AFFICHEMESSAGEPROC LD HL,MESS10CONF8255 ;2C CALL AFFICHEMESSAGEPROC LD A,B LD HL,MESS04CONF8255 AND 00001001B JP Z,J4460 LD HL,MESS03CONF8255 J4460: CALL AFFICHEMESSAGEPROC BOUCLEJ7DZ5: CALL WAITCHARACTERPROC CP '1' JP Z,INVERT1A CP '2' JP Z,INVERT1B CP '3' JP Z,INVERT1C CP '4' JP Z,INVERT2A CP '5' JP Z,INVERT2B CP '6' JP Z,INVERT2C CP 'q' JP Z,FINCONFIG8255 JP BOUCLEJ7DZ5 INVERT1A: LD A,(PIO1MODE) XOR 00010000B LD (PIO1MODE),A JP J8255CONFIG001 INVERT1B: LD A,(PIO1MODE) XOR 00000010B LD (PIO1MODE),A JP J8255CONFIG001 INVERT1C: LD A,(PIO1MODE) XOR 00001001B LD (PIO1MODE),A JP J8255CONFIG001 INVERT2A: LD A,(PIO2MODE) XOR 00010000B LD (PIO2MODE),A JP J8255CONFIG001 INVERT2B: LD A,(PIO2MODE) XOR 00000010B LD (PIO2MODE),A JP J8255CONFIG001 INVERT2C: LD A,(PIO2MODE) XOR 00001001B LD (PIO2MODE),A JP J8255CONFIG001 FINCONFIG8255: CALL INIT_PIO POP AF POP HL JP ATTENDCOMMANDE RET ;>>>>>>>>>>>>GESTION COMMANDE MARCHE MARCHECOMPROC: PUSH AF PUSH BC DEC DE LD C,0 CONTINUE02s3: INC DE LD A,(DE) CP $20 JP Z,CONTINUE02s3 DEC DE LD A,'M' LD (DE),A CALL MARCHEARRETPROC JP NC,FINMARCHEOK LD HL,MESSMARCHE01 CALL AFFICHEMESSAGEPROC POP BC POP AF POP HL JP ATTENDCOMMANDE FINMARCHEOK: POP BC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>>>Lecture d'une ligne des 8255 LECTURE8255PROC: ;DE=POINTEUR COMMANDE SORTIE > CF=1 ERREUR PUSH BC ;A=0 NON A=AUTRE OUI PUSH DE LD C,0 LD A,(DE) CP '1' JP Z,CHIP8255AL CP '2' JP Z,CHIP8255BL ERRSYNTAXMARCHEs2L: POP DE POP BC SCF RET CHIP8255BL: LD A,C ADD A,4 LD C,A CHIP8255AL: INC DE LD A,(DE) CP 'A' JP Z,PA8255L CP 'B' JP Z,PB8255L CP 'C' JP Z,PC8255L JP ERRSYNTAXMARCHEs2L PC8255L: INC C PB8255L: INC C PA8255L: INC DE LECTURESET: IN A,(C) LD B,A LD A,(DE) SUB '0' CP 0 JP Z,BIT0ML CP 1 JP Z,BIT1ML CP 2 JP Z,BIT2ML CP 3 JP Z,BIT3ML CP 4 JP Z,BIT4ML CP 5 JP Z,BIT5ML CP 6 JP Z,BIT6ML CP 7 JP Z,BIT7ML JP ERRSYNTAXMARCHEs2L BIT0ML: LD A,B AND 00000001B JP FINGHGFLZERDJL BIT1ML: LD A,B AND 00000010B JP FINGHGFLZERDJL BIT2ML: LD A,B AND 00000100B JP FINGHGFLZERDJL BIT3ML: LD A,B AND 00001000B JP FINGHGFLZERDJL BIT4ML: LD A,B AND 00010000B JP FINGHGFLZERDJL BIT5ML: LD A,B AND 00100000B JP FINGHGFLZERDJL BIT6ML: LD A,B AND 01000000B JP FINGHGFLZERDJL BIT7ML: LD A,B AND 10000000B JP FINGHGFLZERDJL FINGHGFLZERDJL: POP DE POP BC OR 0 RET MARCHEARRETPROC: ;DE=POINTEUR COMMANDE SORTIE > CF=1 ERREUR PUSH BC PUSH DE PUSH AF LD C,0 INC DE LD A,(DE) CP '1' JP Z,CHIP8255A CP '2' JP Z,CHIP8255B ERRSYNTAXMARCHEs2: POP AF POP DE POP BC SCF RET CHIP8255B: LD A,C ADD A,4 LD C,A CHIP8255A: INC DE LD A,(DE) CP 'A' JP Z,PA8255 CP 'B' JP Z,PB8255 CP 'C' JP Z,PC8255 JP ERRSYNTAXMARCHEs2 PC8255: INC C PB8255: INC C PA8255: DEC DE DEC DE LD A,(DE) INC DE INC DE INC DE CP 'M' JP Z,MARCHESET CP 'A' JP Z,ARRETSET JP ERRSYNTAXMARCHEs2 MARCHESET: IN A,(C) LD B,A LD A,(DE) SUB '0' CP 0 JP Z,BIT0M CP 1 JP Z,BIT1M CP 2 JP Z,BIT2M CP 3 JP Z,BIT3M CP 4 JP Z,BIT4M CP 5 JP Z,BIT5M CP 6 JP Z,BIT6M CP 7 JP Z,BIT7M JP ERRSYNTAXMARCHEs2 BIT0M: SET 0,B JP FINGHGFLZERDJ BIT1M: SET 1,B JP FINGHGFLZERDJ BIT2M: SET 2,B JP FINGHGFLZERDJ BIT3M: SET 3,B JP FINGHGFLZERDJ BIT4M: SET 4,B JP FINGHGFLZERDJ BIT5M: SET 5,B JP FINGHGFLZERDJ BIT6M: SET 6,B JP FINGHGFLZERDJ BIT7M: SET 7,B JP FINGHGFLZERDJ ARRETSET: IN A,(C) LD B,A LD A,(DE) SUB '0' CP 0 JP Z,BIT0a CP 1 JP Z,BIT1a CP 2 JP Z,BIT2a CP 3 JP Z,BIT3a CP 4 JP Z,BIT4a CP 5 JP Z,BIT5a CP 6 JP Z,BIT6a CP 7 JP Z,BIT7a JP ERRSYNTAXMARCHEs2 BIT0a: LD A,B AND 11111110B JP FINGHGFLZERDJa BIT1a: LD A,B AND 11111101B JP FINGHGFLZERDJa BIT2a: LD A,B AND 11111011B JP FINGHGFLZERDJa BIT3a: LD A,B AND 11110111B JP FINGHGFLZERDJa BIT4a: LD A,B AND 11101111B JP FINGHGFLZERDJa BIT5a: LD A,B AND 11011111B JP FINGHGFLZERDJa BIT6a: LD A,B AND 10111111B JP FINGHGFLZERDJa BIT7a: LD A,B AND 01111111B JP FINGHGFLZERDJa FINGHGFLZERDJ: LD A,B FINGHGFLZERDJa: OUT (C),A POP AF POP DE POP BC OR 0 RET ;>>>>>>>>>>>>GESTION COMMANDE ARRET ARRETCOMPROC: PUSH AF PUSH BC DEC DE LD C,0 CONTINUE02s3a: INC DE LD A,(DE) CP $20 JP Z,CONTINUE02s3a DEC DE LD A,'A' LD (DE),A CALL MARCHEARRETPROC JP NC,FINARRETOK LD HL,MESSARRET01 CALL AFFICHEMESSAGEPROC POP BC POP AF POP HL JP ATTENDCOMMANDE FINARRETOK: POP BC POP AF POP HL JP ATTENDCOMMANDE ;******************************Routines Diverses**************************** ;>>>>>>>Gestion Commande CONFUART CONFIGUARTPROC: PUSH AF PUSH DE PUSH BC LD DE,BAUDTAB LD C,24 CALL READRTC CP 'B' JP Z,OKFODZZRF LD A,0 LD (VALEURTEMP),A LD A,$C LD (VALEURTEMP2),A JP BOUCLEAFFICHECONFUART OKFODZZRF: LD C,25 CALL READRTC LD (VALEURTEMP),A LD C,26 CALL READRTC LD (VALEURTEMP2),A BOUCLEAFFICHECONFUART: LD HL,CONFUARTMES01 CALL AFFICHEMESSAGEPROC LD C,24 CALL READRTC CP 'B' JP Z,JaaaSUITEUA002 LD HL,CONFUARTMES05 JP AFFICHEBAUD JaaaSUITEUA002: LD C,26 CALL READRTC LD B,A LD C,25 CALL READRTC LD C,A CP 0 JP NZ,BAUD30050 LD A,B CP $1 JP NZ,JPSUITEUA001 LD HL,CONFUARTMES07 JP AFFICHEBAUD JPSUITEUA001: CP $6 JP NZ,JPSUITEUA002 LD HL,CONFUARTMES06 JP AFFICHEBAUD JPSUITEUA002: CP $C JP NZ,JPSUITEUA003 LD HL,CONFUARTMES05 JP AFFICHEBAUD JPSUITEUA003: CP $60 JP NZ,JPSUITEUA004 LD HL,CONFUARTMES04 JP AFFICHEBAUD JPSUITEUA004: LD HL,CONFUARTMES09 JP AFFICHEBAUD BAUD30050: CP 9 JP Z,V50Baudv CP 1 JP Z,V300Baudv LD HL,CONFUARTMES09 JP AFFICHEBAUD V50Baudv: LD A,B CP 0 JP NZ,JPSUITEUA005 LD HL,CONFUARTMES02 JP AFFICHEBAUD JPSUITEUA005: LD HL,CONFUARTMES09 JP AFFICHEBAUD V300Baudv: LD A,B CP $80 JP NZ,JPSUITEUA006 LD HL,CONFUARTMES03 JP AFFICHEBAUD JPSUITEUA006: LD HL,CONFUARTMES09 JP AFFICHEBAUD AFFICHEBAUD: CALL AFFICHEMESSAGEPROC LD HL,CONFUARTMES08 CALL AFFICHEMESSAGEPROC BOUCLEATTENTCHA: CALL WAITCHARACTERPROC CP 'B' JP Z,CHANGEBAUD CP 'Q' JP NZ,BOUCLEATTENTCHA LD HL,CONFUARTMES10 CALL AFFICHEMESSAGEPROC CALL WAITCHARACTERPROC CP 'O' JP NZ,TIMEOUTUART LD HL,CONFUARTMES13 CALL AFFICHEMESSAGEPROC CALL INITUARTPROC LD C,23 ATTENDCOMMANDEOK: LD HL,CONFUARTMES14 CALL AFFICHEMESSAGEPROC CALL READBUFFERUART ;A=caractere si CF=0 si CF=1 pas de caracteur JP C,PASCUART CP 'O' JP Z,SETUARTVALIDE PASCUART: CALL UNESECONDEPROC DEC C JP Z,TIMEOUTUART JP ATTENDCOMMANDEOK SETUARTVALIDE: LD HL,FONDNCB CALL AFFICHEMESSAGEPROC LD HL,CONFUARTMES12 CALL AFFICHEMESSAGEPROC POP BC POP DE POP AF POP HL JP ATTENDCOMMANDE TIMEOUTUART: LD C,24 LD A,'B' CALL WRITERTC LD A,(VALEURTEMP) LD C,25 CALL WRITERTC LD A,(VALEURTEMP2) LD C,26 CALL WRITERTC CALL INITUARTPROC LD HL,FONDNCB CALL AFFICHEMESSAGEPROC LD HL,CONFUARTMES11 CALL AFFICHEMESSAGEPROC POP BC POP DE POP AF POP HL JP ATTENDCOMMANDE CHANGEBAUD: LD C,24 LD A,'B' CALL WRITERTC LD A,(DE) LD C,25 CALL WRITERTC INC DE LD A,(DE) LD C,26 CALL WRITERTC INC DE LD A,(DE) CP $FF JP NZ,BOUCLEAFFICHECONFUART LD DE,BAUDTAB JP BOUCLEAFFICHECONFUART ;>>>>>>>GESTION COMMANDE MOTDEPASSE SETPASSWORDPROC: PUSH AF LD HL,PASSWMES01 CALL AFFICHEMESSAGEPROC LD HL,BUFFERCOMMANDEADR LD B,8 BOUCLESAISPASSW: CALL WAITCHARACTERPROC DEC B JP Z,BOUCLESAISPASSW LD (HL),A CP 13 JP Z,FINSAISPASSW LD A,'*' CALL OUTCHARACTERPROC INC HL JP BOUCLESAISPASSW FINSAISPASSW: LD HL,BUFFERCOMMANDEADR LD C,14 CALL READRTC CP 'P' JP Z,TESTPASS LD A,(HL) CP 13 JP NZ,MAUVAISPASS JP NOUVEAUPASS TESTPASS: INC C CALL READRTC LD B,(HL) CP B JP NZ,MAUVAISPASS CP 13 JP Z,NOUVEAUPASS INC HL JP TESTPASS MAUVAISPASS: LD HL,PASSWMES02 CALL AFFICHEMESSAGEPROC POP AF POP HL JP ATTENDCOMMANDE NOUVEAUPASS: LD HL,PASSWMES03 CALL AFFICHEMESSAGEPROC LD HL,BUFFERCOMMANDEADR LD B,8 BOUCLESAISNPASSW: CALL WAITCHARACTERPROC LD D,A CP 13 JP Z,FINSAISNPASSW LD A,B CP 0 JP Z,BOUCLESAISNPASSW DEC B LD A,D LD (HL),A LD A,'*' CALL OUTCHARACTERPROC INC HL JP BOUCLESAISNPASSW FINSAISNPASSW: LD (HL),A LD HL,PASSWMES04 CALL AFFICHEMESSAGEPROC LD HL,$4050 LD B,8 BOUCLESAISNPASSWconf: CALL WAITCHARACTERPROC LD D,A CP 13 JP Z,FINSAISNPASSWconf LD A,B CP 0 JP Z,BOUCLESAISNPASSWconf DEC B LD A,D LD (HL),A LD A,'*' CALL OUTCHARACTERPROC INC HL JP BOUCLESAISNPASSWconf FINSAISNPASSWconf: LD (HL),A LD DE,$4000 LD HL,$4050 LD A,(HL) CP 13 JP NZ,TESTPASSconf LD C,14 LD A,'L' CALL WRITERTC POP AF POP AF JP ATTENDCOMMANDE TESTPASSconf: LD A,(DE) LD B,(HL) CP B JP NZ,MAUVAISPASS CP 13 JP Z,progrtc INC HL INC DE JP TESTPASSconf progrtc: LD C,14 LD A,'P' CALL WRITERTC LD HL,$4000 progrtcboucle: INC C LD A,(HL) CALL WRITERTC INC HL CP 13 JP NZ,progrtcboucle LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC POP AF POP AF JP ATTENDCOMMANDE ;>>>>>>>>>>Demande de mot de passe DEMANDEMOTDEPASSE: PUSH AF DMEANDE: LD HL,DPASSWMES01 CALL AFFICHEMESSAGEPROC LD HL,BUFFERCOMMANDEADR LD B,9 LD D,B BOUCLESAISPASSWScc: LD B,D BOUCLESAISPASSWS: LD D,1 CALL WAITCHARACTERPROC LD (HL),A CP 13 JP Z,FINSAISPASSWS DEC B JP Z,BOUCLESAISPASSWScc LD A,'*' CALL OUTCHARACTERPROC INC HL JP BOUCLESAISPASSWS FINSAISPASSWS: LD C,14 LD HL,BUFFERCOMMANDEADR TESTPASSS: INC C CALL READRTC LD B,(HL) CP B JP NZ,MAUVAISPASSS CP 13 JP Z,FINDEMANDEPASSE INC HL JP TESTPASSS FINDEMANDEPASSE: LD HL,PASSWMES09 CALL AFFICHEMESSAGEPROC POP AF RET MAUVAISPASSS: LD HL,PASSWMES02 CALL AFFICHEMESSAGEPROC LD HL,UPANSI CALL AFFICHEMESSAGEPROC CALL AFFICHEMESSAGEPROC JP DMEANDE HALTPROC: PUSH HL CALL DEMANDEMOTDEPASSE POP HL POP AF JP ATTENDCOMMANDE ;>>>>>>>>GESTION COMMANDE MODEAUTO ACTIVEAUTO: PUSH HL PUSH AF LD DE,NOMFICHTABLE CALL OUVREFICHIERPROC JP C,ERREURACTIVEAUTO LD A,1 LD (AUTOMATIQUEMODE),A LD HL,AUTOMES01 CALL AFFICHEMESSAGEPROC POP AF POP HL POP HL JP ATTENDCOMMANDE ERREURACTIVEAUTO: LD A,0 LD (AUTOMATIQUEMODE),A LD HL,AUTOMES02 CALL AFFICHEMESSAGEPROC POP AF POP HL POP HL JP ATTENDCOMMANDE ;>>>>>>>>GESTION COMMANDE MODENORM DESACTIVEAUTO: PUSH HL PUSH AF LD A,0 LD (AUTOMATIQUEMODE),A LD HL,NORMMES01 CALL AFFICHEMESSAGEPROC POP AF POP HL POP HL JP ATTENDCOMMANDE ;>>>>>>>>>Lecture dans le Buffer Avec Attente WAITCHARACTERPROC: ;A=caractere PUSH BC PUSH HL JP ATTENDINTUARTBOUCLE ATTENDINTUARTBOUCLEBB: HALT ATTENDINTUARTBOUCLE: LD A,(UARTPOINTEURBUFFERE) LD C,A LD A,(UARTPOINTEURBUFFERL) CP C JP Z,ATTENDINTUARTBOUCLEBB LD HL,UARTBUFFER LD A,(UARTPOINTEURBUFFERL) PUSH HL POP BC ADD A,C LD C,A PUSH BC POP HL LD A,(HL) PUSH AF LD A,(UARTPOINTEURBUFFERL) INC A CP 13 JP NZ,FERMELABOUCLE02 LD A,0 FERMELABOUCLE02: LD (UARTPOINTEURBUFFERL),A POP AF POP HL POP BC RET ;>>>>>>>Lecture dans le buffer sans Attente READBUFFERUART: ;A=caractere si CF=0 si CF=1 pas de caracteur PUSH BC PUSH HL PUSH AF LD A,(UARTPOINTEURBUFFERE) LD C,A LD A,(UARTPOINTEURBUFFERL) CP C JP Z,BUFFERVIDE001 POP AF LD HL,UARTBUFFER LD A,(UARTPOINTEURBUFFERL) PUSH HL POP BC ADD A,C LD C,A PUSH BC POP HL LD A,(HL) PUSH AF LD A,(UARTPOINTEURBUFFERL) INC A CP 13 JP NZ,FERMELABOUCLE003 LD A,0 FERMELABOUCLE003: LD (UARTPOINTEURBUFFERL),A POP AF POP HL POP BC OR 0 RET BUFFERVIDE001: POP AF POP HL POP BC SCF RET ;>>>>>>LECTURE DANS LE RTC READRTC: ;C=Adresse RETOUR A=Valeur ;V PUSH BC LD A,C OUT (RTCADR),A POP BC IN A,(RTCIO) RET ;>>>>>ECRITURE DANS LE RTC WRITERTC: ;C=Adresse A=Valeur ;V PUSH AF LD A,C OUT (RTCADR),A POP AF OUT (RTCIO),A CALL SETCHECKSUMRTC RET ;>>>>>>>>>Calcul du CheckSum RTC SETCHECKSUMRTC: ;V PUSH AF PUSH BC PUSH DE LD A,0 LD E,A LD C,14 BOUCLECHECKRTC01: LD A,E PUSH AF CALL READRTC LD D,A POP AF ADD A,D INC C LD E,A LD A,C CP 63 JP NZ,BOUCLECHECKRTC01 LD A,63 OUT (RTCADR),A LD A,E OUT (RTCIO),A POP DE POP BC POP AF RET ;>>>>>>>CONVERSION CHAINE >BCD CONVERTSTRINGBCD: ;HL=POINTEUR CHAINE A=VALEUR RETOUR PUSH HL PUSH BC PUSH DE LD A,(HL) LD C,$A SUB '0' LD B,0 INC A BOUCLECONVERTSTRINGBCD: DEC A JP Z,FINBOUCEL1CONVSTRING PUSH AF LD A,B ADD A,$10 LD B,A POP AF DEC C JP NZ,BOUCLECONVERTSTRINGBCD POP DE POP BC POP HL SCF RET FINBOUCEL1CONVSTRING: INC HL LD A,(HL) LD C,$A SUB '0' INC A BOUCLECONVERTSTRINGBCD2: DEC A JP Z,FINBOUCEL2CONVSTRING PUSH AF LD A,B ADD A,$1 LD B,A POP AF DEC C JP NZ,BOUCLECONVERTSTRINGBCD2 POP DE POP BC POP HL SCF RET FINBOUCEL2CONVSTRING: LD A,B POP DE POP BC POP HL OR 0 RET ;>>>>>>>>>>Conversion BINAIRE >Chaine +Affichage AFFICHEBINDECPROC: ;A=valeur binaire ;V PUSH AF LD B,'0' LD C,'0' LD D,'0' INC A BOUCLEAFF001: DEC A JP Z,FINCOMPTAGE INC B LD E,A LD A,B CP ':' JP Z,DISAINE LD A,E JP BOUCLEAFF001 DISAINE: LD A,E LD B,'0' INC C LD A,C CP ':' JP Z,CENTAINE LD A,E JP BOUCLEAFF001 CENTAINE: LD C,'0' INC D LD A,E JP BOUCLEAFF001 FINCOMPTAGE: PUSH AF LD A,D CALL OUTCHARACTERPROC LD A,C CALL OUTCHARACTERPROC LD A,B CALL OUTCHARACTERPROC POP AF POP AF RET COM5746: PUSH HL LD HL,HXCMES CALL AFFICHEMESSAGEPROC POP HL POP HL JP ATTENDCOMMANDE ;>>>>>>CONVERSION HEXBCD>CHAINE +AFFICHAGE OUTBCDCHIFFREPROC: PUSH DE PUSH BC PUSH AF LD D,A AND 11110000B LD B,'0' ADD A,00010000B BOUCLE05uUf: SUB 00010000B JP Z,JYSJGR2 INC B JP BOUCLE05uUf JYSJGR2: PUSH AF LD A,B CALL OUTCHARACTERPROC POP AF LD A,D AND 00001111B LD B,'0' ADD A,00000001B BOUCLE05uUff: SUB 00000001B JP Z,JYSJGR3 INC B JP BOUCLE05uUff JYSJGR3: PUSH AF LD A,B CALL OUTCHARACTERPROC POP AF POP AF POP BC POP DE RET ;>>>>>>>>>CONVERSION CHAINE>Binaire CONVERTDECBINPROC: ;DE=POINTEUR chaine Retour A PUSH BC LD A,(DE) SUB '0' LD B,A LD A,0 INC B JO444: DEC B JP Z,JO444B ADD A,100 ; JP PO,ERREUR546 JP JO444 JO444B: INC DE LD C,A LD A,(DE) SUB '0' LD B,A LD A,C INC B JO445: DEC B JP Z,JO445B ADD A,10 ; JP PO,ERREUR546 JP JO445 JO445B: INC DE LD C,A LD A,(DE) SUB '0' LD B,A LD A,C INC B JO446: DEC B JP Z,JO446B ADD A,1 ; JP PO,ERREUR546 JP JO446 JO446B: POP BC OR 0 RET ERREUR546: POP BC SCF RET ;>>>>>>>>>>>Procedure d'envoi de caractŠre via la RS232 OUTCHARACTERPROC: ;A=caractŠre PUSH AF ATTENDUART: IN A,(UART5) BIT 5,A JP Z,ATTENDUART ATTENDTERM: ; IN A,(UART6) ; BIT 5,A ; JP Z,ATTENDTERM POP AF OUT (UART0),A RET ;>>>>>>>>>>Routine d'affichage de message AFFICHEMESSAGEPROC: ;HL=pointeur du message en memoire (se terminant par 13) ;V PUSH AF PUSH BC PUSH DE PUSH HL J447: LD A,(HL) CP 0 JP Z,FINAFFICHEMESSAGEPROC CALL OUTCHARACTERPROC INC HL JP J447 FINAFFICHEMESSAGEPROC: POP HL POP DE POP BC POP AF RET ;>>>>>>GESTION COMMANDE CLS EFFACEECRANPROC: ;V PUSH AF LD HL,FONDNCB CALL AFFICHEMESSAGEPROC POP AF POP HL JP ATTENDCOMMANDE RET ;>>>>>>GESTION COMMANDE EXECUTE EXECUTEPROC: ;V PUSH AF PUSH HL PUSH BC PUSH DE LD B,150 BOUCLECHERCHE002: LD A,(DE) CP $20 JP NZ,RECHERCHEFICHIER INC DE DEC B JP NZ,BOUCLECHERCHE002 FINEXECUTE01: LD HL,MESSEXECUTE01 CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE FINEXECUTE02: LD HL,MESSEXECUTE02 CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE RECHERCHEFICHIER: CALL OUVREFICHIERPROC JP NC,GOEXECUTE JP FINEXECUTE02 GOEXECUTE: PUSH HL LD BC,4 ADD HL,BC LD BC,EXESIGNATURE BOUCLECHECKSIGNATURE: LD A,(BC) LD B,(HL) INC HL INC BC CP B JP Z,BOUCLECHECKSIGNATURE CP 0 JP NZ,FICHPASEXEC POP HL PUSH HL LD HL,MESSEXECUTE03 CALL AFFICHEMESSAGEPROC POP HL LD BC,POINTDERETOUR PUSH BC PUSH HL RET ;>execution du programme FICHPASEXEC: POP HL LD HL,MESSEXECUTE05 CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE RET POINTDERETOUR: LD HL,MESSEXECUTE04 CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE RET ;>>>>>>>>GESTION COMMANDE AIDE AFFICHEAIDEPROC: ;V PUSH AF LD HL,TEXTEAIDE01 CALL AFFICHEMESSAGEPROC CALL WAITCHARACTERPROC LD HL,TEXTEAIDE02 CALL AFFICHEMESSAGEPROC POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>BOUCLE DE RALENTISSEMENT RALENTPROC: ;V PUSH AF PUSH BC LD B,100 LD C,10 BOUCLERAL01: LD A,(HL) LD A,(HL) LD A,(HL) LD A,(HL) LD A,(HL) LD A,(HL) LD A,(HL) DEC B JP NZ,BOUCLERAL01 LD B,100 DEC C JP NZ,BOUCLERAL01 POP BC POP AF RET ;>>>>>>>BOUCLE D'ATTENTE (1s<2s) UNESECONDEPROC: ;V PUSH BC PUSH AF LD B,$FF JPWITEUNESECONDE: LD A,$A OUT (RTCADR),A IN A,(RTCIO) AND 10000000B JP Z,JPWITEUNESECONDE CALL RALENTPROC LD A,B LD B,0 CP 0 JP NZ,JPWITEUNESECONDE POP AF POP BC RET ;>>>>>>>>>>GESTION COMMANDE LISTE AFFICHELISTE: PUSH AF LD HL,LISTEMES01 CALL AFFICHEMESSAGEPROC LD HL,LISTEFICHIER LD D,10 LD BC,8 LD E,0 BOUCLECHERCHERCHEFICH: LD A,(HL) CP 0 JP NZ,FICHIERTROUVER ADD HL,BC DEC D JP NZ,BOUCLECHERCHERCHEFICH LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC LD A,E CP 0 JP NZ,J454RRTaaa LD HL,LISTEMES02 CALL AFFICHEMESSAGEPROC J454RRTaaa: POP AF POP HL JP ATTENDCOMMANDE FICHIERTROUVER: INC E PUSH AF PUSH HL J12312RE: LD A,(HL) CALL OUTCHARACTERPROC INC HL CP 13 JP NZ,J12312RE POP HL POP AF PUSH BC PUSH HL PUSH AF PUSH DE LD BC,7 ADD HL,BC LD D,0 LD C,0 LD B,(HL) LD HL,MEMORYMAP BOUCLECOMPTEBLOC08: LD A,(HL) CP B JP Z,ADDBLOC14 JRETOUR015: INC HL DEC D JP NZ,BOUCLECOMPTEBLOC08 JP FINCONTNBBLOC08 ADDBLOC14: INC C JP JRETOUR015 FINCONTNBBLOC08: LD A,9 CALL OUTCHARACTERPROC CALL OUTCHARACTERPROC CALL OUTCHARACTERPROC LD A,C CALL AFFICHEBINDECPROC LD HL,LISTEMES03 CALL AFFICHEMESSAGEPROC POP DE POP AF POP HL POP BC LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC ADD HL,BC DEC D JP NZ,BOUCLECHERCHERCHEFICH LD A,13 CALL OUTCHARACTERPROC LD A,10 CALL OUTCHARACTERPROC JP J454RRTaaa ;******************************MODULE RX XMODEM**************************** RECEPTIONXMODEMPROC: PUSH AF PUSH HL PUSH BC PUSH DE LD B,150 BOUCLECHERCHE0026: LD A,(DE) CP 13 JP Z,FINMESSAGEXMOD CP $20 JP NZ,CREATIONFICHIER INC DE DEC B JP NZ,BOUCLECHERCHE0026 FINMESSAGEXMOD: LD HL,MESS01RECXMODEM CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE CREATIONFICHIER: PUSH DE LD C,10 CREATIONFICHIERB: INC DE LD A,(DE) CP 13 JP Z,POSIFINXMOD CP $20 JP Z,POSIFINXMOD DEC C JP Z,POSIFINXMOD JP CREATIONFICHIERB POSIFINXMOD: LD A,13 LD (DE),A POP DE PUSH DE POP HL CALL ADDFICHIER ;Creation du fichier PUSH BC POP HL JP C,ANNULEXMODEM PUSH HL LD HL,MESS04RECXMODEM CALL AFFICHEMESSAGEPROC POP HL LD (VALEURTEMP),A LD D,$FF LD E,$FF BOUCLEATTENTEXMODEM: LD A,$A OUT (RTCADR),A IN A,(RTCIO) AND 10000000B JP NZ,TIMEUPDT JP JP10023 TIMEUPDT: CALL RALENTPROC LD A,$15 ;nak CALL OUTCHARACTERPROC JP10023: CALL READBUFFERUART JP C,BOUCLEATTENTEXMODEM CP 'q' JP Z,ANNULEXMODEM CP $18 JP Z,ANNULEXMODEM CP 1 ;soh JP Z,PREMIERBLOQUEXMOD JP BOUCLEATTENTEXMODEM PREMIERBLOQUEXMOD: LD D,0 LD B,1 LD C,128 JP J996663 BOUCLE128XMOD: LD D,0 INC B LD C,128 CALL WAITCHARACTERPROC CP $1 JP Z,J996663ADDM CP $18 JP Z,ANNULEXMODEM CP $4 JP Z,FINDETRANSMISSIONXMOD DEC B JP BOUCLE128XMOD J996663ADDM: PUSH HL PUSH AF PUSH BC LD A,(VALEURTEMP) LD C,1 CALL DEMANDEMEMOIRE ;C=Nombre de blocs retour HL=POSITION PREMIER BLOQUE a=HANDLE ;Si carry flag=1 >erreur POP BC POP AF POP HL JP C,ANNULEXMODEM LD C,128 J996663: CALL WAITCHARACTERPROC ; CP B ; JP NZ,ANNULEXMODEM CALL WAITCHARACTERPROC TELECHARGE128: CALL WAITCHARACTERPROC LD (HL),A INC HL DEC C JP NZ,TELECHARGE128 CALL WAITCHARACTERPROC ;CP D JP CHECKSUMOKPASDEPB PUSH BC LD BC,$FF7F ADD HL,BC POP BC CALL UNESECONDEPROC LD C,128 LD D,0 LD A,$15 ;nak CALL OUTCHARACTERPROC JP BOUCLE128XMOD CHECKSUMOKPASDEPB: CALL RALENTPROC CALL RALENTPROC CALL RALENTPROC LD A,$6 ;ack CALL OUTCHARACTERPROC INC B JP BOUCLE128XMOD FINDETRANSMISSIONXMOD: CALL UNESECONDEPROC LD A,$6 CALL OUTCHARACTERPROC LD A,$4 ; CALL OUTCHARACTERPROC LD A,$6 ;ack CALL OUTCHARACTERPROC CALL WAITCHARACTERPROC LD HL,MESS03RECXMODEM CALL AFFICHEMESSAGEPROC POP BC POP HL POP AF POP AF JP ATTENDCOMMANDE ANNULEXMODEM: ; IN A,(UART4) ; XOR 1 ; OUT (UART4),A LD A,$18 ;can CALL OUTCHARACTERPROC LD A,$18 ;can CALL OUTCHARACTERPROC LD HL,MESS02RECXMODEM CALL AFFICHEMESSAGEPROC POP BC POP HL POP AF POP AF JP ATTENDCOMMANDE RET ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ PLAYCOMMANDEEX: PUSH AF PUSH HL PUSH BC PUSH DE LD B,150 BOUCLECHERCHE0027: LD A,(DE) CP 13 JP Z,FINMESPLAYPROC CP $20 JP NZ,JOUELISTE INC DE DEC B JP NZ,BOUCLECHERCHE0027 JP FINMESPLAYPROC JOUELISTE: CALL PLAYPROC JP FINPLAYCOMMANDEEX FINMESPLAYPROC: LD HL,MESS01PLAYPROC CALL AFFICHEMESSAGEPROC FINPLAYCOMMANDEEX: POP DE POP BC POP HL POP AF POP AF JP ATTENDCOMMANDE PLAYPROC: PUSH AF PUSH HL PUSH BC JOUEBOUCLE: LD B,0 LD A,(DE) CP '0' JP Z,JOUENOTE INC B CP '1' JP Z,JOUENOTE INC B CP '2' JP Z,JOUENOTE INC B CP '3' JP Z,JOUENOTE INC B CP '4' JP Z,JOUENOTE INC B CP '5' JP Z,JOUENOTE INC B CP '6' JP Z,JOUENOTE INC B CP '7' JP Z,JOUENOTE INC B CP '8' JP Z,JOUENOTE INC B CP '9' JP Z,JOUENOTE INC B CP 'A' JP Z,JOUENOTE INC B CP 'B' JP Z,JOUENOTE INC B CP 'C' JP Z,JOUENOTE INC B CP 'D' JP Z,JOUENOTE INC B CP 'E' JP Z,JOUENOTE INC B CP 'F' JP Z,JOUENOTE JP FINPLAYPROC JOUENOTE: LD A,B LD B,75 CALL BEEPPROC INC DE JP JOUEBOUCLE FINPLAYPROC: POP BC POP HL POP AF RET ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INFOCOMMANDE: PUSH BC PUSH HL PUSH AF LD HL,IRQSTAT LD A,0 LD (HL),A BOUCLEINFO01: LD HL,IRQSTAT LD A,0 LD (HL),A LD HL,INFOMES001 CALL AFFICHEMESSAGEPROC LD HL,IDROM CALL AFFICHEMESSAGEPROC LD HL,INFOMES002 CALL AFFICHEMESSAGEPROC CALL FREEMEM CALL AFFICHEBINDECPROC LD HL,MEMOIREMES02 CALL AFFICHEMESSAGEPROC LD HL,INFOMES003 CALL AFFICHEMESSAGEPROC LD HL,INFOMES005 LD A,(EXTHANDLER) ;Y a t'il une extension d'INT? CP 1 JP Z,INFOJP001 LD HL,INFOMES006 INFOJP001: CALL AFFICHEMESSAGEPROC LD HL,INFOMES007 CALL AFFICHEMESSAGEPROC LD HL,INTCOUNT1 +3 LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC LD HL,INFOMES008 CALL AFFICHEMESSAGEPROC LD HL,INTCOUNT2 +3 LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC LD HL,INFOMES009 CALL AFFICHEMESSAGEPROC LD HL,INTCOUNT3 +3 LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC DEC HL LD A,(HL) CALL AFFICHEBINHEXBYTEPROC LD HL,INFOMES010 CALL AFFICHEMESSAGEPROC LD HL,INFOMES005 LD A,(AUTOMATIQUEMODE) CP 1 JP Z,INFOJP002 CP 0 JP NZ,INFOJP003 LD HL,INFOMES006 INFOJP002: CALL AFFICHEMESSAGEPROC JP INFOJP004 INFOJP003: LD HL,INFOMES011 CALL AFFICHEMESSAGEPROC LD A,(AUTOMATIQUEMODE) CALL AFFICHEBINDECPROC INFOJP004: LD HL,INFOMES111 CALL AFFICHEMESSAGEPROC BOUCLEINFO02: CALL READBUFFERUART CP 'Q' JP Z,FININFO01 LD A,(IRQSTAT) CP 1 JP Z,BOUCLEINFO01 JP BOUCLEINFO02 FININFO01: POP AF POP HL POP BC POP AF JP ATTENDCOMMANDE ;**************************Procedures Gestion Fichier/Memoire**************** ;>>>>>>>>Cr‚ation de Fichier ADDFICHIER:;HL=pointeur nom du fichier ;Proc‚dure de cr‚ation d'un fichier PUSH HL ;RETOUR : A=HANDLE SI CF=1 ERREUR PUSH DE PUSH BC PUSH HL POP DE PUSH HL CALL OUVREFICHIERPROC POP HL JP NC,ERREURCREATIONFI2 LD HL,LISTEFICHIER LD B,10 BOUCLECHERCHEPLACELIBRE: LD A,(HL) CP 0 JP Z,PLACELIBREFICHIER PUSH BC LD BC,8 ADD HL,BC POP BC DEC B JP NZ,BOUCLECHERCHEPLACELIBRE ERREURCREATIONFI2: POP BC POP DE POP HL SCF RET PLACELIBREFICHIER: PUSH HL LD B,6 BOUCLECOPIENOM: LD A,(DE) LD (HL),A CP 13 JP Z,FINICOPIE INC HL INC DE DEC B JP NZ,BOUCLECOPIENOM FINICOPIE: LD A,13 LD (HL),A POP HL LD C,1 LD A,0 PUSH HL CALL DEMANDEMEMOIRE ;C=Nombre de blocs PUSH HL POP BC POP HL JP C,ERREURCREATIONFI PUSH BC LD BC,7 ADD HL,BC POP BC LD (HL),A POP HL POP DE POP HL OR 0 RET ; HL=POSITION PREMIER BLOQUE a=HANDLE ERREURCREATIONFI: LD A,0 LD (HL),A POP BC POP DE POP HL SCF RET ;>>>>>>>>Effacement de Fichier EFFACEFICHIER: ;DE=POINTEUR NOM PUSH DE ;RETOUR CF=1 >ERREUR PUSH BC PUSH AF PUSH HL LD A,(DE) CP 13 JP Z,FINEFFACEERR LD HL,LISTEFICHIER BOUCLECOMPARENFICH002EFF: LD A,10 LD (VALEURTEMP3),A LD C,8 PUSH HL PUSH DE JGJK4546EFF: LD A,(DE) LD B,(HL) CP B JP NZ,FICHIERSUIVANTEFF LD A,B CP 13 JP Z,CHERCHEHANDLEEFF INC DE INC HL DEC C JP NZ,JGJK4546EFF POP DE POP HL JP FINEFFACEERR FICHIERSUIVANTEFF: POP DE POP HL LD BC,8 ADD HL,BC LD C,8 LD A,(VALEURTEMP3) DEC A JP Z,FINEFFACEERR LD (VALEURTEMP3),A PUSH HL PUSH DE JP JGJK4546EFF CHERCHEHANDLEEFF: POP DE POP HL LD A,0 LD (HL),A LD BC,7 ADD HL,BC LD B,(HL) LD DE,MEMORYMAP LD C,0 BOUCLECHERCHE00545EFF: LD A,(DE) CP B JP NZ,PASBONHANLDE LD A,0 LD (DE),A PASBONHANLDE: INC DE INC C JP NZ,BOUCLECHERCHE00545EFF POP HL POP AF POP BC POP DE OR 0 RET FINEFFACEERR: POP HL POP AF POP BC POP DE SCF RET ;>>>>>>>>Ouverture d'un Fichier OUVREFICHIERPROC: ;DE=POINTEUR NOM ;RETOUR= A=HANDLE HL=POINTEUR DEBUT cf=1>erreur PUSH DE PUSH BC LD A,(DE) CP 13 JP Z,FINOUVERTUREERR LD HL,LISTEFICHIER BOUCLECOMPARENFICH002: LD A,10 LD (VALEURTEMP3),A LD C,8 PUSH HL PUSH DE JGJK4546: LD A,(DE) LD B,(HL) CP B JP NZ,FICHIERSUIVANT LD A,B CP 13 JP Z,CHERCHEHANDLE INC DE INC HL DEC C JP NZ,JGJK4546 POP DE POP HL JP FINOUVERTUREERR FICHIERSUIVANT: POP DE POP HL LD BC,8 ADD HL,BC LD C,8 LD A,(VALEURTEMP3) DEC A JP Z,FINOUVERTUREERR LD (VALEURTEMP3),A PUSH HL PUSH DE JP JGJK4546 CHERCHEHANDLE: POP DE POP HL LD BC,7 ADD HL,BC LD B,(HL) LD DE,MEMORYMAP LD C,0 LD HL,$4000 BOUCLECHERCHE00545: LD A,(DE) CP B JP Z,FICHIERTROUVE INC DE PUSH BC LD BC,128 ADD HL,BC POP BC INC C JP NZ,BOUCLECHERCHE00545 JP FINOUVERTUREERR FICHIERTROUVE: LD A,B POP BC POP DE OR 0 RET FINOUVERTUREERR: POP BC POP DE SCF RET ;>>>>>>>>Gestion Commande EFFACE EFFACEFICHIERPROC: PUSH AF PUSH HL PUSH BC PUSH DE LD B,150 BOUCLECHERCHE00266: LD A,(DE) CP 13 JP Z,FINMESSAGEEFFACEFZ CP $20 JP NZ,EFFACELEFICHIER INC DE DEC B JP NZ,BOUCLECHERCHE00266 FINMESSAGEEFFACE: LD HL,MESS01EFFACEFICH CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE FINMESSAGEEFFACEFZ: LD HL,MESS03EFFACEFICH CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE EFFACELEFICHIER: PUSH DE LD C,7 EFFACELEFICHIERB: INC DE LD A,(DE) CP 13 JP Z,POSIFINEFF CP $20 JP Z,POSIFINEFF DEC C JP Z,POSIFINEFF JP EFFACELEFICHIERB POSIFINEFF: LD A,13 LD (DE),A POP DE PUSH DE POP HL CALL EFFACEFICHIER JP C,FINMESSAGEEFFACE LD HL,MESS02EFFACEFICH CALL AFFICHEMESSAGEPROC POP DE POP BC POP HL POP AF POP HL JP ATTENDCOMMANDE ;>>>>>>>>>Demande de Memoire ;A=handle du fichier a etendre si A=0 creation du handle DEMANDEMEMOIRE: ;C=Nombre de blocs retour : HL=POSITION PREMIER BLOQUE a=HANDLE PUSH BC ;Si carry flag=1 >erreur PUSH AF LD HL,$4000 LD DE,MEMORYMAP CP 0 JP NZ,RECHERCHEHANDLEEXISTANT LD B,0 BOUCLECHERCHEBLOQUELIBRE: LD A,(DE) CP 0 JP Z,BLOQUELIBRE012 RETOURTESTETAILLE: PUSH BC LD BC,128 ADD HL,BC POP BC INC DE INC B JP NZ,BOUCLECHERCHEBLOQUELIBRE PASTROUVERZ: POP AF POP BC SCF RET BLOQUELIBRE012: PUSH DE PUSH BC TESTETAILLE: LD A,(DE) CP 0 JP NZ,PASASSEZGRAND INC DE DEC C JP NZ,TESTETAILLE POP BC POP DE CALL NOUVEAUNUMERO ;A=numero LD (DE),A POP BC POP BC OR 0 RET PASASSEZGRAND: POP BC POP DE JP RETOURTESTETAILLE RECHERCHEHANDLEEXISTANT: LD HL,$4000 LD DE,MEMORYMAP PUSH AF LD A,C LD (VALEURTEMP2),A POP AF LD C,A LD B,0 BOUCLECHRCHEVALEURA: LD A,(DE) CP C JP Z,CHERCHEVALEURZERO PUSH BC LD BC,128 ADD HL,BC POP BC INC DE INC B JP NZ,BOUCLECHRCHEVALEURA JP PASTROUVERZ CHERCHEVALEURZERO: LD B,0 CHERCHEVALEURZEROB: LD A,(DE) CP 0 JP Z,TROUVERZEROYO CP C JP NZ,PASTROUVERZ PUSH BC LD BC,128 ADD HL,BC POP BC INC DE INC B JP NZ,CHERCHEVALEURZEROB JP PASTROUVERZ TROUVERZEROYO: LD A,C PUSH AF LD A,(VALEURTEMP2) LD C,A POP AF BOUCLEPROGCONTINUEPAGE: PUSH AF LD A,(DE) CP 0 JP NZ,ERREURMEM78 POP AF LD (DE),A INC DE DEC C JP NZ,BOUCLEPROGCONTINUEPAGE POP AF POP BC RET ERREURMEM78: POP AF JP PASTROUVERZ ;>>>>>>>>>Recherche d'un Handle non existant NOUVEAUNUMERO: ;RETOUR A=numero PUSH BC PUSH HL LD HL,MEMORYMAP LD B,0 LD C,0 BOUCLECHERCHEHANDLEABSENT: LD A,(HL) CP C JP Z,NUMEROSUIVANT INC HL INC B JP NZ,BOUCLECHERCHEHANDLEABSENT LD A,C POP HL POP BC RET NUMEROSUIVANT: LD HL,MEMORYMAP LD B,0 INC C JP BOUCLECHERCHEHANDLEABSENT ;>>>>>>>> Gestion commande MEMOIRE AFFICHEMEMOIRE: PUSH BC PUSH AF LD HL,MEMOIREMES01 CALL AFFICHEMESSAGEPROC CALL FREEMEM CALL AFFICHEBINDECPROC LD HL,MEMOIREMES02 CALL AFFICHEMESSAGEPROC POP AF POP BC POP HL JP ATTENDCOMMANDE FREEMEM: ;retour A=bloc libre PUSH HL PUSH BC LD HL,MEMORYMAP LD B,255 LD C,0 BOUCLEMEMOIRELIBRE: LD A,(HL) CP 0 JP NZ,BLOQUEPASLIBRE INC C BLOQUEPASLIBRE: INC HL DEC B JP NZ,BOUCLEMEMOIRELIBRE LD A,C POP BC POP HL RET CONVERTBINHEXBYTEPROC: ;BC=caractere ;A=valeur PUSH AF PUSH DE LD E,A LD C,'0' AND 11110000B CP 0 JP Z,SUITECONVERTHEXBYTE BOUCLECONVERT001: INC C LD D,A LD A,C CP ':' JP NZ,SUITEBOUCLE0515 LD C,'A' SUITEBOUCLE0515: LD A,D SUB 00010000B JP NZ,BOUCLECONVERT001 SUITECONVERTHEXBYTE: LD B,C PUSH BC LD C,'0' LD A,E AND 00001111B JP Z,FINCONVERTBINHEXBYTEPROC BOUCLECONVERT002: INC C LD D,A LD A,C CP ':' JP NZ,SUITEBOUCLE0616 LD C,'A' SUITEBOUCLE0616: LD A,D DEC A JP NZ,BOUCLECONVERT002 FINCONVERTBINHEXBYTEPROC: POP DE LD B,D POP DE POP AF RET AFFICHEBINHEXBYTEPROC: ; A=valeur PUSH BC PUSH AF CALL CONVERTBINHEXBYTEPROC LD A,B CALL OUTCHARACTERPROC LD A,C CALL OUTCHARACTERPROC POP AF POP BC RET ;********************Comparateur de chaine pour l'interpreteur**************** COMPAREPROC: ;HL=adresse chaine reference DE=adresse chaine a comparer PUSH AF ;A=0 Commande vide A=$11 Commande non ok A=$22 commande ok PUSH HL PUSH BC LD A,(DE) CP 13 JP Z,PASDECOMMANDE BOUCLEAD01: LD A,(DE) CP $20 JP NZ, JADD1 INC DE JP BOUCLEAD01 JADD1: CP 13 JP Z,PASDECOMMANDE BOUCLEN212321: LD A,(HL) PUSH AF LD A,(DE) LD B,A POP AF CP 0 JP Z,ANA003 CP B JP NZ,JP0002 RETOURCOMPARELL: INC DE INC HL JP BOUCLEN212321 JP0002: PUSH AF ADD A,32 CP B JP NZ,JP0002EA POP AF JP RETOURCOMPARELL ANA003: LD A,(DE) CP 13 JP Z,JP0003 CP $20 JP Z,JP0003 JP JP0002 JP0002EA: POP AF POP BC POP HL POP AF LD A,$11 OR 0 RET JP0003: POP BC POP HL POP AF LD A,$22 SCF RET PASDECOMMANDE: POP BC POP HL POP AF LD A,$0 OR 0 RET ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Message divers<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MESSAGE: .text "Z80 Micro System" .byte 10,13 .byte 13,10,0 MESSAGEINIT: .byte 13,10 .text "Z80MicroSys OS V1.5 " .byte 13,10 .text "Par Jeff / HxC2001 1999/2000" .byte 13,10 .text "Tapez AIDE pour la liste des commandes..." .byte 13,10,0 ; IRQ du CPU: LOGO: .byte 27,91 .text "44;31m" .text " ZZZZZZZZZZ 888888 000000 " .byte 13,10 .text " Z 8 8 0 0 " .byte 13,10 .text " Z 888888 0 0 " .byte 13,10 .text " Z 8 8 0 0 " .byte 13,10 .text " Z 8 8 0 0 " .byte 13,10 .text " ZZZZZZZZZZ 888888 000000 " .byte 13,10 .text " Micro System " .byte 27,91 .text "40;37m" .byte 13,10,0 TEXTEAIDE01: .byte 12 .byte 27,91 .text "44;31m" .text " Aide Z80 Micro System " .byte 27,91 .text "37;40m" .byte 13,10,13,10 .text "Commandes:" .byte 13,10,13,10 .text "AIDE Affiche cette Aide" .byte 13,10 .text "CLS Efface l'ecran" .byte 13,10 .text "RAZ Remise a zero" .byte 13,10 .text "RECXMODEM Nom_du_fichier Reception d'un fichier via le Protocole XMODEM" .byte 13,10 .text "EXECUTE Nom_du_fichier Execute un programme." .byte 13,10 .text "MEMOIRE Affiche la quantite de memoire libre." .byte 13,10 .text "LISTE Affiche la liste des fichiers en memoire." .byte 13,10 .text "EFFACE Nom_du_fichier EFFACE un fichier." .byte 13,10 .text "HORLOGE Affiche et configure l'horloge systeme" .byte 13,10 .text "HEURE Indique l'heure" .byte 13,10 .text "DATE Indique la date" .byte 13,10 .text "CONFIGE/S Configuration des ports E/S." .byte 13,10 .text "MARCHE abc Active une ligne des 8255" .byte 13,10 .text " (ex:MARCHE 2A5 active le bit 5 du port A du 2eme 8255) " .byte 13,10 .text "ARRET abc Desactive une ligne des 8255" .byte 13,10 .text " (ex:ARRET 1B2 desactive le bit 2 du port B du 1er 8255) " .byte 13,10 .byte 13,10 .text "Appuyez sur une touche pour continuer......." .byte 13,10,0 TEXTEAIDE02: .byte 12 .byte 27,91 .text "44;31m" .text " Aide Z80 Micro System " .byte 27,91 .text "37;40m" .byte 13,10,13,10 .text "MODEAUTO Valide le mode Automatique." .byte 13,10 .text "MODENORMALE Annule le mode Automatique." .byte 13,10 .text "OUT ppp,vvv Envoie la valeur vvv au port ppp (decimal)" .byte 13,10 .text "INPUT ppp Affiche la valeur presente au port ppp" .byte 13,10 .text "MOTDEPASSE Permet d'installer un mot de passe dans le systeme." .byte 13,10 .text "CONFUART Permet de configurer le port serie du systeme." .byte 13,10 .text "BEEP ......." .byte 13,10 .text "PLAY Permet de jouer une melodie sur le buzzer...." .byte 13,10 .text "INFO Affiche l'etat du systeme..." .byte 13,10 .text "HALT Protege le systeme..." .byte 13,10 .byte 13,10 .text "Pour les dernieres informations et mises a jour du systeme" .byte 13,10 .text "allez sur le site:" .byte 13,10 .text "http://digilander.iol.it/jeanfrancoisdelnero/" .byte 13,10 .byte 0 FONDNCB: .byte 27,91 .text "40;37m" .byte 12,13,10,0 HXCMES: .byte 13,10 .byte 27,91 .text "44;31m" .text "H H X X CCCCC " .byte 13,10 .text "H H X X C C" .byte 13,10 .text "H H X X C " .byte 13,10 .text "HHHHHHHH X C " .byte 13,10 .text "H H X X C " .byte 13,10 .text "H H X X C C" .byte 13,10 .text "H H X X CCCCC " .byte 13,10 .byte 27,91 .text "37;40m" .text " PRODUCTION " .byte 13,10,0 MESS01CONF8255: .text "Configuration des Port E/S:" .byte 10,13,0 MESS02CONF8255: .text "Modes des ports 8255 :" .byte 10,13,0 MESS03CONF8255: .text "ENTREE " .byte 13,10,0 MESS04CONF8255: .text "SORTIE " .byte 13,10,0 MESS05CONF8255: .text " 1A: " .byte 0 MESS06CONF8255: .text " 1B: " .byte 0 MESS07CONF8255: .text " 1C: " .byte 0 MESS08CONF8255: .text " 2A: " .byte 0 MESS09CONF8255: .text " 2B: " .byte 0 MESS10CONF8255: .text " 2C: " .byte 0 MESS11CONF8255: .text "Pressez les touches 1,2,3,4,5,6 pour changer les modes ou q pour quitter." .byte 13,10,10,13,0 MESS01PLAYPROC: .byte 13,10 .text "Syntaxe: PLAY 0123456789ABCDEF" .byte 0 MESS01RECXMODEM: .byte 13,10 .text "Syntaxe: RECXMODEM Nom_du_fichier " .byte 0 MESS04RECXMODEM: .byte 13,10 .text "Attente....(q pour annuler) :" .byte 0 MESS02RECXMODEM: .byte 10,13 .text "operation annulee!" .byte 13,10,0 MESS03RECXMODEM: .byte 10,13,10,13 .text "Fichier telecharge..." .byte 13,10,0 OUTPMESS01: .byte 10,13 .text "Utilisation : OUT ppp,vvv ppp=port vvv=valeur " .byte 10,13,0 INPMESS01: .byte 10,13 .text "Utilisation : INPUT ppp ppp=port " .byte 10,13,0 MESSARRET01: .byte 10,13 .text "Utilisation : ARRET npb avec n numero du 8255 (1 ou 2)" .byte 10,13 .text " avec p comme port (A B ou C)" .byte 10,13 .text " avec b comme bit (de 0 a 7)" .byte 10,13,0 MESSMARCHE01: .byte 10,13 .text "Utilisation : MARCHE npb avec n numero du 8255 (1 ou 2)" .byte 10,13 .text " avec p comme port (A B ou C)" .byte 10,13 .text " avec b comme bit (de 0 a 7)" .byte 10,13,0 MESSAGEHEURE: .byte 13,10 .text "Heure du systeme: " .byte 0 RTCCHECKMES01: .byte 13,10 .text "Erreur CMOS: Checksum RAM RTC Effacee" .byte 10,13,0 MESSAGEDATE: .byte 13,10 .text "Date du systeme: " .byte 0 HORLOGEMES01: .text "Horloge Systeme:" .byte 13,10 .text "H pour regler l'heure , D pour regler la date , Q pour quitter" .byte 13,10,0 HORLOGEMES02: .text "Reglage de la date :" .byte 13,10 .text "Utilisez les touches + et - pour regler et la touche ENTREE" .byte 13,10 .text "pour passer aux mois et aux annees." .byte 13,10,0 HORLOGEMES03: .text "Reglage de l'heure:" .byte 13,10 .text "Utilisez les touches + et - pour regler et la touche ENTREE" .byte 13,10 .text "pour passer aux minutes et aux secondes." .byte 13,10,0 PASSWMES01: .byte 13,10 .text "Entrez le mot de passe actuel: " .byte 0 PASSWMES02: .byte 13,10 .text "Mot de passe incorrect!!!!" .byte 13,10,0 PASSWMES09: .byte 13,10 .text " " .byte 13,10,0 PASSWMES03: .byte 13,10 .text "Entrez le nouveau mot de passe: " .byte 0 PASSWMES04: .byte 13,10 .text "Confirmez : " .byte 0 DPASSWMES01: .text "Mot de passe: " .byte 0 MEMOIREMES01: .byte 10,13 .text "Il reste " .byte MEMOIREMES02: .text " bloc(s) parmis 256." .byte 10,13,0 LISTEMES01: .byte 13,10 .text "Fichier(s) present en memoire :" .byte 13,10,0 LISTEMES02: .byte 10,13 .text " Aucun fichier present..." .byte 13,10,0 LISTEMES03: .text " bloc(s) " .byte 0 MESSEXECUTE01: .text "Utilisation : EXECUTE Nom_du_fichier " .byte 13,10,0 MESSEXECUTE02: .byte 13,10 .text "Programme introuvable!!!" .byte 13,10,0 MESSEXECUTE03: .byte 13,10 .text "Fichier trouve. Demarage du Programme ..." .byte 13,10,0 MESSEXECUTE04: .byte 13,10 .text "Programme termine. Retour a l'interpreteur..." .byte 13,10,0 MESSEXECUTE05: .byte 13,10 .text "Fichier non executable!" .byte 13,10,0 AUTOMES01: .byte 13,10 .text "Mode automatique actif...." .byte 10,13,0 AUTOMES02: .byte 13,10 .text "Erreur! Script AUTOT absent. Mode automatique impossible!" .byte 10,13,0 NORMMES01: .byte 13,10 .text "Mode Automatique annulee..." .byte 13,10,0 MESS01EFFACEFICH: .byte 13,10 .text "Fichier introuvable!" .byte 13,10,0 MESS02EFFACEFICH: .byte 13,10 .text "Fichier Efface.." .byte 13,10,0 MESS03EFFACEFICH: .byte 13,10 .text "Syntaxe: EFFACE Nom_du_fichier" .byte 13,10,0 CONFUARTMES01: .byte 12 .text "Configuration de l'Uart:" .byte 13,10 .text "B pour changer la vitesse, Q pour valider" .byte 13,10,13,10,0 CONFUARTMES02: .text "50" .byte 0 CONFUARTMES03: .text "300" .byte 0 CONFUARTMES04: .text "1200" .byte 0 CONFUARTMES05: .text "9600" .byte 0 CONFUARTMES06: .text "19200" .byte 0 CONFUARTMES07: .text "115000" .byte 0 CONFUARTMES08: .text "Baud" .byte 0 CONFUARTMES09: .text "Inconnu!" .byte 0 CONFUARTMES10: .byte 13,10,13,10 .text "Les parametres vont etre pris en compte" .byte 10,13 .text "si et seulement si vous tapez O dans moins de 45" .byte 13,10 .text "secondes dans le format choisi." .byte 13,10 .text "Tapez O pour valider....." .byte 13,10,0 CONFUARTMES11: .text "Operation annulee..." .byte 10,13 .byte 0 CONFUARTMES12: .text "Reglage termine..." .byte 10,13 .byte 0 CONFUARTMES13: .byte 13,10 .text "Configuration validee : Changez la vitesse en baud " .byte 13,10 .text "de votre terminal...." .byte 13,10,0 CONFUARTMES14: .byte 12,13,10 .text "Tapez O ....... " .byte 13,10,0 INFOMES001: .byte 12 .text "Information Systeme:" .byte 13,10,10,10,0 INFOMES002: .byte 13,10 .text "Memoire libre: " .byte 0 INFOMES003: .text "Int Ext:" .byte 0 INFOMES004: .text "Memoire libre: " .byte 0 INFOMES005: .text "ACTIF" .byte 13,10,0 INFOMES006: .text "INACTIF" .byte 13,10,0 INFOMES007: .text "Int : " .byte 0 INFOMES008: .byte 13,10 .text "Int Uart : " .byte 0 INFOMES009: .byte 13,10 .text "Int RTC : " .byte 0 INFOMES010: .byte 13,10 .text "Mode Automatique : " .byte 0 INFOMES011: .text "ERREUR " .byte 0 INFOMES111: .byte 13,10 .text "Tapez Q pour quitter...." .byte 0 BAUDTAB: .byte $09,$00,$01,$80,$00,$60,$00,$0C,$00,$06,$00,$01,$ff MARCHEC: .text "M2A7" .byte 0 ARRETC: .text "A2A7" .byte 0 PRET: .byte 13,10 .text "Pret >" .byte 0 COMMANDEINCONNUE: .byte 13,10 .text "Commande inconnue!!!" .byte 13,10,0 UPANSI: .byte 27,91,65,0 FONDNOIR .byte 27,91 .text "40;37m" .byte 0 VT52CLS: .byte 27,91,'2','J',0 NOMFICHTABLE: .text "AUTOT" .byte 13 EXESIGNATURE: .text "JEFFZ80SYS" .byte 0 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>Liste des Commandes<<<<<<<<<<<<<<<<<<<<<<<<<<<<< COMMANDERAZ: .text "RAZ" .byte 0 COMMANDECLS: .text "CLS" .byte 0 COMMANDEAIDE: .text "AIDE" .byte 0 COMMANDECONFIGES: .text "CONFIGE/S" .byte 0 COMMANDERECEPTIONXMODEM: .text "RECXMODEM" .byte 0 COMMANDEHEURE: .text "HEURE" .byte 0 COMMANDEDATE: .text "DATE" .byte 0 COMMANDEMOTDEPASSE: .text "MOTDEPASSE" .byte 0 COMMANDEEXECUTE: .text "EXECUTE" .byte 0 COMMANDEOUT: .text "OUT" .byte 0 COMMANDEINPUT: .text "INPUT" .byte 0 COMMANDEMARCHE: .text "MARCHE" .byte 0 COMMANDEARRET: .text "ARRET" .byte 0 COMMANDEMEMOIRE: .text "MEMOIRE" .byte 0 COM5745: .text "HXC" .byte 0 COMMANDEHORLOGE: .text "HORLOGE" .byte 0 COMMANDELISTE: .text "LISTE" .byte 0 COMMANDEACTIVEAUTO: .text "MODEAUTO" .byte 0 COMMANDEMODENORM: .text "MODENORMAL" .byte 0 COMMANDEEFFACE: .text "EFFACE" .byte 0 COMMANDECONFUART: .text "CONFUART" .byte 0 COMMANDEBEEP: .text "BEEP" .byte 0 COMMANDEPLAY: .text "PLAY" .byte 0 COMMANDEINFO: .text "INFO" .byte 0 COMMANDEHALT: .text "HALT" .byte 0 ;>>>>>>>>>>>>>>>>>>>D‚finition des Adresses des p‚riph‚ques<<<<<<<<<<<<<<<<<< PIO1A: .EQU 0 ; 8255 N 1 PIO1B: .EQU 1 ; PIO1C: .EQU 2 ; PIO1CONT: .EQU 3 ; PIO2A: .EQU 4 ; 8255 N 2 PIO2B: .EQU 5 ; PIO2C: .EQU 6 ; PIO2CONT: .EQU 7 ; UART0: .EQU 8 ; DATA IN/OUT UART1: .EQU 9 ; CHECK RX UART2: .EQU 10 ; INTERRUPTS UART3: .EQU 11 ; LINE CONTROL UART4: .EQU 12 ; MODEM CONTROL 0=soff 1=rel‘ 2=convert UART5: .EQU 13 ; LINE STATUS UART6: .EQU 14 ; MODEM STATUS UART7: .EQU 15 ; SCRATCH REG. RTCADR: .EQU 17 ; Adressage RTC RTCIO: .EQU 16 ; IO RTC ;>>>>>>>>>>>>>>>>>> D‚finition des zones de m‚moire en RAM <<<<<<<<<<<<<<<<<<< RAMTOP: .EQU $BFFF ; 32Kb RAM 4000H-BFFFH BUFFERCOMMANDEADR: .EQU $4000 ;>$4100 PIO1MODE .EQU $4101 PIO2MODE .EQU $4102 PIO1AOUT .EQU $4103 PIO1BOUT .EQU $4104 PIO1COUT .EQU $4105 PIO2AOUT .EQU $4106 PIO2BOUT .EQU $4107 PIO2COUT .EQU $4108 HEURESTAT .EQU $4109 MINUTESTAT .EQU $410A SECONDESTAT .EQU $410B UARTSTATUS .EQU $410C UARTBUFFER .EQU $410D ;>$411D UARTPOINTEURBUFFERE .EQU $411E UARTPOINTEURBUFFERL .EQU $411F RTCSTAT .EQU $4120 IRQSTAT .EQU $4121 MEMORYMAP .EQU $4122 ;>$4222 ;0=libre 1=systeme LISTEFICHIER .EQU $4223 ;$4273 +80 ;10 fichier ;7 caracteurs + 1 Handle PERIODICMODE .EQU $4274 ;0=pas de routine rtc periodique ;1=procedure definie par periodicaddresse PERIODICADRESSE .EQU $4275 ;>$4276 ALARMERTCMODE .EQU $4277 ;0=pas de routine rtc alarme ;1=procedure definie par alarmeaddresse ALARMEADRESSE .EQU $4278 ;>$4279 ALARMESTAT .EQU $427A UPDATERTC .EQU $427B PERIODICSTAT .EQU $427C PERIODICCOUNT .EQU $427D EXTHANDLER .EQU $427E EXTHANDLERADR .EQU $427F ;>$4280 VALEURTEMP .EQU $4281 VALEURTEMP2 .EQU $4282 VALEURTEMP3 .EQU $4283 AUTOMATIQUEMODE .EQU $4284 ;0=Inactif 1=actif INTCOUNT1 .EQU $4285 ;>$4289 INTCOUNT2 .EQU $428A ;>$428D INTCOUNT3 .EQU $428E ;>$4291 .ORG $3F00 JP OUTCHARACTERPROC .ORG $3F03 JP WAITCHARACTERPROC .ORG $3F06 JP READBUFFERUART .ORG $3F09 JP LECTURE8255PROC .ORG $3F0C JP MARCHEARRETPROC .ORG $3F0F JP GETCLOCKPROC .ORG $3F12 JP GETDATEPROC .ORG $3F15 JP READRTC .ORG $3F18 JP DEMANDEMOTDEPASSE .ORG $3F1B JP DEMANDEMEMOIRE .ORG $3F1E JP AFFICHEBINDECPROC .ORG $3F21 JP OUVREFICHIERPROC .ORG $3F24 JP EFFACEFICHIER .ORG $3F27 JP ADDFICHIER .ORG $3F2A JP UNESECONDEPROC .ORG $3F2D JP RALENTPROC .ORG $3F30 JP AFFICHEMESSAGEPROC .ORG $3F33 JP CONVERTDECBINPROC .ORG $3F36 JP OUTBCDCHIFFREPROC .ORG $3F39 JP AFFICHEBINDECPROC .ORG $3F3C JP CONVERTSTRINGBCD .ORG $3F3F JP SETCHECKSUMRTC .ORG $3F42 JP WRITERTC .ORG $3F45 JP INITUARTPROC .ORG $3F48 JP INIT_PIO .ORG $3F4B JP BEEPPROC .ORG $3F4E JP FREEMEM .ORG $3F51 JP CONVERTBINHEXBYTEPROC .ORG $3F54 JP AFFICHEBINHEXBYTEPROC .org $3fff .end ;1999/2000 Del Nero Jean Fran‡ois ;jeanfrancoisdelnero@libero.it