;IDUMP - INTERPRETED FILE DUMP ;MOD. PUT L/F AFTER C/R 10/29/77 ORG 100H ;TO TPA ;INIT PRIVATE STACK LXI H,0 DAD SP SHLD STACK LXI SP,STACK ;IS THERE AN FCB? LDA FCB+1 CPI ' ' JZ NOFCB ;OPEN FILE LXI D,FCB MVI C,OPEN CALL BDOS INR A ;OPEN OK? JZ OPNER ;READ SECTOR, DUMP IN HEX RDLP LXI D,FCB MVI C,READ CALL BDOS ORA A ;READ OK? JNZ RDER ;NO, CHECK EOF ;DUMP IN HEX LXI D,80H ;POINT TO BUFFER LHLD ADDR ;GET ADDR TO PRINT DAD D ;BUMP BY 128 SHLD ADDR ;SAVE FOR NEXT SECTOR LINE MOV A,H ;GET ADDR CALL XO ;TYPE IN HEX MOV A,L ;GET LO ADDR CALL XOB ;TYPE, SPACE PUSH D ;SAVE DATA ADDR FOR ASCII CHAR LDAX D ;GET CHAR INX D ;POINT TO NEXT INX H ;INCR ADDRESS CALL XO ;PRINT IN HEX MOV A,E ;GET ADDR ANI 3 ;TIME TO SPACE? CZ SPACE ;..YES MOV A,E ;GET ADDR AGAIN ANI 0FH ;END OF LINE? JNZ CHAR ;END OF HEX, PRINT ASCII POP D ;GET DATA ADDR CALL AST ;PRINT '*' ASCIC LDAX D ;GET CHAR CPI ' ' ;PRINTABLE? JC PER ;..NO CPI 'Z'+1 JC OK PER MVI A,'.' ;PRINT '.' FOR UNPRINTABLE OK CALL TYPE ;TYPE CHAR INX D MOV A,E ;END OF LINE? ANI 0FH JNZ ASCIC ;MORE ASCII CHARS CALL AST ;PRINT '*' MVI A,13 ;GET ASCII C/R CALL TYPE MVI A,10 ;GET ASCII L/F CALL TYPE ;END OF SECTOR? MOV A,E ;GET ADDR ANI 7FH ;ISOLATE JZ RDLP ;READ SECTOR JMP LINE ;SUBROUTINES ; ;TYPE ASTERISK AST MVI A,'*' ;TYPE CHAR IN A TYPE PUSH B PUSH D PUSH H MOV E,A ;SET UP MVI C,WRCON ;WRITE CALL BDOS ;CONSOLE ;CHECK FOR ABORT MVI C,CONST ;READ CONSOLE STATUS CALL BDOS DCR A ;CHAR TYPED? JZ EXIT POP H POP D POP B RET ;HEX OUTPUT XO PUSH PSW ;SAVE CHAR RAR RAR RAR RAR CALL NIBBL POP PSW NIBBL ANI 0FH CPI 10 JC HEXNU ADI 7 HEXNU ADI '0' JMP TYPE ;HEX OUTPUT W/BLANK XOB CALL XO ;SPACE SPACE MVI A,' ' JMP TYPE ;READ ERROR - CHECK FOR EOF RDER DCR A ;WAS IT 1? JNZ RDERR ;NO, GENUINE READ ERROR ;EOF REACHED JMP EXIT NOFCB LXI D,MSG1 JMP ERXIT OPNER LXI D,MSG2 JMP ERXIT RDERR LXI D,MSG3 ;READ ERROR JMP ERXIT ERXIT MVI C,PRINT CALL BDOS ;PRINT MESSAGE EXIT LHLD STACK ;GET ORIGINAL STACK SPHL ;RESTORE IT RET ;--EXIT-- DS 30 ;STACK AREA STACK DS 2 ;STACK POINTER MSG1 DB 'NO FILE$' MSG2 DB 'NO SUCH FILE$' MSG3 DB 'READ ERR$' ADDR DW -128 ;ADDR PRINTED -128 ; ; BDOS EQUATES (VERSION 2) ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 CONST EQU 11 ;CONSOLE STATUS OPEN EQU 15 ;0FFH=NOT FOUND CLOSE EQU 16 ; " " SRCHF EQU 17 ; " " SRCHN EQU 18 ; " " ERASE EQU 19 ;NO RET CODE READ EQU 20 ;0=OK, 1=EOF WRITE EQU 21 ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC MAKE EQU 22 ;0FFH=BAD REN EQU 23 ;0FFH=BAD STDMA EQU 26 BDOS EQU 5 REIPL EQU 0 FCB EQU 5CH ;SYSTEM FCB