-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathtstfnd
193 lines (193 loc) · 2.24 KB
/
tstfnd
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
.PAGE ' TSTFND '
; NEXT TRACK & SECTOR
; RETURNS NEXT AVAILABLE TRACK & SECTOR
; GIVEN CURRENT T & S
;
; ALLOCATION IS FROM TRACK 18
; TOWARDS 1 & 35, BY FULL TRACKS
NXTTS
JSR GETHDR
LDA #3
STA TEMP
NXTDS LDX DRVNUM
LDA IPBM,X
STA BMPNT+1
LDA #0
STA BMPNT
NXT1 LDA TRACK
ASL A
ASL A
TAY
LDA (BMPNT),Y
BNE FNDNXT
LDA TRACK
CMP #18
BEQ NXTERR
BCC NXT2
INC TRACK
LDA TRACK
CMP #MAXTRK
BNE NXT1
LDA #17
STA TRACK
LDA #0
STA SECTOR
DEC TEMP
BNE NXT1
NXTERR LDA #DSKFUL
JMP CMDERR
NXT2 DEC TRACK
BNE NXT1
LDA #19
STA TRACK
LDA #0
STA SECTOR
DEC TEMP
BNE NXT1
BEQ NXTERR
;
; FIND THE NEXT OPTIMUM SECTOR
; NEXT SECTOR=CURRENT SECTOR+N
;
FNDNXT LDA SECTOR
CLC
ADC SECINC
STA SECTOR
LDA TRACK
JSR MAXSEC
STA LSTSEC
STA CMD
CMP SECTOR
BCS FNDN0
.SKIP
SEC
LDA SECTOR
SBC LSTSEC
STA SECTOR
BEQ FNDN0
.SKIP
DEC SECTOR
BNE FNDN0
.SKIP
FNDN3 LDA #0
STA SECTOR
FNDN0 JSR AVAIL
FNDN1 JSR AV2
BCS FNDN2
DEC CMD
BPL FNDN5
LDA #DIRERR
JMP CMDER2
FNDN5 LDA SECTOR
INC SECTOR
CMP LSTSEC
BNE FNDN1
BEQ FNDN3
FNDN2 JMP USEDTS
;
;
; RETURNS OPTIMUM INITIAL TRACK,SECTOR
;
INTTS LDA #17
STA TRACK
JSR SETBMP
LOOP LDA TRACK
ASL A
ASL A
TAY
LDA (BMPNT),Y
BNE FNDSEC
LDA #36
SEC
SBC TRACK
ASL A
ASL A
TAY
LDA (BMPNT),Y
BNE FNDSEC
DEC TRACK
BNE LOOP
LDA #DSKFUL
JMP CMDERR
FNDSEC TYA
LSR A
LSR A
STA TRACK
LDA #0
STA SECTOR
JSR AVAIL
FND1 JSR AV2
BCS FND3
INC SECTOR
BNE FND1
LDA #DIRERR
JMP CMDER2
FND3 JMP USEDTS
;
; SET (INDIRECT) BAM PNTR BY DRVNUM
SETBMP LDX DRVNUM
LDA IPBM,X
STA BMPNT+1
LDA #0
STA BMPNT
RTS
;
; LOAD TRACK BAM INTO TEMP AND FINDS
; AVAILABLE SECTOR ON THE TRACK
;
AVAIL LDA TRACK
ASL A
ASL A
TAY
LDA (BMPNT),Y
STA TEMP+3
LDX #2
AV1 INY
LDA (BMPNT),Y
STA TEMP,X
DEX
BPL AV1
JSR AVCK
LDY SECTOR
BEQ AV4
BNE AV3
AV2 LDY #1
AV3 ROR TEMP
ROR TEMP+1
ROR TEMP+2
DEY
BNE AV3
AV4 RTS
.SKIP
;BIT MAP VALIDITY CHECK
AVCK LDX #0
LDY #3
BNE AVCK5 ;(BRANCH)
AVCK3 INX
AVCK4 LSR A
BCS AVCK3
BNE AVCK4
.SKIP
AVCK5 LDA TEMP-1,Y
DEY
BPL AVCK4
.SKIP
CPX TEMP+3
BEQ AVCK6
LDA #DIRERR
LDY #0
JMP CMDER2
AVCK6 RTS
.SKIP
; .A=TRACK # ,RETURNS #SECTORS ON THIS TRACK
MAXSEC LDX #4
MAX1 CMP TRKNUM-1,X
DEX
BCS MAX1
LDA NUMSEC,X
RTS
; TABLES USED BY MAXSEC
;
;
TRKNUM .BYT 36,31,25,18
.END