(****************************************************************************) (* Das AT89C51 ISA-Programmiergerät-Programm, Version 1.0 *) (* ---------------------------------------------------------------------- *) (* copyright (c) 1999 by Hubersoft Corp. All rights reserved. *) (****************************************************************************) uses crt; var flash:array[0..3999] of byte; flashsize: word; f: file; counter, result: word; dir: string; procedure writechip(bytes: word); var count: word; begin write('Programming...'); port[$203]:=128; {init chip1} port[$223]:=128; {init chip2} port[$220]:=1; delay(1); {table=erase config} port[$221]:=5; {12V off & -prog high} port[$222]:=1; delay(500); port[$221]:=7; delay(5); {12V on} port[$221]:=3; delay(20); {-prog low} port[$221]:=7; {-prog high} port[$220]:=14; delay(1); {table=write config} for count:=0 to bytes do begin gotoxy(16, wherey); write('(',round((count/bytes)*100),'%)'); port[$200]:=flash[count]; {new data} port[$201]:=lo(count); {set lo address} port[$202]:=hi(count); {set hi address} delay(1); port[$221]:=3; delay(1); {-prog low} port[$221]:=7; delay(2); {-prog high} end; port[$200]:=0; port[$201]:=0; port[$202]:=0; port[$220]:=0; port[$221]:=0; port[$222]:=0; writeln; end; procedure protectchip; begin writeln('Protecting chip...'); port[$203]:=128; {Init} port[$223]:=128; {Init} port[$221]:=7; {Status} port[$220]:=15; delay(1); {Table/lock1 config} port[$221]:=3; delay(1); {-Prog low} port[$221]:=7; delay(2); {-Prog high} port[$220]:=3; delay(1); {Table/lock2 config} port[$221]:=3; delay(1); {-Prog low} port[$221]:=7; delay(2); {-Prog high} port[$220]:=5; delay(1); {Table/lock3 config} port[$221]:=3; delay(1); {-Prog low} port[$221]:=7; delay(2); {-Prog high} port[$220]:=0; {alles low} port[$221]:=0; {alles low} end; function checkcard: boolean; {keine Ahnung, ob der IO-chip das unterstützt...} var b,c: byte; begin randomize; port[$203]:=128; port[$223]:=128; checkcard:=true; for c:=0 to 2 do begin b:=random(256); port[$200+c]:=b; port[$220+c]:=b; if (port[$200+c]<>b) or (port[$220+c]<>b) then checkcard:=false; port[$200+c]:=0; port[$220+c]:=0; end; end; begin writeln('The Hubersoft ISAflasher (v1.0) - copyright (c) 1999 by Hubersoft Corp.'); if paramstr(1)='' then begin writeln('Usage: isaflash [filename]'); halt; end; getdir(0, dir); if dir[0]>#3 then dir:=dir+'\'; assign(f,dir+paramstr(1)); {$I-} reset(f, 1); {$I+} if ioresult<>0 then begin writeln('File not found!'); halt; end; if filesize(f)>4000 then counter:=4000 else counter:=filesize(f); blockread(f,flash,counter,result); flashsize:=result; close(f); writeln('Got ', result, ' bytes of data from file.'); {-------------------} {if not checkcard then begin writeln('Error: No ISA card found! (or program bug..?)'); port[$221]:=0; halt; end;} write('--> Insert Chip and press any key or ESC to abort...'); while keypressed do readkey; if readkey<>#27 then begin writeln(' OK'); writechip(flashsize); {protectchip; (wäre nur bei 5V notwendig) } writeln('Done.'); end else writeln(#13#10'Aborted.'); writeln; end.