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 : SPP1_IN.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : settembre 2003 | ;| DESCRIZIONE : Test di INPUT da una PORTA PARALLELA SPP. | ;| Il programma consente la verifica della PORTA PARALLELA SPP | ;| in operazioni di INPUT; in condizioni normali sul connettore| ;| sono disponibili SOLO 5 linee di INPUT, sui pin10, pin11,| ;| pin12, pin13 e pin15, note nel protocollo Centronics rispet-| ;| tivamente con i nomi di ACKNOWLEDGE, BUSY, PAPER EMPTY,| ;| SELECT e ERROR; il valore logico applicato leggibile nel| ;| registro d'ingresso 0379H, "di Stato" nel protoc. Centronics| ;| /----------\ -------------------------------------------------------------| ;| | | 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: PRNstat EQU 379H ;Registro di STATO (INGRESSO) ; 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 SPP1_IN ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP SPP1_IN ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 0FH preced DB 00H TESTO1 DB "bitĿ 76543210Ŀ ",00H TESTO2 DB " 0379H H ",00H TESTO3 DB " ",00H TESTOE DB "",00H TESTOF DB "NB: il valore di questo bit NEGATO",00H TESTOG DB " rispetto a quello del pin11",00H TESTO4 DB " pin13  (bit4)0379H ",00H TESTO5 DB " pin12  (bit5)0379H ",00H TESTO6 DB " pin11  (bit7)0379H negato ",00H TESTO7 DB " pin10  (bit6)0379H pin1 ",00H TESTO8 DB " Ŀ ",00H TESTO9 DB " \ / ",00H TESTOA DB " \ / ",00H TESTOB DB " GND  ",00H TESTOC DB " pin25 (bit3)0379H  pin15 pin14 ",00H TESTOI DB "pin1",00H TESTOL DB "pin25",00H TESTOM DB "pin14",00H TESTON DB "0379",00H TESTOD DB "Collega tra loro il pin25 e uno dei pin 10,11,12,13 o 15",00H TESTOH DB "Se sei in ambiente Windows2000/NT/XP devi installare il" DB " Driver Config_IO",00H TESTOH1 DB "e, prima di lanciare il programma, devi lanciare Config_LPT1" DB " (vedi sito)",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 '',9,50,8,50; xxxx0xxxB > pin15 a massa = bit3 a 0 DB '',6,25,7,25; xxx0xxxxB > pin13 a massa = bit4 a 0 DB '',6,27,7,27; xx0xxxxxB > pin12 a massa = bit5 a 0 DB '',6,31,7,31; x0xxxxxxB > pin10 a massa = bit6 a 0 ;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,18,0FH; " pin13  (bit4)0379H " M_msgC TESTO5, 3,18,0FH; " pin12  (bit5)0379H " M_msgC TESTO6, 4,18,0FH; " pin11  (bit7negato)0379H " M_msgC TESTO7, 5,18,0FH; " pin10  (bit6)0379H pin1 " M_msgC TESTO8, 6,18,0EH; " Ŀ " M_msgC TESTO9, 7,18,0EH; " \ 1/ " M_msgC TESTOA, 8,18,0EH; " \ / " M_msgC TESTOB, 9,18,0EH; " GND  " M_msgC TESTOC,10,18,0FH; " pin25 (bit3)0379H  pin15 pin14 " M_msgC TESTOI, 5,53,0EH; pin1 M_msgC TESTOL,10,19,0EH; pin25 M_msgC TESTOM,10,52,0EH; pin14 M_msgC TESTOD,12,10,03H; " NB: pin25 = GND (massa) M_msgC TESTOH,13, 3,02H; " in ambiente Win2000/NT/XP lancia il Driver " M_msgC TESTOH1,14, 3,02H; " in ambiente Win2000/NT/XP lancia Config_io " M_msgC TESTO1,16,22,0FH; " bitĿ 76543210Ŀ " M_msgC TESTO2,17,22,0FH; " 0379H XXH " M_msgC TESTO3,18,22,0FH; "  " M_msgC TESTON,17,24,0EH; M_chr '',18,33,07H ; M_msgC TESTOE,19,22,07H; " " M_msgC TESTOF,20,22,07H; " NB: il valore di questo bit NEGATO" M_msgC TESTOG,21,22,07H; " rispetto a quello del pin11" MOV CS:[preced],0 ; Se la prima volta esegue comunque la colora- CALL Colora ; immagini del connettore e del registro 0379H, 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 : Evidenzia il pin del connettore posti a massa per imporre un| ;| input nel registro 0379H; in ingresso in AL il dato in input| ;| 01111xxxB > Nessun pin a massa | ;| x0xxxxxxB > pin10 a massa = bit6 a 0 | ;| 1xxxxxxxB > pin11 a massa = bit7 a 1 (negato internamente) | ;| xx0xxxxxB > pin12 a massa = bit5 a 0 | ;| xxx0xxxxB > pin13 a massa = bit4 a 0 | ;| xxxx0xxxB > pin15 a massa = bit3 a 0 | ;\---------------------------------------------------------------------------/ Colora: PUSH DX 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 17,52 ; Mostra il risultato dell'acquisizione sulle M_COLOR 0EH ; immagini del connettore e del registro 0379H, 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 MOV CX,3 ; MOV DL,47 ; Col_0: MOV DH,'1' ; TEST AL,AH ; JNZ Col_1 ; Fissa praticamente a "1" l'immagine dei 3 bit MOV DH,'0' ; meno significativi del registro 0379H, comun- Col_1: PUSH AX ; que non sottoposti a test(la scelta di una M_COLOR 0EH ; tecnica ridondante per assicurare l'eventua- M_CURSOR 17,DL ; le presenza nel registri letto in AL di even- MOV AL,DH ; tuali bit diversi da "1" (cosa per altro molto CALL Biochr1 ; poco probabile) POP AX ; ROL AH,1 ; SUB DL,2 ; LOOP Col_0 ; LEA DI,Tab_Pin ; Punta la tabella delle coordinate ; Se nessuno degli 4 pin 10, 12, 13 e 15 (corri- MOV CX,4 ; spondenti ai bit6bit3) sono a massa l'immagi- ; ne dei 4 bit del registro 0379H viene mostrata ; con "1"; altrimenti con "0" Col_2: TEST AL,AH ; Controlla se il pin messo a massa corrisponde JNZ Col_3 ; alla posizione corrente, rappresentata dall'1 ; nel valore corrente di AH M_Chr CS:[DI],CS:[DI+1],CS:[DI+2],8FH; Provvede a evidenziare M_Chr '',CS:[DI+3],CS:[DI+4],8EH ; posizione e bit nello schema M_Chr '0',17,DL,0EH ; a video JMP Col_6 ; Col_3: PUSH AX ; M_Chr CS:[DI],CS:[DI+1],CS:[DI+2],0FH; Provvede a cancellare nello M_Chr '',CS:[DI+3],CS:[DI+4],06H ; schema a video le posizioni M_Chr '1',17,DL,0EH ; e i bit che non interessano POP AX ; ADD DI,5 ; ROL AH,1 ; Aggiorna il test per la prossima combinazione SUB DL,2 ; DEC CX ; Ripete il ciclo (non stato possibile usare CMP CX,0000H ; direttamente "LOOP Col_2" perch il salto re- JZ Col_4 ; lativo a Col_2 troppo distante JMP Col_2 ; Col_4: TEST AL,AH ; Controlla se il pin 11 messo a massa oppure JZ Col_5 ; no ( l'unica linea negata internamente) M_Chr '',6,29,8FH ; M_Chr '',7,29,8EH ; Se cos provvede ad evidenziane la posizione M_Chr '1',17,DL,0EH ; e bit nello schema a video JMP SHORT Col_6 ; Col_5: M_Chr '',6,29,0FH ; Altrimenti ne cancella l'evidenziazione sia M_Chr '',7,29,06H ; schema a video del connettore che in quello M_Chr '0',17,DL,0EH ; del registro Col_6: POP AX ; POP CX ; POP DX ; RET ;***************************************************************************** ; ---------------------------------------------- SPP1_IN proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL DESKTOP ; /-[0379H/0279H-PORTA d'INGRESSO dello STATO]-\ ; | /-7-*-6-*-5-*4--*-3-*-2-*-1-*-0-\ | ; | | In| In| In| In| In| * | * | * | | ; | \---*---*---*---*---*---*---*---/ | ; | | | | | | \---*---/ | ; |pin 11 Negato| | | | non disponibili| ; |pin 10 ------/ | | \---- pin 15 | ; |pin 12 ----------/ \-------- pin 13 | ; \--------------------------------------------/ ; Esegue la lettura dello stato logico dei 5 xxx00: MOV DX,PRNstat ; contatti sul connettore (pin11, pin10, pin12, IN AL,DX ; pin13 e pin15) associati rispettivamente ai ; bit7, bit6, bit5, bit4 e bit3 del registro di ; ingresso 0379H, detto "di stato" in Centronics 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 0379H, ; 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 SPP1_IN ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare