Tras poner en la entrada anterior la tarjeta de
48 E/S, ahora hay que pensar en probarla. Para ello, podemos usar una versión
modificad del programa de Test
de puerto Centronics.
lo que haremos es cambiar los
textos, para que simbolicen la función asignada para la tarjeta 48IOCENT en vez
de indicar la función estándar de Impresión.
TEST_48IO.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/>.
;programa test para poner en marcha la tarjeta 48IOcent
include main.mac
include stdio.mac
include mouse.mac
include math.mac
include window.mac
.model compact,pascal
.stack 100
.data
raton dw 0 ;bandera para detectar flanco de pulsación
m1 db "Test tarjeta 48ioCENT Por Jose Angel Moneo Fernández",0
datos db "Dato-378H",0
control db "Cont-37AH",0
Estado db "Esta-379H",0
iddat1 db "┌───────────── D0",0
iddat2 db "│┌──────────── D1",0
iddat3 db "││┌─────────── D2",0
iddat4 db "│││┌────────── D3",0
iddat5 db "││││┌───────── D4",0
iddat6 db "│││││┌──────── D5",0
iddat7 db "││││││┌─────── D6",0
iddat8 db "│││││││┌────── D7",0
idest1 db "---------- ────────┘││││",0
idest2 db "D3-D7----- ─────────┘│││",0
idest3 db "D2-D6----- ──────────┘││",0
idest4 db "D1-D5----- ───────────┘│",0
idest5 db "D0-D4──────────────────┘",0
idcont1 db "││││└────── WR",0
idcont2 db "│││└─────── RDL",0
idcont3 db "││└──────── RDH",0
idcont4 db "│└───────── EN DIR",0
idcont5 db "└────────── ",0
msalir db "Salir",0
orden db "76543210",0
;Inicializamos la varialbe con 100h para que al presentar el número en
; binario siempre mantenga los 8 dígitos. Despues borraremos el 1 inical
; en pantalla
numero dw 100h,0
ncontrol dw 100h,0
nestado dw 100h,0
.code
test48io proc far
main
setcursor off
resmouse
mouse on
putmouse 64,64
clrscr
gotoxy 10,1
puts m1
draw_win 9,35,12,46,control
gotoxy 37,10
puts orden
draw_win 15,25,18,36,estado
gotoxy 27,16
puts orden
draw_win 9,18,12,29,datos
gotoxy 20,10
puts orden
gotoxy 8,19
puts idest1
gotoxy 8,20
puts idest2
gotoxy 8,21
puts idest3
gotoxy 8,22
puts idest4
gotoxy 8,23
puts idest5
gotoxy 40,13
puts idcont1
gotoxy 40,14
puts idcont2
gotoxy 40,15
puts idcont3
gotoxy 40,16
puts idcont4
gotoxy 40,17
puts idcont5
gotoxy 50,22
puts msalir
mov dx,378h
in al,dx
mov byte ptr numero,al
mov dx,37Ah
in al,dx
mov byte ptr ncontrol,al
refresca:
;imprime el valor para enviar como dato
gotoxy 19,11
printf numero,@b ;imprime el valor en binario
gotoxy 19,11 ; borra el uno no valido
putchar ' '
; imprime el valor para ncontrol
gotoxy 36,11
printf ncontrol,@b
gotoxy 36,11 ; borra el uno no valido
putchar ' '
test2:
mov dx,379h
in al,dx
cmp al,byte ptr nestado ; no imprime si no cambia el valor
je espera
mov byte ptr nestado,al
gotoxy 26,17
printf nestado,@b
gotoxy 26,17 ; borra el uno no valido
putchar ' '
espera:
getmouse ;comprueba el estado del raton
cmp ax,1
jnz actual ;si no se ha pulsado se espera
cmp ax,raton ;si se pulso se verifica si ha sido un
mov raton,ax ;flanco de subida
jnz seleccion ;si es asi se selecciona la opcion deseada
actual:
mov raton,ax
jmp espera
seleccion:
getmousexy 19,11,8,0 ; numero
cmp al,0ffh
jnz op_numero
getmousexy 36,11,8,0 ; ncontrol
cmp al,0ffh
jnz op_control
getmousexy 50,22,5,0 ; ventana para salir
cmp al,0ffh
jnz fin
jmp espera
op_control:
; ncontrol
;Creamos una palabra con el bit indicado a 1
;mediante traslaciones de un bit
mov cl,ah
xor al,al ; borra al , donde crearemos la mascara
stc ; carry a 1
rcr al,cl ; situa el bit elegido
mov ah,al
mov al,byte ptr ncontrol
xor al,ah
;cambiar bit ncontrol para enviarlo
mov byte ptr ncontrol,al
mov dx,37Ah
out dx,al
jmp refresca
op_numero: ;numero
;Creamos una palabra con el bit indicado a 1
;mediante traslaciones de un bit
mov cl,ah
xor al,al ; borra al , donde crearemos la mascara
stc ; carry a 1
rcr al,cl ; situa el bit elegido
mov ah,al
mov al,byte ptr numero
xor al,ah
;cambiar bit ncontrol para enviarlo
mov byte ptr numero,al
;saca el dato por el puerto
mov dx,378h
out dx,al
jmp refresca
fin:
setcursor on
mouse off
ret
test48io endp
end test48io
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.