home *** CD-ROM | disk | FTP | other *** search
- ; Initialization program for Televideo 801/802
- ; written by Les Freed
- ; Version 1.0 3/17/82
- ;
- ;07/25/82 Corrected error which had SIO initialization code going to data port
- ; rather than status/control port and inserted code using Z80 block
- ; output instruction from a program I had written previously. Actually
- ; the Televideo seems to initialize the SIO somewhere in the system
- ; software and for the most part only needs the CTC initialized to set
- ; the baud rate, which is why this program worked before. (Bob Clyne)
- ;
- bdos equ 5 ;CP/M entry point
- ;
- udta equ 20h ;usart data port
- usta equ 22h ;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,msg1 ;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 baud ;store divisor
- ;
- show: lxi d,clear ; clear screen
- call print
- lxi d,msg1 ;print 'baud rate:'
- call print
- lda baud ;get a's divisor
- call prbaud ;print a's baud rate
- lxi d,crmsg ;ask user if okay
- call print
- call input
- cpi cr
- jnz start ;if not CR, then start over
- ;
-
- ; SIO-INIT.ASM
- ; Version 02
- ; Originally written by Bob Clyne
- ; November 22, 1981
- ;
- ;This code initializes a Z80-SIO or Z80-DART IC for asynchronous communication.
- ;It uses Z80 instructions and therefore will only run on a Z80 CPU. This
- ;program can be run prior to using the I/O port or this code may be transferred
- ;to the initialization section of another program such as one of the MODEM
- ;programs. The status/control port number will need to be set for each
- ;application.
- ;
- ;01/21/82 Changed introduction and added equates for XEROX 820 Channel A.
- ;
- FALSE EQU 0
- TRUE EQU NOT FALSE
- ;
- ;Only one of the following equates should be set true.
- ;
- XEROX EQU FALSE
- ALTOS EQU FALSE
- TELEVID EQU TRUE ;Added 07/25/82
- ;
- IF ALTOS ;ALTOS 2nd printer port
- DPORT EQU 28H ;DATA PORT (Included for information only, not used.)
- CTRLPT EQU 29H ;Status/control port.
- ENDIF
- ;
- IF XEROX ;XEROX 820 Channel A serial port.
- CTRLPT EQU 06H ;Status/control port.
- ENDIF
- ;
- IF TELEVID
- CTRLPT EQU usta ;Use port equate from begining of pgm. (RAC 07/25/82)
- ENDIF
- ;
- ; MACLIB Z80 ;To assemble using ASM comment out this line and make
- ;the change noted below.
- ;
- ; ORG 100H
- ;
-
- SIO: MVI B,07H ;NUMBER OF BYTES NEEDED TO INITIALIZE THE SERIAL PORT
- MVI C,CTRLPT;PORT TO SEND INITIALIZATION BYTES TO
- LXI H,INITBL;ADDRESS OF TABLE OF BYTES TO SEND
- ; OUTIR ;OUTPUT THE BLOCK
- DB 0EDH,0B3H;To assemble on ASM, comment out the above instruction
- ;and remove the ';' from in front of 'DB'
- ; RET ;RETURN TO CPM
- JMP CTC ;Jump to old code to set the CTC (RAC 07/25/82)
- ;
- INITBL: DB 18H ;CHANNEL RESET
- DB 04H ;WRITE REGISTER 4
- DB 44H ;SET X16 CLOCK, 1 STOP BIT, NO PARITY
- DB 05H ;WRITE REGISTER 5
- DB 0EAH ;SET DTR & RTS ACTIVE & ENABLE 8 BIT TRANSMIT
- DB 03H ;WRITE REGISTER 3
- DB 0E1H ;ENABLE 8 BIT RECEIVE & AUTO ENABLES
- ; DB 0C1H ;Enable 8 bit receive without AUTO ENABLES.
- ;Comment out whichever of the above 2 lines you don't
- ;... want.
-
- ; END
- ;
- CTC: mvi a,47h ; counter mode follows (Lable added RAC)
- out 08h ; send
- lda baud ; get baud rate divisor
- out 08h ; send to port
- ;
- 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 37h ;& not >'6'
- 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 ;find divisor, convert & print baud rate
- jnz pr1
- lxi d,m19
- mvi a,2
- jmp pr8
- ;
- pr1: cpi 1
- jnz pr2
- lxi d,m96
- mvi a,4
- jmp pr8
- ;
- pr2: cpi 2
- jnz pr3
- lxi d,m48
- mvi a,8
- jmp pr8
- ;
- pr3: cpi 3
- jnz pr4
- lxi d,m24
- mvi a,10h
- jmp pr8
- ;
- pr4: cpi 4
- jnz pr5
- lxi d,m12
- mvi a,20h
- jmp pr8
- ;
- pr5: cpi 5
- jnz pr6
- lxi d,m6
- mvi a,40h
- jmp pr8
- ;
- pr6: cpi 6
- jnz pr8
- lxi d,m3
- mvi a,80h
- ;
- pr8: sta baud
- jmp print
- ;
-
- ;
- signon: db 1ah,'INIT v 1.0 3-18-82',cr,lf,lf,lf
- db 'Select Baud Rate: ',cr,lf,lf
- ;
- db 'Speed',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 lf,lf,lf,'$'
- ;
- m19: db ' 19200$'
- m96: db ' 9600$'
- m48: db ' 4800$'
- m24: db ' 2400$'
- m12: db ' 1200$'
- m6: db ' 600$'
- m3: db ' 300$'
- ;
- badmsg: db cr,lf,7,'Re-enter',cr
- db 11,12,12,12,12,12,12
- db 12,12,12,12,12,'$' ;move cursor back to entry
- ;
- clear: db 1ah,'$'
- ;
- crmsg: db cr,lf,lf,lf,lf,'Press RETURN to set baud rate :','$'
- ;
- msg: db cr,lf,'Port initialized',0dh,0ah,'$'
- msg1: db cr,lf,'Baud rate :$'
- ;
- baud ds 1
- ;
- end