; Initialization program for North Star HSIO-4 ; written by Les Freed ; Version 1.0 9/15/81 ; Version 1.1 10/8/81 - added error checking BASE EQU 10H ;base address of HSIO board BDOS EQU 5 ;CP/M entry point PORTA EQU BASE ;location of port a PORTB EQU BASE+4 ; " " b PORTC EQU BASE+8 ; " " c PORTD EQU BASE+12 ; " " d BAUD EQU 0 ;baud rate port MADK EQU 1 ;interrupt mask port UDAT EQU 2 ;usart data port USTA EQU 3 ;usart status port CR EQU 0DH ;carriage return LF EQU 0AH ;line feed ORG 100H start: lxi d,signon ;print table call print lxi d,msga ;print message call print i1: call input ;get input call check ;check range jc i1 ;try again if carry set sui 30h ;remove ASCii bias sta bauda ;store divisor lxi d,msgb ;just like A call print i2: call input call check jc i2 sui 30h sta baudb lxi d,msgc call print i3: call input call check jc i3 sui 30h sta baudc lxi d,msgd call print i4: call input call check jc i4 sui 30h sta baudd show: lxi d,header ;clear screen & print header call print lxi d,msga ;print 'port a :' call print lda bauda ;get a's divisor call prbaud ;print a's baud rate lxi d,msgb ;repeat for other ports call print lda baudb call prbaud lxi d,msgc call print lda baudc call prbaud lxi d,msgd call print lda baudd call prbaud lxi d,crmsg ;ask user if okay call print call input cpi cr jnz start ;if not CR, then start over INIT: LDA BAUDA ;set baud rate on each port OUT PORTA+BAUD LDA BAUDB OUT PORTB+BAUD LDA BAUDC OUT PORTC+BAUD LDA BAUDD OUT PORTD+BAUD MVI A,3 ;now set each port for word length, etc. CALL USTAT CALL USTAT MVI A,40H CALL USTAT MVI A,0CEH CALL USTAT MVI A,27H CALL USTAT CALL INJUNK ;clear junk from input ports LXI D,MSG ;tell user we're done call print ret ;& return to CP/M print: mvi c,9 ;CP/M print string call call bdos ret input: mvi c,1 ;CP/M get char. call call bdos ret check: cpi 30h ;at least '0' jc notok cpi 38h ;& not >'7' jnc notok stc ;reset carry cmc ret notok: lxi d,badmsg ;print message, move back up screen call print stc ! ret ;return w/ carry set prbaud: cpi 0 ;print baud rate from divisor jnz pr1 lxi d,m19 pr1: cpi 1 jnz pr2 lxi d,m96 pr2: cpi 2 jnz pr3 lxi d,m48 pr3: cpi 3 jnz pr4 lxi d,m24 pr4: cpi 4 jnz pr5 lxi d,m12 pr5: cpi 5 jnz pr6 lxi d,m6 pr6: cpi 6 jnz pr7 lxi d,m3 pr7: cpi 7 jnz pr8 lxi d,m1 pr8: jmp print injunk: in portA+UDAT IN PORTB+UDAT IN PORTC+UDAT IN PORTD+UDAT RET USTAT: OUT PORTA+USTA OUT PORTB+USTA OUT PORTC+USTA OUT PORTD+USTA RET signon: db 1ah,'INIT v 1.1 10-8-81',cr,lf,lf,lf db 'HSIO-4 Baud Rate Divisors : ',cr,lf,lf db 'Speed Divisor',cr,lf db '19200 0',cr,lf db ' 9600 1',cr,lf db ' 4800 2',cr,lf db ' 2400 3',cr,lf db ' 1200 4',cr,lf db ' 600 5',cr,lf db ' 300 6',cr,lf db ' 110 7',cr,lf db lf,lf,lf,'$' m19: db ' 19200$' m96: db ' 9600$' m48: db ' 4800$' m24: db ' 2400$' m12: db ' 1200$' m6: db ' 600$' m3: db ' 300$' m1: db ' 110$' badmsg: db cr,lf,7,'Re-enter',cr db 11,12,12,12,12,12,12,12,12,'$' ;move cursor back to entry header: db 1ah,'Current settings :',cr,lf,lf,lf,'$' crmsg: db cr,lf,lf,lf,lf,'Press RETURN to set baud rates :','$' MSG: db cr,lf,'HSIO-4 Initialized',0dh,0ah,'$' msga: db cr,lf,'Port a :$' msgb: db cr,lf,'Port b :$' msgc: db cr,lf,'Port c :$' msgd: db cr,lf,'Port d :$' BAUDA ds 1 BAUDB ds 1 BAUDC ds 1 BAUDD ds 1