EBRZ12 ASM
;**********************************
;*** EPROM-Brennprogamm ***
;*** V.1.2 haftmann#software ***
;*** frei nach FA ***
;*** 14.09.92/08.01.93 ***
;**********************************
;Programm f}r den Z{hler-Brenner
; nach FA f}r 8-bit-EPROMs
; 2716 .. 27512
; auch mit automatischer EPROM-
; und Programmierspannungs-Wahl
; PIO Port A: Daten (bidirektional)
; PIO Port B: Steuerung (Ausg{nge)
;Bit 0: RESET Z{hler, *RESET W{hler
;Bit 1: */CLOCK Z{hler, *CLOCK W{hler
;Bit 2: Programmierimpuls /OE-Pin
;Bit 3: 5P-Anschaltung
;Bit 4: Upp-Anschaltung
;Bit 5: /OE-Pin
;Bit 6: /PGM-Impuls
;Bit 7: /CE-Pin
;/..negiert, *..flankengetriggert
PORT EQU 0B7D3H ;HOR
TYPE EQU 0B7D4H ;HOR+1
;Bit 0: Prgrammieralgrithmus A/B
MBYTE EQU 0B7D5H ;VERT
;Bit 1,0: Programmierspannung 12/21/25V
;Bit 2: Steckaufforderung
OS EQU 0F003H
RC EQU 0F00FH
DEFW 07F7FH
DEFM 'EPROM'
DEFB 1
;%EPROM <type> <slot/address>
;
LD H,E ;Adresse
LD A,(0B781H)
PUSH AF
CP 1
LD B,7
JR C,NO2ARG
LD A,L
LD (TYPE),A
JR Z,NO2ARG
LD B,E ;Anfangsslot
DEC B
NO2ARG
LD C,80H
MOSU INC B
LD E,H
JR Z,KMODU
IN A,(C)
CP 0EFH ;DIO?
LD E,4
JR Z,GEF
CP 0DAH ;PIO3?
LD E,10H
JR Z,GEF
AND 0F1H ;#USER/0?
CP 0C0H ;1100xxx0
LD E,A
JR Z,GEF
IN A,(C)
AND 0F2H ;#USER/1?
CP 0C0H ;1100xx0x
LD E,0C4H
JR NZ,MOSU
GEF
LD H,0B8H
LD L,B
LD A,1
DI
LD M,A ;gefundenes M.
OUT (C),A ;einschalten
EI
KMODU
LD A,E ;Portadresse
LD (PORT),A
LD C,A
XOR A ;Daten zu 0
OUT (C),A
INC C
INC A
OUT (C),A ;Steuerung 1
INC C
LD A,4FH
DI
OUT (C),A ;erst mal Input
INC C
OUT (C),A
LD A,0FFH
OUT (C),A
INC A
OUT (C),A ;Bit-Out
DEC C
DEC A
OUT (C),A
OUT (C),A ;Bit-In
DEC C
XOR A
OUT (C),A ;Steuerung 0
EI
LD H,A
CALL RC
DEFW SLINE-$-2
CALL OS
DEFM '# (haftmann#software)'
DEFW 0D0AH
DEFB 0AH
NOP
POP AF
ADD 0FFH
RL H ;H=ArgN
;
LD (IX+9),0D7H
LD A,'>' ;Prompter
LD (0B7D9H),A
JR EPR21
DEFW 0D7D7H
DEFM 'EPROM'
DEFB 1
LD A,(0B781H)
OR A
LD H,A
JR Z,EPR2
LD A,L
RES 0,A ;Alg.A
LD (TYPE),A
LD D,C
EPR21 JR EPR2
DEFW 0D7D7H
DEFM 'INFO'
DEFB 1
CALL OS
DEFM '#Steckaufforderung: '
NOP
LD A,(0B781H)
OR A
LD A,(MBYTE)
JR Z,INF2
RES 2,A
RR L
JR NC,INF20
SET 2,A
INF20 LD (MBYTE),A
INF2 BIT 2,A
JR NZ,STEIN
CALL OS
DEFM '#aus'
NOP
JR INF1
STEIN CALL OS
DEFM '#ein'
NOP
INF1 CALL OS
DEFB 23H
DEFW 0D0AH
DEFM 'PIO - Portadresse: '
NOP
LD A,(PORT)
CALL OS
DEFB 1CH
CALL OS
DEFB 2CH
LD H,0
EPR2
CALL OS
DEFM '#EPROM-Typ: '
NOP
LD A,(TYPE)
RES 0,A
PUSH AF
CP 10H
JR C,BT1
CALL OS
DEFB 1CH
JR BT2
BT1 ADD 30H
CALL OS
DEFB 24H
BT2 CALL OS
DEFM '# KByte ('
NOP
POP AF
CP 2
LD L,0
LD BC,616H
JR Z,TSUKI
CP 4
LD BC,0D32H
JR Z,TSUKI
CP 8
LD BC,1C64H
JR Z,TSUKI
CP 16H
LD L,'1'
LD BC,3C28H
JR Z,TSUKI
CP 32H
LD L,'2'
LD BC,7C56H
JR Z,TSUKI
CP 64H
LD L,'5'
LD BC,0FC12H
JR Z,TSUKI
LD B,0
CALL OS
DEFM '#?????'
NOP
JR NOTS
TSUKI
LD A,27H
CALL OS
DEFB 1CH
LD A,L
OR A
JR Z,NOHI
CALL OS
DEFB 24H
NOHI LD A,C
CALL OS
DEFB 1CH
NOTS CALL OS
DEFM '#)'
DEFW 0D0AH
NOP
LD A,B
OR A
JR NZ,OKMELD
CALL OS
DEFM '#Ung}ltiger '
DEFM 'EPROM-Typ!'
DEFB 7
DEFW 0D0AH
NOP
OKMELD LD A,(MBYTE)
BIT 2,A ;Wechselauff.
LD C,A
JR NZ,OKM1
RES 2,B ;bleibt
OKM1 ;B:neues MBYTE, C:altes
;D,E:Argumente
;H:Anz. Arg.
LD A,H
CP 3
JR NC,OKM11
LD D,0
OKM11 CP 1
LD A,B
JR Z,SWB
JR C,SWV
;>1 Arg
LD A,0BH
CP D
JR Z,SALG
CP E
JR NZ,NALG
SALG LD A,(TYPE)
SET 0,A
LD (TYPE),A
LD A,H
CP 2
JR Z,SWV0
NALG ;Kein Algorithmus B
LD A,12H
LD C,0
CP D
JR Z,SWV0
CP E
JR Z,SWV0
LD A,21H
INC C
CP D
JR Z,SWV0
CP E
JR Z,SWV0
LD A,25H
INC C
CP D
JR Z,SWV0
CP E
SWV0 ;A:=BBBBBBCC
LD A,B
JR NZ,SWB
SWV ;0 Arg
AND 0FCH
LD B,A
LD A,C
AND 3
OR B
SWB ;1 Arg
LD (MBYTE),A
LD B,A
CALL OS
DEFM '#Programmier'
DEFM 'spannung: '
NOP
LD A,B
AND 3
JR Z,VPP12
DEC A
LD A,21H
JR Z,VPP21
LD A,25H
VPP21 CALL OS
DEFB 1CH
JR VPPV
VPP12 CALL OS
DEFM '#12.5 '
NOP
VPPV CALL OS
DEFM '#V'
DEFW 0D0AH
DEFM 'Methode '
NOP
LD A,(TYPE)
RRA
JR C,METHB
CALL OS
DEFM '#A: Einzelbyte-'
NOP
JR METHA
METHB CALL OS
DEFM '#B: blockweise '
NOP
METHA CALL OS
DEFM '#Programmierung'
DEFW 0D0AH
NOP
RET
DEFW 0D7D7H
DEFM 'QUIT'
DEFB 1
LD (IX+9),7FH
LD A,'%' ;f}r CAOS3.4
LD (0B7D9H),A
RET
SLINE CALL OS
DEFM '## EPROM-BRAND 1.2 '
DEFM 'plus #'
DEFW 0D0AH
NOP
RET
DEFW 0D7D7H
DEFM 'MENU'
DEFB 1
CALL OS
DEFB 23H
DEFB 0CH
NOP
CALL RC
DEFW SLINE-$-2
POP HL ;Korrektur
LD HL,0C000H
LD B,L
LD C,L
CALL OS
DEFB 46H ;MENU
DEFW 0D7D7H
DEFM 'SWITCH'
DEFB 1
LD A,(0B781H)
OR A
JR Z,MODUL
LD D,E
CALL OS
DEFB 26H
LD C,D
MODU2 ;Ausgabe L,H,C
LD A,L
CALL OS
DEFB 1CH
CALL OS
DEFB 2BH
LD A,H
CALL OS
DEFB 1CH
CALL OS
DEFB 2BH
LD A,C
CALL OS
DEFB 1CH
CALL OS
DEFB 2CH
RET
MODUL
LD L,8
MODU1 LD A,1
CALL OS
DEFB 26H
INC H
JR Z,MODU3
DEC H
LD C,D
CALL RC
DEFW MODU2-$-2
MODU3 INC L
JR NZ,MODU1
RET
DEFW 0D7D7H
DEFM 'LOAD'
DEFB 1
CALL OS
DEFB 10H
RET
DEFW 0D7D7H
DEFM 'VERIFY'
DEFB 1
CALL OS
DEFB 11H
RET
DEFW 0D7D7H
DEFM 'DISPLAY'
DEFB 1
LD A,(0B781H)
CALL OS
DEFB 3BH
RET
DEFW 0D7D7H
DEFM 'ARITH'
DEFB 1
;
LD A,(0B781H)
CP 2
RET C
PUSH HL
ADD HL,DE
CALL OS
DEFM '#+ '
NOP
CALL OS
DEFB 1AH
POP HL
OR A
SBC HL,DE
CALL OS
DEFM '#- '
NOP
CALL OS
DEFB 1AH
CALL OS
DEFB 2CH
RET
DEFW 0D7D7H
DEFM 'MOVE'
DEFB 1
LD A,(0B781H)
CP 3
RET C
PUSH HL
SBC HL,DE
POP HL
JR NC,MOV1
ADD HL,BC
DEC HL
EX DE,HL
ADD HL,BC
DEC HL
EX DE,HL
LDDR
RET
MOV1 LDIR
RET
DEFW 0D7D7H
DEFM 'FILL'
DEFB 1
LD A,(0B781H)
CP 2
JR C,FIL1
EX DE,HL
SBC HL,DE
LD B,H
LD C,L
;BC=L{nge,DE=Adr!
LD HL,0B786H
SUB 2
JR FIL2
FIL1 LD DE,4000H
LD B,D
LD C,E
LD HL,0B782H
FIL2 OR A
JR NZ,FIL3
INC A
LD M,0FFH
FIL3 PUSH AF
PUSH HL
FIL5 LDI
INC HL
PUSH AF
LD A,B
OR C
JR Z,FIL4
POP AF
DEC A
JR NZ,FIL5
POP HL
POP AF
JR FIL3
FIL4 POP AF
POP HL
POP AF
RET
DEFW 0D7D7H
DEFM 'HELP'
DEFB 1
CALL OS
DEFB 23H
DEFW 0A0CH
DEFM '** Hilfe zu den '
DEFM 'Argumenten **'
DEFW 0D0AH
DEFB 0AH
DEFM '>EPROM Typ (in KByte) '
DEFM '(Methode (B))'
DEFW 0D0AH
DEFM ' (Programmiersp. '
DEFM '(12/21/25))'
DEFW 0D0AH
DEFM '(im CAOS: Typ Modul'
DEFM 'schacht/Portadresse)'
DEFW 0D0AH
DEFB 0AH
DEFM '>INFO Steckaufforderun'
DEFM 'g (0/1)'
DEFW 0D0AH
DEFB 0AH
DEFM '>ARITH Zahl1 Zahl2'
DEFW 0D0AH
DEFB 0AH
DEFM '>MOVE Quelle Ziel '
DEFM 'L{nge'
DEFW 0D0AH
DEFB 0AH
DEFM '>FILL Bereich Byte '
DEFM 'Byte ..'
DEFW 0D0AH
DEFB 0AH
DEFM '>MVIEW, EVIEW:'
DEFW 0D0AH
DEFM ' Anfangsadresse/'
DEFM '1.Hexziffer'
DEFW 0D0AH
DEFB 0AH
DEFM '>PROG, READ, COMP, '
DEFM 'ERAT:'
DEFW 0D0AH
DEFM ' Eprom-Bereich Speich'
DEFM 'erreferenz'
DEFW 0D0AH
DEFB 0AH
DEFM '>MCRC, ECRC: Bereich'
DEFW 0D0AH
DEFB 0AH
DEFM '(Bereich = 2 '
DEFM 'Zahlen: Anfang '
DEFM 'und Ende+1)'
DEFW 0D0AH
DEFM 'Parameter k|nnen '
DEFM 'weggelassen werden.'
DEFW 0D0AH
DEFM 'Standardwert Speicher'
DEFM 'referenz: 4000H!'
DEFW 0D0AH
NOP
RET
DEFW 0D7D7H
DEFM 'MVIEW'
DEFB 1
LD BC,2000H
FVKERN
LD A,(0B781H)
OR A
JR NZ,FVK2
LD HL,4000H;Vorzug MEM
LD A,C
OR A
JR Z,FVK2
LD H,L ;Vorzug EPROM
FVK2 LD A,H
OR A
JR NZ,FVK1
LD A,L
ADD A
ADD A
ADD A
ADD A
LD H,A
LD L,0
FVK1 ;HL=Adr, C=Flag
LD A,C
OR A
JR Z,FVK3
CALL RC
DEFW RDINI-$-2
RET C
FVK3
PUSH HL
LD D,0
LD H,D
LD L,D
CALL OS
DEFB 34H
LD A,D
CP 0A8H
POP HL
JR C,KC4
;KC3
LD DE,8
SCH3 LD A,C
OR A
LD A,M
JR Z,QMEMO3
PUSH DE
CALL RC
DEFW RDBYT0-$-2
POP DE
RET C
QMEMO3 PUSH DE
PUSH HL
EX DE,HL
CALL OS
DEFB 34H
LD M,A
POP HL
POP DE
INC HL
INC D ;Zeile
JR NZ,SCH3
INC E
DJNZ SCH3 ;Spalte
JR KC4E
KC4
LD DE,8800H
SCH4 LD A,C
OR A
LD A,M
JR Z,QMEMO4
PUSH DE
CALL RC
DEFW RDBYT0-$-2
POP DE
RET C
QMEMO4 LD (DE),A
INC HL
INC E
JR NZ,SCH4
INC D
DJNZ SCH4
KC4E
LD A,0BH
LD B,9
VLO1
CALL OS
DEFB 24H
LD A,9
DJNZ VLO1
LD BC,10EFH
VLO2 LD A,C
ADD 22H
JR NC,VLO3
LD A,1
VLO3
LD C,A
CALL OS
DEFB 1CH
DJNZ VLO2
OR A ;CY=0
RET
;** ENDE DER SPEICHERROUTINEN **
;*******************************
;** BEGINN DER EPROM-ROUTINEN **
DEFW 0D7D7H
DEFB 0
FARG ;Fetch Arguments
;PE:A=0 (P/R/C), A=FF (E)
;PA:HL=EPROM,DE=MEM,BC=LNG
EX AF
CALL OS
DEFB 15H ;LARG
CP 2
JR NC,FAR1
LD B,3FH
OR A
JR NZ,FAR2
LD HL,4000H
LD B,0FFH
FAR2 EX DE,HL
LD HL,0
LD C,L ;=0
EX AF
OR 3FH ;3F / FF
AND B ;3F/3F/3F/FF
LD B,A
LD A,(MBYTE)
AND B
OR 7
INC A
LD B,A
EX AF
OR A
RET ;PA: A=ArgN
FAR1 ;NC!
PUSH BC
EX DE,HL
SBC HL,DE
EX (SP),HL
POP BC
EX DE,HL
CP 3
RET NC
LD E,L
LD A,H
AND 3FH
ADD 40H
LD D,A
LD A,2
RET
DEFW 0D7D7H
DEFM 'EVIEW'
DEFB 1
LD C,1
LD A,(MBYTE)
AND 1FH
OR 7
INC A
LD B,A
CALL RC
DEFW FVKERN-$-2
RET C
RDCLO ;Close f}r Read
PUSH BC
LD A,(PORT)
LD C,A
INC C
LD A,1 ;Reset
OUT (C),A ;5P weg
DEC A
OUT (C),A
POP BC
RET
;===PROG===
LNGMSG ;Hinweis
CALL OS
DEFM '#Adressen f}r EPROM '
DEFM 'unpassend!'
DEFW 0D0AH
NOP
RET
DEFW 0D7D7H
DEFM 'PROG'
DEFB 1
XOR A
CALL RC
DEFW FARG-$-2
;L{ngentest
DEC BC
PUSH HL
ADD HL,BC
JR C,TOLNG
LD A,(MBYTE)
OR 7
CP H
TOLNG POP HL
JR C,LNGMSG
INC BC
PUSH DE
POP IY
PGM ;HL Adr, IY Quelle, BC L{nge
CALL RC
DEFW RDINI-$-2
RET C
CALL RC
DEFW VGLVP0-$-2
JR C,KOMMT0
LD A,(TYPE)
RRA
JR NC,SIBY0;Einzelbyte
;*******
LD A,1
BLOC1 LD E,A
EX AF ;A=0 Letzter
LD A,E
CALL OS
DEFB 1CH ;Zyklus
CALL OS
DEFB 2BH ;SPC
;Brennen en bloc
PUSH BC
PUSH HL
PUSH IY
CALL RC
DEFW PROGON-$-2
BLOC2 CALL RC
DEFW DIADR-$-2
JR C,BLOC4
PUSH BC
LD A,(PORT)
LD C,A
INC C
LD A,(IY)
INC A
JR Z,BLOC9
DEC A
LD D,40H ;Kurze Zeit
EX AF
OR A
JR NZ,BLOC3
LD D,80H ;Lange Zeit
BLOC3 EX AF
;mit Datenbyte in A
CALL RC
DEFW BRBYTE-$-2
BLOC9 IN E,(C)
LD D,E
SET 1,D
OUT (C),D
OUT (C),E
POP BC
INC HL
INC IY
DEC BC
LD A,B
OR C
JR NZ,BLOC2
BLOC4 PUSH AF
CALL RC
DEFW PROGOF-$-2
POP AF
POP IY
POP HL
POP BC
JR C,KOMM12
;Lesen en bloc
CALL RC
DEFW VGLVP-$-2
JR C,KOMM1
JR Z,BLOC5
EX AF
OR A
JR Z,KOMMS10;Schlu~prfg
INC A
LD E,A
LD A,(TYPE)
CP 16H
LD A,5
JR NC,BLOC6
LD A,45
BLOC6 CP E
JR C,KOMM2 ;Viele Zyklen
LD A,E
JR BLOC1
KOMMT0 JR KOMMENT
SIBY0 JR SIBY00
BLOC5
EX AF
OR A
JR Z,BLOC70;Ready
XOR A
JR BLOC1
;*******
KOMMS10 JR KOMMS1
KOMMENT ;Kommentar zu Brennprogramm
JR Z,KOMM12;Abbruch
KOMM1 LD A,1 ;Adr.anzeigen
CALL RC
DEFW PFAULT-$-2
CALL OS
DEFM '#0-Bits k|nnen '
DEFM 'nicht zu 1 '
DEFM 'werden'
NOP
KOMM11 CALL OS
DEFB 2CH ;NL
KOMM12 CALL RC
DEFW RDCLO-$-2
RET
KOMMP ;unter VPP
;CY=1 BRK
;CY=0 Z=1 Zu viele Zyklen
;CY=0 Z=0 Fatal
POP BC
PUSH AF
CALL RC
DEFW PROGOF-$-2
POP AF
POP IY
POP BC
POP BC
JR C,KOMM12
JR NZ,KOMM1
DEFB 3EH ;LD A,/Adr.anz.
KOMM2 ;Viele Zyklen, Adr. nicht anz.
XOR A
CALL RC
DEFW PFAULT-$-2
CALL OS
DEFM '#Zu viele erforder'
DEFM 'liche Zyklen'
NOP
KOMM110 JR KOMM11
SIBY00 JR SIBY
BLOC70 JR BLOC7
KOMMS ;Schlu~pr}fung
JR Z,KOMM12
KOMMS1 SBC A
CALL RC
DEFW PFAULT-$-2
CALL OS
DEFM '#Schlu~pr}fung '
DEFM 'fehlerhaft'
NOP
JR KOMM110
KOMMP0 JR KOMMP
KOMME JR C,KOMMS
JR NZ,KOMMS1
BLOC7 CALL OS
DEFM '#Erfolgreich gebrannt!'
NOP
JR KOMM110
;*******
SIBY ;Einzelbyte
PUSH BC
PUSH HL
PUSH IY
CALL RC
DEFW PROGON-$-2
;Adresse u. Upp liegen an
PLOOP CALL RC
DEFW DIADR-$-2
PUSH BC
JR C,KOMMP0
LD A,(PORT)
LD C,A
INC C
LD A,(IY)
INC A
JR Z,PNOBURN
LD B,45 ;Zyklen max.
LD A,(TYPE)
CP 16H
JR C,PLOOPB
LD B,5 ;weniger
PLOOPB
IN E,(C)
RES 5,E
LD D,E ;erst /OE=L
OUT (C),D
RES 7,D ;dann /CE=L
OUT (C),D
DEC C
IN A,(C)
INC C
OUT (C),E ;dann /CE=alt
SET 5,E
OUT (C),E ;ende /OE=H
LD E,A
CPL
AND (IY)
JR NZ,KOMMP0
;Schwerer Fehler - sofort Abbruch
LD D,40H
LD A,(IY)
CP E ;endlich = ?
JR Z,PBLAST
OR A ;CY=0
DEC B ;B ist 1?
JR Z,KOMMP0;mit Adr.
INC B
JR PBNEXT ;letzter Zyklus
KOMME0 JR KOMME
PBLAST
LD B,1
LD D,80H
PBNEXT
CALL RC
DEFW BRBYTE-$-2
DJNZ PLOOPB
PNOBURN IN E,(C)
LD D,E
SET 1,D
OUT (C),D ;z{hlen
OUT (C),E
POP BC
INC IY
INC HL
DEC BC
LD A,B
OR C
JR NZ,PLOOP
CALL RC
DEFW PROGOF-$-2
POP IY
POP HL
POP BC
CALL RC
DEFW VGLVP-$-2
JR KOMME0
;UP's zum Brennprogramm
PFAULT
LD E,A
CALL OS
DEFM '#EPROM-Fehler '
NOP
LD A,E
OR A
JR Z,PFAUL1
CALL OS
DEFM '#auf Adresse '
NOP
CALL OS
DEFB 1AH
PFAUL1 CALL OS
DEFM '#!'
DEFB 7
DEFW 0D0AH
NOP
RET
BRBYTE ;Brenne Byte
;PE:C=Port D=Dauer
PUSH HL
INC C
LD E,0FFH
OUT (C),E
INC E ;E=0
OUT (C),E ;Ausgabeport
DEC C
DEC C
OUT (C),A ;Byte anlegen
INC C
IN E,(C)
LD A,E
XOR 80H ;/CE kompeln
LD H,A
LD A,(TYPE)
RES 0,A
CP 32H
JR NC,NOPGM
RES 6,H ;/PGM-Pin
NOPGM CP 4 ;4k
JR Z,YEA4
CP 64H ;64k
JR NZ,NO464
YEA4 SET 2,H ;/OE auf Upp
NO464 OUT (C),H ;begin(Brand)
CP 16H
JR NC,PWAIT
SLA D ;verdoppeln
PWAIT DEC D
JR NZ,PWAIT
OUT (C),E ;end(Brand)
DEC D ;D=FF
INC C
OUT (C),D
OUT (C),D ;Eingabe
DEC C
POP HL
RET
DIADR ;Display Adresse & BRKT
LD A,L
AND 1FH
RET NZ
CALL OS
DEFB 1AH
CALL OS
DEFB 23H
DEFW 808H
DEFW 808H
DEFW 8
CALL OS
DEFB 2AH
RET
PROGOF ;VPP wegnehmen, Lesebetrieb
;mit CLLN
PUSH BC
LD A,(PORT)
LD C,A
INC C
IN E,(C)
RES 4,E ;VPP weg
OUT (C),E
LD A,34
CALL OS
DEFB 14H ;WAIT
RES 5,E ;/OE aktiv
RES 7,E ;/CE aktiv
OUT (C),E
POP BC
LD A,2
CALL OS
DEFB 24H
RET
PROGON ;Programmierspannung anlegen
CALL RC
DEFW INICNT-$-2
PUSH BC
LD C,A
SET 5,E ;/OE inaktiv
LD A,(TYPE)
RES 0,A
CP 2
JR Z,PRGO2
SET 7,E ;bei 2K /CE=L
PRGO2 OUT (C),E
SET 4,E ;VPP
OUT (C),E
LD A,34
CALL OS
DEFB 14H ;WAIT
POP BC
RET
VGLVP ;Vergleichsroutine f}r Brenner
;PE: HL,IY,BC
;PA: CY=1 Z=0 Fataler Fehler
; CY=1 Z=1 Abbruch
; CY=0 Z=0 Ungleiche Bytes
; CY=0 Z=1 Fertig
;HL: Adresse bei CY=1
;VR: DE,HL(nur bei CY=1)
CALL RC
DEFW INICNT-$-2
VGLVP0 ;dito ohne INICNT
PUSH BC
PUSH HL
PUSH IY
LD D,0
VGLV1 PUSH DE
CALL RC
DEFW RDBYT0-$-2
POP DE
JR C,VGLV2 ;Abbruch
LD E,A
CPL
AND (IY)
SCF
JR NZ,VGLV2;Fataler F.
LD A,E
SUB (IY)
OR D
LD D,A
INC HL
INC IY
DEC BC
LD A,B
OR C
JR NZ,VGLV1
OR D ;Z-Flag
POP IY
POP HL
POP BC
RET
VGLV2 ;Fehler...
POP IY
POP BC ;HL lassen
POP BC
RET
;===RDINI=INICNT=RDBYT===
RDINI ;Init Read mit Abfrage
;PE:HL-Adresse
;VR:AF,DE
;PA:CY=1&Z=1 Abbruch
LD A,(MBYTE)
BIT 2,A
JR Z,INICNT
RDINI0 ;mit Erzwingung Abfrage
CALL OS
DEFM '#EPROM stecken...'
NOP
CALL OS
DEFB 16H
PUSH AF
LD A,2
CALL OS
DEFB 24H
POP AF
CP 3
SCF
RET Z
;** W{hler und Z{hler initialisieren **
;** und (falls fehlend) 5P zuschalten**
INICNT ;PE:HL-Adr
;VR:AF,DE
PUSH BC
PUSH HL
LD A,(PORT)
LD C,A
INC C
LD A,(MBYTE)
OR 7
AND H
LD H,A ;normalisieren
IN E,(C)
SET 0,E ;RESET
OUT (C),E
BIT 3,E
JR NZ,INIC5R
;Bei angelegter VCC keine W{hlimpulse
LD DE,301H ;D mit COUNT
LD A,(MBYTE)
AND 3
ADD A
ADD A
ADD 3
LD B,A
LD A,(TYPE)
RES 0,A
CP 4
JR Z,DIAL
DEC B
CP 64H
JR Z,DIAL
DEC B
CP 2
JR Z,DIAL
DEC B
JR NZ,NDIAL
DIAL OUT (C),D
OUT (C),E
DJNZ DIAL
NDIAL LD A,34
CALL OS
DEFB 14H ;WAIT
SET 3,E ;5P
OUT (C),E
LD A,34
CALL OS
DEFB 14H ;WAIT
LD A,(TYPE)
CP 32H
JR NC,INIC5R
SET 6,E ;/PGM inaktiv
INIC5R SET 7,E ;/CE inaktiv
RES 0,E ;RESET inaktiv
OUT (C),E
LD D,E
SET 1,D ;COUNT
JR RDWHL2
RDWHL1
OUT (C),D
OUT (C),E ;hochz{hlen
DEC HL
RDWHL2 LD A,L
OR H
JR NZ,RDWHL1
RES 7,E ;/CE aktiv
OUT (C),E
LD A,C ;Port retten
POP HL
POP BC
RET ;CY=0
;** 1 Byte lesen **
RDBYT0 ;ohne stetes BRKT
LD A,L
AND 1FH
JR NZ,RDNBRK
RDBYT ;FU: A:=(HL), CY=1&Z=1:BRK
;VR: AF,DE
CALL OS
DEFB 2AH ;BRKT
JR NC,RDNBRK
CALL RC
DEFW RDCLO-$-2
XOR A ;Z=1
SCF
RET ;BREAK
RDNBRK
LD A,L
OR A
JR NZ,RDNL0
LD A,(MBYTE)
OR 7
AND H
JR NZ,RDNL0
LD A,H
OR A
JR Z,RDNL0
CALL RC
DEFW RDCLO-$-2
CALL OS
DEFM '#N{chsten '
NOP
CALL RC
DEFW RDINI0-$-2
RET C
RDNL0 PUSH BC
LD A,(PORT)
LD C,A
IN A,(C) ;LESEN
INC C
IN E,(C)
LD D,E
SET 1,D
OUT (C),D
OUT (C),E
POP BC
OR A
RET
;===READ=COMP=ERAT=CRC===
DEFW 0D7D7H
DEFM 'READ'
DEFB 1
XOR A
CALL RC
DEFW FARG-$-2
PUSH DE
CALL RC
DEFW RDINI-$-2
POP DE
RET C
LES1
PUSH DE
CALL RC
DEFW RDBYT0-$-2
POP DE
RET C
INC HL
LD (DE),A
INC DE
DEC BC
LD A,B
OR C
JR NZ,LES1
CALL RC
DEFW RDCLO-$-2
JR MELDOK
DEFW 0D7D7H
DEFM 'COMP'
DEFB 1
XOR A
CALL RC
DEFW FARG-$-2
PUSH DE
CALL RC
DEFW RDINI-$-2
POP DE
RET C
EX AF
VE1 ;Einstieg NC'
PUSH DE
CALL RC
DEFW RDBYT-$-2
POP DE
RET C
EX DE,HL
CP M
EX DE,HL
JR Z,VEOK
EX AF
SCF
EX AF
CALL OS
DEFB 1CH
CALL OS
DEFB 2BH
CALL OS
DEFB 1BH
LD A,(DE)
CALL OS
DEFB 1CH
CALL OS
DEFB 2CH
VEOK INC DE
INC HL
DEC BC
LD A,B
OR C
JR NZ,VE1
CALL RC
DEFW RDCLO-$-2
EX AF
RET C
CALL OS
DEFM '#Vergleich '
NOP
MELDOK CALL OS
DEFM '#OK.'
DEFW 0D0AH
NOP
RET
DEFW 0D7D7H
DEFM 'ERAT'
DEFB 1
LD A,0FFH
CALL RC
DEFW FARG-$-2
AND 1 ;CY=0,Z=/0(A)
;NZ:vollst. CY Fehler
EX AF
PUSH DE
CALL RC
DEFW RDINI-$-2
POP DE
RET C
LT1
PUSH DE
CALL RC
DEFW RDBYT-$-2
POP DE
RET C
PUSH AF
EX AF
JR Z,LTFF
EX AF
CPL
EX DE,HL
AND M
EX DE,HL
JR LTW
LTFF
EX AF
INC A
LTW JR Z,LTOK
EX AF
SCF ;Fehler merken
JR Z,LTFF2
EX AF
CALL OS
DEFM '#Unbrennbar: '
NOP
CALL OS
DEFB 1BH ;HL,DE
POP AF
CALL OS
DEFB 1CH ;A
CALL OS
DEFB 2BH ;SPC
LD A,(DE)
CALL OS
DEFB 1CH ;A
CALL OS
DEFB 2CH ;CRLF
JR LTOK2
LTFF2
EX AF
CALL OS
DEFB 1AH
LTOK POP AF
LTOK2 INC HL
INC DE
DEC BC
LD A,B
OR C
JR NZ,LT1
CALL RC
DEFW RDCLO-$-2
EX AF
JR C,ERATF
EX AF
CALL OS
DEFM '#EPROM '
NOP
EX AF
JR NZ,ERATB
CALL OS
DEFM '#gel|scht'
DEFW 0D0AH
NOP
RET
ERATB CALL OS
DEFM '#brennbar'
DEFW 0D0AH
NOP
RET
ERATF JR NZ,ERATF2
CALL OS
DEFB 2CH ;NL
ERATF2 CALL OS
DEFM '#EPROM l|schen!'
DEFW 0D0AH
NOP
RET
;================================
DEFW 0D7D7H
DEFM 'MCRC'
DEFB 1
XOR A
JR POLY0
DEFW 0D7D7H
DEFM 'ECRC'
DEFB 1
SCF
POLY0 EX AF
LD A,(0B781H)
CP 1
RET Z ;1 Parameter
JR C,POLY11
EX DE,HL
SBC HL,DE
LD B,H
LD C,L
EX DE,HL
EX AF
JR C,POLY12
JR POLY1
POLY11
LD HL,4000H
LD B,H
LD C,L
EX AF
JR NC,POLY1
EX AF
LD H,L
LD A,(MBYTE)
OR 7
INC A
LD B,A
EX AF
POLY12 EX AF
PUSH DE
CALL RC
DEFW RDINI-$-2
POP DE
RET C
EX AF
POLY1 EX AF
LD DE,0FFFFH
LD IY,0
PO1
LD A,M
EX AF
JR NC,POLY2
EX AF
PUSH DE
CALL RC
DEFW RDBYT0-$-2
POP DE
RET C ;BRK
EX AF
POLY2 EX AF
PUSH AF
DEFB 0FDH
ADD L ;ADD LY
DEFB 0FDH
LD L,A ;LD LY,A
JR NC,POLY3
DEFB 0FDH
INC H ;INC HY
POLY3 POP AF
INC HL
XOR D ;DE=lfd.Reg.
LD D,A
RRCA
RRCA
RRCA
RRCA
AND 0FH
XOR D
LD D,A
RRCA
RRCA
RRCA
PUSH AF
AND 1FH
XOR E
LD E,A
POP AF
PUSH AF
RRCA
AND 0F0H
XOR E
LD E,A
POP AF
AND 0E0H
XOR D
LD D,E
LD E,A
DEC BC
LD A,B
OR C
JR NZ,PO1
PUSH IY
POP HL
EX DE,HL
CALL OS
DEFB 1BH ;HL,DE
CALL OS
DEFM '#(CRC-Polynom und '
DEFM 'Pr}fsumme)'
DEFW 0D0AH
NOP
EX AF
RET NC
CALL RC
DEFW RDCLO-$-2
RET
ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ
Detected encoding: ANSI (CP1252) | 4
|
|