-
Notifications
You must be signed in to change notification settings - Fork 85
/
Copy pathopen
193 lines (193 loc) · 4.22 KB
/
open
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
.PAG 'OPEN FILE'
;***********************************
;* *
;* OPEN FUNCTION *
;* *
;* ENTER: CY=1, TRANSMIT COMMAND TO*
;* DEVICE. *
;* CY=0, PERFORM OPEN OPERA-*
;* TION. *
;* *
;* LA, FA, SA MUST BE SET UP PRIOR *
;* TO THE CALL TO THIS ROUTINE, AS *
;* WELL AS THE FILE NAME DESCRIPT- *
;* TOR. *
;* *
;***********************************
;
NOPEN
BCC OP000 ;DO OPEN
JMP TRANR ;DO TRANSMIT
.SKI 4
;***********************************
;* *
;* CREATE AN ENTRY IN THE LOGICAL *
;* FILES TABLES CONSISTING OF *
;* LOGICAL FILE NUMBER--LA, DEVICE *
;* NUMBER--FA, AND SECONDARY CMD-- *
;* SA. *
;* *
;* A FILE NAME DESCRIPTOR, FNADR & *
;* FNLEN, IS PASSED TO THIS ROUTINE*
;* *
;***********************************
;
OP000 LDX LA ;CHECK FILE #
;BNE OP98 ;IS NOT THE KEYBOARD
;
;JMP ERROR6 ;NOT INPUT FILE...
;
OP98 JSR LOOKUP ;SEE IF IN TABLE
BNE OP100 ;NOT FOUND...O.K.
;
JMP ERROR2 ;FILE OPEN
;
OP100 LDX LDTND ;LOGICAL DEVICE TABLE END
CPX #10 ;MAXIMUM # OF OPEN FILES
BCC OP110 ;LESS THAN 10...O.K.
;
JMP ERROR1 ;TOO MANY FILES
;
OP110 INC LDTND ;NEW FILE
LDA LA
STA LAT,X ;STORE LOGICAL FILE #
LDA SA
ORA #$60 ;MAKE SA AN IEEE COMMAND
STA SA
STA SAT,X ;STORE COMMAND #
LDA FA
STA FAT,X ;STORE DEVICE #
;
;PERFORM DEVICE SPECIFIC OPEN TASKS
;
BEQ OP175 ;IS KEYBOARD...DONE.
CMP #3
BEQ OP175 ;IS SCREEN...DONE.
BCC OP150 ;ARE CASSETTES 1 & 2
;
JSR OPENI ;IS ON IEEE...OPEN IT
BCC OP175 ;BRANCH ALWAYS...DONE
;
;PERFORM TAPE OPEN STUFF
;
OP150 CMP #2
BNE OP152
;
JMP OPN232
;
.IFN SYSAGE <
OP152 JSR ZZZ ;SEE IF TAPE BUFFER
BCS OP180 ;ERROR RETURNED
;
OP155 LDA SA
AND #$F ;MASK OFF COMMAND
BNE OP200 ;NON ZERO IS TAPE WRITE
;
;OPEN CASSETE TAPE FILE TO READ
;
JSR CSTE1 ;TELL "PRESS PLAY"
BCS OP180 ;STOP KEY PRESSED
;
JSR LUKING ;TELL USER "SEARCHING"
;
LDA FNLEN
BEQ OP170 ;LOOKING FOR ANY FILE
;
JSR FAF ;LOOKING FOR NAMED FILE
BCC OP171 ;FOUND IT!!!
BEQ OP180 ;STOP KEY PRESSED
;
OP160 JMP ERROR4 ;FILE NOT FOUND
;
OP170 JSR FAH ;GET ANY OLD HEADER
BEQ OP180 ;STOP KEY PRESSED
BCC OP171 ;ALL O.K.
BCS OP160 ;FILE NOT FOUND...
;
;OPEN CASSETTE TAPE FOR WRITE
;
OP200 JSR CSTE2 ;TELL "PRESS PLAY AND RECORD"
BCS OP180 ;STOP KEY PRESSED
LDA #BDFH ;DATA FILE HEADER TYPE
JSR TAPEH ;WRITE IT
BCS OP180 ;EXIT IF STOP KEY PRESSED...
;
;FINISH OPEN FOR TAPE READ/WRITE
;
OP171
LDA #BUFSZ-1 ;ASSUME FORCE READ
;
LDY SA
CPY #$60 ;OPEN FOR READ?
BEQ OP172
;
;SET POINTERS FOR BUFFERING DATA
;
LDA #BDF ;TYPE FLAG FOR BLOCK
JSR TAPZWY ;TO BEGIN OF BUFFER
TYA
;
OP172 STA BUFPT ;POINT TO DATA
>
.IFE SYSAGE <
OP152 JSR XTAPE ;GOTO TAPE DEVICE INDIRECT
>
OP175 CLC ;FLAG GOOD OPEN
OP180 RTS ;EXIT IN PEACE
.SKI 5
OPENI LDA SA
BMI OP50 ;NO SA...DONE
;
LDY FNLEN
BEQ OP50 ;NO FILE NAME...DONE
;
LDA FA
JSR LISTN ;DEVICE LA TO LISTEN
;
LDA SA
ORA #$F0
OPENIB JSR SECND
;
LDA STATUS ;ANYBODY HOME?
BPL OP35 ;YES...CONTINUE
;
;THIS ROUTINE IS CALLED BY OTHER
;KERNAL ROUTINES WHICH ARE CALLED
;DIRECTLY BY OS. KILL RETURN
;ADDRESS TO RETURN TO OS.
;
PLA
PLA
JMP ERROR5 ;DEVICE NOT PRESENT
;
OP35 LDA FNLEN
BEQ OP45 ;NO NAME...DONE SEQUENCE
;
;SEND FILE NAME OVER IEEE
;
LDY #0
OP40 JSR FNADRY
JSR CIOUT
INY
CPY FNLEN
BNE OP40
;
OP45 JSR UNLSN
;
OP50 CLC ;NO ERROR
RTS
.SKI 4
;*****************************************
;* TRANSMIT COMMAND TO DEVICE *
;* *
;* FNLEN,FNADR MUST BE SET UP ALREADY *
;* TO CONTAIN THE COMMAND STRING. *
;* FA MUST BE SET FOR THE DEVICE. *
;*****************************************
TRANR
LDA FA
JSR LISTN
LDA #$6F
STA SA
JMP OPENIB
.END