-
Notifications
You must be signed in to change notification settings - Fork 82
/
declare
353 lines (353 loc) · 9.29 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
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
.PAG 'DECLARE 10/13/82'
* =$0
;------------------------------------------------------
; 6509 USED TO EXTEND MEMORY ON BC2 & P2 SYSTEMS
; BITS 0-5 USED TO DIRECT:
; EXECUTION REGISTER (4 BITS)
; INDIRECT REGISTER (4 BITS)
;
; THESE BITS CAN BE EXPANDED TO SIXTEEN (16) SEGMENT
; 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,6809)
; $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 EXPANSION (EXTERNAL)
; SEGMENT 3 - $FFFF-$0002 RAM EXPANSION
; SEGMENT 2 - $FFFF-$0002 RAM EXPANSION
; SEGMENT 1 - $FFFF-$0002 RAM EXPANSION
; 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
;
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
;
XE6509 *=*+1 ;OLD EXECUTION SEGMENT
;
XI6509 *=*+1 ;OLD INDIRECTION SEGMENT
;
RE6509 *=*+1 ;RETURN EXECUTION SEGMENT
;
*=*+2
;
INVH *=*+1 ;USER INTERRUPT VECTOR
INVL *=*+1
;
;MONITOR INDIRECT VARIABLES
;
TMP0 *=*+2
TMP2 *=*+2
;
;OTHER MONITOR VARIABLES
;
TMPC *=*+1 ;PLACE TO SAVE LAST CMD
;
MONON = $EE00
>
.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
.IFE SYSAGE <
T6509 ;TEMPORARY STORAGE OF I6509
>
;
; CASSETTE TEMPS - OVERLAYS IPC BUFFER
;
IPOINT ;NEXT 2 BYTES USED FOR TRANSX CODE
SYNO *=*+1
DPSW *=*+1
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
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 ;BORDER COLOR
CONFIG *=*+1 ;COURSOR TYPE
BELLMD *=*+1 ;FLAG FOR EOL BELL
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
.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
;
;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
;
;KERNAL CASSETTE VARIABLES
;
.IFE SYSSIZ <
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
*=*+1
>
RELSAL *=*+1 ;MOVEABLE START LOAD ADDR
RELSAH *=*+1
RELSAS *=*+1
.IFE SYSSIZ <
*=*+1
>
FLAGT1 *=*+1 ;INDICATES T1 TIMEOUT CASSETTE READ
CASTON *=*+1 ;HOW TO TURN ON TIMERS
OLDINV *=*+3 ;RESTORE USER IRQ AND I6509 AFTER CASSETTES
CAS1 *=*+1 ;CASSETTE SWITCH FLAG
;
;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
;
;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
;
;INTERRUPT INFORMATION STORAGE
;
ALARM *=*+1 ;ALARM FLAG
.IFE SYSSIZ <
*=*+1
*=*+1
>
.PAG 'DECLARE ABSOLUTE'
;
;SCREEN EDITOR ABSOLUTE
;
*=$380 ;BLOCK SOME AREA FOR EDITOR
RVS *=*+1 ;REVERSE FIELD FLAG
LINTMP *=*+1 ;LINE # TWEEN IN AND OUT
LSTCHR *=*+1 ;LAST CHAR PRINTED
INSFLG *=*+1 ;AUTO INSERT FLAG
SCRDIS *=*+1 ;SCROLL DISABLE FLAG
BITMSK *=*+1 ;TEMPORARY BITMASK
BITABL *=*+4 ;WRAP BITMAP
KEYIDX *=*+1 ;INDEX TO PROGRAMMABLES
LOGSCR *=*+1 ;LOGICAL/PHYSICAL SCROLL FLAG
PKYEND *=*+2 ;PROGRAM KEY BUFFER END ADDRESS
INDX *=*+1 ;LAST BYTE POSISTION OF LINE
PAGSAV *=*+1 ;TEMP RAM PAGE
KEYSEG *=*+1 ;SEGMENT NUMBER FOR FUNCTION KEY RAM PAGE
FUNVEC *=*+2 ;INDIRECT JUMP VECTOR FOR FUNCTION KEYS
KEYSIZ *=*+20 ;FUNCTION KEY SIZES
;
TAB *=*+10 ;TABSTOP FLAGS (80 MAX)
;
KEYD *=*+10 ;KEY CHARACTER QUEUE
;
; 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 = 13 ;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