1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
page 255
.z80
; CP/M 3 compatible character i/o
public ?cinit,?ci,?co,?cist,?cost
public @ctbl
extrn ff.init,ff.i.st,ff.in,ff.o.st,ff.out
extrn ser.init,ser.ist,ser.in,ser.ost,ser.out
include config.inc
include z180reg.inc
include modebaud.inc ; define mode bits and baud eqautes
max$device equ 2
cseg
; c = device
?cinit: ; init devices
ld b,c
call vector$io
dw ff.init
dw ser.init
dw rret
; b = device, c = output char, a = input char
?ci: ; character input
call vector$io
dw ff.in
dw ser.in
dw null$input
?cist: ; character input status
call vector$io
dw ff.i.st
dw ser.ist
dw null$status
?co: ; character output
call vector$io
dw ff.out
dw ser.out
dw rret
?cost: ; character output status
call vector$io
dw ff.o.st
dw ser.ost
dw ret$true
vector$io:
ld a,max$device
ld e,b
vector:
pop hl
ld d,0
cp e
jr nc,exist
ld e,a ; use null device if a >= max$device
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 'HOST ' ; device 0
db mb$output
db baud$none
db 'ASCI1 ' ; device 0
db mb$in$out+mb$serial+mb$soft$baud
ser1$baud:
db baud$19200
db 0 ; table terminator
end
|