-
Notifications
You must be signed in to change notification settings - Fork 85
/
Copy pathlcc.wrt
305 lines (305 loc) · 3.85 KB
/
lcc.wrt
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
.PAGE 'LCC.WRT'
;
;
;
; * WRITE JOB
;
; WRITE OUT DATA BUFFER
;
;
WRIGHT CMP #$10 ; TEST IF WRITE
BEQ WRT05
;
JMP VRFY
;
WRT05 JSR CHKBLK ; GET BLOCK CHECKSUM
STA CHKSUM
;
LDA DSKCNT ; TEST FOR WRITE PROTECT
AND #$10
BNE WRT10 ; NOT PROTECTED
;
LDA #8 ; WRITE PROTECT ERROR
JMP ERRR
;
WRT10 JSR BINGCR ; CONVERT BUFFER TO WRITE IMAGE
;
JSR SRCH ; FIND HEADER
;
LDX #GAP1-2 ; WAIT OUT HEADER GAP
;
WRT20 BVC *
CLV
;
DEX ; TEST IF DONE YET
BNE WRT20
;
LDA #$FF ; MAKE OUTPUT $FF
STA DDRA2
;
LDA PCR2 ; SET WRITE MODE
AND #$FF-$E0
ORA #$C0
STA PCR2
;
LDA #$FF ; WRITE 5 GCR SYNC
LDX #NUMSYN ;
STA DATA2
CLV
;
WRTSNC BVC *
;
CLV
DEX
BNE WRTSNC
;
LDY #256-TOPWRT ; WRITE OUT OVERFLOW BUFFER
;
WRT30 LDA OVRBUF,Y ; GET A CHAR
BVC * ; WAIT UNTIL READY
CLV
;
STA DATA2 ; STUFF IT
INY
BNE WRT30 ; DO NEXT CHAR
;
; WRITE REST OF BUFFER
;
WRT40 LDA (BUFPNT),Y ; NOW DO BUFFER
BVC * ; WAIT UNTIL READY
CLV
;
STA DATA2 ; STUFF IT AGAIN
INY
; TEST IF DONE
BNE WRT40 ; DO THE WHOLE THING
;
BVC * ; WAIT FOR LAST CHAR TO WRITE OUT
;
;
LDA PCR2 ; GOTO READ MODE
ORA #$E0
STA PCR2
;
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 LDA #0 ; GET EOR CHECKSUM
TAY
;
CHKB10 EOR (BUFPNT),Y
INY
BNE CHKB10
;
RTS ; RETURN CHECKSUM IN .A
;
;
;
;
; * WTOBIN
;
; CONVERT WRITE IMAGE BACK TO
; BINARY DATA
;
;
WTOBIN LDA #0 ; INIT POINTER
STA SAVPNT
STA BUFPNT ; LSB
STA NXTPNT
;
LDA BUFPNT+1 ;GOTO BUFFER NEXT
STA NXTBF
;
LDA #>OVRBUF ; USE OVERFLOW FIRST
STA BUFPNT+1
STA SAVPNT+1
;
LDA #256-TOPWRT
STA GCRPNT ; GET HERE FIRST
STA BYTCNT ; STORE HERE
;
JSR GET4GB ; GET FIRST FOUR- ID AND 3 DATA
;
LDA BTAB ; SAVE BID
STA BID
;
LDY BYTCNT
;
LDA BTAB+1
STA (SAVPNT),Y
INY
;
LDA BTAB+2
STA (SAVPNT),Y
INY
;
LDA BTAB+3
STA (SAVPNT),Y
INY
;
STY BYTCNT
;
WTOB14 JSR GET4GB ;DO REST OF OVERFLOW BUFFER
;
LDY BYTCNT
;
LDA BTAB
STA (SAVPNT),Y
INY
;
LDA BTAB+1
STA (SAVPNT),Y
INY
BEQ WTOB50
;
LDA BTAB+2
STA (SAVPNT),Y
INY
;
LDA BTAB+3
STA (SAVPNT),Y
INY
;
STY BYTCNT
BNE WTOB14 ; JMP
;
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 #187
BCC WTOB53
;
WTOB52 LDA #69 ; MOVE BUFFER UP
STA SAVPNT
;
LDA BUFPNT+1
STA SAVPNT+1
;
LDY #256-TOPWRT-1
;
WTOB55 LDA (BUFPNT),Y
STA (SAVPNT),Y
;
DEY
BNE WTOB55
;
LDA (BUFPNT),Y
STA (SAVPNT),Y
;
LDX #256-TOPWRT ; MOVE OVERFLOW OVER TO BUFFER
;
WTOB57 LDA OVRBUF,X
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
STA CHKSUM
;
JSR BINGCR ; CONVERT TO VERIFY IMAGE
;
JSR DSTRT
;
LDY #256-TOPWRT
VRF15 LDA OVRBUF,Y ; GET CHAR
BVC *
CLV
;
EOR DATA2 ; TEST IF SAME
BNE VRF20 ;VERIFY ERROR
;
INY
BNE VRF15 ; NEXT BYTE
;
;
VRF30 LDA (BUFPNT),Y ; NOW DO BUFFER
;
BVC *
CLV ; WAIT FOR CHAR
;
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
;
;
.END