TITLE 'DUMP.ASM VERSION OF 27 MAY 84 RHP' CURLIN EQU 0F780H USERCMD EQU 0F789H CTRLC EQU 0F78FH ORG 100H JMP MONT ;MONITOR ENTRY POINT ;************************************************************** ;CRLF DO CARRIAGE RETURN/LINE FEED ;************************************************************** CRLF MVI C,0DH CALL CHAROUC MVI C,0AH ;************************************************************** ; THIS IS THE NORMAL ENTRY POINT FOR COMMUNICATING WITH THE ; VIDIO MONITOR AS YOU WOULD A CRT. ;************************************************************** CHAROUC MOV A,C CHAROUT JMP 0F803H ;************************************************************** ;8080 MONITOR PROGRAM USING THE VIO FIRMWARE ;************************************************************** MONT LXI H,SIGNON CALL MSGNC ;SIGNON MSG PRMPT CALL CRLF MVI A,'?' CALL CHAROUT CALL CHIN ;GET COMMAND MOV B,A ;SAVE IT LXI D,PRMPT PUSH D ;RETURN ADDRESS LHLD USERCMD ;USER COMMAND TABLE MOV A,H ORA A ;SET FLAGS MOV A,B ;RETRIEVE CODE JZ NUCMD ;NO USER COMMAND TABLE CALL LOOKUP ;LOOKUP IN USER TABLE JNZ FNDCMD ;FOUND COMMAND NUCMD MOV A,B ;GET COMMAND AGAIN LXI H,CMDTBL ;COMAND TABLE PTR CALL LOOKUP RZ ;NO ENTRY,PROMPT AGIN MVI B,1 ;FOR PROT/UNPROT FNDCMD PCHL ;GO TO ROUTINE SIGNON DB 'R H PETERS VIO ' DB 'MONITOR 4/84',0 ;************************************************************** ;DISPLAY MEMORY "D,START,END CR" ;************************************************************** DISP CALL SIZE ;H,L=START,B,C=SIZE DISP4 LDA CTRLC ;#LINES/COLS RRC ;#LINES BIT IN CARRY RRC MVI D,12 JC DISP2 MVI D,24 DISP2 CALL CRLF IN 3 ANI 2 ;ANY INPUT RNZ ;YES,INTERRRUPT MVI E,8 LDA CTRLC RRC JC DISP3 MVI E,16 DISP3 CALL OHEXHL ;OUTPUT ASCII H,L REG DISP1 MOV A,M ;GET DATA BYTE CALL OHEXB ;OUTPUT WITH TRAIL BLANK INX H DCX B MOV A,B ORA C RZ ;DONE DCR E JNZ DISP1 ;KEEP WITH CURRENT LINE DCR D ;FILLED PAGE YET? JNZ DISP2 CALL CHIN ;WAIT FOR PAGE PROMT JMP DISP4 Š ;************************************************************** ;OUTPUT HEX WITH TRAILING BYTE ;************************************************************** OHEXB CALL OHEX MVI A,' ' CALL CHAROUT RET ;************************************************************** ;OUTPUT 16 BIT ASCII HEX FROM H,L ;************************************************************** OHEXHL MOV A,H CALL OHEX MOV A,L CALL OHEXB RET ;************************************************************** ;SIZE INPUTS START,END ADDR AND CONVERTS TO START ; AND SIZE IN H,L AND B,C ;************************************************************** SIZE CALL PARM2 ;H,L=START D,E=END PUSH A MOV A,E SUB L ;LOW BYTE SIZE MOV C,A MOV A,D SBB H ;HIGH BYTE SIZE MOV B,A INX B ;ADD 1 POP A RET ;************************************************************** ;CHARACTER INPUT ROUTINES Š;************************************************************** CHIN CALL CHIN1 CPI 03 ;CRTL C? JZ MONT ;YES,RESET AND PROMPT CALL CHAROUT CPI 0DH CZ CRLF ;ADD LINE FEED RET CHIN1 CALL CONST ORA A JZ CHIN1 IN 2 ;READ PORT 2 ANI 7FH ;MASK PARITY RET CONST IN 3 ;READ STATUS PORT ANI 2 ;CHECK FOR KEYPRESS STAT1 MVI A,0FFH ;GET READY FOR KEYPRESS RNZ CMA ;NO KEYPRESS RET ;************************************************************** ;PARM2 READ 2 PARAMETERS 16 BITS EACH INTO H,L AND D,E ;************************************************************** PARM2 CALL IHEX MOV D,H MOV E,L CPI 0AH ;TERMINATED? RZ ;YES,USE SAME VALUE CPI ',' JZ PARM3 CPI ' ' RNZ ;INVALID PARM3 XCHG CALL IHEX ;GET SECOND PARM XCHG RET ;************************************************************** ;INPUT CHARS ASSUMED HEX AND CONVERT TO BINARY ;TERMINATES ON FIRST NO HEX CHAR WHICH IS LEFT ;IN A REG. H,L RETURNS WITH VALUE ;***************************)”TTTTDQ‚*********************** IHEX LXI H,0 IHEX2 CALL CHIN ;READSCAPE CHAR? PUSH A CALL ASBI ;CONVERT TO BINARY JNC IHEX1 POP A RET IHEX1 DAD H DAD H DAD H DAD H ADD L MOV L,A POP A JMP IHEX2 ;************************************************************** ;CONVERT ASCII HEX CHAR IN A-REG TO BINARY IN A REG ;RETURN WITH CARRY SET IF INVALID CHAR,RESET OTHERWISE ;************************************************************** ASBI SUI 30H ;REMOVE ASCII BIAS RC ;INVALID <0 CPI 10 JC ASBI1 ;VALID 0-9 SUI 17 RC ;INVALID ADI 10 CPI 16 ;SET CARRY IF <0FH ASBI1 CMC RET ;************************************************************** ;OUTPUT HEX CHARS TO VIDIO FROM A REG ;************************************************************** OHEX PUSH PSW ;SAVE CHAR RRC RRC RRC RRC CALL BIAS ;BINARY TO ASCII AND OUT POP PSW ;************************************************************** ;CONVERT BINARY TO ASCII ;************************************************************** BIAS ANI 0FH ;MASK NIBBLE ADI 90H DAA ACI 40H DAA CALL CHAROUT RET Š ;************************************************************** ;OUTPUT MESSAGE PTED TO BY H,L AND TERMINATED ;BY ONE BYTE OF BINARY ZEROS ;************************************************************** MSG CALL CRLF MSGNC MOV A,M ORA A RZ CALL CHAROUT INX H JMP MSGNC CMDTBL EQU $ DB 'D' ;DISPLAY MEMORY DW DISP DB 0 ;************************************************************** ;TABLE LOOK UP ROUTINE. SEARCHES FIRST BYTE OF THREE BYTE TABLE OF ;RECORDS FOR A MATCH OR ZERO. ZERO INDICATES END OF TABLE WITH NO ;MATCH, RETURNED IN A REG.H,L LOADED WITH SECOND TWO BYTES OF TABLE ;IF MATCH FOUND. ;************************************************************** LOOKUP MOV B,A ;SAVE LOOKU1 MOV A,M ;GET FIRST BYTE OF RECORD LXI D,CURLIN ORA A RZ ;DONE,NO MATCH CMP B ;SAME AS REQUESTED? JNZ TBLUP1 ;NO INX H MOV E,M INX H MOV D,M XCHG ORA A ;SET FLAGS RET TBLUP1 INX H INX H INX H ;BUMP TO NEXT RECORD Š JMP LOOKU1 END