forked from mist64/cbmsrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
load
264 lines (264 loc) · 5 KB
/
load
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
.PAG 'LOAD FUNCTION'
;**************************************
;* LOAD RAM FUNCTION 10/30/81 *
;* *
;* LOADS FROM CASSETTE 1 OR 2, OR *
;* IEEE BUS DEVICES >=4 TO 31 AS *
;* DETERMINED BY CONTENTS OF *
;* VARIABLE FA. *
;* ENTRY: *
;* .A(BIT 7)=0 PERFORMS LOAD *
;* .A(BIT 7)=1 PERFORMS VERIFY *
;* .A(BITS 0123)=START SEGMENT *
;* .X=START ADDRESS LOW *
;* .Y=START ADDRESS HIGH *
;* IF .X=$FF & .Y=$FF => FIXED LOAD *
;* EXIT: *
;* .A(BITS 0123)=END SEGMENT *
;* .X=END ADDRESS LOW *
;* .Y=END ADDRESS HIGH *
;* *
;**************************************
.SKI 3
NLOAD STX RELSAL ;SAVE ALT ADDRESS
STY RELSAH
STA VERCK ;SET VERIFY FLAG (N)
STA RELSAS ;SAVE START ADDRESS
LDA #0 ;CLEAR STATUS
STA STATUS
;
LDA FA ;CHECK DEVICE NUMBER
BNE LD20
;
LD10 JMP ERROR9 ;BAD DEVICE #-KEYBOARD
;
LD20 CMP #3
BEQ LD10 ;DISALLOW SCREEN LOAD
BCS *+5
JMP LD100 ;HANDLE TAPES DIFFERENT
;
;LOAD FROM CBM IEEE DEVICE
;
LDA #$60 ;SPECIAL LOAD COMMAND
STA SA
;
LDY FNLEN ;MUST HAVE FILE NAME
BNE LD25 ;YES...OK
;
JMP ERROR8 ;MISSING FILE NAME
;
LD25 JSR LUKING ;TELL USER LOOKING
JSR OPENI ;OPEN THE FILE
;
LDA FA
JSR TALK ;ESTABLISH THE CHANNEL
LDA SA
JSR TKSA ;TELL IT TO LOAD
;
JSR ACPTR ;GET FIRST BYTE
STA EAL
STA STAL
;
LDA STATUS ;TEST STATUS FOR ERROR
LSR A
LSR A
BCC *+5 ;FILE FOUND...
;
JMP ERROR4 ;FILE NOT FOUND ERROR
;
JSR ACPTR
STA EAH
STA STAH
;
JSR LODING ;TELL USER LOADING
;
;
;TEST FOR FIXED OR MOVEABLE LOAD
;
LDA RELSAS ;NO SEGMENT BYTE IN STORAGE ***
STA EAS
STA STAS
LDA RELSAL
AND RELSAH
CMP #$FF
BEQ LD40 ;FIXED LOAD
;
LDA RELSAL
STA EAL
STA STAL
LDA RELSAH
STA EAH
STA STAH
;
LD40 LDA #$FD ;MASK OFF TIMEOUT
AND STATUS
STA STATUS
;
JSR STOP ;STOP KEY?
BNE LD45 ;NO...
;
JMP BREAK ;STOP KEY PRESSED
;
LD45 JSR ACPTR ;GET BYTE OFF IEEE
TAX
LDA STATUS ;WAS THERE A TIMEOUT?
LSR A
LSR A
BCS LD40 ;YES...TRY AGAIN
TXA
; CHANGE INDIRECT PAGES
LDX I6509
LDY EAS
STY I6509
LDY #0
BIT VERCK ;PERFORMING VERIFY?
BPL LD50 ;NO...LOAD
STA SAL ;USE AS A TEMP
LDA (EAL)Y
CMP SAL
BEQ LD60 ;OKAY
LDA #SPERR ;NO GOOD...VERIFY ERROR
JSR UDST ;UPDATE STATUS
.BYT $AD ;SKIP NEXT STORE
;
LD50 STA (EAL)Y
LD60 STX I6509 ;RESTORE INDIRECT
INC EAL ;INCREMENT STORE ADDR
BNE LD64
INC EAH
BNE LD64
INC EAS
LDA #2 ;SKIP $0000 $0001
STA EAL
LD64 BIT STATUS ;EOI?
BVC LD40 ;NO...CONTINUE LOAD
;
JSR UNTLK ;CLOSE CHANNEL
JSR CLSEI ;CLOSE THE FILE
JMP LD180 ;EXIT IEEE LOAD
;
LD90 JMP ERROR4 ;FILE NOT FOUND
;
;LOAD FROM TAPE
;
LD100 CMP #2
BNE LD102
;
JMP RS232
;
LD102 JSR ZZZ ;SET POINTERS AT TAPE1
BCS LD104
JSR CSTE1 ;TELL USER ABOUT BUTTONS
BCC LD105
LD104 RTS ;STOP KEY PRESSED
LD105 JSR LUKING ;TELL USER SEARCHING
;
LD112 LDA FNLEN ;IS THERE A NAME?
BEQ LD150 ;NONE...LOAD ANYTHING
JSR FAF ;FIND A FILE ON TAPE
BCC LD170 ;GOT IT!
BEQ LD190 ;STOP KEY PRESSED
BCS LD90 ;NOPE...END OF TAPE
;
LD150 JSR FAH ;FIND ANY HEADER
BCC LD170
BEQ LD190 ;STOP KEY PRESSED
BCS LD90 ;NO HEADER
;
LD170 CPX #BLF ;IS IT A PROGRAM
BNE LD112 ;NO...SOMETHING ELSE
;
LDA STATUS
AND #SPERR ;MUST GOT HEADER RIGHT
;CARRY SET FROM LAST CPX
BNE LD112 ;IS BAD...RETRY
;
LDY #1
JSR TAPERY
STA STAL
JSR TAPIRY
STA STAH
JSR TAPIRY
STA EAL
JSR TAPIRY
STA EAH
;
;DETERMINE FIXED OR MOVEABLE LOAD
;
LDA RELSAS ;SET UP INDIRECT
STA EAS
STA STAS
LDA RELSAL
AND RELSAH
CMP #$FF
BEQ LD175 ;FIXED LOAD
;
SEC
LDA EAL ;COMPUTE LENGTH
SBC STAL
STA EAL
LDA EAH
SBC STAH
STA EAH
CLC
LDA RELSAL ;COMPUTE NEW END
STA STAL
ADC EAL
STA EAL
LDA RELSAH
STA STAH
ADC EAH
STA EAH
;
LD175 JSR LODING ;TELL USER LOADING
JSR TRD ;DO TAPE BLOCK LOAD
.BYT $24 ;CARRY FROM TRD
;
LD180 CLC ;GOOD EXIT
;
;SET UP END LOAD ADDRESS
;
LDA EAS
LDX EAL
LDY EAH
;
LD190 RTS
.SKI 5
;SUBROUTINE TO PRINT TO CONSOLE:
;
;SEARCHING [FOR NAME]
;
LUKING BIT MSGFLG ;SUPPOSED TO PRINT?
BPL LD115
LDY #MS5-MS1 ;"SEARCHING"
JSR MSG
LDA FNLEN
BEQ LD115
LDY #MS6-MS1 ;"FOR"
JSR MSG
.SKI 3
;SUBROUTINE TO OUTPUT FILE NAME
;
OUTFN LDY FNLEN ;IS THERE A NAME?
BEQ LD115 ;NO...DONE
LDY #0
LD110 JSR FNADRY
JSR BSOUT
INY
CPY FNLEN
BNE LD110
;
LD115 RTS
.SKI 3
;SUBROUTINE TO PRINT:
;
;LOADING/VERIFING
;
LODING LDY #MS10-MS1 ;ASSUME 'LOADING'
LDA VERCK ;CHECK FLAG
BPL LD410 ;ARE DOING LOAD
LDY #MS21-MS1 ;ARE 'VERIFYING'
LD410 JMP SPMSG
.END
; RSR FIX SEGMENTATION 10/15/81
; RSR 6509 CHANGES 10/15/81