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