; NAME PROM08 ; ; ; 2708 PROM PROGRAMMER CONTROL PROGRAM ; 8/20/79 ; ; VERSION 1.01 PROM VERSION (NON—DISK I/O) ; ; ; SYSTEM EQUATES ; ; ;SDATA .EQU 01H ; VIDEO DATA PORT ;SSTAT .EQU 00H ; VIDEO STATUS PORT ;RXRMSK .EQU 02H ; RX RDY MASK ;TXRMSK .EQU 04H ; TX RDY MASK ;EXIT .EQU 0E003H ;CORRECTIONS FOR NORTHSTAR MOTHERBOARD SERIAL PORT 0 SDATA .EQU 02H ; VIDEO DATA PORT SSTAT .EQU 03H ; VIDEO STATUS PORT RXRMSK .EQU 02H ; RX RDY MASK TXRMSK .EQU 01H ; TX RDY MASK ;CORRECTION FOR CP/M 2.2 EXIT .EQU 00000H ; CP/M SYSTEM RESET TBASE .EQU 100H ; BASE OF TRANSIENT AREA DATA .EQU 68H ; DATA PORT LADD .EQU 69H ; LOW ADDRESS PORT HACTL .EQU 6AH ; HIGH ADDRESS + CONTROL PORT RBOUT .EQU 0 LOOPS .EQU 100 ; ; ; ; ; ; ; PSECT ABS ; .ORG TBASE ; START AT 100H ; ; ; ; PROGRAM PROM ENTRY POINT ; ; ; PPG LD SP,SPVAL LD HL,MSG1 CALL PTXT ; "PROM08 VERSION 1.0" PPG0 LD SP,SPVAL XOR A ; CLEAR ACC OUT (HACTL),A CALL CRLF JP READ2 ; JUMP READ PPG10A CALL CRLF LD HL,MSG4 CALL PTXT ; “READY TO PROG A PROM ?” CALL YORN JR NC,RENTRY PPG11 CALL CRLF LD HL,MSG5 CALL PTXT ; "MEM START,MEM END,PROM START" CALL SCAN LD A,(NXCHR) CP '.' ; IF '.' EXIT JR Z,PPG11 JP PROG ; ; ; ; ; YORN CALL ECHO CP '.' JR Z,RENTRY OR A CP 'N' RET Z CP 'Y' JR NZ,YORN SCF RET ; ; RENTRY XOR A OUT (HACTL),A CALL CRLF JP EXIT ; ; PADDR LD A,H CALL PACC LD A,L JP PASP ; ; ; MSG1 .DB "PROM08 V 1.0" .DW 0D0AH .DB 03H MSG4 .DB "READY TO PROGRAM A PROM (Y/N)?" .DB 03H MSG5 .DB "MEM START,MEM END,PROM START: " .DB 03H MSG6 .DB "READY TO READ A PROM (Y/N)?" .DB 03H ; ; ; ; ; PROM READ SEQUENCE ; ; ; READ2 CALL CRLF ; READ PROM INTO MEMORY LD HL,MSG6 CALL PTXT ; "READY TO READ (Y/N)?" CALL YORN JP NC,PPG10A ; NO, THEN PROGRAM READ0 CALL CRLF LD HL,MSG5 CALL PTXT ; "MEM START,NEM END,PROM START" CALL SCAN ; INPUT PARAMETERS LD A,(NXCHR) CP '.' JR Z,READ0 LD A,40H OUT (HACTL),A ; TURN ON PROM VOLTAGE LD HL,(OPR1) ; MEM START ADDR LD DE,(OPR3) ; PROM START ADDR READ1 CALL PREAD ; READ A BYTE OF PROM LD (HL),A ; SAVE BYTE IN MEM CALL ADCMP ; INC ADDR & COMPARE JR NZ,READ1 ; IF NOT END,THEN JUMP XOR A OUT (HACTL),A JP PPG10A ; WHEN COMPLETE,RETURN ; ; ; ; ; INC HL & DE THEN COMPARE HL WITH (IX) ; EXIT WITH ZERO FLAG SET IF EQUAL ; ; ADCMP INC DE ; INC PROM ADDR LD A,D AND 7H ; MAX PROM ADDR=7FF LD D,A INC HL PUSH DE PUSH HL ; SAVE HL & DE LD DE,(OPR2) ; GET RAM END ADDR INC DE AND A SBC HL,DE ; COMPARE POP HL POP DE RET ; ; ; ; ; PROGRAMMING SEQUENCE ; ; PROG LD HL,(OPR1) ; MEM START ADDRESS LD DE,(OPR3) ; PROM START ADDRESS PROG1 CALL PREAD ; READ A BYTE (PROM) CP 0FFH ; CHECK FOR ERASED BYTES JR NZ,PROG2 ; IF NOT ERASED JUMP PRG1A CALL ADCMP ; INC ADDR & CHECK FOR END JR NZ,PROG1 ; LOOP UNTIL END JR PROG3 ; GO PROGRAM PROM PROG2 PUSH HL LD HL,MSG7 CALL PTXT ; "NOT ERASED" POP HL IN A,(DATA) CALL PRTER ; PRINT BAD LOCATION CALL ECHO ; READ FROM CONSOLE CP '.' ; CHECK FOR PERIOD JR Z,PRG2A ; EXIT CP 'C' ; CHECK FOR ‘C’ JR Z,PROG3 ; CONTINUE IF ‘C’ ENTERED JR PRG1A ; IF NOT ,PRINT NEXT ERROR PRG2A LD A,0 OUT (HACTL),A JP PPG0 PROG3 CALL CRLF LD B,LOOPS+1 PROG4 LD HL,(OPR1) ; SET MEM START ADDR LD DE,(OPR3) ; SET PROM START ADDR DEC B JR Z,PROG6 PROG5 PUSH BC CALL PPROG ; PROGRAM ONE BYTE POP BC CALL CONST JR Z,PROG5A CALL CONIN CP '.' JR Z,PROG9 PROG5A CALL ADCMP ; INC ADDR & CHECK END JR NZ,PROG5 ; FINISH THIS LOOP JR PROG4 PROG6 LD A,0 OUT (HACTL),A ; TURN OFF ALL CONTROL LINES LD D,20 PROG6B XOR A CALL DELAY DEC D JR NZ,PROG6B PROG6A LD HL,(OPR1) ; MEM START ADDR LD DE,(OPR3) ; PROM START ADDR PROG7 CALL PREAD ; READ PROM DATA CP (HL) JR NZ,PROG8 ; IF NOT MATCH,JUMP PRG7A CALL ADCMP ; CHECK FOR END JR NZ,PROG7 JR PRG2A ; EXIT,COMPLETE PROG8 PUSH AF PUSH HL LD HL,MSG8 CALL PTXT ; "BAD LOCATION" POP HL CALL CONST JR Z,PROG8A CALL CONIN CP '.' JR Z,PRG2A PROG8A POP AF CALL PRTER ; PRINT ERROR MESSAGE JR PRG7A ; PRINT ALL BAD LOCATIONS PROG9 LD HL,MSG9 CALL PTXT ; ABORTED JR PRG2A ; ; ; ; PULSE ONE PROM LOCATION ; ; PPROG CALL PADD ; LATCH LSB OF ADDRESS LD A,D OR 080H OUT (HACTL),A LD A,(HL) ; FETCH DATA OUT (DATA),A ; OUTPUT DATA LD A,D OR 0C0H ; TURN ON PROG PULSE OUT (HACTL),A LD A,1 CALL DELAY ; 1 MILLISEC DELAY LD A,D OR 080H AND 087H ; PROG PULSE OFF OUT (HACTL),A RET ; DELAY LD B,191 DELAY1 DJNZ DELAY1 DEC A JR NZ,DELAY RET ; ; ; ; ; READ ONE LOCATION OF PROM ; ; PREAD CALL PADD ; LATCH LSB OF ADDRESS LD A,D AND 7 OUT (HACTL),A IN A,(DATA) RET ; ; ; LATCH LOWER 8 BITS OF PROM ADDRESS ; ; PADD LD A,E OUT (LADD),A RET ; ; ; ; ; ; PRINTS ADDR/BAD DATA/GOOD DATA ; OF ERROR LOCATION ; ; PRTER LD B,A LD A,D CALL PACC ; PRINT MSB OF ADDR LD A,E CALL PACC ; PRINT LSB OF ADDR LD C,20H CALL CONOUT LD A,B CALL PACC ; PRINT BAD DATA LD C,20H CALL CONOUT LD A,(HL) CALL PACC ; PRINT GOOD DATA CALL CRLF RET ; ; ; ; MSG7 .DB "NOT ERASED " .DB 03H MSG8 .DB "BAD LOC " .DB 03H MSG9 .DB "ABORTED" .DB 03H ; ; ; ; TWDG-READ AND CONVERT 2 DIGITS TO BINARY ; ; ; ; ; ; ; ASCII TO BINARY CONVERSION ; ; ASBIN SUB 030H CP 10 RET M SUB 7 RET ; ; ; ; ; ; ; ; PASP PUSH BC CALL PACC CALL SPACE POP BC RET ; ; ; CRLF LD C,0DH CALL CONOUT LD C,0AH JP CONOUT ; ; SPACE LD C,' ' JP CONOUT ; ; ; ; ; ; PRINT TEXT ; ; PTXT LD A,(HL) ; FETCH A BYTE CP 3 RET Z LD C,A CALL CONOUT INC HL JR PTXT ; ; ; PRINT ACCUMULATOR ; ; PACC PUSH AF RRCA RRCA RRCA RRCA CALL PRVAL POP AF ; ; PRVAL AND 0FH ADD A,90H DAA ADC A,40H DAA LD C,A JP CONOUT ; PRINT IT ; ; ; ; ; CHECK FOR VALID HEX CHARACTER ; ; AORN CP '0' JR C,AORN2 ; JUMP IF < 30H CP '9'+1 JR C,AORN1 ; JUMP IF < 3AH CP 'A'-1 JR C,AORN2 ; JUMP IF < 'A' CP 'F'+1 JR NC,AORN2 ; JUMP IF < 'G' AORN1 XOR A RET ; VALID DATA RET AORN2 XOR A INC A RET ; NOT HEX CHAR ; ; ; CHECK FOR TERMINATOR ; ; SPACE, COMMA, OR CARRIAGE RETURN ; ; TERMCK CP ' ' RET Z CP ',' RET Z CP '.' JR Z,TCHKO CP 0DH RET NZ TCHKO PUSH BC CALL CRLF POP BC XOR A RET ; ; ; SCAN FOR OPERAND FROM KEYBOARD ; ; ; EXIT WITH DATA IN HL, AND TERMINATOR ; IN C. IF VALID DATA, RETURN WITH ; 2ERO FLAG SET. B CONTAINS # OF CHARACTERS ENTERED. ; ; KEYIN LD HL,0 LD B,L KEY1 CALL ECHO INC B ; INC CHAR COUNT CALL TERMCK RET Z ; IF TERMINATOR, RETURN CALL AORN ; VALID DATA CHECK RET NZ ; IF NOT RETURN LD A,C CALL ASBIN ; CONVERT TO BINARY ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ;p SHIFT 4 BITS ADD A,L LD L,A JR KEY1 ; ; ; ECHO CALL CONIN LD C,A JP CONOUT ; ; ; INVCMD LD C,'?' CALL CONOUT LD A,'.' LD (NXCHR),A RET ; ; ; ; ;SCAN —— SCANS THE OPERANDS INPUT FROM THE ; CONSOLE. THE OPERANDS ARE SAVED IN OP1, ; AS THE ARGUMENTS TO EXECUTE THEIR COMMANDS. ; SCAN XOR A ;INITIALIZE LD HL,OPRS ;CLEAR OPERANDS PUSH HL POP IX ;IX=POINTER TO OPERANDS LD (HL),A LD BC,9 LD DE,OPRS+1 LDIR LD (OPCNT),A SCAN1 CALL KEYIN ; GET ONE OPERAND JP NZ,INVCMD LD A,C LD (NXCHR),A CP ' ' JR Z,SCAN2 CP ',' JR Z,SCAN2 DEC B RET Z ; IF NO DATA, RET SCAN2 LD (IX),L LD (IX+1),H LD A,(OPCNT) INC A LD (OPCNT),A INC IX INC IX ; POINT TO NEXT OPR LD A,C CP ' ' JR Z,SCAN1 CP ',' JR Z,SCAN1 RET ; ; ; CONST IN A,(SSTAT) ; CONSOLE STATUS AND RXRMSK RET Z LD A,0FFH RET ; CONIN CALL CONST ; CONSOLE INPUT JP Z,CONIN IN A,(SDATA) AND 7FH RET ; CONOUT IN A,(SSTAT) ; CONSOLE OUTPUT AND TXRMSK ; TX BFR EMPTY JP Z,CONOUT LD A,C OUT (SDATA),A RET ; OPCNT .DS 0 1 NXCHR .DS 0 1 OPRS .DS 0 6 OPR1 .EQU OPRS OPR2 .EQU OPRS+2 OPR3 .EQU OPRS+4 SPVAL .EQU OPRS+100H ; ; ; .END