Skip to content

Instantly share code, notes, and snippets.

@dutchand
Created February 15, 2021 18:54
Show Gist options
  • Save dutchand/a4bc3290206f0614f72d4d047f9fe892 to your computer and use it in GitHub Desktop.
Save dutchand/a4bc3290206f0614f72d4d047f9fe892 to your computer and use it in GitHub Desktop.
BRUCE LEE/PROFESOR: ING.PEDRO MILA
;Encendido y apagado del Cautin
;segmento de pila
stack segment para stack 'stack'
db 256 dup(00H)
stack ends
;segmento de datos
data segment para public 'data'
portada db ' ***< PROYECRO DE CURSO DE MAQUINA COMPUTADORAS II >***','$'
profesor db 'PROFESOR: ING.PEDRO MILA','$'
autor db 'AUTORES: ','$'
intg1 db ' BRUCE LEE REYES CAPIRO','$'
equipo db 'EQUIPO #3.','$'
comienzo db 'INICIADA LA COMUNICACION','$'
cadena db 'COMUNICACION TERMINADA','$'
cartel db 'SERVICIO NO RECIBIDO DE MAQUINA I','$'
linea db 13,10,'$'
esperatx db 'ESPERANDO TRANSMICION DE MAQUINA I','$'
cartel1 db 'PARA COMEMZAR PULSE - C(c) Y S(s) PARA SALIR: ','$'
comfirme db 'desea salir sin apagar el cautin si(s)-no(n)','$'
aux db 0
terminar db 'Oprima una tecla para terminar...','$'
Tramas db 26 dup(?)
;Tram_Comamdo db 10(00)
Trama_ACK db 55H,55H,16H,16H,06H,0FFH,0DH
Trama_NAK db 55H,55H,16H,16H,15H,0FFH,0DH
SOH db 01H
STX db 02H
ETB db 17H
ETX db 03H
ENQ db 05H
EOT db 04H
CCB db 0
caracter db 0
pos1 db 0
pos2 db 0
band db 0
bandd db 0
comparar db 0
;Texto db 20 (?)
encabezamiento db 00h
data ends
;segmento de macros
;Impresión simple de cadenas
Pantalla MACRO texto
push AX
push DX
mov AH,9 ;Solicitar servicio 9
lea DX,texto ;DX apunta al texto
int 21h ;imprimir hasta $
pop DX
pop AX
ENDM
;segmento de codigo
code segment para public 'code'
principal proc far
assume cs: code
mov ax, data
mov ds, ax
mov es,ax
assume ds: data
;INIC UART
;VELOCIDAD 9600 BAUDIOS com1
MOV DX,03FBH
MOV AL,80H
OUT DX,AL
;bit ms
MOV DX,03F8H
MOV AL,0Ch
OUT DX,AL
;bit Ms
MOV DX,03F9H
MOV AL,00h
OUT DX,AL
;CARACT DE CARACTER
MOV DX,03FBH
MOV AL,1bH
OUT DX,AL
;presentacion
call Poner_Cursor_Inic
;call LIMPIAR_PANTALLA
Pantalla linea
Pantalla linea
Pantalla portada
Pantalla linea
Pantalla linea
Pantalla profesor
Pantalla linea
Pantalla autor
Pantalla intg1
Pantalla linea
Pantalla equipo
Pantalla linea
Pantalla linea
;espera tecla
Pantalla cartel1
a1:call Espera_Tecla
cmp al,'c'
jz as
cmp al,'s'
jz au
cmp al,'C'
jz as
cmp al,'S'
jnz a1
au: jmp fin
as: ;ESPERENDO SI ENTRA DATO
mov band,0
mov pos1,0
mov pos2,0
call LIMPIAR_PANTALLA
Pantalla linea
Pantalla esperatx
a2: call Llenar_TramaD
;tipo de trama
call Tipo_Trama
; si es un ENQ responde sino no
mov al,ENQ
cmp comparar,al
jnz a2
;mandar ACK
mov si,offset Trama_ACK
call Enviar_Trama
;comenzar
repp:call LIMPIAR_PANTALLA
Pantalla comienzo
call Llenar_TramaD
;tipo de trama
call Tipo_Trama
mov al,SOH
cmp comparar,al
jnz command
;es un texto
mov cx,3
cil:inc si
loop cil
mov al,[si]
cmp al,'e'
jz enc
cmp al,'E'
jnz apag
enc:;encender cautin
call Inici_Port_Paralelo
call encender
;call enviar_dato
call Dar_Pulso
jmp continue
apag:;apagar cautin
call Inici_Port_Paralelo
call apagar
;call enviar_dato
call Dar_Pulso
;jmp continue
continue:;volver o salir
;inc si
;inc si
add si,2
mov al,[si]
mov aux,al
mov al,ETX
cmp aux,al
jz fin
jmp repp
command:;es un comando
mov al,EOT
cmp comparar,al
jnz repp
;jmp fin
fin:
mov pos1,15
mov pos2,23
call Poner_Cursor_Inic
Pantalla terminar
call Espera_Tecla
call Exit
principal ENDP
;procedimientos
Exit proc NEAR
mov AX,4C00h
int 21h
ret
Exit ENDP
;poner pantalla completa
Poner_Modo_Texto PROC NEAR
mov ah,0
mov al,18
int 10h
ret
Poner_Modo_Texto ENDP
Poner_Cursor_Inic PROC NEAR
PUSH AX
PUSH BX
;call Poner_Modo_Texto
MOV AH, 02H
MOV BH, 0
mov dh,pos1
mov dl,pos2
INT 10H
mov ah,0EH ;modo teletipo
mov bh,0
POP BX
POP AX
ret
Poner_Cursor_Inic ENDP
;
LIMPIAR_PANTALLA PROC NEAR
PUSH AX
PUSH CX
PUSH DX
MOV DX, 00H
CALL Poner_Cursor_Inic
MOV AH, 0EH
MOV AL, 20H
MOV CX, 2400
LI: INT 10H
LOOP LI
MOV DX, 00H
CALL Poner_Cursor_Inic
POP DX
POP CX
POP AX
RET
LIMPIAR_PANTALLA ENDP
;Impresión simple de cadenas
;Pantalla PROC NEAR
;push AX
;push DX
;mov AH,9 ;Solicitar servicio 9
;mov DX,offset si ;DX apunta al texto
;int 21h ;imprimir hasta $
;pop DX
;pop AX
;Pantalla ENDP
;Espera por una tecla
Espera_Tecla PROC NEAR
mov AH,07H ;solicitar servicio 7. Entrada
int 21h ;de un caracter sin mostrarle
ret
;mov caracter,al
Espera_Tecla ENDP ;el ASCII queda en AL
;muestra caracter por pantalla
Muestra_Caracter PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL, caracter
INT 21H
POP DX
POP AX
ret
Muestra_Caracter ENDP
;rutina tx
RutTx PROC NEAR
PUSH DX
PUSH AX
;PUEDO TRANSMITIR DATO?
MOV DX, 03FDH
T1: IN AL, DX
TEST AL, 20H
JZ T1
POP AX
;ESCRIBIR REGISTRO TX
MOV DX, 03F8H
OUT DX, AL
POP DX
ret
RutTx ENDP
;RUTINA RX
RutRx PROC NEAR
;HAY DATO RECIBIDO?
PUSH DX
push ax
mov dx, 03fDh
n1:in al, dx
test al, 01h
jz n1
;LEER REGISTRO RX
mov dx, 03f8h
in al, dx
;HAY DATO RECIBIDO?
;MOV DX, 03FDH
;R1: IN AL, DX
;TEST AL, 01H
;JZ R1
;mov band,1
;jmp R2
;LEER REGISTRO RX
;MOV DX, 03F8H
;IN AL, DX
;POP DX;R2:
ret
RutRx ENDP
;enviar cualquier trama
Enviar_Trama PROC NEAR
E1: mov al,[si]
call ruttx
cmp al,0ffh
jz salir3
inc si
jmp E1
salir3: ret
Enviar_Trama ENDP
;llenar tramas en general
Llenar_TramaD PROC NEAR
ll:call RutRx
;cmp band,1
;jz l1
mov[di],al
inc di
cmp al,0FFh
jne ll
mov ah,04h
int 21
;mov al,0DH
l1: ret
Llenar_TramaD ENDP
;tipo de trama
Tipo_Trama PROC NEAR
mov si,offset Tramas
mov al,[si]
cmp al,55h
jz Ti1
mov cx,6
jmp Ti2
Ti1:mov cx,4
Ti2:inc si
loop Ti2
mov al,[si]
mov comparar,al
ret
Tipo_Trama ENDP
;inicializar puerto paralelo
Inici_Port_Paralelo proc near
;para poner en cero
mov dx,037Ah
mov al,00h
out dx,al
ret
Inici_Port_Paralelo endp
;dar pulso completo
Dar_Pulso proc near
;dar pulso de 0 a 1
mov dx,037Ah
mov al,01h
out dx,al
;dar pulso de 1 a 0
mov dx,037Ah
mov al,00h
out dx,al
ret
Dar_Pulso endp
;encender cautin
encender proc near
push ax
push dx
;mandar strobe=1
mov dx,0378h
mov al,42h
out dx,al
pop dx
pop ax
ret
encender endp
;apagar cautin
apagar proc near
push ax
push dx
;mandar strobe=0
mov dx,0378h
mov al,80h
out dx,al
pop dx
pop ax
ret
apagar endp
CODE ENDS
END principal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment