; 8051 Printout Routines ; J.G.Harston ; ======================= ; PRHEX2: Print DPTR in hex, corrupts A ; PRHEX1: Print A in hex, corrupts A ; ------------------------------------- PRHEX2: MOV A,DHI CALL PRHEX1 MOV A,DLO PRHEX1: PUSH AREG SWAP A ; Bottom nybble=b7-b4 CALL CONVHEX ; Convert to character CALL OSWRCH ; Print it POP AREG ; Get byte back CALL CONVHEX ; Convert to character JMP OSWRCH ; Print it CONVHEX: ANL A,#$0F ; From the manual ADD A,#$90 DA A ADDC A,#$40 DA A RET ; PRINTOUT: Print inline zero-terminated string ; Returns: DPTR=preserved ; A=$00 ; ---------------------------------------------- PRINTOUT: PUSH DLO PUSH DHI ; SP=>DLO, DHI, &inline string MOV A,R0 PUSH AREG ; SP=>R0, DLO, DHI, &inline string MOV R0,SP ; R0=SP DEC R0 DEC R0 DEC R0 ; R0=>&inlinestring MOV DHI,@R0 DEC R0 MOV DLO,@R0 ; DPTR=&inlinestring CALL PRINTSTR ; Print the string MOV @R0,DLO INC R0 MOV @R0,DHI ; Overwrite return address POP AREG MOV R0,AREG ; Restore R0 POP DHI POP DLO ; Restore DPTR CLR A ; Return A=$00 RET ; PRINTOUT with DPTR=corrupted POP DHI POP DLO CALL PRINTSTR PUSH DLO PUSH DHI PRSTREND: RET ; PRINTSTR: Print zero-terminated string at DPTR ; Returns: DPTR=>after zero byte ; A=$00 ; ---------------------------------------------- PRHELP: MOV DPTR,#BANNER ; Print startup banner as help message ; PRINTSTR: CLR A MOVC A,@A+DPTR ; Fetch byte from code memory ; MOVX A,DPTR ; Fetch byte from data memory INC DPTR ; Step past byte JZ PRSTREND ; byte=$00, exit CALL OSWRCH SJMP PRINTSTR