.TITLE 'Print time and date on console' ; base = 50H ; base port address clkcmd = base+10 ; clock command clkdta = base+11 ; clock data bdos = 5 ; CP/M read = 10H write = 20H hold = 40H ; hold bit ; ; Sign on message ; start: lxi d,signon call pmsg ; say HI ; ; edit and print time and date ; clkprt: lxi h,atable call print2 ; first 2 digits mvi a,':' call pchar call print2 mvi a,':' call pchar call print2 mvi a,' ' push psw call pchar pop psw call pchar ; print 2 spaces call print2 mvi a,'/' call pchar call print2 mvi a,'/' call pchar call print2 ; print last 2 digits ret ; ; print two digits from clock ; print2: mov a,m call rddgt adi 30H ; ascii convers call pchar inx h mov a,m call rddgt adi 30H call pchar inx h ret ; ; read clock and mask bits ; rddgt: adi read ; set read bit out clkcmd cpi read+5 ; hours 10 digit in clkdta ; get digit rnz ; ..not so done sui 08H ret ; ; CP/M interface ; pchar: push d mov e,a mvi c,2 push h call bdos pop h pop d ret ; pmsg: push h mvi c,9 call bdos pop h ret ; ; message texts ; signon: .ascii 'The time and date are: $' ; ; digit address table ; atable: .byte 5,4,3,2,1,0,8,7,0AH,9,0CH,0BH ; .end start