Pascal/Turbo Pascal - CPU null-moden CPU

 
Vista:

CPU null-moden CPU

Publicado por micropais (1 intervención) el 18/06/2006 22:02:50
Transmision por cable paralelo BASICA sin protocolos y sin -Busy .
perfectamente comentado para practicar la transmision de datos
con un cable NULL-MODEM y dos CPUs.
La transmision se realiza con 4bits cada vez .Escrito para TP7 a petición de WILLY.

SALUDOS a todos
__________________________________________________________________

uses crt;
var

base_LPTX:word;
xword:word;
a,b,c:integer;
{************************************}
{
la direccion BASE de LPT1 la guarda el bios en una variable 0040:0008 hex
la de LPT2 en 0040:000A hex la de LPT3 en 0040:000C
- la direccion base de LPT1 suele ser 378h pero debemos asegurarnos ya que es
configurable desde el bios de arranque , si obtenemos 0 en vez de 888=378h es que
el puerto paralelo no est  instalado. }
{ num direccion BASE que queremos averiguar de LPT1=1 LPT2=2 ...}
{************************************}
function dir_lptx(num:byte):word;assembler;
asm
push es
xor bx,bx { bx=0 }
mov bl,num { 1=lpt1 2=lpt2 ... }
shl bl,1
add bl,6
{ multiplicmos por dos
si lpt1 1x2=2+6=8 =08 hex 0040:0008
lpt2 2x2=4+6=10=0A hex 0040:000A
lpt3 3x2=6+6=12=0C hex 0040:000C

}

mov ax,40h
mov es,ax

mov dx,es:[bx]
mov ax,dx
pop es
end;
{************************************}
{ para enviar
enviamos a la direccion base de lptx un nible (4 bits) en los bits
3,2,1,0 el bit 4 actua de 5§ bit bit-busy invertido por hardware
si enviamos un 1 recibiran un 0 y viceversa
}

procedure enviar(dato:byte);assembler;
asm
xor al,al
{-}

mov al,00001111b
mov al,dato
mov dx,base_LPTX
out dx,al

end;
{************************************}
{
Para recibir sobre la direccion base + 1 de LPTX
y obtenemos el bit invertido busy en 7 bit y los datos en el bit
6,5,4,3

}

function recibir:byte;assembler;
asm
mov dx,base_LPTX
inc dx
in al,dx
and al,01111000b { recogemos un nible sin bit de busy }
shr al,3
end;
{************************************}
begin
clrscr;
writeln('pruebas transferencia por puerto paralelo.');

base_LPTX:=dir_lptx(1);

{ para crear llave de cierre pulsar ALT+125 desde el EID }

{ EMISOR para actuar como Emisor finalizar la siguiente linea con
llave de cierre y quitar llave de cierre de la linea del Receptor }
repeat
for a:=0 to 15 do begin
gotoxy(1,10);
write('enviando: ',a:3);
enviar(a) ;
delay(10000); {pausa para verlo mejor en el otro equipo }
end;
until keypressed;{}

{ RECEPTOR para actuar como Receptor finalizar la siguiente linea con
llave de cierre y quitar llave de cieerre de la linea del receptor

repeat

gotoxy(10,3);
writeln('recibiendo ',recibir:3);

until keypressed;{}

readln;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CPU null-moden CPU

Publicado por Willy (7 intervenciones) el 21/06/2006 20:14:23
Que exelente!!
Muchas gracias Micropais. Muy buena idea la de mostrar ese código en el foro y que asi este a disposición de todos!

Es un verdadero regalo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CPU null-moden CPU

Publicado por micropais (209 intervenciones) el 21/06/2006 21:46:09
Gracias a todos y a estos foros .
Yo tambien aprendo de vosotros.

SALUDOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar