07/07/86 mon 4.45 firmware adapted for use with Micro Decisions title 'Micro Decision monitor firmware' .z80 aseg org 0 ;Start of ROM ;******************************************************** ;* * ;* The following routines make up the debugging tool * ;* monitor * ;* * ;******************************************************** start: CALL CRLF LD C,':' CALL CONOUT CHARIN: CALL ECHO OR A JR Z,CHARIN CP 'z'+1 JP NC,ERROR LD C,002H CP 'D' JR Z,disp cp 'd' jr nz,FILL ; ; DISPLAY MEMORY XXXX TO XXXX ; ; DISP: CALL UEXLF DISP0: CALL CRLF CALL HLASC LD B,010H DISP1: CALL PUTSP LD A,(HL) CALL AASC CALL UHILOX DJNZ DISP1 JR DISP0 ; ; ; ; FILL MEMORY XXXX TO XXXX WITH XX ; ; ; FILL: CP 'F' JR z,FILL0 cp 'f' jr nz,GOTO FILL0: CALL PARM3 UFI0: LD (HL),C CALL UHILO JR NC,UFI0 POP DE JP START ; ; ; GOTO (EXECUTE) XXXX ; ; GOTO: CP 'G' JR Z,GOTO0 cp 'g' jr nz,MTEST GOTO0: CALL PARM1 CALL CRLF POP HL JP (HL) ; ; ; TEST MEMORY XXXX TO XXXX ; ; MTEST: CP 'T' JR Z,ut10 cp 't' jr nz,MOVE ut10: CALL UEXLF UT1: LD A,(HL) LD B,A CPL LD (HL),A XOR (HL) JR Z,UT2 PUSH DE LD E,A CALL UHLSP CALL UQI1 CALL CRLF POP DE UT2: LD (HL),B CALL UHILOX JR UT1 ; ; ; MOVE DATA FROM XXXX TO XXXX ; ; MOVE: CP 'M' JR Z,umvo0 cp 'm' jr nz,SUBS umvo0: CALL PARM3 UMV0: LD A,(HL) LD (BC),A INC BC CALL UHILOX JR UMV0 USTORE: LD (IX+00H),A INC IX DEC E RET ; ; ; EXAMINE AND/OR REPLACE MEMORY DATA ; ; SUBS: CP 'S' JP Z,usuo0 cp 's' jp nz,HEXMATH usuo0: CALL PARM1 CALL CHARCK JP C,ERROR POP HL USU0: LD A,(HL) CALL AASC LD C,02DH CALL UCOPCK RET C JR Z,USU1 PUSH HL LD HL,0 LD C,001H CALL UEX1 POP DE POP HL LD (HL),E LD A,B CP 00DH RET Z USU1: INC HL CALL CRLF PUSH HL CALL HLASC CALL PUTSP POP HL JR USU0 ; ; UEXLF: CALL PARM POP DE POP HL ; CR/LF OUTPUT ; ; CRLF:PUSH BC LD C,0DH CALL CONOUT LD C,0AH CALL CONOUT POP BC CALL CONST OR A RET Z ; ; CHECK FOR CONTROL CHARACTER ; ; UCCHK: CALL CONIN CP 013H ;CONTROL-S JR Z,UCCHK CP 003H ;CONTROL-C RET NZ ERROR: LD DE,ERROR ;if invalid character typed PUSH DE LD C,'?' CALL CONOUT JP START UHLSP: CALL HLASC ; ; PRINT SPACE CHARACTER ; PUTSP: LD C,020H ;******************************************************** ;* * ;* Console I/O routines for the Wunderbus I/O. These * ;* routines assume that the uart divisor latch has * ;* previously set (either on power up or in routine * ;* executed before a trap to this routine occurred. * ;* The character to output should be in the 'C' reg- * ;* ister, the character received is returned in the * ;* 'A' register. CONST returns with zero flag set * ;* when no character is waiting in the UART buffer, * ;* or with A = FFh if a character is waiting. * ;* * ;******************************************************** CONOUT:;call uconinit ucout2: in a,(lsr) ;get uart status and thre jr z,ucout2 ;loop until tbe ld a,c out (thr),a ;output the data to uart ret CONIN: ;call uconinit ucon2: in a,(lsr) ;get uart status and dr jr z,ucon2 ;wait until receive data available in a,(rbr) ;read the uart data register and 07fh ;strip parity ret CONST: ;call uconinit in a,(lsr) ;read uart status and dr ret z ;return zero set if no character ld a,0ffh ret ;return a = ffh if character waiting ;uconinit: ; ld a,group1 ; out (grpctl),a ;set up for UART 1 ; ld a,wls0+wls1+stb ; out (lcr),a ;8 bit word, 2 bit stop bits ; ret ; CONVERT HEX TO ASCII UCONV: AND 00fh ADD A,090H DAA ADC A,040H DAA LD C,A RET ; ; GET PARAMETERS 1,2,OR 3 ; PARM3: INC C CALL PARM CALL CRLF POP BC POP DE POP HL RET PARM1: LD C,001H PARM: LD HL,0 UEX0: CALL ECHO UEX1: LD B,A CALL UNIBBLE JR C,UEX2 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL OR L LD L,A JR UEX0 UEX2: EX (SP),HL PUSH HL LD A,B CALL CHARCK JR NC,UEX3 DEC C RET Z UEX3: JP NZ,ERROR DEC C JR NZ,PARM RET UHILOX: CALL UHILO RET NC POP DE RET UHILO: INC HL LD A,H OR L SCF RET Z LD A,E SUB L LD A,D SBC A,H RET ; ; HEXADECIMAL ARITHMETIC ; HEXMATH: CP 'H' JR Z,uhexd cp 'h' jr nz,PORTIO uhexd: CALL UEXLF PUSH HL ADD HL,DE CALL UHLSP POP HL OR A SBC HL,DE ; ; CONVERT HL REGISTER TO ASCII ; HLASC: LD A,H CALL AASC LD A,L ; ; CONVERT A REGISTER TO ASCII ; AASC: PUSH AF RRCA RRCA RRCA RRCA CALL UDBLC POP AF UDBLC: CALL UCONV JP CONOUT ;checked UNIBBLE: cp 'a' ;is it less than lower case 'a'? jr c,unibok ;take jump if so cp 'z'+1 ;less than a lower case 'z'? ccf ;set carry and return if > 'z' ret c sub ' ' ;convert to upper case unibok: SUB 030H RET C cp 017h ccf RET C CP 00AH CCF RET NC SUB 007H CP 00AH RET UCOPCK: CALL CONOUT UPCHK: CALL ECHO ; ; CHARACTER CHECK ; CHARCK: CP 020H RET Z CP 02CH RET Z CP 00DH SCF RET Z CCF RET ; ; ECHO CONSOLE ; ECHO: CALL CONIN INC A RET Z DEC A AND 07FH RET Z CP 000H RET Z CP 04EH RET Z CP 06EH RET Z PUSH BC LD C,A CALL CONOUT LD A,C POP BC RET ; ; READ/WRITE TO I/O PORT ; PORTIO: CP 'O' JR Z,UQOUT CP 'o' jr z,uqout CP 'I' JR Z,uin cp 'i' jr z,uin JR VERIFY UIN: CALL PARM1 LD C,0AH CALL CONOUT POP BC UQ0: IN E,(C) UQI1: LD B,008H CALL PUTSP UQI2: SLA E LD A,018H ADC A,A LD C,A CALL CONOUT DJNZ UQI2 RET UQOUT: CALL PARM POP DE POP BC OUT (C),E RET ; ; ; ; ; VERIFY MEMORY XXXX TO XXXX WITH XXXX ; VERIFY: CP 'V' JR Z,uver0 cp 'v' jp nz,error ;if character was not a valid command uver0: call PARM3 UVERIO: LD A,(BC) CP (HL) JR Z,U..B PUSH BC MEMERR: LD B,A ;MEMORY MISMATCH PRINTOUT CALL UHLSP LD A,(HL) CALL AASC CALL PUTSP LD A,B CALL AASC CALL CRLF POP BC U..B: INC BC CALL UHILOX JR UVERIO end