title 'Character I/O Module for the Modular CP/M 3 BIOS' page 255 .z80 public ?cinit,?ci,?co,?cist,?cost public @ctbl extrn ff.init,ff.ist,ff.in,ff.ost,ff.out extrn as0init,as0ista,as0inp,as0osta,as0out extrn as1init,as1ista,as1inp,as1osta,as1out include config.inc include z180reg.inc include modebaud.inc ; define mode bits and baud equates max$devices equ 3 cseg ;-------------------------------------------------------------- ; Init character device ; c: device ?cinit: ; init devices ld b,c call vector$io dw ff.init dw as0init dw as1init dw rret ;-------------------------------------------------------------- ; Character input ; b: device ; return: ; a: input char ?ci: ; character input call vector$io dw ff.in dw as0inp dw as1inp dw null$input ;-------------------------------------------------------------- ; Input status ; b: device ; return: ; a: 0ffh if char available, else 0 ?cist: ; character input status call vector$io dw ff.ist dw as0ista dw as1ista dw null$status ;-------------------------------------------------------------- ; Character output ; b: device ; c: output char ; return: ; a: output char ?co: ; character output call vector$io dw ff.out dw as0out dw as1out dw rret ;-------------------------------------------------------------- ; Output status ; b: device ; return: ; a: 0ffh if device ready for next output char, else 0 ?cost: ; character output status call vector$io dw ff.ost dw as0osta dw as1osta dw ret$true ;-------------------------------------------------------------- vector$io: ld a,max$devices ld e,b vector: pop hl ld d,0 cp e jr nc,exist ld e,a ; use null device if a >= max$devices exist: add hl,de add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a jp (hl) null$input: ld a,1Ah rret: ret ret$true: or 0FFh ret null$status: xor a ret ;-------------------------------------------------------------- @ctbl: db 'AVRCON' ; device 0 db mb$in$out db baud$none db 'ASCI0 ' ; device 1 db mb$in$out+mb$serial+mb$soft$baud ser0$baud: db baud$19200 db 'ASCI1 ' ; device 2 db mb$in$out+mb$serial+mb$soft$baud ser1$baud: db baud$19200 db 0 ; table terminator ;-------------------------------------------------------------- end