PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (settembre 2003) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : EPP2_IN.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : settembre 2003 | ;| DESCRIZIONE : Test di INPUT INDIRIZZI da una PORTA PARALLELA EPP. | ;| Il programma consente la verifica della PORTA PARALLELA EPP| ;| in operazioni di INPUT di 8 bit di ADDRESS dai pin2öpin9| ;| della porta bidirezionale associata al registro 037BH. | ;| /----------\ -------------------------------------------------------------| ;| | | Se si lavora con i Sistemi Operativi Win2000, Win NT o WinXP | ;| | NB !! | bisogna prima installare il Driver Configura_LPT1; scaricalo | ;| | | a: http://www.giobe2000.it/consigli/Scarica_VediLPT_XP.htm | ;| *----------* -------------------------------------------------------------| ;| | | Se si lavora con i Sistemi Operativi Win2000, Win NT o WinXP | ;| | NB !! | la SHELL DOS deve essere a "Pieno Schermo" (l'esecuzione in | ;| | | "finestra DOS" non produce effetto sulla Stampante) | ;| *----------* -------------------------------------------------------------| ;| | | In ogni caso PRIMA DI OGNI SESSIONE DOS Š necessario eseguire| ;| | NB !! | il programma Config_LPT1.EXE in ambiente Windows per attivare| ;| | | la visibilit… dei driver installati con Configura_LPT1 !!!!! | ;| *----------* -------------------------------------------------------------| ;| | | Non dimenticare di configurare la porta parallela a livello | ;| | NB !! | BIOS SETUP, durante i primi istanti dopo l'accensionde del | ;| | | computer, imposta la stampante come EPP anzichŠ come SPP | ;| \----------/ -------------------------------------------------------------| ;\---------------------------------------------------------------------------/ ; COSTANTI DEFINITE PER IL PROGRAMMA: PRNdato EQU 037BH ;Registro di indirizzo (INPUT/OUTPUT) PRNctrl EQU 037AH ;Registro di controllo (OUTPUT) ; MACRO UTILIZZATE DAL PROGRAMMA: include c:\arch-lab\bin\GIOBE.MAC ; LIBRERIA UTILIZZATA DAL PROGRAMMA [opzione WinASM altrimenti non necessaria] includelib c:\arch-lab\bin\GIOBE.LIB ;PROCEDURE ESTERNE UTILIZZATE dal PROGRAMMA [NEAR, dalla LIBRERIA ~GIOBE.LIB~] ;----------------------------------------------------------------------------- EXTRN CambiaCol:NEAR EXTRN SET_cur:NEAR EXTRN VIA_cur:NEAR EXTRN RIP_cur:NEAR EXTRN KEYwait:NEAR EXTRN BIOScls:NEAR EXTRN BIOchr1:NEAR EXTRN BIObeep:NEAR EXTRN BIOSmsg:NEAR EXTRN byt2asc:NEAR EXTRN Del_100:NEAR ; DICHIARAZIONI (VARIABILI) PER I PROGRAMMI ESTERNI: PUBLIC ATTRIB ;Attributo di colore ; DICHIARAZIONI (PROCEDURE) PER I PROGRAMMI ESTERNI: PUBLIC EPP2_IN ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP EPP2_IN ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 0FH preced DB 00H TESTO1 DB "ÚÄÄbitÄÄ¿ Ú7Â6Â5Â4Â3Â2Â1Â0¿ÚÄÄÄÄÄÄÄ¿ ",00H TESTO2 DB "³ 037BH ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ XXH ³ ",00H TESTO3 DB "ÀÄÄÄÄÄÄÄÙ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙÀÄÄÄÄÄÄÄÙ ",00H TESTO4 DB "(bit4)037BHÄpin 6ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄpin5Ä(bit3)037BH",00H TESTO5 DB "(bit5)037BHÄpin 7ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ÚÄÄÄÄpin4Ä(bit2)037BH",00H TESTO6 DB "(bit6)037BHÄpin 8ÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ÚÄÄpin3Ä(bit1)037BH",00H TESTO6_ DB "(bit7)037BHÄpin 9ÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ Úpin2Ä(bit0)037BH",00H TESTO7 DB " pin13Ä¿ ³ ³ ³ ³ ³ ³ ³ ³ Úpin1 ",00H TESTO8 DB " ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ",00H TESTO9 DB " \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / ",00H TESTOA DB " \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / ",00H TESTOB DB " ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ",00H TESTOC DB " pin25ÄÄÙ INPUT INDIRIZZO a 8 bit ÀÄÄÄpin14 ",00H TESTOD DB "Collega tra loro il pin25 e uno dei pin 2,3,4,5,6,7,8 o 9",00H TESTOH DB "Se sei in ambiente Windows2000/NT/XP devi installare il Driver" DB " Config_IO",00H TESTOH1 DB "e, prima di lanciare il programma, devi lanciare Config_LPT1" DB " (vedi sito)",00H TESTOI DB "ÚÄÄpin1",00H TESTOL DB "pin25ÄÄÙ",00H TESTOM DB "ÀÄÄÄpin14",00H TESTON DB "pin13Ä¿",00H TESTOO DB "NB: nel BIOS SETUP impostare la stampante come EPP invece di" DB " SPP",00H TESTOP DB "037B",00H Titolo DB "Test Porta Parallela EPP - Input da connettore",00H CopyRg DB "TUTORIAL ASSEMBLY --- www.Giobe2000.it --- Copyright 2003",00H Menu DB "Cambia i contatti sul connettore - Un tasto per terminare",00H Tab_Pin DB 50,45 ; FEH bit0 pin 2 a massa DB 48,43 ; FDH bit1 pin 3 a massa DB 46,41 ; FBH bit2 pin 4 a massa DB 44,39 ; F7H bit3 pin 5 a massa DB 42,37 ; EFH bit4 pin 6 a massa DB 40,35 ; DFH bit5 pin 7 a massa DB 38,33 ; BFH bit6 pin 8 a massa DB 36,31 ; 7FH bit7 pin 9 a massa ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;|PROCEDURA :DeskTop | ;|DESCRIZIONE :Predispone il piano di lavoro (DeskTop): dopo aver pulito lo| ;| schermo e dopo aver fatto sparire il cursore mostra tutti i| ;| messaggi di presentazione del programma. | ;\---------------------------------------------------------------------------/ DeskTop:CALL BIOScls CALL VIA_cur ; fa sparire il cursore M_CURSOR 0,0 ; Stampa l'intera riga 0 (la prima) con M_COLOR 1FH ; caratteri vuoti (spazi) CALL BARRA ; M_CURSOR 23,0 ; Stampa l'intera riga 24 (l'ultima) con M_COLOR 1FH ; caratteri vuoti (spazi) CALL BARRA ; M_msgC Titolo, 0,18,1FH; Testo del titolo M_msgC MENU,23,10,1FH; Testo del Menu M_msgC CopyRg,24,10,04H; Testo del CopyRight M_msgC TESTO4 ,2,10,0FH; (bit4)037BHÄpin 6ÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄpin5Ä(bit3)037BH M_msgC TESTO5 ,3,10,0FH; (bit5)037BHÄpin 7ÄÄÄÄÄ¿ ³ ³ ÚÄÄÄÄpin4Ä(bit2)037BH M_msgC TESTO6 ,4,10,0FH; (bit6)037BHÄpin 8ÄÄÄ¿ ³ ³ ³ ³ ÚÄÄpin3Ä(bit1)037BH M_msgC TESTO6_,5,10,0FH; (bit7)037BHÄpin 9Ä¿ ³ ³ ³ ³ ³ ³ Úpin2Ä(bit0)037BH M_msgC TESTO7, 6,10,0FH; pin13Ä¿ ³ ³ ³ ³ ³ ³ ³ ³ Úpin1 M_msgC TESTO8, 7,10,0EH; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ M_msgC TESTO9, 8,10,0EH; \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / M_msgC TESTOA, 9,10,0EH; \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / M_msgC TESTOB,10,10,0EH; GND ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ M_msgC TESTOC,11,10,0FH; pin25ÄÄÙ ÀÄÄÄpin14 M_msgC TESTOD,13,10,03H; "Collega pin25 e uno dei 2,3,4,5,6,7,8 o 9" M_msgC TESTOH,14, 3,02H; " in ambiente Win2000/NT/XP lancia il Driver " M_msgC TESTOH1,15, 3,02H; " in ambiente Win2000/NT/XP lancia Config_io " M_msgC TESTOO,21, 7,02H; "nel BIOS SETUP impostare stampante come EPP.." M_msgC TESTOI, 6,52,0EH; ÚÄÄpin1 M_msgC TESTOL,11,18,0EH; pin25ÄÄÙ M_msgC TESTOM,11,51,0EH; ÀÄÄÄpin14 M_msgC TESTON, 6,18,0EH; pin13Ä¿ M_msgC TESTO1,17,20,0FH; " ÚÄÄbitÄÄ¿ Ú7Â6Â5Â4Â3Â2Â1Â0¿ÚÄÄÄÄÄÄÄ¿ " M_msgC TESTO2,18,20,0FH; " ³ 037BH ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ XXH ³ " M_msgC TESTO3,19,20,0FH; " ÀÄÄÄÄÄÄÄÙ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙÀÄÄÄÄÄÄÄÙ " M_msgC TESTOP,18,22,0EH; MOV CS:[preced],0 ; Se Š la prima volta esegue comunque la colora- CALL Colora ; immagini del connettore e del registro 037BH, RET ; al variare degli eventuali input ;/---------------------------------------------------------------------------\ ;| PROCEDURA : BARRA | ;| DESCRIZIONE : Stampa una intera riga di caratteri vuoti, ideale per | ;| scrivere titoli e menu!! | ;\---------------------------------------------------------------------------/ BARRA: PUSH AX PUSH CX MOV CX,80 MOV AL,' ' Barra0: CALL BIOchr1 LOOP Barra0 POP CX POP AX RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Colora | ;| DESCRIZIONE : Visualizza l'immagine del connettore e del registro coinvol-| ;| to, 037BH, evidenziando lo stato logico corrente di tutti i| ;| sia del segnale applicato ai pin che dei bit interni, dopo| ;| la LETTURA operata sui pin abilitati del connettore lasciata| ;| in ingresso in AL: | ;| FFH <-----------> Nessun pin a massa | ;| FEH bit0 pin 2 a massa | ;| FDH bit1 pin 3 a massa | ;| FBH bit2 pin 4 a massa | ;| F7H bit3 pin 5 a massa | ;| EFH bit4 pin 6 a massa | ;| DFH bit5 pin 7 a massa | ;| BFH bit6 pin 8 a massa | ;| 7FH bit7 pin 9 a massa | ;\---------------------------------------------------------------------------/ Colora: PUSH CX PUSH AX ; Aggiorna il valore corrente della variabile MOV CS:[preced],AL; locale per evitare di fare l'analisi se il ; dato acquisito Š quello di prima M_CURSOR 18,50 ; Mostra il risultato dell'acquisizione sulle M_COLOR 0EH ; immagini del connettore e del registro 037BH, CALL Byt2Asc ; al variare degli eventuali input ; Predispone in AH la maschera che indica (con MOV AH,00000001B ; il suo unico "1") il bit del registro 037BH ; che sar… sottoposto a test ; ---------------------------------------------- ; i verificano le 8 possibilit… una dopo l'altra ; ---------------------------------------------- LEA DI,Tab_Pin ; Punta la tabella delle coordinate ; Se nessuno degli 8 pin da 2 a 9 corrispondenti MOV CX,8 ; ai bit0öbit7) sono a massa l'immagine dei 4 ; bit del registro 037BH viene mostrata con "1"; ; altrimenti con "0" Col_0: TEST AL,AH ; Controlla se il pin messo a massa corrisponde JNZ Col_1 ; alla posizione corrente, rappresentata dall'1 ; nel valore corrente di AH PUSH AX ; M_Chr '',7,CS:[DI],8FH; M_Chr 'þ',8,CS:[DI],8EH; Provvede a cancellare le posizioni e i bit che M_Chr '0',18,CS:[DI+1],0EH; non interessano nello schema a video JMP SHORT Col_2 ; Col_1: PUSH AX ; M_Chr '',7,CS:[DI],0FH; Provvede a evidenziare posizione e bit nello M_Chr 'þ',8,CS:[DI],06H; schema a video M_Chr '1',18,CS:[DI+1],0EH; Col_2: POP AX ; ADD DI,2 ; Aggiorna il test per la prossima combinazione ROL AH,1 ; DEC CX ; Ripete il ciclo (non Š stato possibile usare CMP CX,0000H ; direttamente "LOOP Col_0" perchŠ il salto re- JZ Col_3 ; lativo a Col_0 Š troppo distante JMP Col_0 ; Col_3: POP AX POP CX RET ;***************************************************************************** ; ---------------------------------------------- EPP2_IN proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- ;/---------------------------------------------------------------------------\ ;|Il comportamento delle porte EPP nelle operazione di Input/Output pu•| ;|variare in misura notevole da costruttore a costruttore, rivelandosi| ;|talvolta problematico. Anche se non si tratta di una regola assoluta, pu•| ;|essere conveniente predisporre fisicamente un livello logico 1 le linee di| ;|controllo coinvolte in questi casi: | ;| ## Write (pin 1): bassa durante la scrittura, alta durante la lettura| ;| ## DStrobe (pin 14): bassa durante la scrittura/lettura dato | ;| ## AStrobe (pin 17): bassa durante la scrittura/lettura indirizzo | ;| ## Init (pin 16): alta=funzionamento EPP, bassa=funzionamento SPP | ;| | ;|Di sicuro in questa fase i segnali di sincronismo coinvolti nella| ;|scrittura/lettura di indirizzi (AStrobe) o di dati (DStrobe) e il segnale| ;|di scrittura (Write) sono alti in stato non attivo | ;|In conclusione pu• essere necessario porre a 0 i corrispondenti bit nel| ;|Registro di Controllo (uscita) 037AH/027AH (rispettivamente i bit3, bit1 e| ;|bit0) tenendo conto che le linee vengono invertite internamente. | ;|Ci• equivale a forzare un Out di xxxx0100B (=x4H) su 037AH | ;\---------------------------------------------------------------------------/ CALL DESKTOP ; La posizione 0100 dei 4 bit meno significativi MOV DX,PRNctrl ; del Registro di controllo si Š rilevata IRRI- IN AL,DX ; LEVANTE; fondamentale invece, per attivare il OR AL, 00100000B ; funzionamento della EPP Š stato forzare a 1 il OUT DX,AL ; bit5, per annullare un eventuale conflitto con ; una pregressa situazione monodirezionale SPP xxx00: MOV DX,PRNdato ; Esegue la lettura dello stato logico degli 8 IN AL,DX ; contatti sul connettore (pin9öpin2) associati ; ai bit7öbit0 del registro bidirezionale 037BH CMP CS:[preced],AL; Se non si Š verificata nessuna variazione JE xxx01 ; rispetto a prima si evita l'analisi: la propo- ; sta a video non cambia ; Mostra il risultato dell'acquisizione sulle CALL Colora ; immagini del connettore e del registro 037BH, ; al variare degli eventuali input xxx01: CALL Del_100 CALL Del_100 MOV AH,01H ; INT 16H ; Continua fino alla pressione di un tasto JZ xxx00 ; _OUT: PUSH AX ; Torna al DOS con la memoria liberata e con la CALL RIP_cur ; chiusura di tutti i file; cede il controllo MOV DH,23 ; al processo padre (generalmente COMMAND.COM); MOV DL,0 ; il valore posto eventualmente in AL prima di CALL SET_cur ; uscire pu• essere testato in uscita con la POP AX ; funzione 4DH o mediante la lettura della MOV AH,4CH ; variabile DOS "ERRORLEVEL" INT 21H EPP2_IN ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare