SRL A ;BIT O --# REPORT RR B REPORT ---qW bit 7 DE B ;BIT O DE B REPORT RR C ;REPORT - --# BIT 7 DE C SRL A ;REPETER POUR BIT 1 RR B RR C SRL A ;REPETER POUR BIT 2 RR B RR C JR DRARET ASSEMBLER CODE D'ACTIVITE DANS REGISTRE D DRA 3:INC (IX+GPCONT) ; INCREMENTER COMPTEUR DE MULTIPLETS POP AF ; RAPPELER 3 -BITS DE DONNEES SRL A ;BIT 0--# REPORT RR D ;REPORT --# BIT 7 DE D SRL A ;REPETER POUR BIT 2 DE DONNEES RR D SRL A :REPETER POUR BIT DE DONNEES RR D JR DRARET ;.DECALAGE FINAL DES CODES D'IDENTIFICATION (ID) ET D'ACTIVITE (AGT) DRA4: POP AF ,REPOSITIONNER POINTEUR DE PILE SRL B ;DECALER BC D'UN BIT A DROITE RR C SRL B ;REPETER RR C SRL B ;REPETER RR C SRC B ;REPETER RR C SRL D ;DECALER D'UN BIT A DROITE SRL D ;REPETER MISE 1(IX+STAT);BIT 1 = 1,DONNEES ASSEMBLEES ;POUR COMPARAISON LD ADATA+ID),BC ;PLACER ID ET ACT DANS MEMOIRE A ACCES éLECTIF LD (IX+ACT),D DRA2: RES O ( IX+STAT) ; REMETTRE A ZERO BIT DRAPEAU DETECTE DRARET EXX ;RAPPELER BC, DE, HL EX AF,AF' ;RAPPELER AF RETI ;ROUTINE D'AVANCEMENT DE L'HORLOGE CLK:DI APPEL INCMIN+DEC CP OOH ;SI MIN = 00 JR NZ, CLK1 ;ALORS INCREMENTER HR APPEL INCHR+DEC MISE 7,B ;BIT 7=7;IMPRIMER EN TETE CP OOH ;SI HR = 00 JR NZ,CLK1 ;ALORS INCREMENTER JOUR APPEL INCDAY+DEC CP 01H ;SI JOUR = Ol JR NZ, CLKI ;ALORS INCREMENTER MOIS APPEL INCMON+DEC CLKI: BIT 7, B ;SI BIT 7=1 JR Z, CLKRET ; ALORS NE PAS IMPRIMER L'EN TETE APPEL PRT CLKRET: RETI ; ROUTINE D'INCREMENTATION DES MINUTES INCMIN: LD A, (MIN) ADD 01H ;MIN = MIN+1 DAA CP 60H JR NZ,MIN1 ;SI MIN = 60 XOR A ;ALORS MIN = 00 MIN1: LD (MIN),A RET ; ROUTINE D'INCREMENTATION DES HEURES INCHR:LD A,(HR) ADD O1H ;HR-HR+I DAA CP 24H JR NZ,HR1 ;SI HR = 24, XOR A ; ALORS HR=OO HRI: LD (HR), A RET ROUTINE D'INCREMENTATION DES JOURS INCDAY : LD A,(JOUR) ADD O1H ; JOUR = JOUR+1 DAA CP 32H JR NZ,JOUR1 ; SI JOUR = 32 LD A,O1H ; ALORS JOUR = Ol JOUR1: LD (JOUR), A RET ROUTINE D'INCREMENTATION DES MOIS INCMON: LD A, (MOIS) ADD O1H ; MOIS = MOIS + 1 DAA CP 13H JR NZ,MOIS1 ; SI MOIS = 13, LD A,01H ; ALORS MOIS = Ol MOIS1: LD (MOIS), A RET COMPARER IDENTIFICATION ET ACTIVITE PRECEDENTES A IDENTIFICATION ET ACTIVITE ACTUELLES CHKA:RES I , (IX+STAT) ; RAZ BIT DONNEES PRETES DANS REGISTRE D'ETAT LD HL,(ADATA+PRID);EXTRAIRE N ID LD DE,(ADATA+ID) ;EXTRAIRE N ID PRECEDENT XOR A SBC HL,DE ; SI ID-PRID LD (ADATA+PRID),DE;PRID = ID JR NZ,CHKA1 ;ALORS COMPARER NOMBRES d' ACTIVITE LD A,(IX+ACT) ;EXTRAIRE NOMBRE D'ACTIVITE LD B(IX+PRACT) ;EXTRAIRE NOMBRE D'ACTIVITE PRECEDENT CP B ;SI ACT = PRACT LD (ADATA+PRACT),A ; PRACT=ACT JR NZ,CHAKA1 ;ALORS LES DEUX DONNEES SONT IDENTIQUES LD HL,(ADATA+IDCT) INC HL ;IDCT=IDCT+I LD (ADATA+IDCT), HL LD DE,0004H XOR A SBC HL,DE ;SI IDCT=0004 JR NZ , CHKA2 ;ALORS AFFICHER ET IMPRIMER LES DONNEES LD HL,(ADATA+PRID) LD DE,(ADATA+PRCOW) XOR A SBC HL,DE ;SI LA MEME VACHE A ETE REIDENTIFIEE NE PAS IMPRIMER ID ET ACT JR Z,CHKA2 LD HL,(ADATA+PRID) ;EXTRAIRE PRID POUR CONVERSION LD (ADATA+PRCOW),HL;SAUVEGARDER N0 DE LA VACHE LD (COWBIN), HL ;SAUVEGABDER POUR CALCUL D'ACTIVITE LD DE,IDA ;EXTRAIRE POINTEUR DES RESULTATS APPEL BCD,DEC ;CONVERTIR EN 4 CHIFFRES DCB LD H,OOH LD L(IX,PRACT) ;EXTRAIRE PRACT POUR CONVERSION LD DE,ACTA ;EXTRAIRE POINTEUR DES RESULTATS APPEL BCD+DEC ;CONVERTIR EN 4 CHIFFRES DCB APPEL DISP+DEC LD (HL,(ACTA) ;EXTRAIRE RELEVE D'ACTIVITE 'A' LD (DONNEES),HL ;;DEFLACER RELEVE D'ACTIVITE FOUR SORTIE SUR IMPRIMANTE LD HL,(IDA) LD (VACHE),HL ;DEPLACER ID POUR SORTIR SUR IMPRIMANTE LD A,'A' LD (PORTE),A ;CHARGER 'A' POUR SORTIR SUR IMPRIMANTE APPEL ACTIVE+DEC APPEL IDAK CHKA2: RET CHKA1: LD HL,OOOOH LD (ADATA+IDCT),HL : IDCT=O0O0 RET CALCULER ACTIVITE ET LA SAUVEGARDER DANS MEMOIRE A ACCES SELECTIF ACTIVE: LD DE,ACTBS ; CHARGER ADRESSE-BASE DE LA TABLE D'ACTIVITE LD HL,(COWBIN);RAPPELER NUMERO DE LA VACHE ;(o ADD HL,DE LD A,(DONNEES) ; RAPPELER RELEVE ACTUEL LD B,(HL) ; EXTRAIRE RELEVE PRECEDENT LD (HL), A ; SAUVEGARDER RELEVE ACTUEL CP B ;SI A JP M,ACT2+DEC ;ALORS AJUSTER POUR OBTE NIR DES RESULTATS POSITIFS ACT1: SUB B DAA LD (ACTIV),A ;SAUVEGARDER ACTIVITE POUR SORTIE SUR IMPRIMANTE RET ACT2: ADD A,64H DAA JR ACT1 FIN DE ROUTINE ROUTINE IMPRESSION COMMANDEE PAR INTERRUPTIONS PRINT:DI RES O,(IX+STAT) RES O,(IY+STAT) ;REMETTRE A O BITS GROUPE DE DEPART DETECTE LD de,BUFRBS ;CHARGER POINTEUR DE LA BASE DE LA MEMOIRE TAMPON LD A(DE) ;EXTRAIRE CARACTERE ASCII CP 'S' ;SI A= 'S' JR Z,PRTRET ;ALORS,METTRE SIO HORS FONCTION ET EFFECTUER RETOUR SORT (32H),A ;SORTIE CARACTERE LD HL,BUFRBS+1;CHARGER POINTEUR LD BC(BUFRTP) DECR BC ; DECREMENTER SOMMET MEMOIRE TAMPON LD (BUFRTP)BC LD DC, I 60D ; CHARGER LONGUEUR MEMOIRE TAMPON DE CARACTERES LDIR ;DECALER TOUS LES CARACTERES DE LA MEMOIRE TAMPON D'UNE POSITION VERS LE BAS RETI PRTRET:LD BC,BUFRBS LD (BUFRTP),BC ,REMETTRE SOMMET DE LA MEMOIRE TAMPON A LA BASE DE LA MEMOIRE TAMPON LD A,28H SORT 33H),A ;RAZ INTERRUPTION POUR TRANSMISSION EN INSTANCE RETI CONVERTIR NOMBRE BINAIRE DE 16 BITS DANS HL EN QUATRE CHIFFRES DCB ; DE CONTIENT L'ADRESSE A LAQUELLE LE NOMBRE DCB DOIT ETRE MIS EN MEMOIRE BCD: LD B,02 ;CHARGER COMPTEUR DE BOUCLES LD C,10D ;CHARGER DIVISEUR APPEL DIV+DEC EX DE, HL RRD ; CHIFFRE DCB DANS MEMOIRE ;A ACCES SELECTIF EX DE, HL APPEL DIV+DEC Ex DE,HL RRD ; CHIFFRE DCB DANS MEMOIRE A ;ACCES SELECTIF Ex DE,HL ;AVANCER POINTEUR DE LA MEMOIRE INC DE DJNZ BCDi ;DECREMENTER COMPTEUR DE BOUCLES RET ROUTINE DE DIVISION SANS SIGNE DE 16 BITS ;HL = HL/C, A = RESTE DIV :REFOUL BC OR A LD B,17D CHARGER COMPTEUR DE BOUCLES JR DIVST DIVLP: SUB C JP P,DIVRES+DEC ;SAUT SI NON RESTAURATION ADD C DIVST: ADD HL,HL ;DECALER HL D'UN BIT A GAUCHE RLA JR DIVCON DIVRES: ADD HL, HL ;DECALER HL D'UN BIT A GAUCHE RLA INC HL DIVCON:DJNZ DIVLP ;DECREMENTER COMPTEUR DE BOUCLES RRA ;RESTAURER RESTE POP BC RET INP DI LD A,OEOH SORT 35H,A ;TERMINER INTERRUPTION LD A,50H SORT 35H,A ;LIRE DETECTEUR MEMOIRE A ;ACCES SELECTIF ;A CHIFFRE O AVEC INCREMEN ;TATION ;AUTOMATIQUE IN A,(34H) ;ENTRER SIGNAUX D'AVANCEMENT DE L'HORLOGE LD B, A ;SAUVEGARDER ETAT COMMUTATEUR BIT 4, B APPEL NZ, INCMIN+DEC BIT 5, B APPEL NZ+INCHR+DEC BIT 6, B APPEL NZ, INCDAY+DEC BIT 7, B APPEL NC, INCMON+DEC APPEL DISP+DEC RETI SI035: DB 02H ;POINTEUR MIS A REGISTRE 2B DB VECT34 ; CHARGER VECTEUR D'INTERRUPTION DB 03H ;POINTEUR MIS A REGISTRE 3B DB 40H ;RECEPTEUR MIS HORS FONCTION DB 04H ;POINTEUR MIS A REGISTRE 4B DB OCH ;PAS DE PARITE, 2 BITS D'ARRET HORLOGE ; XI', MODE ASYNCHRONE DB 05H ;POINTEUR MIS A REGISTRE 5B DB 28H ;7 BITS PAR CARACTERE,EMET TEUR EN FONCTION DB 01H ;POINTEUR MIS A REGISTRE 1B DB 02H ;INTERRUPTION AUTORISEE ; CREER TABLE D'INTERRUPTIONS POUR UNITES PIO ET SIO ORG 1300H+VECT 28 DW DRA+DEC, DRB+DEC, PRINT+DEC,DEPART+DEC FIN DEPART