annotate CoCoOS9/level2v3/MODULES/pipeman.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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 ********************************************************************
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 * PipeMan - Pipe file manager
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 *
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 * $Id: pipeman.asm,v 1.1.1.1 2001/02/21 23:30:55 boisy Exp $
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 *
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 * ------------------------------------------------------------------
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 * 4 Original OS-9 L2 Tandy distribution
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 * Added comments from Curtis Boyle's code BGP 98/10/22
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 nam PipeMan
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 ttl Pipe file manager
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 ifp1
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 use defsfile
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 use pipedefs.l2v3
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 endc
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 rev set $01
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 edition set 4
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 mod eom,Name,FlMgr+Objct,ReEnt+rev,Start,0
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 Name fcs /PipeMan/
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 fcb edition
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 Start lbra Create Create, same as open
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 lbra Open Open
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 lbra UnkSvc MakDir
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 lbra UnkSvc ChgDir
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 lbra UnkSvc Delete
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 lbra L0040 Seek
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 lbra PRead PRead
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 lbra PWrite PWrite
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 lbra L00AB PRdLn
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 lbra L0105 PWrLn
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 lbra L0040 GetStat
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 lbra L0040 SetStat
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 lbra Close Return to system
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 UnkSvc comb Exit with Unknown Service error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 ldb #E$UnkSvc
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 L0040 clrb No error & return
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 * Open or create a Pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 Create
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 Open ldu PD.RGS,y get Caller's register stack ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 ldx R$X,u get pointer to pathname
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 pshs y preserve descriptor pointer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 os9 F$PrsNam is it legal?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 bcs L007B no, exit with error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 ldx <D.Proc get task #
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ldb P$Task,x
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 leax -1,y point to last character of pathname
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 os9 F$LDABX get it
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 tsta high bit terminated?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 bmi L0060 yes, go on
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 leax ,y point just past it
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 os9 F$PrsNam parse it again
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 bcc L007B can't accept more data, return error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 L0060 sty R$X,u save updated path pointer to caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 puls y restore path dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 ldd #256 grab a page of memory for my buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 os9 F$SRqMem
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 bcs L007A can't get memory, return error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 stu PD.BUF,y save pointer to buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 stu <PD.NxtI,y save read pointer?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 stu <PD.NxtO,y save write pointer?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 leau d,u point to end of buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 stu <PD.End,y save the end pointer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 L007A rts return
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 L007B comb Exit with Bad Pathname error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 ldb #E$BPNam
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 puls y,pc
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 * Close
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 Close lda PD.CNT,y any open images left?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 bne L008E yes, go on
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 ldu PD.BUF,y No, get buffer pointer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 ldd #256 return it's memory to system
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 os9 F$SRtMem
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 bra L00A9
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 * Still stuff open to pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 * Check Read part of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 L008E cmpa PD.RCT,y Same as # images open to Read from pipe?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 bne L0096 No, go check Write images
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 leax PD.RPID,y Point to Read variables
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 bra L009C Send signal to reading process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 * Check Write part of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 L0096 cmpa PD.WCT,y Same as # images open to Write to pipe?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 bne L00A9 No, exit without error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 leax PD.WPID,y Point to Write variables
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 * Send signal
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 L009C lda ,x Get Process # to send signal to
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 beq L00A9 None, exit without error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 ldb 2,x get the signal code to send
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 beq L00A9 None, exit without error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 clr 2,x Clear out signal code
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 os9 F$Send Send to process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 L00A9 clrb No error & exit
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 * ReadLn entry point
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 * Entry: Y=Path dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 L00AB ldb #$0D Flag for ReadLn
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 stb PD.REOR,y Save as Not raw flag in Read area
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 bra L00B3 Go read
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 * Read entry point
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 PRead clr PD.REOR,y Raw mode on
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 L00B3 leax PD.RPID,y point to Pipe Read variables
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 lbsr L0160 Go wait for pipe to be ready for us
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 bcs L0100 Error, shut off our side & signal other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ldd R$Y,u get # bytes requested to read
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 beq L0100 None, shut off our side & signal other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 ldx R$X,u get pointer to callers destination
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 addd R$X,u
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 pshs b,a
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 pshs x preserve start pointer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 bra L00D5
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 * Read Loop for both ReadLn (stops on CR) or Read (stops when size is done)
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 L00C8 pshs x Preserve buffer start ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 leax PD.RPID,y Point to Read vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 lbsr L018B Go wait for possible data
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 bcc L00D5 May be some, continue
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 puls x Restore buffer start ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 bra L00F1 None expected, exit with what we have
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 L00D5 ldx <D.Proc Get current process ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 ldb P$Task,x Get task #
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 puls x Get Buffer start ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 * Read from pipe buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 L00DB lbsr L01F2
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 bcs L00C8
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 os9 F$STABX Got byte, save it to caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 leax 1,x Bump buffer ptr up
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 tst PD.REOR,y Check Read/ReadLn flag
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 beq L00ED Raw, skip ahead
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 cmpa PD.REOR,y Was the byte received a CR?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 beq L00F1 Yes, done reading
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 L00ED cmpx ,s Hit end of buffer read requested yet?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 bcs L00DB No, keep reading
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 L00F1 tfr x,d Move ptr to D
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 subd ,s++ Calculate actual size read
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 addd R$Y,u ??? Add to size previously read???
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 std R$Y,u Save total # bytes read to caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 bne L00FF If some read, skip ahead
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 ldb #E$EOF Otherwise, exit with EOF error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 bra L0100
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 L00FF clrb No error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 L0100 leax PD.RPID,y Point to pipe Read vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 lbra L01BD
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 L0105 ldb #$0D Flag for WritLn (and terminator for lines)
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 stb <PD.WEOR,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 bra L010F Go do the write
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 PWrite clr <PD.WEOR,y Flag for Raw Write
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 L010F leax PD.WPID,y Point to Write variables
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 lbsr L0160 Go wait for pipe to be ready for us
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 bcs L015C Error, shut off our side & signal other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 ldd R$Y,u Get requested size to Write
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 beq L015C None, shut off our side & signal other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 ldx R$X,u Get ptr to data to write
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 addd R$X,u Calculate end of data ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 pshs b,a
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 pshs x Preserve start ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 bra L0131 Start writing
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 L0124 pshs x Preserve current buffer ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 leax PD.WPID,y Point to Write vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 lbsr L018B Go wait for data to be ready
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 bcc L0131 Ready, go try writing again
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 puls x No more data, restore buffer ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 bra L0150 Go write out as much as we got
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 L0131 ldx <D.Proc Get process dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 ldb P$Task,x Get task #
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 puls x Get start ptr back
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 L0137 os9 F$LDABX Get byte from caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 lbsr L01CC
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 bcs L0124
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 leax 1,x
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 tst <PD.WEOR,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 beq L014B
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 cmpa <PD.WEOR,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 beq L0150
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 L014B cmpx ,s Hit end of buffer?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 bcs L0137 No, keep writing
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 clrb Yes, no error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 L0150 pshs b,cc Preserve error status
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 tfr x,d Move buffer ptr to D
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 subd 2,s Calculate size actually written
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 addd R$Y,u Add to size previously written
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 std R$Y,u Save for caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 puls x,b,cc Restore error status
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 L015C leax PD.WPID,y Point to Write vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 bra L01BD Shut off Write part, send signal to Read part
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 * Make current process the process to Read or Write from Pipe, or wait in line
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 * until pipe is ready to for our process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 * Entry: Y=Path dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 * X=Ptr to either Pipe Read or Pipe Write variables
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 L0160 lda ,x Get process # that is reading or writing to pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 beq L0185 If none, make the current process the one
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 cmpa PD.CPR,y Same as current process using this path?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 beq L0189 Yes, no error & exit
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 * A read or write request from the pipe was made from a process that is not
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 * listed in the PD.??? pipe vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 inc 1,x New process using pipe, update # processes using
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 ldb 1,x Get new # of process reading or writing
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 cmpb PD.CNT,y Same as total # of processes using pipe?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 bne L0173 No, skip ahead
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 lbsr L009C Yes, send signal from 2,x to process using pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 * New process is put in line to read/write to/from pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 L0173 os9 F$IOQu Stick waiting process (A) into I/O Queue
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 dec 1,x Dec # images in pipe down again
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 pshs x Preserve ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 ldx <D.Proc Get current process dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 ldb <P$Signal,x Get last signal code from current process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 puls x Get ptr back
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 beq L0160 If it didn't receive the signal, try again
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 coma Set carry & exit
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 L0185 ldb PD.CPR,y Get Current process #
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 stb ,x Save as process # that is reading/writing to pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 L0189 clrb No error & exit
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 L018B ldb 1,x Get # images [reading or writing] from pipe?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 incb Base 1
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 cmpb PD.CNT,y Same as # of open images?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 beq L01B9 Yes, Exit with Write Error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 stb 1,x Save updated # images
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 ldb #$01 Wakeup signal
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 stb 2,x Save as signal to send to process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 clr PD.CPR,y Clear out current process # using pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 pshs x Preserve read/write offset ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 tfr x,d Move to D
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 eorb #$04 Flip between read/write vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 tfr d,x Move to X
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 lbsr L009C Go send signal to process on other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 ldx #$0000 Shut off process until signal received
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 os9 F$Sleep
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 ldx <D.Proc Get current process
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 ldb <P$Signal,x Get last signal code received
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 puls x Restore read/write offset ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 dec 1,x Dec # open images
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 tstb Was there a signal receieved?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 bne L01BB Yes, exit with carry set
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 clrb No error & exit
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 L01B9 ldb #E$Write Write error
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 L01BB coma
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 * Shut off Read part, send signal to Write part
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 * Shut down our side of pipe & send signal to other half of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 L01BD pshs u,b,cc Preserve U, error code & status
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 clr ,x Clear out process # using part of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 tfr x,d Move ptr to D
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 eorb #$04 Flip between read/write vars
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 tfr d,x Move to X
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 lbsr L009C Send Signal to process on other end of pipe
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 puls pc,u,b,cc Restore error status & return
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
273
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 * Entry: X=Ptr within caller's area we are writing from
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 * A=Char to write
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 * B=Task # of caller
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 L01CC pshs x,b Preserve ptr & Task #
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 ldx <PD.NxtI,y Get ptr to next char in pipe buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 ldb <PD.RFlg,y Get data ready in pipe buffer flag
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 beq L01DE No data ready, skip ahead
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 cmpx <PD.NxtO,y Meeting write buffer ptr?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 bne L01E3 No, continue
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 comb
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 puls pc,x,b
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 * Put char into pipe buffer & Set flag that data is ready
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 * Entry: Y=Path dsc. ptr
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 * A=Char to put in buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 L01DE ldb #1 Set flag
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 stb <PD.RFlg,y Save it
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 L01E3 sta ,x+ Save char in pipe buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 cmpx <PD.End,y Hit end of buffer?
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 bcs L01EC No, continue
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 ldx PD.BUF,y Yes, wrap to beginning
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 L01EC stx <PD.NxtI,y Save current position in buffer
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 clrb
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 puls pc,x,b Restore regs
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 L01F2 lda <Pd.RFlg,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 bne L01F9
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 comb
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 rts
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 L01F9 pshs x
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 ldx <PD.NxtO,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 lda ,x+
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 cmpx <PD.END,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 bcs L0207
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 ldx PD.BUF,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 L0207 stx <PD.NxtO,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 cmpx <PD.NxtI,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 bne L0212
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 clr <Pd.RFlg,y
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 L0212 andcc #^Carry
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 puls pc,x
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 emod
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 eom equ *
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 end
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317
bd2b07db8917 CoCoOS9 version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318