-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathdskint
328 lines (328 loc) · 5.68 KB
/
dskint
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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
.PAGE 'DSKINT'
;
; ERROR DISPLAY ROUTINE
; BLINKS THE (ERROR #)+1 IN ALL THREE LEDS
;
TABJMP SEI
LDA #0
STA $403
JMP $FC04 ;JMP TO WAIT LOOP
;
PEZRO LDX #0 ;ERROR #1 FOR ZERO PAGE
.BYTE $2C ;SKIP NEXT TWO BYTES
PERR LDX TEMP ;GET ERROR #
TXS ;USE STACK AS STORAGE REG.
PE20 TSX ;RESTORE ERROR #
PE30 LDA #ERRLED+LED0+LED1
STA PBD2 ;TURN ON ALL THREE LEDS
TYA ;CLEAR INNER CTR
PD10 CLC
PD20 ADC #1 ;COUNT INNER CTR
BNE PD20
DEY ;DONE ?
BNE PD10 ;NO
;
STY PBD2 ;TURN OFF ALL LEDS
PE40 ;WAIT
TYA ;CLEAR INNER CTR
PD11 CLC
PD21 ADC #1 ;COUNT INNER CTR
BNE PD21
DEY ;DONE ?
BNE PD11 ;NO
;
DEX ;BLINKED # ?
BPL PE30 ;NO - BLINK AGAIN
CPX #$FC ;WAITED BETWEEN COUNTS ?
BNE PE40 ;NO
BEQ PE20 ;ALWAYS - ALL AGAIN
.SKIP 3
DSKINT
SEI
CLD
LDX #$FF
STX IEEEDO
STX PBDD1
INX
STX PBD2
LDA #DAVO+EOIO+RFDO
STA PAD2
LDA #$1F
STA PADD2
LDA #ERRLED+LED0+LED1
STA PBDD2
;
;
;*********************************
;
; POWER UP DIAGNOSTIC
;
;*********************************
;
PU10 TXA ;FILL Z-PAGE ACCEND PATTERN
STA $0,X
INX
BNE PU10
PU20 TXA ;GET X INTO Y
TAY
INY ;START Y CTR ONE AHEAD OF MEMORY
PU30 INC $0,X ;BUMP MEMORY AROUND TO $FF
INY ;BUMP Y AROUND TO $00
BNE PU30 ;NOT THERE YET
LDY $0,X ;CHECK IF MEMORY AT $FF
INY
BNE PEZRO ;NO - SHOW ERROR #
INC $0,X ;YES - BUMP MEMORY TO $00
BNE PEZRO ;NOT ZERO - SHOW ERROR #
INX ;NEXT MEMORY LOCATION
BNE PU20
.SKIP 3
; TEST THREE FILE SIDE ROMS
;
; ENTER X=START PAGE
; EXIT IF OK
;
RM10 INC TEMP ;NEXT ERROR #
STX IP+1 ;SAVE PAGE, START X=0
LDA #0
STA IP ;ZERO LO INDIRECT
TAY
LDX #16 ;16 PAGES IN 4K ROM
CLC
RT10 DEC IP+1 ;DO IT BACKWARDS
RT20 ADC (IP),Y ;TOTAL CHECKSUM IN A
INY
BNE RT20
DEX
BNE RT10
ADC #0 ;ADD IN LAST CARRY
TAX ;SAVE LOWER PAGE IN X
CMP IP+1 ;CORRECT ?
PERR2
BNE PERR ;NO - SHOW ERROR NUMBER
;
CPX #$D0 ;DONE ALL THREE ?
BNE RM10 ;NO
RCON1
LDA TABJMP,Y ;TRANSFER JMP TO WAIT LOOP
STA BUFS,Y
INY
BNE RCON1
;
LDA #JUMPC
STA JOBS ;SEND CONTRLR AWAY
INC TEMP
CDELAY
INY
BNE CDELAY
LDA JOBS
BEQ CR20
;
DEX
BMI CDELAY
BNE PERR2
.SKIP 3
; TEST ALL COMMON RAM EXECPT PAGE $1000
;
CR20 LDA #$10 ;START OF 1ST BLOCK
CR30 STA IP+1 ;SAVE PAGE #
INC TEMP ;BUMP ERROR #
; ENTER X=# OF PAGES IN BLOCK
; IP PTR TO FIRST PAGE IN BLOCK
; EXIT IF OK
;
RAMTST LDX #4 ;SAVE PAGE COUNT
RA10 TYA ;FILL WITH ADR SENSITIVE PATTERN
CLC
ADC IP+1
STA (IP),Y
INY
BNE RA10
INC IP+1
DEX
BNE RA10
LDX #4 ;RESTORE PAGE COUNT
RA30 DEC IP+1 ;CHECK PATTERN BACKWARDS
RA40 DEY
TYA ;GEN PATTERN AGAIN
CLC
ADC IP+1
CMP (IP),Y ;OK ?
BNE PERR2 ;NO - SHOW ERROR #
EOR #$FF ;YES - TEST INVERSE PATTERN
STA (IP),Y
EOR (IP),Y ;OK ?
STA (IP),Y ;LEAVE MEMORY ZERO
BNE PERR2 ;NO - SHOW ERROR #
TYA
BNE RA40
DEX
BNE RA30
;
LDA IP+1 ;GET FIRST PAGE OF BLOCK
CLC
ADC #$10 ;NO - NEXT BLOCK
CMP #$50 ;DONE ?
BNE CR30 ;NO
.SKIP 3
;*********************************
;
; CONTROLLER TEST GOES HERE
;
;*********************************
.SKIP 3
DIAGOK
LDX #$FF
TXS
LDA PBD2 ;CLEAR LEDS
AND #255-ERRLED-LED0-LED1
STA PBD2
;
LDA PBD2 ;COMPUTE PRIMARY ADDR
AND #7
ORA #$48 ;TALK ADDRESS
STA TLKADR
EOR #$60 ;LISTEN ADDRESS
STA LSNADR
;
; INITIALIZE BUFFER PNTR TABLE
;
INTTAB LDX #0
LDY #0
INTT1 LDA #0
STA BUFTAB,X
INX
LDA BUFIND,Y
STA BUFTAB,X
INX
INY
CPY #BFCNT+2
BNE INTT1
;
LDA #<CMDBUF ;SET PNTR TO CMDBUF
STA BUFTAB,X
INX
LDA #>CMDBUF
STA BUFTAB,X
INX
LDA #<ERRBUF ;SET PNTR TO ERRBUF
STA BUFTAB,X
INX
LDA #>ERRBUF
STA BUFTAB,X
;
LDA #$FF
LDX #MAXSA
DSKIN1 STA LINTAB,X
DEX
BPL DSKIN1
;
LDX #MXCHNS-1
DSKIN2
STA BUF0,X ;SET BUFFERS AS UNUSED
STA BUF1,X
STA SS,X
DEX
BPL DSKIN2
;
LDA #BFCNT+2 ;SET BUFFER POINTERS
STA BUF0+CMDCHN
LDA #BFCNT+3
STA BUF0+ERRCHN
.SKIP
LDA #ERRCHN
STA LINTAB+ERRSA
LDA #CMDCHN+$80
STA LINTAB+CMDSA
LDA #LXINT ;LINDX 0 TO 5 FREE
STA LINUSE
.SKIP
LDA #RDYLST
STA CHNRDY+CMDCHN
LDA #RDYTLK
STA CHNRDY+ERRCHN
LDA #0
STA BUFUSE
LDA #$F0
STA BUFUSE+1
JSR USRINT ;INIT USER JMP
;
; SET INDIRECT VECTORS
LDA #<DIAGOK
STA VNMI
LDA #>DIAGOK
STA VNMI+1
;
LDA #10 ;SET UP SECTOR OFFSET
STA SECINC
STA REVCNT
.SKIP
;*
;*
;********************************
;*
;* SETSEC
;* SET UP THE SECTORS/TRACK
;* TABLE DEPENDING ON THE
;* CONTROLLER USED
;*
;********************************
;*
;*
SETSEC LDA ID ;LOOK AT CT ID BYTE
LDX #0 ;LOAD INDEX FOR 2040
CMP #ID2040 ;IS IT THE 2040?
BEQ SETS30 ;JMP TO LOAD TABLE
SETS10
LDX #CTBSIZ ;LOAD INDEX FOR 2030
CMP #ID2030
BEQ SETS30 ;JMP TO LOAD TABLE
SETS20
INC TEMP
JMP PERR ;NOT A GOOD CONTROLLER
SETS30
LDY #0 ;SET UP TABLE
SETS40
LDA SECTRK,X ;LOAD #SECTORS
STA NUMSEC,Y ;STORE IN TABLE
INX
INY
CPY #CTBSIZ ;DONE YET?
BNE SETS40 ;NOT YET
;
;
;*
;*******************************
;*
;* SETERR
;* SET UP POWER ON ERROR MSG
;*
;* CBM DOS V2.0 (C)1979
;*
;*******************************
;*
;*
;
SETERR LDA #$73
JSR ERRTS0
;*
;*
;**************************
;*
;* POWER ON BUMP
;*
;**************************
;
PONBMP LDA #1
STA $1023
STA $102B ; INIT TRACK IN HDR
LDA #$C0
STA $1003
LDA #$C1
STA $1004 ; DO THE BUMPS
;
;ALLOW ATN TO INTERRUPT
STA ATNPE
;MUST BE CONTIGUOUS TO .FILE IDLE
;
.END