PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (marzo 2005) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : TxR_Prot.ASM /----------------[TxD][RxD]------------------\| ;| AUTORE : Giorgio OBER | ************ *********** ************** || ;| VERSIONE : marzo 2005 \------------------[COM1]--------------------/| ;| DESCRIZIONE : Organizza la RICETRASMISSIONE di testi e/o di DATI tra due | ;| Computer tramite le rispettive porte seriali (UART), con | ;| tecnica d'interrogazione (POLLING). | ;| a) versione con presentazione (DESKTOP) | ;| b) il processo Š gestito da tastiera con diversi livelli di | ;| menu interattivi; Š possibile mostrare i dati trasmessi e| ;| ricevuti sia in forma solo ascii sia contemporaneamente | ;| in forma ascii e forma binaria espressa in esadecimale. | ;| c) in Trasmissione aspetta la digitazione di un tasto e poi| ;| ne spedisce il codice ascii | ;| d) in Ricezione NON opera alcun controllo sugli Errori | ;| e) la Ricezione Š alternata alla Trasmissione | ;| f) il protocollo HW impostato per la RICETRASMISSIONE Š: | ;| /--------------------------------\ | ;| | COM1, 9600, N, 2, 8 | | ;| \--------------------------------/ | ;| Questa versione, oltre a garantire lo scambio di testi| ;| ("Chat") tra 2 Computer collegati via seriale, offre un| ;| brillante e originale protocollo per rendere possibile il| ;| controllo remoto di un Computer sull'altro; naturalmente su| ;| ciascuno dei 2 Š fatta ovviamente girare una copia di questo| ;| eseguibile: il primo che richiede il privilegio del COMANDO| ;| pu• gestire il monitor, la tastiera, la porta parallela ed| ;| altri dispositivi del Computer Remoto, programmandoli in| ;| modo assolutamente autonomo e indipendente dall'altro). | ;| Tutti i COMANDI del protocollo sono stringhe di caratteri| ;| Ascii che iniziano con il medesimo prefisso, "#";| ;| Attualmente sono disponibili i servizi: | ;| #A ClearScreen Clasico | ;| #B DeskTop Classico | ;| #C Fa sparire il cursore | ;| #D Fa tornare il cursore | ;| #E Cornice di primo tipo | ;| #F Cornice di secondo tipo | ;| #G Cornice di terzo tipo | ;| #H Aspetta Pressione Tasto | ;| #I Fine Sequenza #Tnn di stringhe di COMANDI | ;| #Jnn Consuma un ritardo pari a n volte 55ms | ;| \*--------------numero n=01ö99 | ;| /*------------colonna cc=00ö79 | ;| #Krrcc Coordinate di stampa | ;| \*--------------riga rr=00ö24 | ;| /-------------sfondo s=0ö7 | ;| #Lpps Attributo di colore, testo sfondo | ;| \*--------------primo piano pp=00ö15 | ;| #Mn Intestazione personalizzata | ;| \---------------numero n=0ö9 | ;| #Nn Menu personalizzato | ;| \---------------numero n=0ö9 | ;| #Oxy Uscita di Dato a 8 bit su porta parallela | ;| #Pxy Visualizza la stringa del Byte xyH | ;| #Qxywz Visualizza la stringa della Word xywzH | ;| /*------------larghezza compresa cornice ll=03ö80 | ;| || /*--------colonna angolo alto a sinistra cc=00ö79 | ;| || || /------ombra 0=senza, 1=con | ;| || || | /---colore sfondo s=0ö7 | ;| #Raallrrcctopps Stampa una cornice programmabile a video | ;| || || | \*----colore primo piano pp=00ö15 | ;| || || \-------tipo 0=tratto semplice, 1=tratto doppio | ;| || \*----------riga angolo alto a sinistra rr=00ö24 | ;| \*--------------altezza compresa cornice aa=03ö25 | ;| #Saa..a 0DH Sequenza di caratteri ascii | ;| || | \--------carattere terminatore =0DH=13= | ;| \*--*-----------caratteri ascii da porre a video | ;| #Tnn Sequenza di COMANDI Precostituiti | ;| \*--------------numero nn=00ö99 | ;| /*------------larghezza compresa cornice ll=03ö80 | ;| || /*--------colonna angolo alto a sinistra cc=00ö79 | ;| #Uaallrrcc Recupera area coperta da cornice | ;| || \*----------riga angolo alto a sinistra rr=00ö24 | ;| \*--------------altezza compresa cornice aa=03ö25 | ;|/-----------\/------------------------------------------------------------\| ;|| ||La tecnica di Trasmissione Š affidata alla procedura TxD_1. || ;|| ||La tecnica di Ricezione (procedura RxD_3) Š sufficientemente|| ;|| ||AFFIDABILE, aspettando le condizioni ottimali per consentire|| ;|| ||la lettura del dato, sebbene il tempo consumato (per altro|| ;|| ||breve) consumato nella stampa del carattere ricevuto e nella|| ;|| ||verifica della pressione di un tasto (per consentire di por-|| ;|| NB: ||re termine all'esecuzione del programma dopo la ricezione),|| ;|| ||operata dal MAIN PROGRAM, possa potenzialmente causare la|| ;|| ||perdita di qualche bytes in arrivo. || ;|\-----------/\------------------------------------------------------------/| ;|/-----------\ Per cambiare PORTA utilizzata, Velocit… di ricetrasmissione| ;|| | e Protocollo Seriale scegli altri valori tra quelli possibili| ;|| | per le costanti qui sotto; per COM_num e Baude basta spostare| ;|| NB: | il "punto e virgola" mentre per Protoc bisogna riassemblare| ;|| | il byte con i campi desiderati. | ;|| | -------------------------------------------------------------| ;|\-----------/ Maggiori dettagli sono disponibili nella sezione dedicata | ;| alla porta seriale sul sito *** http://www.giobe2000.it *** | ;\---------------------------------------------------------------------------/ Invio EQU 0DH ;codice del tasto ESC_ EQU 27 ;codice del tasto F1 EQU 3BH ;codice Scansione tasto F2 EQU 3CH ;codice Scansione tasto COM_num EQU 01H ;PORTA utilizzata = COM1 /--------------------------------\ ;EQU 02H ;PORTA utilizzata = COM2 |Scegli la porta COM desiderata | ;EQU 03H ;PORTA utilizzata = COM3 |[ default: programma per COM1 ] | ;EQU 04H ;PORTA utilizzata = COM4 \--------------------------------/ ;---------------------------------------------------------- ;/--------------------------------------------------------\ ;| Scegli la COSTANTE per la VELOCITA` desiderata | ;*--------*-------------------------------*---------------* ;|Costante|********** Baud RATE *********| Errore | ;*--------*-----------------------*-------*---------------* ;EQU 0900H ;|=2304 = (115200/2304) = 50.0 | 50 | ---- | ;EQU 0600H ;|=1536 = (115200/1536) = 75.0 | 75 | ---- | ;EQU 0417H ;|=1047 = (115200/1047) = 110.0 | 110 |(errore 0.026 )| ;EQU 0359H ;|= 857 = (115200/857 ) = 134.4 | 135 |(errore 0.058 )| ;EQU 0300H ;|= 768 = (115200/768 ) = 150.0 | 150 | ---- | ;EQU 0180H ;|= 384 = (115200/384 ) = 300.0 | 300 | ---- | ;EQU 00C0H ;|= 192 = (115200/192 ) = 600.0 | 600 | ---- | ;EQU 0060H ;|= 96 = (115200/96 ) = 1200.0 | 1200 | ---- | ;EQU 0040H ;|= 64 = (115200/64 ) = 1800.0 | 1800 | ---- | ;EQU 003AH ;|= 58 = (115200/58 ) = 1986.2 | 2000 |(errore 0.69) | ;EQU 0030H ;|= 48 = (115200/48 ) = 2400.0 | 2400 | ---- | ;EQU 0020H ;|= 32 = (115200/32 ) = 3600.0 | 3600 | ---- | ;EQU 0018H ;|= 24 = (115200/24 ) = 4800.0 | 4800 | ---- | ;EQU 0010H ;|= 16 = (115200/16 ) = 7200.0 | 7200 | ---- | Baude EQU 000CH ;|= 12 = (115200/12 ) = 9600.0 | 9600 | ---- | ;EQU 0006H ;|= 6 = (115200/6 ) = 19200.0 | 19200 | ---- | ;EQU 0003H ;|= 3 = (115200/3 ) = 38400.0 | 38400 | ---- | ;EQU 0002H ;|= 2 = (115200/2 ) = 57600.0 | 56000 |(errore 2.86) | ;EQU 0001H ;|= 1 = (115200/1 ) =115200.0 |115200 | ---- | ;\--------------------------------*-------*---------------/ ;---------------------------------------------------------- ;/--------------------------------------------------------\ ;| Scegli la COSTANTE associata al PROTOCOLLO SERIALE | ;*---------[7654 3210]=07H--------------------------------* ;| default .... ..11 >>>>> 8 bit per il DATO | Protoc EQU 07H ;| .... ..10 >>>>> 7 bit per il DATO | ;| .... ..01 >>>>> 6 bit per il DATO | ;| .... ..00 >>>>> 5 bit per il DATO | ;*--------------------------------------------------------* ;| default .... .1.. >>>>> 2 bit di stop | ;| .... .0.. >>>>> 1 bit di stop | ;*--------------------------------------------------------* ;| ...0 1... >>>>> parit… dispari | ;| ...1 1... >>>>> parit… pari | ;| default ...x 0... >>>>> nessuna parit… | ;*--------------------------------------------------------* ;| ..0. .... >>>>> parit… disabilitata | ;| .0.. .... >>>>> Break disabilitato | ;| 0... .... >>>>> programmaz. del protocollo | ;\--------------------------------------------------------/ ; MACRO UTILIZZATE DAL PROGRAMMA: include c:\arch-lab\bin\GIOBE.MAC ;/[nuova MACRO locale]------------------------------------------------\ ;|M_Corn Organizza la stampa di una cornice a video, predisponendo i | ;| parametri nei corretti registri, per la procedura RamCorn | ;\--------------------------------------------------------------------/ M_corn MACRO altezza,larghezza,riga,colonna,colore,tipo,ombra,salva MOV AH,altezza ;\[ altezza compresa cornice ] MOV AL,larghezza ;|[ larghezza compresa cornice ] MOV DH,riga ;|[ riga angolo in alto a sinistra ] MOV DL,colonna ;|[ colonna angolo in alto a sinistra ] MOV BL,tipo ;|[ tipo 0=tratto semplice; 1=tratto doppio] MOV BH,ombra ;|[ ombra 0=senza; 1=con ombreggiatura ] MOV CX,salva ;|[ salva RAM in cui salvare l'area coperta ] M_COLOR Colore ;|[ colore: colore della cornice e sfondo ] CALL RamCorn ;/ ENDM ;/[nuova MACRO locale]------------------------------------------------\ ;|M_Corn Recupera i caratteri salvati nella pagina alternativa,| ;| predisponendo i parametri nei corretti registri, per la| ;| procedura RamRecup alla quale, per il corretto recupero| ;| devono esser passati gli stessi parametri passati a RAMcorn| ;\--------------------------------------------------------------------/ M_recup MACRO altezza,larghezza,riga,colonna,salva MOV AH,altezza ;\[ altezza compresa cornice ] MOV AL,larghezza ;|[ larghezza compresa cornice ] MOV DH,riga ;|[ riga angolo in alto a sinistra ] MOV DL,colonna ;|[ colonna angolo in alto a sinistra ] MOV CX,salva ;|[ salva RAM in cui salvare l'area coperta ] CALL RamRecup ;/ ENDM ; 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 BIOchr1:NEAR EXTRN RIEMPI:NEAR EXTRN BIOSmsg:NEAR EXTRN STAsp:NEAR EXTRN BIOScls:NEAR EXTRN SET_cur:NEAR EXTRN VIA_cur:NEAR EXTRN RIP_cur:NEAR EXTRN RAMcur:NEAR EXTRN KEYwait:NEAR EXTRN Asc2Byt:NEAR EXTRN Dec2Byt:NEAR EXTRN Byt2Asc:NEAR EXTRN Wor2Asc:NEAR EXTRN Wor2Dec:NEAR EXTRN RamCorn:NEAR EXTRN RamRecup:NEAR EXTRN Del_1000:NEAR EXTRN Delay:NEAR EXTRN Del_2000:NEAR ; DICHIARAZIONI (VARIABILI) PER I PROGRAMMI ESTERNI: PUBLIC ATTRIB ;Attributo di colore ; DICHIARAZIONI (PROCEDURE) PER I PROGRAMMI ESTERNI: PUBLIC TxR_Prot ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP TxR_Prot ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 00H ;-------------------------------------------------------------------- Titolo DB "Programma per il Collaudo della Porta Seriale ",00H Titolo1 DB "COM",00H Tema0 DB "TxR_Prot-RICETRASMISSIONE SERIALE su " DB "COM1 - Protocollo:9600,N,2,8",00H Tema1 DB " La RiceTrasmissione Š gestita in POLLING",00H Tema2 DB " Copyright www.giobe2000.it - ing. Giorgio OBER ",00H Nocom0 DB "La PORTA SERIALE desiderata, COM , ",00H Nocom1 DB "non Š",00H Nocom2 DB " disponibile",00H Centro1 DB "Caratteri Ascii Trasmessi",00H Centro2 DB "Caratteri Ascii Ricevuti",00H Centro3 DB "Bytes Trasmessi",00H Centro4 DB "Bytes Ricevuti",00H Centro5 DB "Comandi Trasmessi",00H Centro6 DB "Ascii Ricevuti",00H Centro7 DB "Bytes Ricevuti",00H MENU00 DB "Inizia",00H MENU01 DB "Aiuto",00H MENU02 DB "Quit",00H MENU03 DB "ESC ",00H MENU04 DB " Risincronizza ",00H MENU05 DB " Modo COMANDI ",00H MENU06 DB " Elenco Comandi ",00H MENU07 DB " Modo Normale ",00H BytTxRx DB "[ ",00H Vuota01 DB " " Vuota02 DB " " Vuota03 DB " ",00H ;-------------------------------------------------------------------- Testo01 DB "Sono in attesa di RICEZIONE dal Computer Remoto",00H Testo02 DB "in attesa",00H Testo03 DB "Il Computer Remoto non risponde - RICEZIONE terminata",00H Testo04 DB "Computer Remoto in linea - Digita i comandi o i testi",00H Testo05 DB "Visualizzazione Dati: F1 solo Ascii F2 Ascii & Bytes",00H Testo06 DB "F1",00H Testo07 DB "F2",00H Testo08 DB "Attendi conferma dal Computer remoto... ",00H Testo09 DB "Computer remoto pronto per conferma diretta ",00H Testo10 DB "Computer remoto pronto, per tempo scaduto ",00H Testo11 DB "Premi il prefisso di Comando, ~#~ ",00H Testo12 DB "Scegli il Comando desiderato, ~A~,~B~,~C~,...",00H Testo13 DB "Digita il parametro numerico, da ~0~ a ~9~ ",00H Testo14 DB "Digita il parametro Riga, da ~00~ a ~24~ ",00H Testo15 DB "Digita il parametro Colonna, da ~00~ a ~79~ ",00H Testo16 DB "Digita il parametro Colore PrimoPiano,~00ö15~",00H Testo17 DB "Digita il parametro Colore Sfondo,tra ~0~ö~7~",00H Testo18 DB "Digita i caratteri e conferma con <",00H Testo19 DB "Invio",00H Testo20 DB "> ",00H Testo21 DB " COMANDO ",00H Testo22 DB "PARAMETRO ",00H Testo23 DB "non riconosciuto",00H Testo24 DB "Digita il parametro numerico, da ~00~ a ~99~ ",00H Testo25 DB "Digita il parametro Altezza, da ~03~ a ~25~ ",00H Testo26 DB "Digita il parametro Larghezza, da ~03~ a ~80~",00H Testo27 DB "Digita il parametro Tipo 0=semplice,1=doppio ",00H Testo28 DB "Digita il parametro Ombra ~0~=senza, ~1~=con ",00H Testo29 DB "Digita i 2 caratteri del byte, da ~00~ a ~FF~",00H Testo30 DB "Digita i caratteri della word, ~0000~ö~FFFF~ ",00H Testo31 DB "Digita un numero tra 0 e 255 insieme a ~ALT~ ",00H Testo32 DB "Digita 2 volte un numero tra 0 e 255 con ~ALT~",00H Testo33 DB "Collaudo Comando Generico nø",00H Testo34 DB "Premi un tasto qualunque... per terminare",00H Testo35 DB "Attendi la fine per rientrare in Modo COMANDI",00H Testo36 DB "Il Computer Remoto Š pronto, in attesa di COMANDI...",00H ;-------------------------------------------------------------------- Txt00 DB "impone ClearScreen remoto ",00H ; COMANDO "#A" DB "impone DeskTop Classico ",00H ; COMANDO "#B" DB "fa sparire il Cursore remoto ",00H ; COMANDO "#C" DB "fa tornare il Cursore remoto ",00H ; COMANDO "#D" DB "impone Cornice del primo tipo ",00H ; COMANDO "#E" DB "impone Cornice del secondo tipo",00H ; COMANDO "#F" DB "impone Cornice del terzo tipo ",00H ; COMANDO "#G" DB "attende pressione di un tasto ",00H ; COMANDO "#H" DB "Fine Sequenza Stringhe COMANDI ",00H ; COMANDO "#I" Txt00_ DB "consuma un ritardo pari a 55ms*",00H ; COMANDO "#Jnn" Txt01 DB "fissa le Coordinate di stampa a r",00H ; COMANDO "#Krrcc" Txt02 DB ",c",00H Txt03 DB "impone il Colore del testo, PP=",00H ; COMANDO "#Lpps" Txt04 DB ",Sfondo=",00H Txt05 DB "impone Intestazione di tipo n=",00H ; COMANDO "#Mn" DB "propone un Menu di tipo n=",00H ; COMANDO "#Nn" Txt06 DB "spedisce sulla LPT1 il byte xy=",00H ; COMANDO "#On" Txt07 DB "mette a video la stringa xy=",00H ; COMANDO "#Pn" Txt08 DB "mette a video la stringa xywz=",00H ; COMANDO "#Qn" Txt09 DB "crea una Cornice Programmabile",00H ; COMANDO "#Raallrrcctopps" Txt10 DB "stampa una Stringa Ascii",00H ; COMANDO "#Sa..a",0DH Txt11 DB "esegue la Stringa COMANDI nn=",00H ; COMANDO "#Tnn" Txt12 DB "recupera area coperta da Cornice",00H ; COMANDO "#Uaallrrcc" ;-------------------------------------------------------------------- Note_ DB "Questo eseguibile, ~TxR_Prot.COM~, deve essere in esecuzione",00H DB "su entrambi i Computer coinvolti nella comunicazione seriale.",00H DB "Non appena si preme il tasto ~Inizia~ ciascuno dei 2 rimane",00H DB "in attesa della presenza in linea dell'altro e quando questo",00H DB "accade Š subito possibile scambiare simultaneamente messaggi.",00H DB "Su precisa richiesta uno dei 2 pu• obbligare l'altro in Modo",00H DB "COMANDI, per obbligarlo ad interpretare in modo operativo i",00H DB "bytes che gli saranno spediti dal momento della pressione di",00H DB "F2: le azioni imposte al Computer Remoto sono rigorosamente",00H DB "codificate dall'originale Protocollo descritto in dettaglio",00H DB "nella pagina dalla quale il Computer Locale eserciter… la",00H DB "sua azione coercitiva...",00H DB "In ogni momento Š possibile interrompere il Modo COMANDI per",00H DB "tornare allo scambio simultaneo di messaggi Modo Normale. ",00H DB "In caso di caduta del collegamento Š prevista la possibilit…",00H DB "di una risincronizzazione.",00H ;-------------------------------------------------------------------- Com00 DB "Il tuo computer Š da questo momento configurato",00H Com01 DB "per ricevere i comandi previsti dal protocollo,",00H Com02 DB "condiviso con il computer remoto ed Š obbligato",00H Com03 DB "ad interpretare i bytes in arrivo come ~azioni~",00H Com04 DB "da eseguire. ",00H Com05 DB "Su richiesta del Computer remoto pu• restituire",00H Com06 DB "messaggi o dati, ma non gli sar… possibile",00H Com07 DB "intervenire sul suo controllo. ",00H Com08 DB "Premi un tasto qualunque per cominciare...",00H Cmd00 DB "Se desideri attivare questa modalit… il tuo",00H Cmd01 DB "computer sar… configurato per scambiare con",00H Cmd02 DB "quello remoto i comandi previsti dal protocollo",00H Cmd03 DB "condiviso, obbligandolo ad interpretare i bytes",00H Cmd04 DB "in arrivo come ~azioni~ da eseguire. ",00H Cmd05 DB "Il Computer remoto pu• restituire messaggi o",00H Cmd06 DB "dati, ma gli sar… inibita la possibilit… di",00H Cmd07 DB "intervenire sul controllo locale del tuo...",00H Cmd08 DB "Premi: Si per confermare / No per rinunciare",00H ;-------------------------------------------------------------------- Cmd09 DB "#A ClearScreen Classico ",00H DB "#B DeskTop Classico ",00H DB "#C Fa sparire il cursore ",00H DB "#D Fa tornare il cursore ",00H DB "#E Cornice di primo tipo ",00H DB "#F Cornice di secondo tipo ",00H DB "#G Cornice di terzo tipo ",00H DB "#H Aspetta Pressione Tasto ",00H DB "#I Fine Sequenza COMANDI #T ",00H DB "#Jnn Ritardo programmabile ",00H DB "#Krrcc Fissa riga, colonna ",00H DB "#Lpps Colore testo,sfondo ˙ ",00H DB "#Mn Intestazione tipo n ",00H DB "#Nn Menu tipo n ",00H DB "#Oxy Out Dato 8bit su LPT1 ",00H DB "#Pxy Visualizza il Byte xyH ",00H DB "#Qxywz Visualizza Word xywzH",00H DB "#Raallrrcctopps CreaCornice ",00H DB "#Sa..a Stampa stringa ascii ",00H DB "#Tnn Sequenza di COMANDI ",00H DB "#Uaallrrcc RecuperaCornice ",00H ;-------------------------------------------------------------------- Cmd10 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Krrcc~ ˙ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " ",00H DB " Fissa posizione di stampa ",00H DB " corrente sul Monitor del ",00H DB " Computer Remoto alla ",00H DB " riga ~rr~ da ~00~ a ~24~,",00H DB " colonna ~cc~ da ~00~ a ~79~",00H DB " -------------------------- ",00H DB " I parametri sono stringhe ",00H DB " di caratteri Ascii numerici",00H DB " in rappresentanza dei ",00H DB " numeri corrispondenti. ",00H DB " -------------------------- ",00H DB " NB: i numeri minori di 9 ",00H DB " devono comunque essere ",00H DB " espressi con 2 caratteri ",00H DB " cioŠ con stringhe del ",00H DB " tipo da ~00~ a ~09~ ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd11 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Lpps~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " Fissa il colore di Primo ",00H DB " Piano ~pp~ e di Sfondo ~s~ ",00H DB " di ogni carattere posto sul",00H DB " Monitor del Computer Remoto",00H DB " -------------------------- ",00H DB " La stringa del parametro ",00H DB " del Colore di Primo Piano, ",00H DB " composta da 2 caratteri ",00H DB " Ascii numerici rappresenta ",00H DB " il numero da ~00~ a ~15~ ",00H DB " mentre il carattere Sfondo ",00H DB " pu• valere da ~0~ a ~7~. ",00H DB " -------------------------- ",00H DB " NB: i numeri minori di 9 ",00H DB " devono comunque essere ",00H DB " espressi con 2 caratteri ",00H DB " cioŠ con stringhe del ",00H DB " tipo da ~00~ a ~09~ ",00H ;-------------------------------------------------------------------- Cmd12 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Mn~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " Adatto al servizio delle ",00H DB " Cornici di tipo 1ø, 2ø e 3ø",00H DB " ottenute con i comandi ~#E~",00H DB " ~#F~ e ~#G~, inserisce una ",00H DB " stringa autocentrata sulla ",00H DB " riga 01 con ~intestazioni~ ",00H DB " predefinite di 78 caratteri",00H DB " di Colore Bianco su Blu: ",00H DB " ~0~: Collaudo della ..... ",00H DB " ~1~: Controllo Remoto ... ",00H DB " ~2~: <... disponibile ...> ",00H DB " ~3~: <... disponibile ...> ",00H DB " ~4~: <... disponibile ...> ",00H DB " ~5~: <... disponibile ...> ",00H DB " ~6~: <... disponibile ...> ",00H DB " ~7~: <... disponibile ...> ",00H DB " ~8~: <... disponibile ...> ",00H DB " ~9~: <... disponibile ...> ",00H ;-------------------------------------------------------------------- Cmd13 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Nn~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " Adatto al servizio delle ",00H DB " Cornici di tipo 1ø, 2ø e 3ø",00H DB " ottenute con i comandi ~#E~",00H DB " ~#F~ e ~#G~, inserisce una ",00H DB " stringa autocentrata sulla ",00H DB " riga 23 con ~menu~ pre- ",00H DB " definiti di 78 caratteri ",00H DB " di Colore Bianco su Blu: ",00H DB " ~0~: Copyright www.giobe..",00H DB " ~1~: ESC per terminare ",00H DB " ~2~: <... disponibile ...> ",00H DB " ~3~: <... disponibile ...> ",00H DB " ~4~: <... disponibile ...> ",00H DB " ~5~: <... disponibile ...> ",00H DB " ~6~: <... disponibile ...> ",00H DB " ~7~: <... disponibile ...> ",00H DB " ~8~: <... disponibile ...> ",00H DB " ~9~: <... disponibile ...> ",00H ;-------------------------------------------------------------------- Cmd14 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#On~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " ",00H DB " ",00H DB " ",00H DB " ",00H DB " Dedicato al controllo della",00H DB " Porta Paralla LPT1 del ",00H DB " Computer Remoto consente ",00H DB " di scrivere il Dato a 8bit ",00H DB " sul Registro Dati (0378H) ",00H DB " passato come Parametro in ",00H DB " una stringa di 2 caratteri ",00H DB " ascii numerici (tra 0 e 9) ",00H DB " e letterali (tra A e F) ",00H DB " ",00H DB " ",00H DB " ",00H DB " ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd15 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Pn~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Pone sul Monitor del ",00H DB " Computer Remoto la stringa ",00H DB " ascii esadecimale del byte ",00H DB " xyH passato come parametro ",00H DB " a questo COMANDO, nella ",00H DB " posizione di stampa e nel ",00H DB " colore corrente. ",00H DB " -------------------------- ",00H DB " Il COMANDO Š pensato per ",00H DB " una erogazione diretta del ",00H DB " byte (per esempio tramite ",00H DB " single-chip) e pu• essere ",00H DB " qui collaudato permendo il ",00H DB " tasto ALT, insieme ad un ",00H DB " numero tra 0 e 255 sulla ",00H DB " tastierina numerica. ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd16 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Qxywz~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Pone sul Monitor del ",00H DB " Computer Remoto la stringa ",00H DB " ascii esadecimale della ",00H DB " word xywzH passata come ",00H DB " parametro a questo COMANDO,",00H DB " nella posizione di stampa ",00H DB " e nel colore corrente. ",00H DB " -------------------------- ",00H DB " Il COMANDO Š pensato per ",00H DB " una erogazione diretta di ",00H DB " word (per esempio tramite ",00H DB " single-chip) e pu• essere ",00H DB " qui collaudato permendo il ",00H DB " tasto ALT, insieme ad un ",00H DB " numero tra 0 e 255 sulla ",00H DB " tastierina numerica, due ",00H DB " volte di seguito. ",00H ;-------------------------------------------------------------------- Cmd17 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Raallrrcctopps~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Pone sul Monitor del ",00H DB " Computer Remoto una cornice",00H DB " completamente programmabile",00H DB " per dimensioni, posizione, ",00H DB " colore e tipologia estetica",00H DB " -------------------------- ",00H DB " I parametri sono stringhe ",00H DB " Ascii Numeriche con range: ",00H DB " altezza aa=03ö25 ",00H DB " larghezza ll=03ö80 ",00H DB " riga rr=00ö24 ",00H DB " colonna cc=00ö79 ",00H DB " tipo di tratto t=0 o 1 ",00H DB " effetto ombra o=0 o 1 ",00H DB " colore primo piano pp=00ö15",00H DB " colore sfondo s=0ö7 ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd18 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Saa..aa 0DH~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " ",00H DB " ",00H DB " Pone sul Monitor del ",00H DB " Computer Remoto i caratteri",00H DB " digitati in sequenza sulla ",00H DB " tastiera fino alla ",00H DB " pressione del tasto ",00H DB " ",00H DB " NB: il suo codice ascii 0DH",00H DB " verr… comunque trasmesso e",00H DB " utilizzato come terminatore",00H DB " di stringa dal programma in",00H DB " ricezione ",00H DB " ",00H DB " ",00H DB " ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd19 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Tnn~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Esegue molti COMANDI di ",00H DB " questo Protocollo raccolti ",00H DB " in una Sequenza di Stringhe",00H DB " caratterizzata dal codice ",00H DB " numerico indicato dai due ",00H DB " codici ascii numerici tra ",00H DB " ~00~ e ~99~ passati come ",00H DB " parametri. ",00H DB " ",00H DB " Attualmente disponibili: ",00H DB " nø00-Lettura Tasti Remoti ",00H DB " nø01-OUT su LPT1 e a video",00H DB " nø02-Conto alla rovescia ",00H DB " ",00H DB " Molte delle 100 stringhe ",00H DB " sono ancora da definire... ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd20 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Jnn~ ˙ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ",00H DB " Consuma un tempo pari a ",00H DB " multipli di 54,925493 ms ",00H DB " portabile e preciso perchŠ ",00H DB " legato al Timer di Sistema ",00H DB " -------------------------- ",00H DB " I parametri sono stringhe ",00H DB " di caratteri Ascii numerici",00H DB " in rappresentanza della ",00H DB " costante numerica da ~01~, ",00H DB " pari a 55ms, a ~99~, pari ",00H DB " a circa 5 secondi e mezzo. ",00H DB " -------------------------- ",00H DB " NB: i numeri minori di 9 ",00H DB " devono comunque essere ",00H DB " espressi con 2 caratteri ",00H DB " cioŠ con stringhe del ",00H DB " tipo da ~00~ a ~09~ ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd21 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " COMANDO ~#Uaallrrcc~ ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " ",00H DB " Recupera l'area coperta da ",00H DB " una cornice predisposta in ",00H DB " precedenza sul Monitor del ",00H DB " del Computer Remoto ",00H DB " -------------------------- ",00H DB " I parametri sono stringhe ",00H DB " Ascii Numeriche e DEVONO ",00H DB " essere gli stessi passati ",00H DB " in precedenza, nella fase ",00H DB " di stampa della cornice: ",00H DB " altezza aa=03ö25 ",00H DB " larghezza ll=03ö80 ",00H DB " riga rr=00ö24 ",00H DB " colonna cc=00ö79 ",00H DB " ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd22 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " SEQUENZA di COMANDI nø 00 ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Mentre leggi questo testo ",00H DB " il Computer Remoto sta ",00H DB " ricevendo molte stringhe di",00H DB " COMANDI con le quali questa",00H DB " postazione organizza il ",00H DB " Desktop sul Monitor Remoto,",00H DB " aspettando di ritorno il ",00H DB " il codice Ascii del tasto ",00H DB " premuto su tastiera Remota.",00H DB " ",00H DB " Con la pressione di tasti ",00H DB " si intende simulare, per ",00H DB " esempio, la richiesta di ",00H DB " dati assunti da sensori o ",00H DB " letti da contatti remoti. ",00H DB " ",00H DB " ",00H ;-------------------------------------------------------------------- Cmd23 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " SEQUENZA di COMANDI nø 01 ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " ",00H DB " Mentre leggi questo testo ",00H DB " il Computer Remoto sta ",00H DB " ricevendo molte stringhe di",00H DB " COMANDI con le quali questa",00H DB " postazione organizza il ",00H DB " Desktop sul Monitor Remoto,",00H DB " aspettando di ritorno il ",00H DB " il codice Ascii del tasto ",00H DB " premuto su tastiera Remota.",00H DB " Il valore binario del byte ",00H DB " Š poi rispedito dentro una ",00H DB " cornice, sul Monitor remoto",00H DB " e contemporaneamente anche ",00H DB " sulla porta LPT1 Remota. ",00H DB " Il test evidenzia cos la ",00H DB " possibilit… di controllare",00H DB " la Parallela via Seriale...",00H ;-------------------------------------------------------------------- Cmd24 DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " SEQUENZA di COMANDI nø 02 ",00H DB " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ",00H DB " Mentre leggi questo testo ",00H DB " il Computer Remoto sta ",00H DB " ricevendo molte stringhe di",00H DB " COMANDI di protocollo. ",00H DB " ",00H DB " Questo Computer organizza ",00H DB " la messa a video dentro una",00H DB " cornice sul Monitor Remoto ",00H DB " di un Conto alla Rovescia ",00H DB " da 9 a 0; al termine, dopo ",00H DB " 2 secondi toglie la cornice",00H DB " e, dopo altri 2 secondi, ",00H DB " toglie il collegamento. ",00H DB " Ogni azione Š comunque ",00H DB " imposta da questo Computer ",00H DB " senza che quello Remoto ",00H DB " possa sottrarsi all'obbligo",00H DB " ",00H ;-------------------------------------------------------------------- TabINT DW INTES0 DW INTES1 DW INTES2 DW INTES3 DW INTES4 DW INTES5 DW INTES6 DW INTES7 DW INTES8 DW INTES9 INTES0 DB "Collaudo della Porta Seriale COM1 - Protocollo:9600,N,2,8",00H INTES1 DB "Controllo Remoto via Seriale",00H INTES2 DB " ",00H INTES3 DB " ",00H INTES4 DB " ",00H INTES5 DB " ",00H INTES6 DB " ",00H INTES7 DB " ",00H INTES8 DB " ",00H INTES9 DB " ",00H ;-------------------------------------------------------------------- TabMENU DW MENU_0 DW MENU_1 DW MENU_2 DW MENU_3 DW MENU_4 DW MENU_5 DW MENU_6 DW MENU_7 DW MENU_8 DW MENU_9 MENU_0 DB "Copyright www.giobe2000.it - ing. Giorgio OBER ",00H MENU_1 DB "ESC per terminare",00H MENU_2 DB " ",00H MENU_3 DB " ",00H MENU_4 DB " ",00H MENU_5 DB " ",00H MENU_6 DB " ",00H MENU_7 DB " ",00H MENU_8 DB " ",00H MENU_9 DB " ",00H ;-------------------------------------------------------------------- ;\Deposito per i caratteri a scii numerici digitati in DepoPar DB 20 DUP (00H) ;|fase di acquisizione dei possibili PARAMETRI dei ;|COMANDI che li richiedono;sono previste 20 locazioni ;/utili per esempio per la stampa di una cornice ;-------------------------------------------------------------------- DepoMod DB 00H ;[DepoMod]=00 con "T" Computer locale in Trasmissione ;[DepoMod]=01 con "R" Computer locale in Ricezione ;-------------------------------------------------------------------- PrntMod DB 00H ;[PrntMod]=00 mostra solo il valore ascii (default) ;[PrntMod]=01 mostra anche il valore esadecimale ;[PrntMod]=02 Ricetrasmissione in modo COMANDI ;-------------------------------------------------------------------- ;\Se la variabile [StngMod] vale 00 la "Rx_Cmd" pu• ;|consultare la tastiera, per dare in ogni momento la ;|possibilit… di porre termine alla ricezione; questa ;|scelta Š opportuna durante la ricezione di singole StngMod DB 00H ;|Stringhe di COMANDI ma, surante la ricezione di una ;|Sequenza di Stringhe di COMANDI, organizzata dal ;|COMANDO "#Tnn", per ridurre al minimo i tempi morti ;|viene evitato di consultare la tastiera, forzando ;/la variabile [StngMod] a 01 con il COMANDO "#I" ;-------------------------------------------------------------------- COMANDI DB 00H ;[COMANDI]=00 modalit… di servizio per Modo NORMALE ;[COMANDI]=01 modalit… di servizio per Modo COMANDI ;-------------------------------------------------------------------- NumRxD DW 0001H ; Numero di Bytes ricevuti DataRxD DB 00H RigRxDa DB 14 ;\Predispone la riga e la colonna di stampa corrente per ColRxDa DB 1 ;|i caratteri RxD AtrRxDa DB 0FH ;/Colore da usare nella stampa dei caratteri RxD RigRxDb DB 20 ;\Predispone la riga e la colonna di stampa corrente per ColRxDb DB 1 ;|i bytes RxD AtrRxDb DB 0FH ;/Colore da usare nella stampa dei bytes RxD NumTxD DW 0001H ; Numero di Bytes trasmessi DataTxD DB 00H ; Primo Carattere da trasmettere (ascii 00) RigTxDa DB 2 ;\Predispone la riga e la colonna di stampa corrente per ColTxDa DB 1 ;|i caratteri TxD AtrTxDa DB 0FH ;/Colore da usare nella stampa dei caratteri TxD RigTxDb DB 8 ;\Predispone la riga e la colonna di stampa corrente per ColTxDb DB 1 ;|i bytes TxD AtrTxDb DB 0FH ;/Colore da usare nella stampa dei bytes TxD ;-------------------------------------------------------------------- TxMsg_A DB "#A" ; Fai ClearScreen sul Monitor remoto DB 00H TxMsg_H DB "#H" ; Aspetta Pressione Tasto DB 00H TxMsg_O DB "#O" ; OUT sulla Porta Parallela DB 00H TxMsg_P DB "#P" ; Visualizza la stringa del Byte xyH DB 00H ;-------------------------------------------------------------------- TxMsg01 DB "#B" ; DeskTop Classico DB "#C" ; Fa sparire il cursore DB "#L007" ; Attributo di colore, testo sfondo pp,s DB "#K0022" ; Coordinate di stampa riga, colonna rr,cc DB "#SCollaudo Trasmissione Stringa di Comandi",0DH DB "#K2419" ; Coordinate di stampa riga, colonna rr,cc DB "#S Premi un tasto qualunque per cominciare ",0DH DB 00H TxMsg02 DB "#R0760091011141" ; Stampa una cornice programmabile a video ; rr,cc,rr,cc,t,o,tt,s DB "#L151" ; Attributo di colore, testo sfondo pp,s DB "#K1225" ; Coordinate di stampa riga, colonna rr,cc DB "#S Benvenuto su www.Giobe2000.it ",0DH DB "#L007" ; Attributo di colore, testo sfondo pp,s DB "#K2419" ; Coordinate di stampa riga, colonna rr,cc DB "#SPremi un tasto qualunque per pulire lo schermo",0DH DB 00H TxMsg03 DB "#U07600910" ; Recupera la cornice DB "#L007" ; Attributo di colore, testo sfondo pp,s DB "#K2419" ; Coordinate di stampa riga, colonna rr,cc DB "#S Premi un tasto qualunque per terminare... ",0DH DB 00H TxMsg04 DB "#A" ; Fai ClearScreen sul Monitor remoto DB "#D" ; Fa riapparire il cursore DB 00H ;-------------------------------------------------------------------- TxMsg11 DB "#G" ; Cornice di terzo tipo DB "#M0" ; Intestazione personalizzata DB "#N0" ; Menu personalizzato DB "#C" ; Fa sparire il cursore DB "#L150" ; Attributo di colore, testo sfondo pp,s DB "#K1023" ; Coordinate di stampa riga, colonna rr,cc DB "#SUscita Dato a 8 bit su porta parallela",0DH DB "#R0308123800140" ; Stampa una cornice programmabile a video ; rr,cc,rr,cc,t,o,tt,s DB "#L150" ; Attributo di colore, testo sfondo pp,s DB "#K1620" ; Coordinate di stampa riga, colonna rr,cc DB "#SPremi un tasto e guarda sul connettore LPT1",0DH DB "#L154" ; Attributo di colore, testo sfondo pp,s DB "#K1928" ; Coordinate di stampa riga, colonna rr,cc DB "#S Premi per terminare ",0DH DB 00H ;-------------------------------------------------------------------- TxMsg12 DB "#L140" ; Attributo di colore, testo sfondo pp,s DB "#K1341" ; Coordinate di stampa riga, colonna rr,cc DB "#P" ; Visualizza la stringa del Byte xyH DB 00H ;-------------------------------------------------------------------- TxMsg21 DB "#B" ; DeskTop Classico DB "#C" ; Fa sparire il cursore DB "#L007" ; Attributo di colore, testo sfondo pp,s DB "#K0029" ; Coordinate di stampa riga, colonna rr,cc DB "#SGestione CountDown Remoto",0DH DB "#R0309123611141" ; Stampa una cornice programmabile a video ; rr,cc,rr,cc,t,o,tt,s DB 00H ;-------------------------------------------------------------------- TxMsg22 DB "#L151" ; Attributo di colore, testo sfondo pp,s DB "#K1340" ; Coordinate di stampa riga, colonna rr,cc DB "#P" ; Visualizza la stringa del Byte xyH DB 00H ;-------------------------------------------------------------------- TxMsg23 DB "#L007" ; Attributo di colore, testo sfondo pp,s DB "#K2424" ; Coordinate di stampa riga, colonna rr,cc DB "#S CountDown Terminato ",0DH DB "#J36" ; Consuma un ritardo pari a 36*55ms= 2 secondi DB "#U03091236" ; Recupera la cornice DB "#L047" ; Attributo di colore, testo sfondo pp,s DB "#K2424" ; Coordinate di stampa riga, colonna rr,cc DB "#SIl controllo terminer… tra 2 secondi",0DH DB "#J36" ; Consuma un ritardo pari a 36*55ms= 2 secondi DB "#A" ; Fai ClearScreen sul Monitor remoto DB "#D" ; Fa riapparire il cursore DB 00H ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;| PROCEDURA : BARRA | ;| DESCRIZIONE : Stampa un'intera riga di spazi | ;\---------------------------------------------------------------------------/ BARRA: M_CURSOR DH,0 MOV AL,' ' MOV CX,80 bar0: CALL BIOchr1 LOOP bar0 RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : DESKTOP | ;| DESCRIZIONE : Predispone il Piano di Lavoro per il Test Seriale. | ;| Se il valore ricevuto in ingresso in SI Š 0000H la porta| ;| seriale desiderata NON Š presente nel sistema; la procedura| ;| segnala l'errore e pone automaticamente fine al test,| ;| tornando al DOS (rientro a livello _OUT) con un artificio. | ;\---------------------------------------------------------------------------/ DESK___:CALL VIA_cur ;\/--------------------------------------------\ MOV AL,'°' ;||**** Piano di lavoro e Menu principale *****| M_COLOR 71H ;|\--------------------------------------------/ CALL Riempi ;/Predispone il Piano Lavoro su tavola zigrinata Barra1: M_COLOR 70H ;\ MOV DH,0 ;| CALL BARRA ;| M_msgC Titolo, 0,12,70H;|Intestazione M_COLOR 74H ;| M_msgN Titolo1 ;/ MOV DH,24 ;\ CALL BARRA ;|Menu M_msgC MENU02,24,70,70H;| M_Chr 'Q',24,70,74H ;/ RET ;--------------------------------------------------------------------- DESKTOP:PUSH SI ;\In ingresso SI=0000 se la porta richiesta NON ;/Š presente nel sistema... CALL BIOScls ;\Clearscreen necessario per garantire il ;/lampeggio dei caratteri anche in ambiente XP CALL DESK___ ;\Predispone il Piano di lavoro su tavola ;/zigrinata con Intestazione e primo Menu ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 5 , 69 , 11 , 5 , 1EH , 01 , 01 ,1000H ;\Si recupera il valore iniziale di SI e, se Š POP SI ;|diverso da 0000H significa che la porta CMP SI,0000H ;|richiesta Š presente nel sistema, per cui JNZ DESK_0 ;|si prosegue con la presentazione del Menu ;/principale del progamma ;--------------------------------------------------------------------- M_msgC Nocom0,12,13,1FH;\/--------------------------------------------\ M_COLOR 9FH ;||** Porta NON installata: segnala l'errore **| M_msgN Nocom1 ;|\--------------------------------------------/ M_COLOR 1FH ;| M_msgN Nocom2 ;| MOV AL,CS:[depPOR];|"La PORTA SERIALE desiderata, COM , ADD AL,30H ;| non Š disponibile" M_Chr AL,12,45,1EH ;| M_Chr AL, 0,61,74H ;| <<<< Visualizza anche nella barra del Titolo CALL KEYwait ;/ ;\NB: recupera con POP AX la posizione pendente POP AX ;|nello stack dovuta alla chiamata "CALL DESKTOP ;/per poter tornare con JMP invece che con "RET" JMP _OUT ; Rientro al Main con terminazione immedata ;--------------------------------------------------------------------- DESK_0: M_msgC Tema0,12, 7,1FH;\/--------------------------------------------\ M_msgC Tema1,14, 7,1FH;||***** Porta installata: test eseguibile ****| MOV AL,CS:[depPOR];|\--------------------------------------------/ ADD AL,30H ;|"TRASMISSIONE SERIALE su COMx - M_Chr AL,12,47,1EH ;| protocollo HW: 9600,N,2,8" M_Chr AL, 0,61,74H ;/ <<<< Visualizza anche nella barra del Titolo M_msgC MENU00,24,7,70H;\/--------------------------------------------\ M_Chr 'I',24, 7,74H ;||************ Primo Menu interno ************| M_msgC MENU01,24,16,70H;|\--------------------------------------------/ M_Chr 'A',24,16,74H ;| DESK_1: CALL KEYwait ;| AND AL,11011111B ;|Rimane in attesa dei tasti del Menu principale CMP AL,'I' ;| con "I" inizia il Test JZ DESK_2 ;| CMP AL,'A' ;| con "A" Aiuto JZ Note ;| CMP AL,'Q' ;| con "Q" torna al DOS JNZ DESK_1 ;/ ;\NB: recupera con POP AX la posizione pendente POP AX ;|nello stack dovuta alla chiamata "CALL DESKTOP ;/per poter tornare con JMP invece che con "RET" JMP _OUT ; Rientro al Main con terminazione immedata ;--------------------------------------------------------------------- ;/---------------------------------------------\ ;| Descrive il funzionamento del programma. | ;\---------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva Note: M_corn 18 , 64 , 3 , 7 , 31H , 01 , 01 ,2000H LEA SI,Note_ M_COLOR 3FH MOV CX,16 MOV DH,4 MOV DL,9 Note1: M_CURSOR DH,DL CALL BIOSmsg INC SI INC DH LOOP Note1 CALL KEYwait ;M_recup altezza,larghezza,riga,colonna,salva M_recup 18 , 64 , 3 , 7 ,2000H JMP SHORT DESK_1 ;-------------------------------------------------------------------- DESK_2:M_msgC Testo05,24,7,70H;\/--------------------------------------------\ M_msgC Testo06,24,30,74H;||*********** Secondo Menu interno ***********| M_msgC Testo07,24,45,74H;|\--------------------------------------------/ DESK_3: CALL KeyWait ;|Rimane in attesa dei tasti del Menu principale AND AL,11011111B ;| CMP AL,'Q' ;| con "Q" torna al DOS JNZ DESK_4 ;| POP AX ;| JMP _OUT ;| DESK_4: CMP AL,00H ;| JNZ DESK_3 ;| CMP AH,F1 ;| Gestione tasto : solo Ascii JNZ DESK_5 ;| MOV Byte Ptr CS:[COMANDI],00;|Fissa la modalit… di servizio per Modo NORMALE MOV Byte Ptr CS:[PrntMod],00;| Stampa dei dati solo in Ascii JMP SHORT DESK_6 ;| DESK_5: CMP AH,F2 ;| Gestione tasto : Ascii & Bytes JNZ DESK_3 ;| MOV Byte Ptr CS:[PrntMod],01;| Stampa dei dati in Asci e Esadecimale DESK_6:M_msgC Vuota01,24,7,74H; ;M_recup altezza,larghezza,riga,colonna,salva M_recup 5 , 69 , 11 , 5 ,1000H ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva DESK_7: M_corn 3 , 69 , 3 , 5 , 4EH , 01 , 01 ,1000H M_msgC Vuota01,24,7,74H;\ "Sono in attesa di RICEZIONE M_msgC Testo01,4,17,4FH;| dal Computer Remoto" M_msgC Testo02,4,22,0CFH;/ ;--------------------------------------------------------------------- ;/---------------------------------------------\ ;|Inizializza le variabili - Test Seriale| DESK_8: ;\---------------------------------------------/ MOV Word Ptr CS:[NumRxD],01; Numero di Bytes Ricevuti MOV Byte Ptr CS:[DataTxD],00; Primo Carattere da trasmettere (ascii 00) MOV Byte Ptr CS:[RigRxDa],14;\Predispone la riga e la colonna di stampa cor- MOV Byte Ptr CS:[ColRxDa],01;|rente per i caratteri RxD MOV Byte Ptr CS:[RigRxDb],20;|Predispone la riga e la colonna di stampa cor- MOV Byte Ptr CS:[ColRxDb],01;|rente per i bytes RxD MOV Byte Ptr CS:[AtrRxDb],0FH;/Colore da usare nella stampa dei caratteri RxD MOV Word Ptr CS:[NumTxD],01; Numero di Bytes Trasmessi MOV Byte Ptr CS:[RigTxDa],02;\Predispone la riga e la colonna di stampa cor- MOV Byte Ptr CS:[ColTxDa],01;|rente per i caratteri TxD MOV Byte Ptr CS:[RigTxDb],08;|Predispone la riga e la colonna di stampa cor- MOV Byte Ptr CS:[ColTxDb],01;|rente per i bytes TxD MOV Byte Ptr CS:[AtrTxDb],0FH;/Colore da usare nella stampa dei caratteri TxD RET ;--------------------------------------------------------------------- DESK_9: CALL DESK___ ;\/--------------------------------------------\ JMP DESK_7 ;||*** Rientro in caso di Reinizializzazione **| ;/\--------------------------------------------/ ;--------------------------------------------------------------------- ;/---------------------------------------------\ ;|*** Segnala Computer remoto non collegato ***| ;\---------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva DESK_A: M_corn 3 , 69 , 3 , 5 , 4CH , 01 , 01 ,1000H M_msgC Testo03,4,13,4FH; "Il Computer Remoto non risponde - RET ; RICEZIONE terminata" ;--------------------------------------------------------------------- ;/---------------------------------------------\ ;|*** MENU INTERNO durante la gestione dati ***| ;\---------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva DESK_B: M_corn 3 , 69 , 3 , 5 , 2AH , 01 , 01 ,1000H M_msgC Testo04,4,13,2FH; "Computer Remoto in linea - Digita i comandi" M_msgC Vuota03,24,70,70H CALL Del_1000 CALL Del_2000 Barra2:M_msgC MENU03,24,70,74H;\"ESC" M_msgC Testo06,24,7,74H;|"F1" M_COLOR 70H ;| M_msgN MENU04 ;|" Risincronizza" M_COLOR 74H ;|---------------------------------------------- M_msgN Testo07 ;|"F2" M_COLOR 70H ;| M_msgN MENU05 ;|" Modo Comandi" M_msgN Vuota02 ;/ RET ;--------------------------------------------------------------------- DESK_C: CALL Via_Cur ;\/--------------------------------------------\ ;||**** MENU INTERNO Gestione Modo COMANDI ****| ;*\--------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 15 , 54 , 5 , 13 , 1EH , 01 , 01 ,3000H M_msgC Cmd00, 7,16,1FH;*Se desideri attivare questa modalit… il tuo M_msgC Cmd01, 8,16,1FH;|computer sar… configurato per scambiare con M_msgC Cmd02, 9,16,1FH;|quello remoto comandi previsti dal protocollo M_msgC Cmd03,10,16,1FH;|condiviso obbligandolo ad interpretare i bytes M_msgC Cmd04,11,16,1FH;|in arrivo come ~azioni~ da eseguire. M_msgC Cmd05,13,16,1FH;|Il Computer remoto pu• restituire messaggi o M_msgC Cmd06,14,16,1FH;|dati, ma gli sar… inibita la possibilit… di M_msgC Cmd07,15,16,1FH;|intervenire sul controllo locale del tuo... M_msgC Cmd08,17,16,1FH;|Premi: Si per confermare / No per rinunciare M_Chr 'S',17,25,1EH ;| M_Chr 'N',17,46,1EH ;/ DESK_D: CALL KeyWait ;\Rimane in attesa dei tasti AND AL,11011111B ;| CMP AL,'S' ;| con "S" accetta il servizio JZ DESK_E ;| CMP AL,'N' ;| con "N" torna alla ricetrasmissione testi JNZ DESK_D ;/ DESK_E: PUSH AX ;\ M_recup 15,54,5,13,3000H;|Recupera comunque le aree coperte dal testo POP AX ;| RET ;/ ;--------------------------------------------------------------------- DESK_F: CALL Via_Cur ;\/--------------------------------------------\ ;||**** MENU INTERNO Passaggio Modo COMANDI ***| ;*\--------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 15 , 54 , 5 , 13 , 4EH , 01 , 01 ,3000H M_msgC Com00, 7,16,4FH;*Il tuo computer Š da questo momento M_msgC Com01, 8,16,4FH;|configurato per ricevere i comandi previsti M_msgC Com02, 9,16,4FH;|dal protocollo, condiviso con il comuter M_msgC Com03,10,16,4FH;|remoto, ed Š obbligato ad interpretare i bytes M_msgC Com04,11,16,4FH;|in arrivo come ~azioni~ da eseguire. M_msgC Com05,13,16,4FH;|Su richiesta del Computer remoto pu• M_msgC Com06,14,16,4FH;|restituire messaggi o dati, ma non gli sar… M_msgC Com07,15,16,4FH;|possibile intervenire sul suo controllo... M_msgC Com08,17,19,0CFH;/Premi un tasto qualunque per cominciare... RET ;--------------------------------------------------------------------- DESK_G: CALL BIOScls ;\/--------------------------------------------\ ;||***** Messaggio di commiato in USCITA ***** | ;*\--------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 5 , 69 , 11 , 5 , 1EH , 01 , 01 ,1000H M_msgC Tema0,12, 7,1FH;\ Messaggio di chiusura M_msgC Tema2,14, 9,1FH;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : RD_Time | ;| DESCRIZIONE : Assume il tempo reale corrente del giorno dalle locazioni di| ;| sistema da 0000:046CH a 0000:046FH: si tratta del numero a| ;| 32 bit dei TICKs prodotti nell'arco della giornata; a questo| ;| numero aggiunge il numero di ticks corrispondenti al ritardo| ;| da consumare, fornito in ingresso in AX, lasciando in uscita| ;| il tempo totale risultante in CX,DX (numero a 32 bit). | ;| La procedura (estratta dalla Delay della libreria GIOBE.ASM)| ;| si aspetta di consumare un tempo qualunque, multiplo del| ;| tempo minimo di 54,925493 millisecondi assolutamente preciso| ;| perchŠ legato al Timer di Sistema, e assolutamente portabile| ;| con ogni sistema operativo, anche con i pi— moderni (Windows| ;| 2000/NT/XP); ecco alcuni valori d'esempio: | ;| /-------*---------\/-------*--------\/-------*---------\ | ;| |ritardo| Delay0 ||ritardo| Delay0 ||ritardo| Delay0 | | ;| *-------*---------**-------*--------**-------*---------* | ;| |1 | 55 ms || 16 | 879 ms || 920 | 50 s | | ;| |2 | 110 ms || 17 | 934 ms || 1092 | 1 m | | ;| |3 | 164 ms || 18 | 1 s || 2294 | 2 m | | ;| |4 | 219 ms || 27 | 1,5 s || 3277 | 3 m | | ;| |5 | 274 ms || 36 | 2 s || 4370 | 4 m | | ;| |6 | 329 ms || 45 | 2,5 s || 5462 | 5 m | | ;| |7 | 384 ms || 54 | 3 s || 6554 | 6 m | | ;| |8 | 439 ms || 63 | 3,5 s || 7647 | 7 m | | ;| |9 | 494 ms || 73 | 4 s || 9831 | 9 m | | ;| |10 | 549 ms || 82 | 4,5 s || 10964 | 10 m | | ;| |11 | 604 ms || 91 | 5 s || 21848 | 20 m | | ;| |12 | 659 ms || 182 | 10 s || 32771 | 30 m | | ;| |13 | 714 ms || 364 | 20 s || 43695 | 40 m | | ;| |14 | 769 ms || 546 | 30 s || 65536 | 1 h | | ;| |15 | 824 ms || 728 | 40 s || | | | ;| \-------*---------/\-------*--------/\-------*---------/ | ;\---------------------------------------------------------------------------/ RD_Time:PUSH AX ;\Restituisce in CX,DX il tempo reale corrente MOV AH,00H ;|del giorno assumendolo dal contenuto delle INT 1AH ;|locazioni di sistema da 0000:046CH a ;|0000:046FH cioŠ il numero a 32 bit dei TICKs ;/prodotti nell'arco della giornata POP AX ;\Aggiorna, con il numero di TICKs desiderato, ADD DX,AX ;|il valore CX,DX dei TICKs relativi alla prima JNC RD_Tim0 ;|lettura delle variabili di sistema da INC CX ;/0000:046C a 0000:046F RD_Tim0:RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : ChkTime | ;| DESCRIZIONE : Controlla se il tempo reale corrente del giorno, assunto| ;| dalle locazioni di sistema da 0000:046CH a 0000:046FH, ha| ;| raggiunto quello equivalente al numero a 32 bit associati al| ;| tempo (in TICKs) corrispondente al tempo da consumare,| ;| fornito in ingresso in CX,DX. | ;| Se il tempo previsto Š stato consumato la procedura termina| ;| con AH=01H; altrimenti con AH=00H; essa Š estratta dalla| ;| "Delay" della libreria GIOBE.ASM. | ;\---------------------------------------------------------------------------/ ChkTime:PUSH CX ;\Salva nello stack il numero CX,DX dei TICKs PUSH DX ;|corrispondente al tempo da raggiungere al ;/termine della nuova lettura del tempo corrente PUSH CX ;\Copia in AX,BX il numero dei TICKs relativi PUSH DX ;|alla prima lettura delle variabili di sistema POP BX ;|da 0000:046C a 0000:046F, AGGIORNATA con il POP AX ;/numero corrispondente al RITARDO desiderato PUSH AX ;\In uscita AX,BX conservano il numero di TICKs PUSH BX ;|relativi alla prima lettura delle variabili di MOV AH,00H ;|sistema da 0000:046C a 0000:046F; e in CX,DX INT 1AH ;|quello del tempo reale corrente; Esempio: POP BX ;| AX,BX = 0012 3AF0 = tempo da raggiungere POP AX ;/ CX,DX = 0011 FF3A = tempo reale corrente ;\/--------------------------------------------\ ;|| Controlla se il valore corrente dei TICKs | ;|| Š quello previsto dal desiderato RITARDO | ;|\--------------------------------------------/ CMP AX,CX ;|Se la parte alta dei 2 numeri Š la stessa, JZ ChkTim2 ;|cioŠ se AX=CX, si controlla la parte bassa (a ;|livello ChkTim2); altrimenti AX Š quasi sempre ;|maggiore di 1 rispetto a CX; in questo caso si ;|aspetta che le 2 parti alte si equivalgano ;/(a livello ChkTim1, pi— sotto...) PUSH AX ;\Solo se nel frattempo Š passata la mezzanotte SUB AX,CX ;|la differenza tra AX e CX Š diversa da 1; in CMP AX,18H ;|questo caso infatti vale 18H,per cui la proce- POP AX ;|dura va adattata alla nuova situazione (nella JNZ ChkTim3 ;/parte di codice ASM qui sotto...) PUSH BX ;\Se nel frattempo Š passata la mezzanotte la SUB BX,00B0H ;|differenza tra AX e CX Š pari a 18H; in questo CMP BX,DX ;|caso CX,DX Š passato da 001800AFH a 00000000H, POP BX ;|per cui anche la parte bassa va adattata alla JG ChkTim3 ;|nuova situazione, visto che una parte del MOV AH,01H ;|conto (=B0H) Š gi… stata consumata.... JMP SHORT ChkTim4 ;/ ChkTim2:CMP BX,DX ;\Se la parte alta dei 2 numeri Š la stessa e la JG ChkTim3 ;|parte bassa del tempo corrente Š minore, BX>DX ;/continua l'attesa MOV AH,01H ; Il ritardo Š stato consumato JMP SHORT ChkTim4 ChkTim3:MOV AH,00H ;Il ritardo non Š stato consumato ChkTim4:POP DX ;\Recupera dallo stack il numero CX,DX dei TICKs POP CX ;|corrispondente al tempo da raggiungere al RET ;/termine della prossima lettura del tempo ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Byt2Com | ;| DESCRIZIONE : Provvede alla conversione dei 2 nibble di un numero binario| ;| a 8 bit nei 2 caratteri ASCII corrispondenti, spedendoli poi| ;| direttamente sulla linea seriale; il codice da convertire Š| ;| fornito, in ingresso, in AL ed Š ancora disponibile in AL in| ;| uscita; Š estratta dalla "Byt2Asc" della libreria GIOBE.ASM.| ;\---------------------------------------------------------------------------/ Byt2Com:PUSH AX PUSH AX ;AL=xyH SHR AL,1 SHR AL,1 SHR AL,1 SHR AL,1 ;AL=0xH CMP AL,0AH ;Salta a NUM se AL=0xH < 0AH, cioŠ se il nibble JC Byt2C1 ;appena isolato Š un numero (da 0 a 9) ADD AL,07H ;Altrimenti si tratta di una lettera (da A a F) Byt2C1: ADD AL,30H CALL TxD_1 ;AL= POP AX ;AL=xyH AND AL,0FH ;AL=0yH CMP AL,0AH ;Salta a NUM1 se AL=0yH <0AH, cioŠ se il nibble JC Byt2C2 ;appena isolato Š un numero (da 0 a 9) ADD AL,07H ;Altrimenti si tratta di una lettera (da A a F) Byt2C2: ADD AL,30H CALL TxD_1 ;AL= POP AX RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA :INIserial | ;| DESCRIZIONE:Seleziona automaticamente la porta seriale COM predisposta dal| ;| valore della costante "COM_num" (per default EQU 01H= COM1), e| ;| se la porta seriale desiderata NON Š presente nel sistema,| ;| lascia in uscita in SI il valore 0000H; altrimenti lascia in| ;| SI l'indirizzo Base dell'UART sotto controllo ([port_8]= 03F8H| ;| o 02F8H o 03E8H o 02E8H) e rende facilmente reperibili TUTTI i| ;| Registri della serie virtualizzandoli con altrettante variabili| ;| /------*-----*-----*-----*-----*-----------------------------\| ;| |******| COM1| COM2| COM3| COM4|Descrizione || ;| *------*-----*-----*-----*-----*-----------------------------*| ;| |port_8|03F8H|02F8H|03E8H|02E8H|Scritt/Lett DATO -LSBdivisore|| ;| |port_9|03F9H|02F9H|03E9H|02E9H|Abilitaz Interruz-MSBdivisore|| ;| |port_A|03FAH|02FAH|03EAH|02EAH|Identif interruzioni || ;| |port_B|03FBH|02FBH|03EBH|02EBH|Registro controllo LINEA || ;| |port_C|03FCH|02FCH|03ECH|02ECH|Registro controllo MODEM || ;| |port_D|03FDH|02FDH|03EDH|02EDH|Registro stato LINEA || ;| |port_E|03FEH|02FEH|03EEH|02EEH|Registro stato del MODEM || ;| \------*-----*-----*-----*-----*-----------------------------/| ;| Inizializza inoltre: | ;| a) la velocit… di ricetrasmissione caricando il divisore a 16| ;| bit, predisposto dalla costante "Baude" (default EQU 000CH=| ;| 9600 baud) nei Registri [port_9]=MSB e [port_8]=LSBdivisore| ;| b) il valore dei parametri desiderati per il protocollo HW, in| ;| in accordo con le scelte suggerite dalla costante "Protoc"| ;| (default EQU 07H= 8 bit di dato e 2 di stop,nessuna parit…)| ;| c) il valore del Registro di abilitazione delle Interruzioni,| ;| [port_9] Š fissato a 00H: in questo modo nessun evento se-| ;| riale produrr… richiesta d'interruzione sulla linea dedica-| ;| ta IRQ3 o IRQ4 e non sar… necessario predisporre la relati-| ;| va procedura di servizio (rispettivamente INT0BH o INT0CH) | ;| d) il valore del Registro di controllo MODEM, [port_C], Š fis-| ;| sato a 03H: in questo modo sono attivi i segnali di tipici| ;| del MODEM, "Data Terminal Ready" e "Request To Send" | ;\---------------------------------------------------------------------------/ depPOR DB COM_num ; Numero della porta COM da controllare (1, 2, 3 o 4) depVEL DW Baude ; Valore n del divisore di Baud RATE necessario per ; stabilire la velocitā di Ricetrasmissione = 115200Hz/n depTIP DB Protoc ; Byte ricostruito in accordo con il desiderato ; numero di bit di dato, di stop e di (eventuale) parit… ;/-----*-----*-----*-----*------------------------------\ ;| COM1| COM2| COM3| COM4|Descrizione | ;*-----*-----*-----*-----*------------------------------* port_8 DW ? ;|03F8H|02F8H|03E8H|02E8H|Scritt/Lett DATO - LSBdivisore| port_9 DW ? ;|03F9H|02F9H|03E9H|02E9H|Abilitaz Interruz- MSBdivisore| port_A DW ? ;|03FAH|02FAH|03EAH|02EAH|Identif interruzioni | port_B DW ? ;|03FBH|02FBH|03EBH|02EBH|Registro controllo LINEA | port_C DW ? ;|03FCH|02FCH|03ECH|02ECH|Registro controllo MODEM | port_D DW ? ;|03FDH|02FDH|03EDH|02EDH|Registro stato LINEA | port_E DW ? ;|03FEH|02FEH|03EEH|02EEH|Registro stato del MODEM | ;\-----*-----*-----*-----*------------------------------/ ;---------------------------------------------------------------------------- ;/------[PRIMA FASE]---------------------------------------------------------\ ;| Inizializzazione dei REGISTRI della PORTA SERIALE | ;\---------------------------------------------------------------------------/ INIserial: PUSH ES ;\Assume in AX l'indirizzo BASE della porta MOV AX,0000H ;|seriale suggerita dalla variabile [depPOR], MOV ES,AX ;|a sua volta predisposta con il valore della MOV SI,0400H ;|costante "COM_num" (per default EQU 01H=COM1), MOV AL,CS:[depPOR];|estraendolo dalle locazioni dell'Area di comu- DEC AL ;|nicazione BIOS: le prime sue 8 locazioni sono SHL AL,1 ;|predisposte in fase di bootstrap ai valori: MOV AH,00H ;| /-------------------------------------------\ ADD SI,AX ;| |0000:0400H - Porta Seriale 1 (COM1) 03F8H | MOV AL,ES:[SI] ;| |0000:0402H - Porta Seriale 2 (COM2) 02F8H | INC SI ;| |0000:0404H - Porta Seriale 3 (COM3) 03E8H | MOV AH,ES:[SI] ;| |0000:0406H - Porta Seriale 4 (COM4) 02E8H | POP ES ;| \-------------------------------------------/ ;/se tutte i possibili UART sono presenti... CMP AX,0000H ;\ JNZ INIse_ ;|Se AX contiene 0000 la porta desiderata NON Š MOV SI,AX ;|installata: si torna immediatamente con SI=0 RET ;/ ;--------------------------------------------------------------------- INIse_: MOV CS:[port_8],AX;\ INC AX ;|Altrimenti inizializza le 7 variabili che MOV CS:[port_9],AX;|saranno utilizzate per individuare i Registri INC AX ;|della porta seriale desiderata; per la COM1: MOV CS:[port_A],AX;| INC AX ;|[port_8]=03F8H Registro Scrittura/Lettura DATO MOV CS:[port_B],AX;|[port_9]=03F9H Abilitazione interruzioni INC AX ;|[port_A]=03FAH Identificatore interruzioni MOV CS:[port_C],AX;|[port_B]=03FBH Registro di controllo LINEA INC AX ;|[port_C]=03FCH Registro di controllo MODEM MOV CS:[port_D],AX;|[port_D]=03FDH Registro di stato linea seriale INC AX ;|[port_E]=03FEH Registro stato MODEM MOV CS:[port_E],AX;/ ;/------[SECONDA FASE]-------------------------------------------------------\ ;| Inizializzazione della VELOCITA` di RICETRASMISSIONE SERIALE | ;\---------------------------------------------------------------------------/ ;\/-[port_B]-----------------------------------\ ;|| Registro di controllo della LINEA | ;|\--------------------------------------------/ ;|Inizia la programmazione dell'UART: per poter MOV DX,CS:[port_B];|accedere ai registri divisori di BaudRate Š MOV AL,80H ;|necessario anzitutto porre a "1" il bit7 OUT DX,AL ;|di [port_B]: con questa predisposizione ;|possono ora essere introdotti i corretti ;|valori per il divisore di baud rate: ;| "Baud Rate-lo", su [port_8] e ;/ "Baud Rate-hi", su [port_9] ;\/--------------------------------------------\ ;|| AX= fattore di divisione [115200/costante] | ;|\--------------------------------------------/ ;|Prepara in AX (AL=LSB, AH=MSD) la costante di ;|divisione necessaria per dividere il clock ad ;|alta frequenza (115200Hz) fornito all'UART (a ;|partire dalla frequenza di norma applicata, di ;|1.8432 MHz, LOCALMENTE predivisa per 16) al ;|fine di garantire la desiderata velocit… di ;|RICE-TRASMISSIONE (es: 9600 bps = 9600 baud) ;|/--------------------------------------------\ ;||Il valore del divisore a 16 bit Š suggerito| MOV AX,CS:[DepVEL];||dalla variabile [DepVel], a sua volta predi-| ;||sposta con il valore della costante "Baude"| ;||(default EQU 000CH=9600 baud) | ;|\--------------------------------------------/ ;|Si ricorda che l'UART contiene un generatore ;|programmabile di BAUD RATE in grado di tratta- ;|re qualunque frequenza da 0 a 3.1 MHz; normal- ;|mente la frequenza applicata Š di 1.8432 MHz ;|o, talvolta, quella due terzi pi— grande, ;|3.072 MHz), su cui viene operata immediatamen- ;|te una predivisione per 16, cosicch‚ la co- ;|stante descritta andr… a dividere effettiva- ;|mente la frequenza di 115200 Hz, generando la ;/desiderata frequenza di ricetrasmissione ;\/-[port_8]-----------------------------------\ ;|| Registro divisore Baud RATE (parte bassa) | MOV DX,CS:[port_8];|\--------------------------------------------/ OUT DX,AL ;|Se su [port_B] il bit7="1" la porta [port_8] ;/serve come Registro divisore Baud RATE (low) ;\/-[port_9]-----------------------------------\ MOV AL,AH ;|| Registro divisore Baud RATE (parte alta) | MOV DX,CS:[port_9];|\--------------------------------------------/ OUT DX,AL ;|Se su [port_B] il bit7="1" la porta [port_9] ;/serve come Registro divisore Baud RATE (high) ;/-[NB]----------------------------------------\ ;|se invece su [port_B] il bit7="0" la prima| ;|porta [port_8] serve come BUFFER di trasmis-| ;|sione (in LETTURA) o di ricezione (in SCRIT-| ;|TURA) e la seconda porta [port_9] serve come| ;|Registro di Abilitazione Interruzioni | ;\---------------------------------------------/ ;/------[TERZA FASE]---------------------------------------------------------\ ;| Inizializzazione delle CARATTERISTICHE di RICETRASMISSIONE SERIALE | ;\---------------------------------------------------------------------------/ ;\/-[port_B]-----------------------------------\ ;|| Registro di controllo della LINEA | ;|\--------------------------------------------/ ;|Viene ricostruito il byte da spedire alla por- ;|ta [port_B], che rappresenta le caratteristi- ;|che desiderate, cioŠ il Numero di bit per DATO ;|il Numero di bit di STOP e la presenza del Bit ;|di Parit…; poich‚ la programmazione della ;|velocit… di RICETRASMISSIONE Š gi… stata ;|eseguita Š necessario anche riporre a "0" il ;|bit7 di tale byte;di norma si pone a "0" anche ;|il bit6 (se ="1", impostazione di break, il ;|dato di output seriale Š forzato alla condi- ;|zione di SPACE (0 logico) indipendentemente da ;|ci• che l'UART intende trasmettere) e il bit5 ;|(se = "1" il bit di parit… viene forzato ad un ;|valore costante, in funzione della programma- ;|zione dei bit4/bit3; altrimenti il bit di ;|parit… conserva il suo significato) ;|/--------------------------------------------\ ;||La combinazione di bit corrispondente alle| MOV DX,CS:[port_B];||nostre esigenze Š suggerita dalla variabile| MOV AL,CS:[DepTIP];||[DepTip], a sua volta predisposta con il va-| OUT DX,AL ;||lore della costante "Protoc" (default EQU 07| ;||= 8 bit di dato e 2 di stop, nessuna parit…)| ;|\--------------------------------------------/ ;| /-7-*-6-*-5-*-4-*-3-*-2-*-1-*-0-\ ;|[port_B]| 0 | 0 | 0 | x | 0 | 1 | 1 | 1 | 07H ;| \---*---*---*---*---*---*---*---/ ;|Protocollo/ | | | | | \---*-8 dato ;|Break disab.--/ | | | \-----2 bit stop ;/Parit… disab.-----/ \---*-----nessuna parit… ;/------[QUARTA FASE]--------------------------------------------------------\ ;| Inizializzazione del REGISTRO di CONTROLLO del MODEM | ;\---------------------------------------------------------------------------/ ;\/-[port_C]-----------------------------------\ ;|| Registro di controllo del MODEM | ;|\--------------------------------------------/ ;|Normalmente il Registro di MODEM va inizializ- ;|zato a 03H e poi non si tocca pi—; tale predi- ;|sposizione bit0 e bit1 a "1") attiva i segnali ;|di controllo tipici del MODEM, "Data Terminal ;|Ready" e "Request To Send": in questo modo il ;|il computer DTE (UART) avvisa il modem DCE che ;|Š regolarmente collegato alla linea di comuni- ;|cazione, che Š pronto a trasmettere o ricevere ;|dati (DTR) e che dispone di dati ed č pronto a ;|trasmetterglieli (RTS): il bit2 OUT1 di questo ;|registro (uscita ausiliaria destinata utente) ;|non Š usato, mentre il bit3 (OUT2=altra uscita ;|ausiliaria destinata utente) DEVE essere posta MOV DX,CS:[port_C];|a "1" solo se si desidera consentire al- MOV AL,03H ;|l'INTERRUZIONE generata dall'UART di raggiun- OUT DX,AL ;|gere il bus del sistema (per essere eventual- ;|mente controllata dal gestore delle interru- ;|zioni, 8259); infine il bit4 deve essere a 0, ;|in condizioni normali; se forzato a 1 la porta ;|seriale (UART) si pone in uno stato molto par- ;|ticolare, LookBack Mode, straordinariamente ;|utile per collaudare i nostri programmi ma del ;|tutto inopportuno in regolare ricetrasmissione ;|i bit5, bit6 e bit7 sono sempre a 0 (non usati ;|da nessuna versione di UART) ;| /-7-*-6-*-5-*-4-*-3-*-2-*-1-*-0-\ ;|[port_C]| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 03H ;| \---*---*---*---*---*---*---*---/ ;|non usati-*---*---/ | | | | \DTR on ;|no LookBack Mode------/ | | \----RTS on ;/INT disabilitate----OUT2--/ \OUT1-non usata ;/------[QUINTA FASE]--------------------------------------------------------\ ;| Inizializzazione di ABILITAZIONE delle INTERRUZIONI SERIALI | ;\---------------------------------------------------------------------------/ ;\/-[port_9]-----------------------------------\ ;|| Registro di abilitazione delle INTERRUZIONI| ;|\--------------------------------------------/ ;|Vengono specificati solo gli eventi che si ;|desidera utilizzare per innescare il meccani- ;|smo dell'interruzione, in grado di attivare la ;|linea IRQ3/IRQ4 dedicata all'UART coinvolto, ;|avvisando cos il controllore delle interru- ;|zioni 8259 che far… partire la relativa proce- ;|dura di servizio BIOS, INT 0BH o INT 0CH; se ;|NON SI DESIDERA far riferimento alle tecniche ;|d'interruzione tutti i bit di questo registro ;|sono lasciati a 0; altrimenti i bit significa- MOV DX,CS:[port_9];|tivi sono: bit0="1" abilita interrupt quando MOV AL,00H ;|c'Š un DATO PRONTO in RICEZIONE; bit1="1" abi- OUT DX,AL ;|lita interrupt quando il registro di TRASMIS- RET ;|SIONE Š VUOTO (DATO TRASMESSO); il bit2="1" ;|abilita interrupt se il registro di stato non ;|Š pi— a 00H (ERRORI in RICEZIONE o RICEVUTA ;|condizione di BREAK); il bit3="1" abilita un ;|interrupt per cambiamento dello stato del ;|MODEM. Se su [port_B] il bit7="0" la porta ;|[port_9] serve come Registro di Abilitazione ;|delle Interruzioni: con i bit7öbit4 tutti a ;|"0" tutte le interruzioni da parte della ;|SERIALE sono disabilitate ;| /-7-*-6-*-5-*-4-*-3-*-2-*-1-*-0-\ ;|[port_9]| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00H ;| \---*---*---*---*-no*-no*-no*-no/ ;|non usati-*---*---*---/ | | | | RxD ;|Variazione Stato Linea----/ | | \-pieno ;/Variazione Registro Modem-----/ \-TxD vuoto ;/---------------------------------------------------------------------------\ ;| /--------------------------------------------\| ;| PROCEDURA : TxD_1 | ************* Versione 01 ************* || ;| \--------------------------------------------/| ;| DESCRIZIONE : Trasmette sulla PORTA SERIALE il byte fornito in AL, aspet-| ;| tando le condizioni ottimali per consentire la TRASMISSIONE| ;| del dato desiderato (cioŠ che il "Registro di memorizzazione| ;| del trasmettitore" sia VUOTO) | ;\---------------------------------------------------------------------------/ TxD_1: MOV BL,AL ; Salva il carattere da trasmettere in BL ;\/-[port_D]-----------------------------------\ ;|| Registro di stato della LINEA SERIALE | ;|\--------------------------------------------/ ;| /-7-*-6-*-5-*-4-*-3-*-2-*-1-*-0-\ ;|[port_D]| x | x | 1 | x | x | x | x | x | 20H ;| \---*---*---*---*---*---*---*---/ ;| \-[port_8] o FIFO Tx vuoto MOV DX,CS:[port_D];|Controlla lo stato della linea seriale per TxD101: IN AL, DX ;|vedere se la porta seriale Š pronta per la TEST AL,20H ;|TRASMISIONE di un NUOVO DATO (in questo caso JZ TxD101 ;|il bit5 del "registro di stato" Š a "1", ad ;|indicare che il "Registro di memorizzazione ;|del trasmettitore" Š VUOTO; solo ora il dato ;|successivo da trasmettere pu• essere collocato ;|in uscita (cioŠ proprio in quel registro) il ;|che mette di nuovo automaticamente a "0" il ;|bit5 del registro di stato finch‚ il "registro ;|di memorizzazione del trasmettitore" Š pronto ;/ad accettare un altro carattere ;\/-[port_8]-----------------------------------\ ;|| Registro BUFFER TRASMISSIONE (in SCRITTURA)| MOV DX,CS:[port_8];|\--------------------------------------------/ MOV AL,BL ;|In trasmissione la porta [port_8] costituisce OUT DX,AL ;|il registro BUFFER di TRASMISSIONE: il codice ;|attualmente presente il BL viene spedito sulla ;/porta seriale RET ;/---------------------------------------------------------------------------\ ;| /--------------------------------------------\| ;| PROCEDURA : RxD_3 | ************* Versione 03 ************* || ;| \--------------------------------------------/| ;| DESCRIZIONE : Riceve un byte dalla PORTA SERIALE lasciandolo in AL, aspet-| ;| tando le condizioni ottimali per consentire la ricezione del| ;| dato desiderato (cioŠ che la linea sia libera); se la proce-| ;| dura Š terminata dopo la ricezione di un dato lascia AH=00H;| ;| altrimenti lascia AH=01H. | ;|/-----------\ | ;|| | La scelta di affidare ad AH l'attendibilit… del dato ricevuto| ;|| | consente a questa procedura di tornare comunque al programma| ;|| NB: | chiamante, permetendogli la discrezionalit… di rientrare in| ;|| | attesa di dati dalla seriale o di porre termine a se stesso,| ;|| | ma COMPROMETTE l'affidabilit… della Ricezione. | ;|\-----------/ | ;\---------------------------------------------------------------------------/ RxD_3: MOV DX,CS:[port_D];\/-[port_D]-----------------------------------\ ;|| Registro di stato della LINEA SERIALE | ;|\--------------------------------------------/ ;|Controlla lo stato della linea seriale per ve- IN AL,DX ;|dere se c'Š un DATO RICEVUTO PRONTO (bit0="1") TEST AL,01H ;| /-7-*-6-*-5-*-4-*-3-*-2-*-1-*-0-\ JNZ RxD301 ;|[port_D]| x | x | 1 | x | x | x | x | x | 01H ;| \---*---*---*---*---*---*---*---/ ;/ Dato ricevuto pronto-----------------/ MOV AH,01H ;\Se invece non Š stato rilevato alcun Nuovo RET ;/Dato Ricevuto: si rimane torna con AH = 01 ;\/-[port_8]-----------------------------------\ RxD301: MOV DX,CS:[port_8];|| Registro BUFFER di RICEZIONE (in LETTURA) | IN AL,DX ;|\--------------------------------------------/ ;/Legge in AL il DATO PRONTO in RICEZIONE MOV AH,00H ;\Se il Dato in AL Š utilizzabile lascia AH=00H RET ;/ ;/---------------------------------------------------------------------------\ ;| PROCEDURA : CampiD | ;| DESCRIZIONE : Predispone i 2 riquadri di Ricetrasmissione DATI | ;\---------------------------------------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva CampiD: M_corn 11 , 80 , 1 , 0 , 0AH , 00 , 00 ,2000H M_Chr '[', 1, 7,0AH ;\ M_msgN Centro1 ;| Primo campo: MOV AL,']' ;| [Caratteri Ascii TRASMESSI] CALL BIOchr1 ;/ CMP Byte Ptr CS:[PrntMod],00;\Mostra solo il valore ascii (default) del dato JZ Campi1 ;|Trasmesso CALL TxDbyte ;/ Campi1: M_COLOR 70H ;\ MOV DH,12 ;| CALL BARRA ;/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 11 , 80 , 13 , 0 , 0AH , 00 , 00 ,2000H M_Chr '[',13, 7,0AH ;\ M_msgN Centro2 ;| Secondo campo: MOV AL,']' ;| [Caratteri Ascii RICEVUTI] CALL BIOchr1 ;/ CMP Byte Ptr CS:[PrntMod],00;\Mostra solo il valore ascii (default) del dato JZ Campi2 ;|Ricevuto CALL RxDbyte ;/ Campi2: RET ;---------------------------------------------------------------------- TxDbyte:MOV CX,78 ;\ M_CURSOR 7,1 ;| MOV AL,'-' ;| Primo campo: TxDby1: CALL BIOchr1 ;| linea intermedia LOOP TxDby1 ;| M_Chr '*', 7, 0,0AH ;| M_Chr '*', 7,79,0AH ;/ M_Chr '[', 7, 7,0AH ;\ M_msgN Centro3 ;| Primo campo: MOV AL,']' ;| [Bytes TRASMESSI] CALL BIOchr1 ;/ RET ;---------------------------------------------------------------------- RxDbyte:MOV CX,78 ;\ M_CURSOR 19,1 ;| MOV AL,'-' ;| Secondo campo: RxDby3: CALL BIOchr1 ;| linea intermedia LOOP RxDby3 ;| M_Chr '*',19, 0,0AH ;| M_Chr '*',19,79,0AH ;/ M_Chr '[',19, 7,0AH ;\ M_msgN Centro4 ;| Secondo campo: MOV AL,']' ;| [Bytes RICEVUTI] CALL BIOchr1 ;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Help | ;| DESCRIZIONE : Stampa una Descrizione dettagliata del COMANDO corrente. | ;\---------------------------------------------------------------------------/ Help: PUSH SI ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 23 , 30 , 1 , 50 , 0EH , 00 , 00 ,5000H POP SI M_COLOR 70H Help0: MOV CX,21 MOV DH,02 MOV DL,51 Help1: M_CURSOR DH,DL CALL BIOSmsg INC SI INC DH LOOP Help1 RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : CampiC | ;| DESCRIZIONE : Predispone i 2 riquadri di Ricetrasmissione COMANDI | ;\---------------------------------------------------------------------------/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva CampiC: M_corn 11 , 50 , 1 , 0 , 0EH , 00 , 00 ,4000H M_Chr '[', 1, 7,0EH ;\ M_msgN Centro5 ;| Primo campo: MOV AL,']' ;| [Comandi TRASMESSI] CALL BIOchr1 ;/ MOV CX,48 ;\ M_CURSOR 7,1 ;| MOV AL,'-' ;| Primo campo: Campi0: CALL BIOchr1 ;| linea intermedia LOOP Campi0 ;| M_Chr '*', 7, 0,0EH ;| M_Chr '*', 7,49,0EH ;/ M_Chr '[', 7, 7,0EH ;\ M_msgN Centro3 ;| Primo campo: MOV AL,']' ;| [Bytes TRASMESSI] CALL BIOchr1 ;/ ;---------------------------------------------------------------------- M_COLOR 0BH ;\ MOV DH,12 ;| CALL BARRA ;|Barra centrale per messaggi interattivi M_Chr '>',12,0,08EH ;| M_Chr '>',12,1,08EH ;| M_Chr '<',12,49,08EH ;| M_Chr '<',12,48,08EH ;/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 11 , 50 , 13 , 0 , 0EH , 00 , 00 ,4000H M_Chr '[',13, 7,0EH ;\ M_msgN Centro6 ;| Secondo campo: MOV AL,']' ;| [Ascii RICEVUTI] CALL BIOchr1 ;/ MOV CX,48 ;\ M_CURSOR 19,1 ;| MOV AL,'-' ;| Secondo campo: Campi3: CALL BIOchr1 ;| linea intermedia LOOP Campi3 ;| M_Chr '*',19, 0,0EH ;| M_Chr '*',19,49,0EH ;/ M_Chr '[',19, 7,0EH ;\ M_msgN Centro7 ;| Secondo campo: MOV AL,']' ;| [Bytes RICEVUTI] CALL BIOchr1 ;/ ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 23 , 30 , 1 , 50 , 0EH , 01 , 00 ,4000H ; /----------------------------\ ; |#A ClearScreen Classico | ; |#B DeskTop Classico | ; |#C Fa sparire il cursore | ; |#D Fa tornare il cursore | ; |#E Cornice di primo tipo | ; |#F Cornice di secondo tipo | ; |#G Cornice di terzo tipo | ; |#H Aspetta Pressione Tasto | ; |#I Fine Sequenza COMANDI | LEA SI,Cmd09 ; |#Jnn Ritardo programmabile | M_COLOR 1FH ; |#Krrcc Fissa riga, colonna | CALL Help0 ; |#Lpps Colore testo,sfondo ˙| RET ; |#Mn Intestazione tipo n | ; |#Nn Menu tipo n | ; |#Oxy Out Dato 8bit su LPT1 | ; |#Pxy Visualizza il Byte xyHH| ; |#Qxywz Visualizza Word xywzH| ; |#Raallrrcctopps CreaCornice | ; |#Sa..a Stampa stringa ascii | ; |#Tnn Sequenza di COMANDI | ; |#Uaallrrcc RecuperaCornice | ; \----------------------------/ ;/---------------------------------------------------------------------------\ ;| PROCEDURA : StampaRxD | ;| DESCRIZIONE : Stampa i dati ricevuti dalla porta SERIALE, organizzandoli | ;| in una sola area Caratteri Ascii (default [PrntMod]=00 su 9| ;| righe [RigRxDa] da 14 a 22) o in due aree ridotte, una da 5| ;| righe da 14 a 18 per i caratteri Ascii e una da 3 da 20 a 22| ;| per il corrispondente valore esadecimale (bytes); in ogni| ;| caso la colonna di stampa [ColRxDa] pu• variare da 1 a 79. | ;| Anche il colore [AtrRxDa]/[AtrRxDb] Š gestito dinamicamente.| ;| La gestione del campo Ascii Š operata con scolling del testo| ;| verso l'alto, mentre quella del campo Bytes Š gestita con| ;| sovrapposizione delle informazioni con colori diversi. | ;| In modo COMANDI ([PrntMod]=02) i dati ricevuti dalla porta| ;| SERIALE sono organizzati nelle due aree ridotte da 5 e da 3| ;| righe, come nel modo NORMALE, ma la colonna di stampa pu•| ;| variare solo fino a 49. | ;\---------------------------------------------------------------------------/ StampaRxD: PUSH CX PUSH BX PUSH AX ;--------------------------------------------------------------------- PUSH AX ;\ M_msgC BytTxRx,13,40,0AH;| MOV AX,CS:[NumRxD];| CALL Wor2Dec ;|Stampa e mette a video il numero dei Bytes INC AX ;|ricevuti MOV CS:[NumRxD],AX;| CALL STAsp ;| MOV AL,']' ;| CALL BIOchr1 ;| POP AX ;/ ;---------------------;--[Gestione della Stampa dei Caratteri Ascii]-- MOV BH,AL ; Salva il valore del dato ricevuto corrente MOV DH,CS:[RigRxDa];\Assume la posizione di stampa corrente MOV DL,CS:[ColRxDa];/ MOV CL,CS:[AtrRxDa];\Assume il colore con cui stampare il dato M_COLOR CL ;/ricevuto corrente ;---------------------;--[tasto ]------------------------------ CMP AL,Invio ;\Controlla se il dato ricevuto corrente Š Invio JZ StaRx2 ;/e, in questo caso, evita la stampa a video ;---------------------;--[tasti alfanumerici]------------------------- CALL SET_cur ; Fissa il cursore nella nuova posizione CALL BIOchr1 ;\Mette a video il carattere Ascii del dato ;/ricevuto corrente INC DL MOV BL,49 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],02;|zazione dei dati trasmessi; nella visualizza- JZ StaRx1 ;|zione NORMALE il campo Š gestito fino alla ADD BL,30 ;/colonna 79, mentre nel modo COMANDI fino a 49 StaRx1: CMP DL,BL ;\Controllo della Colonna corrente: se la stampa JNZ StaRx5 ;|Š ancora all'interno della cornice, sulla riga ;/corrente, tutto va bene StaRx2: MOV DL,1 ;\Riporta la colonna di stampa all'interno della INC DH ;/cornice, sulla riga successiva MOV CH,18 ; Riga finale per Ascii con doppia visualizzaz. MOV BL,19 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],00;|zazione dei dati ricevuti; per default, nel JNZ StaRx3 ;|caso di sola visualizzazione del valore ascii, ADD BL,4 ;|usa il campo pieno di 9 righe ADD CH,4 ;/Riga finale per visualizzazione SOLO Ascii ;\Controlla se la nuova riga Š essa pure ancora StaRx3: CMP DH,BL ;|all'interno della cornice; se Š cos tutto va JNZ StaRx5 ;/bene PUSH DX ;\ PUSH BX ;|Provvede a spostare verso l'alto di una riga i MOV DH,CH ;|caratteri contenuti nella finestra compresa MOV DL,48 ;|tra l'angolo alto a sinistra (indicato da CH CMP Byte Ptr CS:[PrntMod],02;|riga e CL colonna) e quello in basso a destra JZ StaRx4 ;|di righe su cui Š effettuato lo scrolling dal ADD DL,30 ;|basso verso l'alto all'interno della finestra StaRx4: MOV CH,14 ;|(indicato da DH riga e DL colonna); il numero MOV CL,1 ;|Š fornito in AL; l'eventuale testo allocato MOV BH,CS:[AtrRxDa];|nella riga superiore esce dalla parte alta MOV AL,1 ;|della finestra e viene ovviamente perduto MOV AH,06H ;|mentre in basso viene aggiunta una nuova riga INT 10H ;|vuota, cioŠ riempita di spazi con colore POP BX ;|indicato da BH. POP DX ;/ DEC DH ;\Le coordinate di stampa sono riportate MOV CL,CS:[AtrRxDa];|nell'angolo in basso a sinistra, sulla riga ;/appena aggiunta dalla procedura di scrolling ;-----[alternativa !! ]-----; versione con sovrapposizione dei caratteri, ; ; invece dello scrolling globale verso l'alto ; MOV DH,14 ;\La cornice Š stata riempita completamente con ; MOV CL,CS:[AtrRxDa];|i caratteri in partenza dalla Seriale; le ; DEC CL ;|coordinate di stampa sono riportate nell'ango- ; CMP CL,0DH ;|lo in alto a sinistra all'interno della corni- ; JNZ StaRx5 ;|ce e, per evidenziare la sovrascrittura, si ; MOV CL,0FH ;|cambia anche il colore di stampa, alternando ;/Bianco Brillante a Giallo,sempre in campo Nero StaRx5: MOV CS:[AtrRxDa],CL; MOV CS:[RigRxDa],DH;\Salva la nuova posizione del cursore MOV CS:[ColRxDa],DL;/ ;----------------------[Gestione della Stampa dei valori Esadecimali]- CMP Byte Ptr CS:[PrntMod],00;\Se il campo di visualizzazione dei dati JZ StaRx8 ;|ricevuti in forma esadecimale NON Š richiesto ;/ignora questa parte di codice MOV AL,BH ; Recupera il valore del dato ricevuto corrente MOV DH,CS:[RigRxDb];\ MOV DL,CS:[ColRxDb];|Fissa il cursore nella nuova posizione CALL SET_cur ;/ MOV CL,CS:[AtrRxDb];\Mette a video il valore esadecimale del M_COLOR CL ;|carattere corrente ricevuto con il colore di CALL Byt2Asc ;/stampa corrente ADD DL,3 MOV BL,49 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],02;|zazione dei dati trasmessi; nella visualizza- JZ StaRx6 ;|zione NORMALE il campo Š gestito fino alla ADD BL,30 ;/colonna 79, mentre nel modo COMANDI fino a 49 StaRx6: CMP DL,BL ;\Controllo della Colonna corrente: se la stampa JNZ StaRx7 ;|Š ancora all'interno della cornice, sulla riga ;/corrente, tutto va bene MOV DL,1 ;\Riporta la colonna di stampa all'interno della INC DH ;/cornice, sulla riga successiva CMP DH,23 ;\Controlla se la nuova riga Š essa pure ancora JNZ StaRx7 ;|all'interno della cornice; se Š cos tutto va ;/bene MOV DH,20 ;\La cornice Š stata riempita completamente con MOV CL,CS:[AtrRxDb];|i caratteri in partenza dalla Seriale; le DEC CL ;|coordinate di stampa sono riportate nell'ango- CMP CL,0DH ;|lo in alto a sinistra all'interno della corni- JNZ StaRx7 ;|ce e, per evidenziare la sovrascrittura, si MOV CL,0FH ;|cambia anche il colore di stampa, alternando StaRx7: MOV CS:[AtrRxDb],CL;/Bianco Brillante a Giallo,sempre in campo Nero MOV CS:[RigRxDb],DH;\Aggiorna il valore corrente del cursore bytes MOV CS:[ColRxDb],DL;/ StaRx8: MOV DH,CS:[RigRxDa];\ MOV DL,CS:[ColRxDa];|Fissa il cursore nella nuova posizione CALL SET_cur ;/ POP AX POP BX POP CX RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : StampaTxD | ;| DESCRIZIONE : Stampa i dati trasmessi dalla porta SERIALE, organizzandoli | ;| in una sola area Caratteri Ascii (default [PrntMod]=00 su 9| ;| righe [RigTxDa] da 2 a 11) o in due aree ridotte, una da 5| ;| righe da 2 a 6, per i caratteri Ascii e una da 3 da 8 a 10| ;| per il corrispondente valore esadecimale (bytes); in ogni| ;| caso la colonna di stampa [ColTxDa] pu• variare da 1 a 79. | ;| Anche il colore [AtrTxDa]/[AtrTxDb] Š gestito dinamicamente.| ;| La gestione del campo Ascii Š operata con scolling del testo| ;| verso l'alto, mentre quella del campo Bytes Š gestita con| ;| sovrapposizione delle informazioni con colori diversi. | ;| In modo COMANDI ([PrntMod]=02) i dati trasmessi dalla porta| ;| SERIALE sono organizzati nelle due aree ridotte da 5 e da 3| ;| righe, come nel modo NORMALE, ma la colonna di stampa pu•| ;| variare solo fino a 49. | ;\---------------------------------------------------------------------------/ StampaTxD: PUSH CX PUSH BX PUSH AX ;--------------------------------------------------------------------- CMP AL,Invio ;\Se il carattere da stampare Š 0DH (Invio) pu• JNZ StaTx0 ;|trattarsi del carattere usato impropriamente CMP Byte Ptr CS:[COMANDI],01;|in Modo COMANDI per mandare a capo le stringhe JZ StaTX__ ;|di COMANDO: in questo caso si evita di ;/incrementare il contatore dei bytes trasmessi ;--------------------------------------------------------------------- StaTx0: PUSH AX ;\ M_msgC BytTxRx,1,40,0AH;| MOV AX,CS:[NumTxD];| CALL Wor2Dec ;|Stampa e mette a video il numero dei Bytes INC AX ;|trasmessi MOV CS:[NumTxD],AX;| CALL STAsp ;| MOV AL,']' ;| CALL BIOchr1 ;| POP AX ;/ ;---------------------;--[Gestione della Stampa dei Caratteri Ascii]-- StaTX__:MOV BH,AL ; Salva il valore del dato trasmesso corrente MOV DH,CS:[RigTxDa];\Assume la posizione di stampa corrente MOV DL,CS:[ColTxDa];/ MOV CL,CS:[AtrTxDa];\Assume il colore con cui stampare il dato M_COLOR CL ;/trasmesso corrente ;---------------------;--[tasto ]------------------------------ CMP AL,Invio ;\Controlla se il dato trasmesso corrente Š Invio JZ StaTx2 ;/e, in questo caso, evita la stampa a video ;---------------------;--[tasti alfanumerici]------------------------- CALL SET_cur ; Fissa il cursore nella nuova posizione CALL BIOchr1 ;\Mette a video il carattere Ascii del dato ;/trasmesso corrente INC DL MOV BL,49 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],02;|zazione dei dati trasmessi; nella visualizza- JZ StaTx1 ;|zione NORMALE il campo Š gestito fino alla ADD BL,30 ;/colonna 79, mentre nel modo COMANDI fino a 49 StaTx1: CMP DL,BL ;\Controllo della Colonna corrente: se la stampa JNZ StaTx5 ;|Š ancora all'interno della cornice, sulla riga ;/corrente, tutto va bene StaTx2: MOV DL,1 ;\Riporta la colonna di stampa all'interno della INC DH ;/cornice, sulla riga successiva MOV CH,6 ; Riga finale per Ascii con doppia visualizzaz. MOV BL,7 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],00;|zazione dei dati trasmessi; per default, nel JNZ StaTx3 ;|caso di sola visualizzazione del valore ascii, ADD BL,4 ;|usa il campo pieno di 9 righe ADD CH,4 ;/Riga finale per visualizzazione SOLO Ascii ;\Controlla se la nuova riga Š essa pure ancora StaTx3: CMP DH,BL ;|all'interno della cornice; se Š cos tutto va JNZ StaTx5 ;/bene PUSH DX ;\ PUSH BX ;|Provvede a spostare verso l'alto di una riga i MOV DH,CH ;|caratteri contenuti nella finestra compresa MOV DL,48 ;|tra l'angolo alto a sinistra (indicato da CH CMP Byte Ptr CS:[PrntMod],02;|riga e CL colonna) e quello in basso a destra JZ StaTx4 ;|di righe su cui Š effettuato lo scrolling dal ADD DL,30 ;|basso verso l'alto all'interno della finestra StaTx4: MOV CH,2 ;|(indicato da DH riga e DL colonna); il numero MOV CL,1 ;|Š fornito in AL; l'eventuale testo allocato MOV BH,CS:[AtrTxDa];|nella riga superiore esce dalla parte alta MOV AL,1 ;|della finestra e viene ovviamente perduto MOV AH,06H ;|mentre in basso viene aggiunta una nuova riga INT 10H ;|vuota, cioŠ riempita di spazi con colore POP BX ;|indicato da BH. POP DX ;/ DEC DH ;\Le coordinate di stampa sono riportate MOV CL,CS:[AtrTxDa];|nell'angolo in basso a sinistra, sulla riga ;/appena aggiunta dalla procedura di scrolling ;-----[alternativa !! ]-----; versione con sovrapposizione dei caratteri, ; ; invece dello scrollong globale verso l'alto ; MOV DH,2 ;\La cornice Š stata riempita completamente con ; MOV CL,CS:[AtrTxDa];|i caratteri in partenza dalla Seriale; le ; DEC CL ;|coordinate di stampa sono riportate nell'ango- ; CMP CL,0DH ;|lo in alto a sinistra all'interno della corni- ; JNZ StaTx5 ;|ce e, per evidenziare la sovrascrittura, si ; MOV CL,0FH ;|cambia anche il colore di stampa, alternando ;/Bianco Brillante a Giallo,sempre in campo Nero StaTx5: MOV CS:[AtrTxDa],CL; Salva il colore corrente MOV CS:[ColTxDa],DL;\Salva la nuova posizione del cursore MOV CS:[RigTxDa],DH;/ ;----------------------[Gestione della Stampa dei valori Esadecimali]- CMP BH,Invio ;\Se il carattere da stampare Š 0DH (Invio) pu• JNZ StaTx_ ;|trattarsi del carattere usato impropriamente CMP Byte Ptr CS:[COMANDI],01;|in Modo COMANDI per mandare a capo le stringhe JZ StaTx8 ;/di COMANDO: in questo caso si evita la stampa ;--------------------------------------------------------------------- StaTx_: CMP Byte Ptr CS:[PrntMod],00;\Se il campo di visualizzazione dei dati JZ StaTx8 ;|trasmessi in forma esadecimale NON Š richiesto ;/ignora questa parte di codice MOV AL,BH ; Recupera il valore del dato trasmesso corrente MOV DH,CS:[RigTxDb];\ MOV DL,CS:[ColTxDb];|Fissa il cursore nella nuova posizione CALL SET_cur ;/ MOV CL,CS:[AtrTxDb];\Mette a video il valore esadecimale del M_COLOR CL ;|carattere corrente trasmesso con il colore di CALL Byt2Asc ;/stampa corrente ADD DL,3 MOV BL,49 ;\Aggiorna la dimensione del campo di visualiz- CMP Byte Ptr CS:[PrntMod],02;|zazione dei dati trasmessi; nella visualizza- JZ StaTx6 ;|zione NORMALE il campo Š gestito fino alla ADD BL,30 ;/colonna 79, mentre nel modo COMANDI fino a 49 StaTx6: CMP DL,BL ;\Controllo della Colonna corrente: se la stampa JNZ StaTx7 ;|Š ancora all'interno della cornice, sulla riga ;/corrente, tutto va bene MOV DL,1 ;\Riporta la colonna di stampa all'interno della INC DH ;/cornice, sulla riga successiva CMP DH,11 ;\Controlla se la nuova riga Š essa pure ancora JNZ StaTx7 ;|all'interno della cornice; se Š cos tutto va ;/bene MOV DH,8 ;\La cornice Š stata riempita completamente con MOV CL,CS:[AtrTxDb];|i caratteri in partenza dalla Seriale; le DEC CL ;|coordinate di stampa sono riportate nell'ango- CMP CL,0DH ;|lo in alto a sinistra all'interno della corni- JNZ StaTx7 ;|ce e, per evidenziare la sovrascrittura, si MOV CL,0FH ;|cambia anche il colore di stampa, alternando StaTx7: MOV CS:[AtrTxDb],CL;/Bianco Brillante a Giallo,sempre in campo Nero MOV CS:[RigTxDb],DH;\Aggiorna il valore corrente del cursore bytes MOV CS:[ColTxDb],DL;/ StaTx8: MOV DH,CS:[RigTxDa];\ MOV DL,CS:[ColTxDa];|Fissa il cursore nella nuova posizione CALL SET_cur ;/ POP AX POP BX POP CX RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Sincro | ;| DESCRIZIONE : Aspetta che il computer remoto sia collegato, continuando,| ;| nell'attesa, a trasmettere il carattere 0AAH, scelto per| ;| esprimere la propria disponibilit… a ricevere. | ;| Se il collegamento non si realizza Š possibile terminare la| ;| sessione di ricetrasmissione premendo il tasto "Q" [quit]| ;| per restituire il controllo al sistema operativo. | ;| In ogni caso viene fornita una adeguata segnalazione. | ;\---------------------------------------------------------------------------/ Sincro: MOV AL,0AAH ;\Spedisce al Computer remoto il codice AAH CALL TxD_1 ;|che esprime la sua disponibilit… a ricevere ;/dati e la sua presenza in linea CALL RxD_3 ;\Riceve un byte dalla PORTA SERIALE; se il ;/dato Š attendibile (AH=00H) Š lasciato in AL CMP AH,00H ;\ JNZ Sincr0 ;|Se la Ricezione Š andata a buon fine verifica CMP AL,0AAH ;|se il dato ricevuto non Š quello previsto per JNZ Sincro ;|il sincronismo di collegamento (AH=00,AL=AAH) JMP Sincr2 ;/ ;\In caso contrario controlla la pressione di Sincr0: MOV AH,01H ;|tasti SENZA FERMARSI per garantire l'uscita INT 16H ;|in caso di attesa troppo lunga; se NON Š JZ Sincro ;|stato premuto alcun tasto (ffZ="1") continua ;/la RiceTrasmissione automatica ;--------------------------------------------------------------------- CALL KEYwait ;\"Il Computer Remoto non risponde - AND AL,11011111B ;| RICEZIONE terminata" CMP AL,'Q' ;|Vuota il Buffer della Tastiera e controlla se JNZ Sincro ;|Š stato premuto il tasto "Q": se non Š cos la ;/Rice-Trasmissione automatica continua CALL DESK_A ;\Se Š stato premuto il tasto "Q" si torna al POP AX ;|DOS per salto (JMP) recuperando prima, con un JMP _OUT ;|artificio (POP AX) la posizione pendente nello ;/ stack (dovuta all'ingresso per CALL NEAR) ;--------------------------------------------------------------------- Sincr2: CALL DESK_B ;"Computer Remoto in linea - CALL CampiD ;Predispone i 2 riquadri di Ricetrasmissione RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : FraseTxR | ;| DESCRIZIONE : Gestisce la normale ricetrasmissione di stringhe Ascii| ;| ("Chat") mostrando a video le frasi in partenza e quelle in| ;| arrivo in campi diversi. | ;| In ogni momento, premendo il tasto F1, si pu• annullare la| ;| sessione di ricetrasmissione (magari per cambiare modalit…| ;| di visualizzazione dei dati ricetrasmessi) chiedendo una| ;| Risincronizzazione con il computer remoto. | ;| La procedura pu• passare in MODO COMANDI sia per pressione| ;| del tasto F2 sia automaticamente, se riceve il byte di| ;| protocollo FFH; in questo caso | ;| - il computer che controlla pu• trasmettere le stringhe| ;| "#....." previste dal protocollo, visualizzate nel campo| ;| trasmissione sia in forma ascii che in forma esadecimale,| ;| e pu• ricevere eventuali risposte dal computer sotto| ;| controllo, visualizzate nel campo di ricezione | ;| - il computer controllato pu• solo eseguire i COMANDI| ;| ricevuti (il suo monitor sar… sotto controllo del computer| ;| remoto) e pu• eventualmente spedire dati su richiesta del| ;| computer remoto controllante | ;| La procedura ha termine con la pressione di . | ;\---------------------------------------------------------------------------/ FraseTxR:MOV DH,CS:[RigTxDa];\ MOV DL,CS:[ColTxDa];|Assume la riga e la colonna corrente e vi CALL SET_cur ;|fissa il cursore CALL RIP_Cur ;/ ;\Controlla la pressione di tasti SENZA FERMARSI Frase01:MOV AH,01H ;|per garantire la trasmissione di dati; se NON INT 16H ;|Š stato premuto alcun tasto (ffZ="1") continua JZ Frase04 ;/verificando se Š pronto un dato in Ricezione CALL KeyWait ; Altrimenti analizza il codice tasto premuto CMP AL,ESC_ ;\ con si termina la sessione di Rice- JZ Frase06 ;/ trasmissione CMP AL,00H ;\Servizio tasti funzionali, F1, F2, ...; se non JNZ Frase03 ;|si tratta di essi si provvede alla stampa CMP AH,F1 ;\Servizio tasto : Risincronizzazione JNZ Frase02 ;/ ;----------------------;\Servizio di Risincronizzazione: se uno dei 2 ;|computer perde il collegamento Š possibile ;/ripristinarlo ;M_recup altezza,larghezza,riga,colonna,salva M_recup 7 , 69 , 8 , 5 ,2000H;|Recupera lo spazio M_recup 7 , 69 , 16 , 5 ,2000H;|occupato dai Campi DATI ;\Ripropone il messaggio "Sono in attesa di CALL DESK_9 ;|RICEZIONE dal Computer Remoto" e reinizializza ;/le variabili del Test Seriale ;\NB: recupera con POP AX la posizione pendente POP AX ;|nello stack dovuta alla chiamata CALL FraseTxR ;/per poter tornare con JMP invece che con "RET" JMP xxx01 ;\Rientra nel programma principale e rimane in ;/attesa del byte 0AAH di Risincronizzazione ;---------------------------------------------------------------------- Frase02:CMP AH,F2 ;\Servizio tasto : " Modo Comandi" JNZ Frase03 ;|Non Š necessario provvedere alla gestione dei ;/comandi da spedire al computer remoto CALL DESK_C ;\Mostra il riquadro del servizio interno per il CMP AL,'S' ;|Modo Comandi; se "No" rientra nella normale JNZ FraseTxR ;/ricetrasmissione di caratteri dalla linea CALL DESK_8 ;\Altrimenti reinizializza le variabili del Test ;/Seriale.... MOV AL,0FFH ;\...e trasmette il byte di protocollo FFH per CALL TxD_1 ;|obbligare il computer remoto a porsi in modo ;/subordinato, in attesa dei comandi da eseguire JMP Tx_Cmd ; Passa al servizio gestione COMANDI in uscita ;---------------------------------------------------------------------- ;\Trasmette ogni altro carattere digitato, Frase03:CALL TxD_1 ;|spedito sulla porta COM1 non appena si presen- ;/tano le condizioni ottimali per la trasmission CALL StampaTxD ; Servizio carattere trasmesso (stampa a video) Frase04:CALL RxD_3 ;\Riceve altri bytes dalla PORTA SERIALE; se il CMP AH,00H ;|dato Š attendibile (AH=00H) Š lasciato in AL, JNZ Frase01 ;/altrimenti rimane in attesa di trasmissione; ;---------------------------------------------------------------------- CMP AL,0AAH ;\Se il dato Š buono abortisce eventuali residui JZ Frase01 ;|di ricezione del sincronismo di collegamento ;/(AL=AAH) ;---------------------------------------------------------------------- CMP AL,0FFH ;\Se il dato ricevuto Š la parola del protocollo JNZ Frase05 ;|che abilita "controllo a COMANDI" da parte del ;|computer remoto (AL=FFH) avvisa della nuova JMP Rx_Cmd ;|situazione e provvede al servizio di gestione ;/e interpretazione dei COMANDI in arrivo ;---------------------------------------------------------------------- Frase05:CALL StampaRxD ; In ogni altro caso stampa il dato ricevuto JMP Frase01 Frase06:RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : ErrCOM e ErrPAR | ;| DESCRIZIONE : Mostra il messaggio che segnala COMANDO o PARAMETRO ignoto. | ;\---------------------------------------------------------------------------/ ErrCOM: LEA SI,Testo21 ; "COMANDO " JMP SHORT Err01 ;------------------------------------------------------------ ErrPAR: LEA SI,Testo22 ; "PARAMETRO " Err01: PUSH SI ;\ PUSH DS ;| MOV CX,160 ;| Salva il contenuto della riga 24 RAM_cur 24,0 ;| PUSH ES ;| POP DS ;| ES:[DI] << DS:[SI] MOV SI,DI ;| DI = DI +2 ADD DI,1000H ;| SI = SI +2 CLD ;| REP MOVSW ;/ M_COLOR 4FH ;\ MOV DH,24 ;| CALL BARRA ;| M_CURSOR 24,25 ;|Messaggio d'Errore POP DS ;| POP SI ;| CALL BIOSmsg ;/ M_msgN Testo23 ; "non riconosciuto" CALL Del_2000 ; PUSH DS ;\ MOV CX,160 ;| RAM_cur 24,0 ;| Recupera il contenuto della riga 24 PUSH ES ;| POP DS ;| MOV SI,DI ;| ES:[DI] << DS:[SI] ADD SI,1000H ;| DI = DI +2 CLD ;| SI = SI +2 REP MOVSW ;| POP DS ;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Cornice1 | ;| DESCRIZIONE : Stampa una cornice a tutto video, con accesso diretto alla| ;| Ramvideo, in risposta al COMANDO "#E" Cornice di primo tipo.| ;\---------------------------------------------------------------------------/ Cornice1:MOV AX,0B800H MOV ES,AX ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 25 , 80 , 0 , 0 , 04H , 00 , 00 ,1000H RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Cornice2 | ;| DESCRIZIONE : Stampa una cornice a tre settori, con i due esterni, in alto| ;| e in basso, adatti ad ospitare eventuale inestazione e Menu,| ;| e quello centrale a 19 righe, con accesso diretto a Ramvideo| ;| in risposta al COMANDO "#F" Cornice di secondo tipo. | ;\---------------------------------------------------------------------------/ Cornice2:MOV AX,0B800H MOV ES,AX ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 3 , 80 , 0 , 0 , 04H , 00 , 00 ,1000H M_corn 19 , 80 , 3 , 0 , 04H , 00 , 00 ,1000H M_corn 3 , 80 , 22 , 0 , 04H , 00 , 00 ,1000H RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Cornice3 | ;| DESCRIZIONE : Stampa una cornice a tre settori, con i due esterni, in alto| ;| e in basso, adatti ad ospitare eventuale inestazione e Menu,| ;| e quello centrale a 21 righe, con accesso diretto a Ramvideo| ;| in risposta al COMANDO "#G" Cornice di terzo tipo. | ;\---------------------------------------------------------------------------/ Cornice3:MOV AX,0B800H MOV ES,AX ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 3 , 80 , 0 , 0 , 04H , 00 , 00 ,1000H M_corn 21 , 80 , 2 , 0 , 04H , 00 , 00 ,1000H M_corn 3 , 80 , 22 , 0 , 04H , 00 , 00 ,1000H M_Chr '*', 2, 0,04H M_Chr '*', 2,79,04H M_Chr '*',22, 0,04H M_Chr '*',22,79,04H RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : DeskCom | ;| DESCRIZIONE : Stampa una cornice a tre settori, con i due esterni, in alto| ;| e in basso, adatti ad ospitare eventuale inestazione e Menu,| ;| e quello centrale a 21 righe, con accesso diretto a Ramvideo| ;| in risposta al COMANDO "#B" DeskTop Classico | ;\---------------------------------------------------------------------------/ DeskCom:MOV AX,0B800H MOV ES,AX CALL VIA_cur ;\/--------------------------------------------\ MOV AL,' ' ;||**** Piano di lavoro e Menu principale *****| M_COLOR 71H ;|\--------------------------------------------/ CALL Riempi ;/Predispone il Piano Lavoro su tavola zigrinata M_COLOR 70H ;\ MOV DH,0 ;| CALL BARRA ;|Barre per l'Intestazione e per il Menu MOV DH,24 ;| CALL BARRA ;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Intesta | ;| DESCRIZIONE : Consente di inserire uno dei 10 testi predisposti per | ;| intestare il piano di lavoro, adatti ad essere inseriti | ;| nella seconda riga dello schermo, con Cornici2 o Cornici2 | ;| Il numero del messaggio desiderato Š fornito in ingresso in | ;| forma ascii numerica (da "0" a "9") nella variabile DepoPAR | ;| caricata in fase di ricezione; il messaggio sar… stampato | ;| con colore BIANCO BRILLANTE su BLU con tecnica autocentran- | ;| te del testo e la sua dimensione deve rigorosamente essere | ;| al massimo di 78 caratteri | ;| In risposta al COMANDO "#Mn", Intestazione personalizzata | ;\---------------------------------------------------------------------------/ Intesta:MOV DH,1 ; Predipone la stampa sulla seconda riga M_CURSOR DH,1 ;\ COMANDO "#Nn", Menu personalizzato M_COLOR 1FH ;| \---tipo,n=0ö9 MOV AL,' ' ;|Prepara la barra di 78 caratteri adatta ad MOV CX,78 ;|essere ospitata dalle cornici di tipo Cornice2 Inte0: CALL BIOchr1 ;|o Cornice3 LOOP Inte0 ;/ LEA DI,TabINT ; Punta la Tabella degli indirizzi INTESTAZIONE Inte1: LEA SI,DepoPar ;\Recupera dalla Locazione Deposito il carattere MOV AL,CS:[SI] ;|numerico, da "0" a "9", digitato in fase di ;/acquisizione del Tipo del COMANDO SUB AL,'0' ;\Calcola dinamicamente l'indirizzo del SHL AL,1 ;|messaggio desiderato per intestazione e, con MOV AH,00H ;|l'aiuto della Tabella TabINT ne lascia ADD DI,AX ;|l'indirizzo in SI MOV SI,CS:[DI] ;/ PUSH SI ;\ MOV DL,00H ;| Inte2: MOV AL,CS:[SI] ;| INC DL ;| INC SI ;|Calcola automaticamente la colonna di stampa CMP AL,00H ;|ideale per centrare il messaggio JNE Inte2 ;| DEC DL ;| MOV AL,80 ;| SUB AL,DL ;| MOV DL,2 ;| DIV DL ;| POP SI ;/ M_CURSOR DH,AL ;\ CALL BIOSmsg ;|Stampa il messaggio centrato sulla riga DH RET ;/ ;/---------------------------------------------------------------------------\ ;| PROCEDURA : MenuCom | ;| DESCRIZIONE : Consente di inserire uno dei 10 testi predisposti per | ;| intestare il piano di lavoro, adatti ad essere inseriti | ;| nella penultima riga dello schermo, con Cornici2 o Cornici2 | ;| Il numero del messaggio desiderato Š fornito in ingresso in | ;| forma ascii numerica (da "0" a "9") nella variabile DepoPAR | ;| caricata in fase di ricezione; il messaggio sar… stampato | ;| con colore BIANCO BRILLANTE su BLU con tecnica autocentran- | ;| te del testo e la sua dimensione deve rigorosamente essere | ;| al massimo di 78 caratteri | ;| In risposta al COMANDO "#Nn", Menu personalizzato | ;\---------------------------------------------------------------------------/ MenuCom:MOV DH,23 ; Predipone la stampa sulla penultima riga M_CURSOR DH,1 ;\ COMANDO "#Nn", Menu personalizzato M_COLOR 1FH ;| \---tipo,n=0ö9 MOV AL,' ' ;|Prepara la barra di 78 caratteri adatta ad MOV CX,78 ;|essere ospitata dalle cornici di tipo Cornice2 Menu0: CALL BIOchr1 ;|o Cornice3 LOOP Menu0 ;/ LEA DI,TabMENU ; Punta la Tabella degli indirizzi di MENU ;\Recupera dalla Locazione Deposito il carattere ;|numerico, da "0" a "9", digitato in fase di ;|acquisizione del Tipo del COMANDO, calcola ;|dinamicamente l'indirizzo del messaggio per il JMP Inte1 ;|MENU e, con l'aiuto della Tabella TabMENU ne ;|estrae l'indirizzo con il quale provvede alla ;|messa a video sulla penultima riga e sulla ;/colonna di stampa ideale per centrarlo ;/---------------------------------------------------------------------------\ ;| PROCEDURA : GoToXY | ;| DESCRIZIONE : Fissa la posizione di stampa sul Monitor Remoto (GoToXY). | ;| In risposta al COMANDO "#Krrcc", Coordinate di stampa | ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per i 4 caratteri ascii GoToXY: LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV DH,CS:[DI] ;\ COMANDO "#Krrcc" Coordinate di stampa INC DI ;| ||\*--colonna cc=00ö79 SUB DH,'0' ;| \*-------riga rr=00ö24 MOV AL,10 ;|Recupera dalle prime 2 locazioni di deposito MUL DH ;|i caratteri ascii numerici che esprimono la MOV DH,CS:[DI] ;|desiderata coordinata di riga, tra "00" e "24" INC DI ;|e calcola il valore esadecimale corrispondente SUB DH,'0' ;|lasciato alla fine nel registro DH ADD DH,AL ;/ MOV DL,CS:[DI] ;\ INC DI ;| SUB DL,'0' ;|Recupera dalle seconde 2 locazioni di deposito MOV AL,10 ;|i caratteri ascii numerici che esprimono la MUL DL ;|desiderata coordinata di colonna, tra "00" e MOV DL,CS:[DI] ;|a "79" e calcola il valore esadecimale corri- SUB DL,'0' ;|spondente lasciato alla fine nel registro DL ADD DL,AL ;/ M_CURSOR DH,DL RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Colore | ;| DESCRIZIONE : Fissa il colore di ogni carattere posto a video sul Monitor | ;| Remoto da ora in poi. | ;| In risposta al COMANDO "#Lpps", Colore del testo e sfondo. | ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per i 3 caratteri ascii Colore: LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/del COLORE di PRIMO PIANO del COMANDO MOV DH,CS:[DI] ;\ COMANDO "#Lpps" Colore testo sfondo INC DI ;| ||\--sfondo s=0ö7 SUB DH,'0' ;| \*---primo piano pp=00ö15 MOV AL,10 ;|Recupera dalle prime 2 locazioni di deposito MUL DH ;|i caratteri ascii numerici che esprimono il MOV DH,CS:[DI] ;|colore di Primo Piano, tra "00" e "15" INC DI ;|e calcola il valore esadecimale corrispondente SUB DH,'0' ;|lasciato alla fine nel registro DH ADD DH,AL ;/ ;\Recupera dall'ultima locazione di deposito MOV AH,CS:[DI] ;|il carattere ascii numerico che esprime il SUB AH,'0' ;|colore di Sfondo, tra "0" e "7" e calcola il ;|valore esadecimale corrispondente lasciato ;/alla fine nel registro AH SHL AH,1 ;\ SHL AH,1 ;|Ricostruisce in AH il codice esadecimale del SHL AH,1 ;|Colore desiderato SHL AH,1 ;| OR AH,DH ;/ M_COLOR AH RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : OutLPT | ;| DESCRIZIONE : Spedisce un byte sul Registro Dati della Porta Parallela | ;| LPT1, in risposta al COMANDO "#Oxy", OUT Dato a 8bit su LPT1| ;| /----------\ -------------------------------------------------------------| ;| | | 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 !!!!! | ;| \----------/ -------------------------------------------------------------| ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per i 2 caratteri ascii OutLPT: LEA SI,DepoPar ;|digitati in fase di acquisizione dei 2 nibble ;/del byte da erogare verso la porta parallela ;\ COMANDO "#Oxy" OUT Dato a 8 bit su LPT1 ;| \----stringa ascii di 2 caratteri ;|Converte la coppia di caratteri ASCII corri- ;|spondenti a simboli del sistema di numerazione ;|esadecimale (da "0" a "9" e da "A" a "F"); CALL Asc2Byt ;|tale coppia Š puntata in ingresso da CS:SI ed ;|Š trasformata nel numero esadecimale xyH a 8 ;|bit che le corrisponde, lasciato in uscita in ;|AL; il puntatore SI viene incrementato di due ;/posizioni. MOV DX,0378H ;\Mette il dato ricevuto via seriale sulla porta OUT DX,AL ;/Dati della Porta Parallela LPT1 RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : CornCom | ;| DESCRIZIONE : Organizza la stampa completamente automatica di una cornice,| ;| in risposta al COMANDO "#Raallrrcctopps", Stampa cornice | ;\---------------------------------------------------------------------------/ ;\ COMANDO #Raallrrcctopps Stampa una cornice ;| ||||||||||||\--colore sfondo ;| ||||||||||\*---colore primo piano ;| |||||||||\-----ombra CornCom:MOV AX,0B800H ;| ||||||||\------tipo di tratto MOV ES,AX ;| ||||||\*-------colonna angolo alto ;| ||||\*---------riga angolo alto ;| ||\*-----------larghezza ;/ \*-------------altezza ;\Locazioni Deposito per i 13 caratteri ascii LEA DI,DepoPar ;|digitati in fase di acquisizione per definire ;/i parametri desiderati per la cornice ;----------------------------------------------- MOV CH,CS:[DI] ;\[ ***** altezza compresa cornice ********* ] INC DI ;| SUB CH,'0' ;| MOV AL,10 ;|Recupera dalle prime 2 locazioni di deposito MUL CH ;|i caratteri ascii numerici che esprimono MOV CH,CS:[DI] ;|l'altezza aa, tra "03" e "25", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB CH,'0' ;|alla fine nel registro CH ADD CH,AL ;/ ;----------------------------------------------- MOV CL,CS:[DI] ;\[ ***** larghezza compresa cornice ******* ] INC DI ;| SUB CL,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL CL ;|i caratteri ascii numerici che esprimono MOV CL,CS:[DI] ;|la larghezza ll, tra "03" e "80", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB CL,'0' ;|alla fine nel registro CL ADD CL,AL ;/ ;----------------------------------------------- MOV DH,CS:[DI] ;\[ ***** riga angolo alto a sinistra ******* ] INC DI ;| SUB DH,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL DH ;|i caratteri ascii numerici che esprimono MOV DH,CS:[DI] ;|la riga rr, tra "00" e "24", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB DH,'0' ;|alla fine nel registro DH ADD DH,AL ;/ ;----------------------------------------------- MOV DL,CS:[DI] ;\[ ***** colonna angolo alto a sinistra ***** ] INC DI ;| SUB DL,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL DL ;|i caratteri ascii numerici che esprimono MOV DL,CS:[DI] ;|la colonna ll, tra "00" e "79", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB DL,'0' ;|alla fine nel registro DL ADD DL,AL ;/ ;----------------------------------------------- ;\[ ** tipo di tratto, 0=semplice, 1=doppio ** ] ;|Recupera dalla seguente locazione di deposito MOV AH,CS:[DI] ;|il carattere ascii numerico che esprime INC DI ;|il tipo di tratto t, o "0" o "1", e calcola il SUB AH,'0' ;|valore esadecimale corrispondente, lasciato ;/alla fine nel registro AH ;----------------------------------------------- ;\[ **** tipo di ombra, 0=senza, 1=con ******* ] ;|Recupera dalla seguente locazione di deposito MOV AL,CS:[DI] ;|il carattere ascii numerico che esprime INC DI ;|il tipo di ombra o, o "0" o "1", e calcola il SUB AL,'0' ;|valore esadecimale corrispondente, lasciato ;/alla fine nel registro AL ;----------------------------------------------- PUSH AX ; Salva tipo di tratto (AH) e tipo di ombra (AL) ;----------------------------------------------- MOV BH,CS:[DI] ;\[ **** Colore di primo piano e di sfondo *** ] INC DI ;| SUB BH,'0' ;|Recupera dalle seguenti 2 locazioni deposito MOV AL,10 ;|i caratteri ascii numerici che esprimono il MUL BH ;|colore di Primo Piano, tra "00" e "15" MOV BH,CS:[DI] ;|e calcola il valore esadecimale corrispondente INC DI ;|lasciato alla fine nel registro BH SUB BH,'0' ;| ADD BH,AL ;/ ;\Recupera dall'ultima locazione di deposito MOV AH,CS:[DI] ;|il carattere ascii numerico che esprime il SUB AH,'0' ;|colore di Sfondo, tra "0" e "7" e calcola il ;|valore esadecimale corrispondente lasciato ;/alla fine nel registro AH SHL AH,1 ;\ SHL AH,1 ;|Ricostruisce in AH il codice esadecimale del SHL AH,1 ;|Colore desiderato SHL AH,1 ;| OR AH,BH ;/ ;----------------------------------------------- M_COLOR AH ;\[ colore: colore della cornice e sfondo ] POP BX ;|Recupera tipo di tratto (AH) e tipo ombra (AL) ;in BL ;|[ tipo 0=tratto semplice; 1=tratto doppio] ;in BH ;|[ ombra 0=senza; 1=con ombreggiatura ] ;in DH ;|[ riga angolo in alto a sinistra ] ;in DL ;|[ colonna angolo in alto a sinistra ] MOV AH,CH ;|[ altezza compresa cornice ] MOV AL,CL ;|[ larghezza compresa cornice ] MOV CX,6000H ;|[ salva RAM in cui salvare l'area coperta ] CALL RamCorn ;/ ;----------------------------------------------- RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : RecpCom | ;| DESCRIZIONE : Organizza il recupero dell'area coperta da una cornice, | ;| in risposta al COMANDO "#Uaallrrcc", Recupera cornice | ;\---------------------------------------------------------------------------/ ;\ COMANDO #Uaallrrcc Recupera una cornice ;| ||||||\*-------colonna angolo alto RecpCom:MOV AX,0B800H ;| ||||\*---------riga angolo alto MOV ES,AX ;| ||\*-----------larghezza ;/ \*-------------altezza ;\Locazioni Deposito per gli 8 caratteri ascii LEA DI,DepoPar ;|digitati in fase di acquisizione per definire ;/i parametri desiderati per la cornice ;----------------------------------------------- MOV CH,CS:[DI] ;\[ ***** altezza compresa cornice ********* ] INC DI ;| SUB CH,'0' ;| MOV AL,10 ;|Recupera dalle prime 2 locazioni di deposito MUL CH ;|i caratteri ascii numerici che esprimono MOV CH,CS:[DI] ;|l'altezza aa, tra "03" e "25", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB CH,'0' ;|alla fine nel registro CH ADD CH,AL ;/ ;----------------------------------------------- MOV CL,CS:[DI] ;\[ ***** larghezza compresa cornice ******* ] INC DI ;| SUB CL,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL CL ;|i caratteri ascii numerici che esprimono MOV CL,CS:[DI] ;|la larghezza ll, tra "03" e "80", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB CL,'0' ;|alla fine nel registro CL ADD CL,AL ;/ ;----------------------------------------------- MOV DH,CS:[DI] ;\[ ***** riga angolo alto a sinistra ******* ] INC DI ;| SUB DH,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL DH ;|i caratteri ascii numerici che esprimono MOV DH,CS:[DI] ;|la riga rr, tra "00" e "24", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB DH,'0' ;|alla fine nel registro DH ADD DH,AL ;/ ;----------------------------------------------- MOV DL,CS:[DI] ;\[ ***** colonna angolo alto a sinistra ***** ] INC DI ;| SUB DL,'0' ;| MOV AL,10 ;|Recupera dalle seguenti 2 locazioni deposito MUL DL ;|i caratteri ascii numerici che esprimono MOV DL,CS:[DI] ;|la colonna ll, tra "00" e "79", e calcola il INC DI ;|valore esadecimale corrispondente, lasciato SUB DL,'0' ;|alla fine nel registro DL ADD DL,AL ;/ ;----------------------------------------------- ;in DH ;\[ riga angolo in alto a sinistra ] ;in DL ;|[ colonna angolo in alto a sinistra ] MOV AH,CH ;|[ altezza compresa cornice ] MOV AL,CL ;|[ larghezza compresa cornice ] MOV CX,6000H ;|[ salva RAM in cui salvare l'area coperta ] CALL RamRecup ;/ ;----------------------------------------------- RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : DelayTx | ;| DESCRIZIONE : Consuma un ritardo proporzionale al valore nn passato come| ;| Parametro; il ritardo prodotto Š completamente svincolato| ;| dalla velocit… del processore perchŠ utilizza informazioni| ;| prodotte dal Timer di Sistema. | ;| I tempi del ritardo sono multipli del tempo minimo 54,925493| ;| millisecondi ed Š assicurata la sua portabilit… con ogni | ;| sistema operativo (Windows 2000/NT/XP). | ;| Su questa base Š possibile compilare la seguente Tabella: | ;| /-----*--------\/----*--------\ /----*--------\ | ;| | nn | ritardo|| nn | ritardo| | nn | ritardo| | ;| *-----*--------**----*--------* *----*--------* | ;| | 1 | 55 ms || 10 | 549 ms | | 27 | 1,5 s | | ;| | 2 | 110 ms || 11 | 604 ms | | 36 | 2 s | | ;| | 3 | 164 ms || 12 | 659 ms | | 45 | 2,5 s | | ;| | 4 | 219 ms || 13 | 714 ms | | 54 | 3 s | | ;| | 5 | 274 ms || 14 | 769 ms | | 63 | 3,5 s | | ;| | 6 | 329 ms || 15 | 824 ms | | 73 | 4 s | | ;| | 7 | 384 ms || 16 | 879 ms | | 82 | 4,5 s | | ;| | 8 | 439 ms || 17 | 934 ms | | 91 | 5 s | | ;| | 9 | 494 ms || 18 | 1 s | | 99 | 5,44s | | ;| \-----*--------/\----*--------/ \----*--------/ | ;| In risposta al COMANDO "#Jnn", Ritardo Programmabile | ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per i 2 caratteri ascii DelayTx:LEA SI,DepoPar ;|digitati in fase di acquisizione della costan- ;/te di tempo nn=01ö99 del Ritardo programmabile ADD SI,2 ;\La procedura "Dec2Byt" analizza una stringa MOV AL,00H ;|puntata da CS:SI, contenente rigorosamente al MOV CS:[SI],AL ;|massimo 2 caratteri SOLO Ascii NUMERICI e SUB SI,2 ;/terminata con 00H: prepara il terminatore ;\ COMANDO #Jnn" Ritardo programmabile ;| \*---numero n=01ö99 CALL Dec2Byt ;|Converte la coppia di caratteri ASCII numerici ;|(da "01" a "99"), puntata in ingresso da CS:SI ;|nel numero binario a 8 bit xyH corrispondente ;/lasciato in uscita in AL ;---------------------------------------------------------------------- MOV CL,AL ;\ MOV CH,00H ;|Consuma un ritardo pari a 55ms*CX CALL Delay ;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : ChkCmd1 / ChkCmd2 *** Accessori della procedura "Tx_Cmd" ***| ;| DESCRIZIONE : Gestisce l'acquisizione dei Parametri richiesti dal COMANDO| ;| corrente, di solito caratteri Ascii Numerici in coppia| ;| (ChkCmd1) o singoli (ChkCmd2), trasmessi immediatamente e| ;| messi a video nei rispettivi campi,in forma ascii e in forma| ;| esadecimale; essi sono anche salvati nelle locazioni di| ;| deposito corrente puntata in ingresso da DI; la seconda| ;| (ChkCmd2) utilizza CH per memorizzare il carattere Ascii| ;| Numerico pi— grande, e CL per memorizzare il carattere Ascii| ;| Numerico pi— piccolo. | ;\---------------------------------------------------------------------------/ ChkCmd1:MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ MOV CX,2 ChkCm0: CALL KEYwait ;\ CMP AL,'9' ;|Rimane in attesa della pressione dei numeri JG ChkCm0 ;|corrispondenti al Parametro desiderato; si CMP AL,'0' ;|tratta di una coppia di numeri trasmessa JB ChkCm0 ;|immediatamente, messa a video nei rispettivi MOV CS:[DI],AL ;|campi, in forma ascii e in forma esadecimale, INC DI ;|e salvata nelle locazioni di deposito CALL TxD_1 ;|corrente CALL StampaTxD ;/ LOOP ChkCm0 RET ;---------------------------------------------------------------------- ChkCmd2:MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ ChkCm1: CALL KEYwait ;\ CMP AL,CH ;|Rimane in attesa della pressione del numero JG ChkCm1 ;|corrispondente al Parametro desiderato; si CMP AL,CL ;|tratta di un numero trasmesso immediatamente, JB ChkCm1 ;|messo a video e nei rispettivi campi in forma MOV CS:[DI],AL ;|ascii e in forma esadecimale e salvato nella INC DI ;|locazione di deposito corrente CALL TxD_1 ;| CALL StampaTxD ;/ RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : EndCmd *** Accessori della procedura "Tx_Cmd" ***| ;| DESCRIZIONE : Gestisce la fase finale della richiesta di ciascun COMANDO. | ;\---------------------------------------------------------------------------/ ;M_recup altezza,larghezza,riga,colonna,salva EndCmd: M_recup 23 , 28 , 1 , 50 ,5000H EndCmd1:MOV AL,Invio ;\Si utilizza in modo improprio il carattere 0DH CALL StampaTxD ;|(Invio) spedendolo alla procedura StampaTxD JMP Tx_C03 ;|per mandare a capo le stringhe appena digitate ;/evitando comunque la stampa del suo valore ;/---------------------------------------------------------------------------\ ;| PROCEDURA : ChkCorn *** Accessori della procedura "Tx_Cmd" ***| ;| DESCRIZIONE : Gestisce l'acquisizione dei Parametri altezza, larghezza,| ;| riga e colonna dell'angolo in alto a sinistra, richiesti dai| ;| COMANDI Stampa Cornice (#Raallrrcctopps) e Recupera Cornice| ;| (#Uaallrrcc); piochŠ si tratta delle medesime richieste si| ;| Š ritenuto di scriverle solo una volta. | ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per gli 8 caratteri ascii ChkCorn:LEA DI,DepoPar ;|numerici digitati in fase di acquisizione del- ;/la tipologia della cornice gestita dal COMANDO M_msgC Testo25,12,3,0BH;\ M_Chr '0',12,36,8EH ;| M_Chr '3',12,37,8EH ;|"Digita il parametro Altezza, da 03 a 25 " M_Chr '2',12,43,8EH ;| M_Chr '5',12,44,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Altezza Cornice; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 03 a 25) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- M_msgC Testo26,12,3,0BH;\ M_Chr '0',12,38,8EH ;| M_Chr '3',12,39,8EH ;|"Digita il parametro Larghezza, da 03 a 80 " M_Chr '8',12,45,8EH ;| M_Chr '0',12,46,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Larghezza Cornice; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 03 a 80) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- M_msgC Testo14,12,3,0BH;\ M_Chr '0',12,33,8EH ;| M_Chr '0',12,34,8EH ;|"Digita il parametro Riga, da 00 a 24 " M_Chr '2',12,40,8EH ;| M_Chr '4',12,41,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Riga Cornice; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 24) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- M_msgC Testo15,12,3,0BH;\ M_Chr '0',12,36,8EH ;| M_Chr '0',12,37,8EH ;|"Digita il parametro Colonna, da 00 a 79 " M_Chr '7',12,43,8EH ;| M_Chr '9',12,44,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Colonna Cornice; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 79) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Tx_Msg | ;| DESCRIZIONE : Gestisce la trasmissione verso il Computer Remoto di una| ;| intera stringa di caratteri Ascii alfanumerici terminata con| ;| 00H e puntata in ingresso da CS:SI; la stringa pu• includere| ;| (anche pi— volte) la sequenza di ogni COMANDO previsto dal| ;| protocollo, ciascuno dei quali ha il carattere "#" per | ;| prefisso standard. | ;\---------------------------------------------------------------------------/ Tx_Msg: MOV AL,CS:[SI] ;Punta con AX la stringa CMP AL,00H ;Controlla se Š finita JZ Tx_Ms0 CALL TxD_1 ;Trasmette il carattere corrente INC SI ;Punta il prossimo JMP SHORT Tx_Msg Tx_Ms0: RET ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Tx_Cmd ******* GESTISCE I COMANDI IN USCITA ********** | ;| DESCRIZIONE : Pi— che una procedura fine a se stessa si tratta di una| ;| appendice alla precedente "FraseTxR", con il compito di| ;| trasmettere i COMANDI diretti al computer remoto. | ;| Questo codice viene eseguito sul computer Master non appena| ;| l'utente ha premuto il tasto F2 (nell'ambito della FraseTxR,| ;| nel quale, subito dopo, viene spedito il byte di protocollo| ;| FFH al computer remoto, a conferma della scelta fatta). | ;| Questo codice o rganizza l'acquisizione da tastiera delle| ;| stringhe "#....." previste dal protocollo, ne controlla la| ;| sintassi (obbligando a scrivere i corretti caratteri) e, se| ;| la stringa č corretta, provvede a spedirla al computer| ;| remoto; subito dopo viene offera una sua descrizione nel| ;| campo destinato a documentare la trasmissione, sia in forma| ;| di messaggio ascii che in forma binaria esadecimale. | ;| Dopo l'erogazione di ogni stringa completa la procedura| ;| verifica eventuali risposte dal computer sotto controllo,| ;| visualizzando nel campo di ricezione gli eventual bytes| ;| ricevuti; di norma il computer remoto non puō prendere| ;| iniziative (pu• solo eseguire i COMANDI da parte del remoto)| ;| per cui potrā spedire dati solo su eplicita richiesta. | ;| | ;| Tutti i COMANDI hanno il carattere "#" per prefisso standard| ;| Attualmente sono disponibili i seguenti servizi: | ;| #A ClearScreen Clasico | ;| #B DeskTop Classico | ;| #C Fa sparire il cursore | ;| #D Fa tornare il cursore | ;| #E Cornice di primo tipo | ;| #F Cornice di secondo tipo | ;| #G Cornice di terzo tipo | ;| #H Aspetta Pressione Tasto | ;| #I Fine Sequenza #Tnn di stringhe di COMANDI | ;| #Jnn Consuma un ritardo pari a n volte 55ms | ;| \*--------------numero n=01ö99 | ;| /*------------colonna cc=00ö79 | ;| #Krrcc Coordinate di stampa | ;| \*--------------riga rr=00ö24 | ;| /-------------sfondo s=0ö7 | ;| #Lpps Attributo di colore, testo sfondo | ;| \*--------------primo piano pp=00ö15 | ;| #Mn Intestazione personalizzata | ;| \---------------numero n=0ö9 | ;| #Nn Menu personalizzato | ;| \---------------numero n=0ö9 | ;| #Oxy Uscita di Dato a 8 bit su porta parallela | ;| #Pxy Visualizza la stringa del Byte xyH | ;| #Qxywz Visualizza la stringa della Word xywzH | ;| /*------------larghezza compresa cornice ll=03ö80 | ;| || /*--------colonna angolo alto a sinistra cc=00ö79 | ;| || || /------ombra 0=senza, 1=con | ;| || || | /---colore sfondo s=0ö7 | ;| #Raallrrcctopps Stampa una cornice programmabile a video | ;| || || | \*----colore primo piano pp=00ö15 | ;| || || \-------tipo 0=tratto semplice, 1=tratto doppio | ;| || \*----------riga angolo alto a sinistra rr=00ö24 | ;| \*--------------altezza compresa cornice aa=03ö25 | ;| #Saa..a 0DH Sequenza di caratteri ascii | ;| || | \--------carattere terminatore =0DH=13= | ;| \*--*-----------caratteri ascii da porre a video | ;| #Tnn Sequenza di COMANDI Precostituiti | ;| \*--------------numero nn=00ö99 | ;| /*------------larghezza compresa cornice ll=03ö80 | ;| || /*--------colonna angolo alto a sinistra cc=00ö79 | ;| #Uaallrrcc Recupera area coperta da cornice | ;| || \*----------riga angolo alto a sinistra rr=00ö24 | ;| \*--------------altezza compresa cornice aa=03ö25 | ;| | ;| In ogni momento, premendo il tasto F1, si pu• annullare la| ;| sessione di trasmissione COMANDI (ed eventuale ricezione dal| ;| computer remoto) per esercitare una Risincronizzazione. | ;| Con la pressione del tasto F2 la procedura pu• tornare alla| ;| normale ricetrasmissione di stringhe Ascii ("Chat") operando| ;| la visualizzazione delle frasi in partenza e di quelle in| ;| arrivo in campi diversi. | ;| La procedura ha termine con la pressione di . | ;\---------------------------------------------------------------------------/ ; /-------------------------------------------------------------------\ ; 01 | Predispone il DeskTop adatto alla Gestione del Modo COMANDI | ; \-------------------------------------------------------------------/ Tx_Cmd:M_msgC MENU03,24,70,74H;\"ESC" M_msgC Testo06,24,7,74H;|"F1" M_COLOR 70H ;| M_msgN MENU04 ;|" Risincronizza" M_COLOR 74H ;|---------------------------------------------- M_msgN Testo07 ;|"F2" M_COLOR 70H ;| M_msgN MENU07 ;/" Modo Normale" ; ---------------------------------------------- MOV Byte Ptr CS:[COMANDI],01;\Fissa la modalit… di servizio per COMANDI MOV Byte Ptr CS:[PrntMod],02;/ CALL CampiC ; Predispone i 2 riquadri di Ricetrasmissione ; per la visualizzazione DATI ascii e binari ; /-------------------------------------------------------------------\ ; 02 | Gestione del Messaggio di presentazione con TimeOut automatico | ; \-------------------------------------------------------------------/ ;\Si attende conferma dal Computer remoto: nel M_msgC Testo08,12,3,8CH;|tempo consumato in attesa, il computer remoto ;|sta mostrando un messaggio per avvisare che ;/sta per passare al Modo COMANDI ;\Legge il tempo reale corrente del giorno dalle ;|locazioni di sistema da 0000:046CH e prepara MOV AX,109 ;|in CX,DX il numero a 32 bit dei TICKs prodotti CALL RD_Time ;|nell'arco della giornata fino a questo momento ;|sommato alla valore corrispondente al ritardo ;/da consumare, previsto di 6 secondi (=109) ;\Controlla se il tempo reale corrente ha Tx_C00: CALL ChkTime ;|raggiunto quello equivalente al numero a 32bit CMP AH,00H ;|presente in ingresso in CX,DX; se il tempo JNZ Tx_C01 ;|previsto Š stato consumato la procedura ;/termina con AH=01H; altrimenti con AH=00H PUSH DX ;\Quando il computer remoto Š pronto per passare CALL RxD_3 ;|al Modo COMANDI,o per conferma dell'utente con POP DX ;|pressione di un tasto, o per timeout) spedisce CMP AH,00H ;|di ritorno il byte FFH; si rimane dunque in JNZ Tx_C00 ;|attesa dell'arrivo di questa parola di CMP AL,0FFH ;|protocollo prima di procedere alla gestione JNZ Tx_C00 ;/dei COMANDI in partenza M_msgC Testo09,12,3,8AH;\Computer remoto pronto per conferma diretta JMP Tx_C02 ;/ Tx_C01:M_msgC Testo10,12,3,8AH;Computer remoto pronto, per tempo scaduto Tx_C02: CALL Del_2000 ;---------------------------------------------------------------------- ; /-------------------------------------------------------------------\ ; 03 | Punto di Rientro del MAIN LOOP nella Gestione del Modo COMANDI | ; \-------------------------------------------------------------------/ Tx_C03:M_msgC Testo11,12,3,0BH;\Premi il prefisso di COMANDO, "#" M_Chr '#',12,34,8EH ;/ MOV DH,CS:[RigTxDa];\ MOV DL,CS:[ColTxDa];|Assume la riga e la colonna corrente e vi CALL SET_cur ;|fissa il cursore CALL RIP_Cur ;/ ;---------------------------------------------------------------------- Tx_C04: CALL RxD_3 ;\Controlla se il computer Remoto ha spedito CMP AH,00H ;|bytes, sempre su preciso eventuale COMANDO di JNZ Tx_C05 ;|questo Computer; se il dato NON Š attendibile ;|(AH<>00H) si prosegue con la fase di comando CALL StampaRxD ;/altrimenti si stampa il dato ricevuto in AL ;---------------------------------------------------------------------- Tx_C05: MOV AH,01H ;\Controlla la pressione di tasti SENZA FERMARSI INT 16H ;|in attesa di un carattere da trasmettere o di JZ Tx_C04 ;|un'azione da compiere; se non Š stato premuto ;/alcun tasto (ffZ="1") rimane in attesa CALL KeyWait ; Altrimenti analizza il codice tasto premuto ;----------------------------------------------- CMP AL,ESC_ ;\/--------------------------------------------\ JNZ Tx_C06 ;|| Servizio tasto : Fine Ricetrasmissione| ;|\--------------------------------------------/ RET ;/Il programma viene terminato con rientro a DOS ;----------------------------------------------- Tx_C06: CMP AL,00H ;\Se non si tratta dei tasti funzionali F1 o F2 JZ Tx_C07 ;|si provvede ad erogare i comandi JMP Tx_C09 ;/ ;----------------------------------------------- ;\/--------------------------------------------\ ;|| Servizio di Risincronizzazione (tasto )| ;|\--------------------------------------------/ Tx_C07: CMP AH,F1 ;|Se uno dei 2 computer perde il collegamento Š JNZ Tx_C08 ;/possibile ripristinarlo MOV Byte Ptr CS:[COMANDI],00;\Fissa la modalit… di servizio per Modo NORMALE MOV Byte Ptr CS:[PrntMod],00;/ ;M_recup altezza,larghezza,riga,colonna,salva M_recup 7 , 69 , 8 , 5 ,2000H;|Recupera lo spazio M_recup 7 , 69 , 16 , 5 ,2000H;|occupato dai Campi DATI ;\Ripropone messaggio "Sono in attesa di RICE- CALL DESK_9 ;|ZIONE dal Computer Remoto" e reinizializza le ;/variabili del Test Seriale ;\NB: recupera con POP AX la posizione pendente POP AX ;|nello stack dovuta alla chiamata "CALL Tx_Cmd" ;/per poter tornare con JMP invece che con "RET" JMP xxx01 ;\Rientra nel programma principale e rimane in ;/attesa del byte 0AAH di Risincronizzazione ;----------------------------------------------- ;\/--------------------------------------------\ ;|| Servizio tasto : " Modo Normale" | Tx_C08: CMP AH,F2 ;|\--------------------------------------------/ JNZ Tx_C09 ;|Si desidera continuare nel MODO COMANDI, cioŠ ;|nella gestione di comandi diretti al computer ;/remoto MOV Byte Ptr CS:[PrntMod],00;\ MOV Byte Ptr CS:[COMANDI],00;|Altrimenti si torna al Modo Normale ("Chat") CALL DESK_8 ;|cioŠ alla ricetrasmissione di caratteri ascii CALL CampiD ;|proposti nei normali riquadri ad essi destina- CALL Barra1 ;|ti e reinizializza le variabili del Test CALL Barra2 ;/ MOV AL,"#" ;\Obbliga anche il Computer Remoto a riproporre CALL TxD_1 ;|i normali riquadri destinati alla MOV AL,"#" ;|ricetrasmissione di caratteri ascii CALL TxD_1 ;/ JMP FraseTxR ; /-------------------------------------------------------------------\ ; 04 | Punto di Ingresso nella Gestione di ogni nuovo COMANDO | ; \-------------------------------------------------------------------/ Tx_C09: CMP AL,'#' ;\In questo punto Š attesa la pressione solo del JZ Tx_C10 ;|tasto"#" (prefisso delle stringhe COMANDI) JMP Tx_C04 ;/ ;---------------------------------------------------------------------- Tx_C10: CALL TxD_1 ;\Trasmette il prefisso di COMANDO e pone a CALL StampaTxD ;/video il suo carattere, "#" M_msgC Testo12,12,3,0BH;\ M_Chr 'A',12,34,8EH ;|"Scegli il Comando desiderato, A, B, C, ....." M_Chr 'B',12,38,8EH ;| M_Chr 'C',12,42,8EH ;/ MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ Tx_C11: CALL KEYwait ;\Rimane in attesa della presione della lettera AND AL,11011111B ;|corrispondente al Comando desiderato; se si CMP AL,'U' ;|tratta di un COMANDO ammesso (A, B, C,...) lo JG Tx_C11 ;|trasmette immediatamente e lo stampa a video CMP AL,'A' ;|/--------------------------------------------\ JB Tx_C11 ;|| FINORA ammessi: A B C D E F G H I J K L | CALL TxD_1 ;|| M N O P Q R S T U . . . | CALL StampaTxD ;/\--------------------------------------------/ ; /-------------------------------------------------------------------\ ; 05 | Gestione dei COMANDI senza Parametri | ; \-------------------------------------------------------------------/ ;\ COMANDO "#A ClearScreen Clasico ;| COMANDO "#B DeskTop Classico CMP AL,'I' ;| COMANDO "#C Fa sparire il cursore JG Tx_C12 ;| COMANDO "#D Fa tornare il cursore ;| COMANDO "#E Cornice di primo tipo ;| COMANDO "#F Cornice di secondo tipo ;| COMANDO "#G Cornice di terzo tipo ;| COMANDO "#H Aspetta Pressione Tasto ;/ COMANDO "#I Fine sequenza COMANDI #Tnn LEA SI,TxT00 ;\Stampa un messaggio di commento al COMANDO MOV AH,00H ;|impartito: SUB AL,'A' ;| COMANDO "#A impone ClearScreen remoto MOV CL,32 ;| COMANDO "#B impone DeskTop Classico MUL CL ;| COMANDO "#C fa sparire il Cursore remoto ADD SI,AX ;| COMANDO "#D fa tornare il Cursore remoto MOV DH,CS:[RigTxDa];| COMANDO "#E impone Cornice del primo tipo MOV DL,CS:[ColTxDa];| COMANDO "#F impone Cornice del secondo tipo INC DL ;| COMANDO "#G impone Cornice del terzo tipo M_COLOR 03H ;| COMANDO "#H attende pressione di un tasto M_CURSOR DH,DL ;| COMANDO "#I Fine sequenza COMANDI #Tnn CALL BIOSmsg ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd1 ;|ciascun COMANDO: manda a capo il cursore nel ;|campo di acquisizione e rientra in attesa di ;/un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 06 | Gestione del COMANDO Colore con 2 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Tx_C12: CMP AL,'J' ;\ COMANDO #Jnn" Ritardo programmabile JE Tx_C13 ;| \*---numero n=01ö99 JMP Tx_C15 ;/ ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Jnn~ ˙ | ; | -------------------------- | ; | Consuma un tempo pari a | ; | multipli di 54,925493 ms | ; | portabile e preciso perchŠ | ; | legato al Timer di Sistema | ; | -------------------------- | ; | I parametri sono stringhe | Tx_C13: LEA SI,Cmd20 ; | di caratteri Ascii numerici| CALL Help ; | in rappresentanza della | ; | costante numerica da ~01~, | ; | pari a 55ms, a ~99~, pari | ; | a circa 5 secondi e mezzo. | ; | -------------------------- | ; | NB: i numeri minori di 9 | ; | devono comunque essere | ; | espressi con 2 caratteri | ; | cioŠ con stringhe del | ; | tipo da ~01~ a ~09~ | ; | | ; \----------------------------/ ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/della costante di tempo del COMANDO M_msgC Testo24,12,3,0BH;\ M_Chr '0',12,37,8EH ;| M_Chr '1',12,38,8EH ;|"Digita il parametro numerico, da ~01~ a ~99~" M_Chr '9',12,44,8EH ;| M_Chr '9',12,45,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Costante di Tempo CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 01 a 99) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| COMANDO #Jnn" Ritardo programmabile M_COLOR 03H ;| \*---numero n=01ö99 M_CURSOR DH,DL ;| M_msgN TxT00_ ;/"consuma un ritardo pari a 55ms*" ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/della costante di tempo del COMANDO MOV CX,2 ;\ Tx_C14: MOV AL,CS:[DI] ;| INC DI ;|Recupera il parametro Costante, da 01 a 99 M_COLOR 0BH ;|e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C14 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 07 | Gestione del COMANDO GoToXY con 4 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Tx_C15: CMP AL,'K' ;\ COMANDO "#Krrcc" Coordinate di stampa JE Tx_C16 ;| ||\*--colonna cc=00ö79 JMP Tx_C19 ;/ \*-------riga rr=00ö24 ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Krrcc~ | ; | -------------------------- | ; | Fissa posizione di stampa | ; | corrente sul Monitor del | ; | Computer Remoto alla | ; | riga ~rr~ da ~00~ a ~24~,| ; | colonna ~cc~ da ~00~ a ~79~| Tx_C16: LEA SI,Cmd10 ; | -------------------------- | CALL Help ; | I parametri sono stringhe | ; | di caratteri Ascii numerici| ; | in rappresentanza dei | ; | numeri corrispondenti. | ; | -------------------------- | ; | NB: i numeri minori di 9 | ; | devono comunque essere | ; | espressi con 2 caratteri | ; | cioŠ con stringhe del | ; | tipo da ~00~ a ~09~ | ; \----------------------------/ ;\Locazioni Deposito per i 4 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO M_msgC Testo14,12,3,0BH;\ M_Chr '0',12,33,8EH ;| M_Chr '0',12,34,8EH ;|"Digita il parametro Riga, da 00 a 24 " M_Chr '2',12,40,8EH ;| M_Chr '4',12,41,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Riga desiderato; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 24) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente M_msgC Testo15,12,3,0BH;\ M_Chr '0',12,36,8EH ;| M_Chr '0',12,37,8EH ;|"Digita il parametro Colonna, da 00 a 79 " M_Chr '7',12,43,8EH ;| M_Chr '9',12,44,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Colonna; CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 79) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| COMANDO "#Krrcc" M_COLOR 03H ;| "fissa le Coordinate di stampa M_CURSOR DH,DL ;| M_msgN TxT01 ;/ ;\Locazioni Deposito per i 4 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV CX,2 ;\ Tx_C17: MOV AL,CS:[DI] ;| INC DI ;|Recupera il parametro Riga, da 00 a 24 M_COLOR 0BH ;|e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C17 ;/ M_COLOR 03H ; M_msgN TxT02 ; MOV CX,2 ;\ Tx_C18: MOV AL,CS:[DI] ;| INC DI ;|Recupera il parametro Colonna, da 00 a 79 M_COLOR 0BH ;|e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C18 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 08 | Gestione del COMANDO Colore con 3 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Tx_C19: CMP AL,'L' ;\ COMANDO "#Lpps" Colore testo sfondo JE Tx_C20 ;| ||\--sfondo s=0ö7 JMP Tx_C22 ;/ \*---primo piano pp=00ö15 ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Lpps~ | ; | -------------------------- | ; | Fissa il colore di Primo | ; | Piano ~pp~ e di Sfondo ~s~ | ; | di ogni carattere posto sul| ; | Monitor del Computer Remoto| ; | -------------------------- | ; | La stringa del parametro | Tx_C20: LEA SI,Cmd11 ; | del Colore di Primo Piano, | CALL Help ; | composta da 2 caratteri | ; | Ascii numerici rappresenta | ; | il numero da ~00~ a ~15~ | ; | mentre il carattere Sfondo | ; | pu• valere da ~0~ a ~7~. | ; | -------------------------- | ; | NB: i numeri minori di 9 | ; | devono comunque essere | ; | espressi con 2 caratteri | ; | cioŠ con stringhe del | ; | tipo da ~00~ a ~09~ | ; \----------------------------/ ;\Locazioni Deposito per i 3 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO M_msgC Testo16,12,3,0BH;\ M_Chr '0',12,42,8EH ;| M_Chr '0',12,43,8EH ;|"Digita il parametro Colore PrimoPiano, 00ö15" M_Chr '1',12,45,8EH ;| M_Chr '5',12,46,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Colore Primo Piano CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 15) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente M_msgC Testo17,12,3,0BH;\ M_Chr '0',12,42,8EH ;|"Digita il parametro Colore Sfondo, da 0 a 7" M_Chr '7',12,46,8EH ;/ ;\Rimane in attesa della pressione del numero ;|corrispondenti al Parametro Colore Sfondo; MOV CH,'7' ;|si tratta di un numero (da 0 a 7) trasmesso MOV CL,'0' ;|immediatamente, messo a video nei rispettivi CALL ChkCmd2 ;|campi, in forma ascii e in forma esadecimale, ;/e salvato nella locazione di deposito corrente ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| COMANDO "#Lpps" M_COLOR 03H ;| "impone il Colore del testo, M_CURSOR DH,DL ;| M_msgN TxT03 ;/ ;\Locazioni Deposito per i 3 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV CX,2 ;\ Tx_C21: MOV AL,CS:[DI] ;| INC DI ;|Recupera il parametro Colore Primo Piano, da M_COLOR 0BH ;|00 a 15 e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C21 ;/ M_COLOR 03H ; M_msgN TxT04 ; MOV AL,CS:[DI] ;\ INC DI ;|Recupera il parametro Colore Sfondo, da 0 a 7 M_COLOR 0BH ;|e lo pone a video in sequenza CALL BIOchr1 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 09 | Gestione dei COMANDI con un solo Parametro di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ Tx_C22: LEA SI,Cmd12 ;\ CMP AL,'M' ;| JE Tx_C23 ;| COMANDO "#Mn", Intestazione personalizzata LEA SI,Cmd13 ;| COMANDO "#Nn", Menu personalizzato CMP AL,'N' ;| \---tipo,n=0ö9 JE Tx_C23 ;| JMP Tx_C24 ;/ ;---------------------------------------------------------------------- Tx_C23: PUSH AX ; Salva il carattere del COMANDO "M" o "N" ; /----------------------------\ /----------------------------\ ; | -------------------------- | | -------------------------- | ; | COMANDO ~#Mn~ | | COMANDO ~#Nn~ | ; | -------------------------- | | -------------------------- | ; | Adatto al servizio delle | | Adatto al servizio delle | ; | Cornici di tipo 1ø, 2ø e 3ø| | Cornici di tipo 1ø, 2ø e 3ø| ; | ottenute con i comandi ~#E~| | ottenute con i comandi ~#E~| ; | ~#F~ e ~#G~, inserisce una | | ~#F~ e ~#G~, inserisce una | ; | stringa autocentrata sulla | | stringa autocentrata sulla | ; | riga 01 con ~intestazioni~ | | riga 23 con ~menu~ pre- | ; | predefinite di 78 caratteri| | definiti di 78 caratteri | ; | di Colore Bianco su Blu: | | di Colore Bianco su Blu: | ; | ~0~: Collaudo della ..... | | ~0~: Copyright www.giobe..| ; | ~1~: Controllo Remoto ... | | ~1~: ESC per terminare | ; | ~2~: <... disponibile ...> | | ~2~: <... disponibile ...> | ; | ~3~: <... disponibile ...> | | ~3~: <... disponibile ...> | ; | ~4~: <... disponibile ...> | | ~4~: <... disponibile ...> | ; | ~5~: <... disponibile ...> | | ~5~: <... disponibile ...> | ; | ~6~: <... disponibile ...> | | ~6~: <... disponibile ...> | ; | ~7~: <... disponibile ...> | | ~7~: <... disponibile ...> | ; | ~8~: <... disponibile ...> | | ~8~: <... disponibile ...> | ; | ~9~: <... disponibile ...> | | ~9~: <... disponibile ...> | ; \----------------------------/ \----------------------------/ ;\La stampa dei Messaggi d'Aiuto Š resa dinamica CALL Help ;|cos come la parte rimanente del Servizio di ;/Gestione COMANDI con un Parametro Numerico M_msgC Testo13,12,3,0BH;\ M_Chr '0',12,37,8EH ;|"Digita il parametro numerico, da 0 a 9 " M_Chr '9',12,43,8EH ;/ ;\Rimane in attesa della pressione del numero ;|corrispondente al Tipo di Comando desiderato; MOV CH,'9' ;|si tratta di un numero (da 0 a 9) trasmesso MOV CL,'0' ;|immediatamente, messo a video nei rispettivi CALL ChkCmd2 ;|campi, in forma ascii e in forma esadecimale, ;/e salvato nella locazione di deposito corrente MOV CH,AL ; Salva il carattere numerico, da "0" a "9" POP AX ; Recupera il carattere del COMANDO "M" o "N" ;---------------------------------------------------------------------- LEA SI,TxT05 ;\ MOV AH,00H ;| SUB AL,'M' ;|Stampa un messaggio di commento al COMANDO MOV CL,31 ;|impartito: MUL CL ;| COMANDO "#Mn":impone Intestazione di tipo n= ADD SI,AX ;| COMANDO "#Nn":propone un Menu di tipo n= MOV DH,CS:[RigTxDa];| MOV DL,CS:[ColTxDa];| INC DL ;| M_COLOR 03H ;| M_CURSOR DH,DL ;| CALL BIOSmsg ;/ M_COLOR 0BH ;\Recupera il carattere numerico, da "0" a "9" MOV AL,CH ;|e lo pone a video in sequenza CALL BIOchr1 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 10 | Gestione dei COMANDI con un solo Parametro tipo Ascii Esadecimale | ; \-------------------------------------------------------------------/ Tx_C24: CMP AL,'O' ;\ COMANDO "#Oxy" OUT Dato a 8 bit su LPT1 JE Tx_C25 ;| \----stringa ascii di 2 caratteri JMP Tx_C30 ;| corrispondenti al valore del ;/ numero binario a 8 bit ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#On~ | ; | -------------------------- | ; | Dedicato al controllo della| ; | Porta Paralla LPT1 del | Tx_C25: LEA SI,Cmd14 ; | Computer Remoto consente | CALL Help ; | di scrivere il Dato a 8bit | ; | sul Registro Dati (0378H) | ; | passato come Parametro in | ; | una stringa di 2 caratteri | ; | ascii numerici (tra 0 e 9) | ; | e letterali (tra A e F) | ; \----------------------------/ ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/dei nibble del byte richiesto dal COMANDO M_msgC Testo29,12,3,0BH;\ M_Chr '0',12,38,8EH ;| M_Chr '0',12,39,8EH ;|"Digita i caratteri del byte, da ~00~ a ~FF~" M_Chr 'F',12,45,8EH ;| M_Chr 'F',12,46,8EH ;/ MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ MOV CX,2 Tx_C26: CALL KEYwait ;\ CMP AL,'9' ;| JG Tx_C27 ;|Rimane in attesa della pressione del numero CMP AL,'0' ;|corrispondente al Tipo di Comando desiderato; JGE Tx_C28 ;|se si tratta di una coppia di caratteri tra JMP SHORT Tx_C26 ;|"0" e "9" e tra "A" e "F" la trasmette Tx_C27: AND AL,11011111B ;|immediatamente e la mette a video nei CMP AL,'F' ;|rispettivi campi in forma ascii e in forma JG Tx_C26 ;|esadecimale CMP AL,'A' ;| JB Tx_C26 ;| Tx_C28: MOV CS:[DI],AL ;|Salva il carattere, tra "0"ö"9" o tra "A"ö"F" INC DI ;| CALL TxD_1 ;| CALL StampaTxD ;/ LOOP Tx_C26 ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| M_COLOR 03H ;| COMANDO "#Oxy" OUT Dato a 8 bit su LPT1 M_CURSOR DH,DL ;| M_msgN TxT06 ;/ ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|esadecimali digitati in fase di acquisizione ;/del valore del byte necessario al COMANDO MOV CX,2 ;\ Tx_C29: MOV AL,CS:[DI] ;| INC DI ;|Recupera il carattere, tra "0"ö"9" o tra M_COLOR 0BH ;|"A"ö"F" e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C29 ;/ M_COLOR 03H ;\ MOV AL,"H" ;|Completa l'informazione con una "H" CALL BIOchr1 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 11 | Gestione dei COMANDI con un solo Parametro di tipo Binario a 8 Bit| ; \-------------------------------------------------------------------/ Tx_C30: CMP AL,'P' ;\ COMANDO "#Pxy" visualizzazione di Byte JE Tx_C31 ;| \-----valore binario a 8 bit xyH JMP Tx_C32 ;/ ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Pn~ | ; | -------------------------- | ; | Pone sul Monitor del | ; | Computer Remoto la stringa | ; | ascii esadecimale del byte | ; | xyH passato come parametro | ; | a questo COMANDO, nella | ; | posizione di stampa e nel | Tx_C31: LEA SI,Cmd15 ; | colore corrente. | CALL Help ; | -------------------------- | ; | Il COMANDO Š pensato per | ; | una erogazione diretta del | ; | byte (per esempio tramite | ; | single-chip) e pu• essere | ; | qui collaudato permendo il | ; | tasto ALT insieme ad un | ; | numero tra 0 e 255 sulla | ; | tastierina numemica. | ; \----------------------------/ M_msgC Testo31,12,3,0BH; "Digita un numero tra 0 e 255 insieme a ~ALT~ MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ CALL KEYwait ;\Rimane in attesa della pressione di una PUSH AX ;|sequenza numerica sulla tastierina, insieme al ;/tasto ALT CALL TxD_1 ;\Spedisce il carattere in linea e lo mette a CALL StampaTxD ;/video ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| M_COLOR 03H ;| COMANDO "#Pxy" visualizzazione di Byte M_CURSOR DH,DL ;| M_msgN TxT07 ;/ POP AX ;\ M_COLOR 0BH ;|Mostra l'aspetto asci esadecimale del byte CALL Byt2Asc ;|appena acqusito M_COLOR 03H ;| MOV AL,"H" ;|Completa l'informazione con una "H" CALL BIOchr1 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 12 | Gestione dei COMANDI con un solo Parametro di tipo Binario a 16bit| ; \-------------------------------------------------------------------/ Tx_C32: CMP AL,'Q' ;\ COMANDO #Qxywz Visualizzazione di Word JE Tx_C33 ;| \----valore binario a 16bit xywzH JMP Tx_C36 ;/ ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Qxywz~ | ; | -------------------------- | ; | Pone sul Monitor del | ; | Computer Remoto la stringa | ; | ascii esadecimale della | ; | word xywzH passata come | ; | parametro a questo COMANDO | ; | nella posizione di stampa | ; | e nel colore corrente. | Tx_C33: LEA SI,Cmd16 ; | -------------------------- | CALL Help ; | Il COMANDO Š pensato per | ; | una erogazione diretta di | ; | word (per esempio tramite | ; | single-chip) e pu• essere | ; | qui collaudato permendo il | ; | tasto ALT, insieme ad un | ; | numero tra 0 e 255 sulla | ; | tastierina numerica, due | ; | volte di seguito. | ; \----------------------------/ M_msgC Testo32,12,3,0BH; "Digita un numero tra 0 e 255 insieme a ~ALT~ MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|corrispondenti ai 2 byte digitati in fase di ;/acquisizione della word necessaria al COMANDO MOV CX,2 Tx_C34: CALL KEYwait ;\ MOV CS:[DI],AL ;|Rimane in attesa (2 volte) della pressione di INC DI ;|una sequenza numerica sulla tastierina insieme CALL TxD_1 ;|al tasto ALT e spedisce in linea il byte CALL StampaTxD ;/corrispondente e lo mette a video LOOP Tx_C34 ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| M_COLOR 03H ;| COMANDO #Qxywz Visualizzazione di Word M_CURSOR DH,DL ;| M_msgN TxT07 ;/ ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|corrispondenti ai 2 byte digitati in fase di ;/acquisizione della word necessaria al COMANDO MOV CX,2 M_COLOR 0BH Tx_C35: MOV AL,CS:[DI] ;\Mostra l'aspetto asci esadecimale della word INC DI ;|appena acqusita CALL Byt2Asc ;/ LOOP Tx_C35 M_COLOR 03H ;\ MOV AL,"H" ;|Completa l'informazione con una "H" CALL BIOchr1 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 13 | Gestione dei COMANDI con 13 Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ ;\ COMANDO #Raallrrcctopps Stampa una cornice ;| ||||||||||||\--colore sfondo ;| ||||||||||\*---colore primo piano Tx_C36: CMP AL,'R' ;| |||||||||\-----ombra JE Tx_C37 ;| ||||||||\------tipo di tratto JMP Tx_C38 ;| ||||||\*-------colonna angolo alto ;| ||||\*---------riga angolo alto ;| ||\*-----------larghezza ;/ \*-------------altezza ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Raallrrcctopps~ | ; | -------------------------- | ; | | ; | Pone sul Monitor del | ; | Computer Remoto una cornice| ; | completamente programmabile| ; | per dimensioni, posizione, | ; | colore e tipologia estetica| ; | -------------------------- | Tx_C37: LEA SI,Cmd17 ; | I parametri sono stringhe | CALL Help ; | Ascii Numeriche con range: | ; | altezza aa=03ö25 | ; | larghezza ll=03ö80 | ; | riga rr=00ö24 | ; | colonna cc=00ö79 | ; | tipo di tratto t=0 o 1 | ; | effetto ombra o=0 o 1 | ; | colore primo piano pp=00ö15| ; | colore sfondo s=0ö7 | ; \----------------------------/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti ai Parametri: Altezza Cornice ;|(da 03 a 25), Larghezza Cornice (da 03 a 80), ;|Riga (da 00 a 24) e Colonna (da 00 a 79) e, CALL ChkCorn ;|dopo averli mostrati con i rispettivi messaggi ;|li trasmette immediatamente, li mette a video ;|nei rispettivi campi in forma ascii e in forma ;|esadecimale, e li salva nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- M_msgC Testo27,12,3,0BH;\ M_Chr '0',12,28,8EH ;|"Digita il parametro Tipo 0=semplice,1=doppio" M_Chr '1',12,39,8EH ;/ ;\Rimane in attesa della pressione del numero ;|corrispondente al Parametro Tipo Cornice; MOV CH,'1' ;|si tratta di un numero (da 0 a 1) trasmesso MOV CL,'0' ;|immediatamente, messo a video nei rispettivi CALL ChkCmd2 ;|campi, in forma ascii e in forma esadecimale, ;/e salvato nella locazione di deposito corrente ;---------------------------------------------------------------------- M_msgC Testo28,12,3,0BH;\ M_Chr '0',12,30,8EH ;|"Digita il parametro Ombra 0=senza, 1=con " M_Chr '1',12,41,8EH ;/ ;\Rimane in attesa della pressione del numero ;|corrispondente al Parametro Ombra Cornice; MOV CH,'1' ;|si tratta di un numero (da 0 a 1) trasmesso MOV CL,'0' ;|immediatamente, messo a video nei rispettivi CALL ChkCmd2 ;|campi, in forma ascii e in forma esadecimale, ;/e salvato nella locazione di deposito corrente ;---------------------------------------------------------------------- M_msgC Testo16,12,3,0BH;\ M_Chr '0',12,42,8EH ;| M_Chr '0',12,43,8EH ;|"Digita il parametro Colore PrimoPiano, 00ö15" M_Chr '1',12,45,8EH ;| M_Chr '5',12,46,8EH ;/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti al Parametro Colore Primo Piano CALL ChkCmd1 ;|si tratta di una coppia di numeri (da 00 a 15) ;|trasmessa immediatamente, messa a video nei ;|rispettivi campi, in forma ascii e in forma ;|esadecimale, e salvata nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- M_msgC Testo17,12,3,0BH;\ M_Chr '0',12,42,8EH ;|"Digita il parametro Colore Sfondo, da 0 a 7" M_Chr '7',12,46,8EH ;/ ;\Rimane in attesa della pressione del numero ;|corrispondente al Parametro Colore Sfondo; MOV CH,'7' ;|si tratta di un numero (da 0 a 1) trasmesso MOV CL,'0' ;|immediatamente, messo a video nei rispettivi CALL ChkCmd2 ;|campi, in forma ascii e in forma esadecimale, ;/e salvato nella locazione di deposito corrente ;---------------------------------------------------------------------- ;\Stampa un messaggio di commento al COMANDO ;|impartito: ;| COMANDO #Raallrrcctopps Stampa una cornice MOV DH,CS:[RigTxDa];| ||||||||||||\--colore sfondo MOV DL,CS:[ColTxDa];| ||||||||||\*---colore primo piano INC DL ;| |||||||||\-----ombra M_COLOR 03H ;| ||||||||\------tipo di tratto M_CURSOR DH,DL ;| ||||||\*-------colonna angolo alto M_msgN TxT09 ;| ||||\*---------riga angolo alto ;| ||\*-----------larghezza ;/ \*-------------altezza ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ; /-------------------------------------------------------------------\ ; 14 | Gestione dei COMANDI con Parametro di tipo Stringa Ascii | ; \-------------------------------------------------------------------/ Tx_C38: CMP AL,'S' ;\ JE Tx_C39 ;| COMANDO "#Sa..a",0DH stampa Stringa Ascii JMP Tx_C41 ;| |||| \---carattere terminatore ;/ \***-------caratteri ascii ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Saa..aa~ | ; | -------------------------- | ; | Pone sul Monitor del | ; | Computer Remoto i caratteri| Tx_C39: LEA SI,Cmd18 ; | digitati in sequenza sulla | CALL Help ; | tastiera fino alla | ; | pressione del tasto | ; \----------------------------/ ;---------------------------------------------------------------------- M_msgC Testo18,12,3,0BH;\"Digita i caratteri e conferma con <" M_COLOR 8EH ;| M_msgN Testo19 ;| "Invio" M_COLOR 0BH ;| M_msgN Testo20 ;/ "> " MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ Tx_C40: CALL KEYwait ;\Rimane in attesa della pressione dei tasti CALL TxD_1 ;|corrispondenti ai caratteri della stringa CALL StampaTxD ;|desiderata, trasmettendoli immediatamente e CMP AL,Invio ;|mettendoli a video nei rispettivi campi, in JNE Tx_C40 ;/forma ascii e in forma esadecimale ;---------------------------------------------------------------------- ;\Gestisce la fase finale per la richiesta del M_recup 23,28,1,50,5000H;|COMANDO ~#Saa..aa~: recupera la Mappa dei JMP Tx_C03 ;|Comandi e rientra in attesa di un nuovo ;/COMANDO ; /-------------------------------------------------------------------\ ; 15 | Gestione dei COMANDI con due Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ Tx_C41: CMP AL,'T' ;\ COMANDO "#Tnn" Sequenza di COMANDI JE Tx_C42 ;| \*----Codice Sequenza nn=00ö99 JMP Tx_C45 ;/ ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Tnn~ | ; | -------------------------- | ; | Esegue molti COMANDI di | ; | questo Protocollo raccolti | ; | in una Sequenza di Stringhe| ; | caratterizzata dal codice | ; | numerico indicato dai due | Tx_C42: LEA SI,Cmd19 ; | codici ascii numerici tra | CALL Help ; | ~00~ e ~99~ passati come | ; | parametri. | ; | Attualmente disponibili: | ; | nø00-Lettura Tasti Remoti | ; | nø01-OUT su LPT1 e a video| ; | nø02-Conto alla rovescia | ; | Molte delle 100 stringhe | ; | sono ancora da definire... | ; \----------------------------/ ;-------------------------------------------------------------------- ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/del codice del COMANDO M_msgC Testo24,12,3,0BH;\ M_Chr '0',12,37,8EH ;| M_Chr '0',12,38,8EH ;|"Digita il parametro Numerico, da 00 a 99 " M_Chr '9',12,44,8EH ;| M_Chr '9',12,45,8EH ;/ MOV DH,CS:[RigTxDa];\Assume la riga e la colonna corrente e vi MOV DL,CS:[ColTxDa];|fissa il cursore CALL SET_cur ;/ MOV CX,2 Tx_C43: CALL KEYwait ;\Rimane in attesa della pressione dei numeri CMP AL,'9' ;|corrispondenti al Parametro desiderato; si JG Tx_C43 ;|tratta di una coppia di numeri messa a video CMP AL,'0' ;|nei rispettivi campi, in forma ascii e in JB Tx_C43 ;|forma esadecimale, e salvata nelle locazioni MOV CS:[DI],AL ;|di deposito corrente; data la particolare INC DI ;|tipologia questa volta la sequenza non viene CALL StampaTxD ;/trasmessa verso il Computer remoto LOOP Tx_C43 ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\Stampa un messaggio di commento al COMANDO MOV DL,CS:[ColTxDa];|impartito: INC DL ;| COMANDO "#Tnn" Sequenza di COMANDI M_COLOR 03H ;| \*----Codice Sequenza nn=00ö99 M_CURSOR DH,DL ;| M_msgN TxT11 ;/ ;\Locazioni Deposito per i 4 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV CX,2 ;\ Tx_C44: MOV AL,CS:[DI] ;| INC DI ;|Recupera il parametro Riga, da 00 a 24 M_COLOR 0BH ;|e lo pone a video in sequenza CALL BIOchr1 ;| LOOP Tx_C44 ;/ M_COLOR 03H ; ;M_recup altezza,larghezza,riga,colonna,salva M_recup 23 , 28 , 1 , 50 ,5000H MOV AL,Invio ;\Si utilizza in modo improprio il carattere 0DH CALL StampaTxD ;|(Invio) spedendolo alla procedura StampaTxD CALL Via_Cur ;|per mandare a capo le stringhe appena digitate ;/evitando comunque la stampa del suo valore ;\Gestisce la fase finale della richiesta di JMP CmdGEN ;/ciascuna STRINGA di COMANDI ; /-------------------------------------------------------------------\ ; 16 | Gestione dei COMANDI con 8 Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ ;\ COMANDO #Uaallrrcc Recupera una cornice Tx_C45: CMP AL,'U' ;| ||||||\*-------colonna angolo alto JE Tx_C46 ;| ||||\*---------riga angolo alto JMP Tx_C03 ;| ||\*-----------larghezza ;/ \*-------------altezza ;---------------------------------------------------------------------- ; /----------------------------\ ; | -------------------------- | ; | COMANDO ~#Uaallrrcc~ | ; | -------------------------- | ; | | ; | | ; | Recupera dal Monitor del | ; | Computer Remoto una cornice| ; | predisposta in precedenza | ; | -------------------------- | ; | I parametri sono stringhe | Tx_C46: LEA SI,Cmd21 ; | Ascii Numeriche e DEVONO | CALL Help ; | essere gli stessi passati | ; | in precedenza, nella fase | ; | di stampa della cornice | ; | altezza aa=03ö25 | ; | larghezza ll=03ö80 | ; | riga rr=00ö24 | ; | colonna cc=00ö79 | ; | | ; | | ; \----------------------------/ ;\Rimane in attesa della pressione dei numeri ;|corrispondenti ai Parametri: Altezza Cornice ;|(da 03 a 25), Larghezza Cornice (da 03 a 80), ;|Riga (da 00 a 24 e Colonna (da 00 a 79) e, CALL ChkCorn ;|dopo averli mostrati con i rispettivi messaggi ;|li trasmette immediatamente, li mette a video ;|nei rispettivi campi in forma ascii e in forma ;|esadecimale, e li salva nelle locazioni di ;/deposito corrente ;---------------------------------------------------------------------- MOV DH,CS:[RigTxDa];\ COMANDO #Uaallrrcc Recupera una cornice MOV DL,CS:[ColTxDa];| ||||||\*-------colonna angolo alto INC DL ;| ||||\*---------riga angolo alto M_COLOR 03H ;| ||\*-----------larghezza M_CURSOR DH,DL ;| \*-------------altezza M_msgN TxT12 ;/ ;\Gestisce la fase finale della richiesta di JMP EndCmd ;|ciascun COMANDO: recupera la Mappa dei Comandi ;|manda a capo il cursore nel campo di acquisi- ;/zione e rientra in attesa di un nuovo COMANDO ;/---------------------------------------------------------------------------\ ;| PROCEDURA : RxD_Key | ;| DESCRIZIONE : Con questa procedura il nostro computer controllore impone | ;| al Computer Remoto di rimanere in attesa della pressione di | ;| un tasto della sua tastiera, con il preciso ordine ("#H"). | ;| Non appena sulla tastiera remota viene premuto un tasto il | ;| suo codice ascii viene rispedito indietro ed Š ricevuto da | ;| questa procedura e lasciato in uscita in AL, per un suo | ;| eventuale utilizzo | ;\---------------------------------------------------------------------------/ ;\Il Computer Remoto Š obbligato a rimanere in RxD_Key:LEA SI,TxMsg_H ;|attesa della pressione di un tasto della sua CALL Tx_Msg ;|tastiera, su preciso ordine ("#H") del nostro ;/computer RxD_K1: CALL RxD_3 ;\Questo Computer rimane in attesa del codice CMP AH,00H ;|ascii del tasto premuto sulla tastiera remota JNZ RxD_K1 ;|e, non appena il dato Š attendibile (AH=00H) RET ;/il suo codice ascii Š lasciato in AL ;/---------------------------------------------------------------------------\ ;| PROCEDURA : CmdGEN | ;| DESCRIZIONE : Organizza la trasmissione di 100 diverse STRINGHE di COMANDI| ;| la grande parte ancora disponibili; per mostrare la sua| ;| utilit… sonoi disponibili alcuni esempi: | ;| Sequenza Comandi nø00 - Lettura Tasti Remoti | ;| Sequenza Comandi nø01 - Scrittura byte e OUT su LPT1 | ;| Sequenza Comandi nø02 - Conto alla rovescia - Gestione tempo| ;| Appendice al COMANDO "#Tnn" Sequenza di COMANDI | ;\---------------------------------------------------------------------------/ ;\Locazioni Deposito per i 2 caratteri ascii CmdGEN: LEA SI,DepoPar ;|digitati in fase di acquisizione del numero ;/d'ordine nn=00ö99 della Sequenza di COMANDI ADD SI,2 ;\La procedura "Dec2Byt" analizza una stringa MOV AL,00H ;|puntata da CS:SI, contenente rigorosamente al MOV CS:[SI],AL ;|massimo 2 caratteri SOLO Ascii NUMERICI e SUB SI,2 ;/terminata con 00H: prepara il terminatore ;\ COMANDO "#Tnn" Sequenza di COMANDI ;| \*----Codice Sequenza nn=00ö99 CALL Dec2Byt ;|Converte la coppia di caratteri ASCII numerici ;|(da "00" a "99"), puntata in ingresso da CS:SI ;|nel numero binario a 8 bit xyH corrispondente ;/lasciato in uscita in AL ;---------------------------------------------------------------------- CMP AL,00H ;\Controlla numero d'ordine della Sequenza di JNE CmdG01 ;/Comandi da servire ;/--------------------------------------------------------------------\ ;|Sequenza Comandi nø00 - Lettura Tasti Remoti-Stampa Desktop classico| ;*--------------------------------------------------------------------* ;| Il test mostra la possibilit… di interagire con il Computer Remoto | ;| al quale possono essere richiesti (e ricevuti) dati assunti da | ;| sensori o da altri dispositivi d'ingresso; in questo esempio il | ;| Computer Remoto Š obbligato a rimanere in attesa della pressione | ;| di un tasto sulla sua tastiera e a trasmettere di ritorno il | ;| codice ascii associato al tasto premuto. | ;| Sono previste 3 pause d'attesa tasto remoto e ricezione locale del | ;| del suo codice ascii, intrammezzate da 4 sequenze di Comandi: | ;| 1) con la prima predispone sul Monitor Remoto un Desktop classico, | ;| con Titolo ("Collaudo Trasmissione Stringa di Comandi") e | ;| messaggio sulla linea del Menu: | ;| ------------------------------------------------------------------ | ;| "#B" ; DeskTop Classico | ;| "#C" ; Fa sparire il cursore | ;| "#L007" ; testo nero, sfondo bianco | ;| "#K0022" ; riga 0, colonna 22 | ;| "#SCollaudo Trasmissione Stringa di Comandi",0DH | ;| "#K2419" ; riga 24, colonna 19 | ;| "#S Premi un tasto qualunque per cominciare ",0DH | ;| ------------------------------------------------------------------ | ;| 2) con la seconda inserisce una cornice con ombra contenente un | ;| messaggio di benvenuto: | ;| ------------------------------------------------------------------ | ;| "#R0760091011141" ; Cornice programmabile altezza 7,larghezza| ;| ; 60, riga 9, colonna 10, tratto doppio,| ;| ; ombra si, testo giallo, sfondo blu | ;| "#L151" ; testo bianco brillante, sfondo blu | ;| "#K1225" ; riga 12, colonna 25 | ;| "#S Benvenuto su www.Giobe2000.it ",0DH ; stringa | ;| "#L007" ; testo nero, sfondo bianco | ;| "#K2419" ; riga 24, colonna 19 | ;| "#SPremi un tasto qualunque per pulire lo schermo",0DH | ;| ------------------------------------------------------------------ | ;| 3) non appena viene premuto un tasto recupera l'area coperta dalla | ;| cornice, presenta un messaggio di commiato: | ;| ------------------------------------------------------------------ | ;| "#U07600910" ; Recupera la cornice, altezza 7, larghezza| ;| ; 60 riga 9, colonna 10 | ;| "#L007" ; testo nero, sfondo bianco | ;| "#K2419" ; riga 24, colonna 19 | ;| "#S Premi un tasto qualunque per terminare... ",0DH | ;| ------------------------------------------------------------------ | ;| 4) alla pressione del nuovo tasto pone termine al controllo remoto | ;| ------------------------------------------------------------------ | ;| "#A" ; Fai ClearScreen sul Monitor remoto | ;| "#D" ; Fa riapparire il cursore | ;\--------------------------------------------------------------------/ ; /----------------------------\ ; | -------------------------- | ; | SEQUENZA di COMANDI nø 00 | ; | -------------------------- | ; | Mentre leggi questo testo | ; | il Computer Remoto sta | ; | ricevendo molte stringhe di| ; | COMANDI con le quali questa| ; | postazione organizza il | ; | Desktop sul Monitor Remoto,| LEA SI,Cmd22 ; | aspettando di ritorno il | CALL Help ; | il codice Ascii del tasto | ; | premuto su tastiera Remota.| ; | Con la pressione di tasti | ; | si intende simulare, per | ; | esempio, la richiesta di | ; | dati assunti da sensori o | ; | letti da contatti remoti. | ; \----------------------------/ M_msgC Testo35,12,3,0BH;"Attendi la fine per rientrare in Modo COMANDI" LEA SI,TxMsg01 ;\Punta la prima Sequenza di stringhe di COMANDI CALL Tx_Msg ;/relativa la programma predisposto da "#T00" ;\Il Computer Remoto Š obbligato a rimanere in ;|attesa della pressione di un tasto della sua CALL RxD_Key ;|tastiera, su preciso ordine ("#H") del nostro ;|computer; questo Computer rimane in ricezione ;|fino all'arrivo del codice ascii del tasto ;/premuto sulla tastiera remota, lasciato in AL LEA SI,TxMsg02 ;\ CALL Tx_Msg ;| CALL RxD_Key ;|Trasmette le 3 rimanenti Sequenza di stringhe LEA SI,TxMsg03 ;|di COMANDI previste dal programma predisposto CALL Tx_Msg ;|da "#T00", obbligando, tra una e l'altra, il CALL RxD_Key ;|Computer Remoto a rimanere in attesa della LEA SI,TxMsg04 ;|pressione di un tasto sulla sua tastiera CALL Tx_Msg ;/ ;\Durante la ricezione della Sequenza di Strin- ;|ghe di COMANDI organizzata dal COMANDO "#Tnn", ;|viene evitato di consultare la tastiera per CmdG00: MOV AL,"#" ;|ridurre al minimo i tempi morti, forzando a 1 CALL TxD_1 ;|la variabile [StngMod]; al termine di ogni MOV AL,"I" ;|trasmissione di Sequenze di Stringhe COMANDI CALL TxD_1 ;|viene trasmesso il COMANDO "#I", per avvisare ;|la "Rx_Cmd" che pu• tornare a consultare la ;|tastiera, dando la possibilit… di porre ;/termine alla ricezione in ogni momento ;\Interrompe la sequenza dei COMANDI per assenza M_recup 23,28,1,50,5000H;|di interattivit…: recupera la Mappa dei Coman- JMP Tx_C03 ;/di e rientra in attesa di un nuovo COMANDO ;---------------------------------------------------------------------- CmdG01: CMP AL,01H ;\Controlla numero d'ordine della Sequenza di JNE CmdG06 ;/Comandi da servire ;/--------------------------------------------------------------------\ ;|Sequenza Comandi nø01 - Lettura Tasti, Scrittura byte e OUT si LPT1 | ;*--------------------------------------------------------------------* ;| Il test mostra nuove forme di interazione con il Computer Remoto | ;| mostrando la tecnica per intervenire sulla sua Porta Parallela LPT | ;| direttamente con comandi seriali. Sono previste 2 fasi; durante la | ;| prima sul Monitor Remoto Š predisposto un Desktop con Cornice di | ;| tipo 3, Intestazione standard nø0 ("Collaudo della Porta Seriale | ;| COM1-Protocollo:9600,N,2,8"),Menu nø0 ("Copyright www.giobe2000.it | ;| - ing. Giorgio OBER"), proposta di messaggi adatti ad organizzare | ;| la lettura della tastiera Remota e una piccola cornice nella quale | ;| visualizzare durante la seconda fase il byte da spedire alla LPT1: | ;| ------------------------------------------------------------------ | ;| "#G" ; Cornice di terzo tipo | ;| "#M0" ; Intestazione personalizzata nø0 | ;| "#N0" ; Menu personalizzato nø0 | ;| "#C" ; Fa sparire il cursore | ;| "#L150" ; testo bianco brillante, sfondo nero | ;| "#K1023" ; riga 10, colonna 23 | ;| "#SUscita Dato a 8 bit su porta parallela",0DH ; stringa | ;| "#R0308123800140" ; Cornice programmabile altezza 3,larghezza| ;| ; 8, riga 12, colonna 38, tratto semplice,| ;| ; ombra no, testo giallo, sfondo nero | ;| "#L150" ; testo bianco brillante, sfondo nero | ;| "#K1620" ; riga 16, colonna 20 | ;| "#S Premi un tasto e guarda sul connettore LPT1",0DH ; stringa| ;| "#L154" ; testo bianco brillante, sfondo rosso | ;| "#K1928" ; riga 19, colonna 28 | ;| "#S Premi per terminare ",0DH ; stringa | ;| ------------------------------------------------------------------ | ;| Dopo l'emissione della prima stringa di COMANDI il computer locale | ;| attiva un loop di continua verifica, nel quale: | ;| 1) aspetta un carattere Ascii in arrivo dal Computer Remoto per | ;| effetto del comando "#H" (Aspetta Pressione Tasto) | ;| 2) se si tratta del codice del tasto il servizio ha termine | ;| con il rientro locale in Modo Comandi e con la pulizia del | ;| Monitor Remoto (per effetto della trasmissione del COMANDO #A) | ;| 3) altrimenti con il codice da esso ricevuto provvede a fare OUT | ;| sulla porta parallela e a visualizzane il valore binario dentro | ;| la cornice al centro del Monitor Remoto, con il supporto del | ;| comando "#O" (OUT su LPT1) e di una seconda sequenza di Comandi | ;| ------------------------------------------------------------------ | ;| "#L140" ; testo giallo, sfondo nero | ;| "#K1341" ; riga 13, colonna 41 | ;| "#P" ; Visualizza la stringa del Byte xy | ;\--------------------------------------------------------------------/ ; /----------------------------\ ; | -------------------------- | ; | SEQUENZA di COMANDI nø 01 | ; | -------------------------- | ; | Mentre leggi questo testo | ; | il Computer Remoto sta | ; | ricevendo molte stringhe di| ; | COMANDI con le quali questa| ; | postazione organizza il | ; | Desktop sul Monitor Remoto,| ; | aspettando di ritorno il | LEA SI,Cmd23 ; | il codice Ascii del tasto | CALL Help ; | premuto su tastiera Remota.| ; | Il valore binario del byte | ; | Š poi rispedito dentro una | ; | cornice, sul Monitor remoto| ; | e contemporaneamente anche | ; | sulla porta LPT1 Remota. | ; | Il test evidenzia cos la | ; | possibilit… di controllare| ; | la Parallela via Seriale...| ; \----------------------------/ LEA SI,TxMsg11 ;\Trasmette la stringa con la prima parte dei CALL Tx_Msg ;|COMANDI, chiamati a predisporre il piano di ;/lavoro e a proporre i messaggi necessari M_msgC Testo35,12,3,0BH; "Premi un tasto per rientrare in Modo COMANDI" ;----------------------------------------------- ;\Il Computer Remoto Š obbligato a rimanere in CmdG02: LEA SI,TxMsg_H ;|attesa della pressione di un tasto della sua CALL Tx_Msg ;|tastiera, su preciso ordine ("#H") del nostro ;/computer CmdG03: CALL RxD_3 ;\Questo Computer rimane in attesa del codice CMP AH,00H ;|ascii del tasto premuto sulla tastiera remota JZ CmdG04 ;|e, non appena il dato Š attendibile (AH=00H) ;/(e presente in AL) passa ad interpretarlo MOV AH,01H ;\Altrimenti verifica la pressione tasti SENZA INT 16H ;|FERMARSI per garantire una via d'uscita, in JZ CmdG03 ;/assenza di dati in arrivo dal Computer Remoto ;----------------------------------------------- CALL KEYwait ; ;\Interrompe la sequenza dei COMANDI per assenza JMP CmdG00 ;|di interattivit…: recupera la Mappa dei Coman- ;/di e rientra in attesa di un nuovo COMANDO ;----------------------------------------------- CmdG04: CMP AL,ESC_ ;\Se, sulla tastiera Remota, Š stato premuto ESC ;|la sequenza dei COMANDI viene interrotta per JNZ CmdG05 ;|espresso ordine del Computer Remoto; per dar LEA SI,TxMsg_A ;|segno di aver capito questo terminale trasmet- CALL Tx_Msg ;|te la stringa del COMANDO #A", imponendo il ;/ClearScreen sul Monitor remoto ;\Interrompe la sequenza dei COMANDI per assenza JMP CmdG00 ;|di interattivit…: recupera la Mappa dei Coman- ;/di e rientra in attesa di un nuovo COMANDO ;---------------------------------------------------------------------- CmdG05: ;\Il byte appena ricevuto (il codice Ascii del PUSH AX ;|Tasto premuto sulla Tastiera Remota) viene LEA SI,TxMsg_O ;|rispedito verso la Porta Parallela Remota con CALL Tx_Msg ;|il COMANDO "#Oxy" ("OUT Dato a 8bit su LPT1") POP AX ;/ ;\Per rispettare la sintassi del COMANDO "#Oxy" ;|il byte ricevuto deve essere trasformato in 2 PUSH AX ;|caratteri ascii alfanumerici, "xy", associati CALL Byt2Com ;|ai suoi 2 nibble, con l'aiuto della Byt2Com ;|che provvede anche a spedirli direttamente ;/sulla linea seriale ;\Provvede alla trasmissione della stringa con ;|la parte finale dei COMANDI, con il compito di LEA SI,TxMsg12 ;|mettere anche a video (al centro della cornice CALL Tx_Msg ;|predisposta sul Monitor Remoto) la coppia di POP AX ;|caratteri ascii alfanumerici associati al byte CALL TxD_1 ;|del tasto premuto in precedenza, con l'aiuto ;|del COMANDO "#Pxy", specializzato in questo ;/("Visualizza la stringa del Byte xyH" JMP CmdG02 ; Ripete la trasmissione della sequenza Comandi ;-------------------------------------------------------------------- CmdG06: CMP AL,02H ;\Controlla numero d'ordine della Sequenza di JNE CmdG08 ;/Comandi da servire ;/--------------------------------------------------------------------\ ;|Sequenza Comandi nø02 - Conto alla rovescia - Gestione tempo remoto | ;*--------------------------------------------------------------------* ;| Il test mostra la possibilit… di interagire con il Computer Remoto | ;| per proporre su di esso alcuni eventi temporizzati, con il supporto| ;| di 2 diverse serie di sequenze di Comandi; con la prima predispone | ;| sul Monitor Remoto un Desktop Classico con Intestazione dedicata | ;| ("Gestione CountDown Remoto") ed inserisce una piccola cornice con | ;| ombra al centro del Monitor Remoto: | ;| ------------------------------------------------------------------ | ;| "#B" ; DeskTop Classico | ;| "#C" ; Fa sparire il cursore | ;| "#L007" ; testo nero, sfondo bianco | ;| "#K0029" ; riga 0, colonna 29 | ;| "#SGestione CountDown Remoto",0DH | ;| "#R0309123611141" ; Cornice programmabile altezza 3,larghezza| ;| ; 9, riga 12, colonna 36, tratto doppio,| ;| ; ombra si, testo giallo, sfondo blu | ;| Dopo l'emissione della prima stringa di COMANDI il computer locale | ;| attiva un loop di continua verifica, nel quale spedisce al Computer| ;| Remoto un byte di valore decrescente, da 09H a 00H, con il comando | ;| "#P" (Visualizza la stringa del Byte xy), con cadenza di 1 secondo.| ;| ------------------------------------------------------------------ | ;| "#L151" ; testo bianco brillante, sfondo blu | ;| "#K1340" ; riga 13, colonna 40 | ;| "#D" ; Fa riapparire il cursore | ;| "#P" ; Visualizza la stringa del Byte xy | ;| Al termine del conteggio alla rovescia trasmette la seconda serie | ;| di stringhe di Comandi con la quale predispone sul Monitor Remoto | ;| una sequenza di messaggi ed eventi temporizzati: con cadenza di 2 | ;| secondi recupera lo spazio occupato dalla cornice e produce la | ;| pulizia completa del Monitor. | ;| ------------------------------------------------------------------ | ;| "#L007" ; testo nero, sfondo bianco | ;| "#K2424" ; riga 24, colonna 24 | ;| "#S CountDown Terminato ",0DH | ;| "#J36" ; Consuma un ritardo pari a 36*55ms= 2 sec | ;| "#U03091236" ; Recupera la cornice altezza 3,larghezza| ;| ; 9, riga 12, colonna 36 | ;| "#L047" ; testo rosso, sfondo bianco | ;| "#K2424" ; riga 24, colonna 24 | ;| "#SIl controllo terminer… tra 2 secondi",0DH | ;| "#J36" ; Consuma un ritardo pari a 36*55ms= 2 sec | ;| "#A" ; Fai ClearScreen sul Monitor remoto | ;| "#D" ; Fa riapparire il cursore | ;\--------------------------------------------------------------------/ ; /----------------------------\ ; | -------------------------- | ; | SEQUENZA di COMANDI nø 3 | ; | -------------------------- | ; | Mentre leggi questo testo | ; | il Computer Remoto sta | ; | ricevendo una stringa ascii| ; | con molti COMANDI previsti | ; | dal protocollo. | ; | Questo Computer organizza | ; | la messa a video dentro una| LEA SI,Cmd24 ; | cornice sul Monitor Remoto | CALL Help ; | di un Conto alla Rovescia | ; | da 9 a 0; al termine, dopo | ; | 2 secondi toglie la cornice| ; | e, dopo altri 2 secondi, | ; | toglie il collegamento. | ; | Ogni azione Š comunque | ; | imposta da questo Computer | ; | senza che quello Remoto | ; | possa sottrarsi all'obbligo| ; | | ; \----------------------------/ ;----------------------------------------------- LEA SI,TxMsg21 ;\Trasmette la stringa con la prima parte dei CALL Tx_Msg ;|COMANDI, chiamati a predisporre il piano di ;|lavoro e la piccola cornice destinata ad ;/accogliere i numeri del CountDown Remoto M_msgC Testo35,12,3,0BH; "Premi un tasto per rientrare in Modo COMANDI" ;----------------------------------------------- MOV CX,10 ;\Predispone i valori corretti per gestire il MOV AL,09H ;/contatore desiderato ;\Provvede alla trasmissione della stringa con CmdG07: PUSH AX ;|il compito di mettere a video (al centro della LEA SI,TxMsg22 ;|cornice predisposta sul Monitor Remoto) la CALL Tx_Msg ;|coppia di caratteri ascii alfanumerici POP AX ;|associati al byte del countdown, con l'aiuto ;|del COMANDO "#Pxy", specializzato in questo ;/("Visualizza la stringa del Byte xyH" ;\Per rispettare la sintassi del COMANDO "#Pxy" CALL TxD_1 ;|il byte deve essere spedito direttamente nella ;/sua forma esadecimale CALL Del_1000 ;\ DEC AL ;|Gestisce il contatore "indietro" LOOP CmdG07 ;/ ;----------------------------------------------- ;\Provvede alla trasmissione della stringa con ;|la parte finale dei COMANDI, con il compito di LEA SI,TxMsg23 ;|proporre sul Monitor Remoto una sequenza di CALL Tx_Msg ;|messaggi ed eventi temporizzati: con cadenza ;|di 2 secondi recupera lo spazio occupato dalla ;|cornice e produce la pulizia completa del ;/Monitor ;----------------------------------------------- ; PER ORA NON SONO DISPONIBILI ALTRI SERVIZI ;----------------------------------------------- ;\Interrompe la sequenza dei COMANDI per assenza CmdG08: JMP CmdG00 ;|di interattivit…: recupera la Mappa dei Coman- ;/di e rientra in attesa di un nuovo COMANDO ;/---------------------------------------------------------------------------\ ;| PROCEDURA : Rx_Cmd ******* GESTISCE I COMANDI IN ARRIVO ********** | ;| DESCRIZIONE : Pi— che una procedura fine a se stessa si tratta di una| ;| appendice alla precedente "FraseTxR", con il compito di| ;| ricevere i COMANDI diretti dal computer remoto. | ;| Questo codice viene eseguito sul computer remoto non appena| ;| (nell'ambito della FraseTxR) viene ricevuto il byte di| ;| protocollo FFH dal computer remoto, a conferma della scelta| ;| fatta l'utente (pressione del tasto F2) sul computer master.| ;| Prima di iniziare ad interpretare i comandi in arrivo mostra| ;| all'utente un messaggio che avvisa che sta per passare nella| ;| nuova situazione subordinata al computer remoto, e rimane| ;| in attesa della pressione di un tasto; alla conferma (o allo| ;| scadere di un timeout di 5 secondi e mezzo) spedisce di| ;| ritorno il byte di sincronismo FFH, per avvisare il computer| ;| remoto che Š disponibile a ricevere i suoi COMANDI. Notare| ;| che quest'ultimo non provvederā a controllare l'arrivo di| ;| questo byte per cominciare a spedire suoi comandi, dando per| ;| scontata la dsponibilitā del computer remoto; la possibilitā| ;| di utilizzare proficuamente del byte FFH trasmesso da questa| ;| procedura č lasciata per applicazioni future. | ;| Da questo momento questo computer Š configurato per ricevere| ;| i comandi previsti dal protocollo, condiviso con il computer| ;| master, ed Š obbligato ad interpretare i bytes in arrivo| ;| come ~azioni~ da eseguire. Su richiesta del Computer master| ;| pu• eventualmente restituire messaggi o dati ma non gli sar…| ;| possibile intervenire sul suo controllo... | ;| L'elenco dei COMANDI possibili (tutti con carattere "#" per| ;| prefisso) sono elencati nella descrizione della "Tx_Cmd". | ;| Dopo la ricezione di ogni COMANDO sebbene non sia ovviamente| ;| nŠ possibile nŠ opportuno specificare modo esplicito i tasti| ;| autorizzati, Š possibile intervenire da tastiera per porre| ;| termine alla procedura, con la pressione di , o per| ;| annullare la sessione di trasmissione COMANDI, esercitando| ;| una Risincronizzazione con il computer remoto, con la| ;| pressione del tasto F1. | ;\---------------------------------------------------------------------------/ ; /-------------------------------------------------------------------\ ; 01 | Gestione del Messaggio di presentazione con TimeOut automatico | ; \-------------------------------------------------------------------/ ;\Prima di iniziare ad interpretare i comandi in Rx_Cmd: CALL DESK_F ;|arrivo avvisa l'utente della nuova situazione, ;|subordinata al computer remoto,con un adeguato ;/messaggio ;\Legge il tempo reale corrente del giorno dalle ;|locazioni di sistema da 0000:046CH e prepara MOV AX,100 ;|in CX,DX il numero a 32 bit dei TICKs prodotti CALL RD_Time ;|nell'arco della giornata fino a questo momento ;|sommato alla valore corrispondente al ritardo ;/da consumare, previsto di 5,5 secondi (=100) ;\Controlla se il tempo reale corrente ha Rx_C00: CALL ChkTime ;|raggiunto quello equivalente al numero a 32bit CMP AH,00H ;|presente in ingresso in CX,DX; se il tempo JNZ Rx_C01 ;|previsto Š stato consumato la procedura ;/termina con AH=01H; altrimenti con AH=00H MOV AH,01H ;\Controlla la pressione di tasti SENZA FERMARSI INT 16H ;|per garantire la lettura del messaggio; se NON JZ Rx_C00 ;|Š stato premuto alcun tasto (ffZ="1") continua CALL KeyWait ;|la verifica del tempo; altrimenti interrompe ;/l'attesa, pulendo il Buffer della tastiera ; /-------------------------------------------------------------------\ ; 02 | Predispone il DeskTop adatto alla Ricezione in Modo COMANDI | ; \-------------------------------------------------------------------/ ;\Non appena l'utente conferma premendo un tasto ;|o se il tempo riservato per la lettura Š finito Rx_C01: MOV AL,0FFH ;|viene spedito di ritorno il byte FFH; questa CALL TxD_1 ;|operazione avvisa il programma remoto che Š il ;/momento di cominciare a trasmettere COMANDI Rx_C0_: CALL BIOScls ;\In ogni caso pulisce lo schermo, in attesa di ;/ interpretare i COMAMDI ;M_corn altezza,larghezza,riga,colonna,colore,tipo,ombra,salva M_corn 3 , 69 , 3 , 5 , 2AH , 01 , 01 ,1000H M_msgC Testo36,4,13,2FH;"Computer Remoto Š pronto in attesa di COMANDI" ; /-------------------------------------------------------------------\ ; 03 | Punto di Rientro del MAIN LOOP nella Ricezione in Modo COMANDI | ; \-------------------------------------------------------------------/ ;\Se Š in atto la ricezione di una Sequenza di Rx_C02: ;|Stringhe di COMANDI, organizzata dal COMANDO CMP Byte Ptr CS:[StngMod],01;|"#Tnn",viene evitato di consultare la tastiera JZ Rx_C05 ;|per ridurre al minimo i tempi morti per inter- ;/cessione della variabile [StngMod], posta a 1 ;----------------------------------------------- ;\Controlla la pressione di tasti SENZA FERMARSI MOV AH,01H ;|per garantire la trasmissione di dati; se NON INT 16H ;|Š stato premuto alcun tasto (ffZ="1") continua JZ Rx_C05 ;/verificando se Š pronto un dato in Ricezione CALL KeyWait ; Altrimenti analizza il codice tasto premuto ;----------------------------------------------- CMP AL,ESC_ ;\/--------------------------------------------\ JNZ Rx_C03 ;|| Servizio tasto : Fine Ricetrasmissione| ;|\--------------------------------------------/ RET ;/Il programma viene terminato con rientro a DOS ;---------------------------------------------------------------------- Rx_C03: CMP AL,00H ;\Se non si tratta del tasto funzionale F1 si JNZ Rx_C05 ;/provvede ad ricevere i comandi ;----------------------------------------------- ;\/--------------------------------------------\ ;|| Servizio di Risincronizzazione (tasto )| ;|\--------------------------------------------/ CMP AH,F1 ;|Se uno dei 2 computer perde il collegamento Š JNZ Rx_C04 ;/possibile ripristinarlo MOV Byte Ptr CS:[COMANDI],00;\Fissa la modalit… di servizio per Modo NORMALE MOV Byte Ptr CS:[PrntMod],00;/ ;\Ripropone messaggio "Sono in attesa di RICE- CALL DESK_9 ;|ZIONE dal Computer Remoto" e reinizializza le ;/variabili del Test Seriale ;\NB: recupera con POP AX la posizione pendente POP AX ;|nello stack dovuta alla chiamata "CALL Rx_Cmd" ;/per poter tornare con JMP invece che con "RET" JMP xxx01 ;\Rientra nel programma principale e rimane in ;/attesa del byte 0AAH di Risincronizzazione ;----------------------------------------------- ;\/--------------------------------------------\ ;|| Servizio tasto : " Modo Normale" | Rx_C04: ;|\--------------------------------------------/ MOV Byte Ptr CS:[PrntMod],00;| MOV Byte Ptr CS:[COMANDI],00;|Si desidera rientrare nel Modo Normale, "Chat" CALL DESK_8 ;|cioŠ alla ricetrasmissione di caratteri ascii CALL CampiD ;|proposti nei normali riquadri ad essi destina- CALL Barra1 ;|ti e reinizializza le variabili del Test CALL Barra2 ;| JMP FraseTxR ;/ ; /-------------------------------------------------------------------\ ; 04 | Punto di Ingresso nella Gestione di ogni nuovo COMANDO | ; \-------------------------------------------------------------------/ Rx_C05: CALL RxD_3 ;\Riceve le stringhe di COMANDI dalla SERIALE; CMP AH,00H ;|se il dato Š attendibile (AH=00H) Š lasciato JNZ Rx_C02 ;/in AL altrimenti rimane in attesa di ricezione ;\Il primo carattere da ricevere dal Computer CMP AL,'#' ;|remoto deve essere il prefisso di COMANDI, "#" JNZ Rx_C02 ;/previsto dal protocollo ;---------------------------------------------------------------------- Rx_C06: CALL RxD_3 ;\Se il prefisso Š arrivato la prossima lettura CMP AH,00H ;|deve essere una delle lettere previste dal JNZ Rx_C06 ;|protocollo, da "A" a "U"; se il dato Š atten- ;/dibile (AH=00H) la lettera Š lasciata in AL ;---------------------------------------------------------------------- CMP AL,'#' ;\Se viene ricevuto un secondo carattere "#" JZ Rx_C04 ;|significa che il Computer che in precedenza ha ;|richiesto il Modo Comandi ora desidera tornare ;/nel Modo Normale ;---------------------------------------------------------------------- AND AL,11011111B ;\Controlla se il carattere ricevuto corrisponde CMP AL,'U' ;|ad un COMANDO ammesso (A, B, C,...) JG Rx_C07 ;|/--------------------------------------------\ CMP AL,'A' ;|| FINORA ammessi: A B C D E F G H I J K L | JGE Rx_C08 ;|| M N O P Q R S T U . . . | ;/\--------------------------------------------/ Rx_C07: CALL ErrCOM ;\Mostra un messaggio di Errore: "COMANDO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione ; /-------------------------------------------------------------------\ ; 05 | Gestione dei COMANDI senza Parametri | ; \-------------------------------------------------------------------/ ;\ COMANDO "#A ClearScreen Clasico ;| COMANDO "#B DeskTop Classico Rx_C08: CMP AL,'I' ;| COMANDO "#C Fa sparire il cursore JBE Rx_C09 ;| COMANDO "#D Fa tornare il cursore JMP Rx_C18 ;| COMANDO "#D Fa tornare il cursore ;| COMANDO "#E Cornice di primo tipo ;| COMANDO "#F Cornice di secondo tipo ;| COMANDO "#G Cornice di terzo tipo ;| COMANDO "#H Aspetta Pressione Tasto ;/ COMANDO "#I Fine sequenza COMANDI #Tnn ;---------------------------------------------------------------------- Rx_C09: CMP AL,'A' ;\Servizio per il COMANDO "#A" JNE Rx_C10 ;/ClearScreen Classico CMP Byte Ptr CS:[StngMod],01;\Se NON Š in atto la ricezione di una Sequenza JNZ Rx_C__ ;|di Stringhe di COMANDI organizzata dal COMANDO ;/"#Tnn" viene semplicemente pulito lo schermo ;----------------------------------------------- ;\Altrimenti (servizio #A in coda a una Sequenza ;|di Stringhe di COMANDI organizzata dal COMANDO JMP Rx_C0_ ;|"#Tnn" il servizio di Clearscreen viene ;|arricchito con il messaggio di attesa: ;/"Computer Remoto Š pronto in attesa di COMANDI" ;----------------------------------------------- Rx_C__: CALL BIOScls ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C10: CMP AL,'B' ;\Servizio per il COMANDO "#B" JNE Rx_C11 ;/DeskTop Classico CALL DeskCom ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C11: CMP AL,'C' ;\Servizio per il COMANDO "#C" JNE Rx_C12 ;/Fa sparire il cursore CALL Via_Cur ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C12: CMP AL,'D' ;\Servizio per il COMANDO "#D" JNE Rx_C13 ;/Fa tornare il cursore CALL Rip_Cur ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C13: CMP AL,'E' ;\Servizio per il COMANDO "#E" JNE Rx_C14 ;/Cornice del primo tipo CALL Cornice1 ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C14: CMP AL,'F' ;\Servizio per il COMANDO "#F" JNE Rx_C15 ;/Cornice del secondo tipo CALL Cornice2 ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C15: CMP AL,'G' ;\Servizio per il COMANDO "#G" JNE Rx_C16 ;/Cornice del terzo tipo CALL Cornice3 ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C16: CMP AL,'H' ;\Servizio per il COMANDO "#H" JNE Rx_C17 ;/Aspetta Pressione Tasto CALL KEYwait ;\Esegue il servizio richiesto e, al termine, CALL TxD_1 ;|dopo aver trasmesso il codice del Tasto premuto JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C17: CMP AL,'I' ;\Servizio per il COMANDO "#I" JNE Rx_C18 ;/ Fine sequenza COMANDI "#Tnn" ;---------------------------------------------------------------------- ;\Se la ricezione di una Sequenza di Stringhe di ;|COMANDI, organizzata dal COMANDO "#Tnn", si ;|ritiene ultimata, bisogna forzare la variabile MOV Byte Ptr CS:[StngMod],00;|[StngMod] a 0 per consentire alla "Rx_Cmd" di ;|tornare a consultare la tastiera, consentendo ;/in ogni momento di porre termine alla ricezion JMP Rx_C05 ; Torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 06 | Gestione del COMANDO Colore con 2 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Rx_C18: CMP AL,'J' ;\ COMANDO #Jnn" Ritardo programmabile JNE Rx_C22 ;| \*---numero n=01ö99 ;/ Consuma un ritardo pari a 55ms*nn ;---------------------------------------------------------------------- ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/relativi alla Costante di ritardo del COMANDO MOV CX,2 Rx_C19: CALL RxD_3 ;\Il COMANDO "J" prevede la ricezione di 2 CMP AH,00H ;|PARAMETRI NUMERICI; quando il dato Š JNZ Rx_C19 ;|attendibile (AH=0H) il valore Š lasciato in AL CMP AL,'9' ;|Rimane in attesa della pressione del numero JG Rx_C20 ;|corrispondente alla Costante di Tempo; CMP AL,'0' ;|si tratta di una coppia di caratteri tra JGE Rx_C21 ;/"01" e "99" Rx_C20: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione Rx_C21: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito i 4 caratte- INC DI ;|ri ascii numerici, a disposizione del codice LOOP Rx_C19 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO #Jnn" ;/Ritardo programmabile, numero n=01ö99 CALL DelayTx ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 07 | Gestione del COMANDO GoToXY con 4 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Rx_C22: CMP AL,'K' ;\ COMANDO "#Krrcc" Coordinate di stampa JNE Rx_C26 ;| ||\*--colonna cc=00ö79 ;/ \*-------riga rr=00ö24 ;---------------------------------------------------------------------- ;\Locazioni Deposito per i 4 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV CX,4 Rx_C23: CALL RxD_3 ;\Il COMANDO "K" prevede la ricezione di 4 CMP AH,00H ;|PARAMETRI NUMERICI; quando il dato Š attendi- JNZ Rx_C23 ;|bile (AH=0H) il numero Š lasciato in AL CMP AL,'9' ;|Rimane in attesa dei numeri corrispondenti ai JG Rx_C24 ;|Parametri Riga e Colonna desiderati; si tratta CMP AL,'0' ;|di 2 coppie di numeri, la prima da 00 a 24 e JGE Rx_C25 ;/la seconda da 00 a 79 Rx_C24: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione ;---------------------------------------------------------------------- Rx_C25: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito i 4 caratte- INC DI ;|ri ascii numerici, a disposizione del codice LOOP Rx_C23 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Krrcc" ;/Coordinate di stampa, rr=00ö24, cc=00ö79 CALL GoToXY ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 08 | Gestione del COMANDO Colore con 3 Parametri di tipo Ascii Numerico| ; \-------------------------------------------------------------------/ Rx_C26: CMP AL,'L' ;\ COMANDO "#Lpps" Colore testo sfondo JNE Rx_C30 ;| ||\--sfondo s=0ö7 ;/ \*---primo piano pp=00ö15 ;---------------------------------------------------------------------- ;\Locazioni Deposito per i 3 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle coordinate del COMANDO MOV CX,3 Rx_C27: CALL RxD_3 ;\Il COMANDO "L" prevede la ricezione di 3 CMP AH,00H ;|PARAMETRI NUMERICI; quando il dato Š attendi- JNZ Rx_C27 ;|bile (AH=0H) il numero Š lasciato in AL CMP AL,'9' ;|Rimane in attesa dei numeri corrispondenti ai JG Rx_C28 ;|Parametri Colore Primo Piano e Colore Sfondo CMP AL,'0' ;|desiderati; si tratta di 3 numeri, la coppia JGE Rx_C29 ;/da 00 a 15 e un valore da 0 a 7 Rx_C28: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione ;---------------------------------------------------------------------- Rx_C29: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito i 4 caratte- INC DI ;|ri ascii numerici, a disposizione del codice LOOP Rx_C27 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Lpps" ;/Colore primo piano pp=00ö15 sfondo s=0ö7 CALL Colore ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 09 | Gestione dei COMANDI con un solo Parametro di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ Rx_C30: CMP AL,'M' ;\ JE Rx_C31 ;| COMANDO "#Mn", Intestazione personalizzata CMP AL,'N' ;| COMANDO "#Nn", Menu personalizzato JNE Rx_C36 ;| \---tipo,n=0ö9 ;---------------------------------------------------------------------- Rx_C31: PUSH AX ; Salva il carattere del COMANDO, "M" o "N" ;\Locazione Deposito per il carattere ascii LEA DI,DepoPar ;|numerico digitato in fase di acquisizione ;/del Tipo del COMANDO Rx_C32: CALL RxD_3 ;\ CMP AH,00H ;|I COMANDI "M" o "N" prevedono la ricezione di JNZ Rx_C32 ;|un PARAMETRO NUMERICO, da "0" a "9"; se il CMP AL,'9' ;|dato Š attendibile (AH=0H) il numero Š JG Rx_C33 ;|lasciato in AL e si provvede a controlle se CMP AL,'0' ;|corrisponde ad uno di quello attesi JGE Rx_C34 ;/ Rx_C33: POP AX ;\Mostra un messaggio di Errore: "PARAMETRO NON CALL ErrPAR ;|RICONOSCIUTO" e pone termine alla sessione JMP Rx_C02 ;/ ;---------------------------------------------------------------------- Rx_C34: MOV CS:[DI],AL ; Salva il carattere numerico, da "0" a "9" POP AX ; Recupera il carattere del COMANDO, "M" o "N" ;---------------------------------------------------------------------- CMP AL,'M' ;\Servizio per il COMANDO "#Mn" JNE Rx_C35 ;/Intestazione personalizzata tipo,n=0ö9 CALL Intesta ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;---------------------------------------------------------------------- Rx_C35: CMP AL,'N' ;\Servizio per il COMANDO "#Nn" JNE Rx_C36 ;/Menu personalizzato tipo,n=0ö9 CALL MenuCom ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 10 | Gestione dei COMANDI con un solo Parametro tipo Ascii Esadecimale | ; \-------------------------------------------------------------------/ Rx_C36: CMP AL,'O' ;\ COMANDO "#Oxy" OUT Dato a 8 bit su LPT1 JNE Rx_C41 ;| \----stringa ascii di 2 caratteri ;| corrispondenti al valore del ;/ numero binario a 8 bit ;---------------------------------------------------------------------- ;\Locazioni Deposito per i 2 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/dei nibble del byte richiesto dal COMANDO MOV CX,2 Rx_C37: CALL RxD_3 ;\Il COMANDO "O" prevede la ricezione di 2 CMP AH,00H ;|PARAMETRI ALFANUMERICI; quando il dato Š JNZ Rx_C37 ;|attendibile (AH=0H) il valore Š lasciato in AL CMP AL,'9' ;|Rimane in attesa della pressione del numero JG Rx_C39 ;|corrispondente al Tipo di Comando desiderato; CMP AL,'0' ;|si tratta di una coppia di caratteri tra JGE Rx_C40 ;/"0" e "9" e tra "A" e "F" Rx_C38: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione Rx_C39: AND AL,11011111B ;| CMP AL,'F' ;| JG Rx_C38 ;| CMP AL,'A' ;| JB Rx_C38 ;| ;---------------------------------------------------------------------- Rx_C40: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito i 4 caratte- INC DI ;|ri ascii numerici, a disposizione del codice LOOP Rx_C37 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Oxy" ;/OUT Dato a 8 bit su LPT1 CALL OutLPT ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 11 | Gestione dei COMANDI con un solo Parametro di tipo Binario a 8 Bit| ; \-------------------------------------------------------------------/ Rx_C41: CMP AL,'P' ;\ COMANDO "#Pxy" visualizzazione di Byte JNE Rx_C43 ;| \-----valore binario a 8 bit xyH ;/ ;---------------------------------------------------------------------- Rx_C42: CALL RxD_3 ;\Il COMANDO "P" prevede la ricezione di un CMP AH,00H ;|PARAMETRO BINARIO; quando il dato Š attendibi- JNZ Rx_C42 ;/le (AH=0H) il valore a 8 bit Š lasciato in AL ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Pxy" ;|Visualizzazione del Byte xyH nella posizione ;/di stampa e nel colore corrente CALL Byt2Asc ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 12 | Gestione dei COMANDI con un solo Parametro di tipo Binario a 16bit| ; \-------------------------------------------------------------------/ Rx_C43: CMP AL,'Q' ;\ COMANDO #Qxywz Visualizzazione di Word JNE Rx_C46 ;| \----valore binario a 16bit xywzH ;/ ;---------------------------------------------------------------------- Rx_C44: CALL RxD_3 ;\Il COMANDO "Q" prevede la ricezione di un CMP AH,00H ;|PARAMETRO BINARIO; quando il dato Š attendibi- JNZ Rx_C44 ;/le (AH=0H) il valore a 8 bit Š lasciato in AL MOV BH,AL ; Salva in BH la parte alta della word xywzH Rx_C45: CALL RxD_3 ;\ CMP AH,00H ;|Assume anche la parte bassa della word xywzH JNZ Rx_C45 ;/ MOV AH,BH ;\In AL c'Š la parte bassa della word xywzH; ;/formatta AX con la parte alta, ancora in BH ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Qxywz" ;|Visualizzazione della Word xywzH nella ;/posizione di stampa e nel colore corrente CALL Wor2Asc ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 13 | Gestione dei COMANDI con 13 Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ ;\ COMANDO #Raallrrcctopps Stampa una cornice ;| ||||||||||||\--colore sfondo ;| ||||||||||\*---colore primo piano Rx_C46: CMP AL,'R' ;| |||||||||\-----ombra JNE Rx_C50 ;| ||||||||\------tipo di tratto ;| ||||||\*-------colonna angolo alto ;| ||||\*---------riga angolo alto ;| ||\*-----------larghezza ;/ \*-------------altezza ;---------------------------------------------------------------------- ;\Locazioni Deposito per i 13 caratteri ascii LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/delle specifiche del COMANDO MOV CX,13 Rx_C47: CALL RxD_3 ;\Il COMANDO "R" prevede la ricezione di 13 CMP AH,00H ;|PARAMETRI NUMERICI; quando il dato Š attendi- JNZ Rx_C47 ;|bile (AH=0H) il numero Š lasciato in AL CMP AL,'9' ;|Rimane in attesa dei numeri corrispondenti a: JG Rx_C48 ;|03ö25 altezza compresa cornice CMP AL,'0' ;|03ö80 larghezza compresa cornice JGE Rx_C49 ;|00ö24 riga angolo in alto a sinistra ;|00ö79 colonna angolo in alto a sinistra ;| 0ö1 tipo 0=tratto semplice; 1=tratto doppio ;| 0ö1 ombra 0=senza; 1=con ombreggiatura ;|00ö15 colore della cornice ;/ 0ö7 colore dello sfondo Rx_C48: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione ;---------------------------------------------------------------------- Rx_C49: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito i 13 carat- INC DI ;|teri ascii numerici, a disposizione del codice LOOP Rx_C47 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Raallrrcctopps" ;/Stampa di Cornice CALL CornCom ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ; /-------------------------------------------------------------------\ ; 14 | Gestione dei COMANDI con Parametro di tipo Stringa Ascii | ; \-------------------------------------------------------------------/ Rx_C50: CMP AL,'S' ;\ COMANDO "#Sa..a",0DH stampa Stringa Ascii JNE Rx_C53 ;| |||| \---carattere terminatore ;/ \***-------caratteri ascii ;---------------------------------------------------------------------- Rx_C51: CALL RxD_3 ;\Il COMANDO "S" prevede la ricezione di alcuni CMP AH,00H ;|CARATTERI alfanumerici; se il carattere Š JNZ Rx_C51 ;|attendibile (AH=0H) Š lasciato in AL CMP AL,Invio ;|Ciascun carattere Š posto a video in sequenza, JNZ Rx_C52 ;|nella posizione di stampa corrente, fino alla JMP Rx_C02 ;|ricezione del byte 0DH (Invio) ricevuto il Rx_C52: CALL BIOchr1 ;|quale torna in attesa di ricezione di altri JMP SHORT Rx_C51 ;/COMANDI ; /-------------------------------------------------------------------\ ; 15 | Gestione dei COMANDI con due Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ Rx_C53: CMP AL,'T' ;\ COMANDO "#Tnn" Sequenza di COMANDI JNE Rx_C54 ;/ \*----Codice Sequenza nn=00ö99 ;---------------------------------------------------------------------- ;\Quando si da' inizio alla ricezione di una ;|Sequenza di Stringhe di COMANDI (per effetto ;|di questo COMANDO "#Tnn") bisogna forzare la MOV Byte Ptr CS:[StngMod],01;|variabile [StngMod] a 1 per evitare alla ;|"Rx_Cmd" di consultare la tastiera, al fine di ;/ridurre al minimo ogni perdita di tempo JMP Rx_C05 ; Esegue la sequenza di COMANDI ; /-------------------------------------------------------------------\ ; 16 | Gestione dei COMANDI con 8 Parametri di tipo Ascii Numerico | ; \-------------------------------------------------------------------/ ;\ COMANDO #Uaallrrcc Recupera una cornice Rx_C54: CMP AL,'U' ;| ||||||\*-------colonna angolo alto JE Rx_C55 ;| ||||\*---------riga angolo alto JMP Rx_C02 ;| ||\*-----------larghezza ;/ \*-------------altezza ;---------------------------------------------------------------------- ;\Locazioni Deposito per gli 8 caratteri ascii Rx_C55: LEA DI,DepoPar ;|numerici digitati in fase di acquisizione ;/relativi al numero d'ordine del COMANDO MOV CX,8 ;\Il COMANDO "U" prevede la ricezione di 8 Rx_C56: CALL RxD_3 ;|PARAMETRI NUMERICI; quando il dato Š attendi- CMP AH,00H ;|bile (AH=0H) il numero Š lasciato in AL JNZ Rx_C56 ;|Rimane in attesa dei numeri corrispondenti a: CMP AL,'9' ;|03ö25 altezza compresa cornice JG Rx_C57 ;|03ö80 larghezza compresa cornice CMP AL,'0' ;|00ö24 riga angolo in alto a sinistra JGE Rx_C58 ;/00ö79 colonna angolo in alto a sinistra Rx_C57: CALL ErrPAR ;\Mostra un messaggio di Errore: "PARAMETRO NON JMP Rx_C02 ;/RICONOSCIUTO" e pone termine alla sessione ;---------------------------------------------------------------------- Rx_C58: MOV CS:[DI],AL ;\Salva nelle locazioni di deposito gli 8 carat- INC DI ;|teri ascii numerici, a disposizione del codice LOOP Rx_C56 ;/chiamato ad espletare il servizio ;---------------------------------------------------------------------- ;\Servizio per il COMANDO "#Uaallrrcc" ;/Recupera una Cornice CALL RecpCom ;\Esegue il servizio richiesto e, al termine, JMP Rx_C02 ;/torna in attesa di ricezione di altri COMANDI ;***************************************************************************** ; ---------------------------------------------- TxR_Prot proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- ;/---------------------------------[Inizializza il PROTOCOLLO per il Test]---\ MOV Byte Ptr CS:[depPOR],COM_num;\Per cambiare PORTA utilizzata, Velocit… | MOV Word Ptr CS:[DepVEL],Baude ;|di ricetrasmissione e Protocollo Seriale | MOV Byte Ptr CS:[DepTIP],Protoc ;/cambia le costanti all'inizio del codice | ;\---------------------------------------------------------------------------/ ;\Inizializza i Registri della porta seriale in ;|accordo con i parametri di protocollo deside- CALL INIserial ;|rati (velocit… di linea, numero bit di dato ;|e di stop, tipo di parit…) e in funzione della ;|porta COMx desiderata (default COM1) ;|NB: lascia in uscita SI=0000H se la porta ;/ desiderata NON Š presente nel sistema ;\Predispone il Piano di Lavoro e inizializza le ;|Variabili necessarie per il Programma Seriale CALL DeskTop ;|NB: se il valore ricevuto in ingresso in SI Š ;|0 la porta seriale desiderata NON Š presente ;|nel sistema e la procedura impone automatica- ;/mente il rientro al DOS (a livello _OUT) ;--------------------------------------------------------------------- ;\Aspetta che il computer remoto sia collegato, ;|continuando, nell'attesa, a trasmettere il xxx01: CALL Sincro ;|carattere 0AAH,scelto per esprimere la propria ;/disponibilit… a ricevere. ;--------------------------------------------------------------------- CALL FraseTxR ;--------------------------------------------------------------------- _OUT: CALL DESK_G PUSH AX ; /--------------------------------------------\ M_COLOR 07H ; | FASE STANDARD D'USCITA DAL PROGRAMMA | MOV DH,24 ; \--------------------------------------------/ CALL BARRA ; MOV DH,0 ; Pulisce la prima e l'ultima riga del monitor CALL BARRA ; (di solito assegnate al Titolo e al Menu) CALL RIP_cur ; e fissa il cursore sull'ultima; con questo MOV DH,23 ; artificio al termine del programma il "prompt" MOV DL,0 ; cade nel punto ottimale, senza inquinare CALL SET_cur ; l'immagine in uscita,ovviamente ancora a video POP AX ; ; Torna al DOS liberando la memoria usata dal ; programma, restituendo il controllo al proces- ; so padre (generalmente COMMAND.COM); il valore MOV AH,4CH ; posto eventualmente in AL prima di uscire pu• INT 21H ; essere testato a livello DOS con la funzione ; 4DH o mediante la lettura della variabile DOS ; "ERRORLEVEL" TxR_Prot ENDP _prog ENDS END INIZIO