-
Notifications
You must be signed in to change notification settings - Fork 92
Expand file tree
/
Copy pathwrt.src
More file actions
306 lines (306 loc) · 6.14 KB
/
wrt.src
File metadata and controls
306 lines (306 loc) · 6.14 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
; 08/22/84 ds
;
;
; * write job
;
; write out data buffer
;
;
wright cmp #$10 ; test if write
beq wrt05
;
jmp vrfy
;
wrt05 jsr chkblk ; get block checksum
;
lda dskcnt ; test for write protect
and #16
bne wrt10 ; not protected
;
lda #8 ; write protect error
jmp errr
;
wrt10 jsr bingcr ; convert buffer to write image
;
jsr srch ; find header
;
ldy #gap1-2 ; wait out header gap
;
wrt20 bit dskcnt
bpl wrt20
bit bytclr
;
dey ; test if done yet
bne wrt20
;
lda #$ff ; make output $ff
sta ddra2
;
lda portc ; set write mode
and #$ff-$10 ; 0=wr
sta portc
;
lda #$ff ; write 4 gcr sync
ldy #numsyn ;
sta data2
bit bytclr
;
wrtsnc bit dskcnt
bpl wrtsnc
bit bytclr
dey
bne wrtsnc
;
ldy #$bb ; write out overflow buffer
;
wrt30 lda ovrflw,y ; get a char
wrt31 bit dskcnt ; wait until ready
bpl wrt31
bit bytclr
;
sta data2 ; stuff it
iny
bne wrt30 ; do next char
;
; write rest of buffer
;
wrt40 lda (bufpnt),y ; now do buffer
wrt41 bit dskcnt ; wait until ready
bpl wrt41
bit bytclr
;
sta data2 ; stuff it again
iny
; test if done
bne wrt40 ; do the whole thing
;
wrt42 bit dskcnt ; wait for last char to write out
bpl wrt42
bit bytclr
;
lda portc ; goto read mode
ora #$10
sta portc
;
lda #0 ; make data2 input $00
sta ddra2
;
jsr wtobin ; convert write image to binary
;
ldy jobn ; make job a verify
lda jobs,y
eor #$30
sta jobs,y
;
jmp seak ; scan job que
;
;
chkblk ldy #0 ; index
sty chksum ; zero checksum
;
chkb10 lda (bufpnt),y
eor chksum
sta chksum
iny
bne chkb10
;
rts ; return chechksum in .a
;
;
; * wtobin
;
; convert write image back to
; binary data
;
;
wtobin lda #$60 ; effective addr. of $011b=>lda $0060,bb
sta bufpnt ; lsb for overflow area
;
lda bufpnt+1 ;
sta nxtbf ; save for next buffer.
;
lda #$00 ;
sta bufpnt+1 ; msb for overflow area
sta nxtpnt
;
lda #$bb
sta gcrpnt ; offset
sta bytcnt ; ditto
;
jsr get4gb ; get first four- id and 3 data
;
lda btab ; save bid
sta bid
;
ldy bytcnt
;
lda btab+1
sta ovrflw,y ; store back in overflow buffer 5/4
iny
;
lda btab+2
sta ovrflw,y
iny
;
lda btab+3
sta ovrflw,y
iny
;
sty bytcnt
;
; do overflow first and store back into overflow buffer
;
wtob14 jsr get4gb ; do rest of overflow buffer
;
ldy bytcnt
;
lda btab
sta ovrflw,y
iny
;
lda btab+1
sta ovrflw,y
iny
beq wtob50
;
lda btab+2
sta ovrflw,y
iny
;
lda btab+3
sta ovrflw,y
iny
;
sty bytcnt
bne wtob14 ; jmp till end of overflow buffer
;
;
;
;
wtob50
;
lda btab+2
sta (bufpnt),y
iny
;
lda btab+3
sta (bufpnt),y
iny
;
sty bytcnt
;
wtob53 jsr get4gb
;
ldy bytcnt
;
lda btab
sta (bufpnt),y
iny
;
lda btab+1
sta (bufpnt),y
iny
;
lda btab+2
sta (bufpnt),y
iny
;
lda btab+3
sta (bufpnt),y
iny
;
sty bytcnt
cpy #$bb
bcc wtob53
;
wtob52 lda #$45 ; move buffer up
sta savpnt
;
lda bufpnt+1
sta savpnt+1
;
ldy #$ba
;
wtob55 lda (bufpnt),y
sta (savpnt),y
;
dey
bne wtob55
;
lda (bufpnt),y
sta (savpnt),y
;
;load in overflow
;
ldx #$bb
wtob57 lda ovroff,y
sta (bufpnt),y
;
iny
inx
bne wtob57
;
stx gcrflg ; clear buffer gcr flag
;
;
rts
;
;
;
; * verify data block
;
; convert to gcr verify image
;
; test against data block
;
; convert back to binary
;
;
vrfy cmp #$20 ; test if verify
beq vrf10
;
jmp sectsk
;
vrf10
;
jsr chkblk ; get block checksum
;
jsr bingcr ; convert to verify image
;
jsr dstrt
;
ldy #$bb
vrf15 lda ovrflw,y ; get char
vrf16 bit dskcnt
bpl vrf16
bit bytclr
;
eor data2 ; test if same
bne vrf20 ; verify error
;
iny
bne vrf15 ; next byte
;
;
vrf30 lda (bufpnt),y ; now do buffer
;
vrf31 bit dskcnt
bpl vrf31
bit bytclr
;
eor data2 ; test if same
bne vrf20 ; error
;
iny
cpy #$fd ; dont test off bytes
bne vrf30
;
;
jmp done ; verify ok
;
vrf20 lda #7 ; verify error
jmp errr
;
;
sectsk jsr srch ; sector seek
jmp done