276 lines
4.5 KiB
ArmAsm
276 lines
4.5 KiB
ArmAsm
!******************************************************************************
|
|
*******************************************************************************
|
|
|
|
U D O S - Quelle (C) ZFT/KEAW Abt. Basissoftware - 1989
|
|
|
|
pburn Modul: K.PROM.S
|
|
|
|
|
|
Bearbeiter: P. Hoge, R. Kuehle
|
|
|
|
Datum: 18.4.1989
|
|
Version: 2.1
|
|
|
|
*******************************************************************************
|
|
******************************************************************************!
|
|
|
|
|
|
PROM module
|
|
|
|
constant
|
|
rd := 1
|
|
wt := 2
|
|
false := 0
|
|
|
|
external
|
|
intppb procedure (byte byte)
|
|
bcoff procedure !turns off programmer!
|
|
rbyte procedure (word) returns (byte)
|
|
wbyte procedure (word byte)
|
|
p2708 procedure (word)
|
|
|
|
lchar procedure returns (byte)
|
|
schar procedure (byte)
|
|
ueb16 procedure
|
|
sdlc procedure (byte byte byte) returns (byte byte)
|
|
BUF array [%4000 byte]
|
|
old byte !0 - board 2
|
|
ungleich 0 - board 1!
|
|
|
|
global
|
|
|
|
errflg byte
|
|
Vpp byte !programmierspannung 1 - 25 V
|
|
2 - 21 V
|
|
3 - 12.5 V
|
|
4 - free V!
|
|
PM byte !program mode 0 - high speed
|
|
1 - normal speed!
|
|
|
|
internal
|
|
ptype byte
|
|
begadr word
|
|
nbytes word
|
|
promadr word
|
|
char, read_write byte
|
|
k byte
|
|
i, len word
|
|
d, e byte
|
|
|
|
|
|
internal
|
|
|
|
readprom procedure
|
|
entry
|
|
intppb(rd ptype)
|
|
if errflg<>false then return fi
|
|
i := 0
|
|
do
|
|
ueb16
|
|
BUF[i] := rbyte(promadr)
|
|
if errflg<>false then exit fi
|
|
len := len-1
|
|
if len=0 then exit fi
|
|
promadr := promadr+1
|
|
i := i+1
|
|
od
|
|
bcoff
|
|
end readprom
|
|
|
|
writeprom procedure
|
|
entry
|
|
intppb(wt ptype)
|
|
if errflg<>false then return fi
|
|
promadr:=begadr
|
|
len:=nbytes
|
|
if ptype=0 then p2708(nbytes)
|
|
else
|
|
i := 0
|
|
do
|
|
wbyte(promadr,BUF[i])
|
|
|
|
if errflg=3 then schar (3)
|
|
char:=lchar
|
|
if char='n' then exit
|
|
else errflg:=0
|
|
fi
|
|
fi
|
|
if errflg<>false then exit fi
|
|
len := len-1
|
|
if len=0 then exit fi
|
|
promadr := promadr+1
|
|
i := i+1
|
|
od
|
|
fi
|
|
bcoff
|
|
end writeprom
|
|
|
|
|
|
! anpassung schnittstelle 16-bit/8-bit p8000 fuer burn (wega)
|
|
*********************************************************** !
|
|
|
|
global
|
|
prom procedure
|
|
entry
|
|
errflg:=false
|
|
|
|
! read, write, erase, crc !
|
|
read_write:=lchar
|
|
|
|
! type prom !
|
|
ptype:=lchar
|
|
|
|
! beginn adresse prom !
|
|
char:=lchar
|
|
begadr:=word char !high!
|
|
begadr:=begadr * 256
|
|
char:=lchar
|
|
begadr:=begadr or word char !low!
|
|
promadr:=begadr
|
|
|
|
! laenge prom !
|
|
char:=lchar
|
|
nbytes:=word char !high!
|
|
nbytes:=nbytes * 256
|
|
char:=lchar
|
|
nbytes:=nbytes or word char !low!
|
|
len:=nbytes
|
|
|
|
!programmierspannung Vpp!
|
|
Vpp:=lchar
|
|
|
|
!program mode!
|
|
PM:=lchar
|
|
|
|
schar('q') !acknowledge!
|
|
|
|
! initialisierung EPROM-Programmer Board Abfrage !
|
|
if read_write=5 then intppb (0 0) fi
|
|
|
|
i:=0
|
|
|
|
! write prom
|
|
********* !
|
|
|
|
if read_write=2 then
|
|
do
|
|
k:=64
|
|
do
|
|
BUF[i]:=lchar
|
|
i:=i+1
|
|
k:=k-1
|
|
len:=len-1
|
|
if len=0 then exit fi
|
|
if k=0 then exit fi
|
|
od
|
|
schar('q')
|
|
if len=0 then exit fi
|
|
od
|
|
writeprom
|
|
if errflg<>3 then schar (errflg) fi
|
|
|
|
! ruecklesen prom; feststellen programmierfehler;
|
|
uebergabe an wega bei Standard Speed Program Mode !
|
|
|
|
if errflg=false then if PM=1 then
|
|
promadr:=begadr
|
|
len:=nbytes
|
|
i:=0
|
|
intppb(rd ptype)
|
|
do
|
|
ueb16
|
|
char:=rbyte(promadr)
|
|
if errflg<>false then exit fi
|
|
if char<>BUF[i] then errflg:=3 exit fi
|
|
len := len-1
|
|
if len=0 then exit fi
|
|
promadr:=promadr+1
|
|
i:=i+1
|
|
od
|
|
bcoff
|
|
schar(errflg)
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
! read prom
|
|
********* !
|
|
|
|
if read_write=1 then
|
|
readprom
|
|
schar(errflg)
|
|
if errflg=false then
|
|
i := 0
|
|
len:=nbytes
|
|
do
|
|
k:=64
|
|
do
|
|
schar(BUF[i])
|
|
i:=i+1
|
|
k:=k-1
|
|
len:=len-1
|
|
if len=0 then exit fi
|
|
if k=0 then exit fi
|
|
od
|
|
char:=lchar
|
|
if len=0 then exit fi
|
|
od
|
|
fi
|
|
fi
|
|
|
|
! erase prom
|
|
********** !
|
|
|
|
if read_write=3 then
|
|
intppb(rd ptype)
|
|
do
|
|
ueb16
|
|
char:=rbyte(promadr)
|
|
if errflg<>false then exit fi
|
|
if char<>%FF then errflg:=3 exit fi
|
|
len:=len-1
|
|
if len=0 then exit fi
|
|
promadr:=promadr+1
|
|
od
|
|
bcoff
|
|
schar(errflg)
|
|
fi
|
|
|
|
! crc prom
|
|
******** !
|
|
if read_write=4 then
|
|
d:=%ff
|
|
e:=%ff
|
|
k:=0
|
|
intppb(rd ptype)
|
|
do
|
|
ueb16
|
|
char:=rbyte(promadr)
|
|
if errflg<>false then k:=errflg exit fi
|
|
if char<>%FF then k:=3 fi
|
|
d,e:=sdlc(char,d,e)
|
|
len:=len-1
|
|
if len=0 then exit fi
|
|
promadr:=promadr+1
|
|
od
|
|
bcoff
|
|
schar(k)
|
|
if errflg=false then
|
|
schar(d)
|
|
schar(e)
|
|
fi
|
|
fi
|
|
|
|
!prom programmer board
|
|
*********************!
|
|
|
|
if read_write=5 then
|
|
if old=0 then schar('2')
|
|
else schar('1')
|
|
fi
|
|
fi
|
|
|
|
end prom
|
|
|
|
end PROM
|