home *** CD-ROM | disk | FTP | other *** search
- ;---------------------------------------------------------------------
- ;
- ; TITLE 'LOCATE.COM - Display Essential CP/M Jump Addresses.'
- ;
- ; Notes
- ;
- ; 1) Based on TELL.COM by Howard Moulton, Milford RCP/M.
- ; 2) LOCATE.COM is a derivative of TELL.COM, which in this
- ; enhanced form, eliminates more than 500 bytes of extra
- ; code from the older program. The source listing which
- ; follows is presented in the conventional style for easy
- ; reading. The program now fits within a 1K file (1024
- ; bytes).
- ;
- ; by Robert C. Kuhman
- ; Sysop of the Cro'sNest RCP/M - RBBS
- ; Released to the PUBLIC DOMAIN for nonprofit use only.
- ; Original version June 23, 1983.
- ;
- ; Assemble with ASM.COM or MAC.COM
- ;
- ;---------------------------------------------------------------------
- ;
- ; EQUATES
- ;
- VERS: EQU 100 ;PROGRAM VERSION NUMBER
- MONTH: EQU 06 ;MONTH OF LAST REVISION
- DAY: EQU 23 ;DAY OF LAST REVISION
- YEAR: EQU 83 ;YEAR OF LAST REVISION
- ;
- TRUE: EQU -1
- FALSE: EQU NOT TRUE
- ;
- ;
- ; USER DEFINED EQUATES
- ;
- STDCPM: EQU TRUE ;0100H LOAD LOCATION
- ;
- ; END OF USER DEFINED EQUATES
- ;
- IF STDCPM
- CPMBAS: EQU 0000H ;STD BASE ADDR
- ENDIF
- ;
- IF NOT STDCPM
- CPMBAS: EQU 4200H ;NON STD BASE
- ENDIF
- ;
- ; BDOS FUNCTION EQUATES
- ;
- BDOS: EQU 5
- PBUFL: EQU 9
- CONOUT: EQU 2
- ;
- ; ASCII DEFINITIONS
- ;
- CR: EQU 0DH
- LF: EQU 0AH
- ;
- ;
- ; PROGRAM ORGIN
- ;
- ORG CPMBAS+100H
- ;
- ;
- ; START OF PROGRAM
- ;
- BEGIN: LXI D,SIGNON ;DISPLAY SIGNON MESSAGE AND REVISION
- CALL PRINT
- ;
- LHLD 1 ;GET WBOOT ADDR
- DCX H ;DECR DOWN 3 TO CBOOT ADDR
- DCX H
- DCX H
- ;
- ; STORE BEGINNING OF THE JUMP TABLE
- ;
- SHLD JMPTBL
- ;
- ; LOCATE THE CCP ADDRESS
- ;
- MOV A,H ;GET HI ADDR
- SUI 16H ;SUBTRACT 1600H
- MOV H,A ;PUT IT BACK
- SHLD CCPADD ;GOT CCP ADDRESS
- ;
- ; AND THE BDOS ENTRY ADDRESS
- ;
- LXI D,806H ;GET OFFSET FOR BDOS ENTRY
- DAD D
- SHLD DOSENT ;GOT BDOS ENTRY POINT
- ;
- ; SHOW WHERE CCP IS LOCATED
- ;
- LXI D,CCPMSG ;GET STRING READY
- CALL PRINT ;CALL PRINT ROUTINE
- LHLD CCPADD ;GET CCP ADDRESS
- CALL SWAP ;GO FORMAT FOR DISPLAY
- ;
- ; NEXT THE BDOS ENTRY ADDRESS
- ;
- LXI D,DOSMSG ;POINT TO MESSAGE
- CALL PRINT
- LHLD DOSENT ;GET DOS ENTRY ADD IN H
- CALL SWAP
- ;
- ; START OF THE JUMP TABLE
- ;
- LXI D,JMPMSG
- CALL PRINT
- LHLD JMPTBL
- CALL SWAP
- ;
- ; LIST JUMP TABLE ITSELF
- ;
- ; COLD START
- ;
- LXI D,JPMSG0
- CALL PRINT
- LXI D,0 ;NO OFFSET
- CALL SETUP
- ;
- ; WARM START
- ;
- LXI D,JPMSG1
- CALL PRINT
- LXI D,3 ;OFFSET OF 3 BYTES
- CALL SETUP
- ;
- ; CONSOLE STATUS
- ;
- LXI D,JPMSG2
- CALL PRINT
- LXI D,6 ;OFFSET OF 6
- CALL SETUP
- ;
- ; CONSOLE INPUT
- ;
- LXI D,JPMSG3
- CALL PRINT
- LXI D,9 ;OFFSET OF 9
- CALL SETUP
- ;
- ; CONSOLE OUTPUT
- ;
- LXI D,JPMSG4
- CALL PRINT
- LXI D,0CH ;OFFSET OF 12
- CALL SETUP
- ;
- ; LIST DEVICE
- ;
- LXI D,JPMSG5
- CALL PRINT
- LXI D,0FH ;OFFSET OF 15
- CALL SETUP
- ;
- ; PUNCH
- ;
- LXI D,JPMSG6
- CALL PRINT
- LXI D,12H ;OFFSET OF 18
- CALL SETUP
- ;
- ; READER
- ;
- LXI D,JPMSG7
- CALL PRINT
- LXI D,15H ;OFFSET OF 21
- CALL SETUP
- ;
- ; HOME DISK
- ;
- LXI D,JPMSG8
- CALL PRINT
- LXI D,18H ;OFFSET OF 24
- CALL SETUP
- ;
- ; SELECT DISK
- ;
- LXI D,JPMSG9
- CALL PRINT
- LXI D,1BH ;OFFSET OF 27
- CALL SETUP
- ;
- ; SET TRACK
- ;
- LXI D,JPMSGA
- CALL PRINT
- LXI D,1EH ;OFFSET OF 30
- CALL SETUP
- ;
- ; SET SEC
- ;
- LXI D,JPMSGB
- CALL PRINT
- LXI D,21H ;OFFSET OF 33
- CALL SETUP
- ;
- ; DMA
- ;
- LXI D,JPMSGC
- CALL PRINT
- LXI D,24H ;OFFSET OF 36
- CALL SETUP
- ;
- ; READ THE DISK
- ;
- LXI D,JPMSGD
- CALL PRINT
- LXI D,27H ;OFFSET OF 39
- CALL SETUP
- ;
- ; WRITE DISK
- ;
- LXI D,JPMSGE
- CALL PRINT
- LXI D,2AH ;OFFSET OF 42
- CALL SETUP
- ;
- ; LIST STATUS
- ;
- LXI D,JPMSGF
- CALL PRINT
- LXI D,2DH ;OFFSET OF 45
- CALL SETUP
- ;
- ; SECTOR TRANSLATE
- ;
- LXI D,JPMSGG
- CALL PRINT
- LXI D,30H ;OFFSET OF 48
- CALL SETUP
- ;
- RET ;EXIT TO CP/M
- ;
- ; DO SETUP OF NEW ADDRESS - D+E = OFFSET
- ; FROM LOCATION JMPTBL, WHICH GETS INTO HL FROM HERE
- ;
- SETUP: LHLD JMPTBL
- DAD D
- INX H
- MOV D,M
- INX H
- MOV E,M
- XCHG
- SHLD TMPADR
- ;
- ; SENDS ADDR IN ASCII TO CON
- ;
- SENDH: LXI D,TMPADR
- MVI C,2
- ;
- ; ROUTINE TO CONVERT BINARY TO ASCII
- ; ENTERS WITH D+E POINTING TO THE BYTE OR WORD TO
- ; CONVERT AND THE COUNT IN C
- ;
- CONV: LDAX D
- PUSH D ;SAVE THE ENTRY ADD
- PUSH B
- PUSH PSW ;SAVE THE LOWER HALF
- CALL BINH
- POP PSW ;GET LOWER HALF BACK
- CALL BINL
- POP B ;GET BACK COUNT
- POP D ;GET BACK POINT
- DCR C
- JZ HCRLF ;JMP IF NO MORE TO HCRLF
- INX D ;MOV D UP ONE
- JMP CONV
- BINH: RAR
- RAR
- RAR
- RAR
- BINL: ANI 15
- ADI 48
- CPI 58
- JC AOUT
- ADI 7
- AOUT: MOV E,A
- MVI C,CONOUT
- CALL BDOS
- RET
- ;
- ; SEND 'H', CR, AND LF TO CONSOLE
- ;
- HCRLF: LXI D,CRLF
- CALL PRINT
- RET
- ;
- ; PRINT BUFFERED LINE
- ;
- PRINT: MVI C,PBUFL
- CALL BDOS
- RET
- ;
- ; SWAP WHAT IS IN HL AND STORE AT TMPADR
- ;
- SWAP: MOV E,H
- MOV D,L
- XCHG ;SWAP
- SHLD TMPADR
- CALL SENDH
- RET
- ;
- ; ASCII MESSAGES AND STORAGE
- ;
- ; SIGNON MESSAGE
- ;
- SIGNON: DB CR,LF,'LOCATE.COM v'
- DB VERS/100+'0','.',VERS MOD 100/10+'0'
- DB VERS MOD 10+'0',' as of '
- DB MONTH/10+'0',MONTH MOD 10+'0','/'
- DB DAY/10+'0',DAY MOD 10+'0','/'
- DB YEAR/10+'0',YEAR MOD 10+'0'
- DB CR,LF,LF
- DB '$'
- ;
- ; CRLF
- ;
- CRLF: DB 'H',CR,LF,'$'
- ;
- ; CP/M MODULE MESSAGES
- ;
- CCPMSG: DB 'CCP start ','$'
- CCPADD: DW 0
- DOSMSG: DB 'BDOS entry ','$'
- DOSENT: DW 0
- JMPMSG: DB 'CBIOS jump table ','$'
- JMPTBL: DW 0
- ;
- ; JUMP TABLE MESSAGES
- ;
- JPMSG0: DB 'Cold start ','$'
- JPMSG1: DB 'Warmstart ','$'
- JPMSG2: DB 'Console status ','$'
- JPMSG3: DB 'Console input ','$'
- JPMSG4: DB 'Console out ','$'
- JPMSG5: DB 'List device out ','$'
- JPMSG6: DB 'Punch out ','$'
- JPMSG7: DB 'Reader in ','$'
- JPMSG8: DB 'Home disk ','$'
- JPMSG9: DB 'Select disk ','$'
- JPMSGA: DB 'Set track ','$'
- JPMSGB: DB 'Set the sector ','$'
- JPMSGC: DB 'Set the DMA ','$'
- JPMSGD: DB 'Read the disk ','$'
- JPMSGE: DB 'Write disk ','$'
- JPMSGF: DB 'List status ','$'
- JPMSGG: DB 'Sector translate ','$'
- ;
- TMPADR: DW 0
- ;
- END
- ;