************************************************************** *** BIG Z MONITOR (1K VERSION 2.0) 9/10/79 AB ************************************************************** ; ASSUMPTIONS ; SERIAL PORT ON BIGZ IS SET TO 10 AND 11H ; NO MEMORY SIZE IS ASSUMED ; ; CONDITIONAL ASSEMBLY PARAMETERS ; DEFINE VALUES OF TRUE/FALSE TRUE EQU 0FFFFH ; ; ; SYSTEM EQUATES ; MON ORG 0E000H ; 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 ; ; JP INIT JP EXEC JP CONIN JP CONOUT JP HEXIN JP HEXOUT JP DHXOT JP CRLF JP SPACE ; 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-$ MSG1: DEFB 'JADE COMPUTER SYSTEMS BIG Z MONITOR 2.0' DEFB 0DH DEFB 0AH DEFB 0DH DEFB 0AH DEFB 03H EXEC: LD SP,IY 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 '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 ; 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 JR CONOUT-$ PTXT: LD A,(HL) CP 03H ; PRINT A MESSAGE BEGINNING AT RET Z ; AND ENDING WITH A ^C 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