;TARBELL MAP FOR CP/M ;PRINTS FIRST 11 CHARS READ CONST EQU 11 ;FUNCTION TO CHECK CONSOLE STAT WRCON EQU 2 ;WRITE CONSOLE CHAR PRINT EQU 9 ;PRINT BUFFER FUNCTION BDOS EQU 5 ;BDOS ENTRY POINT ORG 100H ;TO TPA BASE CALL START DB 'TMAP 09/10/77',0DH,0AH,'$' START POP D MVI C,PRINT CALL BDOS NEXT MVI B,8+3 ;# OF CHRS TO PRINT MVI A,10H ;GET TARBELL RESET CHAR OUT 6EH ;RESET TARBELL LXI H,BUFF ;INIT SHLD ADDR ;BUFFER ADDR CHAR PUSH B ;SAVE COUNT MVI C,CONST ;FUNCTION TO CHECK CONSOLE STAT CALL BDOS ;CHECK CONSOLE DCR A ;WAS IT READY? JZ FINIS ;YES, EXIT POP B ;GET COUNT BACK IN 6EH ;READ STATUS ANI 10H ;READY? JNZ CHAR ;NO IN 6FH ;READ TARBELL CHAR CPI ' ' ;VALID ASCII? JC GOT5 ;NO CPI 'Z'+1 JNC GOT5 LHLD ADDR ;STORE MOV M,A ;CHR IN BUFF INX H SHLD ADDR DCR B ;MORE CHARS? JNZ CHAR ;YES ;GOT 11 VALID ASCII CHARS - PRINT THEM SHOW LXI D,BUFF ;POINT TO BUFF MVI C,PRINT ;FUNCTION TO PRINT CALL BDOS ;PRINT THE FILENAME CALL CRET ;TYPE C/R JMP NEXT ;DO IT AGAIN ;CHECK IF 5 CHARS READ (FOR OLD TAPE MAP) GOT5 MOV A,B ;GET COUNT CPI 7 JNC NEXT ;NOT 5 ;GOT 5 - STORE $ IN BUFFER AFTER 5TH CHAR MVI A,'$' STA BUFF+5 JMP SHOW ;ABORT FINIS POP B ;RESET STACK RET ;ROUTINE TO TYPE C/R CRET MVI A,0DH ;GET C/R CALL TYPE MVI A,0AH ;GET L/F ;ROUTINE TO TYPE CHAR IN A TYPE PUSH B ;SAVE B (ONLY) MOV E,A ;CHR MUST BE IN E MVI C,WRCON ;C HAS FUNCTION CALL BDOS ;PRINT THE CHAR POP B ;RESTORE B RET ADDR DW BUFF ;CURRENT CHAR POINTER BUFF DS 11 ;STORE NAME HERE DB '$' ;END DELIMITER FOR CONSOLE PRINT END 100H