-
Notifications
You must be signed in to change notification settings - Fork 82
/
declare
324 lines (324 loc) · 9.42 KB
/
declare
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
.PAG 'DECLARE 03/11/83'
* =$0000
;------------------------------------------------------
; 6509 USED TO EXTEND MEMORY ON BC2 & P2 SYSTEMS
; LOCATION - USED TO DIRECT
; $0000 - EXECUTION REGISTER (4 BITS)
; $0001 - INDIRECT REGISTER (4 BITS)
;
; THESE REGISTERS PROVIDE 4 EXTRA HIGH-ORDER ADDRESS
; CONTROL LINES. ON 6509 RESET ALL LINES ARE HIGH.
;
; CURRENT MEMORY MAP:
; SEGMENT 15- $FFFF-$E000 ROM (KERNAL)
; $DFFF-$DF00 I/O 6525 TPI2
; $DEFF-$DE00 I/O 6525 TPI1
; $DDFF-$DD00 I/O 6551 ACIA
; $DCFF-$DC00 I/O 6526 CIA
; $DBFF-$DB00 I/O UNUSED (Z80,8088,68008)
; $DAFF-$DA00 I/O 6581 SID
; $D9FF-$D900 I/O UNUSED (DISKS)
; $D8FF-$D800 I/O 6566 VIC/ 6845 80-COL
; $D7FF-$D400 COLOR NYBLES/80-COL SCREEN
; $D3FF-$D000 VIDEO MATRIX/80-COL SCREEN
; $CFFF-$C000 CHARACTER DOT ROM (P2 ONLY)
; $BFFF-$8000 ROMS EXTERNAL (LANGUAGE)
; $7FFF-$4000 ROMS EXTERNAL (EXTENSIONS)
; $3FFF-$2000 ROM EXTERNAL
; $1FFF-$1000 ROM INTERNAL
; $0FFF-$0400 UNUSED
; $03FF-$0002 RAM (KERNAL/BASIC SYSTEM)
; SEGMENT 14- SEGMENT 8 OPEN (FUTURE EXPANSION)
; SEGMENT 7 - $FFFF-$0002 RAM EXPANSION (EXTERNAL)
; SEGMENT 6 - $FFFF-$0002 RAM EXPANSION (EXTERNAL)
; SEGMENT 5 - $FFFF-$0002 RAM EXPANSION (EXTERNAL)
; SEGMENT 4 - $FFFF-$0002 RAM B2 EXPANSION (P2 EXTERNAL)
; SEGMENT 3 - $FFFF-$0002 RAM EXPANSION
; SEGMENT 2 - $FFFF-$0002 RAM B2 STANDARD (P2 OPTINAL)
; SEGMENT 1 - $FFFF-$0002 RAM B2 P2 STANDARD
; SEGMENT 0 - $FFFF-$0002 RAM P2 STANDARD (B2 OPTIONAL)
;
; THE 6509 REGISTERS APPEAR IN LOCATIONS $0000 AND
; $0001 IN ALL SEGMENTS OF MEMORY.
;
;------------------------------------------------------
E6509 *=*+1 ;6509 EXECUTION REGISTER
I6509 *=*+1 ;6509 INDIRECTION REGISTER
.SKI 2
IROM =$F ;INDIRECT=ROM OR EXECUTION=ROM
.IFE SYSAGE <
.PAGE 'DECLARE - MONITOR'
;
;VIRTUAL REGISTERS
;
*=$AE ;PLACE IN THESE LOCATIONS TEMPORARLY...
PCH *=*+1 ;PROGRAM COUNTER
PCL *=*+1
;
FLGS *=*+1 ;PROCESSOR STATUS
;
ACC *=*+1 ;ACCUMULATOR
;
XR *=*+1 ;.X REGISTER
;
YR *=*+1 ;.Y REGISTER
;
SP *=*+1 ;STACK POINTER
;
XI6509 *=*+1 ;OLD INDIRECTION SEGMENT
;
RE6509 *=*+1 ;RETURN EXECUTION SEGMENT
;
INVH *=*+1 ;USER INTERRUPT VECTOR
INVL *=*+1
;
;MONITOR INDIRECT VARIABLES
;
TMP0 *=*+2
TMP2 *=*+2
;
;OTHER MONITOR VARIABLES
;
TMPC *=*+1 ;PLACE TO SAVE LAST CMD
T6509 *=*+1 ;TEMPORARY I6509
DDISK *=*+1 ;DEFAULT DISK UNIT # FOR MONITOR
;
>
.PAG 'DECLARE - KERNAL'
* =$90
;KERNAL PAGE ZERO VARIABLES
;
;KERNAL INDIRECT ADDRESS VARIABLES
;
FNADR *=*+3 ;ADDRESS OF FILE NAME STRING
SAL *=*+1 ;CURRENT LOAD/STORE ADDRESS
SAH *=*+1
SAS *=*+1
EAL *=*+1 ;END OF LOAD/SAVE
EAH *=*+1
EAS *=*+1
STAL *=*+1 ;START OF LOAD/SAVE
STAH *=*+1
STAS *=*+1
;
;FREQUENTLY USED KERNAL VARIABLES
;
STATUS *=*+1 ;I/O OPERATION STATUS
FNLEN *=*+1 ;FILE NAME LENGTH
LA *=*+1 ;CURRENT LOGICAL INDEX
FA *=*+1 ;CURRENT FIRST ADDRESS
SA *=*+1 ;CURRENT SECOND ADDRESS
DFLTN *=*+1 ;DEFAULT INPUT DEVICE
DFLTO *=*+1 ;DEFAULT OUTPUT DEVICE
;
;TAPE BUFFER POINTER
;
TAPE1 *=*+3 ;ADDRESS OF TAPE BUFFER
;
;RS-232 BUFFER POINTERS
;
RIBUF *=*+3 ;INPUT BUFFER
;
;VARIABLES FOR KERNAL SPEED
;
STKEY *=*+1 ;STOP KEY FLAG
CTEMP ;USED TO REDUCE CASSETTE READ TIMES
C3PO *=*+1 ;IEEE BUFFER FLAG
SNSW1 ;USED TO REDUCE CASSETTE READ TIMES
BSOUR *=*+1 ;IEEE CHARACTER BUFFER
;
; CASSETTE TEMPS - OVERLAYS IPC BUFFER
;
IPOINT ;NEXT 2 BYTES USED FOR TRANSX CODE
SYNO *=*+1
DPSW *=*+1
; NEXT 18 BYTES ALSO USED FOR MONITOR
PTR1 *=*+1 ;INDEX TO PASS1 ERRORS
PTR2 *=*+1 ;INDEX TO PASS2 ERRORS
PCNTR *=*+1
FIRT *=*+1
CNTDN *=*+1
SHCNL *=*+1
RER *=*+1
REZ *=*+1
RDFLG *=*+1
FLAGT1 ;TEMP DURING BIT READ TIME
SHCNH *=*+1
CMP0 *=*+1
DIFF *=*+1
PRP *=*+1
OCHAR *=*+1
PRTY *=*+1
FSBLK *=*+1
MYCH *=*+1
CDATA *=*+1 ;HOW TO TURN CASSETTE TIMERS ON
.PAG 'DECLARE-EDITOR'
;SCREEN EDITOR PAGE ZERO VARIABLES
;
;EDITOR INDIRECT ADDRESS VARIABLES
;
*=$C0 ;LEAVE SOME SPACE
PKYBUF *=*+2 ;START ADR OF PGM KEY
KEYPNT *=*+2 ;CURRENT PGM KEY BUF
SEDSAL *=*+2 ;SCROLL PTR
SEDEAL *=*+2 ;SCROLL PTR
PNT *=*+2 ;CURRENT CHARACTER POINTER
;
;EDITOR VARIABLES FOR SPEED & SIZE
;
TBLX *=*+1 ;CURSOR LINE
PNTR *=*+1 ;CURSOR COLUMN
GRMODE *=*+1 ;GRAPHIC/TEXT MODE FLAG
LSTX *=*+1 ;LAST CHARACTER INDEX
LSTP *=*+1 ;SCREEN EDIT START POSITION
LSXP *=*+1
CRSW *=*+1 ;
NDX *=*+1 ;INDEX TO KEYD QUEUE
QTSW *=*+1 ;QUOTE MODE FLAG
INSRT *=*+1 ;INSERT MODE FLAG
CONFIG *=*+1 ;COURSOR TYPE / CHAR BEFORE BLINK (PETII)
INDX *=*+1 ;LAST BYTE POSISTION ON LINE (##234-02##244-02)
KYNDX *=*+1 ;COUNT OF PROGRAM KEY STRING
RPTCNT *=*+1 ;DELAY TWEEN CHARS
DELAY *=*+1 ;DELAY TO NEXT REPEAT
;
SEDT1 *=*+1 ;FREQUENTLY USED TEMP VARIABLES
SEDT2 *=*+1
;
;FREQUENTLY USED EDITOR VARIABLES
;
DATA *=*+1 ;CURRENT PRINT DATA
SCTOP *=*+1 ;TOP SCREEN 0-25
SCBOT *=*+1 ;BOTTOM 0-25
SCLF *=*+1 ;LEFT MARGIN
SCRT *=*+1 ;RIGHT MARGIN
MODKEY *=*+1 ;KEYSCANNER SHIFT/CONTROL FLAGS ($FF-NOKEY)
NORKEY *=*+1 ;KEYSCANNER NORMAL KEY NUMBER ($FF-NOKEY)
;
; SEE SCREEN EDITOR LISTINGS FOR USAGE IN THIS AREA
;
* =$F0 ;FREE ZERO PAGE SPACE, 16 BYTES
.PAG 'DECLARE ABSOLUTE'
* =$100 ;SYSTEM STACK AREA
BAD *=*+1 ;CASSETTE BAD ADDRESS TABLE
* =$1FF
STACKP *=*+1 ;SYSTEM STACK POINTER TRANSX CODE
* =$200
BUF *=*+256 ;BASIC'S ROM PAGE WORK AREA
;
;SYSTEM RAM VECTORS
;
CINV *=*+2 ;IRQ VECTOR
CBINV *=*+2 ;BRK VECTOR
NMINV *=*+2 ;NMI VECTOR
IOPEN *=*+2 ;OPEN FILE VECTOR
ICLOSE *=*+2 ;CLOSE FILE VECTOR
ICHKIN *=*+2 ;OPEN CHN IN VECTOR
ICKOUT *=*+2 ;OPEN CHN OUT VECTOR
ICLRCH *=*+2 ;CLOSE CHANNEL VECTOR
IBASIN *=*+2 ;INPUT FROM CHN VECTOR
IBSOUT *=*+2 ;OUTPUT TO CHN VECTOR
ISTOP *=*+2 ;CHECK STOP KEY VECTOR
IGETIN *=*+2 ;GET FROM QUEUE VECTOR
ICLALL *=*+2 ;CLOSE ALL FILES VECTOR
ILOAD *=*+2 ;LOAD FROM FILE VECTOR
ISAVE *=*+2 ;SAVE TO FILE VECTOR
USRCMD *=*+2 ;MONITOR EXTENSION VECTOR
ESCVEC *=*+2 ;USER ESC KEY VECTOR
CTLVEC *=*+2 ;UNUSED CONTROL KEY VECTOR
ISECND *=*+2 ;IEEE LISTEN SECONDARY ADDRESS
ITKSA *=*+2 ;IEEE TALK SECONDARY ADDRESS
IACPTR *=*+2 ;IEEE CHARACTER IN ROUTINE
ICIOUT *=*+2 ;IEEE CHARACTER OUT ROUTINE
IUNTLK *=*+2 ;IEEE BUS UNTALK
IUNLSN *=*+2 ;IEEE BUS UNLISTN
ILISTN *=*+2 ;IEEE LISTEN DEVICE PRIMARY ADDRESS
ITALK *=*+2 ;IEEE TALK DEVICE PRIMARY ADDRESS
;
;KERNAL ABSOLUTE VARIABLES
;
LAT *=*+10 ;LOGICAL FILE NUMBERS
FAT *=*+10 ;DEVICE NUMBERS
SAT *=*+10 ;SECONDARY ADDRESSES
;
;
LOWADR *=*+3 ;START OF SYSTEM MEMORY
HIADR *=*+3 ;TOP OF SYSTEM MEMORY
MEMSTR *=*+3 ;START OF USER MEMORY
MEMSIZ *=*+3 ;TOP OF USER MEMORY
TIMOUT *=*+1 ;IEEE TIMEOUT ENABLE
VERCK *=*+1 ;LOAD/VERIFY FLAG
LDTND *=*+1 ;DEVICE TABLE INDEX
MSGFLG *=*+1 ;MESSAGE FLAG
BUFPT *=*+1 ;CASSETTE BUFFER INDEX
;
;KERNAL TEMPORARY (LOCAL) VARIABLE
;
T1 *=*+1
T2 *=*+1
XSAV *=*+1
SAVX *=*+1
SVXT *=*+1
TEMP *=*+1
ALARM *=*+1 ; IRQ VARIABLE HOLDS 6526 IRQ'S
;
;KERNAL CASSETTE VARIABLES
;
ITAPE *=*+2 ;INDIRECT FOR CASSETTE CODE
CASSVO *=*+1 ;CASSETTE READ VARIABLE
ASERVO *=*+1 ;FLAGT1***INDICATES T1 TIMEOUT CASSETTE READ
CASTON *=*+1 ;HOW TO TURN ON TIMERS
RELSAL *=*+1 ;MOVEABLE START LOAD ADDR
RELSAH *=*+1
RELSAS *=*+1
OLDINV *=*+3 ;RESTORE USER IRQ AND I6509 AFTER CASSETTES
CAS1 *=*+1 ;CASSETTE SWITCH FLAG
;
;RS-232 INFORMATION STORAGE
;
M51CTR *=*+1 ;6551 CONTROL IMAGE
M51CDR *=*+1 ;6551 COMMAND IMAGE
*=*+2
RSSTAT *=*+1 ;PERM. RS-232 STATUS
DCDSR *=*+1 ;LAST DCD/DSR VALUE
RIDBS *=*+1 ;INPUT START INDEX
RIDBE *=*+1 ;INPUT END INDEX
.PAG 'DECLARE ABSOLUTE'
;
;SCREEN EDITOR ABSOLUTE
;
*=$380 ;BLOCK SOME AREA FOR EDITOR
PKYEND *=*+2 ;PROGRAM KEY BUFFER END ADDRESS
PAGSAV *=*+1 ;TEMP RAM PAGE
;
; SEE SCREEN EDITOR LISTINGS FOR OTHER VARIABLES
;
* =$3C0 ;FREE ABSOLUTE SPACE START
;
; SYSTEM WARM START VARIABLES AND VECTORS
;
* =$3F8
EVECT *=*+5
WARM =$A5 ;WARM START FLAG
WINIT =$5A ;INITILIZATION COMPLETE FLAG
* =$400
RAMLOC
.PAG 'DECLARE IPC'
;
; KERNAL INTER-PROCESS COMMUNICATION VARIABLES
* = $0800
IPBSIZ = 16 ;IPC BUFFER SIZE
;
; IPC BUFFER OFFSETS
;
IPCCMD = 0 ;IPC COMMAND
IPCJMP = 1 ;IPC JUMP ADDRESS
IPCIN = 3 ;IPC #INPUT BYTES
IPCOUT = 4 ;IPC #OUTPUT BYTES
IPCDAT = 5 ;IPC DATA BUFFER (8 BYTES MAX)
;
IPB *=*+IPBSIZ ;IPC BUFFER
IPJTAB *=*+256 ;IPC JUMP TABLE
IPPTAB *=*+128 ;IPC PARAM SPEC TABLE
;
.END