Es el preeliminar del código sin las imágenes. Esto es solo para que veas como se comporta el puerto paralelo cuando tienes un acierto, o cuando tecleas por error una letra
Consigue el Userport para habilitar el puerto paralelo. Ejecuta esta aplicación primero antes que tu programa. Usa Tasm y Tlink para ensamblar y enlazar
...................................................................................................................................
; MACROS
;...................................................................................................................................
clean macro
mov ax,0600h
mov bh,07h
mov cx,0000h
mov dx,314fh
int 10h
endm
poscur macro row,col
mov ah,02h
mov bh,00h
mov dh,row
mov dl,col
int 10h
endm
modo macro
mov ah,00h ;modo gráfico
mov al,12h ;640x480 color
mov bh,00h ;pagina 0
mov bl,00h ;fondo negro de la pantalla
int 10h
endm
message macro mesi,long,color
mov ah,13h
mov al,01h
mov bh,00h
mov bl,color
lea bp,mesi
mov cl,long
int 10h
endm
pixel macro x,y,color
mov ah,0ch
mov al,color
mov bh,00
mov cx,x
mov dx,y
int 10h
endm
printcha macro
mov ah,02h
int 21h
endm
terminal macro
mov ah,00 ;modo texto
mov al,03 ;modo color
int 10h
mov ax,4c00h
int 21h
endm
portdata macro score
mov dx,378h ;dirección del puerto de datos
mov al,score
out dx,al
endm
;----------------------------------------------------------------------------------------
pila segment para stack 'stack'
dw 256h
pila ends
dato segment para 'data'
CR equ 13
LF equ 10
menu db 'Teclea la letra inicial de la figura','$'
bien db 'Aciertos','$'
mal db 'Fallas','$'
escap db 'Presiona ESC para salir del juego','$'
car db 00
fail db '0'
colu db 34
;orden de figuras
E db 'Escalera'
J db 'Jeringa'
S db 'Silla'
dato ends
;------------------------------------------------------------------------------------------------------------
; INICIO PROGRAMA
;------------------------------------------------------------------------------------------------------------
codigo segment para 'code'
assume cs:codigo, ss:pila,ds:dato,es:dato
inicio:
mov ax,dato
mov ds,ax
push ds
pop es
clean
modo ;modo de video
;colocamos las etiquetas del programa
poscur 00,20
message menu,36,0ch
poscur 02,20
message bien,08,09h
poscur 02,50
message mal,06,09h
;---------------------------------------------
call fige ;llama figuras
call borrow
call figj
call borrow
call figs
call borrow
call fign
call borrow
call figx
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
terminal
;.....................................................................................................................................................
; PROCEDIMIENTOS
;.....................................................................................................................................................
fige proc near ;Ojo niña con este procedimiento, porque aplica a todos los demas!
;//aqui pones la rutina para dibujar la escalera
lea si,E ; carga la cadena "Escalera" en registro SI
scan1:
mov ah,08h ;peticion de teclado
int 21h
cmp al,'E' ;si lo que tecleaste NO es una E mayúscula
jne erro1 ;hace la rutina de error
poscur 20,colu ;si tecleaste E, va a desplegar cada letra de la palabra
mov dl,[si]
printcha ;en el renglon 20, columna 34
inc car ;incrementas contador de caracteres
cmp car,08 ; comparas con la longitud de caracteres
je salgo ;si es igual, sale de la subrutina
inc si ; si no, incrementa index si
inc colu ;incrementa posición de columna
jmp scan1 ;vuelve a esperar una tecla
salgo:
portdata 01h ; // aqui pones la rutina de mandar al puerto paralelo el punto
poscur 02,29
mov dl,'1'
printcha
jmp salgo2
erro1:
inc fail
poscur 02,57
mov dl,fail
printcha
cmp fail,'3'
jne scan1
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
terminal
salgo2:
ret
fige endp
;..........................................................................................................................................................
figj proc near
;//aqui pones la rutina para dibujar la jeringa
lea si,J ; carga la cadena "Escalera" en registro SI
scan2:
mov ah,08h ;peticion de teclado
int 21h
cmp al,'J' ;si lo que tecleaste NO es una E mayúscula
jne erro2 ;hace la rutina de error
poscur 20,colu ;si tecleaste E, va a desplegar cada letra de la palabra
mov dl,[si]
printcha ;en el renglon 20, columna 34
inc car ;incrementas contador de caracteres
cmp car,07 ; comparas con la longitud de caracteres
je salgo3 ;si es igual, sale de la subrutina
inc si ; si no, incrementa index si
inc colu ;incrementa posición de columna
jmp scan2 ;vuelve a esperar una tecla
salgo3:
portdata 02h ; // aqui pones la rutina de mandar al puerto paralelo el punto
poscur 02,29
mov dl,'2'
printcha
jmp salgo4
erro2:
inc fail
poscur 02,57
mov dl,fail
printcha
cmp fail,'3'
jne scan2
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
terminal
salgo4:
ret
figj endp
;..........................................................................................................................................................
figs proc near
lea si,S ; carga la cadena "Escalera" en registro SI
scan3:
mov ah,08h ;peticion de teclado
int 21h
cmp al,'S' ;si lo que tecleaste NO es una E mayúscula
jne erro3 ;hace la rutina de error
poscur 20,colu ;si tecleaste E, va a desplegar cada letra de la palabra
mov dl,[si]
printcha ;en el renglon 20, columna 34
inc car ;incrementas contador de caracteres
cmp car,05 ; comparas con la longitud de caracteres
je salgo5 ;si es igual, sale de la subrutina
inc si ; si no, incrementa index si
inc colu ;incrementa posición de columna
jmp scan3 ;vuelve a esperar una tecla
salgo5:
portdata 03h ; // aqui pones la rutina de mandar al puerto paralelo el punto
poscur 02,29
mov dl,'3'
printcha
jmp salgo6
erro3:
inc fail
poscur 02,57
mov dl,fail
printcha
cmp fail,'3'
jne scan3
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
terminal
salgo6:
ret
figs endp
;..........................................................................................................................................................
fign proc near
scan4:
mov ah,10h ;peticion de teclado
int 16h
cmp ah,27h ;si lo que tecleaste NO es una E mayúscula
jne noesn ;hace la rutina de error
portdata 04h
poscur 02,29
mov dl,'4' ; // aqui pones la rutina de mandar al puerto paralelo el punto
printcha
jmp vamos
noesn:
inc fail
poscur 02,57
mov dl,fail
printcha
cmp fail,'3'
jne scan4
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
terminal
vamos:
ret
fign endp
;..........................................................................................................................................................
figx proc near
scan5:
mov ah,08h ;peticion de teclado
int 21h
cmp al,'X' ;si lo que tecleaste NO es una E mayúscula
jne noesx ;hace la rutina de error
portdata 05h ; // aqui pones la rutina de mandar al puerto paralelo el punto
poscur 02,29
mov dl,'5'
printcha
jmp vamox
noesx:
inc fail
poscur 02,57
mov dl,fail
printcha
cmp fail,'3'
jne scan5
poscur 29,00
message escap,33,07h
mov ah,08h
int 21h
vamox:
ret
figx endp
;..........................................................................................................................................................
borrow proc near
mov bl,'0'
mov fail,bl
mov bl,00
mov car,bl
mov bl,34
mov colu,bl
ret
borrow endp
codigo ends
end inicio