Mercurial > hg > Members > kono > os9 > sbc09
comparison os9/mc09/mclibos9.c @ 110:098b3feab38c
mc09 test program worked
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 31 Dec 2018 15:57:24 +0900 |
parents | 613615c9b946 |
children | c4e909f21b25 |
comparison
equal
deleted
inserted
replaced
109:613615c9b946 | 110:098b3feab38c |
---|---|
1 /* | 1 /* |
2 * os9 driver | 2 * os9 driver |
3 */ | 3 */ |
4 | 4 |
5 | |
6 int errno = 0; | |
5 | 7 |
6 typedef struct { | 8 typedef struct { |
7 int fd; /* 0 */ | 9 int fd; /* 0 */ |
8 int fmode; /* 2 */ | 10 int fmode; /* 2 */ |
9 int len; /* 4 */ | 11 int len; /* 4 */ |
92 int rd,wt,cm; | 94 int rd,wt,cm; |
93 rd = wt = cm = 0; | 95 rd = wt = cm = 0; |
94 for ( p = mode; *p; p++ ) { | 96 for ( p = mode; *p; p++ ) { |
95 switch ( *p ) { | 97 switch ( *p ) { |
96 case 'r': | 98 case 'r': |
97 rd = 1; break; | 99 rd = 1; cm |= 1; break; |
98 case 'w': | 100 case 'w': |
99 wt = 1; break; | 101 wt = 1; cm |= 2; break; |
100 case 'c': | 102 case 'c': |
101 cm = 1; break; | 103 cm = 2; break; |
102 default: | 104 default: |
103 return NULL; | 105 return NULL; |
104 } | 106 } |
105 } | 107 } |
106 if ( !(rd ^ wt) ) return NULL; | 108 if ( !(rd ^ wt) ) return NULL; |
119 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; | 121 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; |
120 if ( _setname(name,fcbp) == 0 ) return NULL; | 122 if ( _setname(name,fcbp) == 0 ) return NULL; |
121 #asm | 123 #asm |
122 pshs x,y,u | 124 pshs x,y,u |
123 ldx -2,u | 125 ldx -2,u |
124 lda 2,x mode | 126 lda 7,u mode |
125 ldb 3,x src attribute | |
126 ldx 6,x name | 127 ldx 6,x name |
127 os9 I$Open | 128 os9 I$Open |
128 bcc _LC0001 | 129 bcs _LC0001 |
129 ldx -4,u | 130 ldx -2,u |
130 tfr a,b | 131 tfr a,b |
131 clra | 132 clra |
132 std ,x | 133 std ,x |
133 bra _LC0002 | 134 bra _LC0002 |
134 _LC0001 | 135 _LC0001 |
135 ldx -4,u | 136 ldx -2,u |
137 tfr a,b | |
136 clra | 138 clra |
137 std 2,x err code | 139 std 2,x err code |
138 ldd #-1 | 140 ldd #-1 |
139 std ,x | 141 std ,x |
140 _LC0002 | 142 _LC0002 |
141 puls x,y,u | 143 puls x,y,u |
142 #endasm | 144 #endasm |
143 if (fcbp->fd < 0 ) return NULL; | 145 if (fcbp->fd < 0 ) { errno = fcbp->fmode ; return NULL; } |
144 /* fcbp->ptr = fcbp->buff; | 146 /* fcbp->ptr = fcbp->buff; |
145 fcbp->len = 0; */ | 147 fcbp->len = 0; */ |
146 return (_fcbtbl[i] = fcbp); | 148 return (_fcbtbl[i] = fcbp); |
147 } | 149 } |
148 | 150 |
157 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; | 159 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; |
158 if ( _setname(name,fcbp) == 0 ) return NULL; | 160 if ( _setname(name,fcbp) == 0 ) return NULL; |
159 #asm | 161 #asm |
160 pshs x,y,u | 162 pshs x,y,u |
161 ldx -2,u | 163 ldx -2,u |
162 lda 2,x mode | 164 lda 7,u mode |
163 ldb 3,x src attribute | |
164 ldx 6,x name | 165 ldx 6,x name |
165 os9 I$Create | 166 os9 I$Create |
166 bcc _LC0003 | 167 bcs _LC0003 |
167 ldx -4,u | 168 ldx -2,u |
168 tfr a,b | 169 tfr a,b |
169 clra | 170 clra |
170 std ,x | 171 std ,x |
171 bra _LC0004 | 172 bra _LC0004 |
172 _LC0003 | 173 _LC0003 |
173 ldx -4,u | 174 ldx -2,u |
175 tfr a,b | |
174 clra | 176 clra |
175 stD 2,x err code | 177 stD 2,x err code |
176 ldd #-1 | 178 ldd #-1 |
177 std ,x | 179 std ,x |
178 _LC0004 | 180 _LC0004 |
179 puls x,y,u | 181 puls x,y,u |
180 #endasm | 182 #endasm |
181 if (fcbp->fd < 0 ) return NULL; | 183 if (fcbp->fd < 0 ) { errno = fcbp->fmode ; return NULL; } |
182 /* fcbp->ptr = fcbp->buff; | 184 /* fcbp->ptr = fcbp->buff; |
183 fcbp->len = 0; */ | 185 fcbp->len = 0; */ |
184 return (_fcbtbl[i] = fcbp); | 186 return (_fcbtbl[i] = fcbp); |
185 } | 187 } |
186 | 188 |