;PROGRAM MSTATUS.ASM ;ASSEMBLE WITH DRI 'MAC' MACROASSEMBLER ;PROGRAM PRINTS SYSTEM INVENTORY ON THE DISPLAY SCREEN/PRINTER ;DISASSEMBLED AND CONVERTED 21 NOV 84 RHP 0100 ORG 00100H 0005 = BDOS EQU 00005H 0006 = BDOS1 EQU 00006H 000D = CR EQU 00DH 000A = LF EQU 00AH 0020 = SPACE EQU 020H ;BDOS CALLS 0002 = CONOUT EQU 002H ;PRINT CHARACTER IN E TO CONSOLE 0007 = IOBYTE EQU 007H ;GET IO BYTE IN A 0009 = PRSTRG EQU 009H ;PRINT STRING POINTED BY DE UNTIL $ 0018 = LOGIN EQU 018H ;GET DISK LOGIN BITS IN HL,BA 0019 = CDISK EQU 019H ;GET CURRENT DISK IN HL 001B = ALLOC EQU 01BH ;GET ALLOCATION ADDRESS IN HL 001D = ROBITS EQU 01DH ;GET DISK READ ONLY BITS IN HL 001F = DPBADR EQU 01FH ;GET DISK PARAMETER BLOCK ADDR IN HL 0020 = USRCOD EQU 020H ;GET USER CODE IN A 0100 C35301 ENTRY: JMP START 0103 DS 40H 0143 STACK: DS 2 0145 D0145 DS 2 0147 SCCP DS 2 0149 DS 1 014A OLDST DS 2 014C SPORT: DS 1 014D SIOBY: DS 1 014E STORE: DS 2 0150 SDISK: DS 1 0151 SALOC: DS 2 MACLIB Z80 0153 210000 START: LXI H,00000H 0156 39 DAD SP 0157 224A01 SHLD OLDST 015A 314301 LXI SP,STACK 015D CDB103 CALL SCROL ;CLEAR THE SCREEN 0160 11C603 LXI D,HDR01 0163 0E09 MVI C,PRSTRG 0165 CD0500 CALL BDOS ;PRINT THE TITLE 0168 110D04 LXI D,HDR02 016B 0E09 MVI C,PRSTRG 016D CD0500 CALL BDOS ;PRINT THE MEMORY HEADER 0170 210000 LXI H,00000H 0173 3EFF MLOOP: MVI A,0FFH 0175 BE CMP M 0176 CA8B01 JZ TNONE ;NO MEMORY 0179 46 MOV B,M 017A 77 MOV M,A 017B 7E MOV A,M 017C B8 CMP B 017D CA8601 JZ TROMM ;ROM MEMORY 0180 70 TMEMR: MOV M,B 0181 064D MVI B,'M' 0183 C39601 JMP PMEMR ;RAM MEMORY 0186 0652 TROMM: MVI B,'R' ;R FOR ROM 0188 C39601 JMP PMEMR 018B 3E80 TNONE: MVI A,080H 018D 46 MOV B,M 018E 77 MOV M,A 018F 7E MOV A,M 0190 B8 CMP B 0191 C28001 JNZ TMEMR 0194 062E MVI B,'.' ; . FOR NO MEMORY 0196 78 PMEMR: MOV A,B 0197 CDA403 CALL PRINT ;PRINT R,M,. 019A 24 INR H ;CHECK THE NEXT K OF MEMORY 019B 24 INR H 019C 24 INR H 019D 24 INR H 019E C27301 JNZ MLOOP 01A1 CDBB03 CALL CRLFD 01A4 CDBB03 CALL CRLFD 01A7 2A0600 LHLD BDOS1 ;GET BDOS ADDRESS 01AA 7D MOV A,L 01AB DE06 SBI 006H 01AD 6F MOV L,A 01AE 224301 SHLD STACK 01B1 1100F7 LXI D,0F700H 01B4 2A4301 LHLD STACK 01B7 19 DAD D 01B8 224501 SHLD D0145 01BB 110001 LXI D,ENTRY 01BE 2A4501 LHLD D0145 01C1 19 DAD D 01C2 224701 SHLD SCCP 01C5 0E07 MVI C,IOBYTE 01C7 CD0500 CALL BDOS 01CA 324D01 STA SIOBY 01CD 0E1B MVI C,ALLOC 01CF CD0500 CALL BDOS 01D2 225101 SHLD SALOC 01D5 118B04 LXI D,MCCP 01D8 0E09 MVI C,PRSTRG 01DA CD0500 CALL BDOS ;PRINT CCP MSG 01DD 2A4701 LHLD SCCP 01E0 CD8B03 CALL HLHEX 01E3 CDBB03 CALL CRLFD ;PRINT CCP ADDR 01E6 119A04 LXI D,MBDOS 01E9 0E09 MVI C,PRSTRG 01EB CD0500 CALL BDOS ;PRINT BDOS MSG 01EE 2A4301 LHLD STACK 01F1 CD8B03 CALL HLHEX 01F4 CDBB03 CALL CRLFD ;PRINT BDOS ADDR 01F7 118205 LXI D,MBIOS 01FA 0E09 MVI C,PRSTRG 01FC CD0500 CALL BDOS ;PRINT BIOS MSG 01FF 11000E LXI D,00E00H 0202 2A4301 LHLD STACK 0205 19 DAD D 0206 CD8B03 CALL HLHEX 0209 CDBB03 CALL CRLFD ;PRINT BIOS ADDR 020C 112E05 LXI D,MSTPA 020F 0E09 MVI C,PRSTRG 0211 CD0500 CALL BDOS ;PRINT TPA MSG 0214 2A4501 LHLD D0145 0217 CD8B03 CALL HLHEX ;PRINT TPA SIZE 021A 11FB04 LXI D,MBYTS 021D 0E09 MVI C,PRSTRG 021F CD0500 CALL BDOS ;PRINT 'BYTES' 0222 CDBB03 CALL CRLFD 0225 11AA05 LXI D,MCUDV 0228 0E09 MVI C,PRSTRG 022A CD0500 CALL BDOS ;PRINT CURRENT DRIVE MSG 022D 0E19 MVI C,CDISK 022F CD0500 CALL BDOS 0232 C641 ADI 'A' ;CONVERT DISK # TO A-P 0234 325001 STA SDISK 0237 CDA403 CALL PRINT ;PRINT CURRENT DISK 023A 3E3A MVI A,03AH 023C CDA403 CALL PRINT 023F CDBB03 CALL CRLFD 0242 11C604 LXI D,MALLO 0245 0E09 MVI C,PRSTRG 0247 CD0500 CALL BDOS ;PRINT ALLOC VECTOR MSG 024A 3A5001 LDA SDISK 024D CDA403 CALL PRINT ;PRINT CURRENT DISK 0250 11E704 LXI D,MSGIS 0253 0E09 MVI C,PRSTRG ;PRINT IS 0255 CD0500 CALL BDOS 0258 2A5101 LHLD SALOC 025B CD8B03 CALL HLHEX ;PRINT ALLOC ADDR 025E 3E48 MVI A,'H' 0260 CDA403 CALL PRINT ;PRINT H 0263 CDBB03 CALL CRLFD 0266 0E18 MVI C,LOGIN 0268 CD0500 CALL BDOS 026B E60F ANI 00FH ;MASK TO A-P 026D 324E01 STA STORE 0270 11AA04 LXI D,MDRIV 0273 0E09 MVI C,PRSTRG 0275 CD0500 CALL BDOS ;PRINT DRIVES MSG 0278 3A4E01 LDA STORE 027B 0F RRC 027C 324E01 STA STORE 027F 11ED04 LXI D,MSG$A 0282 0E09 MVI C,PRSTRG 0284 DC0500 CC BDOS ;PRINT A IF LOGGED IN 0287 3A4E01 LDA STORE 028A 0F RRC 028B 324E01 STA STORE 028E 11EF04 LXI D,MSG$B 0291 0E09 MVI C,PRSTRG 0293 DC0500 CC BDOS ;PRINT B IF LOGGED IN 0296 3A4E01 LDA STORE 0299 0F RRC 029A 324E01 STA STORE 029D 11F304 LXI D,MSG$C 02A0 0E09 MVI C,PRSTRG 02A2 DC0500 CC BDOS ;PRINT C IF LOGGED IN 02A5 3A4E01 LDA STORE 02A8 0F RRC 02A9 11F704 LXI D,MSG$D 02AC 0E09 MVI C,PRSTRG 02AE DC0500 CC BDOS ;PRINT D IF LOGGED IN 02B1 CDBB03 CALL CRLFD 02B4 0E1D MVI C,ROBITS 02B6 CD0500 CALL BDOS ;READ RO DISK BITS 02B9 E60F ANI 00FH ;MASK TO A-P 02BB 324E01 STA STORE 02BE 115805 LXI D,MRODV 02C1 0E09 MVI C,PRSTRG 02C3 CD0500 CALL BDOS ;PRINT RO DISK MSG 02C6 3A4E01 LDA STORE 02C9 B7 ORA A 02CA 11A505 LXI D,MNONE 02CD 0E09 MVI C,PRSTRG 02CF CC0500 CZ BDOS ;PRINT NONE IF ALL LOGGED 02D2 3A4E01 LDA STORE 02D5 0F RRC 02D6 324E01 STA STORE 02D9 11ED04 LXI D,MSG$A 02DC 0E09 MVI C,PRSTRG 02DE DC0500 CC BDOS ;PRINT A IF RO 02E1 3A4E01 LDA STORE 02E4 0F RRC 02E5 324E01 STA STORE 02E8 11EF04 LXI D,MSG$B 02EB 0E09 MVI C,PRSTRG 02ED DC0500 CC BDOS ;PRINT B IF RO 02F0 3A4E01 LDA STORE 02F3 0F RRC 02F4 324E01 STA STORE 02F7 11F304 LXI D,MSG$C 02FA 0E09 MVI C,PRSTRG 02FC DC0500 CC BDOS ;PRINT C IF RO 02FF 3A4E01 LDA STORE 0302 0F RRC 0303 11F704 LXI D,MSG$D 0306 0E09 MVI C,PRSTRG 0308 DC0500 CC BDOS ;PRINT D IF RO 030B CDBB03 CALL CRLFD 030E 110205 LXI D,MSDPB 0311 0E09 MVI C,PRSTRG 0313 CD0500 CALL BDOS ;PRINT DPB MSG 0316 0E1F MVI C,DPBADR 0318 CD0500 CALL BDOS ;GET DPB ADDR 031B CD8B03 CALL HLHEX ;PRINT DPB ADDR IN HEX 031E 3E48 MVI A,'H' 0320 CDA403 CALL PRINT ;PRINT H 0323 CDBB03 CALL CRLFD 0326 11C305 LXI D,MUSER 0329 0E09 MVI C,PRSTRG 032B CD0500 CALL BDOS ;PRINT USER MSG 032E 1EFF MVI E,0FFH 0330 0E20 MVI C,USRCOD 0332 CD0500 CALL BDOS ;GET USER # 0335 CD9003 CALL HYNIB ;PRINT USER # 0338 3E48 MVI A,'H' 033A CDA403 CALL PRINT ;PRINT H 033D CDBB03 CALL CRLFD 0340 119205 LXI D,MIOPT 0343 0E09 MVI C,PRSTRG 0345 CD0500 CALL BDOS ;PRINT IO PORT MSG 0348 AF XRA A ;CLEAR A 0349 324C01 STA SPORT ;SET TO 0 034C 3A4C01 FPORT: LDA SPORT 034F FE9F CPI 09FH 0351 CA6303 JZ SKIP 0354 FEFC CPI 0FCH 0356 CA6303 JZ SKIP 0359 325D03 STA PORTN+1 035C DB00 PORTN: IN 000H 035E FEFF CPI 0FFH ;IN USE? 0360 CA6E03 JZ PPORT 0363 3A4C01 SKIP: LDA SPORT 0366 CD9003 CALL HYNIB ;PRINT PORT # IN HEX 0369 3E20 MVI A,SPACE 036B CDA403 CALL PRINT ;PRINT SPACE 036E 3A4C01 PPORT: LDA SPORT 0371 3C INR A 0372 FEFF CPI 0FFH 0374 CA7D03 JZ ALDON 0377 324C01 STA SPORT 037A C34C03 JMP FPORT ; ; SUBROUTINES ; 037D CDBB03 ALDON: CALL CRLFD 0380 CDBB03 CALL CRLFD 0383 CDBB03 CALL CRLFD 0386 2A4A01 LHLD OLDST 0389 F9 SPHL 038A C9 RET ; PRINT CONTENTS OF HL AS 2 HEX CHARACTERS 038B 7C HLHEX: MOV A,H 038C CD9003 CALL HYNIB 038F 7D MOV A,L 0390 4F HYNIB: MOV C,A 0391 0F RRC 0392 0F RRC 0393 0F RRC 0394 0F RRC 0395 CD9903 CALL LONIB 0398 79 MOV A,C 0399 E60F LONIB: ANI 00FH 039B C630 ADI 030H 039D FE3A CPI 03AH 039F DAA403 JC PRINT 03A2 C607 ADI 007H ;PRINT CHARACTER IN E TO THE CONSOLE 03A4 C5 PRINT: PUSH B 03A5 D5 PUSH D 03A6 E5 PUSH H 03A7 5F MOV E,A 03A8 0E02 MVI C,CONOUT 03AA CD0500 CALL BDOS 03AD E1 POP H 03AE D1 POP D 03AF C1 POP B 03B0 C9 RET 03B1 0E19 SCROL: MVI C,019H 03B3 CDBB03 CALL CRLFD 03B6 0D DCR C 03B7 C4C003 CNZ LINFD 03BA C9 RET 03BB 3E0D CRLFD: MVI A,CR 03BD CDA403 CALL PRINT 03C0 3E0A LINFD: MVI A,LF 03C2 CDA403 CALL PRINT 03C5 C9 RET ; ; MESSAGES ; 03C6 5354415455HDR01: DB 'STATUS report for CP/M 2.2' 03E0 2020202020 DB ' ' 03F1 5665727369 DB 'Version 1.5 (30-NOV-84)' 0408 0D0A0A0A24 DB 00DH,00AH,00AH,00AH,024H 040D 202020204DHDR02: DB ' M=RAM memory' 041D 2020202020 DB ' ' 0428 523D524F4D DB 'R=ROM memory' 0434 2020202020 DB ' ' 043E 2E3D6E6F20 DB '.=no memory' 0449 0D0A DB 00DH,00AH 044B 3020202031 DB '0 1 2 3 4 5 6 7 ' 046B 3820202039 DB '8 9 A B C D E F' 0488 0D0A24 DB 00DH,00AH,024H 048B 4343502073MCCP: DB 'CCP starts at $' 049A 42444F5320MBDOS: DB 'BDOS starts at $' 04AA 4375727265MDRIV: DB 'Current logged in drives; $' 04C6 5468652041MALLO: DB 'The Allocation address of drive $' 04E7 3A20697320MSGIS: DB ': is $' 04ED 4124 MSG$A: DB 'A$' 04EF 2C204224 MSG$B: DB ', B$' 04F3 2C204324 MSG$C: DB ', C$' 04F7 2C204424 MSG$D: DB ', D$' 04FB 2062797465MBYTS: DB ' bytes$' 0502 5468652061MSDPB: DB 'The address of the disk parameter block is $' 052E 417661696CMSTPA: DB 'Available TPA without killing the CCP is $' 0558 5468657365MRODV: DB 'These drives are vectored as read only; $' 0582 42494F5320MBIOS: DB 'BIOS starts at $' 0592 4163746976MIOPT: DB 'Active I/O ports: $' 05A5 4E6F6E6524MNONE: DB 'None$' 05AA 4375727265MCUDV: DB 'Current drive in use is $' 05C3 5468652070MUSER: DB 'The present USER number is $' 05DF END