Mercurial > hg > Members > kono > os9 > sbc09
comparison os9/level1/pty.asm @ 31:bd2b07db8917 cocoos9lv2v3
CoCoOS9 version
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Jul 2018 15:16:13 +0900 |
parents | |
children | 7c5379eb406e |
comparison
equal
deleted
inserted
replaced
30:7b1b25ff010a | 31:bd2b07db8917 |
---|---|
1 ******************************************* | |
2 * PTY | |
3 * Device Driver for emulated terminal | |
4 * Emulates the 6850 UART seen in usim | |
5 * Protocol: | |
6 * V.port is the control port. | |
7 * V.port+1 is the data port. It is bidirectional. | |
8 * bit 1: 1=data ready to read/0=no data | |
9 * bit 2: 1=ready for output | |
10 * | |
11 | |
12 nam PTY | |
13 ttl Pseudo Terminal | |
14 | |
15 ifp1 | |
16 use os9defs | |
17 use scfdefs | |
18 endc | |
19 | |
20 *********************** | |
21 * Edition History | |
22 * | |
23 * # date Comments | |
24 * - -------- ------------------------------- | |
25 * 1 16.11.01 Driver first written. SMR | |
26 | |
27 Revision equ 1 | |
28 | |
29 org V.SCF | |
30 PST equ . | |
31 | |
32 mod PEND,PNAM,Drivr+Objct,Reent+Revision,PENT,PST | |
33 fcb READ.+WRITE. | |
34 PNAM fcs /PTY/ | |
35 | |
36 PENT lbra INIT | |
37 lbra READ | |
38 lbra WRITE | |
39 lbra GETSTA | |
40 lbra PUTSTA | |
41 lbra TERM | |
42 | |
43 ********************** | |
44 * INIT | |
45 * Entry: U = Static storage | |
46 * Setup the PIA | |
47 * | |
48 INIT clrb | |
49 rts | |
50 | |
51 ********************** | |
52 * READ | |
53 * Entry: U = Static Storage | |
54 * Y = Path Descriptor | |
55 * Exit: A = Character read | |
56 * | |
57 * Read a byte from Port B | |
58 * | |
59 READ ldx V.PORT,u load port address | |
60 readlp ldb ,x | |
61 bitb #$01 | |
62 bne readbyte | |
63 pshs x sleep for a bit if not | |
64 ldx #1 | |
65 os9 f$sleep | |
66 puls x | |
67 bra readlp | |
68 readbyte lda 1,x read byte | |
69 clrb | |
70 rts | |
71 ********************** | |
72 * WRITE | |
73 * Entry: U = Static storage | |
74 * Y = Path Descriptor | |
75 * A = Char to write | |
76 * | |
77 * Write a byte to Port B | |
78 * | |
79 WRITE ldx V.PORT,u load port address | |
80 write1 ldb ,x | |
81 bitb #$02 | |
82 bne wrt | |
83 pshs x | |
84 ldx #1 | |
85 os9 f$sleep | |
86 puls x | |
87 bra write1 | |
88 wrt sta 1,x write byte | |
89 ok clrb | |
90 rts | |
91 | |
92 ********************** | |
93 * GETSTA | |
94 * U = Static Storage | |
95 * Y = Path Descriptor | |
96 * | |
97 GETSTA ldx PD.Rgs,y X=pointer to registers | |
98 lda R$B,x A=contents of B reg. | |
99 cmpa #SS.Ready check for ready code | |
100 bne gsta1 if not, check next | |
101 ldx V.Port,u use the PIA to determine | |
102 ldb ,x if data is available | |
103 bitb #$01 | |
104 bne ok | |
105 ldb #E$NotRdy | |
106 coma sets the carry flag | |
107 rts | |
108 gsta1 cmpa #SS.EOF check for eof code | |
109 beq ok which always returns ok | |
110 comb otherwise return | |
111 ldb #E$UnkSVC unknown code error | |
112 rts | |
113 | |
114 ********************** | |
115 * PUTSTA | |
116 * Always return error | |
117 * | |
118 PUTSTA ldx PD.Rgs,y X=register stack | |
119 ldb R$B,x B=contents of reg B | |
120 comb otherwise return error. | |
121 ldb #E$UnkSVC | |
122 rts | |
123 | |
124 ********************** | |
125 * TERM | |
126 * Terminate Driver | |
127 * | |
128 TERM clrb | |
129 rts | |
130 | |
131 emod | |
132 PEND equ * | |
133 |