;PROGRAM MSTATUS.ASM ;ASSEMBLE WITH DRI 'MAC' MACROASSEMBLER ;PROGRAM PRINTS SYSTEM INVENTORY ON THE DISPLAY SCREEN/PRINTER ;DISASSEMBLED AND CONVERTED 21 NOV 84 RHP ORG 00100H BDOS EQU 00005H BDOS1 EQU 00006H CR EQU 00DH LF EQU 00AH SPACE EQU 020H ;BDOS CALLS CONOUT EQU 002H ;PRINT CHARACTER IN E TO CONSOLE IOBYTE EQU 007H ;GET IO BYTE IN A PRSTRG EQU 009H ;PRINT STRING POINTED BY DE UNTIL $ LOGIN EQU 018H ;GET DISK LOGIN BITS IN HL,BA CDISK EQU 019H ;GET CURRENT DISK IN HL ALLOC EQU 01BH ;GET ALLOCATION ADDRESS IN HL ROBITS EQU 01DH ;GET DISK READ ONLY BITS IN HL DPBADR EQU 01FH ;GET DISK PARAMETER BLOCK ADDR IN HL USRCOD EQU 020H ;GET USER CODE IN A ENTRY: JMP START DS 40H STACK: DS 2 D0145 DS 2 SCCP DS 2 DS 1 OLDST DS 2 SPORT: DS 1 SIOBY: DS 1 STORE: DS 2 SDISK: DS 1 SALOC: DS 2 MACLIB Z80 START: LXI H,00000H DAD SP SHLD OLDST LXI SP,STACK CALL SCROL ;CLEAR THE SCREEN LXI D,HDR01 MVI C,PRSTRG CALL BDOS ;PRINT THE TITLE LXI D,HDR02 MVI C,PRSTRG CALL BDOS ;PRINT THE MEMORY HEADER LXI H,00000H MLOOP: MVI A,0FFH CMP M JZ TNONE ;NO MEMORY MOV B,M MOV M,A MOV A,M CMP B JZ TROMM ;ROM MEMORY TMEMR: MOV M,B MVI B,'M' JMP PMEMR ;RAM MEMORY TROMM: MVI B,'R' ;R FOR ROM JMP PMEMR TNONE: MVI A,080H MOV B,M MOV M,A MOV A,M CMP B JNZ TMEMR MVI B,'.' ; . FOR NO MEMORY PMEMR: MOV A,B CALL PRINT ;PRINT R,M,. INR H ;CHECK THE NEXT K OF MEMORY INR H INR H INR H JNZ MLOOP CALL CRLFD CALL CRLFD LHLD BDOS1 ;GET BDOS ADDRESS MOV A,L SBI 006H MOV L,A SHLD STACK LXI D,0F700H LHLD STACK DAD D SHLD D0145 LXI D,ENTRY LHLD D0145 DAD D SHLD SCCP MVI C,IOBYTE CALL BDOS STA SIOBY MVI C,ALLOC CALL BDOS SHLD SALOC LXI D,MCCP MVI C,PRSTRG CALL BDOS ;PRINT CCP MSG LHLD SCCP CALL HLHEX CALL CRLFD ;PRINT CCP ADDR LXI D,MBDOS MVI C,PRSTRG CALL BDOS ;PRINT BDOS MSG LHLD STACK CALL HLHEX CALL CRLFD ;PRINT BDOS ADDR LXI D,MBIOS MVI C,PRSTRG CALL BDOS ;PRINT BIOS MSG LXI D,00E00H LHLD STACK DAD D CALL HLHEX CALL CRLFD ;PRINT BIOS ADDR LXI D,MSTPA MVI C,PRSTRG CALL BDOS ;PRINT TPA MSG LHLD D0145 CALL HLHEX ;PRINT TPA SIZE LXI D,MBYTS MVI C,PRSTRG CALL BDOS ;PRINT 'BYTES' CALL CRLFD LXI D,MCUDV MVI C,PRSTRG CALL BDOS ;PRINT CURRENT DRIVE MSG MVI C,CDISK CALL BDOS ADI 'A' ;CONVERT DISK # TO A-P STA SDISK CALL PRINT ;PRINT CURRENT DISK MVI A,03AH CALL PRINT CALL CRLFD LXI D,MALLO MVI C,PRSTRG CALL BDOS ;PRINT ALLOC VECTOR MSG LDA SDISK CALL PRINT ;PRINT CURRENT DISK LXI D,MSGIS MVI C,PRSTRG ;PRINT IS CALL BDOS LHLD SALOC CALL HLHEX ;PRINT ALLOC ADDR MVI A,'H' CALL PRINT ;PRINT H CALL CRLFD MVI C,LOGIN CALL BDOS ANI 00FH ;MASK TO A-P STA STORE LXI D,MDRIV MVI C,PRSTRG CALL BDOS ;PRINT DRIVES MSG LDA STORE RRC STA STORE LXI D,MSG$A MVI C,PRSTRG CC BDOS ;PRINT A IF LOGGED IN LDA STORE RRC STA STORE LXI D,MSG$B MVI C,PRSTRG CC BDOS ;PRINT B IF LOGGED IN LDA STORE RRC STA STORE LXI D,MSG$C MVI C,PRSTRG CC BDOS ;PRINT C IF LOGGED IN LDA STORE RRC LXI D,MSG$D MVI C,PRSTRG CC BDOS ;PRINT D IF LOGGED IN CALL CRLFD MVI C,ROBITS CALL BDOS ;READ RO DISK BITS ANI 00FH ;MASK TO A-P STA STORE LXI D,MRODV MVI C,PRSTRG CALL BDOS ;PRINT RO DISK MSG LDA STORE ORA A LXI D,MNONE MVI C,PRSTRG CZ BDOS ;PRINT NONE IF ALL LOGGED LDA STORE RRC STA STORE LXI D,MSG$A MVI C,PRSTRG CC BDOS ;PRINT A IF RO LDA STORE RRC STA STORE LXI D,MSG$B MVI C,PRSTRG CC BDOS ;PRINT B IF RO LDA STORE RRC STA STORE LXI D,MSG$C MVI C,PRSTRG CC BDOS ;PRINT C IF RO LDA STORE RRC LXI D,MSG$D MVI C,PRSTRG CC BDOS ;PRINT D IF RO CALL CRLFD LXI D,MSDPB MVI C,PRSTRG CALL BDOS ;PRINT DPB MSG MVI C,DPBADR CALL BDOS ;GET DPB ADDR CALL HLHEX ;PRINT DPB ADDR IN HEX MVI A,'H' CALL PRINT ;PRINT H CALL CRLFD LXI D,MUSER MVI C,PRSTRG CALL BDOS ;PRINT USER MSG MVI E,0FFH MVI C,USRCOD CALL BDOS ;GET USER # CALL HYNIB ;PRINT USER # MVI A,'H' CALL PRINT ;PRINT H CALL CRLFD LXI D,MIOPT MVI C,PRSTRG CALL BDOS ;PRINT IO PORT MSG XRA A ;CLEAR A STA SPORT ;SET TO 0 FPORT: LDA SPORT CPI 09FH JZ SKIP CPI 0FCH JZ SKIP STA PORTN+1 PORTN: IN 000H CPI 0FFH ;IN USE? JZ PPORT SKIP: LDA SPORT CALL HYNIB ;PRINT PORT # IN HEX MVI A,SPACE CALL PRINT ;PRINT SPACE PPORT: LDA SPORT INR A CPI 0FFH JZ ALDON STA SPORT JMP FPORT ; ; SUBROUTINES ; ALDON: CALL CRLFD CALL CRLFD CALL CRLFD LHLD OLDST SPHL RET ; PRINT CONTENTS OF HL AS 2 HEX CHARACTERS HLHEX: MOV A,H CALL HYNIB MOV A,L HYNIB: MOV C,A RRC RRC RRC RRC CALL LONIB MOV A,C LONIB: ANI 00FH ADI 030H CPI 03AH JC PRINT ADI 007H ;PRINT CHARACTER IN E TO THE CONSOLE PRINT: PUSH B PUSH D PUSH H MOV E,A MVI C,CONOUT CALL BDOS POP H POP D POP B RET SCROL: MVI C,019H CALL CRLFD DCR C CNZ LINFD RET CRLFD: MVI A,CR CALL PRINT LINFD: MVI A,LF CALL PRINT RET ; ; MESSAGES ; HDR01: DB 'STATUS report for CP/M 2.2' DB ' ' DB 'Version 1.5 (30-NOV-84)' DB 00DH,00AH,00AH,00AH,024H HDR02: DB ' M=RAM memory' DB ' ' DB 'R=ROM memory' DB ' ' DB '.=no memory' DB 00DH,00AH DB '0 1 2 3 4 5 6 7 ' DB '8 9 A B C D E F' DB 00DH,00AH,024H MCCP: DB 'CCP starts at $' MBDOS: DB 'BDOS starts at $' MDRIV: DB 'Current logged in drives; $' MALLO: DB 'The Allocation address of drive $' MSGIS: DB ': is $' MSG$A: DB 'A$' MSG$B: DB ', B$' MSG$C: DB ', C$' MSG$D: DB ', D$' MBYTS: DB ' bytes$' MSDPB: DB 'The address of the disk parameter block is $' MSTPA: DB 'Available TPA without killing the CCP is $' MRODV: DB 'These drives are vectored as read only; $' MBIOS: DB 'BIOS starts at $' MIOPT: DB 'Active I/O ports: $' MNONE: DB 'None$' MCUDV: DB 'Current drive in use is $' MUSER: DB 'The present USER number is $' END