Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model tiny
- .data
- separador db "----------------------------------------",13,10,"$"
- saltov db " ",13,10,"$"
- about db " ABOUT",13,10,"$"
- video db " VIDEO",13,10,"$"
- os db " SISTEMA OPERATIVO",13,10,"$"
- procesador db " PROCESADOR",13,10,"$"
- memoria db " MEMORIA",13,10,"$"
- hd db " DISCO DURO",13,10,"$"
- salirtxt db " SALIR",13,10,"$"
- nada db "",13,10,"$"
- hora db "00:00:00",13,10,"$"
- pres1 db "I","B","M ", "Gossip, el 'detective' de tu computador",13,10,"$"
- pres2 db "Arquitectura de Computadores, 2012",13,10,"$"
- pres3 db "Geovanny Mendez Marin, Ingeniería en Computación",13,10,"$"
- vid1 db "Informacion del Video",13,10,"$"
- os1 db "Informacion del Sistema Operativo",13,10,"$"
- procesador1 db "Informacion del procesador",13,10,"$"
- memoria1 db "Informacion de la memoria del sistema",13,10,"$"
- hd1 db "Informacion del Disco Duro",13,10,"$"
- fecha db "00/00/0000",13,10,"$"
- ruta_directorio db "C:\GeoASM",0 ; Rutas asi son, con cero al final
- msjcarpeta1 db "SE CREO LA CARPETA C:\GeoASM",13,10,"$"
- msjcarpeta2 db "Si esta usando emulador DOSBOX, busque en",13,10,"$"
- msjcarpeta3 db "RUTACOMPILACION\...\",13,10,"$"
- msjcarpeta4 db "Si ya fue creada el emu8086 enviara un mensaje",13,10,"$"
- msj1 db "UNIDAD DE DISCO POR OMISION: ",13,10,"$"
- unidad db "0",13,10,"$"
- ; msj2 db "Version del DOS: ",13,10,"$"
- ; dos db "0",13,10,"$"
- msj2 db "Numero de sectores por grupo: ",13,10,"$"
- msj3 db "Numero de grupos disponibles: ",13,10,"$"
- msj4 db "Numero de bytes por sector: ",13,10,"$"
- msj5 db "Numero de grupo en el disco: ",13,10,"$"
- dato_espacio_libre dw ?
- resultado_espacio_libre db "0000000000000000",13,10,"$"
- msj6 db "ESPACIO DISPONIBLE EN EL DISCO: ",13,10,"$"
- msj7 db "MODO DE VIDEO: ",13,10,"$"
- modo_video db "0",13,10,"$"
- msj8 db "VERSION DOS ",13,10,"$"
- version_dos db "0.00",13,10,"$"
- msj9 db "COUNTRY CODE:",13,10,"$"
- dato_country_code dw ?
- resultado_country_code dw "0000000000000000",13,10,"$"
- msj10 db "TAMANO DE LA MEMORIA BASE:",13,10,"$"
- dato_tamano_memoria dw ?
- resultado_tamano_memoria dw "0000000000000000 kilobytes",13,10,"$"
- msj11 db "EXPANSION DE MEMORIA:",13,10,"$"
- dato_expansion_memoria dw ?
- resultado_expansion_memoria dw "0000000000000000 kilobytes",13,10,"$"
- msj12 db "VERIFICACION DE COPROCESADOR MATEMATICO:",13,10,"$"
- msj13 db "Coprocesador matematico verificado",13,10,"$"
- msj14 db "Coprocesador matematico ausente",13,10,"$"
- ;print macro parametro
- ; mov dx, offset parametro
- ; mov ah,9
- ; int 21h
- ;endm
- MOVER equ mov
- clear macro
- xor dx,dx
- xor dh,dh
- xor dl,dl
- endm
- print macro parametro
- clear
- MOVER ah,9
- lea dx,parametro
- int 21h
- endm
- beep macro
- MOV AH,02h
- MOV DL,07h
- INT 21h
- endm
- print_location macro texto,x,y
- clear
- mov ah,02h
- mov bh,00d
- mov dh,x
- mov dl,y
- int 10h
- MOVER ah,9
- lea dx,texto
- int 21h
- endm
- print_step macro parametro
- mov dl, parametro
- lea si, greeting
- mov dl, [si]
- inc si
- ; Sección del Color
- ; mov bx, 011b ; Color. (table below).
- ; mov cx, 50d
- ;int 10h
- endm
- salto macro
- clear
- MOVER ah,9
- lea dx,saltov
- int 21h
- endm
- espera macro
- MOVER ax,0C07h
- int 21h
- endm
- print_digito macro parametro
- MOVER dl,parametro+48
- MOVER ah,02h
- int 21h
- endm
- dibujar_bandera macro
- ; Primera Franja (Azul)
- mov ax,0600h
- mov bh,97h
- mov cx,0000h
- mov dx, 034fh
- int 10h
- ; Segunda Franja (Blanca)
- mov ax,0600h
- mov bh,70h
- mov cx,0400h
- mov dx, 074fh
- int 10h
- ; Tercera Franja (Roja)
- mov ax,0600h
- mov bh,47h
- mov cx,0800h
- mov dx, 0B4fh
- int 10h
- ; Cuarta Franja (Roja)
- mov ax,0600h
- mov bh,47h
- mov cx,0C00h
- mov dx, 104fh
- int 10h
- ; Quinta Franja (Blanca)
- mov ax,0600h
- mov bh,70h
- mov cx,1100h
- mov dx, 144fh
- int 10h
- ; Sexta Franja (Azul)
- mov ax,0600h
- mov bh,97h
- mov cx,1500h
- mov dx, 184fh
- int 10h
- tocar_patriotica
- espera
- endm
- limpiar_pantalla macro
- mov ax,0600h
- mov bh,07h
- mov cx,0000h
- mov dx, 204fh
- int 10h
- endm
- pintar_interfaz macro
- ; Primera Columna (Opciones)
- ; Columna ------------------------------------------
- mov ax,0600h
- mov bh,47h
- mov cl,0d ; Columna Inicial
- mov ch,0d ; Fila Inicial
- mov dl,19d ; Ultima columna
- mov dh,24h ; Ultima fila
- int 10h
- salto
- salto
- print_location about,1,0
- salto
- print_location video 3,0
- salto
- print_location os 5,0
- salto
- print_location procesador 7,0
- salto
- print_location memoria 9,0
- salto
- print_location hd 11,0
- salto
- print_location salirtxt 13,0
- ;obtener_hora
- ;print_location hora 20,6
- obtener_fecha
- print_location fecha 19,5
- endm
- pintar_about macro
- limpiar_panel
- print_location pres1 0,21
- print_location pres2 1,21
- print_location pres3 2,21
- endm
- pintar_panel_video:
- limpiar_panel
- print_location vid1 0,21
- obtener_modo_video
- print_location msj7 2,21
- print_location modo_video 3,21
- jmp bucle
- pintar_panel_about:
- limpiar_panel
- print_location pres1 0,21
- print_location pres2 1,21
- print_location pres3 2,21
- jmp bucle
- pintar_panel_os:
- limpiar_panel
- print_location os1 0,21
- ; print_location msj2 2,21
- ; determinar_version_dos
- ; print_location dos 3,21
- obtener_version_dos
- print_location msj8 2,21
- print_location version_dos 3,21
- print_location msj9 5,21
- obtener_country_code
- mostrar_registro_16_bits dato_country_code, resultado_country_code
- print_location resultado_country_code 6,21
- jmp bucle
- pintar_panel_procesador:
- limpiar_panel
- print_location procesador1 0,21
- print_location msj12 2,21
- hallar_coprocesador_matematico 3
- jmp bucle
- pintar_panel_memoria:
- limpiar_panel
- print_location memoria1 0,21
- print_location msj10 2,21
- obtener_tamano_memoria
- mostrar_registro_16_bits dato_tamano_memoria, resultado_tamano_memoria
- print_location resultado_tamano_memoria 3,21
- print_location msj11 5,21
- obtener_tamano_expansion_memoria
- mostrar_registro_16_bits dato_expansion_memoria, resultado_expansion_memoria
- print_location resultado_expansion_memoria 6,21
- jmp bucle
- pintar_panel_hd:
- limpiar_panel
- print_location hd1 0,21
- crear_carpeta ruta
- print_location msjcarpeta1, 2, 21
- print_location msjcarpeta2, 3, 21
- print_location msjcarpeta3, 4, 21
- print_location msjcarpeta4, 5, 21
- print_location msj1, 7, 21
- determinar_unidad_por_omision
- print_location unidad, 8, 21
- print_location msj6, 10, 21
- print_location msj2, 11, 21
- obtener_espacio_libre 0,ax ; 0, unidad por omision
- mostrar_registro_16_bits dato_espacio_libre, resultado_espacio_libre
- print_location resultado_espacio_libre 12,21
- print_location msj3, 13, 21
- obtener_espacio_libre 0,bx ; 0, unidad por omision
- mostrar_registro_16_bits dato_espacio_libre, resultado_espacio_libre
- print_location resultado_espacio_libre 14,21
- print_location msj4, 15, 21
- obtener_espacio_libre 0,cx ; 0, unidad por omision
- mostrar_registro_16_bits dato_espacio_libre, resultado_espacio_libre
- print_location resultado_espacio_libre 16,21
- print_location msj5, 17, 21
- obtener_espacio_libre 0,dx ; 0, unidad por omision
- mostrar_registro_16_bits dato_espacio_libre, resultado_espacio_libre
- print_location resultado_espacio_libre 18,21
- jmp bucle
- limpiar_panel macro
- ; Columna ------------------------------------------
- beep
- mov ax,0600h
- mov bh,07h
- mov cl,20d ; Columna Inicial
- mov ch,0d ; Fila Inicial
- mov dl,79d ; Ultima columna
- mov dh,24h ; Ultima fila
- int 10h
- endm
- inicializar_mouse macro
- mov ax,00h ;Habilita el Mouse
- int 33h
- cmp al,00h ; Si no se encontró el driver, al debería estar en 0
- je salir ; Si eso es así, se debe salir del programa
- mov ax,01h ; Funcion 01h en ax para int 33h, muestra el puntero
- int 33h
- endm
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; FUNCIONES DEL SISTEMA;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; OBTENIENDO LA HORA
- macro hora_a_ascii registro
- mov al, registro
- push dx
- mov ah, 0
- mov dl, 10
- div dl
- or ax, 3030h
- pop dx
- endm
- macro obtener_hora
- lea bx, hora
- push ax
- push cx
- mov ah, 2ch
- int 21h
- hora_a_ascii ch
- mov [bx], ax
- hora_a_ascii cl
- mov [bx+3], ax
- hora_a_ascii dh
- mov [bx+6], ax
- pop cx
- pop ax
- endm
- ; OBTENIENDO LA FECHA
- macro obtener_fecha
- lea bx, fecha
- push ax
- push cx
- mov ah, 2ah
- int 21h
- hora_a_ascii dl
- mov [bx], ax
- hora_a_ascii dh
- mov [bx+3], ax
- push bx ; /////////
- sub dx,dx
- mov bx,0
- mov ax,cx
- mov bx,100
- div bx ; se guarda el resultado en
- hora_a_ascii al ; Es redundante, pero ni modo estas cosas pasan :p
- pop bx
- MOV [BX+6], AX
- hora_a_ascii dl
- MOV [BX+8], AX
- pop cx
- pop ax
- endm
- ; CREAR DIRECTORIO
- macro crear_carpeta ruta
- ; Si se corre desde el emulador, entonces
- ; c:\emu8086\vdrive\C\ruta
- mov dx, offset ruta_directorio
- mov ah, 39h
- int 21h
- endm
- ; IMPRIMIR LA UNIDAD DE DISCO POR OMISIÓN
- ; 0->A, 1->B, 2->C, 3->D, ... , n->HexChar
- macro determinar_unidad_por_omision
- lea bx, unidad
- mov ah,19h ; Unidad de Disco por Omision
- int 21h
- or al,30h
- mov [bx],al
- endm
- ;; DETERMINAR LA VERSIÓN DEL DOS
- ;macro determinar_version_dos
- ; sub dx,dx
- ; lea bx,dos
- ; mov al,30h ; Unidad de Disco por Omision
- ; int 21h
- ; or al,30h
- ; mov [bx],al
- ;endm
- nota macro tono,duracion,bucle1,bucle2
- mov al, 10110110b ; canal 2
- out 43h, al ; operación y modo 3
- mov ax, tono ; frecuencia en ax: 1.193.180 / 400
- out 42h, al ; enviar byte bajo primero
- mov al, ah ; colocar byte alto en al
- out 42h, al ; y enviarlo
- or al, 00000011b ; bit 0 y bit 1 activos
- out 61h, al ; y excitar el parlante con el PPI
- mov bx, duracion
- bucle1:
- mov cx, 60535
- bucle2:
- dec cx
- jne bucle2
- dec bx
- jne bucle1 ; si no es igual, seguir esperando
- endm
- macro tocar_patriotica
- cli
- in al, 61h ; Salvar el byte de información en el
- push ax ; puerto 61h.
- cli
- mov cx, 100h
- nota 3000,8,001,a001 ; SOL
- nota 3100,3,002,a002 ; FA
- nota 2650,5,003,a003 ; LA
- nota 3000,7,004,a004 ; SOL
- nota 3000,4,005,a005 ; SOL
- nota 2200,6,006,a006 ; DO(A)
- nota 2300,6,007,a007 ; SI
- nota 2650,4,008,a008 ; LA
- nota 2300,5,009,a009 ; SI
- nota 2650,10,010,a010 ; LA
- nota 2300,8,011,a011 ; SI
- nota 2200,3,012,a012 ; DO
- nota 1950,5,013,a013 ; RE
- nota 2300,7,014,a014 ; SI
- nota 3000,4,015,a015 ; SOL
- nota 2650,6,016,a016 ; LA
- nota 3000,6,017,a017 ; SOL
- nota 3100,4,018,a018 ; FA
- nota 2650,5,019,a019 ; LA
- nota 3000,10,020,a020 ; SOL
- in al, 61h ; Desactivar el parlante
- and al, 11111100b ; 0FCh desactiva el parlante
- out 61h, al ; enviarlo al puerto
- pop ax ; Restablecer el byte de información
- out 61h, al ; original que estaba en el puerto 61h.
- sti
- endm
- obtener_espacio_libre macro unidad,funcion
- mov ah,36h ;rutina para solicitar espacio libre en el disco
- mov dl,unidad
- int 21h
- mov dato_espacio_libre,funcion
- ; ax=numero de sectores por grupo
- ; bx=Numero de grupos disponibles
- ; cx=Numero de bytes por seccion (Por lo general 512)
- ; dx=Numero de grupo en el disco
- endm
- macro iteracion_push
- sub dx,dx
- div bx
- or dx,3030h
- push dx
- endm
- iteracion_pop macro incremento
- pop dx
- ;mov ah,02h
- ;int 21h
- mov [bx+incremento],dx
- endm
- iteracion_pop_low macro incremento ; para obtener el último digito
- ; pues me estaba dando problemas con el residuo y el dividendo
- ; con un cero adicional
- pop dx
- ;mov ah,02h
- ;int 21h
- ;mov dh,0
- mov [bx+incremento],dl
- endm
- mostrar_registro_16_bits macro elemento, resultado
- sub ax,ax
- sub bx,bx
- mov ax,elemento ; Division entre 10, dividendo es dato del sistema
- mov bx,10 ; Que divida entre 10, divisior es 10
- ; el resultado se guarda en ax
- ; el residuo se guarda en dx
- iteracion_push ; Iteración 1
- iteracion_push ; Iteración 2
- iteracion_push ; Iteración 3
- iteracion_push ; Iteración 4
- iteracion_push ; Iteración 5
- iteracion_push ; Iteración 6
- iteracion_push ; Iteración 7
- iteracion_push ; Iteración 8
- iteracion_push ; Iteración 9
- iteracion_push ; Iteración 10
- iteracion_push ; Iteración 11
- iteracion_push ; Iteración 12
- iteracion_push ; Iteración 13
- iteracion_push ; Iteración 14
- iteracion_push ; Iteración 15
- lea bx,resultado
- or ax,3030h
- push ax
- iteracion_pop ; Iteración 1
- iteracion_pop 1 ; Iteración 2
- iteracion_pop 2 ; Iteración 3
- iteracion_pop 3 ; Iteración 4
- iteracion_pop 4 ; Iteración 5
- iteracion_pop 5 ; Iteración 6
- iteracion_pop 6 ; Iteración 7
- iteracion_pop 7 ; Iteración 8
- iteracion_pop 8 ; Iteración 9
- iteracion_pop 9 ; Iteración 10
- iteracion_pop 10 ; Iteración 11
- iteracion_pop 11 ; Iteración 12
- iteracion_pop 12 ; Iteración 13
- iteracion_pop 13 ; Iteración 14
- iteracion_pop 14 ; Iteración 15
- iteracion_pop_low 15 ; Iteración 16
- endm
- macro obtener_modo_video
- lea bx, modo_video
- push bx
- mov ah,0Fh ; Obtener modo de video
- int 10h
- or al,30h
- mov dl,al
- pop bx
- mov [bx],al
- endm
- macro obtener_version_dos
- lea bx, version_dos
- ; Parte entera (Numero primario de version)
- push bx ; Guardar en la pila 1
- mov ax,3306h ; Obtiene la versión del DOS
- int 21h
- mov ax,bx
- or ax,3030h ; Lo pasa a formato ASCII
- pop bx ; Liberar la pila 1
- mov [bx],al
- mov [bx+2],ah
- endm
- macro obtener_country_code
- mov al,255d
- mov bx,0
- mov ah,38h ;rutina para solicitar country code
- int 21h
- mov bx,dx
- mov dato_country_code , dx
- ; bx = COUNTRY CODE
- endm
- macro obtener_tamano_memoria
- int 12h ; Área de datos del tamaño de la memoria ;
- mov dato_tamano_memoria , ax
- endm
- macro obtener_tamano_expansion_memoria
- int 15h ; Área de datos del tamaño de la memoria
- mov ah,88h ;
- mov dato_expansion_memoria , ax
- endm
- hallar_coprocesador_matematico macro renglon
- push ax
- push dx
- int 11h ; call interrupt 11h (Equipment check)
- and ax,2 ; single out bit 1 Coprocessor bit
- cmp ax,2 ; 2=installed 0=none
- jz hay ; if installed, jump to end
- print_location msj14, renglon,21
- hay:
- print_location msj13, renglon,21
- endm
- salir:
- mov ax,02h ;Oculta el apuntador del ratón
- int 33h
- ; Devuelve la consola a su estado normal
- mov ah,00h ; Establece el modo de texto
- mov al,03h
- int 10h
- .exit ; El conjunto de instrucciones para salir, incluidas en salir
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement