home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG078.ARK
/
EPROM.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
8KB
|
413 lines
;***************************************************************;
; ;
; EPROM.ASM ;
; ;
; LAST MODIFIED 9/27/80 ;
; ;
; EPROM PROGRAMMER SOFTWARE FOR RUNNING AN SSM - PB1 ;
; 2708/2716 PROGRAMMER WITH CP/M UNDER DDT ;
; ;
; TO RUN THIS PROGRAM, TYPE: ;
; ;
;DDT EPROM.COM(CR) ;
; ;
; THE CONSOLE WILL RESPOND WITH: ;
; ;
;DDT VERS #.# ;
;NEXT PC ;
;#### 0100 ;
;- ;
; ;
; INSERT A HEX FILE TO BE PLACED IN EPROM BY ENTERING: ;
; ;
;IFILENAME.HEX(CR) ;
;R[BIAS](CR) ;
; ;
; (NOTE THAT BIAS WILL ALLOW THE ENTERED PROGRAM TO RESIDE ;
; WITHIN 103H TO 'START' AS REQUIRED EVEN THOUGH THE PROGRAM ;
; WAS ASSEMBLED FOR EXECUTION OUTSIDE THIS RANGE) ;
; ;
; TO START THE PROGRAM FROM DDT, ENTER EITHER 'G(START:)' ;
; OR 'G100'. THE PROGRAM WILL ASK FOR EPROM TYPE SO AS ;
; TO SET THE PROPER SIZE (1K FOR 2708 AND 2K FOR 2716/2516) ;
; AND PROGRAMMING ROUTINE. ;
; ;
; SUPPORTED FUNCTIONS ARE COPY, PROGRAM AND VERIFY WHICH ARE ;
; SELF EXPLANATORY. THE AUTOMATIC SEQUENCE FOR PROGRAMMING ;
; AN EPROM IS TO FIRST CHECK FOR FULL ERASURE, THEN THE ;
; PROGRAM CYCLE, FOLLOWED BY THE VERIFY ROUTINE. ;
; (ANY FAILURE RESULTS IN AN ERROR MESSAGE AND A BELL ;
; SO AS TO NOT GO UNNOTICED.) ;
; ;
; AS CONTROL IS PASSED TO DDT AND YOU WISH TO ;
; RETURN TO THE PROGRAMMER, JUST ENTER 'G' AGAIN. ;
; ;
; EXIT FROM THE PROGRAM BY ENTERING A CONTROL C ;
; ;
;***************************************************************;
; <<<<SET PROM AND CPORT TO AGREE WITH PB1 SWITCHES>>>>
PROM EQU 0E000H ;SELECTED LOCATION OF SOCKETS
CPORT EQU 70H ; " " " CONTROL PORT
CR EQU 0DH ;CARRIGE RETURN
LF EQU 0AH ;LINE FEED
BELL EQU 7 ;***** DING
TERM EQU '$'
RST7 EQU 38H
ORG 100H
JMP START
DS 4000H-$ ; RAM WORKSPACE
START: CALL HELLO
DB CR,LF,'CP/M EPROM PROGRAMMER - VER 1.0',CR,LF,CR,LF,TERM
HELLO: POP D
CALL PRNMSG
TYPE: CALL TYPE1
DB CR,LF,'ENTER EPROM TYPE (2516,2716 OR 2708) ',TERM
TYPE1: POP D
CALL PRNMSG
CALL GETVAL
POP H
LXI D,2708H
CALL CPHL
JZ X2708
LXI D,2516H
CALL CPHL
JZ X2716
LXI D,2716H
CALL CPHL
JZ X2716
JMP TYPE ;WRONG TYPE
X2708: MVI A,3 ;PAGE COUNT - 1
STA SIZE
MVI A,1 ;HARDWARE CODE
STA CODE
MVI A,250 ;# OF PROGRAMMING CYCLES
STA NCYC
JMP DIRECT
X2716: MVI A,7 ;PAGE COUNT - 1
STA SIZE
MVI A,2 ;HARDWARE CODE
STA CODE
MVI A,1 ;# OF PROGRAMMING CYCLES
STA NCYC
DIRECT: CALL DIR1
DB CR,LF,'DO YOU WISH (D)DT, (C)OPY, '
DB '(P)ROGRAM, (V)ERIFY ? ',TERM
DIR1: POP D
CALL PRNMSG
CALL CI
CPI 'C'
LXI H,COPY
JZ DIR2
CPI 'P'
LXI H,PROG
JZ DIR2
CPI 'V'
LXI H,VERIFY
JZ DIR2
CPI 'D'
JNZ DIRECT
LXI H,DIRECT
PUSH H ;SET RETURN ADDRESS
JMP RST7 ;DDT BREAKPOINT ENTRY
DIR2: SHLD OPTION
ADDR: CALL ADD1
DB CR,LF,'ENTER STARTING ADDRESS '
DB 'OF MEMORY BLOCK IN HEX ',TERM
ADD1: POP D
CALL PRNMSG
CALL GETVAL
POP H
SHLD RAM
GO: LDA PROM ;CLEAR PROGRAMMER
CALL GO1
DB CR,LF,'PLACE EPROM IN PROPER SOCKET '
DB 'AND STRIKE ANY KEY',CR,LF,TERM
GO1: POP D
CALL PRNMSG
CALL CI
LHLD OPTION
PCHL
VERIFY: CALL VERIF
JMP DIRECT
COPY: CALL CPY
JMP DIRECT
PROG: CALL ERACHK ;SEE IF EPROM IS ERASED
JNZ DIRECT ;ABORT IF NOT-
CALL PRG ;NOW PROGRAM
CALL VERIF ;AND VERIFY
JMP DIRECT ;THEN CHECK WHAT'S NEXT
;***********************
; MAIN SUBROUTINES
;***********************
; ERACHK
;ROUTINE TO TEST FOR COMPLETE
;ERASURE OF EPROM BEFORE PROG.
ERACHK: LXI H,SIZE
MOV C,M
LXI D,PROM
ERACH1: LDAX D ;GET BYTE FROM EPROM
INX D
CPI 0FFH ;TEST FOR ERASE PATTERN
JNZ NERASE
MOV A,D
ANA C
ORA E ;CHECK FOR END
JNZ ERACH1
RET
NERASE: PUSH PSW ;SAVE FLAGS
CALL NER1
DB CR,LF,'EPROM NOT ERASED',CR,LF,BELL,TERM
NER1: POP D
CALL PRNMSG
POP PSW
RET
; PRG
;ROUTINE TO PROGRAM EITHER
;A 2708 OR 2716 EROM
PRG: LDA CODE ;SET HARDWARE FOR TYPE
OUT CPORT
LXI H,NCYC ;# OF PROG. CYCLES
MOV B,M
LXI H,SIZE
MOV C,M ;# OF PAGES -1
PRG1: LXI D,PROM
LHLD RAM
;PROGRAM THE EPROM
PRG2: MOV A,M
STAX D ;THIS STEP DOES IT
INX D
INX H
MOV A,D
ANA C
ORA E
JNZ PRG2 ;GET NEXT ADDRESS
DCR B
JNZ PRG1 ;LOOP FOR N CYCLES
DCX D
LDAX D ;RESET THE HARDWARE
RET
; VERIF
;ROUTINE TO VERIFY CONTENTS
;OF AN EPROM WITH MEMORY
VERIF: LXI H,SIZE
MOV C,M
LXI D,PROM ;ADDRESS OF EPROM
LHLD RAM ;RAM TO BE COMPARED
VERF1: MOV B,M ;GET ORIGINAL
LDAX D ;THEN ROM
INX D
INX H
CMP B ;BETTER BE THE SAME.
JNZ DIFF
MOV A,D
ANA C
ORA E
JNZ VERF1 ;OK SO FAR, GET NEXT
PUSH PSW
CALL VERF2
DB CR,LF,CR,LF,CR,LF,'<<<<<<<<<< EPROM '
DB 'VERIFIED GOOD >>>>>>>>>>',CR,LF,TERM
VERF2: POP D
CALL PRNMSG
POP PSW
RET
DIFF: PUSH PSW ;SAVE FLAGS
CALL DIFF1
DB CR,LF,'EPROM DOES NOT VERIFY',CR,LF,BELL,TERM
DIFF1: POP D
CALL PRNMSG
POP PSW
RET
; CPY
;ROUTINE TO COPY AN EPROM
;FROM THE SOCKET TO RAM
CPY: LXI H,SIZE
MOV C,M
LXI D,PROM ;SOCKET ADDRESS OF MASTER
LHLD RAM ;POINT TO TARGET RAM
CPY1: LDAX D ;GET ROM DATA
MOV M,A ;LOAD TO RAM
INX D
INX H
MOV A,D
ANA C
ORA E
JNZ CPY1 ;GO BACK FOR NEXT BYTE
CALL CPY2
DB CR,LF,CR,LF,'COPY COMPLETE',CR,LF,CR,LF,TERM
CPY2: POP D
CALL PRNMSG
RET
;****************************
; MISCELLANEOUS SUBROUTINES
;****************************
; CPHL
;ROUTINE TO COMPARE HL VS DE
CPHL: MOV A,H
CMP D
RNZ
MOV A,L
CMP E
RET
; GETVAL
;ROUTINE TO LOAD A 16 BIT
;VALUE FROM A HEX INPUT
GETVAL: CALL CI ;GET KEYBOARD BYTE
LXI H,0 ;INITIALIZE HL
GET1: MOV B,A ;SAVE KEYBOARD
CALL NIBBLE ;CONVERT ASCII TO HEX
JC GET2 ;NOT LEGAL
DAD H ;HL*16
DAD H
DAD H
DAD H
ORA L ;ADD IN NIBBLE
MOV L,A
CALL CI ;GET NEXT KEYBOARD BYTE
JMP GET1
GET2: XTHL ;STICK PRAMETER ON STACK
PUSH H ;REPLACE RETURN
MOV A,B ;TEST CHARACTER
CALL ECHK ;FOR JUNK
JNZ ERROR ;JUNK OR ILLEGAL
RET
NIBBLE: SUI '0'
RC
CPI 'G'-'0'
CMC
RC
CPI 10
CMC
RNC
SUI 'A'-'9'-1
CPI 10
RET
ECHK: CPI ' '
RZ
CPI ','
RZ
CPI CR
STC
RZ
CMC
RET
ERROR: POP H ;DUMP DATA
POP D
PUSH H
CALL ER1
DB CR,LF,'ENTER VALUE(CR)',CR,LF,TERM
ER1: POP D
CALL PRNMSG
JMP GETVAL
; CONSOLE IN
;ROUTINE TO GET A CHARACTER
;THROUGH CP/M FROM THE CONSOLE
CI: PUSH B! PUSH D! PUSH H
MVI C,RDCON
CALL BDOS
POP H! POP D! POP B
CPI 3 ;CHECK FOR ^C
JZ BOOT ;ABORT
RET
; PRNMSG
;ROUTINE TO PRINT A
;MESSAGE TO THE CONSOLE
;THROUGH CP/M
PRNMSG: MVI C,PRINT
JMP BDOS
; VARIABLE STORAGE
SIZE: DS 1
CODE: DS 1
NCYC: DS 1
OPTION: DS 2
RAM: DS 2
; * * * * * * * * * * * * * * * * * * * * * * * *
; *
;BDOS/CBIOS EQUATES (VERSION 7) *
; *
RDCON EQU 1 ; *
WRCON EQU 2 ; *
PRINT EQU 9 ; *
OPEN EQU 15 ;0FFH=NOT FOUND *
CLOSE EQU 16 ; " " *
SRCHF EQU 17 ; " " *
SRCHN EQU 18 ; " " *
ERASE EQU 19 ;NO RET CODE *
DELT EQU ERASE ; *
READ EQU 20 ;0=OK, 1=EOF *
WRITE EQU 21 ;0=OK, 1=ERR, 2=?, *
; 0FFH=NO DIR SPC *
MAKE EQU 22 ;0FFH=BAD *
REN EQU 23 ;0FFH=BAD *
STDMA EQU 26 ; *
; *
; *
BOOT EQU 0 ;WARM BOOT *
BDOS EQU 5 ; *
FCB EQU 5CH ; *
SYSSIZ EQU 32 ;SYSTEM SIZE *
CBIOS EQU SYSSIZ*1024-512 ; *
SELDSK EQU CBIOS+1BH ; *
SETTRK EQU SELDSK+3 ; *
SETSEC EQU SETTRK+3 ; *
SETDMA EQU SETSEC+3 ; *
RDSEC EQU SETDMA+3 ; *
WRSEC EQU RDSEC+3 ; *
; * * * * * * * * * * * * * * * * * * * * * * * *
END