************************************************************** *** BIG Z MONITOR (1K VERSION 2.0) 9/10/79 AB ************************************************************** ; ASSUMPTIONS ; SERIAL PORT ON BIGZ IS SET TO 10 AND 11H ; TARBELL TAPE USING STANDARD TARBELL PORTS ; OR KC STANDARD VIA JADE SERIAL/PARALLEL CARD ; SET TO PORTS 01 & 81 HEX ; NO MEMORY SIZE IS ASSUMED ; ; CONDITIONAL ASSEMBLY PARAMETERS ; DEFINE VALUES OF TRUE/FALSE TRUE EQU 0FFFFH FALSE EQU 0 ; ; SET CONDITIONAL ASSEMBLY VALUES TARBEL EQU FALSE KCTAPE EQU TRUE ; ; SYSTEM EQUATES ; MON ORG 0E000H ; TAPE EQU 0 TAPST EQU 80H KBDST EQU 11H KBDDT EQU 10H KBDIN EQU 02H KBDOT EQU 01H WAIT EQU 0FCH SECT EQU 0FAH DCOM EQU 0F8H DDATA EQU 0FBH DSTAT EQU 0F8H SBOOT EQU 007DH TARBL EQU 6EH ; ; JP INIT JP EXEC JP CONIN JP CONOUT JP HEXIN JP HEXOUT JP DHXOT JP CRLF JP SPACE JP TREAD JP TWRIT INIT LD B,1 ; SET THE RAM FLAG LD A,4EH OUT (KBDST),A LD A,37H OUT (KBDST),A ; INITIALIZE THE ONBOARD UART LD HL,TRUE ; PRELOAD MEMORY ADDRESS FTOP: INC HL LD A,(HL) CPL LD (HL),A CP (HL) CPL LD (HL),A JR NZ,FTOP1-$ LD B,0 JR FTOP-$ FTOP1: LD A,B OR A JR NZ,FTOP-$ ; FIND TOP OF CONTIGIOUS RAM DEC HL ; AND SET STACK TO THIS VALUE DEC HL LD SP,HL PUSH HL POP IY ; SAVE STACK ADDRESS IN IY ; 2 CR/LF'S CALL CRLF CALL CRLF FTOP2 LD HL,MSG1 INIT1: LD A,(HL) ; MESSAGE PRINT ROUTINE CALL CONOUT ; PRINT MESSAGE AT HL UNTIL INC HL ; END OF ENTRY IS FOUND (03H) CP 03H ; THEN GO TO MONITOR MAIN ENTRY JR NZ,INIT1-$ ; POINT EXEC CALL CRLF LD HL,1 ADD HL,SP CALL DHXOT JR EXEC-$ IF TARBEL MSG1: DEFM 'JADE COMPUTER SYSTEMS BIG Z MONITOR 2.0B' ENDIF IF KCTAPE MSG1: DEFM 'JADE COMPUTER SYSTEMS BIG Z MONITOR 2.0A' ENDIF DEFB 0DH,0AH,0DH,0AH DEFB 03H EXEC: LD SP,IY IF TARBEL SUB A OUT (TARBL),A ENDIF EXEC3: CALL CRLF LD A,'#' ; MONITOR PROMPT: # SIGN CALL CONOUT CALL SPACE EXEC4: CALL CONIN CP 21H JP M,EXEC4 ; LOOP ON CONTROL CHARACTERS CP 'A' JR Z,ALTER-$ ; MODIFY MEMORY ROUTINE CP 'D' JR Z,DUMP-$ ; DUMP MEMORY ROUTINE CP 'G' JR Z,GO-$ ; JUMP TO ADDRESS AND RUN CP 'C' JP Z,COPY ; MOVE MEMORY ROUTINE CP 'T' JP Z,TEST ; TEST MEMORY ROUTINE CP 'F' JP Z,FILL ; FILL MEMORY ROUTINE CP 'M' JP Z,MAP ; MAP RAM AREAS CP 'L' JP Z,LOAD ; WRITE DIRECT INTO MEMORY CP 'S' JP Z,TSAVE ; SAVE MEMORY ON CASSETTE CP 'R' JP Z,TLOAD ; LOAD MEMORY FROM CASSETTE CP 'V' JP Z,VERIFY ; VERIFY TAPE WRITE CP 'X' JP Z,STRM ; DO A SYNC STREAM OUTPUT IF KCTAPE CP 'Y' JP Z,TUNE ; ADJUST CASSETTE ROUTINE ENDIF CP 'B' JP Z,BOOT ; TARBELL BOOT ROUTINE CP 'E' JP Z,0F000H ; SPECIAL VERSAFLOPPY JUMP ; THE ABOVE IS A JUMP TO THE VERSAFLOPPY BIOS ROM JR EXEC3-$ GO: CALL SPHIN JP (HL) ; EXECUTE A PROGRAM ALTER: CALL SPHIN ALT1: CALL CRLF CALL DHXOT CALL SPACE LD A,(HL) CALL HEXOUT PUSH HL CALL SPHIN LD E,L POP HL CP 0DH JP Z,ALT3 CP '/' JP Z,EXEC CP '.' JR NZ,ALT2-$ LD (HL),E ALT2: INC HL JR ALT1-$ ALT3: DEC HL JR ALT1-$ DUMP: CALL DHXIN DUMP1: CALL CRLF CALL DHXOT LD B,16 DUMP2: CALL SPACE LD A,(HL) CALL HEXOUT CALL CMPDH JP C,EXEC INC HL DEC B JR NZ,DUMP2-$ JR DUMP1-$ MAP: LD B,1 LD HL,0 MAP1 LD A,(HL) CPL LD (HL),A CP (HL) CPL LD (HL),A LD A,0 JR Z,MAP2-$ INC A MAP2: CP B LD B,A JR Z,MAP4-$ DEC HL OR A JR NZ,MAP3-$ INC HL CALL CRLF MAP3: CALL DHXOT CALL SPACE JR Z,MAP4-$ INC HL MAP4: INC HL LD A,L OR H JR NZ,MAP1-$ LD A,B OR A JP NZ,EXEC DEC HL CALL DHXOT JP EXEC LOAD: CALL SPACE LOAD0: CALL LHXIN JR NZ,LOAD0-$ LOAD1: CALL LHXIN CP ' ' JR NZ,LOAD0-$ EX DE,HL LOAD2: CALL LHXIN PUSH AF LD A,L LD (DE),A INC DE POP AF JR NZ,LOAD2-$ JR LOAD1-$ LHXIN: CALL HEXIN CP 0AH JR Z,LHXIN-$ OR A JR Z,LHXIN-$ CP '#' JP Z,EXEC CP 0DH RET FILL: CALL DHXIN SUB 0DH JR Z,FILL0-$ PUSH HL CALL HEXIN LD A,L POP HL FILL0: DEC HL FILL1: INC HL LD (HL),A CALL CMPDH JR NC,FILL1-$ JP EXEC COPY: CALL TRPIN CALL COPY0 JP EXEC COPY0 DEC DE DEC BC COPY1: INC DE INC BC LD (DE),A LD A,(BC) CALL CMPDH JR NC,COPY1-$ RET TEST: CALL DHXIN INC DE ; ADD 1 TO ENDING ADDRESS PUSH HL POP IY ; SAVE STARTING ADDRESS LD C,256 ; TOTAL NUMBER OF PASSES LD B,0 ; STARTING PATTERN TEST0: PUSH IX POP HL ; SET PRESERVED START ADDRESS TEST1: LD A,L XOR H XOR B LD (HL),A INC HL LD A,H CP D JR NZ,TEST1-$ PUSH IX POP HL ; FETCH START ADDRESS FOR READ TEST TEST2: LD A,L XOR H XOR B CP (HL) CALL NZ,ERRO ; FOUND AN ERROR, EXIT INC HL LD A,H CP D JR NZ,TEST2-$ INC B LD A,'P' CALL CONOUT DEC C JR NZ,TEST0-$ JP EXEC ERRO: PUSH AF PUSH HL CALL DHXOT CALL SPACE LD A,B CALL HEXOUT CALL SPACE POP AF CALL HEXOUT CALL CRLF POP HL RET ; ; IF KCTAPE TLOAD: CALL DHXIN CALL TREAD JP Z,EXEC CALL SPACE LD A,'#' CALL CONOUT JP EXEC TREAD: LD A,0B0H OUT (TAPST),A TRDA: LD B,4 TRDB: CALL CIN CP 0FFH JR NZ,TRDA-$ DEC BC JR NZ,TRDB-$ TRDC: CALL CIN CP 0FFH JR Z,TRDA-$ CP 0E6H JR NZ,TRDA-$ LD B,0 LD A,'$' CALL CONOUT DEC HL TRD1: INC HL CALL CIN LD (HL),A ADD A,B LD B,A CALL CMPDH JR NC,TRD1-$ CALL CIN CP B RET CIN: IN A,(TAPST) AND 01H JR Z,CIN-$ IN A,(TAPE) RET TUNE: CALL SPACE LD A,0B0H OUT (TAPST),A TUN0: CALL CRLF LD H,32 TUN1: TUN2: CALL CIN CP 0FFH JR Z,TUN2-$ LD L,'+' CP 0E6H JR Z,TUN3-$ LD L,'?' TUN3: LD A,L CALL CONOUT DEC H JR NZ,TUN1-$ JR TUN0-$ TSAVE: CALL DHXIN CALL TWRIT JP EXEC TWRIT: LD A,0B0H OUT (TAPST),A LD B,16 TWRT0: LD A,0FFH CALL COUT DEC B JR NZ,TWRT0-$ LD A,0E6H CALL COUT DEC HL LD B,0 TWRT1: INC HL LD A,(HL) CALL COUT ADD A,B LD B,A CALL CMPDH JR NC,TWRT1-$ LD A,B CALL COUT CALL COUT JR COUT-$ COUT: PUSH AF IN A,(TAPST) AND 80H JR Z,COUT+1-$ POP AF OUT (TAPE),A RET STRM: CALL SPACE LD A,0B0H OUT (TAPST),A STRM1: LD A,0FFH CALL COUT LD A,0E6H CALL COUT JR STRM1-$ ENDIF ; IF TARBEL TLOAD: CALL DHXIN CALL TREAD JP Z,EXEC LD A,'#' CALL CONOUT JP EXEC TREAD LD A,1 OUT (TARBL),A PUSH HL LD HL,20000 CALL DELAY POP HL LD B,0 LD A,11H OUT (TARBL),A DEC HL TRD1: INC HL CALL CIN LD (HL),A ADD A,B LD B,A CALL CMPDH JR NC,TRD1-$ CALL CIN CP B PUSH AF SUB A OUT (TARBL),A POP AF RET CIN: IN A,(TARBL) AND 10H JR NZ,CIN-$ IN A,(TARBL+1) RET TSAVE: CALL DHXIN CALL TWRIT JP EXEC TWRIT: LD A,2 OUT (TARBL),A PUSH HL LD HL,TRUE CALL DELAY POP HL SUB A LD B,A CALL COUT LD A,0E6H CALL COUT DEC HL TWRT1: INC HL LD A,(HL) CALL COUT ADD A,B LD B,A CALL CMPDH JR NC,TWRT1-$ LD A,B CALL COUT CALL COUT CALL COUT SUB A OUT (TARBL),A RET COUT: PUSH AF IN A,(TARBL) AND 20H JR NZ,COUT+1-$ POP AF OUT (TARBL+1),A RET STRM: CALL SPACE LD A,2 OUT (TARBL),A STRM1: LD A,0E6H CALL COUT JR STRM1-$ DELAY: EX (SP),HL EX (SP),HL DEC HL LD A,L OR H JR NZ,DELAY-$ RET ENDIF ; VERIFY: CALL TRPIN EX DE,HL DEC HL DEC BC VRFY1: INC HL INC BC LD (BC),A CP (HL) JR Z,VRFY2-$ CALL CRLF CALL DHXOT CALL SPACE LD A,(HL) CALL HEXOUT CALL SPACE LD (BC),A CALL HEXOUT VRFY2: CALL CMPDH JR NC,VVRFY1-$ JP EXEC CMPDH: PUSH AF LD A,D CP H JR NZ,CMP1-$ LD A,E CP L JR NZ,CMP1-$ POP AF SCF RET CMP1: POP AF SCF CCF RET DHXIN: CALL SPHIN PUSH HL CP 0DH CALL NZ,HEXIN EX DE,HL ; LOAD BOTH HL AND DE WITH ADDRESS POP HL RET SPHIN: CALL SPACE HEXIN: LD HL,0 HXIN1: CALL CONIN ; LOAD HL WITH ONE OR TWO HEX VALUES CP '0' ; IF MORE THAN TWO ARE ENTERED, KEEP RET M ; THE LAST TWO. EXIT WITH LAST CP 'F'+1 ; CHARACTER ENTERED IN THE A REGISTER, RET P ; AND IF LAST IS CR SET Z FLAG. CP '9'+1 JP M,HXIN2 CP 'A' RET M ADC A,9 HXIN2: AND 0FH ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL OR L LD L,A JR HXIN1-$ TRPIN: CALL SPHIN EX DE,HL ; LOAD ALL THREE PAIRS WITH HEX CALL HEXIN ; ENTRIES PUSH HL CALL HEXIN PUSH HL POP BC POP HL RET DHXOT: LD A,H ; DISPLAY CURRENT HL VALUE CALL HEXOUT LD A,L HEXOUT: PUSH AF RRCA RRCA RRCA RRCA CALL HXOT1 POP AF HXOT1: AND 0FH ADD A,30H CP '9'+1 JP M,CONOUT ADD A,7 JP CONOUT CRLF: PUSH AF LD A,0DH CALL CONOUT LD A,0AH CALL CONOUT POP AF RET SPACE: PUSH AF LD A,20H CALL CONOUT POP AF RET CONOUT: PUSH AF IN A,(KBDST) AND KBDOT JR Z,CONOUT+1-$ POP AF OUT (KBDDT),A RET CONIN: IN A,(KBDST) AND KBDIN JR Z,CONIN-$ IN A,(KBDDT) AND 7FH CP 61H JR C,ECHO-$ CP 7CH JR NC,ECHO-$ SUB 20H ECHO: CP 18H JP Z,EXEC KR CONOUT-$ PTXT: LD A,(HL) CP 03H ; PRINT A MESSAGE BEGINNING AT RET Z ; AODENDING WITH A CONTC CALL CONOUT INC HL JR PTXT-$ BOOT: IN A,(WAIT) XOR A LD L,A LD H,A INC A OUT (SECT),A LD A,8CH OUT (DCOM),A RLOOP: IN A,(WAIT) OR A JP P,RDONE IN A,(DDATA) LD (HL),A INC HL JP RLOOP RDONE: IN A,(DSTAT) OR A JP Z,SBOOT HALT ; END