1.2	Character I/O Handler for Z80 Chip--based System

	The  CHARIO.ASM module  performs all character device
initialization, input, output, and status polling. CHARIO contains
the character device characteristics table.
	1		title 'Character I/O handler for z80 chip baBed system'
	2
	3	                ; Character I/O for the Modular CP/M 3 BIOS
	4
	S		; limitations:
	6
	7		.                haud rates 19200;7200,3600,1800 and 134
	8		                        are approximations.
	9
	10		;                9600 is the maximum baud rate that is likely
	11		                         to work,
	12
	13		.                haud rates SO; 75; and 110 are not supported
	14
	15
	16		public  ?cinit,?ci,?co,?cist,?cost
	17		public  @ctbl
	18
	19		maclib Z80      ; define Z80 op codes
	20		maclib ports    ; define port addresses
	21		maclib modebaud ; define mode bits and baud equates
	22
	23	0006 =         max$devices     equ 6
	24
	2S		cseg
	26
	27	                ?cinit:
	28	0000 79FE06CA42	mov a,c ! cpi max$devlces ! jz cent$init ; init 
parallel printer
	29	0006 DO	rnc                               ; invalid device
	30	0007 692600	mov l,c ! mvi h,0                ; make 16 bits from 
device number
	31	OOOA E5	push h                          ; save device in stack
	32	000B 292929	dad h ! dad h ! dad h           ; *8
	33	000F 11E900196E	lxi d,@ctbl+7 ! dad d ! mov 1;m ; get baud rate
	34	0013 7DFEO7	mov a,l ! cpi baud$600          ; see if baud > 300
	35	0016 3E44D21D00	mvi a,44h ! jnc hi$speed        ; if >  600, use 
*16 mode
	36	001B 3FC4	mvi a,0C4h                      ;    else, use *64 
mode
	37	               hi$speed:
	38	0010 323501	sta sio$reg$4
	39	0020 2600111B01	mvi h,0 ! lxi d,speed$table ! dad d     ; point 
to counter entry
	40	0026 7E322F01	mov a,m ! sta speed             ; get and save ctc 
count
	41	002A El	pop h                           ; recover
	42	0028 11DC0019	lxi d,data$ports ! dad d        ; point at SIO 
port address
	43	002F 7E3C323001	mov a,m ! inr a ! sta sio$port  ; get and save 
port
	44	0034 IIFAFF19	lxi d,baud$ports-data$ports ! dad d     ; offset 
to baud rate port
	45	0038 7E322C01	mov a,B ! sta ctc$port           ; get and save
	46	003C 212801	lxi h,serlal$init$tbl
	47	003F C34500	jmp stream$out
	48
	49	               cent$init:
	50	0042 213901	lxi h,pio$init$tbl
	51
	52	                stream$out:
	53	004S 7FB7C8	mov a,m ! ora a ! rz
	54	0048 47234F23	mov b,a ! inx h ! mov c;m ! inx h
	55		outir
	56	004C+EDB3	DB      OFDH,OB3H
	57	004E C34500	jmp stream$out
	58
	59
	60	                ?ci:	        ; character input
	61
	62	0051 78FE06D263	mov a,b ! cpi 6 ! jnc null$input ; can't read 
from centronics
	63	               cil:
	64	0057 C06600CA57	call ?cist ! jz cii              ; wait for 
character ready
	65	0050 00	dcr c ! inp a                    ; get data
	66	OOSE+ED78	Ds      OFDH,A*8+40H
	67	0060 E67F	ani 7Fh                          ; mask parity
	68	0062 C9	ret

Listing	I/O Handler for z80 Chip--based System
