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 : SPP2_IN.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : settembre 2003 | ;| DESCRIZIONE : Test di INPUT dalla PORTA DATI di una PARALLELA SPP, predi-| ;| sposta per il funzionamento bidirezionale. | ;| Se il bit5 del Registro di Controllo 037AH Š posto a "1" Š| ;| possibile effettuare dal Registro Dati 0378H anche l'INPUT| ;| di 8 bit, direttamente dai pin2öpin9, rendendo di fatto| ;| bidirezionale la porta SPP. | ;| Reimpostando a "0" il bit5 la Porta Dati SPP ritorna a fun-| ;| zionare SOLO come porta di output. | ;| /----------\ -------------------------------------------------------------| ;| | | 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 !!!!! | ;| \----------/ -------------------------------------------------------------| ;\---------------------------------------------------------------------------/ ; COSTANTI DEFINITE PER IL PROGRAMMA: PRNdato EQU 0378H ;Registro di dato (INGRESSO/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 ; DICHIARAZIONI (VARIABILI) PER I PROGRAMMI ESTERNI: PUBLIC ATTRIB ;Attributo di colore ; DICHIARAZIONI (PROCEDURE) PER I PROGRAMMI ESTERNI: PUBLIC SPP2_IN ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP SPP2_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 "³ 0378H ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ H ³ ",00H TESTO3 DB "ÀÄÄÄÄÄÄÄÙ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙÀÄÄÄÄÄÄÄÙ ",00H TESTO4 DB "(bit4)0378HÄpin 6ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄpin5Ä(bit3)0378H",00H TESTO5 DB "(bit5)0378HÄpin 7ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ÚÄÄÄÄpin4Ä(bit2)0378H",00H TESTO6 DB "(bit6)0378HÄpin 8ÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ÚÄÄpin3Ä(bit1)0378H",00H TESTO6_ DB "(bit7)0378HÄpin 9ÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ Úpin2Ä(bit0)0378H",00H TESTO7 DB " pin13Ä¿ ³ ³ ³ ³ ³ ³ ³ ³ Úpin1 ",00H TESTO8 DB " ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ",00H TESTO9 DB " \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / ",00H TESTOA DB " \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / ",00H TESTOB DB " ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ",00H TESTOC DB " pin25ÄÄÙ INPUT DATO 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 "0378",00H Titolo DB "Test Porta Parallela SPP - 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 ,3,10,0FH; (bit4)0378HÄpin 6ÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄpin5Ä(bit3)0378H M_msgC TESTO5 ,4,10,0FH; (bit5)0378HÄpin 7ÄÄÄÄÄ¿ ³ ³ ÚÄÄÄÄpin4Ä(bit2)0378H M_msgC TESTO6 ,5,10,0FH; (bit6)0378HÄpin 8ÄÄÄ¿ ³ ³ ³ ³ ÚÄÄpin3Ä(bit1)0378H M_msgC TESTO6_,6,10,0FH; (bit7)0378HÄpin 9Ä¿ ³ ³ ³ ³ ³ ³ Úpin2Ä(bit0)0378H M_msgC TESTO7, 7,10,0FH; pin13Ä¿ ³ ³ ³ ³ ³ ³ ³ ³ Úpin1 M_msgC TESTO8, 8,10,0EH; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ M_msgC TESTO9, 9,10,0EH; \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / M_msgC TESTOA,10,10,0EH; \ þ þ þ þ þ þ þ þ þ þ þ þ þ þ / M_msgC TESTOB,11,10,0EH; GND ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ M_msgC TESTOC,12,10,0FH; pin25ÄÄÙ ÀÄÄÄpin14 M_msgC TESTOD,14,10,03H; " NB: pin25 = GND (massa) M_msgC TESTOH,15, 3,02H; " in ambiente Win2000/NT/XP lancia il Driver " M_msgC TESTOH1,16, 3,02H; " in ambiente Win2000/NT/XP lancia Config_io " M_msgC TESTOI, 7,52,0EH; ÚÄÄpin1 M_msgC TESTOL,12,18,0EH; pin25ÄÄÙ M_msgC TESTOM,12,51,0EH; ÀÄÄÄpin14 M_msgC TESTON, 7,18,0EH; pin13Ä¿ M_msgC TESTO1,18,20,0FH; " ÚÄÄbitÄÄ¿ Ú7Â6Â5Â4Â3Â2Â1Â0¿ÚÄÄÄÄÄÄÄ¿ " M_msgC TESTO2,19,20,0FH; " ³ 0378H ³ ³ ³ ³ ³ ³ ³ ³ ³ ³³ XXH ³ " M_msgC TESTO3,20,20,0FH; " ÀÄÄÄÄÄÄÄÙ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙÀÄÄÄÄÄÄÄÙ " M_msgC TESTOO,19,22,0EH; MOV CS:[preced],0 ; Se Š la prima volta esegue comunque la colora- CALL Colora ; immagini del connettore e del registro 0378H, RET ; al variare degli eventuali input ;/----------------------------- ---------------------------------------------\ ;| PROCEDURA : BARRA | ;| DESCRIZIONE : Stampa una int ra riga di caratteri vuoti, ideale per | ;| scrivere titol 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'i magine del connettore e del registro coinvol-| ;| to, 0378H, evi enziando lo stato logico corrente di tutti i| ;| sia del segnal applicato ai pin che dei bit interni, dopo| ;| la LETTURA ope ata 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 19,50 ; Mostra il risultato dell'acquisizione sulle M_COLOR 0EH ; immagini del connettore e del registro 0378H, 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 0379H ; che sar… sottoposto a test ;----------------------------------------------- ;Si 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 0378H 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',19,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',19,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 ;***************************************************************************** ; ---------------------------------------------- SPP2_IN proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL DESKTOP ; Se la porta parallele Š impostata come SPP MOV DX,PRNctrl ; (Standard Parallel Port) Š possibile effettua- IN AL,DX ; re l'input di 8 bit dal registro 0378H, purchŠ OR AL,00100000B ; si imposti ad 1 il bit 5 dell'indirizzo 037AH; OUT DX,AL ; impostando a 0 il bit 5 dell'indirizzo 037AH ; il registro 0378H ritorna a funzionare come ; porta di output. 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 0378H CMP CS:[preced],AL; Se non si Š verificata nessuna variazione JE xxx02 ; 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 0378H, ; al variare degli eventuali input xxx02: 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 SPP2_IN ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare