; PROGRAM NAME: BDOS Locator ; AUTHOR: RICHARD CONN ; VERSION: 1.0 ; DATE: 3 July 81 ; PREVIOUS VERSIONS: -None- ; VERS EQU 10 ; VERSION NUMBER CPM$BASE EQU 0 ; BASE ADDRESS OF CP/M SYSTEM ; ; ; BDOS Locator simply functions to print out the base page address ; of the user's CP/M BDOS and the base page address of the user's CP/M CCP. ; ; BDOS EQU CPM$BASE+5 ; ADDRESS OF BDOS ENTRY CR EQU 0DH LF EQU 0AH ; ORG CPM$BASE+100H ; CALL PRINT DB 'The Base Page Address of this system''s BDOS is ',0 LDA BDOS+2 ; GET PAGE ADDRESS CALL HEX$OUT ; PRINT AS 2 HEX CHARS ; CALL PRINT DB CR,LF,'The Base Page Address of this system''s CCP is ',0 LDA BDOS+2 ; GET BDOS ADDRESS SUI 8 ; 800H LESS CALL HEX$OUT ; PRINT AS 2 HEX CHARS ; CALL PRINT DB CR,LF,0 RET ; ; PRINT VALUE IN REG A AS 2 HEX CHARS HEX$OUT: PUSH PSW ; SAVE VALUE RLC ; SHIFT NYBBLES RLC RLC RLC CALL HEX1 ; PRINT HIGH NYBBLE POP PSW ; GET VALUE AND PRINT LOW NYBBLE ; ; PRINT LOW NYBBLE OF REG A AS 1 HEX CHAR HEX1: ANI 0FH ; MASK OUT HIGH CPI 10 ; 0-9? JNC HEX1A ADI '0' ; CONVERT 0-9 TO '0'-'9' JMP COUT HEX1A: ADI 'A'-10 ; CONVERT 10-15 TO 'A'-'F' JMP COUT ; ; PRINT STRING ENDING IN 0 PTED TO BY RET ADR PRINT: XTHL ; SAVE HL AND GET RET ADR PRINT1: MOV A,M ; GET BYTE INX H ; PT TO NEXT ORA A ; DONE? JZ PRINT2 CALL COUT ; PRINT IT JMP PRINT1 PRINT2: XTHL ; RESTORE RET ADR AND HL RET ; ; PRINT CHAR IN REG A ON CONSOLE COUT: PUSH H ; SAVE REGS PUSH D PUSH B MOV E,A MVI C,2 ; CONSOLE OUTPUT CALL BDOS POP B ; RESTORE REGS POP D POP H RET ; END