; ; PROGRAM: CCPLOC ; AUTHOR: RICHARD CONN ; VERSION: 1.1 ; DATE: 6 JAN 83 ; PREVIOUS VERSIONS: 1.0 (14 DEC 82) ; VERS EQU 11 ; ; This program is Copyright (c) 1982, 1983 by Richard Conn ; All Rights Reserved ; ; ZCPR2 and its utilities, including this one, are released ; to the public domain. Anyone who wishes to USE them may do so with ; no strings attached. The author assumes no responsibility or ; liability for the use of ZCPR2 and its utilities. ; ; The author, Richard Conn, has sole rights to this program. ; ZCPR2 and its utilities may not be sold without the express, ; written permission of the author. ; ; ; CCPLOC -- CCP Locator ; ; The purpose of CCPLOC is to locate the addresses of the running ; CP/M 2.2 CCP, BDOS, and BIOS, and to display these values to the user. ; ; ; CP/M Constants ; bdos equ 5 ; BDOS Entry cr equ 0dh lf equ 0ah ; ; SYSLIB Externals ; ext print,phl4hc,pa2hc,cout,crlf ; ; Branch to Start of Program ; jmp start ; ;****************************************************************** ; ; SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format ; ; This data block precisely defines the data format for ; initial features of a ZCPR2 system which are required for proper ; initialization of the ZCPR2-Specific Routines in SYSLIB. ; ; ; EXTERNAL PATH DATA ; EPAVAIL: DB 0FFH ; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES) EPADR: DW 40H ; ADDRESS OF EXTERNAL PATH IF AVAILABLE ; ; INTERNAL PATH DATA ; INTPATH: DB 0,0 ; DISK, USER FOR FIRST PATH ELEMENT ; DISK = 1 FOR A, '$' FOR CURRENT ; USER = NUMBER, '$' FOR CURRENT DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 DB 0,0 ; DISK, USER FOR 8TH PATH ELEMENT DB 0 ; END OF PATH ; ; MULTIPLE COMMAND LINE BUFFER DATA ; MCAVAIL: DB 0FFH ; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE? MCADR: DW 0FF00H ; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE ; ; DISK/USER LIMITS ; MDISK: DB 4 ; MAXIMUM NUMBER OF DISKS MUSER: DB 31 ; MAXIMUM USER NUMBER ; ; FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK ; DOK: DB 0FFH ; ALLOW DISK CHANGE? (0=NO, 0FFH=YES) UOK: DB 0FFH ; ALLOW USER CHANGE? (0=NO, 0FFH=YES) ; ; PRIVILEGED USER DATA ; PUSER: DB 10 ; BEGINNING OF PRIVILEGED USER AREAS PPASS: DB 'chdir',0 ; PASSWORD FOR MOVING INTO PRIV USER AREAS DS 41-($-PPASS) ; 40 CHARS MAX IN BUFFER + 1 for ending NULL ; ; CURRENT USER/DISK INDICATOR ; CINDIC: DB '$' ; USUAL VALUE (FOR PATH EXPRESSIONS) ; ; DMA ADDRESS FOR DISK TRANSFERS ; DMADR: DW 80H ; TBUFF AREA ; ; NAMED DIRECTORY INFORMATION ; NDRADR: DW 00000H ; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY NDNAMES: DB 64 ; MAX NUMBER OF DIRECTORY NAMES DNFILE: DB 'NAMES ' ; NAME OF DISK NAME FILE DB 'DIR' ; TYPE OF DISK NAME FILE ; ; REQUIREMENTS FLAGS ; EPREQD: DB 000H ; EXTERNAL PATH? MCREQD: DB 000H ; MULTIPLE COMMAND LINE? MXREQD: DB 000H ; MAX USER/DISK? UDREQD: DB 000H ; ALLOW USER/DISK CHANGE? PUREQD: DB 000H ; PRIVILEGED USER? CDREQD: DB 000H ; CURRENT INDIC AND DMA? NDREQD: DB 000H ; NAMED DIRECTORIES? Z2CLASS: DB 0 ; CLASS 0 DB 'ZCPR2' DS 10 ; RESERVED ; ; END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA ; ;****************************************************************** ; ; ; Start of Program ; start: call print db 'CCPLOC Version ' db (vers/10)+'0','.',(vers mod 10)+'0' db cr,lf db cr,lf,'CP/M Element Base Page Base Address' db cr,lf,'------------ --------- ------------',0 lhld bdos+1 ;get base address of BDOS mvi l,0 ;set to even boundary lxi d,-800H ;back up to start of CCP (size of CCP) dad d ;HL pts to CCP call print db cr,lf,' CCP ',' ',0 mov a,h ;base page in A call pa2hc ;print as hex call ph ;print H call filler ;next field call phl4hc ;print full address call ph lhld bdos+1 ;just get base address of BDOS again call print db cr,lf,' BDOS ',' ',0 mov a,h ;base page in A call pa2hc ;print as hex call ph call filler call phl4hc call ph mvi l,0 ;set even page lxi d,0e00h ;size of BDOS dad d ;HL pts to BIOS call print db cr,lf,' BIOS ',' ',0 mov a,h ;base page in A call pa2hc ;print as hex call ph call filler call phl4hc call ph call crlf ;new lines call crlf ret ; ; PH -- Print H followed ; ph: mvi a,'H' ;H jmp cout ; ; FILLER -- Jump Over to Next Field ; filler: call print db ' ',' ',' ',0 ret end