PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (maggio 2003) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : B10_1234.ASM (INT 10H, Funzione 12H)| ;| AUTORE : Giorgio OBER | ;| VERSIONE : maggio 2003 | ;| DESCRIZIONE : Verifica se la funzione di "Emulazione" del Cursore da parte| ;| della ROM BIOS Š assicurata da questo computer. | ;| L'effetto della funzione viene provato con il programma| ;| visto in precedenza per la creazione di una sequenza di| ;| Cursori di diverse dimensioni, da una minima (CH=CL=15) ad| ;| una massima (CH=00/CL=15) con cursore CRESCENTE dal basso| ;| verso l'alto e con cursore DECRESCENTE dal basso verso| ;| l'alto, da una massima (CH=00/CL=15) a una minima (CH=CL=00)| ;| Ora l'effetto desiderato FUNZIONA PERFETTAMENTE ! | ;\---------------------------------------------------------------------------/ ; MACRO UTILIZZATE DAL PROGRAMMA: include c:\arch-lab\bin\GIOBE.MAC ; LIBRERIA UTILIZZATA DAL PROGRAMMA [opzione WinASM altrimenti non necessaria] includelib c:\arch-lab\bin\GIOBE.LIB ;PROCEDURE ESTERNE UTILIZZATE dal PROGRAMMA [NEAR, dalla LIBRERIA ~GIOBE.LIB~] ;----------------------------------------------------------------------------- EXTRN CambiaCol:NEAR EXTRN SET_cur:NEAR EXTRN VIA_cur:NEAR EXTRN RIP_cur:NEAR EXTRN KEYwait:NEAR EXTRN STAsp:NEAR EXTRN BIOScls:NEAR EXTRN BIOSmsg:NEAR EXTRN Byt2Asc:NEAR EXTRN Byt2Dec:NEAR PUBLIC ATTRIB ;Attributo di colore ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP B10_1234 ;AREA DESTINATA AI DATI DEL PROGRAMMA ;----------------------------------------------------------------------------- ATTRIB DB 1FH ;Attributo di Colore Testo1 DB " Linea di partenza (in alto) : ",00H Testo2 DB " Linea di arrivo (in basso): ",00H Testo3 DB "H (",00H Testo4 DB ") ",00H ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;| PROCEDURA : STAlinee | ;| DESCRIZIONE : Mostra la dimensione corrente del cursore assunta dalle due| ;| Variabili di Sistema 0000:0461H, contenente il numero di| ;| linea di partenza (Start_line) del cursore e 0000:0460H,| ;| contenente il numero di linea di arrivo (End_line) del| ;| cursore, aggiornata non appena viene premuto un tasto. | ;\---------------------------------------------------------------------------/ STAlinee:PUSH CX ; Stampa il testo puntato dall'etichetta con il M_msgC TESTO1,22,10,5FH; Colore 5FH (Bianco brillante su Magenta) nella ; posizione di stampa corrente PUSH ES ; MOV AX,0000H ; Preleva il byte contenuto nella Variabile di MOV ES, AX ; sistema 0000:0461H, contenente il numero di MOV AL,ES:[0461H] ; linea di partenza del cursore, lasciato in AL POP ES ; M_COLOR 5EH ; Provvede alla conversione del byte contenuto CALL Byt2Asc ; nella Variabile di sistema 0000:0461H conte- M_COLOR 5FH ; nente il numero di linea di partenza del cur- M_msgN TESTO3 ; sore, prelevato in AL, nei due caratteri ASCII M_COLOR 5EH ; corrispondenti ponendoli poi a video nella po- CALL Byt2Dec ; sizione di stampa corrente, nel colore prece- M_COLOR 5FH ; dentemente predisposto in CS:[ATTRIB] M_msgN TESTO4 ; ; Stampa il testo puntato dall'etichetta con il M_msgC TESTO2,23,10,1FH; Colore 1FH (Bianco brillante su Blu) nella po- ; sizione di stampa corrente PUSH ES ; MOV AX,0000H ; Preleva il byte contenuto nella Variabile di MOV ES, AX ; sistema 0000:0460H, contenente il numero di MOV AL,ES:[0460H] ; linea di arrivo del cursore, lasciato in AL POP ES ; M_COLOR 1EH ; Provvede alla conversione del byte contenuto CALL Byt2Asc ; nella Variabile di sistema 0000:0460H conte- M_COLOR 1FH ; nente il numero di linea di arrivo del cur- M_msgN TESTO3 ; sore, prelevato in AL, nei due caratteri ASCII M_COLOR 1EH ; corrispondenti ponendoli poi a video nella po- CALL Byt2Dec ; sizione di stampa corrente, nel colore prece- M_COLOR 1FH ; dentemente predisposto in CS:[ATTRIB] M_msgN TESTO4 ; M_CURSOR 23,55 POP CX CALL KEYwait ; Rimane in attesa della pressione di un tasto RET ;***************************************************************************** ; ---------------------------------------------- B10_1234 proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- ;/---------------------------------------------\ CALL BIOScls ;|Organizza il piano di presentazione | ;\---------------------------------------------/ ; Funzione BIOS che verifica la possibilit… da ; parte della ROM BIOS di impostare adeguatamen- MOV AH,12H ; te le sue linee di partenza e di arrivo con MOV AL,01H ; cui Š costruito il Cursore, in accordo con MOV BL,34H ; l'altezza del carattere usato nel modo testo INT 10H ; corrente; con AL=01H l'emulazione CGA del Cur- ; sore Š disabilitata ed Š possibile gestire ; ogni linea tra quelle del carattere corrente; ; con AL=00H invece (emulazione CGA abilitata) ; non tutte le scelte possibili sono assicurate! ; ---------------------------------------------\ ; FASE del CURSORE CRESCENTE | ; ---------------------------------------------/ ; Inizializza un contatore per permettere la vi- MOV CX,16 ; sualizzazione, nella posizione di stampa cor- XXX00: PUSH CX ; rente, del cursore, da una dimensione minima DEC CL ; (CH=15, CL=15) ad una massima (CH=00, CL=15) ; con cursore CRESCENTE dal basso verso l'alto ; Funzione BIOS che fissa la dimensione del cur- ; sore lampeggiante, prodotto dall'hardware del MOV CH,CL;Start_line; video SOLO nei modi testo tracciando una o pi— MOV CL,15;End_line; linee di Pixel nello spazio riservato al ca- PUSH CX ; rattere che sta per essere scritto. La linea MOV AH,01H ; di partenza (in alto) Š specificata in CH con INT 10H ; un numero a partire da 00H; quella finale (in POP CX ; basso) posta in CL, assumere il valore massimo ; 07 per la CGA, 13 per la EGA e 15 per la VGA ; Mostra la dimensione corrente del cursore, CALL StaLinee ; assunta da CH (Start_line) e CL (End_line), ed ; aspetta la pressione di tasto qualunque POP CX ; Prosegue stampando un Cursore sempre pi— LOOP XXX00 ; grande ;/---------------------------------------------\ ;| FASE del CURSORE DECRESCENTE | ;\---------------------------------------------/ ; Inizializza un contatore per permettere la vi- MOV CX,16 ; sualizzazione, nella posizione di stampa cor- XXX01: PUSH CX ; rente, del cursore, da una dimensione massima ; (CH=00, CL=15) ad una minima (CH=00, CL=00) ; con cursore DECRESCENTE dall'alto in il basso ; Funzione BIOS che fissa la dimensione del cur- ; sore lampeggiante, prodotto dall'hardware del ; video SOLO nei modi testo tracciando una o pi— MOV CH,0;Start_line; linee di Pixel nello spazio riservato al ca- DEC CL ;End_line; rattere che sta per essere scritto. La linea MOV AH,01H ; di partenza (in alto) Š specificata in CH con INT 10H ; un numero a partire da 00H; quella finale (in ; basso) posta in CL, assumere il valore massimo ; 07 per la CGA, 13 per la EGA e 15 per la VGA ; Mostra la dimensione corrente del cursore, CALL StaLinee ; assunta da CH (Start_line) e CL (End_line), ed ; aspetta la pressione di tasto qualunque POP CX ; Prosegue stampando un Cursore sempre pi— LOOP XXX01 ; piccolo MOV AH,12H ;/---------------------------------------------\ MOV AL,00H ;| | MOV BL,34H ;|Ripristina le dimensioni normali del Cursore | INT 10H ;\---------------------------------------------/ _OUT: PUSH AX ; Torna al DOS con la memoria liberata e con la CALL RIP_cur ; chiusura di tutti i file; cede il controllo MOV DH,23 ; al processo padre (generalmente COMMAND.COM); MOV DL,0 ; il valore posto eventualmente in AL prima di CALL SET_cur ; uscire pu• essere testato in uscita con la POP AX ; funzione 4DH o mediante la lettura della va- MOV AH,4CH ; riabile DOS "ERRORLEVEL" INT 21H ; B10_1234 ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare