forked from mist64/cbmsrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
newtapecontrol
221 lines (221 loc) · 4.42 KB
/
newtapecontrol
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
.PAG 'TAPECONTROL 11/18/82'
JTP20 JSR ZZZ
INC BUFPT
LDY BUFPT
CPY #BUFSZ
RTS
.SKI 5
;STAYS IN ROUTINE D2T1LL PLAY SWITCH
;
CSTE1 JSR CS10
BEQ CS25
LDY #MS7-MS1 ;"PRESS PLAY..."
CS30 JSR SPMSG
CS40 JSR TSTOP ;WATCH FOR STOP KEY
JSR CS10 ;WATCH CASSETTE SWITCHES
BNE CS40
LDY #MS18-MS1 ;"OK"
JMP SPMSG
.SKI 5
;SUBR RETURNS <> FOR CASSETTE SWITCH
;
CS10 LDA #$80 ;CHECK PORT
BIT TPI1+PB ;CLOSED?...
BNE CS25 ;NO. . .
BIT TPI1+PB ;CHECK AGAIN TO DEBOUNCE
CS25 CLC
RTS
.SKI 5
;CHECKS FOR PLAY & RECORD
;
CSTE2 JSR CS10
BEQ CS25
LDY #MS8-MS1 ;"RECORD"
BNE CS30
.SKI 5
;
;READ HEADER BLOCK ENTRY
;
RBLK LDA #0
STA STATUS
STA VERCK
JSR LDAD1
.SKI 3
;READ LOAD BLOCK ENTRY
;
TRD JSR CSTE1 ;SAY 'PRESS PLAY'
BCS TWRT3 ;STOP KEY PRESSED
LDA #0 ;CLEAR FLAGS...
STA RDFLG
STA SNSW1
STA CMP0
STA PTR1
STA PTR2
STA DPSW
;
TRD3 LDA #$FF-$90 ;ENABLE FOR READ LINE IRQ
LDX #<READ
LDY #>READ
BNE TAPE ;JMP
.SKI 5
;WRITE HEADER BLOCK ENTRY
;
WBLK JSR LDAD1
;
;WRITE LOAD BLOCK ENTRY
;
TWRT LDA #20 ;BETWEEN BLOCK SHORTS
STA SHCNH
TWRT2 JSR CSTE2 ;SAY 'PRESS PLAY & RECORD'
TWRT3 BCS STOP3 ;STOP KEY PRESSED
LDA #$FF-$82 ;ENABLE TB IRQS...
LDX #<WRTZ
LDY #>WRTZ
.SKI 5
;START TAPE OPERATION ENTRY POINT
; NOTE: RS232 OPERATION IS STOPPED.
; .A=ALLOWABLE IRQ'S
; .X=<NEW IRQ VECTOR
; .Y=>NEW IRQ VECTOR
;
TAPE SEI
STA CIA+ICR ;CLEAR ALL UNWANTED IRQ'S
EOR #$FF ;REVERSE
STA CIA+ICR ;AND SET ALL POSSIBLE IRQ SOURCES
LDA #$04 ;SET FOR ONLY CIA IRQ'S
STA TPI1+MIR ;FROM IRQ-LIST
LDA CINV
STA OLDINV
LDA CINV+1
STA OLDINV+1
LDA I6509 ;SAVE INDIRECT
STA OLDINV+2
LDA SAS ;GET CASSETTE INDIRECT
STA I6509
STX CINV
STY CINV+1
LDA CIA+CRA ;FIGURE OUT HOW TO TURN TIMERS ON
ORA #$19
STA CIA+CRB ;ENABLE T2 IRQS...WRITE TIME
AND #$91 ;SAVE TOD 50/60 INDICATOR
STA CASTON ;SPECIAL BYTE TELLS US ABOUT TIMERS
LDA #2 ;FSBLK STARTS AT 2
STA FSBLK
JSR NEWCH ;INIT COUNTERS AND FLAGS
;
;TURN MOTOR ON
;READ INTERRUPTS NEG EDGE
;
LDA TPI1+PB ;TURN MOTOR ON
AND #%10111111 ;LOW TURNS ON
STA TPI1+PB
;
;
LDX #$FF ;DELAY BETWEEN BLOCKS
STX CAS1 ;SEMAPHORE SWITCH DOWN
TP32 LDY #$FF
TP35 DEY
.IFE SYSTEM <
NOP
NOP
BNE TP35
DEX
BNE TP32
>
.IFN SYSTEM <
BNE TP35
DEX
BNE TP32
NOP
NOP
>
CLI
;
;WAIT LOOP FOR IRQ ROUTINES TO
;FINISH TAPE OPERATIONS.
;
TP40 LDA CINV+1 ;TAPE DONE?
CMP OLDINV+1 ;VECTOR AT IRQ HANDLER?
CLC
BEQ TP50 ;YES... RETURN
JSR TSTOP ;CHECK FOR STOP KEY
JSR UDTIM
JMP TP40
.SKI 5
TSTOP JSR STOP ;STOP KEY DOWN?
CLC ;ASSUME NO STOP
BNE TP50 ;WE WERE RIGHT
;
;STOP KEY DOWN...
;
JSR TNIF ;TURN OFF CASSETTES
SEC ;FAILURE FLAG
PLA ;BACK ONE SQUARE...
PLA
STOP3 LDA #0 ;STOP KEY FLAG
STA OLDINV+1 ;DEALLOCATE IRQ TEMPORARY
TP50 RTS
.SKI 5
;
; STT1 - SET UP TIMEOUT WATCH FOR NEXT DIPOLE
;
STT1 STX CTEMP ;.X HAS CONSTANT FOR TIMEOUT
LDA CMP0 ;CMP0*5
ASL A
ASL A
CLC
ADC CMP0
CLC
ADC CTEMP ;ADJUST LONG BYTE COUNT
STA CTEMP
LDA #0
BIT CMP0 ;CHECK CMP0 ...
BMI STT2 ;...MINUS, NO ADJUST
ROL A ;...PLUS SO ADJUST POS
STT2 ASL CTEMP ;MULTIPLY CORRECTED VALUE BY 4
ROL A
.IFE SYSTEM <
ASL CTEMP ;EXTRA SHIFT FOR 2MHZ SYSTEM
ROL A
>
.IFN SYSTEM <
;NOP
;NOP
;NOP
>
ASL CTEMP
ROL A ;...USED FOR 1.8MHZ ROUTINES
TAX
STT3 LDA CIA+TBLO ;WATCH OUT FOR T2H ROLLOVER...
CMP #24 ;...TIME FOR ROUTINE...!!!...
BCC STT3 ;...TOO CLOSE SO WAIT UND2T1LL PAST
ADC CTEMP ;CALCULATE AND...
STA CIA+TALO ;...STORE ADUSTED TIME COUNT
TXA
ADC CIA+TBHI ;ADJUST FOR HIGH TIME COUNT
STA CIA+TAHI
LDA CASTON ;TURN BOTH TIMMER ON, FORCE LOAD
STA CIA+CRA
STA FLAGT1 ;NON-ZERO MEANS A T1 IRQ HAS NOT YET OCCURED
;
LDA TPI1+LIR ;CHECK INTERRUPT LATCHS FOR AN IRQ
AND #$04
BEQ STT5 ;NONE...BYPASS LOGIC
LDA #$7F ;CLEAR MASK TO PREVENT LOSS OF FLAG IRQ
STA CIA+ICR
LDA CIA+ICR ;GET ALL IRQ'S AND CLEAR ALL
AND #$10
BNE STT4 ;HAVE A FLAG...DON'T CLEAR
LDA TPI1+AIR ;ELSE CLEAR ACTIVE/POSSIBLE T1 IRQ
STA TPI1+AIR
STT4 LDA #$90 ;RESET MASK FOR FLAGS
ORA SNSW1 ;MIX IN TO TELL IF T1 ENABLED
STA CIA+ICR
STT5 CLI ;ALLOW FOR RE-ENTRY CODE
RTS
.IFN SYSTEM < ;MATIAIN READ START PLACE
NOP
NOP
NOP
>
.END