home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
GENASM
/
ZSIOINIT.ASM
< prev
Wrap
Assembly Source File
|
2000-06-30
|
5KB
|
220 lines
; 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