Hi
and three more, tell me if this is not enough to send then (i most search for them in my archive )
use bascom 8051, and 89c4051 hase 4KB and new bascom8051 demo compile 4KB!!
Program BlowIt2051;
Uses VTD;
var
base: Word;
i, j, k, l: Integer;
mem: Array[0..2047] of byte;
f: file;
Const
inc_bit = $01;
vpp_bit = $02;
prog_bit = $04; { not inverse! }
erase_bit = $08;
prog_mode = $0F;
erase_mode = $07;
idle = $09; { Idle, RST = 0 }
label
err_exit;
begin
Writeln;
Writeln(ëóóóóó BlowIT (tm) 2051 ver 1.0 beta óóóóóÃ);
Writeln(ë
http://sistudio.com for schematics and latest releaseÃ);
Writeln;
if ParamCount<1 then begin
Writeln(ëusage: BI2051 filename.bin [n]Ã);
Writeln(ëusage: n=1,2,3 LPT number to useÃ);
Writeln;
halt(1);
end;
base := memw[$40:8];
if ParamStr(2) = ë2à then begin
base := memw[$40:10];
end;
if ParamStr(2) = ë3à then begin
base := memw[$40:12];
end;
If base = 0 then begin
Writeln(ëParallel port does not exist!Ã);
Halt(2);
end;
for i:=0 to 2047 do mem
:= $FF;
assign(f, ParamStr(1));
reset(f,1);
blockread(f, mem, 2048,i);
close(f);
If IOResult <> 0 then begin
Writeln(ëFile not found!Ã);
halt(2); { File error }
end;
port[base] := $FF;
{ Erase }
port[base+2] := $01;
nms(10);
port[base+2] := $03; { RST = 12 }
nms(1);
port[base+2] := erase_mode; { RST = 12, PROG = H }
nms(1);
port[base+2] := erase_mode xor prog_bit; { P3.2 = 0 }
nms(12); { This is ERASE PULSE!}
port[base+2] := erase_mode; { P3.2 = 1 }
nms(12);
port[base+2] := erase_mode xor vpp_bit; { RST = 0 }
nms(20);
{ Program ROM }
port[base+2] := idle;
nms(10);
port[base+2] := idle or vpp_bit;
nms(10);
port[base+2] := prog_mode; { RST = 12, PROG = H }
nms(1);
Write(ëBlowingÃ);
k := 0; l := 0;
for j := 0 to 2047 do
begin
port[base] := mem[j];
if mem[j] <> $FF then begin
delay_mks(2);
{ PROG Pulse}
EnterCriticalSection;
port[base+2] := prog_mode xor prog_bit; { P3.2 = 0 }
delay_mks(5);
port[base+2] := prog_mode; { P3.2 = 1 }
delay_mks(2);
i := 0;
while (port[base+1] and 64) = 0 do
begin
delay_mks(10);
if i>200 then begin
Writeln;
Writeln(ëError, never ready?Ã);
goto err_exit;
end;
if i > k then k := i;
inc(i);
end;
LeaveCriticalSection;
if l > 30 then begin
Writeln;
Writeln(ëError, no device?Ã);
goto err_exit;
end;
if i = 0 then inc(l);
delay_mks(2);
end;
port[base+2] := prog_mode xor inc_bit; { XT1 = 1 }
delay_mks(5);
port[base+2] := prog_mode; { XT1 = 1 }
delay_mks(2);
if (j mod 64) = 0 then Write(ë.Ã);
end;
port[base] := $FF; nms(1);
port[base+2] := prog_mode xor vpp_bit; { P3.2 = 0!! }
nms(1);
port[base+2] := idle;
port[base] := $00;
BlowIT 2051
Writeln;
Writeln(ëWe are finished.Ã);
Halt(0);
err_exit:
LeaveCriticalSection;
Halt(1);
end.