Escolar Documentos
Profissional Documentos
Cultura Documentos
NDICE
1 PROGRAMAS RESIDENTES TIPEADOS DE LOS TEXTOS ESPECIALIZADOS EN ALGN LENGUAJE PEQUEO PORTABLE (ASEMBLER, BASIC, C STD, PASCAL, ETC) ................................. 3 1.1 Programa Residente en Memoria ................................................................................. 3 1.2 PROGRAMAS: ................................................................................................................ 3 1.2.1 1 Primer Programa............................................................................................... 3 1.2.2 2 Segundo Programa ........................................................................................... 4 2 Direccin base del reloj de tiempo real de la PC y realizar un programa para poder tener acceso a dicho reloj en lectura y escritura. ................................................................................... 5 2.1 EL RELOJ DE TIEMPO REAL ............................................................................................ 5 2.2 LAS FUNCIONES DE RELOJ ............................................................................................. 7 2.3 REGISTROS DE ESTADO ................................................................................................. 8 2.3.1 REGISTRO A ........................................................................................................... 8 2.3.2 REGISTRO B............................................................................................................ 8 2.3.3 REGISTRO C............................................................................................................ 8 2.3.4 REGISTRO D ........................................................................................................... 9 2.3.5 PROGRAMA DE RELOJ RESIDENTE EN TIEMPO REAL ............................................ 9 3 PROGRAMAR ALARMAS DE ACUERDO AL USO DEL RELOJ DE TIEMPO REAL DE LA PC. TRAER PROGRAMA DE ALARMAS................................................................................................ 13 4 INTERRUPCIONES POR HARDWARE USADAS EN LA PC CUALES ESTN OCUPADAS Y CUALES DISPONIBLES. ................................................................................................................. 13 4.1 INTERRUPCIONES INTERNAS DE HARDWARE: ............................................................ 13 4.2 INTERRUPCIONES EXTERNAS DE HARDWARE: ............................................................ 13 4.3 INTERRUPCIONES DE HARDWARE:.............................................................................. 13 5 DESCRIBIR EL PROCEDIMIENTO PARA ACCEDER A UNA INTERRUPCIN. ........................... 14 5.1 HARDWARE DE LOS IRQ: ............................................................................................. 14 5.2 ASIGNACIN DE LOS IRQ PARA EQUIPOS AT: ............................................................. 15 6 INTERRUPCIONES POR SOFTWARE USADAS EN LA PC CUALES ESTN OCUPADAS Y CUALES DISPONIBLES................................................................................................................................ 17 6.1 INTERRUPCIONES DE SOFTWARE: ............................................................................... 17 7 DISEO DE UN SISTEMA DE FORMA QUE PODAMOS PROBAR LAS INTERRUPCIONES DE AMBOS TIPOS . TRAER PROGRAMA PROBADO FUENTE Y COMPILADO ..................................... 18 8 EL SETUP DE LA PC, LAS OPCIONES DE CONFIGURACIN Y LOS PARMETROS. ................ 24 8.1 BIOS SETUP .................................................................................................................. 24 8.2 STANDARD CMOS SETUP............................................................................................. 25 8.3 ADVANCED CMOS SETUP ............................................................................................ 26 8.4 ADVANCED CHIPSET SETUP ......................................................................................... 26 8.5 POWER MANAGEMENT SETUP ................................................................................... 27 9 BIBLIOGRAFIA ...................................................................................................................... 29
CMOS PROGRAMAS RESIDENTES Y MANEJO DE INTERRUPCIONES. 1 PROGRAMAS RESIDENTES TIPEADOS DE LOS TEXTOS ESPECIALIZADOS EN ALGN LENGUAJE PEQUEO PORTABLE (ASEMBLER, BASIC, C STD, PASCAL, ETC)
1.1 Programa Residente en Memoria
Un programa residente o TSR ( Terminate and Stay Resident )es un programa normal y corriente que, tras ser cargado, permanece parcial o totalmente en memoria al finalizar su ejecucin. Ello es posible utilizando una funcin especfica del sistema operativo. Los programas residentes pueden ser activados mediante una combinacin de teclas o bien actuar con cierta periodicidad, asociados a la interrupcin del temporizador. Tambin pueden interceptar funciones del DOS o de la BIOS para cambiar o modificar su funcionamiento. Al final, casi siempre resulta totalmente inevitable desviar alguna interrupcin hacia una nueva rutina que la gestione, con objeto de activar el programa residente
1.2 PROGRAMAS:
1.2.1 1 Primer Programa
Este primer programa en C colocar de manera perpetua mi nombre Jose Choquehuaita haciendo un pseudoscroll horizontal en la esquina superior derecha.
#include <dos.h> #include <conio.h> extern unsigned _heaplen=1024; extern unsigned _stklen=512; void interrupt (*OldTic)(void); void KillTic(void); void interrupt Tic() { unsigned int (far *pantalla)[80]; static int prueba=0; int i; static char cad[24] = "JOSE CHOQUEHUAITA"; pantalla = MK_FP(0xb800,0); for(i=55;i<=79;i++){ pantalla[0][i]=cad[prueba%=24] + prueba++;} prueba++;
0x7900;
{ OldTic = getvect (0x1c); setvect (0x1c,Tic); keep(0, (_SS+(_SP/16) - _psp)); } void KillTic(void) { setvect (0x1c,OldTic); freemem(peek(_psp,44)); freemem(_psp); } void main(void) { clrscr(); cprintf(" Pulsa <CTRL> + <ALT> para desistalar"); AliveTic(); }
1.2.2
2 Segundo Programa
Este programa en C colocar a los mandos de un teclado con sonidos, ya que asocia a cada tecla del teclado un sonido diferente mientras las pulsemos.
#include <dos.h> #include <stdio.h> #include <stdlib.h> #define vec_int 0x09 /* direccion del vector de interrupciones */
/* DECLARACION DE LAS FUNCIONES A USAR */ int esta (void); /* LA INTERRUPCION YA ESTA EN MEMORIA */ void interrupt Madre (void); /* INTERRUPCION A METER EN EL VECTOR DE INT.*/ void interrupt (*almacen)(void); /* DONDE ALMACENO EL VECTOR INTERRUPCIONES*/ void KillMadre (void); /* DESINSTALO LA INTERRUPCION METIDA EN EL VECTOR */
DE
void main(void) { if (esta ()){ printf ("\nEl programa ya est instalado.\n"); printf ("\nNo permite m s instalaciones.... NiCe 2 MEET U by IcEmAn\n\n"); printf ("\nPara desinstalar pulsar [CTRL]+[ALT]\n"); exit (0); } almacen = getvect (vec_int); /* guardo la direccion del vector de inter.*/ setvect (vec_int,&Madre); /* meto la rutina madre en el vector de inter.*/ printf("\nTeclado musical by Jos Luis Navarro Simn....(IcEmAn)\n"); printf("\nPara salir pulsar simult neamente [CTRL]+[ALT]\n"); keep (0,(_SS+(_SP/16) - _psp)); /* lo mantengo en memoria residente */ } int esta (void) { int dominio; dominio=peek(0,vec_int*4); /*Abarca todo el vector de interrupciones*/ return (dominio==FP_OFF(&Madre)); /* operacion logica, verdadera si en*/ /* el vector de interrupciones esta*/
/* madre */ void KillMadre (void) { nosound (); /* quitas el sonido que esta activo*/ setvect (vec_int,almacen); /* mete la direccion donde apunta el vector de*/ /* interrupciones en el vector de interrupciones*/ /* y asi se anula la rutina que haba en memoria*/ freemem(peek(_psp,44));/* Desplazamos _psp a la posicion 44 que es donde se guarda la direccion del segmento de entorno y liberamos la memoria */ freemem(_psp); } void interrupt Madre (void) { sound (inportb(0x60)*200); /* lees del puerto de teclado, y el entero */ /* resultante lo multiplicas para que salga*/ /* un sonido audible */ if ((peekb(0x40,0x17) & 12)==12) /* si pulsas control alt */ KillMadre(); almacen(); }
2 Direccin base del reloj de tiempo real de la PC y realizar un programa para poder tener acceso a dicho reloj en lectura y escritura.
2.1 EL RELOJ DE TIEMPO REAL
Un chip muy importante es el reloj de tiempo real (Real-Time-Clokc, RTC). Se trata de un Dallas 1287 o similar. Est mantenida por bateras y trabaja en un modo de baja energa que lo protege de prdidas d datos durante la conexin o desconexin del equipo. En el RAM RTC de 64 bytes, a veces tambin llamada CMOS-RAM, se guarda la configuracin del sistema. Adems el chip nos ofrece un reloj, un calendario, as como la posibilidad de una interrupcin peridica programable. La actualizacin del tiempo y el calendario se realiza en forma cclica. El contador de segundo se incrementa en uno cada segundo, siempre que el RTC se encuentre en el modo de funcionamiento normal. Si se realiza un rebase, los dems registros afectados tambin se incrementan. Durante este rebase, los bytes 0 hasta 9 de la de la RAM RTC no estn disponibles para la CPU. La velocidad del ciclo de actualizacin se ajusta mediante lo bits divisores 2 hasta 0 registro de estado A, as como el SET-Bit 7 del registro de estado B. EL acceso a la RAM RTC es muy sencillo. Primero se ha de enviar al port 70h el nmero de indice del registro deseado. Despus se puede escribir o leer los datos en el port 71h. Todos los registros de lectura y escritura, excepto los siguientes se pueden leer.
Registros de estado C y D Bits 7 del registro de estado A Bits 7 del byte de segundos (Index 00h) Los primeros 14 bytes de la RAM RTC se emplean para el reloj y los cuatro registros de estado. Los restantes 50 Bytes sirven para la configuracin del sistema. La ocupacin exacta de los diferentes bytes se pueden ver en la siguiente tabla. 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h Segundos Segundos Alarma Minutos Minutos Alarma Horas Horas Alarma Da de la semana Da del mes Mes Ao 20h 21h 22h 23h 24h 25h 26h 27h 28h 29h HD 1 Nmero de cilindros Low HD 1 Nmero de cilindros High Cabezales HD 1 HD 1 inicio Pre-Compensation Low HD 1 inicio Pre-compensation High HD 1 Low landing zone HD 1 High landing zone HD 1 sectores Opciones 1 Reservado
2Ah Reservado 2Bh Opciones 2 2Ch Opciones 3 2Dh Reservado 2Eh 2Fh 30h 31h 32h 33h 34h Low CMOS RAM Checksum High CMOS RAM Checksum Low Extended Memory byte High Extended Memory byte byte de siglo Setup information Velocidad CPU
0Dh Estado D 0Eh 0Fh 10h 11h 12h 13h 14h Estado de Diagnstico Estados Shutdown Tipo de Flopy Reservado Tipo de HD Reservado Equipamiento
Low Base Memory High Base Memory Low Extended Memory High Extended Memory HD 1 extended Type byte
HD 2 Nmeros de cilindros Low HD 2 Nmeros de cilindros High Cabezales HD2 HD 2 inicio Pre-Compesation Low HD 2 inicio Pre-Compesation High
3Ah HD Low Landing zone 3Bh HD High Landing zone 3Ch HD 2 Sectores 3Dh Reservado 3Eh 3Fh Reservado Reservado
2.3.4 REGISTRO D El registro D sirve para la vigilancia de la batera. Si el bit 7 est activado, la batera se encuentra en perfecto estado. De lo contrario, el valor de 0 muestra que la batera esta defectuosa. El bits 6 hasta 0 no tienen ninguna funcin. El siguiente ejemplo utiliza las funciones del reloj que corresponden al tiempo como son la hora minutos segundos. Este programa permite leer el dato de la direccin de memoria y poder visualizarla en pantalla. La hora del reloj de tiempo reloj se calcula a partir del contador del temporizador, que se encuentra en las palabras 40h:6Ch( inferior) y 40h:6Eh Superior. El siguiente programa diseado en Assembler es una rutina residente para escribir la hora en la esquina superior derecha de la pantalla. 2.3.5 ; PROGRAMA DE RELOJ RESIDENTE EN TIEMPO REAL
PANTALLA EQU 0B000H CODIGO SEGMENT ASSUME CS:CODIGO,DS:CODIGO ORG 100H INICIO: JMP INSTALAR HORA DB 11 DUP(?) RELOJ PROC CLI PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH DS PUSH ES ;HORA -------> 40h:6Ch MOV AX,40H MOV ES,AX MOV SI,6CH MOV AX,ES:[SI] MOV DX,ES:[SI+2] MOV BX,32771 DIV BX SHR AX,1 MOV CH,AL MOV AX,DX MOV DX,0 MOV BX,1092 DIV BX MOV CL,AL MOV AX,DX MOV DX,0 MOV BX,18 DIV BX MOV DH,AL MOV BH,10 MOV AH,0 MOV AL,CH DIV BH ADD AX,3030H MOV WORD PTR HORA,AX
ALE:
MOV MOV MOV DIV ADD MOV MOV MOV MOV DIV ADD MOV MOV MOV MOV DIV ADD MOV MOV MOV MOV MOV MOV MOV MOV INC MOV INC INC DEC CMP JNZ
HORA+2,':' AH,0 AL,CL BH AX,3030H WORD PTR HORA+3,AX HORA+5,':' AH,0 AL,DH BH AX,3030H WORD PTR HORA+6,AX HORA+8,':' AH,0 AL,DL BH AX,3030H WORD PTR HORA+9,AX AX,PANTALLA ES,AX DI,2*(80-11) CX,11 SI,0 AL,HORA[SI] ES:[DI],AL DI BYTE PTR ES:[DI],31 SI DI CX CX,0 ALE:
FIN: POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX STI IRET RELOJ ENDP INSTALAR PROC MOV AX,0000H MOV ES,AX MOV BX,01CH*004H CLI MOV WORD PTR ES:[BX],OFFSET RELOJ MOV WORD PTR ES:[BX+2],CS MOV DX,OFFSET INSTALAR STI INT 27H INSTALAR ENDP CODIGO ENDS END INICIO ;PROGRAMA DE RELOJ RESIDENTE ;SEGMENTO MEMORIA DE PANTALLA VGA PANTALLA EQU 0B800H ;SEGEMENTO PRINCIPAL CODIGO SEGMENT ASSUME CS:CODIGO,DS:CODIGO ORG 100H ; ORIGEN POR SER FICHERO TIPO COM INICIO:
10
JMP INSTALAR ; VARIABLES DEFINIDAS HORA DB 35 DUP('?') RELOJ PROC CLI PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH
AX BX CX DX SI DI DS ES
;OBTENEMOS LA HORA DE LA DIRECCION -------> 40h:6Ch (INFERIOR) ; 40h:6eh (SUPERIOR) MOV MOV MOV MOV MOV MOV DIV SHR MOV MOV MOV MOV DIV MOV MOV MOV MOV DIV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV DIV ADD MOV MOV AX,40H ES,AX SI,6CH AX,ES:[SI] DX,ES:[SI+2] BX,32771 BX AX,1 CH,AL AX,DX DX,0 BX,1092 BX CL,AL AX,DX DX,0 BX,18 BX DH,AL HORA,'F' HORA+1,'E' HORA+2,'R' HORA+3,'D' HORA+4,'I' HORA+5,'N' HORA+6,'A' HORA+7,'N' HORA+8,'D' HORA+9,' ' HORA+10,'C' HORA+11,'O' HORA+12,'N' HORA+13,'D' HORA+14,'O' HORA+15,'R' HORA+16,'I' HORA+17,' ' BH,10 AH,0 AL,CH BH AX,3030H WORD PTR HORA+18,AX HORA+20,':'
11
MOV MOV DIV ADD MOV MOV MOV MOV DIV ADD MOV MOV MOV MOV DIV ADD MOV
AH,0 AL,CL BH AX,3030H WORD PTR HORA+21,AX HORA+23,':' AH,0 AL,DH BH AX,3030H WORD PTR HORA+24,AX HORA+26,':' AH,0 AL,DL BH AX,3030H WORD PTR HORA+27,AX
; DIRECCIONA ZONA DE MEMORIA DE LA PANTALLA MOV AX,PANTALLA MOV ES,AX MOV DI,2*(80-31) MOV CX,31 MOV SI,0
MOVER: MOV AL,HORA[SI] MOV ES:[DI],AL INC DI MOV BYTE PTR ES:[DI],31H INC SI INC DI LOOP MOVER FIN: POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX STI IRET RELOJ ENDP INSTALAR PROC MOV AX,0000H MOV ES,AX MOV BX,01CH*004H CLI MOV WORD PTR ES:[BX],OFFSET RELOJ MOV WORD PTR ES:[BX+2],CS MOV DX,OFFSET INSTALAR STI INT 27H INSTALAR ENDP CODIGO ENDS END INICIO
12
3 PROGRAMAR ALARMAS DE ACUERDO AL USO DEL RELOJ DE TIEMPO REAL DE LA PC. TRAER PROGRAMA DE ALARMAS.
Existen muchas aplicaciones posibles que podra hacer uso del reloj de tiempo real de la PC. Por ejemplo, se podra trabajar con la hora para chequear algn dispositivo, mantener un contador interno para realizar algo cuando alcance cierto valor, etc.
13
COM2, COM4 COM1, COM3 Libre Sistema Libre Sistema Libre Libre Libre Libre Sistema
Reservada para COM2, COM4, Si ud. no posee placa multifuncin Puede estar libre Reservada para COM1, COM3, Si ud. no posee placa multifuncin Puede estar libre Reservada para LPT2, Normalmente libre an si hay 2 mas Impresoras. Controladora de Disketteras, FDD, Floppy disk controller. Reservada para LPT1, Normalmente libre an si hay Impresoras. RTC, Reloj de tiempo real, Reloj del sistema. En sistemas PCI es utilizada por el PLUG &PLAY En sistemas PCI se asigna al Slot Nro 1 (Generalmente Video) En sistemas PCI es utilizada por el PLUG &PLAY En sistemas PCI es utilizada por el PLUG &PLAY Coprocesador Matemtico Todos los sistemas 486 DX y superiores lo poseen. Disco rgido IDE- Solamente. Controladora primaria IDE Puede ser que en un sistema con HD SCSI y un CD-ROM IDE el CD est conectado al conector IDE primario.
5 6 7 8 9 10 11 12 13
14
Sistema
15
La utiliza la segunda controladora IDE, si su motherboard posee dos enchufes IDE Posee una controladora con dos enchufes IDE posee una placa de sonido y el CD-ROM IDE est conectado a la misma, esta IRQ se utiliza.
Solo se pueden utilizar las que figuran libres mas la IRQ15 y las de los puertos COM.
puerto paralelo, donde va generalmente una impresora o un scanner. En definitiva, tan solo se podra agregar una tarjeta, con el IRQ 2 disponible (available). Afortunadamente esto ha cambiado para las computadoras actuales, que poseen 16 IRQs disponibles (de 0 a 15). Toda computadora basada en un procesador 80286 o superior tiene esta cantidad de interrupciones disponibles.
Pero la pregunta interesantes es cmo se ha logrado esto?, bueno, ac la respuesta: originalmente, en las computadoras XT, cualquier interrupcin es atendida por un chip cuyo nmero es el 8259, tambin denominado Controlador De Interrupciones. Este chip tan solo tiene la capacidad de atender 8 interrupciones, es decir tienen fsicamente 8 entradas, as que para los equipos AT (286 o superior) se han empleado simplemente dos de estos controladores, redireccionando todas las interrupciones generadas por el segundo chip hacia el primero a travs del IRQ 2, como se puede observar en el grfico. Ya que el IRQ 2 del primer chip ha de estar ocupado permanentemente, tan solo quedan 15 posibles IRQs. Recordemos que las interrupciones tienen una prioridad dada por su nmero, y como todas las interrupciones del segundo controlador entran por la interrupcin 2 del primero, las interrupciones nmero 8 a la nmero 15 tienen todas prioridad 2. El grfico permite ver una asignacin para cada interrupcin, pero ese tema se ver en seguida con la tabla de asignaciones. Un aspecto importante a comprender es qu sucede con los dispositivos que requieren de forma obligatoria el IRQ 2, cosa bastante normal. En realidad en los equipos AT, cualquier tarjeta conectada al IRQ 2 funciona perfectamente, con la salvedad de que en realidad est funcionando en el IRQ 9, y no en el 2. Este hecho es completamente transparente y no requiere de mayor cuidado, salvo entender que si algn dispositivo est empleando el IRQ 2, ningn otro podr ser asignado al IRQ 9, por la razn antes mencionada.
siempre asignados a seales de sincronizacin y tiempo propias de la tarjeta madre, por lo que no se las debe tocar. El IRQ 1 se destina a atender las interrupciones provenientes del teclado, es decir, la pulsacin de una tecla (por cierto que an tipeando el mecangrafo ms diestro y veloz, el tiempo entre pulsacin y pulsacin es para el CPU una verdadera eternidad).
El IRQ 2 est destinado exclusivamente a la atencin del segundo chip controlador 8259, aunque se lo pueda emplear en la prctica ya que es suplido por el IRQ 9 como se mencion anteriormente. El IRQ 3 ha de atender un dispositivo serial que se halle en el puerto COM2 o COM4, y el IRQ 4 otro dispositivo serial conectado al COM1 o al COM3. Este punto es interesante ya que al inicio de este anlisis dijimos claramente que un mismo IRQ no puede ser compartido por dos o ms dispositivos a la vez, como por ejemplo el modem y el ratn, que perfectamente se podra conectarlos al COM2 y al COM4, para que empleen el IRQ 3. Sin embargo este hecho ocasionara que el momento en que el modem est activo y el ratn tambin, el equipo se bloquee completamente, aparezcan extraos mensajes de error en la pantalla y exista la necesidad de reiniciar todo, con las molestias y perjuicios pertinentes. Esto sucede toda vez que dos dispositivos intentan emplear el mismo IRQ. Por esta razn, se suele conectar un equipo al COM1 y se deja libre el COM3, o bien a la inversa, pero nunca en ambos, y lo mismo para el COM2 y el COM4. Por lo general, se conecta al COM1 el ratn, y al COM2 el modem, de esta forma emplean el IRQ 4 y 3 respectivamente, sin crearse conflictos (en una edicin futura dedicada a modems exclusivamente analizaremos plenamente este aspecto). Como se puede apreciar en la columna Detectado , el programa MSD ha detectado algo en el COM1, pero nada en el COM3 (Not Detected), y lo mismo ocurre para el COM2, que ha sido detectado y no el COM4. Por cierto, que el equipo del que se obtuvo esta tabla tiene el ratn en el COM1 y el modem en el COM2. Por su parte, el IRQ 5 tiene marcada en su columna. Detectado , la palabra No , lo que da a entender que ese IRQ est disponible, y que por lo general se lo emplea para una segunda impresora. Los IRQ 6, 7, y 8 han sido detectados, por lo que no pueden ser empleados. El IRQ 9 se halla disponible para suplir al 2. Los IRQ 10, 11, 12 y 15 no han sido detectados, y se hallan bajo el rtulo de (Reserved) , lo que significa que estn disponibles para atender cualquiera 16
dispositivo a ser agregado en un futuro, como ser: tarjeta de sonido, tarjeta de TV, etc. Finalmente el IRQ 13 y 14 se hallan destinados a atender el coprocesador matemtico y las unidades de discos duros respectivamente. Los nombres de las columnas son bastante claros, a excepcin de la denominada Manejado Por , que indica el elemento de hardware o software que administra el dispositivo. Por ejemplo, el teclado es administrado por un programa denominado KEYB, bastante conocido para todos los que han manejado o configurado el viejo DOS, muchos dispositivos son administrados por las rutinas del BIOS, que por lo general ser cargan a la memoria RAM cuando se inicializa la computadora (el proceso de carga se denomina Shadow BIOS), y Default Handlers indica que el dispositivo ser administrado por los programas del mismo fabricante. El smbolo ??? indica que el programa MSD no ha podido averiguar quin administra ese IRQ, cosa normal para el reloj del sistema, que funciona de forma autnoma.
DESCRIPCIN Terminar Programa Peticin de funcin Direccin de terminacin Especifica la direccin a donde se bifurcar cuando se termine el programa. Esta direccin se copia sobre el PSP
Direccin de Salida por CRTL-BREAK Manejador de error Critico Lectura de disco absoluta Grabacin en Disco Absoluta Terminar pero quedar residente No se usa (Reservada) No se usa (Reservada)
7 DISEO DE UN SISTEMA DE FORMA QUE PODAMOS PROBAR LAS INTERRUPCIONES DE AMBOS TIPOS . TRAER PROGRAMA PROBADO FUENTE Y COMPILADO
El siguiente programa es un men que funciona con las interrupciones tanto de HARDWARE Y DE SOFTWARE . Utiliza interrupciones de hardware del teclado, e interrupciones de software de la ROM-BIOS.
; ; ; ; Para maquinas 8088/80386 Programa Graficador con control total del cursor. Con interrupciones de la ROM BIOS Compilado como EXE. macro mov mov int endm segment memo pan x1 y1 xx0 yy0 x0x y0y c01 c02 ah,0h al,2h 10h para 'datos' dw 0B800h dw 2000 dup(?) dw 20 dw 4 db 0 db 0 db 0 db 0 dw 0 dw 0 A263103.ASM
modot
; Define el modo texto 80 x25 ; ; ; ; ;Segmento de datos, Definiciones en assembler ;Inicio de la pantalla ;Separa memoria sin inicializar ;Coordenadas esquina sup.izq. del menu. ;Coordenadas esquina sup.izq. del menu. ; ;
dseg
18
dseg cseg
f01 f02 x2 y2 XX AA BB CC EE FF GG HH II JJ KK LL MM NN car fil col fi1 co1 color colo long1 long2 video ends
dw dw dw dw db db db db db db db db db db db db db db db dw dw dw dw dw db dw dw db
0 0 60 ;Coordenadas esquina inf.derecha del menu. 22 ;Coordenadas esquina inf.derecha del menu. '[7 3 3 3 3 3 3 3G7R7A7F7I7C7A7D7O7R7 3 3 3 3 3 3 3]7' ;Menu 'Fa18 M O D O T E X T O ' 'Fa28 M O V I M I E N T O C O N A R R A S T R E ' 'Fa38 M O V I M I E N T O C O N T R O L A D O ' 'Fa48 M O D O G R A F I C O ' 'Fa58 C U A D R A D O R E L L E N O ' 'Fa68 C U A D R A D O E N M O V I M I E N T O ' 'Fa78 M O V I M . E N P E R S P E C T I V . ' 'Fa88 M O V I M I E N T O D E L I N E A S ' 'Fa98 M O V I M I E N T O A N I M A D O ' 'Fa1808 G R A F I C A D O R ' ' E8S8C8 F I N ' 0 ;fila actual 0 ;columna actual 0 ;fila anterior 0 ;columna anterior 0 ;color 0 0 0 11h ;Resolucion grafica 640 x 480
segment ;Programa principal. assume cs:cseg, ds:dseg, es:cseg, ss:cseg ini:jmp marco ;inicio de programa marco proc near ; mov ax,cs ; mov ax,dseg ; mov ds,ax ; mov es,ax ; call salva ; push ax ; menu:mov ax,MEMO ;Inicio de memoria de pantalla mov ES,ax ; mov di,598 ;CLEAR SCREEN MOV AX,0720h ; cle1:add di,80 ; mov cx,80 ; cle0:add di,1 ; mov es:[di],ax ; loop cle0 ; cmp di,3300 ; jl cle1 ; MOV AX,MEMO ;Inicio de la pantalla MOV ES,AX ; MOV CX,58 ;Longitud de cadena a imprimir MOV AX,850 ;Posicion en la pantalla MOV DI,AX ;Direccion destino MOV SI,OFFSET AA;Direccion origen de la cadena AA REP MOVSB ;Repite traslado de cadena byte a byte MOV CX,58 ; add AX,160 ; MOV DI,AX ; MOV SI,OFFSET BB; REP MOVSB ; MOV SI,OFFSET EE; REP MOVSB ; MOV CX,58 ; add AX,160 ; MOV DI,AX ;
19
MOV SI,OFFSET FF; REP MOVSB ; MOV CX,58 ; lea bx,CS:f3 ; lea bx,CS:f4 ; opcion:call resetraton ; call punteroon ; opcion1:mov ah,01 ;Funcion: leer una tecla ah=1 int 16h ;llamada al ROM BIOS jnz etiqw ; call leerraton ; test bx,1 ; jz opcion1 ; sub dx,40 ;algoritmo para el mouse mov ax,dx ; jmp etiqr ; etiqw: mov ah,0 ;algoritmo para el teclado int 16h ; mov al,ah ; sub al,59 ; sub ah,ah ; etiqr: cmp ax,10 ; ja finx ;Compara con Esc mov bl,6 ; mul bl ; lea bx,f1 ; add bx,ax ; jmp bx ; rat01: jmp opcion ;Fin de opciones F1:call graf1 ;Llama procedimientos graf jmp ya ; F2:call graf2 ; jmp ya ; F3:call graf3 ; jmp ya ; F4:call graf4 ; jmp ya ; F5:call graf5 ; jmp ya ; F6:call graf6 ; jmp ya ; F7:call graf7 ; jmp ya ; F8:call graf8 ; jmp ya ; F9:call graf9 ; jmp ya ; F10:call graf10 ; jmp ya ;Salida de bifurcacion finx:jmp fin ; ya:mov ah,8 ;Espera que se pulse una tecla, sin eco. int 21h ; mov ah,0 ;Modo mov al,2 ; normal de int 10h ; pantalla 80 x 25 JMP menu ; FIN:mov ah,0 ;Modo mov al,2 ; normal de int 10h ; pantalla pop ax ; mov ds,ax ; mov ax,MEMO ;Inicio de memoria de pantalla mov ES,ax ; mov di,0 ;LOAD SCREEN MOV cx,2000 ;longitud de pantalla ir01:MOV ax,pan[di] ; mov es:[DI],ax ; add di,2 ;
20
marco
ir01 ah,4ch 21h near xx0,40 yy0,12 car,0dbh escrib punteroon ax ah,0h 16h ah,04dh de ah,04bh iz ah,048h yy0,00 w3
; ;Salida al DOS con codigo ; de errores. ; ;Movimiento controlado de un caracter en modo ;Inicializa el modo texto. ; ;
graf1 proc texto. modot mov mov mov call call push tecl: mov int cmp je cmp je cmp ap:pop ax ret z3:mov jmp graf1 endp graf2
proc near modot mov xx0,40 mov yy0,12 mov car,0dbh call escrib call punteroon push ax tecla: mov ah,0h int 16h cmp ah,04dh w7: add yy0,01 jmp escrit escrit:mov car,0dbh call escrib jmp tecla z4:mov xx0,00 jmp w4 z5:mov xx0,80 jmp w5 z6:mov yy0,25 jmp w6 z7:mov yy0,00 jmp w7 esca:pop ax ret graf2 endp graf3 proc modot call push push push push mov mov pixel loop ret endp near punteroon ax bx cx dx xx0,40 yy0,12 ir63
;MOVIMIENTO TEXTO
;Activa mouse
call cuad
21
graf4 proc near mov col,61 mov cx,517 ale: inc col call pixel loop ale cmp fil,437 jl mar ret graf4 endp graf5 proc near call modo add fil,01 cmp long1,00 jg iiii ret graf5 endp graf6 proc near call modo call punteroon push ax i01:mov col,90 mov fil,10 mov long1,460 mov long2,460 i00:mov color,01 cmp al,27 jne i01 pop ax ret graf6 endp graf7 proc near call modo call punteroon mov col,19 mov fil,79 mov color,01 mov long1,300 mov col,320 mov fil,220 mov color,0fh call pixel push ax tcla: call guard mov ah,0h int 16h cmp ah,047h modo proc near mov ah,0h mov al,video int 10h ret mov ah,02h mov dh,yy0 mov dl,xx0 mov bh,0h int 10h mov ah,09h mov bh,0h mov bl,03h mov cx,01 mov al,car int 10h pop dx pop cx pop bx pop ax
;CUADRADO RELLENO
22
ret endp proc mov mov mov MOV sal0:MOV mov add loop mov ret salva endp guard proc push push mov mov mov mov pop pop ret guard endp borra proc push push push mov mov mov mov int pop pop pop ret borra endp pixe1 proc push push push mov mov mov mov int pop pop pop ret pixe1 endp pixel proc push push push mov mov mov ret leerraton endp punteroxy proc mov sub int ret punteroxy endp escri salva
near ax,MEMO ES,ax di,0 cx,2000 ax,es:[DI] pan[di],ax di,2 sal0 ax,ds near ax bx ax,fil bx,col fi1,ax co1,bx bx ax near cx dx ax cx,co1 dx,fi1 ax,00h ah,0ch 10h ax dx cx near cx dx ax cx,col dx,fil al,0fh ah,0ch 10h ax dx cx near cx dx ax cx,col dx,fil ax,color near ax,4 bx,bx 51
;color
23
resetraton proc near mov ax,0 int 51 ret resetraton endp cseg ends end ini
24
Para acceder a los SETUP de los BIOS de otros proveedores se deben presionar otras teclas o combinaciones de las mismas. A modo de ejemplo:
En caso de problemas con el SETUP del BIOS, o de haber perdido el password asignado al mismo, es posible borrarlo por completo (incluyendo el password), cambiando de lugar por unos segundos un jumper del motherboard. Con esto se hace un nuevo seteo del BIOS, cargando primero los seteos por defecto, y luego optimizndolos. Veremos a continuacin los distintos mens y submens, con una pequea explicacin de sus significados y seteos ms habituales.
25
26
On Board USB Function Esta opcin debe habilitarse si vamos a usar algn dispositivo USB, en caso contrario, deshabilitarla para ahorrar recursos El resto de las opciones deben dejarse en sus valores por defecto.
CPU Plug and Play Setup En los motherboards modernos, en vez de indicar las caractersticas del procesador por medio de jumpers, lo hacemos a travs de menes en el SETUP del BIOS. Normalmente esto se hace indicando dos parmetros: la frecuencia de reloj del bus de memoria, y un multiplicador. El producto de estos dos valores da la frecuencia de trabajo del procesador. En los procesadores Pentium II, III, y similares ( K6-2, K7, etc.) las frecuencias de bus de memoria ms habituales son: 66MHz, 100MHZ, 133MHz, y ya estn apareciendo mayores. Este valor se debe elegir de acuerdo a la velocidad de la memoria, ya que si usamos una memoria PC-66, con un bus de 100 MHZ, esta no funcionar, o lo har en forma errtica. A modo de ejemplo, un procesador Pentium III de 600MHz se configurar con un reloj de bus de 100MHz, y un multiplicador de 6, o reloj de 133MHz, y multiplicador de 4.5, dependiendo de lo que indiquen los fabricantes del procesador y el motherboard utilizado. En general, en caso de existir varias combinaciones de valores que den la frecuencia adecuada para el procesador (como en el caso anterior), y siempre que tanto el procesador, como la memoria y el motherboard lo admitan, se debe elegir la opcin correspondiente a la mayor velocidad de bus, pues esta ser la que brinde un mayor rendimiento del sistema. Change Supervisor Password Este men permite ingresar un password que ser utilizado de acuerdo a las opciones elegidas en el men Advanced CMOS Setup Auto-Detect Hard Disks Este men realiza la autodeteccin de todos los parmetros de todos los discos duros IDE instalados en los controladores incluidos en el motherboard, introduciendo automticamente estos datos en el men Standard CMOS Setup. En algunos BIOS, esta opcin detecta adems todos los otros dispositivos IDE conectados a los controladores En muchos BIOS actuales esta opcin ha desaparecido, quedando integrada al men Standard CMOS Setup donde se hace el proceso de autodeteccin de discos al presionar la tecla F3, u otra que indique el fabricante. Save Settings and Exit Esta opcin nos permite abandonar el SETUP, luego de salvar los cambios realizados. Elegir esta opcin es lo mismo que apretar la tecla [F10] en cualquier punto de este men. Luego de elegirla (o presionar [F10] ) se nos solicita la confirmacin, y presionando Y (yes) se reinicia el PC salvando los cambios realizados. Exit Without Saving Esta opcin abandona el SETUP, dejando sin efecto los cambios realizados, y luego de confirmarlo, reinicia el PC 28
9 BIBLIOGRAFIA
http://club.telepolis.com/mydream/Asm/ASM1.html http://www.uhu.es/tomas.mateo/ac2/manual%20ensamblador%20UHU.pdf
29