Blame | Last modification | View Log | Download | RSS feed
;***************************************************************;; TEROT - Output a character to the system console; update PHEAD position.;;***************************************************************;STEROT: MOV R5,#' ' ;OUTPUT A SPACE;TEROT: PUSH ACC ;SAVE THE ACCUMULATORPUSH DPH ;SAVE THE DPTRPUSH DPLJNB CNT_S,$+7 ;WAIT FOR A CONTROL QACALL BCK ;GET SERIAL STATUSSJMP $-5MOV A,R5 ;PUT OUTPUT BYTE IN AJNB BO,$+8 ;CHECK FOR MONITORLCALL 2040H ;DO THE MONITORAJMP TEROT1 ;CLEAN UPJNB COUB,$+8 ;SEE IF USER WANTS OUTPUTLCALL 4030HAJMP TEROT1JNB UPB,T_1 ;NO AT IF NO XBITJNB LPB,T_1 ;AT PRINTLCALL 403CH ;CALL AT LOCATIONAJMP TEROT1 ;FINISH OFF OUTPUT;T_1: JNB COB,TXX ;SEE IF LIST SETMOV DPTR,#SPV ;LOAD BAUD RATEACALL LD_TCLR LP ;OUTPUT START BITACALL TIMER_LOAD ;LOAD AND START THE TIMERMOV A,R5 ;GET THE OUTPUT BYTESETB C ;SET CARRY FOR LAST OUTPUTMOV R5,#9 ;LOAD TIMER COUNTDOWN;LTOUT1: RRC A ;ROTATE AJNB TF1,$ ;WAIT TILL TIMER READYMOV LP,C ;OUTPUT THE BITACALL TIMER_LOAD ;DO THE NEXT BITDJNZ R5,LTOUT1 ;LOOP UNTIL DONEJNB TF1,$ ;FIRST STOP BITACALL TIMER_LOADJNB TF1,$ ;SECOND STOP BITMOV R5,A ;RESTORE R5SJMP TEROT1 ;BACK TO TEROT;newpageTXX: JNB TI,$ ;WAIT FOR TRANSMIT READYCLR TIMOV SBUF,R5 ;SEND OUT THE CHARACTER;TEROT1: CJNE R5,#CR,$+6 ;SEE IF A CRMOV PHEAD,#00H ;IF A CR, RESET PHEAD AND;CJNE R5,#LF,NLC ;SEE IF A LFMOV A,NULLCT ;GET THE NULL COUNTJZ NLC ;NO NULLS IF ZERO;TEROT2: MOV R5,#NULL ;PUT THE NULL IN THE OUTPUT REGISTERACALL TEROT ;OUTPUT THE NULLDEC A ;DECREMENT NULL COUNTJNZ TEROT2 ;LOOP UNTIL DONE;NLC: CJNE R5,#BS,$+5 ;DEC PHEAD IF A BACKSPACEDEC PHEADCJNE R5,#20H,$+3 ;IS IT A PRINTABLE CHARACTER?JC $+4 ;DON'T INCREMENT PHEAD IF NOT PRINTABLEINC PHEAD ;BUMP PRINT HEADPOP DPL ;RESTORE DPTRPOP DPHPOP ACC ;RESTORE ACCRET ;EXIT;