INCLUDE EQMON Appel des equates moniteur. TTL MONITEUR MO5: INTERFACE PARALLELE SECT PARALL * ***** VERSION HARD MO5 * ******************************************************************************* * Controleur d'interface parallele.Suivant le contenu du mot de code * * PR.OPC permettant les operations: OUVERTURE EN MODE PARALLELE, ENVOI * * D'UN OCTET, RECOPIE GRAPHIQUE D'UN ECRAN EN MODE PARALLELE. * * CY = 0 indique une operation reussie, CY = 1 indique une erreur. * * * * PARAMETRES: PR.WRC = %0000 0001 ECRIRE UN OCTET * * PR.CPY = %0000 0010 HARD COPY D'UN ECRAN * * PR.OPP = %0000 0100 OUVERTURE EN ECRITURE (CENTRONICS) * * PR.NRD = %0000 1000 UNITE NON PRETE * * PR.CLS = %0001 0000 FERMETURE * * * ******************************************************************************* INTERN PRCONT PRCONT EQU * LDU #PRA2 Adresse de base pour adressage indexe par U LDA PR.OPC Code d'operation ORA #%11010000 Protection contre les interruptions, TFR A,CC et bit E a 1 pour un RTI "general". BLO WRITE Bit0 = ENVOI D'UN CARACTERE BVS WRITE Bit1 : COPlE GRAPHIQUE D'UN ECRAN BEQ OPNPR Bit2 = OUVERTURE EN ECRITURF PARALLELE LOADPC EQU * LDA PR.OPC STA PR.STA OUTPR EQU * RTS OPNPR EQU * BSR LOADPC Flag de l'operation realisee LDD #$3AFF Initialisation : STA CRB2-PRA2,U Mise du port B en direction (Bit3=0) STB PRB2-PRA2,U Tout le port B en output. LDA #$3E Mise du port B en DATA STA CRB2-PRA2,U LDA PRB2-PRA2,U Test de l'existence du controleur : on lit COMA le port B, et on re-ecrit dedans son complement STA PRB2-PRA2,U CMPA PRB2-PRA2,U Et on verifie la re-ecriture. BNE EXITER EXITOK EQU * CLRA Cleare la carry. SKIP1 Saute le COMA EXITER EQU * COMA Positionne la carry. RTS WRITE EQU * LDA #PR.OPP Verif. que l'on est en open avant d'ecrire BITA PR.STA BEQ EXITER Sortie avec carry set si non open. LSRA A = PR.CPY BITA PR.OPC Demande de recopie d'ecran ? BEQ PARALL Si Bit1 de PR.OPC = 1, envoi d'un octet CALL FRM1 Mise en memoire caractere pour la copie ecran. LDB GRCODE Envoi du mot de code declenchant le mode BSR PARAL1 graphique de l'imprimante. LDX BLOCZ Adresse de debut d'ecran : 0000 COPYLP EQU * LDB ,X+ Caracteres de l'ecran envoyes l'un apres BSR PARAL1 l'autre, jusqu'a l'avant-dernier. CMPX #ENDAD ENDAD = adresse de fin d'ecran. BLO COPYLP SKIP2 PARALL EQU * BSR PARAL1 BRA EXITOK PARAL1 EQU * LDA #$36 Envoi d'un caractere; clear du bit de strobe STB PRB2-PRA2,U On positionne l'octet dans le port // STA CRB2-PRA2,U Et ensuite seulement on envoie un STROBE. ORA #%00001000 Remise a 1 de STROBE STA CRB2-PRA2,U LDA PRB2-PRA2,U reset Port de controle * Delai nul entre le STROBE et l'attente du ACK WTACK EQU * LDA CRB2-PRA2,U Attente du signal ACK, detecte par le BPL WTACK passage a 1 du Bit7 de CRB2. RTS END