OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

[/] [System09/] [trunk/] [src/] [sys09bug/] [sys09atl.lst] - Blame information for rev 218

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 218 davidgb
Assembler release DWC_2.0 version 2.11
2
May 6, 2004 (c) Motorola (free ware)
3
0001                          NAM SYS09BUG FOR ATLYS
4
0000                          INCLUDE "opt_atl.asm"
5
0001                         *
6
0002                         ***************************************************
7
0003                         *   OPTION SWITCHES
8
0004                         ***************************************************
9
0005                         *
10
0006                         *
11
0007                         ** THE CONTROL PORT CAN ONLY BE ONE OF THESE
12
0008                         ** NOTE THAT THE ACIA WILL ALWAYS BE PRESET
13
0009                         ** FOR LOADING AND SAVING S1 RECORDS
14
0010                         *
15
0011                         *SWTOPT EQU $FF SWTP ACIA SERIAL CONTROL PORT
16
0012                         *ADSOPT EQU $FF ADS6809 & DG640 VIDEO DISPAY
17
0013                         *B3SOPT EQU $FF B3-SPARTAN2 FPGA VIDEO & PS2 KEYBOARD
18
0014                         *B5XOPT EQU $FF B5-X300 FPGA VIDEO & PS2 KEYBOARD
19
0015                         *S3SOPT EQU $FF SPARTAN3 STARTER FPGA VIDEO & PS2 KEYBOARD
20
0016                         *S3EOPT EQU $FF SPARTAN3E STARTER
21
0017                         *XESOPT EQU $FF XESS XSA-3S100 & XST-3.0
22
0018 00FF                    ATLOPT EQU $FF Digilent Atlys
23
0019                         *
24
0002                          END
25
0000                          INCLUDE "sys09equ.asm"
26
0001                         *
27
0002                         ***************************************************
28
0003                         *   MEMORY MAP EQUATES                            *
29
0004                         ***************************************************
30
0005 E000                    MONIO  EQU $E000  I/O SPACE
31
0006                                IFD B3SOPT
32
0007                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
33
0008                         EXTCMD EQU $00    EXTENDED OFFSET
34
0009                                ENDIF B3SOPT
35
0009                                ENDIF B3SOPT
36
0010                                IFD S3EOPT
37
0011                         MONRAM EQU $7FC0
38
0012                                ELSE
39
0013 DFC0                    MONRAM EQU $DFC0  STACK SPACE
40
0014                                ENDIF S3EOPT
41
0015 F800                    MONROM EQU $F800  START OF ROM
42
0016                                IFD S3SOPT
43
0017                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
44
0018                         EXTCMD EQU $00    EXTENDED OFFSET
45
0019                                ENDIF S3SOPT
46
0019                                ENDIF S3SOPT
47
0020                                IFD XESOPT
48
0021                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
49
0022                         EXTCMD EQU $00    EXTENDED OFFSET
50
0023                                ENDIF XESOPT
51
0023                                ENDIF XESOPT
52
0024                                IFD DE270OPT
53
0025                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
54
0026                         EXTCMD EQU $00    EXTENDED OFFSET
55
0027                                ENDIF DE270OPT
56
0027                                ENDIF DE270OPT
57
0028                         **************************************************
58
0029                         **************************************************
59
0030
60
0031                                 IFD SWTOPT
61
0032                         *
62
0033                         * SOUTH WEST TECHNICAL PRODUCTS COMPUTER
63
0034                         *
64
0035                         ACIAOPT EQU $FF ACIA AT PORT 0
65
0036                         DMAFOPT EQU $FF DMAF2 8" FLOPPY DISK BOOT
66
0037                         MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
67
0038                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
68
0039                                 ENDIF
69
0039                                 ENDIF
70
0040                         *
71
0041                                 IFD ADSOPT
72
0042                         *
73
0043                         * ACKERMAN DIGITAL ADS6809
74
0044                         *
75
0045                         DG640OPT  EQU $FF DG640 VDU AT $E800
76
0046                         *RTCOPT  EQU $FF REAL TIME CLOCK
77
0047                         PRTOPT  EQU $FF PRINTER DRIVERS
78
0048                         MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
79
0049                                 ENDIF ADSOPT
80
0049                                 ENDIF ADSOPT
81
0050                         *
82
0051                                 IFD B3SOPT
83
0052                         *
84
0053                         * BURCHED SPARTAN 2 B3+
85
0054                         *
86
0055                         ACIAOPT EQU $FF ACIA AT PORT 0
87
0056                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
88
0057                         VDUOPT  EQU $FF VDU AT $E030
89
0058                         IDEOPT  EQU $FF IDE AT $E100
90
0059                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
91
0060                         HFCOPT  EQU $FF HARDWARE FLOW CONTROL
92
0061                                 ENDIF B3SOPT
93
0061                                 ENDIF B3SOPT
94
0062                         *
95
0063                                 IFD B5XOPT
96
0064                         *
97
0065                         * BURCHED SPARTAN 2 B5-X300
98
0066                         *
99
0067                         ACIAOPT EQU $FF ACIA AT PORT 0
100
0068                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
101
0069                         VDUOPT  EQU $FF VDU AT $E030
102
0070                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
103
0071                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
104
0072                         HFCOPT  EQU $FF HARDWARE FLOW CONTROL
105
0073                                 ENDIF B5XOPT
106
0073                                 ENDIF B5XOPT
107
0074                         *
108
0075                                 IFD S3SOPT
109
0076                         *
110
0077                         * DIGILENT SPARTAN 3 STARTER
111
0078                         *
112
0079                         ACIAOPT EQU $FF ACIA AT PORT 0
113
0080                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
114
0081                         VDUOPT  EQU $FF VDU AT $E030
115
0082                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
116
0083                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
117
0084                         EXTOPT  EQU $FF EXTENDED COMMANDS
118
0085                                 ENDIF S3SOPT
119
0085                                 ENDIF S3SOPT
120
0086                         *
121
0087                                 IFD S3EOPT
122
0088                         *
123
0089                         * DIGILENT SPARTAN 3E STARTER
124
0090                         *
125
0091                         ACIAOPT EQU $FF ACIA AT PORT 0
126
0092                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
127
0093                         VDUOPT  EQU $FF VDU AT $E030
128
0094                         TRAOPT  EQU $FF PIA TRACE TIMER
129
0095                                 ENDIF S3EOPT
130
0095                                 ENDIF S3EOPT
131
0096                         *
132
0097                                 IFD XESOPT
133
0098                         *
134
0099                         * XESS SPARTAN 3 XSA-3S1000 & XST-3.0
135
0100                         *
136
0101                         ACIAOPT EQU $FF ACIA AT PORT 0
137
0102                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
138
0103                         VDUOPT  EQU $FF VDU AT $E030
139
0104                         IDEOPT  EQU $FF IDE AT $E100
140
0105                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
141
0106                         HFCOPT  EQU $FF HARDWARE FLOW CONTROL
142
0107                         EXTOPT  EQU $FF EXTENDED COMMANDS
143
0108                                 ENDIF XESOPT
144
0108                                 ENDIF XESOPT
145
0109                         *
146
0110                                 IFD DE270OPT
147
0111                         *
148
0112                         * TERASIC CYCLONE 2 DE2-70
149
0113                         *
150
0114                         ACIAOPT EQU $FF ACIA AT PORT 0
151
0115                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
152
0116                         VDUOPT  EQU $FF VDU AT $E030
153
0117                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
154
0118                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
155
0119                         EXTOPT  EQU $FF EXTENDED COMMANDS
156
0120                                 ENDIF DE270OPT
157
0120                                 ENDIF DE270OPT
158
0121                         *
159
0122                         *
160
0123                                 IFD   ACIAOPT
161
0124                         *
162
0125                         ***************************************************
163
0126                         *   SERIAL PORT                                   *
164
0127                         ***************************************************
165
0128                         *
166
0129                         ** ACIA SITS ON PORT 0
167
0130                         *
168
0131                         ACIAS   EQU   MONIO+$00   CONTROL PORT
169
0132                         *
170
0133                                 ENDIF ACIAOPT
171
0133                                 ENDIF ACIAOPT
172
0134                                 IFD   MFDCOPT
173
0135                         *
174
0136                         ***************************************************
175
0137                         *   MINIFLOPPY DRIVE                              *
176
0138                         ***************************************************
177
0139                         *
178
0140                         ** FLOPPY DISK CONTROLLER SITS ON PORT 1
179
0141                         *
180
0142                         DRVFDC  EQU   MONIO+$14
181
0143                         CMDFDC  EQU   MONIO+$18
182
0144                         SECFDC  EQU   MONIO+$1A
183
0145                         DATFDC  EQU   MONIO+$1B
184
0146                                 ENDIF MFDCOPT
185
0146                                 ENDIF MFDCOPT
186
0147                                 IFD PS2OPT
187
0148                         *
188
0149                         ***************************************************
189
0150                         *   VDU8 PS/2 KEYBOARD PORT                       *
190
0151                         ***************************************************
191
0152                         *
192
0153                         ** KEYBOARD SITS ON PORT 2
193
0154                         *
194
0155                         PS2KBD  EQU   MONIO+$20   PS/2 KEYBOARD PORT
195
0156                                 ENDIF PS2OPT
196
0156                                 ENDIF PS2OPT
197
0157                                 IFD VDUOPT
198
0158                         *
199
0159                         ***************************************************
200
0160                         *   VDU8 DISPLAY DRIVER EQUATES                   *
201
0161                         ***************************************************
202
0162                         *
203
0163                         ** VDU8 DISPLAY SITS ON PORT 3
204
0164                         *
205
0165                         VDU     EQU   MONIO+$30
206
0166                         VDUCHR  EQU   0        CHARACTER REGISTER
207
0167                         VDUATT  EQU   1        ATTRIBUTE REGISTER
208
0168                         VDUCOL  EQU   2        CURSOR COLUMN
209
0169                         VDUROW  EQU   3        CURSOR ROW
210
0170                         VDUOFF  EQU   4        ROW OFFSET
211
0171                         *
212
0172                         LINLEN  EQU   80       LENGTH OF A LINE
213
0173                         NUMLIN  EQU   25       NUMBER OF LINES
214
0174                                 ENDIF VDUOPT
215
0174                                 ENDIF VDUOPT
216
0175                         *
217
0176                                    IFD CF8OPT
218
0177                         *
219
0178                         ***************************************************
220
0179                         *   COMPACT FLASH EQUATES 8 BIT TRANSFER          *
221
0180                         ***************************************************
222
0181                         *
223
0182                         ** COMPACT FLASH SITS AT PORT 4
224
0183                         *
225
0184                         CF_BASE    EQU MONIO+$40
226
0185                         CF_DATA    EQU CF_BASE+0
227
0186                         CF_ERROR   EQU CF_BASE+1 ; read error
228
0187                         CF_FEATURE EQU CF_BASE+1 ; write feature
229
0188                         CF_SECCNT  EQU CF_BASE+2
230
0189                         CF_SECNUM  EQU CF_BASE+3
231
0190                         CF_CYLLO   EQU CF_BASE+4
232
0191                         CF_CYLHI   EQU CF_BASE+5
233
0192                         CF_HEAD    EQU CF_BASE+6
234
0193                         CF_STATUS  EQU CF_BASE+7 ; read status
235
0194                         CF_COMAND  EQU CF_BASE+7 ; write command
236
0195                         *
237
0196                         * Command Equates
238
0197                         *
239
0198                         CMDREAD    EQU $20 ; Read Single sector
240
0199                         CMDWRITE   EQU $30 ; Write Single sector
241
0200                         CMDFEATURE EQU $EF
242
0201                         FEAT8BIT   EQU $01 ; enable 8 bit transfers
243
0202                         HEADLBA    EQU $E0
244
0203                         *
245
0204                         * Status bit equates
246
0205                         *
247
0206                         BUSY       EQU $80
248
0207                         DRDY       EQU $40
249
0208                         DRQ        EQU $08
250
0209                         ERR        EQU $01
251
0210                         *
252
0211                                    ENDIF CF8OPT
253
0211                                    ENDIF CF8OPT
254
0212                         *
255
0213                                    IFD IDEOPT
256
0214                         *
257
0215                         ***************************************************
258
0216                         *   COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS)  *
259
0217                         ***************************************************
260
0218                         *
261
0219                         ** COMPACT FLASH SITS AT PORT 4
262
0220                         *
263
0221                         CF_BASE    EQU MONIO+$0100
264
0222                         CF_DATA    EQU CF_BASE+0
265
0223                         CF_ERROR   EQU CF_BASE+2 ; read error
266
0224                         CF_FEATURE EQU CF_BASE+2 ; write feature
267
0225                         CF_SECCNT  EQU CF_BASE+4
268
0226                         CF_SECNUM  EQU CF_BASE+6
269
0227                         CF_CYLLO   EQU CF_BASE+8
270
0228                         CF_CYLHI   EQU CF_BASE+10
271
0229                         CF_HEAD    EQU CF_BASE+12
272
0230                         CF_STATUS  EQU CF_BASE+14 ; read status
273
0231                         CF_COMAND  EQU CF_BASE+14 ; write command
274
0232                         CF_AUX     EQU CF_BASE+30
275
0233                         *
276
0234                         * Command Equates
277
0235                         *
278
0236                         CMDREAD    EQU $20 ; Read Single sector
279
0237                         CMDWRITE   EQU $30 ; Write Single sector
280
0238                         AUXRESET   EQU $06 ; Reset IDE
281
0239                         AUXRSTREL  EQU $02 ; Reset release IRQ masked
282
0240                         HEADLBA    EQU $E0
283
0241                         *
284
0242                         * Status bit equates
285
0243                         *
286
0244                         BUSY       EQU $80
287
0245                         DRDY       EQU $40
288
0246                         DRQ        EQU $08
289
0247                         ERR        EQU $01
290
0248                         *
291
0249                                    ENDIF CF8OPT
292
0249                                    ENDIF CF8OPT
293
0250                         *
294
0251                                 IFD RTCOPT
295
0252                         *
296
0253                         **************************************************
297
0254                         * MM58167A REAL TIME CLOCK MEMORY MAP:
298
0255                         **************************************************
299
0256                         *
300
0257                         ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5
301
0258                         *
302
0259                         CLOCK  EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS
303
0260                         *
304
0261                         * COUNTER AND COMPARITOR REGISTERS:
305
0262                         *
306
0263                         * Both the Clock Counter and Clock Comparitor
307
0264                         * consist of 8 registers for holding the time.
308
0265                         * The register offsets from the Counter and
309
0266                         * Comparitor registers are listed above.
310
0267                         *
311
0268                         COUNTR EQU CLOCK+0
312
0269                         CMPRAM EQU CLOCK+8 COMPARITOR REGISTERS
313
0270                         *
314
0271                         * CLOCK REGISTER OFFSETS:
315
0272                         * These register offsets are used for the CLOCK
316
0273                         * and comparitor ram CMPRAM.
317
0274                         *
318
0275                         S10000 EQU 0 TEN THOUNSANDTHS OF SECONDS
319
0276                         S100   EQU 1 HUNDRETHS AND TENTHS OF SECONDS
320
0277                         SECOND EQU 2
321
0278                         MINUIT EQU 3
322
0279                         HOUR   EQU 4
323
0280                         WKDAY  EQU 5
324
0281                         MTHDAY EQU 6
325
0282                         MONTH  EQU 7
326
0283                         *
327
0284                         * INTERRUPT OUTPUT REGISTERS:
328
0285                         *
329
0286                         * An interrupt output may be generated at the
330
0287                         * following rates by setting the appropriate bit
331
0288                         * in the Interrupt Control Register (CINTCR).
332
0289                         * The Interrupt Status Register (CINTSR) must be
333
0290                         * read to clear the interrupt and will return
334
0291                         * the source of the interrupt.
335
0292                         *
336
0293                         * 1/Month      Bit 7
337
0294                         * 1/Week       Bit 6
338
0295                         * 1/Day        Bit 5
339
0296                         * 1/Hour       Bit 4
340
0297                         * 1/Minuite    Bit 3
341
0298                         * 1/Second     Bit 2
342
0299                         * 10/Second    Bit 1
343
0300                         * Comparitor   Bit 0
344
0301                         *
345
0302                         CINTSR  EQU CLOCK+16 INTERRUPT STATUS REGISTER
346
0303                         CINTCR  EQU CLOCK+17 INTERRUPT CONTROL REGISTER
347
0304                         *
348
0305                         * COUNTER AND RAM RESETS; GO COMMAND.
349
0306                         *
350
0307                         * The counter and comparitor may be reset
351
0308                         * by writing $FF into CTRRES and CMPRES
352
0309                         * respectivly.
353
0310                         * A write to the Go command register (GOCMND)
354
0311                         * will reset the 1/1000ths, 1/100ths and 1/10ths
355
0312                         * of a second counter.
356
0313                         *
357
0314                         CTRRES EQU CLOCK+18 COUNTER RESET
358
0315                         CMPRES EQU CLOCK+19 COMPARITOR RAM RESET
359
0316                         GOCMND EQU CLOCK+21 GO COMMAND
360
0317                         *
361
0318                         * CLOCK STATUS REGISTER.
362
0319                         *
363
0320                         * The counter takes 61 usec. to rollover for
364
0321                         * every 1KHz clock pulse. If the Status bit is
365
0322                         * set after reading the counter, the counter
366
0323                         * should be re-read to ensure the time is correct.
367
0324                         *
368
0325                         CLKSTA EQU CLOCK+20 STATUS BIT
369
0326                         SBYINT EQU CLOCK+22 STANDBY INTERRUPT
370
0327                         TSTMOD EQU CLOCK+31 TEST MODE REGISTER
371
0328                                ENDIF RTCOPT
372
0328                                ENDIF RTCOPT
373
0329                         *
374
0330                                IFD TRAOPT
375
0331                         *
376
0332                         **************************************************
377
0333                         * PIA INTERRUPT TIMER
378
0334                         **************************************************
379
0335                         *
380
0336                         ** PIA INTERRUPT TIMER SITS ON PORT 7
381
0337                         *
382
0338                         ** PIA TIMER FOR SINGLE STEP / TRACE
383
0339                         *
384
0340                         * TADATA = Output = Timer preset register
385
0341                         * TACTRL - CA1 = input = rising edge = NMI
386
0342                         *        - CA2 = Output = Timer Reset (Active High)
387
0343                         * TBDATA = Input = Timer read back register
388
0344                         * TBCTRL - CB1 = input = rising edge = FIRQ
389
0345                         *        - CB2 = output = strobe low on write to TBDATA = Timer Preset
390
0346                         *
391
0347                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
392
0348                         * CRA1 = 1 CA1 Rising edge IRQ
393
0349                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
394
0350                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
395
0351                         * CRA4 = 1 ] CA2 = Set/Reset output
396
0352                         * CRA5 = 1 ]
397
0353                         * CRA6 = X CA2 Input Interrupt Flag
398
0354                         * CRA7 = X CA1 Interrupt Flag
399
0355                         *
400
0356                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
401
0357                         * CRB1 = 1 CB1 Rising edge IRQ
402
0358                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
403
0359                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
404
0360                         * CRB4 = 1 ] CB2 = Set/Reset output
405
0361                         * CRB5 = 1 ]
406
0362                         * CRB6 = X CB2 Input Interrupt Flag
407
0363                         * CRB7 = X CB1 Interrupt Flag
408
0364                         *
409
0365                         * DDRA = 0 TADATA = Input, DDRA = 1 TADATA = Output
410
0366                         * DDRB = 0 TBDATA = Input, DDRB = 1 TBDATA = Output
411
0367                         *
412
0368                         TADATA EQU MONIO+$70 Timer preset port
413
0369                         TACTRL EQU MONIO+$71
414
0370                         TBDATA EQU MONIO+$72 Timer read back port
415
0371                         TBCTRL EQU MONIO+$73
416
0372                         *
417
0373                         TRADEL EQU 13  Number of E cycles for RTI (May need to be fudged)
418
0374                         *
419
0375                                ENDIF TRAOPT
420
0375                                ENDIF TRAOPT
421
0376                                IFD ADSOPT
422
0377                         *
423
0378                         ***************************************************
424
0379                         *   SERIAL PORT FOR DG640                         *
425
0380                         ***************************************************
426
0381                         *
427
0382                         ** SET UP FOR ACKERMAN DIGITAL ADS6809
428
0383                         ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA
429
0384                         *
430
0385                         ACIAS   EQU   MONIO+$400   CONTROL PORT
431
0386                         *
432
0387                                 ENDIF ADSOPT
433
0387                                 ENDIF ADSOPT
434
0388                                 IFD PRTOPT
435
0389                         *
436
0390                         ***************************************************
437
0391                         * PRINTER INTERFACE                               *
438
0392                         ***************************************************
439
0393                         *
440
0394                         PADATA EQU MONIO+$404
441
0395                         PACTRL EQU MONIO+$405
442
0396                         PBDATA EQU MONIO+$406
443
0397                         PBCTRL EQU MONIO+$407
444
0398                         *
445
0399                         ** CB1  ACK.  I/P
446
0400                         ** CB2  STB.  O/P
447
0401                         ** PB0 - PB7   DATA 1 - 8   O/P
448
0402                         ** PORT A BIT ASSIGNMENT
449
0403                         *
450
0404                         PBUSY  EQU $80 I/P
451
0405                         PEMPTY EQU $40 I/P
452
0406                         SELECT EQU $20 I/P
453
0407                         PERROR EQU $10 I/P
454
0408                         PRESET EQU %00000100 O/P PA3 = 0
455
0409                         AUTOFD EQU %00001000 O/P PA2 = 0
456
0410                         DIRMSK EQU %00001100
457
0411                                ENDIF PRTOPT
458
0411                                ENDIF PRTOPT
459
0412                                IFD DG640OPT
460
0413                         *
461
0414                         ***************************************************
462
0415                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
463
0416                         ***************************************************
464
0417                         *
465
0418                         ** VIDEO DISPLAY DEFINITIONS
466
0419                         *
467
0420                         SCREEN  EQU   MONIO+$0800 START OF SCREEN MEMORY
468
0421                         LINLEN  EQU   64          LENGTH OF A LINE
469
0422                         NUMLIN  EQU   16          NUMBER OF LINES
470
0423                         SCNLEN  EQU   $400        LENGTH OF SCREEN
471
0424                                 ENDIF DG640OPT
472
0424                                 ENDIF DG640OPT
473
0425                         *
474
0426                                 IFD   DMAFOPT
475
0427                         *
476
0428                         ***************************************************
477
0429                         *   DMAF2 8" DRIVE                                *
478
0430                         ***************************************************
479
0431                         *
480
0432                         ADDREG  EQU   $F000  ADDRESS REGISTER
481
0433                         CNTREG  EQU   $F002  COUNT REGISTER
482
0434                         CCREG   EQU   $F010  CHANNEL CONTROL REGISTER
483
0435                         PRIREG  EQU   $F014  DMA PRIORITY REGISTER
484
0436                         AAAREG  EQU   $F015  ???
485
0437                         BBBREG  EQU   $F016  ???
486
0438                         COMREG  EQU   $F020  1791 COMMAND REGISTER
487
0439                         SECREG  EQU   $F022  SECTOR REGISTER
488
0440                         DRVREG  EQU   $F024  DRIVE SELECT LATCH
489
0441                         CCCREG  EQU   $F040  ???
490
0442                                 ENDIF DMAFOPT
491
0442                                 ENDIF DMAFOPT
492
0443                                 IFD DATOPT
493
0444                         **************************************************
494
0445                         * DYNAMIC ADDRESS TRANSLATION REGISTERS          *
495
0446                         **************************************************
496
0447                         *
497
0448                         IC11    EQU  $FFF0  DAT RAM CHIP
498
0449                         TSTPAT  EQU  $55AA  TEST PATTERN
499
0450                                 ENDIF DATOPT
500
0450                                 ENDIF DATOPT
501
0451                         *
502
0003                                 END
503
0000                          INCLUDE "sys09nul.asm"
504
0001                         *
505
0002                         ** SYS09BUG MONITOR EXTENSIONS
506
0003                         *
507
0004                         * FOR GENERIC SYS09BUG
508
0005                         * WITH I/O MAPPED AT $XE000
509
0006                         * AND ROM MAPPED AT $XF000
510
0007                         * (JUST A COPY OF SYS09IDE.ASM
511
0008                         * TO FILL THE MEMORY AT F000)
512
0009                         *
513
0010                         *
514
 
515
 
516
sys09nul.asm                                                                      page   2
517
0012                         *
518
0013                         ***************************************************
519
0014                         * Serial PROM register
520
0015                         ***************************************************
521
0016                         *
522
0017                         ** CONFIGURATION PROM DEFINITIONS
523
0018                         *
524
0019 E0C0                    PROMREG EQU MONIO+$C0
525
0020 0001                    PCLKHI  EQU $01     Toggle PROM Clock High
526
0021 0000                    PCLKLO  EQU $00     Toggle PROM Clock Low
527
0022 0002                    PRSTHI  EQU $02     Toggle PROM Reset High
528
0023 0000                    PRSTLO  EQU $00     Toggle PROM Reset Low
529
0024 AA55                    SYNCHI  EQU $AA55   Synch Pattern High Word
530
0025 FF00                    SYNCLO  EQU $FF00   Synch Pattern Low Word
531
0026                         *
532
0027                         *
533
0028                         ***************************************************
534
0029                         *   START OF ROM                                  *
535
0030                         ***************************************************
536
0031                         *
537
0032 F800                    MONITV EQU MONROM+0  FDB MONITOR
538
0033 F802                    NXTCMV EQU MONROM+2  FDB NEXTCMD
539
0034 F804                    INCHV  EQU MONROM+4  FDB INCH
540
0035 F806                    INCHEV EQU MONROM+6  FDB INCHE
541
0036 F808                    INCHKV EQU MONROM+8  FDB INCHEK
542
0037 F80A                    OUTCHV EQU MONROM+10 FDB OUTCH
543
0038 F80C                    PDATAV EQU MONROM+12 FDB PDATA
544
0039 F80E                    PCRLFV EQU MONROM+14 FDB PCRLF
545
0040 F810                    PSTRGV EQU MONROM+16 FDB PSTRNG
546
0041 F812                    LRAV   EQU MONROM+18 FDB LRA
547
0042                         *
548
0043                         * Condition code flags
549
0044                         *
550
0045 0001                    CFLAG   EQU $01     CARRY FLAG
551
0046 0002                    VFLAG   EQU $02     OVERFLOW FLAG
552
0047 0004                    ZFLAG   EQU $04     ZERO FLAG
553
0048 0008                    NFLAG   EQU $08     NEGATIVE FLAG
554
0049 0010                    IFLAG   EQU $10     IRQ MASK CC
555
0050 0020                    HFLAG   EQU $20     HALF CARRY
556
0051 0040                    FFLAG   EQU $40     FIRQ MASK CC
557
0052 0080                    EFLAG   EQU $80     ENTIRE FLAG
558
0053                         *
559
0054                         * Serial Port
560
0055                         *
561
Symbol 'ACIAS' undefined Pass 20056 0000                    ACIAC1  EQU ACIAS
562
Symbol 'ACIAS' undefined Pass 20057 0001                    ACIAD1  EQU ACIAS+1
563
0058 04E2                    DELCON  EQU 1250    Delay (Processor clock in MHz * 50)
564
0059                         *
565
0060                         * XMODEM Control characters
566
0061                         *
567
0062 0001                    SOH     EQU $01
568
0063 0004                    EOT     EQU $04
569
0064 0006                    ACK     EQU $06
570
0065 0015                    NAK     EQU $15
571
0066 0018                    CAN     EQU $18
572
0067                         *
573
0068                         * Some Disk Constants
574
0069                         *
575
0070 0100                    RMAXTRK EQU 256
576
0071 00FF                    RMAXSEC EQU 255
577
0072 FE01                    RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
578
0073                         *
579
0074                         * RAM SPACE
580
0075                         *
581
0076                         * PUT THIS DOWN THE BOTTOM OF MEMORY
582
0077                         *
583
0078 0100                            ORG  $0100
584
0079 0100                    DRVNUM  RMB 1
585
0080 0101                    TRACK   RMB 1
586
0081 0102                    SECTOR  RMB 1
587
0082 0103                    CHKSUM  RMB 1
588
0083 0104                    BLKNUM  RMB 1 Xmodem block number
589
0084 0105                    BYTCNT  RMB 1 Xmodem byte count
590
0085 0106                    XSTATE  RMB 2 Xmodem State Vector
591
0086 0108                    DELCNT  RMB 3  $00,$00,$00 Xmodem Poll timer
592
0087 010B                    MAXTRK  RMB 1
593
0088 010C                    MAXSEC  RMB 1
594
0089 0200                            ORG  $0200
595
0090                         *
596
0091                         * SECTOR BUFFER
597
0092                         *
598
0093 0200                    BUFFER  RMB  256
599
0094                         *
600
0095                         ****************************************
601
0096                         *
602
0097                         * START OF EXTENSION COMMANDS
603
0098                         *
604
0099                         ****************************************
605
0100                         *
606
Symbol 'MONEXT' undefined Pass 20101 0000                            ORG MONEXT
607
0102 0000 00 02                      FDB NEXTEXT   Jump to next extended command
608
0103                         *
609
0104                         ***** NEXTCMD *****
610
0105                         *
611
0106 0002 AD 9F F8 06        NEXTEXT JSR [INCHEV]  GET ONE CHAR. FROM TERMINAL
612
0107 0006 84 7F                      ANDA #$7F STRIP PARITY FROM CHAR.
613
0108 0008 1F 89                      TFR  A,B
614
0109 000A 86 20                      LDA  #$20
615
0110 000C AD 9F F8 0A                JSR [OUTCHV] PRNT SPACE
616
0111 0010 C1 60                      CMPB #$60
617
0112 0012 2F 02                      BLE NXTEX0
618
0113 0014 C0 20                      SUBB #$20
619
0114                         *
620
0115                         ***** DO TABLE LOOKUP *****
621
0116                         *   FOR COMMAND FUNCTIONS
622
0117                         *
623
0118 0016 8E 00 2C           NXTEX0  LDX #EXTTAB    POINT TO JUMP TABLE
624
0119 0019 E1 80              NXTEX1  CMPB ,X+       DOES COMMAND MATCH TABLE ENTRY ?
625
0120 001B 27 0D                      BEQ  JMPEXT    BRANCH IF MATCH FOUND
626
0121 001D 30 02                      LEAX 2,X       POINT TO NEXT ENTRY IN TABLE
627
0122 001F 8C 00 35                   CMPX #EXTEND   REACHED END OF TABLE YET ?
628
0123 0022 26 F5                      BNE  NXTEX1    IF NOT END, CHECK NEXT ENTRY
629
0124 0024 8E 00 35                   LDX  #MSGWHAT  POINT TO MSG "WHAT?"
630
0125 0027 16 02 1E                   LBRA PDATA1    PRINT MSG AND RETURN
631
0126 002A 6E 94              JMPEXT  JMP  [,X]      JUMP TO COMMAND ROUTINE
632
0127                         *
633
0128                         * EXTENDED COMMAND JUMP TABLE
634
0129                         *
635
0130 002C                    EXTTAB EQU *
636
0131 002C 42                        FCC 'B'   BOOT FLEX
637
0132 002D 00 3E                     FDB UBSUB
638
0133 002F 46                        FCC 'F'   FORMAT IDE DISK
639
0134 0030 00 E6                     FDB UFSUB
640
0135 0032 58                        FCC 'X'   XMODEM ROM DISK UPLOAD
641
0136 0033 02 B1                     FDB UXSUB
642
0137                         *
643
0138 0035                    EXTEND EQU *
644
0139                         *
645
0140 0035 57 48 41 54 20 3F  MSGWHAT FCC "WHAT ?"
646
0141 003B 0A 0D 04                   FCB $0A,$0D,$04
647
0142                         *
648
0143                         * GO TO FLEX RESIDENT IN MEMORY
649
0144                         *
650
0145 003E 8E CD 00           UBSUB   LDX #$CD00
651
0146 0041 AF 4A                      STX 10,U
652
0147 0043 1F 34                      TFR  U,S
653
0148 0045 3B                         RTI
654
0149                         *
655
0150                         * recieve char from remote drive.
656
0151                         * timeout if no response for approx 1s.
657
0152                         * Entry: no parameters
658
0153                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
659
0154                         *
660
0155 0046 34 30              RCHAR   PSHS    X,Y
661
0156                         *
662
0157 0048 8E 03 E8                   LDX     #1000         1000x inner loop
663
0158 004B 10 8E 04 E2        RCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
664
0159 004F 96 00              RCHAR2  LDA     ACIAC1        test for recieved char
665
0160 0051 47                         ASRA
666
0161 0052 25 0A                      BCS     RCHAR3        get character
667
0162 0054 31 3F                      LEAY    -1,Y          else, continue to count delay
668
0163 0056 26 F7                      BNE     RCHAR2
669
0164 0058 30 1F                      LEAX    -1,X
670
0165 005A 26 EF                      BNE     RCHAR1
671
0166 005C 35 B0                      PULS    X,Y,PC        return with error if timed out
672
0167                         *
673
0168 005E 96 01              RCHAR3  LDA     ACIAD1        return data (carry bit still set)
674
0169 0060 35 B0                      PULS    X,Y,PC
675
0170                         *
676
0171                         *
677
0172                         * transmit char to remote drive.
678
0173                         * timeout if no response for approx 1s. (allows for use of hardware flow control)
679
0174                         * Entry: (A) = char to transmit
680
0175                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
681
0176                         *
682
0177 0062 34 30              SCHAR   PSHS    X,Y
683
0178 0064 34 02                      PSHS    A
684
0179                         *
685
0180 0066 8E 03 E8                   LDX     #1000         1000x inner loop
686
0181 0069 10 8E 04 E2        SCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
687
0182 006D 96 00              SCHAR2  LDA     ACIAC1        test for space in transmit FIFO
688
0183 006F 47                         ASRA
689
0184 0070 47                         ASRA
690
0185 0071 25 0C                      BCS     SCHAR3        send character
691
0186 0073 31 3F                      LEAY    -1,Y          else, continue to count delay
692
0187 0075 26 F6                      BNE     SCHAR2
693
0188 0077 30 1F                      LEAX    -1,X
694
0189 0079 26 EE                      BNE     SCHAR1
695
0190 007B 35 02                      PULS    A
696
0191 007D 35 B0                      PULS    X,Y,PC        return with error if timed out
697
0192                         *
698
0193 007F 35 02              SCHAR3  PULS    A
699
0194 0081 97 01                      STA     ACIAD1        send data (carry bit still set)
700
0195 0083 35 B0                      PULS    X,Y,PC
701
0196                         *
702
0197                         ** 'UF' Format IDE Drive to FLEX standard.
703
0198                         *
704
0199 0085 0A 0D              DISFOS  FCB $0A,$0D
705
0200 0087 46 6F 72 6D 61 74          FCC 'Formating IDE disk... '
706
          69 6E 67 20 49 44
707
          45 20 64 69 73 6B
708
          2E 2E 2E 20
709
0201 009D 0A 0D                      FCB $0A,$0D
710
0202 009F 44 72 69 76 65 20          FCC 'Drive Number ?'
711
          4E 75 6D 62 65 72
712
          20 3F
713
0203 00AD 04                         FCB 4
714
0204 00AE 0A 0D 04           MESS6   FCB $0A,$0D,4
715
0205 00B1 49 44 45 20 64 72          FCC 'IDE drive not allocated! '
716
          69 76 65 20 6E 6F
717
          74 20 61 6C 6C 6F
718
          63 61 74 65 64 21
719
          20
720
0206 00CA 04                    FCB 4
721
0207 00CB 0A 0D              UFMSG1  FCB $0A,$0D
722
0208 00CD 46 6F 72 6D 61 74          FCC 'Format Complete'
723
          20 43 6F 6D 70 6C
724
          65 74 65
725
0209 00DC 04                         FCB 4
726
0210 00DD 49 44 45 44 49 53  VOLMSG  FCC 'IDEDISK '
727
          4B 20
728
0211 00E5 04                         FCB 4
729
0212                         *
730
0213 00E6 BD 04 B2           UFSUB   JSR  INITDR
731
0214 00E9 8E 00 85                   LDX #DISFOS
732
0215 00EC BD 02 48                   JSR PDATA1
733
0216 00EF 17 FF 54           UFSUB1  LBSR RCHAR
734
0217 00F2 24 FB                      BCC  UFSUB1
735
0218 00F4 17 FF 6B                   LBSR SCHAR
736
0219 00F7 81 30                      CMPA #'0'
737
0220 00F9 10 25 00 EF                LBLO UFEXIT
738
0221 00FD 81 33                      CMPA #'3'
739
0222 00FF 10 22 00 E9                LBHI  UFEXIT
740
0223 0103 80 30                      SUBA #'0'
741
0224 0105 1F 89                      TFR  A,B
742
0225 0107 F7 01 00                   STB DRVNUM
743
0226 010A 8E 00 FD                   LDX #DRVNUM-3
744
0227 010D BD 05 2F                   JSR DRVSEL
745
0228                         *
746
0229                         * set up free chain
747
0230                         *
748
0231 0110 8E 02 00                   LDX #BUFFER clear out buffer
749
0232 0113 4F                         CLRA
750
0233 0114 5F                         CLRB
751
0234 0115 A7 80              DFL1    STA 0,X+
752
0235 0117 5A                         DECB
753
0236 0118 26 FB                      BNE DFL1
754
0237                         *
755
0238 011A 7F 01 01                   CLR TRACK
756
0239 011D 86 01                      LDA #1
757
0240 011F B7 01 02                   STA SECTOR
758
0241 0122 8E 02 00           DFL2    LDX #BUFFER
759
0242 0125 B6 01 01                   LDA TRACK
760
0243 0128 A7 84                      STA 0,X
761
0244 012A B6 01 02                   LDA SECTOR
762
0245 012D 4C                         INCA
763
0246 012E 81 00                      CMPA #RMAXSEC+1 last sector on track?
764
0247 0130 26 04                      BNE DFL3
765
0248 0132 6C 84                      INC 0,X
766
0249 0134 86 01                      LDA #1
767
0250 0136 A7 01              DFL3    STA 1,X
768
0251 0138 B6 01 01                   LDA TRACK
769
0252 013B F6 01 02                   LDB SECTOR
770
0253 013E BD 05 0A                   JSR WRITSC
771
0254 0141 7C 01 02                   INC SECTOR
772
0255 0144 B6 01 02                   LDA SECTOR
773
0256 0147 81 00                      CMPA #RMAXSEC+1
774
0257 0149 26 D7                      BNE DFL2
775
0258 014B 86 01                      LDA #1
776
0259 014D B7 01 02                   STA  SECTOR
777
0260 0150 7C 01 01                   INC TRACK
778
0261 0153 B6 01 01                   LDA TRACK
779
0262 0156 81 00                      CMPA #RMAXTRK
780
0263 0158 26 C8                      BNE DFL2
781
0264                         * break free chain at last track/sector
782
0265 015A 8E 02 00                   LDX  #BUFFER
783
0266 015D 86 FF                      LDA  #RMAXTRK-1
784
0267 015F C6 FF                      LDB  #RMAXSEC
785
0268 0161 BD 04 E6                   JSR  READSC
786
0269 0164 8E 02 00                   LDX  #BUFFER
787
0270 0167 6F 84                      CLR  0,X
788
0271 0169 6F 01                      CLR  1,X
789
0272 016B 86 FF                      LDA  #RMAXTRK-1
790
0273 016D C6 FF                      LDB  #RMAXSEC
791
0274 016F BD 05 0A                   JSR  WRITSC
792
0275                         * set up sector structure, SIR, directory etc
793
0276 0172 8E 02 00                   LDX  #BUFFER
794
0277 0175 4F                         CLRA
795
0278 0176 C6 FF                      LDB  #RMAXSEC
796
0279 0178 BD 04 E6                   JSR  READSC
797
0280 017B 8E 02 00                   LDX  #BUFFER
798
0281 017E 6F 84                      CLR  0,X break end of directory chain
799
0282 0180 6F 01                      CLR  1,X
800
0283 0182 4F                         CLRA
801
0284 0183 C6 FF                      LDB  #RMAXSEC
802
0285 0185 BD 05 0A                   JSR  WRITSC
803
0286                         *
804
0287 0188 8E 02 00                   LDX  #BUFFER
805
0288 018B 4F                         CLRA
806
0289 018C C6 03                      LDB  #3 set up SIR
807
0290 018E BD 04 E6                   JSR  READSC
808
0291 0191 8E 02 00                   LDX  #BUFFER
809
0292 0194 6F 84                      CLR  0,X break forward link
810
0293 0196 6F 01                      CLR  1,X
811
0294                         *
812
0295 0198 34 20                      PSHS Y
813
0296 019A 10 8E 00 DD                LDY  #VOLMSG
814
0297 019E C6 10                      LDB  #16
815
0298 01A0 A6 A0              DFL4    LDA  ,Y+
816
0299 01A2 A7 85                      STA  B,X
817
0300 01A4 5C                         INCB
818
0301 01A5 C1 18                      CMPB #24
819
0302 01A7 26 F7                      BNE  DFL4
820
0303 01A9 35 20                      PULS Y
821
0304                         *
822
0305 01AB 4F                         CLRA
823
0306 01AC F6 01 00                   LDB  DRVNUM volume number
824
0307 01AF ED 88 1B                   STD  27,X
825
0308                         *
826
0309 01B2 CC 01 01                   LDD  #$0101 first trk/sec  01-01
827
0310 01B5 ED 88 1D                   STD  29,X
828
0311 01B8 86 FF                      LDA  #RMAXTRK-1
829
0312 01BA C6 FF                      LDB  #RMAXSEC
830
0313 01BC ED 88 1F                   STD  31,X
831
0314 01BF ED 88 26                   STD  38,X
832
0315 01C2 CC FE 01                   LDD  #RTOTSEC total DATA sectors (2912-14)
833
0316 01C5 ED 88 21                   STD  33,X
834
0317                         *
835
0318 01C8 86 01                      LDA #01 month   set default creation date (SYS09's birthday!)
836
0319 01CA A7 88 23                   STA 35,X
837
0320 01CD 86 07                      LDA #07 day
838
0321 01CF A7 88 24                   STA 36,X
839
0322 01D2 86 07                      LDA #07 year
840
0323 01D4 A7 88 25                   STA 37,X
841
0324                         *
842
0325 01D7 4F                 RF3     CLRA
843
0326 01D8 C6 03                      LDB  #3
844
0327 01DA BD 05 0A                   JSR  WRITSC
845
0328                         *
846
0329                         * Not sure what this is about
847
0330                         * put bootstrap on track 0 sector 1
848
0331                         *
849
0332                         *        LDX #BUFFER
850
0333                         *        CLRA
851
0334                         *        LDB #1
852
0335                         *        JSR READSC
853
0336                         *        LDX #BUFFER
854
0337                         *        LDA #$AA set the init flag
855
0338                         *        STA 0,X
856
0339                         *        LDA  #$55
857
0340                         *        STA 1,X
858
0341                         *        CLRA
859
0342                         *        LDB #1
860
0343                         *        JSR WRITSC
861
0344                         *
862
0345                         *  Write Boot sector
863
0346                         *
864
0347 01DD 8E 07 00                   LDX  #BOOT
865
0348 01E0 4F                         CLRA         TRACK 0
866
0349 01E1 C6 01                      LDB  #$01    SECTOR 1
867
0350 01E3 B7 01 01                   STA  TRACK
868
0351 01E6 F7 01 02                   STB  SECTOR
869
0352 01E9 17 03 1E                   LBSR WRITSC
870
0353                         *
871
0354 01EC 8E 00 CB           UFEXIT  LDX #UFMSG1
872
0355 01EF 7E 02 48                   JMP PDATA1
873
0356                         *
874
0357                         * ACIA INPUT TEST
875
0358                         *
876
0359 01F2 96 00              INTEST  LDA ACIAC1
877
0360 01F4 85 01                      BITA #$01
878
0361 01F6 39                         RTS
879
0362                         *
880
0363                         * RESET ACIA
881
0364                         *
882
0365 01F7 86 03              ACIRST  LDA #$03 master reset
883
0366 01F9 97 00                      STA  ACIAC1
884
0367 01FB 86 11                      LDA #$11
885
0368 01FD 97 00                      STA ACIAC1
886
0369 01FF 39                         RTS
887
0370                         *
888
0371                         * ACIA INPUT
889
0372                         *
890
0373 0200 86 10              INTER   LDA  #16
891
0374 0202 B7 01 08                   STA  DELCNT+0
892
0375 0205 7F 01 09                   CLR  DELCNT+1
893
0376 0208 7F 01 0A                   CLR  DELCNT+2
894
0377 020B 96 00              INTER0  LDA  ACIAC1
895
0378 020D 85 01                      BITA #$01
896
0379 020F 26 08                      BNE  INTER1
897
0380 0211 85 78                      BITA #$78
898
0381 0213 27 09                      BEQ  INTER2
899
0382 0215 8D E0                      BSR  ACIRST
900
0383 0217 20 E7                      BRA  INTER
901
0384                         *
902
0385 0219 96 01              INTER1  LDA  ACIAD1
903
0386 021B 1C FD                      ANDCC #$FF-VFLAG
904
0387 021D 39                         RTS
905
0388                         *
906
0389 021E 7A 01 0A           INTER2  DEC  DELCNT+2
907
0390 0221 26 E8                      BNE  INTER0
908
0391 0223 7A 01 09                   DEC  DELCNT+1
909
0392 0226 26 E3                      BNE  INTER0
910
0393 0228 7A 01 08                   DEC  DELCNT+0
911
0394 022B 26 DE                      BNE  INTER0
912
0395 022D 4F                         CLRA
913
0396 022E 1A 02                      ORCC #VFLAG
914
0397 0230 39                         RTS
915
0398                         *
916
0399                         * ACIA OUTPUT
917
0400                         *
918
0401 0231 34 02              OUTTER  PSHS A
919
0402                         *
920
0403 0233 96 00              OUTTE1  LDA ACIAC1
921
0404 0235 85 02                      BITA #$02
922
0405 0237 26 08                      BNE  OUTTE2
923
0406 0239 85 78                      BITA #$78
924
0407 023B 27 F6                      BEQ  OUTTE1
925
0408 023D 8D B8                      BSR  ACIRST
926
0409 023F 20 F2                      BRA  OUTTE1
927
0410                         *
928
0411 0241 35 02              OUTTE2  PULS A
929
0412 0243 97 01                      STA ACIAD1
930
0413 0245 39                         RTS
931
0414                         *
932
0415                         * Print Data
933
0416                         *
934
0417 0246 8D E9              PDATA0  BSR  OUTTER
935
0418 0248 A6 80              PDATA1  LDA  ,X+
936
0419 024A 81 04                      CMPA #$04
937
0420 024C 26 F8                      BNE  PDATA0
938
0421 024E 39                         RTS
939
0422                         *
940
0423                         *
941
0424                         ** 'UX' Xmodem IDE Disk upload
942
0425                         *
943
0426 024F 0D 0A              UXMES0  FCB $0D,$0A
944
0427 0251 58 6D 6F 64 65 6D          FCC 'Xmodem IDE Disk Upload'
945
          20 49 44 45 20 44
946
          69 73 6B 20 55 70
947
          6C 6F 61 64
948
0428 0267 04                         FCB 4
949
0429 0268 0D 0A              UXMES1  FCB $0D,$0A
950
0430 026A 55 70 6C 6F 61 64          FCC 'Upload Complete'
951
          20 43 6F 6D 70 6C
952
          65 74 65
953
0431 0279 04                         FCB 4
954
0432 027A 0D 0A              UXMES2  FCB $0D,$0A
955
0433 027C 55 70 6C 6F 61 64          FCC 'Upload Error'
956
          20 45 72 72 6F 72
957
0434 0288 04                         FCB 4
958
0435 0289 0D 0A              UXMSG3  FCB $0D,$0A
959
0436 028B 44 72 69 76 65 20          FCC 'Drive Number :'
960
          4E 75 6D 62 65 72
961
          20 3A
962
0437 0299 04                         FCB 4
963
0438 029A 0D 0A              UXMSG4  FCB $0D,$0A
964
0439 029C 41 72 65 20 59 6F          FCC 'Are You Sure ? (Y/N)'
965
          75 20 53 75 72 65
966
          20 3F 20 28 59 2F
967
          4E 29
968
0440 02B0 04                         FCB 4
969
0441                         *
970
0442                         * Print Banner
971
0443                         *
972
0444 02B1 8E 02 4F           UXSUB   LDX #UXMES0
973
0445 02B4 17 FF 91                   LBSR PDATA1
974
0446                         *
975
0447                         * Prompt for Disk drive number (0 to 3)
976
0448                         *
977
0449 02B7 8E 02 89                   LDX #UXMSG3
978
0450 02BA 17 FF 8B                   LBSR PDATA1
979
0451 02BD 17 FF 40           UXSUB1  LBSR INTER
980
0452 02C0 29 FB                      BVS  UXSUB1
981
0453 02C2 17 FF 6C                   LBSR OUTTER
982
0454 02C5 81 30                      CMPA #'0
983
0455 02C7 10 25 01 2E                LBLO UXEXIT
984
0456 02CB 81 33                      CMPA #'3
985
0457 02CD 10 22 01 28                LBHI UXEXIT
986
0458 02D1 80 30                      SUBA #'0
987
0459 02D3 B7 01 00                   STA  DRVNUM
988
0460                         *
989
0461                         * Report selected drive
990
0462                         *
991
0463 02D6 8E 02 89                   LDX #UXMSG3
992
0464 02D9 17 FF 6C                   LBSR PDATA1
993
0465 02DC B6 01 00                   LDA  DRVNUM
994
0466 02DF 8B 30                      ADDA #'0
995
0467 02E1 17 FF 4D                   LBSR OUTTER
996
0468                         *
997
0469                         * Ask for confirmation (Y/N)
998
0470                         *
999
0471 02E4 8E 02 9A                   LDX #UXMSG4
1000
0472 02E7 17 FF 5E                   LBSR PDATA1
1001
0473 02EA 17 FF 13           UXSUB2  LBSR INTER
1002
0474 02ED 29 FB                      BVS  UXSUB2
1003
0475 02EF 17 FF 3F                   LBSR OUTTER
1004
0476 02F2 84 5F                      ANDA #$5F
1005
0477 02F4 81 4E                      CMPA #'N
1006
0478 02F6 10 27 00 FF                LBEQ UXEXIT
1007
0479 02FA 81 59                      CMPA #'Y
1008
0480 02FC 26 B3                      BNE  UXSUB
1009
0481                         *
1010
0482                         * We have confirmation ... now load the disk image
1011
0483                         *
1012
0484 02FE 17 01 B1                   LBSR INITDR
1013
0485 0301 CE 04 22                   LDU  #XSTST
1014
0486 0304 FF 01 06                   STU  XSTATE
1015
0487 0307 86 01                      LDA  #1
1016
0488 0309 B7 01 04                   STA  BLKNUM
1017
0489                         *
1018
0490                         * Sector1
1019
0491                         *
1020
0492 030C 8E 02 00                   LDX  #BUFFER
1021
0493                         *
1022
0494 030F 4F                         CLRA         TRACK 0
1023
0495 0310 C6 01                      LDB  #$01    SECTOR 1
1024
0496 0312 B7 01 01                   STA  TRACK
1025
0497 0315 F7 01 02                   STB  SECTOR
1026
0498                         *
1027
0499 0318 17 00 EA                   LBSR XREAD
1028
0500 031B 10 25 00 E0                LBCS UXERR
1029
0501 031F 17 01 87                   LBSR XACK
1030
0502 0322 17 00 E0                   LBSR XREAD
1031
0503 0325 10 25 00 D6                LBCS UXERR
1032
0504                         *
1033
0505 0329 8E 02 00                   LDX  #BUFFER
1034
0506 032C B6 01 01                   LDA  TRACK
1035
0507 032F F6 01 02                   LDB  SECTOR
1036
0508 0332 17 01 D5                   LBSR WRITSC
1037
0509 0335 17 01 71                   LBSR XACK
1038
0510                         *
1039
0511                         * Sector 2
1040
0512                         *
1041
0513 0338 8E 02 00                   LDX  #BUFFER
1042
0514                         *
1043
0515 033B B6 01 01                   LDA  TRACK
1044
0516 033E F6 01 02                   LDB  SECTOR
1045
0517 0341 5C                         INCB
1046
0518 0342 B7 01 01                   STA  TRACK
1047
0519 0345 F7 01 02                   STB  SECTOR
1048
0520                         *
1049
0521 0348 17 00 BA                   LBSR XREAD
1050
0522 034B 10 25 00 B0                LBCS UXERR
1051
0523 034F 17 01 57                   LBSR XACK
1052
0524 0352 17 00 B0                   LBSR XREAD
1053
0525 0355 10 25 00 A6                LBCS UXERR
1054
0526                         *
1055
0527 0359 8E 02 00                   LDX  #BUFFER
1056
0528 035C B6 01 01                   LDA  TRACK
1057
0529 035F F6 01 02                   LDB  SECTOR
1058
0530 0362 17 01 A5                   LBSR WRITSC
1059
0531                         *
1060
0532 0365 17 01 41                   LBSR XACK
1061
0533                         *
1062
0534                         * Sector 3 - SIR
1063
0535                         *
1064
0536 0368 8E 02 00                   LDX  #BUFFER
1065
0537                         *
1066
0538 036B B6 01 01                   LDA  TRACK
1067
0539 036E F6 01 02                   LDB  SECTOR
1068
0540 0371 5C                         INCB
1069
0541 0372 B7 01 01                   STA  TRACK
1070
0542 0375 F7 01 02                   STB  SECTOR
1071
0543                         *
1072
0544 0378 17 00 8A                   LBSR XREAD
1073
0545 037B 10 25 00 80                LBCS UXERR
1074
0546 037F 17 01 27                   LBSR XACK
1075
0547 0382 17 00 80                   LBSR XREAD
1076
0548 0385 10 25 00 76                LBCS UXERR
1077
0549                         *
1078
0550 0389 8E 02 00                   LDX  #BUFFER
1079
0551 038C A6 88 26                   LDA  38,X
1080
0552 038F 4C                         INCA
1081
0553 0390 B7 01 0B                   STA  MAXTRK
1082
0554 0393 E6 88 27                   LDB  39,X
1083
0555 0396 5C                         INCB
1084
0556 0397 F7 01 0C                   STB  MAXSEC
1085
0557 039A B6 01 01                   LDA  TRACK
1086
0558 039D F6 01 02                   LDB  SECTOR
1087
0559 03A0 17 01 67                   LBSR WRITSC
1088
0560                         *
1089
0561 03A3 17 01 03                   LBSR XACK
1090
0562                         *
1091
0563                         * Sector 4 to Last Track & Sector
1092
0564                         *
1093
0565                         *
1094
0566 03A6 B6 01 01                   LDA  TRACK
1095
0567 03A9 F6 01 02                   LDB  SECTOR
1096
0568 03AC 5C                         INCB
1097
0569                         *
1098
0570 03AD 8E 02 00           UXLOOP  LDX  #BUFFER
1099
0571 03B0 B7 01 01                   STA  TRACK
1100
0572 03B3 F7 01 02                   STB  SECTOR
1101
0573                         *
1102
0574 03B6 17 00 4C                   LBSR XREAD
1103
0575 03B9 10 25 00 42                LBCS UXERR
1104
0576 03BD 17 00 E9                   LBSR XACK
1105
0577 03C0 17 00 42                   LBSR XREAD
1106
0578 03C3 10 25 00 38                LBCS UXERR
1107
0579                         *
1108
0580 03C7 8E 02 00                   LDX  #BUFFER
1109
0581 03CA B6 01 01                   LDA  TRACK
1110
0582 03CD F6 01 02                   LDB  SECTOR
1111
0583 03D0 17 01 37                   LBSR WRITSC
1112
0584 03D3 17 00 D3                   LBSR XACK
1113
0585                         *
1114
0586 03D6 B6 01 01                   LDA  TRACK
1115
0587 03D9 F6 01 02                   LDB  SECTOR
1116
0588 03DC 5C                         INCB
1117
0589 03DD F1 01 0C                   CMPB MAXSEC
1118
0590 03E0 26 CB                      BNE  UXLOOP
1119
0591 03E2 C6 01                      LDB  #1
1120
0592 03E4 4C                         INCA
1121
0593 03E5 B1 01 0B                   CMPA MAXTRK
1122
0594 03E8 26 C3                      BNE  UXLOOP
1123
0595                         *
1124
0596                         *
1125
0597                         *  Write Boot sector
1126
0598                         *
1127
0599 03EA 8E 07 00                   LDX  #BOOT
1128
0600 03ED 4F                         CLRA         TRACK 0
1129
0601 03EE C6 01                      LDB  #$01    SECTOR 1
1130
0602 03F0 B7 01 01                   STA  TRACK
1131
0603 03F3 F7 01 02                   STB  SECTOR
1132
0604 03F6 17 01 11                   LBSR WRITSC
1133
0605                         *
1134
0606 03F9 8E 02 68           UXEXIT  LDX  #UXMES1
1135
0607 03FC 7E 02 48                   JMP  PDATA1
1136
0608                         *
1137
0609 03FF 8E 02 7A           UXERR   LDX  #UXMES2
1138
0610 0402 16 FE 43                   LBRA PDATA1
1139
0611                         *
1140
0612                         * Get a Byte using XModem protocol
1141
0613                         * Carry clear => no errors
1142
0614                         * Carry set   => errors
1143
0615                         *
1144
0616 0405 34 40              XREAD   PSHS U
1145
0617 0407 FE 01 06                   LDU  XSTATE
1146
0618                         *
1147
0619 040A 17 FD F3           XBYTE0  LBSR INTER
1148
0620 040D 28 0A                      BVC  XBYTE1
1149
0621 040F 86 15                      LDA  #NAK
1150
0622 0411 17 FE 1D                   LBSR OUTTER
1151
0623 0414 CE 04 22                   LDU  #XSTST
1152
0624 0417 20 F1                      BRA  XBYTE0
1153
0625                         *
1154
0626 0419 AD C4              XBYTE1  JSR  ,U
1155
0627 041B 26 ED                      BNE  XBYTE0
1156
0628 041D FF 01 06                   STU  XSTATE
1157
0629 0420 35 C0                      PULS U,PC
1158
0630                         *
1159
0631                         * START - LOOK FOR SOH (START OF HEADER) = $01
1160
0632                         *
1161
0633 0422 81 01              XSTST   CMPA #SOH
1162
0634 0424 26 06                      BNE  XSTST1
1163
0635 0426 CE 04 42                   LDU  #XSTBL
1164
0636 0429 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1165
0637 042B 39                         RTS
1166
0638                         *
1167
0639 042C 81 04              XSTST1  CMPA #EOT
1168
0640 042E 26 08                      BNE  XSTST2
1169
0641 0430 86 06                      LDA  #ACK
1170
0642 0432 17 FD FC                   LBSR OUTTER
1171
0643 0435 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
1172
0644 0437 39                         RTS
1173
0645                         *
1174
0646 0438 81 18              XSTST2  CMPA #CAN
1175
0647 043A 26 03                      BNE  XSTST3
1176
0648 043C 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
1177
0649 043E 39                         RTS
1178
0650                         *
1179
0651 043F 1C FA              XSTST3  ANDCC #$FF-CFLAG-ZFLAG
1180
0652 0441 39                         RTS
1181
0653                         *
1182
0654                         * Got SOH
1183
0655                         * Now get block number
1184
0656                         *
1185
0657 0442 B1 01 04           XSTBL   CMPA BLKNUM
1186
0658 0445 26 06                      BNE  XSTBLE
1187
0659 0447 CE 04 58                   LDU  #XSTCOM
1188
0660 044A 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1189
0661 044C 39                         RTS
1190
0662                         *
1191
0663                         * Error in block number
1192
0664                         *
1193
0665 044D 86 15              XSTBLE  LDA  #NAK
1194
0666 044F 17 FD DF                   LBSR OUTTER
1195
0667 0452 CE 04 22                   LDU  #XSTST
1196
0668 0455 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1197
0669 0457 39                         RTS
1198
0670                         *
1199
0671                         * Get complement of block number
1200
0672                         *
1201
0673 0458 43                 XSTCOM  COMA
1202
0674 0459 B1 01 04                   CMPA BLKNUM
1203
0675 045C 26 EF                      BNE  XSTBLE
1204
0676 045E 7F 01 03                   CLR  CHKSUM
1205
0677 0461 86 80                      LDA  #128
1206
0678 0463 B7 01 05                   STA  BYTCNT
1207
0679 0466 CE 04 6C                   LDU  #XSTDA
1208
0680 0469 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1209
0681 046B 39                         RTS
1210
0682                         *
1211
0683                         * Get data bytes
1212
0684                         *
1213
0685 046C 34 02              XSTDA   PSHS A
1214
0686 046E BB 01 03                   ADDA CHKSUM
1215
0687 0471 B7 01 03                   STA  CHKSUM
1216
0688 0474 35 02                      PULS A
1217
0689 0476 7A 01 05                   DEC  BYTCNT
1218
0690 0479 26 03                      BNE  XSTDA1
1219
0691 047B CE 04 83                   LDU  #XSTCK
1220
0692 047E A7 80              XSTDA1  STA  ,X+
1221
0693 0480 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1222
0694 0482 39                         RTS
1223
0695                         *
1224
0696                         * Byte count reached zero
1225
0697                         * Check checksum byte
1226
0698                         *
1227
0699 0483 B1 01 03           XSTCK   CMPA CHKSUM
1228
0700 0486 26 0B                      BNE  XSTCK1 retry if wrong checksum
1229
0701                         *
1230
0702                         * Checksum OK ...
1231
0703                         * increment block number
1232
0704                         * Don't send ACK until data written to CF
1233
0705                         *
1234
0706 0488 7C 01 04                   INC  BLKNUM
1235
0707 048B CE 04 22                   LDU  #XSTST
1236
0708 048E 1C FE                      ANDCC #$FF-CFLAG No abort
1237
0709 0490 1A 04                      ORCC #ZFLAG      Valid data (exit)
1238
0710 0492 39                         RTS
1239
0711                         *
1240
0712                         * Checksum Error detected ...
1241
0713                         * Reset Sector counter in ACCB to last 128 byte boundary
1242
0714                         * and send NAK
1243
0715                         *
1244
0716 0493 34 04              XSTCK1  PSHS B
1245
0717 0495 1F 10                      TFR  X,D
1246
0718 0497 5A                         DECB
1247
0719 0498 C4 80                      ANDB #128
1248
0720 049A 1F 01                      TFR  D,X
1249
0721 049C 35 04                      PULS B
1250
0722 049E 86 15                      LDA  #NAK
1251
0723 04A0 17 FD 8E           XSTCK2  LBSR OUTTER
1252
0724 04A3 CE 04 22                   LDU  #XSTST
1253
0725 04A6 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1254
0726 04A8 39                         RTS
1255
0727                         *
1256
0728                         * Acknowledge Data Received
1257
0729                         *
1258
0730 04A9 34 02              XACK    PSHS A
1259
0731 04AB 86 06                      LDA  #ACK
1260
0732 04AD 17 FD 81                   LBSR OUTTER
1261
0733 04B0 35 82                      PULS A,PC
1262
0734                         *
1263
0735                         *
1264
0736                         ** FLEX 9 IDE DISK DRIVERS
1265
0737                         *
1266
0738                         * FOR SYS09BUG 1.2 ON THE XSA-3S1000
1267
0739                         * WITH I/O MAPPED AT $XE000
1268
0740                         * AND ROM MAPPED AT $XF000
1269
0741                         *
1270
0742                         *
1271
0743                         * INITIALIZE CF CARD FOR 8 BIT LBA MODE
1272
0744                         *
1273
Symbol 'AUXRESET' undefined Pass 20745 04B2 CC 00 00           INITDR LDD #AUXRESET
1274
Symbol 'CF_AUX' undefined Pass 20746 04B5 FD 00 00                  STD CF_AUX
1275
Symbol 'AUXRSTREL' undefined Pass 20747 04B8 CC 00 00                  LDD #AUXRSTREL
1276
Symbol 'CF_AUX' undefined Pass 20748 04BB FD 00 00                  STD CF_AUX
1277
Symbol 'HEADLBA' undefined Pass 20749 04BE CC 00 00                  LDD  #HEADLBA
1278
Symbol 'CF_HEAD' undefined Pass 20750 04C1 FD 00 00                  STD  CF_HEAD
1279
0751 04C4 16 02 E1                  LBRA WTRDY
1280
0752                         *
1281
0753                         * RESTORE DISK DRIVER (SEEK TRACK 00)
1282
0754                         *
1283
0755 04C7 8D 66              RESTR1 BSR   DRVSEL
1284
0756 04C9 4F                        CLRA           ; Track 0
1285
0757 04CA C6 01                     LDB   #$01     ; Sector 1
1286
0758                         *
1287
0759                         * Seek track and sector
1288
0760                         * A holds track number (0 - ??)
1289
0761                         * B holds sector number (1 - ??)
1290
0762                         * Sector numbers starts from 1
1291
0763                         * subtract 1 to start from sector 0 on CF
1292
0764                         *
1293
0765 04CC 34 02              SEEKTS PSHS A
1294
0766 04CE 4F                        CLRA
1295
0767 04CF 5A                        DECB
1296
Symbol 'CF_SECNUM' undefined Pass 20768 04D0 FD 00 00                  STD  CF_SECNUM
1297
0769 04D3 E6 E4                     LDB ,S
1298
Symbol 'CF_CYLLO' undefined Pass 20770 04D5 FD 00 00                  STD  CF_CYLLO
1299
0771 04D8 F6 01 00                  LDB  DRVNUM
1300
Symbol 'CF_CYLHI' undefined Pass 20772 04DB FD 00 00                  STD  CF_CYLHI
1301
0773 04DE C6 01                     LDB  #$01
1302
Symbol 'CF_SECCNT' undefined Pass 20774 04E0 FD 00 00                  STD  CF_SECCNT
1303
0775 04E3 5F                        CLRB
1304
0776 04E4 35 82                     PULS A,PC
1305
0777                         *
1306
0778                         * READ SECTORS FROM CF
1307
0779                         *
1308
0780                         *
1309
0781 04E6 8D E4              READSC BSR  SEEKTS
1310
Symbol 'CMDREAD' undefined Pass 20782 04E8 CC 00 00                  LDD  #CMDREAD ; IDE READ MULTIPLE
1311
Symbol 'CF_COMAND' undefined Pass 20783 04EB FD 00 00                  STD  CF_COMAND
1312
0784 04EE 17 02 B7                  LBSR  WTRDY
1313
0785                         *
1314
0786                         * READ LOOP
1315
0787                         *
1316
0788 04F1 34 20                     PSHS Y
1317
0789 04F3 10 8E 01 00               LDY #256
1318
0790 04F7 17 02 BD           RDLP1  LBSR  WTDRQ
1319
Symbol 'CF_DATA' undefined Pass 20791 04FA FC 00 00                  LDD  CF_DATA
1320
0792 04FD E7 80                     STB  ,X+
1321
0793 04FF 31 3F                     LEAY -1,Y
1322
0794 0501 26 F4                     BNE  RDLP1
1323
0795 0503 35 20                     PULS Y
1324
0796                         *
1325
0797 0505 17 02 A0                  LBSR  WTRDY
1326
0798 0508 5F                        CLRB
1327
0799 0509 39                        RTS
1328
0800                         *
1329
0801                         * WRITE SECTOR TO CF
1330
0802                         *
1331
0803 050A 8D C0              WRITSC BSR  SEEKTS   ; SEEK TRACK & SECTOR
1332
Symbol 'CMDWRITE' undefined Pass 20804 050C CC 00 00                  LDD  #CMDWRITE ; IDE WRITE MULTIPLE
1333
Symbol 'CF_COMAND' undefined Pass 20805 050F FD 00 00                  STD  CF_COMAND
1334
0806 0512 17 02 93                  LBSR  WTRDY
1335
0807                         *
1336
0808                         * WRITE LOOP
1337
0809                         *
1338
0810 0515 34 20                     PSHS Y
1339
0811 0517 10 8E 01 00               LDY #256
1340
0812 051B 4F                        CLRA
1341
0813 051C 17 02 98           WRTLP1 LBSR  WTDRQ
1342
0814 051F E6 80                     LDB  ,X+
1343
Symbol 'CF_DATA' undefined Pass 20815 0521 FD 00 00                  STD  CF_DATA
1344
0816 0524 31 3F                     LEAY -1,Y
1345
0817 0526 26 F4                     BNE  WRTLP1
1346
0818 0528 35 20                     PULS Y
1347
0819                         *
1348
0820 052A 17 02 7B                  LBSR  WTRDY
1349
0821 052D 5F                        CLRB
1350
0822 052E 39                        RTS
1351
0823                         *
1352
0824                         * DRIVE SELECT DISK DRIVER
1353
0825                         *
1354
0826 052F A6 03              DRVSEL LDA   3,X       GET DRIVE # FROM FCB
1355
0827 0531 81 03                     CMPA  #3
1356
0828 0533 23 01                     BLS   DRVS2     IF > 3, SET IT TO 0
1357
0829 0535 4F                        CLRA
1358
0830 0536 B7 01 00           DRVS2  STA   DRVNUM
1359
0831 0539 5F                        CLRB            ; SET Z, CLEAR C
1360
0832 053A 39                        RTS
1361
0833                         *
1362
0834                         * CHECK DRIVE READY DISK DRIVER
1363
0835                         *
1364
0836 053B A6 03              CHKDRV LDA  3,X
1365
0837 053D 5F                        CLRB             ; CLEAR C, SET Z
1366
0838 053E 39                        RTS
1367
0839                         *******************************************************
1368
0840                         *
1369
0841                         * Bootstrap FLEX Loader
1370
0842                         *
1371
0843                         * SBUG1.8 loads the bootstap loader at $C000
1372
0844                         * however the Flex adaption manual has the
1373
0845                         * bootstrap loader residing at $C100
1374
0846                         * Bootstrap Loader is position independent code
1375
0847                         *
1376
0848                         ******************************************************
1377
0849                         *
1378
0850                         * Equates
1379
0851                         *
1380
0852 C0FF                    BSSTACK EQU $C0FF
1381
0853 C300                    SCTBUF  EQU $C300
1382
0854                         *
1383
0855                         * Start of Utility
1384
0856                         *
1385
Symbol 'MONEXT' undefined Pass 20857 0700                            ORG MONEXT+$0700
1386
0858 0700 20 0B              BOOT    BRA BLOAD0
1387
0859 0702 00 00 00                   FCB 0,0,0
1388
0860 0705 00                 TRK     FCB 0        File start track
1389
0861 0706 00                 SCT     FCB 0        File start sector
1390
0862 0707 00                 DNS     FCB 0        Density Flag (not used)
1391
0863 0708 C0 00              TADR    FDB $C000    Transfer address
1392
0864 070A 00 00              LADR    FDB 0        Load Address
1393
0865 070C 00                 DRNUM   FCB 0        Drive number 0
1394
0866                         *
1395
0867 070D 10 CE C0 FF        BLOAD0  LDS  #BSSTACK   Set up Bootstrap stack
1396
0868 0711 EC 8C F1                   LDD  TRK,PCR    Set up start track and sector
1397
0869 0714 FD C3 00                   STD  SCTBUF
1398
0870 0717 10 8E C4 00                LDY  #SCTBUF+256
1399
0871                         *
1400
0872                         * Perform actual file load
1401
0873                         *
1402
0874 071B 8D 35              BLOAD1  BSR GETCH    Get acharcater
1403
0875 071D 81 02                      CMPA #$02    Data record hearder ?
1404
0876 071F 27 10                      BEQ  BLOAD2   Skip, is so
1405
0877 0721 81 16                      CMPA #$16    Xfr address hearder ?
1406
0878 0723 26 F6                      BNE BLOAD1    Loop if neither
1407
0879                         *
1408
0880                         * Get transfer address
1409
0881                         *
1410
0882 0725 8D 2B                      BSR  GETCH
1411
0883 0727 A7 8C DE                   STA  TADR,PCR
1412
0884 072A 8D 26                      BSR  GETCH
1413
0885 072C A7 8C DA                   STA  TADR+1,PCR
1414
0886 072F 20 EA                      BRA  BLOAD1
1415
0887                         *
1416
0888                         * Load data record
1417
0889                         *
1418
0890 0731 8D 1F              BLOAD2 BSR  GETCH  Get load address
1419
0891 0733 A7 8C D4                  STA  LADR,PCR
1420
0892 0736 8D 1A                     BSR  GETCH
1421
0893 0738 A7 8C D0                  STA  LADR+1,PCR
1422
0894 073B 8D 15                     BSR  GETCH  Get Bytes count
1423
0895 073D 1F 89                     TFR  A,B
1424
0896 073F 5D                        TSTB
1425
0897 0740 27 D9                     BEQ  BLOAD1 Loop if count = 0
1426
0898 0742 AE 8C C5                  LDX  LADR,PCR  Get load address
1427
0899 0745 34 14              BLOAD3 PSHS B,X
1428
0900 0747 8D 09                     BSR  GETCH  Get data character
1429
0901 0749 35 14                     PULS B,X
1430
0902 074B A7 80                     STA  ,X+    Store at load address
1431
0903 074D 5A                        DECB
1432
0904 074E 26 F5                     BNE  BLOAD3  Loop until count = 0
1433
0905 0750 20 C9                     BRA  BLOAD1
1434
0906                         *
1435
0907                         * Get Character routine
1436
0908                         * Reads a sector if needed
1437
0909                         *
1438
0910 0752 10 8C C4 00        GETCH  CMPY #SCTBUF+256 out of data ?
1439
0911 0756 26 0F                     BNE  GETCH4      Go read Character if not
1440
0912 0758 8E C3 00           GETCH2 LDX  #SCTBUF     Point to buffer
1441
0913 075B EC 84                     LDD  0,X         Get forward Link
1442
0914 075D 27 0B                     BEQ  GOFLEX      if zero, file is loaded
1443
0915 075F 8D 26                     BSR  READ        Read next sector
1444
0916 0761 26 9D                     BNE  BOOT        start over if error
1445
0917 0763 10 8E C3 04               LDY  #SCTBUF+4   Point past link
1446
0918 0767 A6 A0              GETCH4 LDA  ,Y+         Else, get a character
1447
0919 0769 39                        RTS
1448
0920                         *
1449
0921                         * File is loaded, Jump to it
1450
0922                         *
1451
0923 076A 6E 9C 9B           GOFLEX JMP  [TADR,PCR]      Jump to transfer address
1452
0924
1453
0925                         *
1454
0926                         ** FLEX 9 IDE DISK DRIVERS
1455
0927                         *
1456
0928                         * Seek track and sector
1457
0929                         * A holds track number (0 - ??)
1458
0930                         * B holds sector number (1 - ??)
1459
0931                         * Sector numbers starts from 1
1460
0932                         * subtract 1 to start from sector 0 on CF
1461
0933                         *
1462
0934 076D 34 02              SEEK   PSHS A
1463
0935 076F 4F                        CLRA
1464
0936 0770 5A                        DECB
1465
Symbol 'CF_SECNUM' undefined Pass 20937 0771 FD 00 00                  STD  CF_SECNUM
1466
0938 0774 E6 E4                     LDB  ,S
1467
Symbol 'CF_CYLLO' undefined Pass 20939 0776 FD 00 00                  STD  CF_CYLLO
1468
0940 0779 E6 8C 90                  LDB  DRNUM,PCR
1469
Symbol 'CF_CYLHI' undefined Pass 20941 077C FD 00 00                  STD  CF_CYLHI
1470
0942 077F C6 01                     LDB  #$01
1471
Symbol 'CF_SECCNT' undefined Pass 20943 0781 FD 00 00                  STD  CF_SECCNT
1472
0944 0784 5F                        CLRB
1473
0945 0785 35 82                     PULS A,PC
1474
0946                         *
1475
0947                         * READ SECTORS FROM CF
1476
0948                         *
1477
0949                         *
1478
0950 0787 8D E4              READ   BSR  SEEK
1479
Symbol 'CMDREAD' undefined Pass 20951 0789 CC 00 00                  LDD  #CMDREAD ; IDE READ MULTIPLE
1480
Symbol 'CF_COMAND' undefined Pass 20952 078C FD 00 00                  STD  CF_COMAND
1481
0953 078F 8D 17                     BSR  WTRDY
1482
0954                         *
1483
0955                         * READ LOOP
1484
0956                         *
1485
0957 0791 34 20                     PSHS Y
1486
0958 0793 10 8E 01 00               LDY #256
1487
0959 0797 8D 1E              READ1  BSR  WTDRQ
1488
Symbol 'CF_DATA' undefined Pass 20960 0799 FC 00 00                  LDD  CF_DATA
1489
0961 079C E7 80                     STB  ,X+
1490
0962 079E 31 3F                     LEAY -1,Y
1491
0963 07A0 26 F5                     BNE  READ1
1492
0964 07A2 35 20                     PULS Y
1493
0965                         *
1494
0966 07A4 8D 02                     BSR  WTRDY
1495
0967 07A6 5F                        CLRB
1496
0968 07A7 39                        RTS
1497
0969                         *
1498
0970                         * WAIT UNTIL READY
1499
0971                         *
1500
Symbol 'CF_STATUS' undefined Pass 20972 07A8 FC 00 00           WTRDY   LDD  CF_STATUS
1501
Symbol 'BUSY' undefined Pass 20973 07AB C5 00                      BITB #BUSY
1502
0974 07AD 26 F9                      BNE  WTRDY
1503
Symbol 'CF_STATUS' undefined Pass 20975 07AF FC 00 00                   LDD  CF_STATUS
1504
Symbol 'DRDY' undefined Pass 20976 07B2 C5 00                      BITB #DRDY
1505
0977 07B4 27 F2                      BEQ  WTRDY
1506
0978 07B6 39                         RTS
1507
0979                         *
1508
0980                         * WAIT FOR DATA REQUEST
1509
0981                         *
1510
Symbol 'CF_STATUS' undefined Pass 20982 07B7 FC 00 00           WTDRQ   LDD  CF_STATUS
1511
Symbol 'DRQ' undefined Pass 20983 07BA C5 00                      BITB #DRQ
1512
0984 07BC 27 F9                      BEQ  WTDRQ
1513
0985 07BE 39                         RTS
1514
0986                         *
1515
0004                                END
1516
0000                          INCLUDE "sys09bug.asm"
1517
0001                         * NAM SYS09BUG12 SYSTEM09 MONITOR
1518
0002                          OPT l
1519
 
1520
 
1521
sys09bug.asm                                                                      page   3
1522
0004                         *
1523
0005                         * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL
1524
0006                         * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY....
1525
0007                         *
1526
0008                         * ALLEN CLARK            WALLACE WATSON
1527
0009                         * 2502 REGAL OAKS LANE   4815 EAST 97th AVE.
1528
0010                         * LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617
1529
0011                         * PH. 813-977-0347       PH. 813-985-1359
1530
0012                         *
1531
0013                         * MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT
1532
0014                         *                                 2561 NANTUCKET DR APT. E
1533
0015                         *                                 ATLANTA, GA  30345
1534
0016                         *                                 PH. 404-320-1043
1535
0017                         *
1536
0018                         * MODIFIED TO SYS09BUG VER 1.0
1537
0019                         * FOR:     SYSTEM09 FPGA SYSTEM
1538
0020                         * BY:      JOHN KENT
1539
0021                         * DATE:    21ST NOVEMBER 2006
1540
0022                         * REMOVED: DISK BOOTS
1541
0023                         *          MEMORY TEST
1542
0024                         * ADDED:   ADM3A VDU DRIVER
1543
0025                         *
1544
0026                         * MODIFIED TO SYS09BUG VER 1.1
1545
0027                         * BY:      JOHN KENT
1546
0028                         * DATE:    7TH JANUARY 2007
1547
0029                         * ADDED:   'U' USER EXTENTION COMMANDS AT $F000
1548
0030                         *          CONDITIONAL ASSEMBLY OF FLOPPY BOOTS
1549
0031                         *          AND REALTIME CLOCK
1550
0032                         *
1551
0033                         * MODIFIED TO SYS09BUG VER 1.2
1552
0034                         * BY:      JOHN KENT
1553
0035                         * DATE:    21ST MAY 2007
1554
0036                         * ADDED:   COMPACT FLASH BOOT TO FPGA VERSION
1555
0037                         *          REMOVED PORT REDIRECTION ON PUNCH & LOAD
1556
0038                         *
1557
0039                         * Modified to SYS09BUG VER 1.3
1558
0040                         * BY:      JOHN KENT
1559
0041                         * DATE:    8TH JAN 2008
1560
0042                         * ADDED:   CONDITIONALS FOR SPARTAN3E STARTER BOARD
1561
0043                         *          WITH ONLY 32K OF RAM
1562
0044                         *
1563
0045                         * Modified to SYS09BUG VER 1.4
1564
0046                         * BY:      JOHN KENT
1565
0047                         * DATE:    3RD FEB 2008
1566
0048                         * ADDED:   CONDITIONALS FOR XESS BOARD WITH IDE
1567
0049                         *          SEPERATE CONDITIONAL FOR S3 STARTER AND B5-X300
1568
0050                         *          16 BIT IDE DISK BOOT STRAP ROUTINE
1569
0051                         *
1570
0052                         * Modified to SYS09BUG VER 1.5
1571
0053                         * BY:      JOHN KENT
1572
0054                         * DATE:    7TH SEP 2008
1573
0055                         * ADDED:   ADDED "B3-S2+" STRING
1574
0056                         *
1575
0057                         * Modified to SYS09BUG VER 1.6
1576
0058                         * BY:      JOHN KENT
1577
0059                         * DATE:    2ND DEC 2008
1578
0060                         * ADDED:   ADDED HARDWARE FLOW CONTROL
1579
0061                         *
1580
0062                         * CHANGED: SEPARARTED OPTIONS EQUATES AND BODY INTO SEPARATE FILES
1581
0063                         *
1582
0064                         * Modified to SYS09BUG VER 1.7
1583
0065                         * BY:     JOHN KENT
1584
0066                         * DATE:   16TH OCT 2010
1585
0067                         * ADDED:  "DE2-70" STRING
1586
0068                         *
1587
0069                         *       *** COMMANDS ***
1588
0070                         *
1589
0071                         * CONTROL A   = ALTER THE "A" ACCUMULATOR
1590
0072                         * CONTROL B   = ALTER THE "B" ACCUMULATOR
1591
0073                         * CONTROL C   = ALTER THE CONDITION CODE REGISTER
1592
0074                         * CONTROL D   = ALTER THE DIRECT PAGE REGISTER
1593
0075                         * CONTROL P   = ALTER THE PROGRAM COUNTER
1594
0076                         * CONTROL U   = ALTER USER STACK POINTER
1595
0077                         * CONTROL X   = ALTER "X" INDEX REGISTER
1596
0078                         * CONTROL Y   = ALTER "Y" INDEX REGISTER
1597
0079                         * B hhhh      = SET BREAKPOINT AT LOCATION $hhhh
1598
0080                         * D           = 5.25" MINIFLOPPY BOOT
1599
0081                         * E ssss-eeee = EXAMINE MEMORY
1600
0082                         *               FROM STARTING ADDRESS ssss
1601
0083                         *               TO ENDING ADDRESS eeee.
1602
0084                         * G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI
1603
0085                         * L           = LOAD TAPE
1604
0086                         * M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh
1605
0087                         * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR.
1606
0088                         * R           = DISPLAY REGISTER CONTENTS
1607
0089                         * S           = DISPLAY STACK FROM ssss TO $DFC0
1608
0090                         * U           = 8" DMAF2 FLOPPY BOOT
1609
0091                         * U           = USER EXTENSION COMMANDS AT $F000
1610
0092                         * X           = REMOVE ALL BREAKPOINTS
1611
0093                         *
1612
0094                         *
1613
0095                         ***************************************************
1614
0096                         *   SYS09BUG VARIABLE SPACE
1615
0097                         ***************************************************
1616
0098                         *
1617
0099 DFC0                            ORG   MONRAM
1618
0100 DFC0                    STACK   EQU   *         ; TOP OF INTERNAL STACK
1619
0101 DFC0                    NMI     RMB   2         ; USER NMI VECTOR
1620
0102 DFC2                    SWI3    RMB   2         ; SOFTWARE INTERRUPT VECTOR #3
1621
0103 DFC4                    SWI2    RMB   2         ; SOFTWARE INTERRUPT VECTOR #2
1622
0104 DFC6                    FIRQ    RMB   2         ; FAST INTERRUPT VECTOR
1623
0105 DFC8                    IRQ     RMB   2         ; INTERRUPT VECTOR
1624
0106 DFCA                    SWI     RMB   2         ; SOFTWARE INTERRUPT VECTOR
1625
0107 DFCC                    SVCVO   RMB   2         ; SUPERVISOR CALL VECTOR ORGIN
1626
0108 DFCE                    SVCVL   RMB   2         ; SUPERVISOR CALL VECTOR LIMIT
1627
0109                                 IFD DATOPT
1628
0110                         LRARAM  RMB  16         ; LRA ADDRESSES
1629
0111                                 ENDIF DATOPT
1630
0111                                 ENDIF DATOPT
1631
0112 DFD0                    CPORT   RMB   2         ; RE-VECTORABLE CONTROL PORT
1632
0113 DFD2                    ECHO    RMB   1         ; ECHO FLAG
1633
0114 DFD3                    BPTBL   RMB  24         ; BREAKPOINT TABLE BASE ADDR
1634
0115                                 IFD  TRAOPT
1635
0116                         NMISAV  RMB   2         ; NMI Jump Vector Backup
1636
0117                         TRACNT  RMB   2         ; Trace Count
1637
0118                                 ENDIF TRAOPT
1638
0118                                 ENDIF TRAOPT
1639
0119                                 IFD VDUOPT
1640
0120                         *
1641
0121                         **************************************************
1642
0122                         *   VDU8 DISPLAY DRIVER VARIABLES                                    *
1643
0123                         **************************************************
1644
0124                         *
1645
0125                         **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ******
1646
0126                         COLADX  RMB   1         ; CURSOR COLUMN
1647
0127                         ROWADX  RMB   1         ; CURSOR ROW
1648
0128                         **************************************************
1649
0129                         *
1650
0130                         NEWROW  RMB   1         ; NEW ROW TEMP FOR ESCAPE
1651
0131                         ESCFLG  RMB   1         ; ESCAPE SEQUENCE ACTIVE
1652
0132                                 ENDIF VDUOPT
1653
0132                                 ENDIF VDUOPT
1654
0133                                 IFD DG640OPT
1655
0134                         *
1656
0135                         ***************************************************
1657
0136                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
1658
0137                         ***************************************************
1659
0138                         *
1660
0139                         ***** ALWAYS KEEP THESE TWO BYTES TOGETHER *****
1661
0140                         COLADX  RMB   1        ; CURSOR COLUMN
1662
0141                         ROWADX  RMB   1        ; CURSOR ROW
1663
0142                         *************************************************
1664
0143                         CURSOR  RMB   2        ; ABSOLUTE SCREEN ADDRESS
1665
0144                         NEWROW  RMB   1        ; NEW ROW TEMP FOR ESCAPE
1666
0145                         ESCFLG  RMB   1        ; ESCAPE SEQUENCE ACTIVE
1667
0146                                 ENDIF DG640OPT
1668
0146                                 ENDIF DG640OPT
1669
0147                         *
1670
0148                         *
1671
0149                         ***************************************************
1672
0150                         *   START OF ROM                                  *
1673
0151                         ***************************************************
1674
0152                         *
1675
0153 F800                            ORG   MONROM
1676
0154 F800 F8 14                      FDB   MONITOR
1677
0155 F802 F8 48                      FDB   NEXTCMD
1678
0156 F804 FC 04                      FDB   INCH
1679
0157 F806 FB FE                      FDB   INCHE
1680
0158 F808 FC 13                      FDB   INCHEK
1681
0159 F80A FC 21                      FDB   OUTCH
1682
0160 F80C FA F6                      FDB   PDATA
1683
0161 F80E FA 85                      FDB   PCRLF
1684
0162 F810 FA 81                      FDB   PSTRNG
1685
0163 F812 FC F9                      FDB   LRA
1686
0164                         *
1687
0165                                 IFD   ADSOPT
1688
0166                                 FDB   PCHK     ; CHECK FOR PRINTER INPUT
1689
0167                                 FDB   PINIZ    ; INITIATE PRINTER
1690
0168                                 FDB   POUTCH   ; OUTPUT CH. TO PRINTER
1691
0169                                 FDB   VINIZ
1692
0170                                 FDB   VOUTCH
1693
0171                                 FDB   ACINIZ
1694
0172                                 FDB   AOUTCH
1695
0173                                 ENDIF ADSOPT
1696
0173                                 ENDIF ADSOPT
1697
0174                         *
1698
0175                         * MONITOR
1699
0176                         *
1700
0177                         * VECTOR ADDRESS STRING IS.....
1701
0178                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
1702
0179                         *
1703
0180 F814 8E FC 7C           MONITOR LDX   #RAMVEC  ; POINT TO VECTOR ADDR. STRING
1704
0181 F817 10 8E DF C0                LDY   #STACK   ; POINT TO RAM VECTOR LOCATION
1705
0182 F81B C6 10                      LDB   #$10     ; BYTES TO MOVE = 16
1706
0183 F81D A6 80              LOOPA   LDA   ,X+      ; GET VECTOR BYTE
1707
0184 F81F A7 A0                      STA   ,Y+      ; PUT VECTORS IN RAM / $DFC0-$DFCF
1708
0185 F821 5A                         DECB           ; SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
1709
0186 F822 26 F9                      BNE   LOOPA    ; CONTINUE UNTIL ALL VECTORS MOVED
1710
0187                         *
1711
0188                         * CONTENTS     FROM         TO      FUNCTION
1712
0189                         *  $F8A1       $FE40      $DFC0     USER-V
1713
0190                         *  $F8A1       $FE42      $DFC2     SWI3-V
1714
0191                         *  $F8A1       $FE44      $DFC4     SWI2-V
1715
0192                         *  $F8A1       $FE46      $DFC6     FIRQ-V
1716
0193                         *  $F8A1       $FE48      $DFC8     IRQ-V
1717
0194                         *  $FAB0       $FE4A      $DFCA     SWI-V
1718
0195                         *  $FFFF       $FE4C      $DFCC     SVC-VO
1719
0196                         *  $FFFF       $FE4E      $DFCE     SVC-VL
1720
0197                         *
1721
Symbol 'ACIAS' undefined Pass 20198 F824 8E 00 00                   LDX   #ACIAS
1722
0199 F827 BF DF D0                   STX   CPORT    ; STORE ADDR. IN RAM
1723
0200 F82A 17 01 42                   LBSR  XBKPNT   ; CLEAR OUTSTANDING BREAKPOINTS
1724
0201 F82D C6 0C                      LDB   #12      ; CLEAR 12 BYTES ON STACK
1725
0202 F82F 6F E2              CLRSTK  CLR   ,-S
1726
0203 F831 5A                         DECB
1727
0204 F832 26 FB                      BNE   CLRSTK
1728
0205 F834 30 8C DD                   LEAX  MONITOR,PCR  ; SET PC TO SBUG-E ENTRY
1729
0206 F837 AF 6A                      STX   10,S    ; ON STACK
1730
0207 F839 86 D0                      LDA   #$D0    ; PRESET CONDITION CODES ON STACK
1731
0208 F83B A7 E4                      STA   ,S
1732
0209 F83D 1F 43                      TFR   S,U
1733
0210 F83F 17 03 F4                   LBSR  IOINIZ  ; INITIALIZE CONTROL PORT
1734
0211 F842 8E FC 8C                   LDX   #MSG1   ; POINT TO MONITOR MESSAGE
1735
0212 F845 17 02 AE                   LBSR  PDATA   ; PRINT MSG
1736
0213                         *
1737
0214                                 IFD   DATOPT
1738
0215                                 LDX   #LRARAM ; POINT TO LRA RAM STORAGE AREA
1739
0216                                 CLRA  START   ; TOTAL AT ZERO
1740
0217                                 LDB   #13     ; TOTAL UP ALL ACTIVE RAM MEMORY
1741
0218                         FNDREL  TST   B,X     ; TEST FOR RAM AT NEXT LOC.
1742
0219                                 BEQ   RELPAS  ; IF NO RAM GO TO NEXT LOC.
1743
0220                                 ADDA  #4      ; ELSE ADD 4K TO TOTAL
1744
0221                                 DAA           ; ADJ. TOTAL FOR DECIMAL
1745
0222                         RELPAS  DECB          ; SUB. 1 FROM LOCS. TO TEST
1746
0223                                 BPL   FNDREL  ; PRINT TOTAL OF RAM
1747
0224                                 LBSR  OUT2H   ; OUTPUT HEX BYTE AS ASCII
1748
0225                                 LDX   #MSG2   ; POINT TO MSG 'K' CR/LF + 3 NULS
1749
0226                                 LBSR  PDATA   ; PRINT MSG
1750
0227                                 ENDIF DATOPT
1751
0227                                 ENDIF DATOPT
1752
0228                         *
1753
0229                                 IFD   TRAOPT
1754
0230                                 LBSR  TRAINZ
1755
0231                                 ENDIF TRAOPT
1756
0231                                 ENDIF TRAOPT
1757
0232                         *
1758
0233                         ***** NEXTCMD *****
1759
0234                         *
1760
0235 F848 8E FC AD           NEXTCMD LDX  #MSG3   ; POINT TO MSG ">"
1761
0236 F84B 17 02 33                   LBSR PSTRNG  ; PRINT MSG
1762
0237 F84E 17 03 B3                   LBSR INCH    ; GET ONE CHAR. FROM TERMINAL
1763
0238 F851 84 7F                      ANDA #$7F    ; STRIP PARITY FROM CHAR.
1764
0239 F853 81 0D                      CMPA #$0D    ; IS IT CARRIAGE RETURN ?
1765
0240 F855 27 F1                      BEQ  NEXTCMD ; IF CR THEN GET ANOTHER CHAR.
1766
0241 F857 1F 89                      TFR  A,B     ; PUT CHAR. IN "B" ACCUM.
1767
0242 F859 81 20                      CMPA #$20    ; IS IT CONTROL OR DATA CHAR ?
1768
0243 F85B 2C 09                      BGE  PRTCMD  ; IF CMD CHAR IS DATA, PRNT IT
1769
0244 F85D 86 5E                      LDA  #'^     ; ELSE CNTRL CHAR CMD SO...
1770
0245 F85F 17 03 BF                   LBSR OUTCH   ; PRINT "^"
1771
0246 F862 1F 98                      TFR  B,A     ; RECALL CNTRL CMD CHAR
1772
0247 F864 8B 40                      ADDA #$40    ; CONVERT IT TO ASCII LETTER
1773
0248 F866 17 03 B8           PRTCMD  LBSR OUTCH   ; PRNT CMD CHAR
1774
0249 F869 17 03 B3                   LBSR OUT1S   ; PRNT SPACE
1775
0250 F86C C1 60                      CMPB #$60
1776
0251 F86E 2F 02                      BLE  NXTCH0
1777
0252 F870 C0 20                      SUBB #$20
1778
0253                         *
1779
0254                         ***** DO TABLE LOOKUP *****
1780
0255                         *   FOR COMMAND FUNCTIONS
1781
0256                         *
1782
0257 F872 8E FC 49           NXTCH0  LDX  #JMPTAB ; POINT TO JUMP TABLE
1783
0258 F875 E1 80              NXTCHR  CMPB ,X+     ; DOES COMMAND MATCH TABLE ENTRY ?
1784
0259 F877 27 0F                      BEQ  JMPCMD  ; BRANCH IF MATCH FOUND
1785
0260 F879 30 02                      LEAX 2,X     ; POINT TO NEXT ENTRY IN TABLE
1786
0261 F87B 8C FC 7C                   CMPX #TABEND ; REACHED END OF TABLE YET ?
1787
0262 F87E 26 F5                      BNE  NXTCHR  ; IF NOT END, CHECK NEXT ENTRY
1788
0263 F880 8E FC AF                   LDX  #MSG4   ; POINT TO MSG "WHAT?"
1789
0264 F883 17 02 70                   LBSR PDATA   ; PRINT MSG
1790
0265 F886 20 C0                      BRA  NEXTCMD ; IF NO MATCH, PRMPT FOR NEW CMD
1791
0266 F888 AD 94              JMPCMD  JSR  [,X]    ; JUMP TO COMMAND ROUTINE
1792
0267 F88A 20 BC                      BRA  NEXTCMD ; PROMPT FOR NEW COMMAND
1793
0268                         *
1794
0269                         * "G" GO OR CONTINUE
1795
0270                         *
1796
0271 F88C 1F 34              GO      TFR  U,S
1797
0272 F88E 3B                 RTI     RTI
1798
0273                         *
1799
0274                         ***** "M" MEMORY EXAMINE AND CHANGE *****
1800
0275                         *
1801
0276 F88F 17 02 EB           MEMCHG  LBSR IN1ADR  ; INPUT ADDRESS
1802
0277 F892 29 2D                      BVS  CHRTN   ; IF NOT HEX, RETURN
1803
0278 F894 1F 12                      TFR  X,Y     ; SAVE ADDR IN "Y"
1804
0279 F896 8E FC B5           MEMC2   LDX  #MSG5   ; POINT TO MSG " - "
1805
0280 F899 17 01 E5                   LBSR PSTRNG  ; PRINT MSG
1806
0281 F89C 1F 21                      TFR  Y,X     ; FETCH ADDRESS
1807
0282 F89E 17 03 25                   LBSR OUT4H   ; PRINT ADDR IN HEX
1808
0283 F8A1 17 03 7B                   LBSR OUT1S   ; OUTPUT SPACE
1809
0284 F8A4 A6 A4                      LDA  ,Y      ; GET CONTENTS OF CURRENT ADDR.
1810
0285 F8A6 17 03 25                   LBSR OUT2H   ; OUTPUT CONTENTS IN ASCII
1811
0286 F8A9 17 03 73                   LBSR OUT1S   ; OUTPUT SPACE
1812
0287 F8AC 17 02 DE                   LBSR BYTE    ; LOOP WAITING FOR OPERATOR INPUT
1813
0288 F8AF 28 11                      BVC  CHANGE  ; IF VALID HEX GO CHANGE MEM. LOC.
1814
0289 F8B1 81 08                      CMPA #8      ; IS IT A BACKSPACE (CNTRL H)?
1815
0290 F8B3 27 E1                      BEQ  MEMC2   ; PROMPT OPERATOR AGAIN
1816
0291 F8B5 81 18                      CMPA #$18    ; IS IT A CANCEL (CNTRL X)?
1817
0292 F8B7 27 DD                      BEQ  MEMC2   ; PROMPT OPERATOR AGAIN
1818
0293 F8B9 81 5E                      CMPA #'^     ; IS IT AN UP ARROW?
1819
0294 F8BB 27 17                      BEQ  BACK    ; DISPLAY PREVIOUS BYTE
1820
0295 F8BD 81 0D                      CMPA #$D     ; IS IT A CR?
1821
0296 F8BF 26 0F                      BNE  FORWRD  ; DISPLAY NEXT BYTE
1822
0297 F8C1 39                 CHRTN   RTS          ; EXIT ROUTINE
1823
0298                         *
1824
0299                         *
1825
0300 F8C2 A7 A4              CHANGE  STA  ,Y      ; CHANGE BYTE IN MEMORY
1826
0301 F8C4 A1 A4                      CMPA ,Y      ; DID MEMORY BYTE CHANGE?
1827
0302 F8C6 27 08                      BEQ  FORWRD  ; $F972
1828
0303 F8C8 17 03 54                   LBSR OUT1S   ; OUTPUT SPACE
1829
0304 F8CB 86 3F                      LDA  #'?     ; LOAD QUESTION MARK
1830
0305 F8CD 17 03 51                   LBSR OUTCH   ; PRINT IT
1831
0306 F8D0 31 21              FORWRD  LEAY 1,Y     ; POINT TO NEXT HIGHER MEM LOCATION
1832
0307 F8D2 20 C2                      BRA  MEMC2   ; PRINT LOCATION & CONTENTS
1833
0308 F8D4 31 3F              BACK    LEAY -1,Y    ; POINT TO LAST MEM LOCATION
1834
0309 F8D6 20 BE                      BRA  MEMC2   ; PRINT LOCATION & CONTENTS
1835
0310                         *
1836
0311                         * "S" DISPLAY STACK
1837
0312                         * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM
1838
0313                         ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT.
1839
0314                         *
1840
0315 F8D8 17 02 22           DISSTK  LBSR PRTSP   ; PRINT CURRENT STACK POINTER
1841
0316 F8DB 1F 32                      TFR  U,Y
1842
0317 F8DD 8E DF C0                   LDX  #STACK  ; LOAD INTERNAL STACK AS UPPER LIMIT
1843
0318 F8E0 30 1F                      LEAX -1,X    ; POINT TO CURRENT STACK
1844
0319 F8E2 20 05                      BRA  MDUMP1  ; ENTER MEMORY DUMP OF STACK CONTENTS
1845
0320                         *
1846
0321                         * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII
1847
0322                         * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG.
1848
0323                         *                        UPPER ADDRESS IN X-REG.
1849
0324                         * IF HEX ADDRESSES ARE INVALID (V)=1.
1850
0325                         *
1851
0326 F8E4 17 02 8B           MEMDUMP LBSR IN2ADR  ; INPUT ADDRESS BOUNDRIES
1852
0327 F8E7 29 06                      BVS  EDPRTN  ; NEW COMMAND IF ILLEGAL HEX
1853
0328 F8E9 34 20              MDUMP1  PSHS Y       ; COMPARE LOWER TO UPPER BOUNDS
1854
0329 F8EB AC E1                      CMPX ,S++    ; LOWER BOUNDS > UPPER BOUNDS?
1855
0330 F8ED 24 01                      BCC  AJDUMP  ; IF NOT, DUMP HEX AND ASCII
1856
0331 F8EF 39                 EDPRTN  RTS          ;
1857
0332                         *
1858
0333                         * ADJUST LOWER AND UPPER ADDRESS LIMITS
1859
0334                         * TO EVEN 16 BYTE BOUNDRIES.
1860
0335                         *
1861
0336                         * IF LOWER ADDR = $4532
1862
0337                         * LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
1863
0338                         *
1864
0339                         * IF UPPER ADDR = $4567
1865
0340                         * UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
1866
0341                         *
1867
0342                         * ENTER WITH LOWER ADDRESS IN X-REG.
1868
0343                         *           -UPPER ADDRESS ON TOP OF STACK.
1869
0344                         *
1870
0345 F8F0 1F 10              AJDUMP  TFR  X,D     ; GET UPPER ADDR IN D-REG
1871
0346 F8F2 C3 00 10                   ADDD #$10    ; ADD 16 TO UPPER ADDRESS
1872
0347 F8F5 C4 F0                      ANDB #$F0    ; MASK TO EVEN 16 BYTE BOUNDRY
1873
0348 F8F7 34 06                      PSHS A,B     ; SAVE ON STACK AS UPPER DUMP LIMIT
1874
0349 F8F9 1F 20                      TFR  Y,D     ; $F9A5 GET LOWER ADDRESS IN D-REG
1875
0350 F8FB C4 F0                      ANDB #$F0    ; MASK TO EVEN 16 BYTE BOUNDRY
1876
0351 F8FD 1F 01                      TFR  D,X     ; PUT IN X-REG AS LOWER DUMP LIMIT
1877
0352 F8FF AC E4              NXTLIN  CMPX ,S      ; COMPARE LOWER TO UPPER LIMIT
1878
0353 F901 27 05                      BEQ  SKPDMP  ; IF EQUAL SKIP HEX-ASCII DUMP
1879
0354 F903 17 03 0D                   LBSR INCHEK  ; CHECK FOR INPUT FROM KEYBOARD
1880
0355 F906 27 03                      BEQ  EDUMP
1881
0356 F908 32 62              SKPDMP  LEAS 2,S     ; READJUST STACK IF NOT DUMPING
1882
0357 F90A 39                         RTS          ;
1883
0358                         *
1884
0359                         * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
1885
0360                         * FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
1886
0361                         *
1887
0362 F90B 34 10              EDUMP   PSHS X       ; PUSH LOWER ADDR LIMIT ON STACK
1888
0363 F90D 8E FC B5                   LDX  #MSG5   ; POINT TO MSG " - "
1889
0364 F910 17 01 6E                   LBSR PSTRNG  ; PRINT MSG
1890
0365 F913 AE E4                      LDX  ,S      ; LOAD LOWER ADDR FROM TOP OF STACK
1891
0366 F915 17 02 AE                   LBSR OUT4H   ; PRINT THE ADDRESS
1892
0367 F918 17 03 02                   LBSR OUT2S   ; 2 SPACES
1893
0368 F91B C6 10                      LDB  #$10    ; LOAD COUNT OF 16 BYTES TO DUMP
1894
0369 F91D A6 80              ELOOP   LDA  ,X+     ; GET FROM MEMORY HEX BYTE TO PRINT
1895
0370 F91F 17 02 AC                   LBSR OUT2H   ; OUTPUT HEX BYTE AS ASCII
1896
0371 F922 17 02 FA                   LBSR OUT1S   ; OUTPUT SPACE
1897
0372 F925 5A                         DECB         ; $F9D1 DECREMENT BYTE COUNT
1898
0373 F926 26 F5                      BNE  ELOOP   ; CONTINUE TIL 16 HEX BYTES PRINTED
1899
0374                         *
1900
0375                         * PRINT 16 ASCII CHARACTERS
1901
0376                         * IF NOT PRINTABLE OR NOT VALID
1902
0377                         * ASCII PRINT A PERIOD (.)
1903
0378 F928 17 02 F2                   LBSR OUT2S   ; 2 SPACES
1904
0379 F92B AE E1                      LDX  ,S++    ; GET LOW LIMIT FRM STACK - ADJ STACK
1905
0380 F92D C6 10                      LDB  #$10    ; SET ASCII CHAR TO PRINT = 16
1906
0381 F92F A6 80              EDPASC  LDA  ,X+     ; GET CHARACTER FROM MEMORY
1907
0382 F931 81 20                      CMPA #$20    ; IF LESS THAN $20, NON-PRINTABLE?
1908
0383 F933 25 04                      BCS  PERIOD  ; IF SO, PRINT PERIOD INSTEAD
1909
0384 F935 81 7E                      CMPA #$7E    ; IS IT VALID ASCII?
1910
0385 F937 23 02                      BLS  PRASC   ; IF SO PRINT IT
1911
0386 F939 86 2E              PERIOD  LDA  #'.     ; LOAD A PERIOD (.)
1912
0387 F93B 17 02 E3           PRASC   LBSR OUTCH   ; PRINT ASCII CHARACTER
1913
0388 F93E 5A                         DECB         ; DECREMENT COUNT
1914
0389 F93F 26 EE                      BNE  EDPASC
1915
0390 F941 20 BC                      BRA  NXTLIN
1916
0391                         *
1917
0392                         ***** "B" SET BREAKPOINT *****
1918
0393                         *
1919
0394 F943 17 02 37           BRKPNT  LBSR IN1ADR  ; GET BREAKPOINT ADDRESS
1920
0395 F946 29 1E                      BVS  EXITBP  ; EXIT IF INVALID HEX ADDR.
1921
0396 F948 8C DF C0                   CMPX #STACK  ; ADDRESS ILLEGAL IF >=$DFC0
1922
0397 F94B 24 1A                      BCC  BPERR   ; IF ERROR PRINT (?), EXIT
1923
0398 F94D 34 10                      PSHS X       ; $FA82 PUSH BP ADDRESS ON STACK
1924
0399 F94F 8E FF FF                   LDX  #$FFFF  ; LOAD DUMMY ADDR TO TEST BP TABLE
1925
0400 F952 8D 55                      BSR BPTEST   ; TEST BP TABLE FOR FREE SPACE
1926
0401 F954 35 10                      PULS X       ; POP BP ADDRESS FROM STACK
1927
0402 F956 27 0F                      BEQ  BPERR   ; (Z) SET, OUT OF BP TABLE SPACE
1928
0403 F958 A6 84                      LDA  ,X      ; GET DATA AT BREAKPOINT ADDRESS
1929
0404 F95A 81 3F                      CMPA #$3F    ; IS IT A SWI?
1930
0405 F95C 27 09                      BEQ  BPERR   ; IF SWI ALREADY, INDICATE ERROR
1931
0406 F95E A7 A0                      STA  ,Y+     ; SAVE DATA BYTE IN BP TABLE
1932
0407 F960 AF A4                      STX  ,Y      ; SAVE BP ADDRESS IN BP TABLE
1933
0408 F962 86 3F                      LDA  #$3F    ; LOAD A SWI ($3F)
1934
0409 F964 A7 84                      STA  ,X      ; SAVE SWI AT BREAKPOINT ADDRESS
1935
0410 F966 39                 EXITBP  RTS ;
1936
0411                         *
1937
0412                         *  INDICATE ERROR SETTING BREAKPOINT
1938
0413                         *
1939
0414 F967 17 02 B5           BPERR   LBSR OUT1S   ; OUTPUT SPACE
1940
0415 F96A 86 3F                      LDA  #'?     ; LOAD (?), INDICATE BREAKPOINT ERROR
1941
0416 F96C 16 02 B2                   LBRA OUTCH   ; PRINT "?"
1942
0417                         *
1943
0418                         *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
1944
0419                         *
1945
0420 F96F 10 8E DF D3        XBKPNT  LDY  #BPTBL  ; POINT TO BREAKPOINT TABLE
1946
0421 F973 C6 08                      LDB  #8      ; LOAD BREAKPOINT COUNTER
1947
0422 F975 8D 18              XBPLP   BSR  RPLSWI  ; REMOVE USED ENTRY IN BP TABLE
1948
0423 F977 5A                         DECB  $FAAC  ; DECREMENT BP COUNTER
1949
0424 F978 26 FB                      BNE  XBPLP   ; END OF BREAKPOINT TABLE?
1950
0425 F97A 39                         RTS
1951
0426                         *
1952
0427                         ***** SWI ENTRY POINT *****
1953
0428                         *
1954
0429 F97B 1F 43              SWIE    TFR  S,U     ; TRANSFER STACK TO USER POINTER
1955
0430 F97D AE 4A                      LDX  10,U    ; LOAD PC FROM STACK INTO X-REG
1956
0431 F97F 30 1F                      LEAX -1,X    ; ADJUST ADDR DOWN 1 BYTE.
1957
0432 F981 8D 26                      BSR  BPTEST  ; FIND BREAKPOINT IN BP TABLE
1958
0433 F983 27 04                      BEQ  REGPR   ; IF FOUND, REPLACE DATA AT BP ADDR
1959
0434 F985 AF 4A                      STX  10,U    ; SAVE BREAKPOINT ADDR IN STACK
1960
0435 F987 8D 06                      BSR  RPLSWI  ; GO REPLACE SWI WITH ORIGINAL DATA
1961
0436 F989 17 01 C8           REGPR   LBSR REGSTR  ; GO PRINT REGISTERS
1962
0437                         *
1963
0438                                 IFD TRAOPT
1964
0439                                 LDX #0
1965
0440                                 STX TRACNT
1966
0441                                 ENDIF TRAOPT
1967
0441                                 ENDIF TRAOPT
1968
0442                         *
1969
0443 F98C 16 FE B9                   LBRA NEXTCMD ; GET NEXT COMMAND
1970
0444                         *
1971
0445 F98F AE 21              RPLSWI  LDX  1,Y     ; LOAD BP ADDRESS FROM BP TABLE
1972
0446 F991 8C DF C0                   CMPX #STACK  ; COMPARE TO TOP AVAILABLE USER MEMORY
1973
0447 F994 24 0A                      BCC  FFSTBL  ; GO RESET TABLE ENTRY TO $FF'S
1974
0448 F996 A6 84                      LDA  ,X      ; GET DATA FROM BP ADDRESS
1975
0449 F998 81 3F                      CMPA #$3F    ; IS IT SWI?
1976
0450 F99A 26 04                      BNE  FFSTBL  ; IF NOT, RESET TABLE ENTRY TO $FF'S
1977
0451 F99C A6 A4                      LDA  ,Y      ; GET ORIGINAL DATA FROM BP TABLE
1978
0452 F99E A7 84                      STA  ,X      ; $FAD3 RESTORE DATA AT BP ADDRESS
1979
0453 F9A0 86 FF              FFSTBL  LDA  #$FF    ; LOAD $FF IN A-ACC
1980
0454 F9A2 A7 A0                      STA  ,Y+     ; RESET BREAKPOINT TABLE DATA TO $FF'S
1981
0455 F9A4 A7 A0                      STA  ,Y+     ; RESET BREAKPOINT TABLE ADDR TO $FF'S
1982
0456 F9A6 A7 A0                      STA  ,Y+
1983
0457 F9A8 39                         RTS
1984
0458                         *
1985
0459                         ** SEARCH BREAKPOINT TABLE FOR MATCH **
1986
0460                         *
1987
0461 F9A9 10 8E DF D3        BPTEST  LDY  #BPTBL  ; POINT TO BREAKPOINT TABLE
1988
0462 F9AD C6 08                      LDB  #8      ; LOAD BREAKPOINT COUNTER
1989
0463 F9AF A6 A0              FNDBP   LDA  ,Y+     ; LOAD DATA BYTE
1990
0464 F9B1 AC A1                      CMPX ,Y++    ; COMPARE ADDRESS, IS IT SAME?
1991
0465 F9B3 27 04                      BEQ  BPADJ   ; IF SO, ADJUST POINTER FOR TABLE ENTRY
1992
0466 F9B5 5A                         DECB         ; IF NOT, DECREMENT BREAKPOINT COUNTER
1993
0467 F9B6 26 F7                      BNE  FNDBP   ; AND LOOK FOR NEXT POSSIBLE MATCH
1994
0468 F9B8 39                         RTS          ;
1995
0469                         *
1996
0470                         *
1997
0471 F9B9 31 3D              BPADJ   LEAY -3,Y    ; MOVE POINTER TO BEGIN OF BP ENTRY
1998
0472 F9BB 39                         RTS
1999
0473                         *
2000
0474                                 IFD TRAOPT
2001
0475                         *
2002
0476                         ** TRACE from address AAAA BB bytes
2003
0477                         *
2004
0478                         TRACE   LBSR ALTPC1  ; SET UP NEW PC
2005
0479                                 BVS  TREXIT  ; ADDRESS ERROR, EXIT
2006
0480                                 LBSR OUT1S
2007
0481                                 LBSR IN1ADR  ; Fetch Byte Count
2008
0482                                 BVS TREXIT   ; Byte Count error, EXIT
2009
0483                                 STX TRACNT
2010
0484                         *
2011
0485                                 LDX NMI      ; Save NMI Vector
2012
0486                                 STX NMISAV
2013
0487                                 LDX #NMIE    ; Set up NMI for Tracing
2014
0488                                 STX NMI
2015
0489                                 LBSR TRAINZ  ; Initialise Hardware
2016
0490                                 BRA TRACEG   ; Start Trace
2017
0491                         TREXIT  RTS
2018
0492                         *
2019
0493                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
2020
0494                         * CRA1 = 1 CA1 Rising edge IRQ
2021
0495                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
2022
0496                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
2023
0497                         * CRA4 = 1 ] CA2 = Set/Reset output
2024
0498                         * CRA5 = 1 ]
2025
0499                         * CRA6 = X CA2 Input Interrupt Flag
2026
0500                         * CRA7 = X CA1 Interrupt Flag
2027
0501                         *
2028
0502                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
2029
0503                         * CRB1 = 1 CB1 Rising edge IRQ
2030
0504                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
2031
0505                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
2032
0506                         * CRB4 = 1 ] CB2 = Set/Reset output
2033
0507                         * CRB5 = 1 ]
2034
0508                         * CRB6 = X CB2 Input Interrupt Flag
2035
0509                         * CRB7 = X CB1 Interrupt Flag
2036
0510                         *
2037
0511                         *
2038
0512                         ** TRACE NMI ENTRY POINT
2039
0513                         *
2040
0514                         NMIE    TFR  S,U
2041
0515                                 LDA  #$36    ; Disable Interrupt, CA2 Low
2042
0516                                 STA  TACTRL
2043
0517                                 LDA  TADATA  ; Clear Interrupt flag by reading data port
2044
0518                         *
2045
0519                                 LBSR REGSTR  ; DUMP REGISTERS
2046
0520                         *
2047
0521                                 LDX  10,U    ; TEST IF NEXT INSTRUCTION IS A SWI
2048
0522                                 LDA  ,X
2049
0523                                 CMPA #$3F
2050
0524                                 BEQ  TRACEX  ; EXIT ON SWI
2051
0525                         *
2052
0526                                 LDX  TRACNT  ; CHECK IF TRACE COUNT EXPIRED
2053
0527                                 BEQ  TRACEX  ; YES, GO BACK TO THE MONITOR
2054
0528                                 LEAX -1,X    ; ECREMENT TRACE COUNT
2055
0529                                 STX  TRACNT
2056
0530                         *
2057
0531                         **  TRACE GO (RESUME SINGLE STEP)
2058
0532                         *
2059
0533                         TRACEG  TFR  U,S     ; SET UP PROGRAM STACK POINTER
2060
0534                                 LDA  #TRADEL ; SET UP TIMER DELAY (NUMB CYCLES FOR RTI+1)
2061
0535                                 STA  TADATA
2062
0536                                 LDA  #$36    ; LOAD STROBE LOW
2063
0537                                 STA  TACTRL
2064
0538                                 LDA  TADATA  ; CLEAR INTERRUPT
2065
0539                                 LDA  #$36    ; RELEASE RESET
2066
0540                                 STA  TBCTRL
2067
0541                                 LDA  #$3F    ; RELEASE LOAD, ENABLE CA1 NMI, CA1 RISING EDGE
2068
0542                                 STA  TACTRL
2069
0543                                 RTI          ; GO EXECUTE INSTRUCTION
2070
0544                         *
2071
0545                         TRACEX  LDX NMISAV   ; Restore NMI vector
2072
0546                                 STX NMI
2073
0547                                 LBRA NEXTCMD ; Jump back to the command loop.
2074
0548                         *
2075
0549                         ** TRACE HARDWARE INITIALISATION
2076
0550                         *
2077
0551                         TRAINZ  LDA #$32     ; SELECT DDRA, CA2 LOW, NMI DISABLED
2078
0552                                 STA TACTRL
2079
0553                                 LDA #$3A     ; SELECT DDRB, CB2 HIGH, FIRQ DISABLED
2080
0554                                 STA TBCTRL
2081
0555                                 LDA #$FF     ; PORTA = OUTPUT
2082
0556                                 STA TADATA
2083
0557                                 LDA #$00     ; PORTB = INPUT
2084
0558                                 STA TBDATA
2085
0559                                 LDA #$36     ; SELECT OUTPUT REGISTER A, CA2 LOW
2086
0560                                 STA TACTRL
2087
0561                                 LDA #$3E     ; SELECT OUTPUT REGISTER B, CB2 HIGH
2088
0562                                 STA TBCTRL
2089
0563                                 RTS
2090
0564                         *
2091
0565                                 ENDIF TRAOPT
2092
0565                                 ENDIF TRAOPT
2093
0566                                 IFD  MFDCOPT
2094
0567                         *
2095
0568                         ** "U" MINI DISK BOOT
2096
0569                         *
2097
0570                         MINBOOT TST  CMDFDC
2098
0571                                 CLR  DRVFDC
2099
0572                                 LDX  #$0000
2100
0573                         LOOP    LEAX $01,X
2101
0574                                 CMPX #$0000
2102
0575                                 BNE  LOOP
2103
0576                                 LDA  #$0F
2104
0577                                 STA  CMDFDC
2105
0578                                 BSR  DELAY
2106
0579                         LOOP1   LDB  CMDFDC
2107
0580                                 BITB #$01
2108
0581                                 BNE  LOOP1
2109
0582                                 LDA  #$01
2110
0583                                 STA  SECFDC
2111
0584                                 BSR  DELAY
2112
0585                                 LDA  #$8C
2113
0586                                 STA  CMDFDC
2114
0587                                 BSR  DELAY
2115
0588                                 LDX  #$C000
2116
0589                                 BRA  LOOP3
2117
0590                         LOOP2   BITB #$02
2118
0591                                 BEQ  LOOP3
2119
0592                                 LDA  DATFDC
2120
0593                                 STA ,X+
2121
0594                         LOOP3   LDB  CMDFDC
2122
0595                                 BITB #$01
2123
0596                                 BNE  LOOP2
2124
0597                                 BITB #$2C
2125
0598                                 BEQ  LOOP4
2126
0599                                 RTS
2127
0600                         *
2128
0601                         LOOP4   LDX  #$C000
2129
0602                                 STX  $0A,U
2130
0603                                 TFR  U,S
2131
0604                                 RTI
2132
0605                         *
2133
0606                         DELAY   LDB  #$04
2134
0607                         LOOP5   DECB
2135
0608                                 BNE  LOOP5
2136
0609                                 RTS
2137
0610                                 ENDIF MFDCOPT
2138
0610                                 ENDIF MFDCOPT
2139
0611                         *
2140
0612                                 IFD  DMAFOPT
2141
0613                         *
2142
0614                         *** "D" DISK BOOT FOR DMAF2 ***
2143
0615                         *
2144
0616                         DBOOT   LDA  #$DE
2145
0617                                 STA  DRVREG
2146
0618                                 LDA  #$FF
2147
0619                                 STA  PRIREG  ; $FAF8
2148
0620                                 STA  CCREG
2149
0621                                 STA  AAAREG
2150
0622                                 STA  BBBREG
2151
0623                                 TST  CCREG
2152
0624                                 LDA  #$D8
2153
0625                                 STA  COMREG
2154
0626                                 LBSR DLY
2155
0627                         DBOOT0  LDA  COMREG
2156
0628                                 BMI  DBOOT0
2157
0629                                 LDA  #$09
2158
0630                                 STA  COMREG
2159
0631                                 LBSR DLY
2160
0632                         *
2161
0633                         DISKWT  LDA  COMREG  ; FETCH DRIVE STATUS
2162
0634                                 BITA #1      ; TEST BUSY BIT
2163
0635                                 BNE  DISKWT  ; LOOP UNTIL NOT BUSY
2164
0636                         *
2165
0637                                 BITA #$10
2166
0638                                 BNE  DBOOT
2167
0639                         *
2168
0640                                 LDX  #$C000  ; LOGICAL ADDR. = $C000
2169
0641                                 BSR LRA      ; GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
2170
0642                                 ORA  #$10
2171
0643                                 STA  CCCREG
2172
0644                                 TFR  X,D
2173
0645                                 COMA  ;
2174
0646                                 COMB  ;
2175
0647                                 STD  ADDREG
2176
0648                                 LDX  #$FEFF  ; LOAD DMA BYTE COUNT = $100
2177
0649                                 STX  CNTREG  ; STORE IN COUNT REGISTER
2178
0650                                 LDA  #$FF    ; LOAD THE CHANNEL REGISTER
2179
0651                                 STA  CCREG
2180
0652                                 LDA  #$FE    ; SET CHANNEL 0
2181
0653                                 STA  PRIREG
2182
0654                                 LDA  #1      ; SET SECTOR TO "1"
2183
0655                                 STA  SECREG  ; ISSUE COMMAND
2184
0656                                 LDA  #$8C    ; SET SINGLE SECTOR READ
2185
0657                                 STA  COMREG  ; ISSUE COMMAND
2186
0658                                 BSR  DLY
2187
0659                         *
2188
0660                         * THE FOLLOWING CODE TESTS THE STATUS OF THE
2189
0661                         * CHANNEL CONTROL REGISTER. IF "D7" IS NOT
2190
0662                         * ZERO THEN IT WILL LOOP WAITING FOR "D7"
2191
0663                         * TO GO TO ZERO. IF AFTER 65,536 TRIES IT
2192
0664                         * IS STILL A ONE THE BOOT OPERATION WILL
2193
0665                         * BE STARTED OVER FROM THE BEGINING.
2194
0666                         *
2195
0667                                 CLRB         ;
2196
0668                         DBOOT1  PSHS B       ; $FB55
2197
0669                                 CLRB         ;
2198
0670                         DBOOT2  TST  CCREG
2199
0671                                 BPL  DBOOT3
2200
0672                                 DECB  ;
2201
0673                                 BNE  DBOOT2
2202
0674                                 PULS B
2203
0675                                 DECB
2204
0676                                 BNE  DBOOT1
2205
0677                                 BRA  DBOOT
2206
0678                         DBOOT3  PULS B
2207
0679                                 LDA  COMREG
2208
0680                                 BITA #$1C
2209
0681                                 BEQ  DBOOT4
2210
0682                                 RTS  ;
2211
0683                         *
2212
0684                         *
2213
0685                         DBOOT4  LDB  #$DE
2214
0686                                 STB  DRVREG
2215
0687                                 LDX  #$C000
2216
0688                                 STX  10,U
2217
0689                                 TFR  U,S     ; $FB7B
2218
0690                                 RTI  ;
2219
0691                                 ENDIF DMAFOPT
2220
0691                                 ENDIF DMAFOPT
2221
0692                         *
2222
0693                                 IFD CF8OPT
2223
0694                         *
2224
0695                         * COMPACT FLASH BOOT
2225
0696                         *
2226
0697                         CFBOOT  BSR  WAITRDY
2227
0698                                 LDA  #HEADLBA
2228
0699                                 STA  CF_HEAD
2229
0700                                 BSR  WAITRDY
2230
0701                                 LDA  #FEAT8BIT
2231
0702                                 STA  CF_FEATURE
2232
0703                                 LDA  #CMDFEATURE
2233
0704                                 STA  CF_COMAND
2234
0705                                 BSR  WAITRDY
2235
0706                         *
2236
0707                         * READ SECTORS FROM CF
2237
0708                         *
2238
0709                         CFREAD  LDA  #$01
2239
0710                                 STA  CF_SECCNT
2240
0711                                 CLRA
2241
0712                                 STA  CF_SECNUM
2242
0713                                 STA  CF_CYLLO
2243
0714                                 STA  CF_CYLHI
2244
0715                         *
2245
0716                                 LDA  #CMDREAD ; IDE READ MULTIPLE
2246
0717                                 STA  CF_COMAND
2247
0718                                 BSR  WAITRDY
2248
0719                                 LDX  #$C000
2249
0720                         *
2250
0721                         * READ LOOP
2251
0722                         *
2252
0723                         RDLOOP  BSR  WAITDRQ
2253
0724                                 LDA  CF_DATA
2254
0725                                 STA  ,X+
2255
0726                                 CMPX #$C200
2256
0727                                 BNE  RDLOOP
2257
0728                         *
2258
0729                                 LDX  #$C000
2259
0730                                 STX  $0A,U
2260
0731                                 TFR  U,S
2261
0732                                 RTI
2262
0733                         *
2263
0734                         * WAIT UNTIL READY
2264
0735                         *
2265
0736                         WAITRDY LDA  CF_STATUS
2266
0737                                 BITA #BUSY
2267
0738                                 BNE  WAITRDY
2268
0739                                 LDA  CF_STATUS
2269
0740                                 BITA #DRDY
2270
0741                                 BEQ  WAITRDY
2271
0742                                 RTS
2272
0743                         *
2273
0744                         * WAIT FOR DATA REQUEST
2274
0745                         *
2275
0746                         WAITDRQ LDA  CF_STATUS
2276
0747                                 BITA #DRQ
2277
0748                                 BEQ  WAITDRQ
2278
0749                                 RTS
2279
0750                                 ENDIF CF8OPT
2280
0750                                 ENDIF CF8OPT
2281
0751                         *
2282
0752                                 IFD IDEOPT
2283
0753                         *
2284
0754                         * XESS 16 BIT IDE BOOT
2285
0755                         *
2286
0756                         IDEBOOT LDD  #AUXRESET
2287
0757                                 STD  CF_AUX
2288
0758                                 LDD #AUXRSTREL
2289
0759                                 STD CF_AUX
2290
0760                                 LDD  #HEADLBA
2291
0761                                 STD  CF_HEAD
2292
0762                                 BSR  WAITRDY
2293
0763                         *
2294
0764                         * READ SECTORS FROM CF
2295
0765                         *
2296
0766                                 LDD  #$01
2297
0767                                 STD  CF_SECCNT
2298
0768                                 CLRB
2299
0769                                 STD  CF_SECNUM
2300
0770                                 STD  CF_CYLLO
2301
0771                                 STD  CF_CYLHI
2302
0772                         *
2303
0773                                 LDB  #CMDREAD ; IDE READ MULTIPLE
2304
0774                                 STD  CF_COMAND
2305
0775                                 BSR  WAITRDY
2306
0776                                 LDX  #$C000
2307
0777                         *
2308
0778                         * READ LOOP
2309
0779                         *
2310
0780                         RDLOOP  BSR  WAITDRQ
2311
0781                                 LDD  CF_DATA
2312
0782                                 STB  ,X+
2313
0783                                 CMPX #$C100
2314
0784                                 BNE  RDLOOP
2315
0785                         *
2316
0786                                 LDX  #$C000
2317
0787                                 STX  $0A,U
2318
0788                                 TFR  U,S
2319
0789                                 RTI
2320
0790                         *
2321
0791                         * WAIT UNTIL READY
2322
0792                         *
2323
0793                         WAITRDY LDD  CF_STATUS
2324
0794                                 BITB #BUSY
2325
0795                                 BNE  WAITRDY
2326
0796                                 LDD  CF_STATUS
2327
0797                                 BITB #DRDY
2328
0798                                 BEQ  WAITRDY
2329
0799                                 RTS
2330
0800                         *
2331
0801                         * WAIT FOR DATA REQUEST
2332
0802                         *
2333
0803                         WAITDRQ LDD  CF_STATUS
2334
0804                                 BITB #DRQ
2335
0805                                 BEQ  WAITDRQ
2336
0806                                 RTS
2337
0807                                 ENDIF IDEOPT
2338
0807                                 ENDIF IDEOPT
2339
0808                         *
2340
0809                                 IFD RTCOPT
2341
0810                         *
2342
0811                         * CLOCK INTER FACE UTILITY
2343
0812                         *
2344
0813                         * TIME   
2345
0814                         * If no argument is specified, the current time
2346
0815                         * will be displayed.
2347
0816                         *
2348
0817                         * READ A REGISTER FROM THE COUNTER.
2349
0818                         * The X Index rgister points to the register
2350
0819                         * to be read. The Status Register is checked
2351
0820                         * before and after the register is read before
2352
0821                         * returning a value in accumulator A
2353
0822                         *
2354
0823                         RDCLK  TST CLKSTA
2355
0824                                BNE RDCLK
2356
0825                         RDCLK1 LDA 0,X
2357
0826                                TST CLKSTA
2358
0827                                BNE RDCLK1
2359
0828                                RTS
2360
0829                         *
2361
0830                         * MAIN PROGRAM:
2362
0831                         *
2363
0832                         TIMSET LDX #COUNTR    ; POINT TO TIMER
2364
0833                               LBSR BYTE       ; READ HOURS
2365
0834                               BVS  SHOWTM     ; NO ARG, DISP TIME
2366
0835                               STA HOUR,X
2367
0836                               LBSR OUT1S
2368
0837                               LBSR BYTE       ; READ MINUITES
2369
0838                               BVS  SHOWTM
2370
0839                               STA MINUIT,X
2371
0840                               LBSR OUT1S
2372
0841                               LBSR BYTE       ; SECONDS.
2373
0842                               BVS SHOWTM
2374
0843                               STA SECOND,X
2375
0844                         *
2376
0845                         * DISPLAY CURRENT TIME
2377
0846                         *
2378
0847                         SHOWTM LBSR PCRLF
2379
0848                                LDX #COUNTR+HOUR
2380
0849                                LDB #3
2381
0850                         SHOWLP BSR RDCLK
2382
0851                                LBSR OUT2H
2383
0852                                LDA #':
2384
0853                                LBSR OUTCH
2385
0854                                LEAX -1,X
2386
0855                                DECB
2387
0856                                BNE SHOWLP
2388
0857                                RTS
2389
0858                         *
2390
0859                         * INITIATE CLOCK.
2391
0860                         * MASK INTERRUPTS.
2392
0861                         *
2393
0862                         CLKINZ CLR CINTCR     ; MASK ALL INTERRUPTS
2394
0863                                TST CINTSR     ; CLEAR ANY INTERRUPTS
2395
0864                                RTS
2396
0865                                ENDIF RTCOPT
2397
0865                                ENDIF RTCOPT
2398
0866                                IFD DATOPT
2399
0867                         *
2400
0868                         ***** LRA LOAD REAL ADDRESS *****
2401
0869                         *
2402
0870                         * THE FOLLOWING CODE LOADS THE 20-BIT
2403
0871                         * PHYSICAL ADDRESS OF A MEMORY BYTE
2404
0872                         * INTO THE "A" AND "X" REGISTERS. THIS
2405
0873                         * ROUTINE IS ENTERED WITH THE LOGICAL
2406
0874                         * ADDRESS OF A MEMORY BYTE IN THE "IX"
2407
0875                         * REGISTER. EXIT IS MADE WITH THE HIGH-
2408
0876                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL
2409
0877                         * ADDRESS IN THE "A" REGISTER, AND THE
2410
0878                         * LOW-ORDER 16-BITS OF THE 20-BIT
2411
0879                         * PHYSICAL ADDRESS IN THE "IX" REGISTER.
2412
0880                         * ALL OTHER REGISTERS ARE PRESERVED.
2413
0881                         * THIS ROUTINE IS REQUIRED SINCE THE
2414
0882                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST
2415
0883                         * PRESENT PHYSICAL ADDRESSES ON THE
2416
0884                         * SYSTEM BUS.
2417
0885                         *
2418
0886                         LRA     PSHS A,B,X,Y  ; PUSH REGISTERS ON STACK
2419
0887                                 LDA  2,S      ; GET MSB LOGICAL ADDR FRM X REG ON STACK
2420
0888                                 LSRA          ;
2421
0889                                 LSRA          ; ADJ FOR INDEXED INTO
2422
0890                                 LSRA          ; CORRESPONDING LOCATION
2423
0891                                 LSRA          ; IN LRA TABLE
2424
0892                                 LDY  #LRARAM  ; LOAD LRA TABLE BASE ADDRESS
2425
0893                                 LDB  A,Y      ; GET PHYSICAL ADDR. DATA FROM LRA TABLE
2426
0894                                 LSRB          ; ADJ. REAL ADDR. TO REFLECT EXTENDED
2427
0895                                 LSRB          ; PHYSICAL ADDRESS.
2428
0896                                 LSRB          ; EXTENDED MS 4-BITS ARE RETURNED
2429
0897                                 LSRB          ; IN THE "A" ACCUMULATOR
2430
0898                                 STB  ,S       ; MS 4 BITS IN A ACCUM. STORED ON STACK
2431
0899                                 LDB  A,Y      ; LOAD REAL ADDRESS DATA FROM LRA TABLE
2432
0900                                 COMB          ; COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
2433
0901                                 ASLB          ; ADJ DATA FOR RELOCATION IN X REG
2434
0902                                 ASLB          ;
2435
0903                                 ASLB          ; $FB97
2436
0904                                 ASLB          ;
2437
0905                                 LDA  2,S      ; GET MS BYTE OF LOGICAL ADDR.
2438
0906                                 ANDA #$0F     ; MASK MS NIBBLE OF LOGICAL ADDRESS
2439
0907                                 STA  2,S      ; SAVE IT IN X REG ON STACK
2440
0908                                 ORB  2,S      ; SET MS BYTE IN X REG TO ADJ PHY ADDR.
2441
0909                         *
2442
0910                         * PLUS LS NIBBLE OF LOGICAL ADDRESS
2443
0911                         *
2444
0912                                 STB  2,S      ; SAVE AS LS 16 BITS OF PHY ADDR IN X REG ON STACK
2445
0913                                 PULS A,B,X,Y,PC ; POP REGS. FROM STACK
2446
0914                                 ENDIF DATOPT
2447
0914                                 ENDIF DATOPT
2448
0915                         *
2449
0916                         * DELAY LOOP
2450
0917                         *
2451
0918 F9BC 34 04              DLY     PSHS B        ; SAVE CONTENTS OF "B"
2452
0919 F9BE C6 20                      LDB  #$20     ; GET LOOP DELAY VALUE
2453
0920 F9C0 5A                 SUB1    DECB          ; SUBTRACT ONE FROM VALUE
2454
0921 F9C1 26 FD                      BNE  SUB1     ; LOOP UNTIL ZERO
2455
0922 F9C3 35 84                      PULS B,PC     ; RESTORE CONTENTS OF "B"
2456
0923                         * RTS  ;
2457
0924                         *
2458
0925                         ***** "L" LOAD MIKBUG TAPE *****
2459
0926                         *
2460
0927 F9C5 BD FC 36           LOAD    JSR  ACINIZ
2461
0928 F9C8 86 11                      LDA  #$11     ; LOAD 'DC1' CASS. READ ON CODE
2462
0929 F9CA 17 02 54                   LBSR OUTCH    ; OUTPUT IT TO TERMINAL PORT
2463
0930 F9CD 7F DF D2                   CLR  ECHO     ; TURN OFF ECHO FLAG
2464
0931 F9D0 17 02 26           LOAD1   LBSR ECHON    ; INPUT 8 BIT BYTE WITH NO ECHO
2465
0932 F9D3 81 53              LOAD2   CMPA #'S      ; IS IT AN "S", START CHARACTER ?
2466
0933 F9D5 26 F9                      BNE  LOAD1    ; IF NOT, DISCARD AND GET NEXT CHAR.
2467
0934 F9D7 17 02 1F                   LBSR ECHON
2468
0935 F9DA 81 39                      CMPA #'9      ; IS IT A "9" , END OF FILE CHAR ?
2469
0936 F9DC 27 3D                      BEQ  LOAD21   ; IF SO, EXIT LOAD
2470
0937 F9DE 81 31                      CMPA #'1      ; IS IT A "1" , FILE LOAD CHAR ?
2471
0938 F9E0 26 F1                      BNE  LOAD2    ; IF NOT, LOOK FOR START CHAR.
2472
0939 F9E2 17 01 A8                   LBSR BYTE     ; INPUT BYTE COUNT
2473
0940 F9E5 34 02                      PSHS A        ; PUSH COUNT ON STACK
2474
0941 F9E7 29 26                      BVS  LODERR   ; (V) C-CODE SET, ILLEGAL HEX
2475
0942 F9E9 17 01 91                   LBSR IN1ADR   ; INPUT LOAD ADDRESS
2476
0943 F9EC 29 21                      BVS  LODERR   ; (V) C-CODE SET, ADDR NOT HEX
2477
0944 F9EE 34 10                      PSHS X        ; PUSH ADDR ON STACK
2478
0945 F9F0 E6 E0                      LDB  ,S+      ; LOAD MSB OF ADDR AS CHECKSUM BYTE
2479
0946 F9F2 EB E0                      ADDB ,S+      ; ADD LSB OF ADDR TO CHECKSUM
2480
0947 F9F4 EB E4                      ADDB ,S       ; ADD BYTE COUNT BYTE TO CHECKSUM
2481
0948 F9F6 6A E4                      DEC  ,S       ; $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
2482
0949 F9F8 6A E4                      DEC  ,S       ; ADDRESS BYTES.
2483
0950 F9FA 34 04              LOAD10  PSHS B        ; PUSH CHECKSUM ON STACK
2484
0951 F9FC 17 01 8E                   LBSR BYTE     ; INPUT DATA BYTE (2 HEX CHAR)
2485
0952 F9FF 35 04                      PULS B        ; POP CHECKSUM FROM STACK
2486
0953 FA01 29 0C                      BVS  LODERR   ; (V) SET, DATA BYTE NOT HEX
2487
0954 FA03 34 02                      PSHS A        ; PUSH DATA BYTE ON STACK
2488
0955 FA05 EB E0                      ADDB ,S+      ; ADD DATA TO CHECKSUM, AUTO INC STACK
2489
0956 FA07 6A E4                      DEC  ,S       ; DECREMENT BYTE COUNT 1
2490
0957 FA09 27 05                      BEQ  LOAD16   ; IF BYTE COUNT ZERO, TEST CHECKSUM
2491
0958 FA0B A7 80                      STA  ,X+      ; SAVE DATA BYTE IN MEMORY
2492
0959 FA0D 20 EB                      BRA  LOAD10   ; GET NEXT DATA BYTE
2493
0960 FA0F 5F                 LODERR  CLRB          ; ERROR CONDITION, ZERO CHECKSUM  ;
2494
0961 FA10 35 02              LOAD16  PULS A        ; ADJUST STACK (REMOVE BYTE COUNT)
2495
0962 FA12 C1 FF                      CMPB #$FF     ; CHECKSUM OK?
2496
0963 FA14 27 BA                      BEQ  LOAD1    ; IF SO, LOAD NEXT LINE
2497
0964 FA16 86 3F                      LDA  #'?      ; LOAD (?) ERROR INDICATOR
2498
0965 FA18 17 02 06                   LBSR OUTCH    ; OUTPUT IT TO TERMINAL
2499
0966 FA1B 73 DF D2           LOAD21  COM  ECHO     ; TURN ECHO ON
2500
0967 FA1E 86 13                      LDA  #$13     ; $FC5F LOAD 'DC3' CASS. READ OFF CODE
2501
0968 FA20 16 01 FE                   LBRA OUTCH    ; OUTPUT IT
2502
0969                         *
2503
0970                         ***** "P" PUNCH MIKBUG TAPE *****
2504
0971                         *
2505
0972 FA23 6F E2              PUNCH   CLR  ,-S      ; CLEAR RESERVED BYTE ON STACK
2506
0973 FA25 17 01 4A                   LBSR IN2ADR   ; GET BEGIN AND END ADDRESS
2507
0974 FA28 34 30                      PSHS X,Y      ; SAVE ADDRESSES ON STACK
2508
0975 FA2A 29 4D                      BVS  PUNEXT   ; (V) C-CODE SET, EXIT PUNCH
2509
0976 FA2C AC 62                      CMPX 2,S      ; COMPARE BEGIN TO END ADDR
2510
0977 FA2E 25 49                      BCS  PUNEXT   ; IF BEGIN GREATER THAN END, EXIT PUNCH
2511
0978 FA30 30 01                      LEAX 1,X      ; INCREMENT END ADDRESS
2512
0979 FA32 AF E4                      STX  ,S       ; STORE END ADDR ON STACK
2513
0980 FA34 BD FC 36                   JSR  ACINIZ
2514
0981 FA37 86 12                      LDA  #$12     ; LOAD 'DC2' PUNCH ON CODE
2515
0982 FA39 17 01 E5                   LBSR OUTCH    ; OUTPUT IT TO TERMINAL
2516
0983 FA3C EC E4              PUNCH2  LDD  ,S       ; LOAD END ADDR IN D-ACC
2517
0984 FA3E A3 62                      SUBD 2,S      ; SUBTRACT BEGIN FROM END
2518
0985 FA40 27 06                      BEQ  PUNCH3   ; SAME, PUNCH 32 BYTES DEFAULT
2519
0986 FA42 10 83 00 20                CMPD #$20     ; LESS THAN 32 BYTES?
2520
0987 FA46 23 02                      BLS  PUNCH4   ; PUNCH THAT MANY BYTES
2521
0988 FA48 C6 20              PUNCH3  LDB  #$20     ; LOAD BYTE COUNT OF 32.
2522
0989 FA4A E7 64              PUNCH4  STB  4,S      ; STORE ON STACK AS BYTE COUNT
2523
0990 FA4C 8E FC F6                   LDX  #MSG20   ; POINT TO MSG "S1"
2524
0991 FA4F 17 00 2F                   LBSR PSTRNG   ; PRINT MSG
2525
0992 FA52 CB 03                      ADDB #3       ; ADD 3 BYTES TO BYTE COUNT
2526
0993 FA54 1F 98                      TFR  B,A      ; GET BYTE COUNT IN A-ACC TO PUNCH
2527
0994 FA56 17 01 75                   LBSR OUT2H    ; OUTPUT BYTE COUNT
2528
0995 FA59 AE 62                      LDX  2,S      ; LOAD BEGIN ADDRESS
2529
0996 FA5B 17 01 68                   LBSR OUT4H    ; PUNCH ADDRESS
2530
0997 FA5E EB 62                      ADDB 2,S      ; ADD ADDR MSB TO CHECKSUM
2531
0998 FA60 EB 63                      ADDB 3,S      ; ADD ADDR LSB TO CHECKSUM
2532
0999 FA62 EB 84              PUNCHL  ADDB ,X       ; ADD DATA BYTE TO CHECKSUM
2533
1000 FA64 A6 80                      LDA  ,X+      ; LOAD DATA BYTE TO PUNCH
2534
1001 FA66 17 01 65                   LBSR OUT2H    ; OUTPUT DATA BYTE
2535
1002 FA69 6A 64                      DEC  4,S      ; DECREMENT BYTE COUNT
2536
1003 FA6B 26 F5                      BNE  PUNCHL   ; NOT DONE, PUNCH NEXT BYTE
2537
1004 FA6D 53                         COMB  1's     ; COMPLIMENT CHECKSUM BYTE
2538
1005 FA6E 1F 98                      TFR  B,A      ; GET IT IN A-ACC TO PUNCH
2539
1006 FA70 17 01 5B                   LBSR OUT2H    ; OUTPUT CHECKSUM BYTE
2540
1007 FA73 AF 62                      STX  2,S      ; SAVE X-REG IN STACK AS NEW PUNCH ADDR
2541
1008 FA75 AC E4                      CMPX ,S       ; COMPARE IT TO END ADDR
2542
1009 FA77 26 C3                      BNE  PUNCH2   ; $FCB5 PUNCH NOT DONE, CONT.
2543
1010 FA79 86 14              PUNEXT  LDA  #$14     ; LOAD 'DC4' PUNCH OFF CODE
2544
1011 FA7B 17 01 A3                   LBSR OUTCH    ; OUTPUT IT
2545
1012 FA7E 32 65                      LEAS 5,S      ; READJUST STACK POINTER
2546
1013 FA80 39                         RTS  ;
2547
1014                         *
2548
1015                         * PRINT STRING PRECEEDED BY A CR & LF.
2549
1016                         *
2550
1017 FA81 8D 02              PSTRNG  BSR  PCRLF    ; PRINT CR/LF
2551
1018 FA83 20 71                      BRA  PDATA    ; PRINT STRING POINTED TO BY IX
2552
1019                         *
2553
1020                         * PCRLF
2554
1021                         *
2555
1022 FA85 34 10              PCRLF   PSHS X        ; SAVE IX
2556
1023 FA87 8E FC A7                   LDX  #MSG2+1  ; POINT TO MSG CR/LF + 3 NULS
2557
1024 FA8A 17 00 69                   LBSR PDATA    ; PRINT MSG
2558
1025 FA8D 35 90                      PULS X,PC     ; RESTORE IX & RETURN
2559
1026                         *
2560
1027                         * LONG BRANCHES TO COMMON ROUTINES
2561
1028                         *
2562
1029 FA8F 16 01 8D           JOUT1S  LBRA OUT1S
2563
1030 FA92 16 00 F8           JBYTE   LBRA BYTE
2564
1031 FA95 16 00 E5           JIN1ADR LBRA IN1ADR
2565
1032                         *
2566
1033                         * ALTER "PC" PROGRAM COUNTER
2567
1034                         *
2568
1035 FA98 17 00 91           ALTRPC  LBSR  PRTPC   ; $FCF5 PRINT MSG " PC = "
2569
1036 FA9B 8D F2              ALTPC1  BSR  JOUT1S   ; OUTPUT SPACE
2570
1037 FA9D 8D F6                      BSR  JIN1ADR  ; GET NEW CONTENTS FOR "PC"
2571
1038 FA9F 29 02                      BVS  ALTPCD   ; EXIT IF INVALID HEX
2572
1039 FAA1 AF 4A                      STX  10,U     ; POKE IN NEW CONTENTS
2573
1040 FAA3 39                 ALTPCD  RTS           ;
2574
1041                         *
2575
1042                         * ALTER "U" USER STACK POINTER
2576
1043                         *
2577
1044 FAA4 8D 61              ALTRU   BSR  PRTUS    ; $FCCA PRINT MSG " US = "
2578
1045 FAA6 8D E7                      BSR  JOUT1S   ; OUTPUT SPACE
2579
1046 FAA8 8D EB                      BSR  JIN1ADR  ; GET NEW CONTENTS FOR "US"
2580
1047 FAAA 29 02                      BVS  ALTUD    ; EXIT IF INVALID HEX
2581
1048 FAAC AF 48                      STX  8,U      ; POKE IN NEW CONTENTS
2582
1049 FAAE 39                 ALTUD   RTS           ;
2583
1050                         *
2584
1051                         * ALTER "Y" INDEX REGISTER
2585
1052                         *
2586
1053 FAAF 8D 72              ALTRY   BSR  PRTIY    ; PRINT MSG " IY = "
2587
1054 FAB1 8D DC                      BSR  JOUT1S   ; OUTPUT SPACE
2588
1055 FAB3 8D E0                      BSR  JIN1ADR  ; GET NEW CONTENTS FOR "IY"
2589
1056 FAB5 29 02                      BVS  ALTYD    ; EXIT IF INVALID HEX
2590
1057 FAB7 AF 46                      STX  6,U      ; $F8F0 POKE IN NEW CONTENTS
2591
1058 FAB9 39                 ALTYD   RTS           ;
2592
1059                         *
2593
1060                         * ALTER "X" INDEX REGISTER
2594
1061                         *
2595
1062 FABA 8D 5E              ALTRX   BSR  PRTIX    ; $FCE0 PRINT MSG " IX = "
2596
1063 FABC 8D D1                      BSR  JOUT1S   ; OUTPUT SPACE
2597
1064 FABE 8D D5                      BSR  JIN1ADR
2598
1065 FAC0 29 02                      BVS  ALTXD
2599
1066 FAC2 AF 44                      STX  4,U
2600
1067 FAC4 39                 ALTXD   RTS ;
2601
1068                         *
2602
1069                         * ALTER "DP" DIRECT PAGE REGISTER
2603
1070                         *
2604
1071 FAC5 8D 49              ALTRDP  BSR  PRTDP    ; $FCD5 PRINT MSG " DP = "
2605
1072 FAC7 8D C6                      BSR  JOUT1S   ; OUTPUT SPACE
2606
1073 FAC9 8D C7                      BSR  JBYTE    ; INPUT BYTE (2 HEX CHAR)
2607
1074 FACB 29 02                      BVS  ALTDPD
2608
1075 FACD A7 43                      STA  3,U
2609
1076 FACF 39                 ALTDPD  RTS ;
2610
1077                         *
2611
1078                         * ALTER "B" ACCUMULATOR
2612
1079                         *
2613
1080 FAD0 8D 6C              ALTRB   BSR  PRTB     ; $FD09 PRINT MSG " B = "
2614
1081 FAD2 8D BB                      BSR  JOUT1S   ; OUTPUT SPACE
2615
1082 FAD4 8D BC                      BSR  JBYTE    ; INPUT BYTE (2 HEX CHAR)
2616
1083 FAD6 29 02                      BVS  ALTBD
2617
1084 FAD8 A7 42                      STA  2,U
2618
1085 FADA 39                 ALTBD   RTS           ; $F91C
2619
1086                         *
2620
1087                         * ALTER "A" ACCUMULATOR
2621
1088                         *
2622
1089 FADB 8D 58              ALTRA   BSR  PRTA     ; $FCFF RINT MSG " A = "
2623
1090 FADD 8D B0                      BSR  JOUT1S   ; OUTPUT SPACE
2624
1091 FADF 8D B1                      BSR  JBYTE    ; INPUT BYTE (2 HEX CHAR)
2625
1092 FAE1 29 02                      BVS  ALTAD
2626
1093 FAE3 A7 41                      STA  1,U
2627
1094 FAE5 39                 ALTAD   RTS ;
2628
1095                         *
2629
1096                         * ALTER "CC" REGISTER
2630
1097                         *
2631
1098 FAE6 8D 5F              ALTRCC  BSR  PRTCC    ; $FD13 PRINT MSG " CC: "
2632
1099 FAE8 8D A5                      BSR  JOUT1S   ; OUTPUT SPACE
2633
1100 FAEA 8D A6                      BSR  JBYTE    ; INPUT BYTE (2 HEX CHAR)
2634
1101 FAEC 29 04                      BVS  ALTCCD
2635
1102 FAEE 8A 80                      ORA  #$80     ; SETS "E" FLAG IN PRINT LIST
2636
1103 FAF0 A7 C4                      STA  ,U
2637
1104 FAF2 39                 ALTCCD  RTS ;
2638
1105                         *
2639
1106                         * PDATA
2640
1107                         *
2641
1108 FAF3 17 01 2B           PRINT   LBSR OUTCH
2642
1109 FAF6 A6 80              PDATA   LDA  ,X+      ; GET 1st CHAR. TO PRINT
2643
1110 FAF8 81 04                      CMPA #4       ; IS IT EOT?
2644
1111 FAFA 26 F7                      BNE  PRINT    ; IF NOT EOT PRINT IT
2645
1112 FAFC 39                         RTS  ;
2646
1113                         *
2647
1114                         * PRINT REGISTERS
2648
1115                         *
2649
1116 FAFD 8E FC B9           PRTSP   LDX  #MSG10   ; POINT TO MSG "SP="
2650
1117 FB00 8D F4                      BSR  PDATA    ; PRINT MSG
2651
1118 FB02 1F 31                      TFR  U,X
2652
1119 FB04 16 00 BF           JOUT4H  LBRA OUT4H
2653
1120                         *
2654
1121 FB07 8E FC C5           PRTUS   LDX  #MSG12   ; POINT TO MSG "US="
2655
1122 FB0A 8D EA                      BSR  PDATA    ; PRINT MSG
2656
1123 FB0C AE 48                      LDX  8,U
2657
1124 FB0E 20 F4                      BRA  JOUT4H
2658
1125                         *
2659
1126 FB10 8E FC D7           PRTDP   LDX   #MSG15  ; POINT TO MSG "DP="
2660
1127 FB13 8D E1                      BSR  PDATA    ; PRINT MSG
2661
1128 FB15 A6 43                      LDA  3,U
2662
1129 FB17 16 00 B4           JOUT2H  LBRA OUT2H    ; OUTPUT HEX BYTE AS ASCII
2663
1130                         *
2664
1131 FB1A 8E FC D1           PRTIX   LDX  #MSG14   ; POINT TO MSG "IX="
2665
1132 FB1D 8D D7                      BSR  PDATA    ; PRINT MSG
2666
1133 FB1F AE 44                      LDX  4,U      ; $FCE6
2667
1134 FB21 20 E1                      BRA  JOUT4H
2668
1135                         *
2669
1136 FB23 8E FC CB           PRTIY   LDX  #MSG13   ; POINT TO MSG "IY="
2670
1137 FB26 8D CE                      BSR  PDATA    ; PRINT MSG
2671
1138 FB28 AE 46                      LDX  6,U
2672
1139 FB2A 20 D8                      BRA  JOUT4H
2673
1140                         *
2674
1141 FB2C 8E FC BF           PRTPC   LDX  #MSG11   ; POINT TO MSG "PC="
2675
1142 FB2F 8D C5                      BSR  PDATA    ; PRINT MSG
2676
1143 FB31 AE 4A                      LDX  10,U
2677
1144 FB33 20 CF                      BRA  JOUT4H
2678
1145                         *
2679
1146 FB35 8E FC DD           PRTA    LDX  #MSG16   ; POINT TO MSG "A="
2680
1147 FB38 8D BC                      BSR  PDATA    ; PRINT MSG
2681
1148 FB3A A6 41                      LDA  1,U
2682
1149 FB3C 20 D9                      BRA  JOUT2H   ; OUTPUT HEX BYTE AS ASCII
2683
1150                         *
2684
1151 FB3E 8E FC E2           PRTB    LDX  #MSG17   ; POINT TO MSG "B="
2685
1152 FB41 8D B3                      BSR  PDATA    ; PRINT MSG
2686
1153 FB43 A6 42                      LDA  2,U
2687
1154 FB45 20 D0                      BRA  JOUT2H   ; OUTPUT HEX BYTE AS ASCII
2688
1155                         *
2689
1156 FB47 8E FC E7           PRTCC   LDX  #MSG18   ; POINT TO MSG "CC:"
2690
1157 FB4A 8D AA                      BSR  PDATA    ; PRINT MSG
2691
1158 FB4C A6 C4                      LDA  ,U
2692
1159 FB4E 8E FC EE                   LDX  #MSG19   ; POINT TO MSG "EFHINZVC"
2693
1160 FB51 16 00 90                   LBRA BIASCI   ; OUTPUT IN BINARY/ASCII FORMAT
2694
1161                         *
2695
1162                         * "R" DISPLAY REGISTERS
2696
1163                         *
2697
1164 FB54 8E FC B5           REGSTR  LDX  #MSG5    ; POINT TO MSG " - "
2698
1165 FB57 17 FF 27                   LBSR PSTRNG   ; PRINT MSG
2699
1166 FB5A 8D A1                      BSR  PRTSP    ; $FCBF
2700
1167 FB5C 8D A9                      BSR  PRTUS    ; $FCCA
2701
1168 FB5E 8D B0                      BSR  PRTDP    ; $FCD5
2702
1169 FB60 8D B8                      BSR  PRTIX    ; $FCE0
2703
1170 FB62 8D BF                      BSR  PRTIY    ; $FCEB
2704
1171 FB64 8E FC B5                   LDX  #MSG5    ; POINT TO MSG " - "
2705
1172 FB67 17 FF 17                   LBSR PSTRNG   ; PRINT MSG
2706
1173 FB6A 8D C0                      BSR  PRTPC    ; $FCF5
2707
1174 FB6C 8D C7                      BSR  PRTA     ; $FCFF
2708
1175 FB6E 8D CE                      BSR  PRTB     ; $FD09
2709
1176 FB70 20 D5                      BRA  PRTCC    ; $FD13
2710
1177                         *
2711
1178                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
2712
1179                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
2713
1180                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
2714
1181                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT
2715
1182                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX
2716
1183                         * ADDRESS IS INPUT.
2717
1184                         *
2718
1185 FB72 8D 09              IN2ADR  BSR  IN1ADR   ; GET FIRST ADDRESS
2719
1186 FB74 29 4D                      BVS  NOTHEX   ; EXIT IF NOT VALID HEX
2720
1187 FB76 1F 12                      TFR  X,Y      ; SAVE FIRST ADDR. IN "IY"
2721
1188 FB78 86 2D                      LDA  #'-
2722
1189 FB7A 17 00 A4                   LBSR OUTCH    ; PRINT " - "
2723
1190                         *
2724
1191                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
2725
1192                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
2726
1193                         * ADDRESS IS RETURNED IN THE "X" REGISTER.
2727
1194                         *
2728
1195 FB7D 8D 0E              IN1ADR  BSR  BYTE     ; INPUT BYTE (2 HEX CHAR)
2729
1196 FB7F 29 42                      BVS  NOTHEX   ; EXIT IF NOT VALID HEX
2730
1197 FB81 1F 01                      TFR  D,X
2731
1198 FB83 8D 08                      BSR  BYTE     ; INPUT BYTE (2 HEX CHAR)
2732
1199 FB85 29 3C                      BVS  NOTHEX
2733
1200 FB87 34 10                      PSHS X
2734
1201 FB89 A7 61                      STA  1,S
2735
1202 FB8B 35 90                      PULS X,PC
2736
1203                         *
2737
1204                         ***** INPUT BYTE (2 HEX CHAR.) *****
2738
1205                         *
2739
1206 FB8D 8D 11              BYTE    BSR  INHEX    ; GET HEX LEFT
2740
1207 FB8F 29 32                      BVS  NOTHEX   ; EXIT IF NOT VALID HEX
2741
1208 FB91 48                         ASLA          ;
2742
1209 FB92 48                         ASLA          ;
2743
1210 FB93 48                         ASLA          ; SHIFT INTO LEFT NIBBLE
2744
1211 FB94 48                         ASLA          ;
2745
1212 FB95 1F 89                      TFR  A,B      ; PUT HEXL IN "B"
2746
1213 FB97 8D 07                      BSR  INHEX    ; GET HEX RIGHT
2747
1214 FB99 29 28                      BVS  NOTHEX   ; EXIT IF NOT VALID HEX
2748
1215 FB9B 34 04                      PSHS B        ; PUSH HEXL ON STACK
2749
1216 FB9D AB E0                      ADDA ,S+      ; ADD HEXL TO HEXR AND ADJ. STK
2750
1217 FB9F 39                         RTS           ; RETURN WITH HEX L&R IN "A"
2751
1218                         *
2752
1219                         *
2753
1220 FBA0 8D 57              INHEX   BSR  ECHON    ; INPUT ASCII CHAR.
2754
1221 FBA2 81 30                      CMPA #'0      ; IS IT > OR = "0" ?
2755
1222 FBA4 25 1D                      BCS  NOTHEX   ; IF LESS IT AIN'T HEX
2756
1223 FBA6 81 39                      CMPA #'9      ; IS IT < OR = "9" ?
2757
1224 FBA8 22 03                      BHI  INHEXA   ; IF > MAYBE IT'S ALPHA
2758
1225 FBAA 80 30                      SUBA #$30     ; ASCII ADJ. NUMERIC
2759
1226 FBAC 39                         RTS           ;
2760
1227                         *
2761
1228                         *
2762
1229 FBAD 81 41              INHEXA  CMPA #'A      ; IS IT > OR = "A"
2763
1230 FBAF 25 12                      BCS  NOTHEX   ; IF LESS IT AIN'T HEX
2764
1231 FBB1 81 46                      CMPA #'F      ; IS IT < OR = "F" ?
2765
1232 FBB3 22 03                      BHI  INHEXL   ; IF > IT AIN'T HEX
2766
1233 FBB5 80 37                      SUBA #'A-10   ; ($37) ASCII ADJ. ALPHA
2767
1234 FBB7 39                         RTS           ;
2768
1235                         *
2769
1236 FBB8 81 61              INHEXL  CMPA #'a      ; IS IT > OR = "a"
2770
1237 FBBA 25 07                      BCS  NOTHEX   ; IF LESS IT AIN'T HEX
2771
1238 FBBC 81 66                      CMPA #'f      ; IS IT < "f"
2772
1239 FBBE 22 03                      BHI  NOTHEX   ; IF > IT AIN'T HEX
2773
1240 FBC0 80 57                      SUBA #'a-10   ; ($57) ADJUST TO LOWER CASE
2774
1241 FBC2 39                         RTS           ;
2775
1242                         *
2776
1243                         *
2777
1244 FBC3 1A 02              NOTHEX  ORCC #2       ; SET (V) FLAG IN C-CODES REGISTER
2778
1245 FBC5 39                         RTS           ;
2779
1246                         *
2780
1247                         *
2781
1248 FBC6 34 10              OUT4H   PSHS X        ; PUSH X-REG. ON THE STACK
2782
1249 FBC8 35 02                      PULS A        ; POP MS BYTE OF X-REG INTO A-ACC.
2783
1250 FBCA 8D 02                      BSR  OUTHL    ; OUTPUT HEX LEFT
2784
1251 FBCC 35 02                      PULS A        ; POP LS BYTE OF X-REG INTO A-ACC.
2785
1252 FBCE                    OUTHL   EQU *
2786
1253 FBCE 34 02              OUT2H   PSHS A        ; SAVE IT BACK ON STACK
2787
1254 FBD0 44                         LSRA          ; CONVERT UPPER HEX NIBBLE TO ASCII
2788
1255 FBD1 44                         LSRA          ;
2789
1256 FBD2 44                         LSRA          ;
2790
1257 FBD3 44                         LSRA          ;
2791
1258 FBD4 8D 04                      BSR  XASCII   ; PRINT HEX NIBBLE AS ASCII
2792
1259 FBD6 35 02              OUTHR   PULS A        ; CONVERT LOWER HEX NIBBLE TO ASCII
2793
1260 FBD8 84 0F                      ANDA #$0F     ; STRIP LEFT NIBBLE
2794
1261 FBDA 8B 30              XASCII  ADDA #$30     ; ASCII ADJ
2795
1262 FBDC 81 39                      CMPA #$39     ; IS IT < OR = "9" ?
2796
1263 FBDE 2F 02                      BLE  OUTC     ; IF LESS, OUTPUT IT
2797
1264 FBE0 8B 07                      ADDA #7       ; IF > MAKE ASCII LETTER
2798
1265 FBE2 20 3D              OUTC    BRA  OUTCH    ; OUTPUT CHAR
2799
1266                         *
2800
1267                         * BINARY / ASCII --- THIS ROUTINE
2801
1268                         * OUTPUTS A BYTE IN ENHANCED
2802
1269                         * BINARY FORMAT. THE ENHANCEMENT
2803
1270                         * IS DONE BY SUBSTITUTING ASCII
2804
1271                         * LETTERS FOR THE ONES IN THE BYTE.
2805
1272                         * THE ASCII ENHANCEMENT LETTERS
2806
1273                         * ARE OBTAINED FROM THE STRING
2807
1274                         * POINTED TO BY THE INDEX REG. "X".
2808
1275                         *
2809
1276 FBE4 34 02              BIASCI  PSHS A        ; SAVE "A" ON STACK
2810
1277 FBE6 C6 08                      LDB  #8       ; PRESET LOOP# TO BITS PER BYTE
2811
1278 FBE8 A6 80              OUTBA   LDA  ,X+      ; GET LETTER FROM STRING
2812
1279 FBEA 68 E4                      ASL  ,S       ; TEST BYTE FOR "1" IN B7
2813
1280 FBEC 25 02                      BCS  PRTBA    ; IF ONE PRINT LETTER
2814
1281 FBEE 86 2D                      LDA  #'-      ; IF ZERO PRINT "-"
2815
1282 FBF0 8D 2F              PRTBA   BSR  OUTCH    ; PRINT IT
2816
1283 FBF2 8D 2B                      BSR  OUT1S    ; PRINT SPACE
2817
1284 FBF4 5A                         DECB          ; SUB 1 FROM #BITS YET TO PRINT
2818
1285 FBF5 26 F1                      BNE  OUTBA
2819
1286 FBF7 35 82                      PULS A,PC
2820
1287                         *
2821
1288                                 IFD EXTOPT
2822
1289                         *
2823
1290                         * EXTENDED USER COMMANDS
2824
1291                         *
2825
1292                         USRCMD  JMP [MONEXT+EXTCMD]
2826
1293                                 ENDIF EXTOPT
2827
1293                                 ENDIF EXTOPT
2828
1294                         *
2829
1295                         *
2830
1296 FBF9 7D DF D2           ECHON   TST  ECHO     ; IS ECHO REQUIRED ?
2831
1297 FBFC 27 06                      BEQ  INCH     ; ECHO NOT REQ. IF CLEAR
2832
1298                         *
2833
1299                         * INCHE
2834
1300                         *
2835
1301                         * GETS CHARACTER FROM TERMINAL AND
2836
1302                         * ECHOS SAME. THE CHARACTER IS RETURNED
2837
1303                         * IN THE "A" ACCUMULATOR WITH THE PARITY
2838
1304                         * BIT MASKED OFF. ALL OTHER REGISTERS
2839
1305                         * ARE PRESERVED.
2840
1306                         *
2841
1307 FBFE 8D 04              INCHE   BSR  INCH     ; GET CHAR FROM TERMINAL
2842
1308 FC00 84 7F                      ANDA #$7F     ; STRIP PARITY FROM CHAR.
2843
1309 FC02 20 1D                      BRA  OUTCH    ; ECHO CHAR TO TERMINAL
2844
1310                         *
2845
1311                         * INCH
2846
1312                         *
2847
1313                         * GET CHARACTER FROM TERMINAL. RETURN
2848
1314                         * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
2849
1315                         * ALL OTHER REGISTERS. THE INPUT CHARACTER
2850
1316                         * IS 8 BITS AND IS NOT ECHOED.
2851
1317                         *
2852
1318                         *
2853
1319 FC04 34 10              INCH    PSHS X        ; SAVE IX
2854
1320                                 IFD  HFCOPT
2855
1321                                 LDA  #$11     ; SET RTS* LOW, REQUEST FAR END TO TX
2856
1322                                 STA  [CPORT]
2857
1323                                 ENDIF HFCOPT
2858
1323                                 ENDIF HFCOPT
2859
1324 FC06 BE DF D0           GETSTA  LDX  CPORT    ; POINT TO TERMINAL PORT
2860
1325 FC09 A6 84                      LDA  ,X       ; FETCH PORT STATUS
2861
1326 FC0B 85 01                      BITA #1       ; TEST READY BIT, RDRF ?
2862
1327                                 IFD  PS2OPT
2863
1328                                 BNE  GETST1
2864
1329                                 LDX  #PS2KBD
2865
1330                                 LDA  ,X
2866
1331                                 BITA #1
2867
1332                                 ENDIF PS2OPT
2868
1332                                 ENDIF PS2OPT
2869
1333 FC0D 27 F7                      BEQ  GETSTA   ; IF NOT RDY, THEN TRY AGAIN
2870
1334 FC0F                    GETST1  EQU  *
2871
1335                                 IFD  HFCOPT
2872
1336                                 LDA  #$51     ; SET RTS* HIGH, STOP FAR END FROM TXING, UNTIL NEXT INPUT
2873
1337                                 STA  [CPORT]
2874
1338                                 ENDIF HFCOPT
2875
1338                                 ENDIF HFCOPT
2876
1339 FC0F A6 01                      LDA  1,X      ; FETCH CHAR
2877
1340 FC11 35 90                      PULS X,PC     ; RESTORE IX
2878
1341                         *
2879
1342                         * INCHEK
2880
1343                         *
2881
1344                         * CHECK FOR A CHARACTER AVAILABLE FROM
2882
1345                         * THE TERMINAL. THE SERIAL PORT IS CHECKED
2883
1346                         * FOR READ READY. ALL REGISTERS ARE
2884
1347                         * PRESERVED, AND THE "Z" BIT WILL BE
2885
1348                         * CLEAR IF A CHARACTER CAN BE READ.
2886
1349                         *
2887
1350                         *
2888
1351 FC13 34 02              INCHEK  PSHS A        ; SAVE A ACCUM
2889
1352                                 IFD  HFCOPT
2890
1353                                 LDA  #$11     ; SET RTS* LOW, REQUEST FAR END TO TX
2891
1354                                 STA  [CPORT]
2892
1355                                 ENDIF HFCOPT
2893
1355                                 ENDIF HFCOPT
2894
1356 FC15 A6 9F DF D0                LDA  [CPORT]  ; FETCH PORT STATUS
2895
1357 FC19 85 01                      BITA #1       ; TEST READY BIT, RDRF ?
2896
1358                                 IFD  PS2OPT
2897
1359                                 BNE  INCHEK1
2898
1360                                 LDA  PS2KBD
2899
1361                                 BITA #1       ; TEST READY BIT< RDRF ?
2900
1362                                 ENDIF PS2OPT
2901
1362                                 ENDIF PS2OPT
2902
1363 FC1B 35 82              INCHEK1 PULS A,PC     ; RESTORE A ACCUM.
2903
1364                         *
2904
1365 FC1D 8D 00              OUT2S   BSR  OUT1S    ; OUTPUT 2 SPACES
2905
1366 FC1F 86 20              OUT1S   LDA  #$20     ; OUTPUT 1 SPACE
2906
1367                         *
2907
1368                         *
2908
1369                         * OUTCH
2909
1370                         *
2910
1371                         * OUTPUT CHARACTER TO TERMINAL.
2911
1372                         * THE CHAR. TO BE OUTPUT IS
2912
1373                         * PASSED IN THE A REGISTER.
2913
1374                         * ALL REGISTERS ARE PRESERVED.
2914
1375                         *
2915
1376                         OUTCH   IFD   VDUOPT
2916
1377                                 BSR   VOUTCH
2917
1378                                 ENDIF VDUOPT
2918
1378                                 ENDIF VDUOPT
2919
1379                                 IFD   DG640OPT
2920
1380                                 BSR   VOUTCH
2921
1381                                 ENDIF DG640OPT
2922
1381                                 ENDIF DG640OPT
2923
1382 FC21 34 12              AOUTCH  PSHS A,X      ; SAVE A ACCUM AND IX
2924
1383 FC23 BE DF D0                   LDX  CPORT    ; GET ADDR. OF TERMINAL
2925
1384 FC26 A6 84              FETSTA  LDA  ,X       ; FETCH PORT STATUS
2926
1385 FC28 85 02                      BITA #2       ; TEST TDRE, OK TO XMIT ?
2927
1386 FC2A 27 FA                      BEQ  FETSTA   ; IF NOT LOOP UNTIL RDY
2928
1387 FC2C 85 08                      BITA #8       ; CLEAR TO SEND ?
2929
1388 FC2E 26 F6                      BNE  FETSTA   ; NO, LOOP UNTIL CLEAR
2930
1389 FC30 35 02                      PULS A        ; GET CHAR. FOR XMIT
2931
1390 FC32 A7 01                      STA  1,X      ; XMIT CHAR.
2932
1391 FC34 35 90                      PULS X,PC     ; RESTORE IX
2933
1392                         *
2934
1393                         * IO INITIALIZATION
2935
1394                         *
2936
1395 FC36                    IOINIZ  EQU  *
2937
1396                                 IFD  VDUOPT
2938
1397                                 BSR  VINIZ
2939
1398                                 ENDIF VDUOPT
2940
1398                                 ENDIF VDUOPT
2941
1399                                 IFD  DG640OPT
2942
1400                                 BSR  VINIZ
2943
1401                                 ENDIF DG640OPT
2944
1401                                 ENDIF DG640OPT
2945
1402 FC36 BE DF D0           ACINIZ  LDX  CPORT    ; POINT TO CONTROL PORT ADDRESS
2946
1403 FC39 86 03                      LDA  #3       ; RESET ACIA PORT CODE
2947
1404 FC3B A7 84                      STA  ,X       ; STORE IN CONTROL REGISTER
2948
1405 FC3D 86 51                      LDA  #$51     ; SET 8 DATA, 2 STOP AN 0 PARITY RTS* HIGH
2949
1406 FC3F A7 84                      STA  ,X       ; STORE IN CONTROL REGISTER
2950
1407 FC41 6D 01                      TST  1,X      ; ANYTHING IN DATA REGISTER?
2951
1408 FC43 86 FF                      LDA  #$FF     ; TURN ON ECHO FLAG
2952
1409 FC45 B7 DF D2                   STA  ECHO
2953
1410 FC48 39                         RTS
2954
1411                         *
2955
1412                                 IFD VDUOPT
2956
1413                         *
2957
1414                         ***************************************************
2958
1415                         *      VDU8 ADM3A REGISTER-MAPPED EMULATOR        *
2959
1416                         *                                                 *
2960
1417                         *      80 x 25 Characters
2961
1418                         *
2962
1419                         ***************************************************
2963
1420                         *
2964
1421                         ***************************************************
2965
1422                         *               INITIALIZE EMULATOR               *
2966
1423                         ***************************************************
2967
1424                         *
2968
1425                         VINIZ   LDX  #VDU
2969
1426                                 LDD  #0
2970
1427                                 STD  COLADX   ; AND ROWADX
2971
1428                                 STA  VDUCOL,X
2972
1429                                 STB  VDUROW,X
2973
1430                                 STB  VDUOFF,X
2974
1431                                 STD  NEWROW   ; AND ESCFLG
2975
1432                                 LDB  #$02
2976
1433                                 STB  VDUATT,X
2977
1434                                 CLR  ESCFLG
2978
1435                                 LDA  #$1B     ; SEND ESCAPE
2979
1436                                 BSR  VOUTCH
2980
1437                                 LDA  #'Y      ; CLEAR TO END OF SCREEN
2981
1438                         *
2982
1439                         ** VIDEO OUTPUT ROUTINE
2983
1440                         *
2984
1441                         VOUTCH  PSHS A,B,X    ; SAVE REGISTERS
2985
1442                                 LDX  #VDU     ; POINT TO VDU REGISTERS
2986
1443                         *
2987
1444                         ** CHECK FOR ESCAPE SEQUENCE
2988
1445                         *
2989
1446                                 TST  ESCFLG   ; ESCAPE ACTIVE?
2990
1447                                 BEQ  SOROU1   ; BRANCH IF NOT
2991
1448                                 BSR  ESCAPE   ; ELSE DO ESCAPE
2992
1449                                 BRA  RETURN   ; AND RETURN
2993
1450                         *
2994
1451                         ** CHECK FOR CONTROL CHARACTERS
2995
1452                         *
2996
1453                         SOROU1  CMPA #$20     ; CONTROL CODES?
2997
1454                                 BHS  SOROU2
2998
1455                                 BSR  CONTRL   ; BRANCH IF SO
2999
1456                                 BRA  RETURN
3000
1457                         *
3001
1458                         ** OUTPUT TEXT CHARACTER
3002
1459                         *
3003
1460                         SOROU2  STA  VDUCHR,X ; DISPLAY CHARACTER
3004
1461                                 LBSR NEWCOL   ; UPDATE COLUMN
3005
1462                         *
3006
1463                         ** DISPLAY CURSOR AND RETURN
3007
1464                         *
3008
1465                         RETURN  PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN
3009
1466                         *
3010
1467                         ***************************************************
3011
1468                         *              CONTROL CODE HANDLERS              *
3012
1469                         ***************************************************
3013
1470                         *
3014
1471                         CONTRL  CMPA #$08     ; CTRL H - BACKSPACE ?
3015
1472                                 BEQ  BACKSP
3016
1473                                 CMPA #$1B     ; ESCAPE SEQUENCE?
3017
1474                                 BEQ  SETESC
3018
1475                                 CMPA #$1A     ; CTRL Z - Clear Screen
3019
1476                                 LBEQ CLRSCR
3020
1477                                 CMPA #$16     ; CTRL ^ - Home
3021
1478                                 BEQ  HOME
3022
1479                                 CMPA #$0D     ; CTRL M - RETURN?
3023
1480                                 LBEQ CRETN
3024
1481                                 CMPA #$0C     ; CTRL L - CHAR RIGHT
3025
1482                                 BEQ  CHRIGHT
3026
1483                                 CMPA #$0B     ; CTRL K - MOVE UP ONE LINE
3027
1484                                 BEQ  LINEUP
3028
1485                                 CMPA #$0A     ; CTRL J - LINE FEED
3029
1486                                 BNE  RETESC   ; NONE OF THESE, RETURN
3030
1487                         *
3031
1488                         ***************************************** LINE FEED
3032
1489                         *
3033
1490                         LINEFD  LDD  COLADX   ; GET CURRENT COLUMN AND ROW
3034
1491                                 INCB          ; BUMP ROW
3035
1492                                 CMPB #NUMLIN  ; SCROLL TIME?
3036
1493                                 BNE  NEWCUR   ; POSITION CURSOR IF NOT
3037
1494                                 LBRA SCROLL   ; ELSE SCROLL IT
3038
1495                         *
3039
1496                         ***************************************** LINE FEED
3040
1497                         *
3041
1498                         LINEUP  LDD  COLADX   ; GET CURRENT COLUMN AND ROW
3042
1499                                 TSTB          ; AT TOP OF SCREEN ?
3043
1500                                 BEQ  RETESC   ; Yes, Ignore
3044
1501                                 DECB          ; No, Decrement ROW
3045
1502                                 BRA  NEWCUR   ; POSITION CURSOR
3046
1503                         *
3047
1504                         *********************************** BACK SPACE
3048
1505                         *
3049
1506                         BACKSP  LDA  COLADX
3050
1507                                 BEQ  RETESC   ; RETURN
3051
1508                                 DECA
3052
1509                                 BRA  POSCOL   ; POSITION CURSOR
3053
1510                         *
3054
1511                         *********************************** CURSOR RIGHT
3055
1512                         *
3056
1513                         CHRIGHT LDA  COLADX
3057
1514                                 INCA
3058
1515                                 CMPA #LINLEN
3059
1516                                 BEQ  RETESC
3060
1517                                 BRA  POSCOL
3061
1518                         *
3062
1519                         *********************************** CURSOR RIGHT
3063
1520                         *
3064
1521                         HOME    LDD  #0       ; HOME - POSITION TOP OF SCREEN
3065
1522                                 BRA  NEWCUR
3066
1523                         *
3067
1524                         ***************************************************
3068
1525                         *                 ESCAPE HANDLERS                 *
3069
1526                         ***************************************************
3070
1527                         *
3071
1528                         ESCAPE  LDB  ESCFLG   ; GET FLAG
3072
1529                                 CMPB #'=      ; SETTING CURSOR?
3073
1530                                 BEQ  ESCCUR   ; BRANCH IF SO
3074
1531                                 CMPA #'Y      ; CLEAR TO END OF SCREEN?
3075
1532                                 BEQ  ESCCLS
3076
1533                                 CMPA #'T      ; CLEAR TO END OF LINE?
3077
1534                                 BEQ  ESCCLL
3078
1535                                 CMPA #'=      ; STARTING CURSOR SET?
3079
1536                                 BNE  CLRESC   ; BRANCH IF NOT
3080
1537                         *
3081
1538                         ***************************** START ESCAPE SEQUENCE
3082
1539                         *
3083
1540                         SETESC  STA  ESCFLG   ; ELSE START CURSORING
3084
1541                                 RTS           ; AND RETURN
3085
1542                         *
3086
1543                         CLRESC  CLR  ESCFLG   ; NO OTHERS SUPPORTED
3087
1544                         RETESC  RTS           ; SO RETURN
3088
1545                         *
3089
1546                         ********************************* SET SCREEN CURSOR
3090
1547                         *
3091
1548                         ESCCUR  TST  NEWROW   ; ROW SET?
3092
1549                                 BNE  ESCCU1   ; BRANCH IF SO
3093
1550                                 STA  NEWROW   ; ELSE SET NEW ROW
3094
1551                                 RTS           ; AND RETURN
3095
1552                         *
3096
1553                         ESCCU1  CLR  ESCFLG
3097
1554                                 SUBA #$20     ; ADJUST COLUMN ADDRESS
3098
1555                                 CMPA #LINLEN-1 ;CHECK FOR ACCEPTABLE COLUM
3099
1556                                 BHI  RETESC   ; NOT OK, DO NOTHING
3100
1557                         *
3101
1558                         ESCCU2  LDB  NEWROW
3102
1559                                 CLR  NEWROW
3103
1560                                 SUBB #$20     ; ADJUST TO ROW ADDRESS
3104
1561                                 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW
3105
1562                                 BHI  RETESC   ; ELSE RETURN DOING NOTHING
3106
1563                                 BRA  NEWCUR   ; GO SET NEW CURSOR IF SO
3107
1564                         *
3108
1565                         ****************** CLEAR FROM CURSOR TO END OF LINE
3109
1566                         *
3110
1567                         CLRSCR  LDD  #0       ; CLEAR FROM TOP OF SCREEN
3111
1568                                 BSR  NEWCUR
3112
1569                         ESCCLL  LDA  COLADX
3113
1570                                 LDB  #$20     ; AND CLEAR CHAR
3114
1571                         ESCCL1  STB  VDUCHR,X ; DISPLAY TEXT
3115
1572                                 INCA
3116
1573                            STA  VDUCOL,X
3117
1574                                 CMPA #LINLEN  ; UNTIL END OF LINE
3118
1575                                 BNE  ESCCL1
3119
1576                                 CLR  ESCFLG
3120
1577                                 RTS
3121
1578                         *
3122
1579                         *********************************** CARRIAGE RETURN
3123
1580                         *
3124
1581                         CRETN   CLRA          ; SET COLUMN ZERO
3125
1582                         POSCOL  LDB  ROWADX   ; GET CURRENT ROW
3126
1583                         *
3127
1584                         *********** GENERATE NEW CURSOR POSITION AND RETURN
3128
1585                         *
3129
1586                         NEWCUR  STD  COLADX   ; SAVE NEW ROW AND COLUMN
3130
1587                            STA  VDUCOL,X ; SET NEW COLUMN
3131
1588                                 STB  VDUROW,X ; SET NEW ROW
3132
1589                                 RTS           ; AND RETURN
3133
1590                         *
3134
1591                         ********************* UPDATE CURRENT COLUMN AND ROW
3135
1592                         *
3136
1593                         NEWCOL  LDD  COLADX   ; GET ROW AND COLUMN
3137
1594                                 INCA          ; BUMP COLUMN
3138
1595                                 CMPA #LINLEN  ; ROLL?
3139
1596                                 BNE  NEWCUR   ; BRANCH IF NOT
3140
1597                                 CLRA          ; ELSE RESET TO ZERO
3141
1598                                 INCB          ; AND BUMP ROW
3142
1599                                 CMPB #NUMLIN
3143
1600                                 BNE  NEWCUR
3144
1601                                 DECB          ; BOTTOM ROW
3145
1602                                 BSR  NEWCUR
3146
1603                         *
3147
1604                         ********************************* SCROLL THE SCREEN
3148
1605                         *
3149
1606                         SCROLL  LDB  VDUOFF,X
3150
1607                                 INCB
3151
1608                                 CMPB #NUMLIN
3152
1609                                 BLO  SCROL1
3153
1610                                 CLRB
3154
1611                         SCROL1  STB  VDUOFF,X
3155
1612                         *
3156
1613                         **************** CLEAR FROM CURSOR TO END OF SCREEN
3157
1614                         *
3158
1615                         ESCCLS  LDB  COLADX   ; GET CURSOR
3159
1616                                 LDA  #$20     ; GET A SPACE
3160
1617                         ESCCLS1    STB  COLADX
3161
1618                                 STB  VDUCOL,X
3162
1619                                 STA  VDUCHR,X
3163
1620                                 INCB
3164
1621                                 CMPB #LINLEN
3165
1622                                 BNE  ESCCLS1
3166
1623                         *
3167
1624                                 LDB  ROWADX
3168
1625                                 INCB
3169
1626                                 CMPB #NUMLIN
3170
1627                                 BEQ  ESCCLS2
3171
1628                                 STB  ROWADX
3172
1629                                 STB  VDUROW,X
3173
1630                                 CLRB
3174
1631                                 BRA  ESCCLS1
3175
1632                         *
3176
1633                         ESCCLS2 CLRB
3177
1634                                 STB  COLADX
3178
1635                                 STB  VDUCOL,X
3179
1636                                 STB  ESCFLG
3180
1637                                 RTS
3181
1638                                 ENDIF VDUOPT
3182
1638                                 ENDIF VDUOPT
3183
1639                         *
3184
1640                                 IFD DG640OPT
3185
1641                         ***************************************************
3186
1642                         *      TELEVIDEO-TYPE MEMORY-MAPPED EMULATOR      *
3187
1643                         *                                                 *
3188
1644                         * FOR HARD-WIRED MEMORY-MAPPED DISPLAYS USING THE *
3189
1645                         * HIGH ORDER BIT OF EACH BYTE FOR  REVERSE  VIDEO *
3190
1646                         * CURSORING  (SUCH  AS THE THOMAS INSTRUMENTATION *
3191
1647                         * 16x64 BOARD).                                   *
3192
1648                         ***************************************************
3193
1649                         *
3194
1650                         ***************************************************
3195
1651                         *               INITIALIZE EMULATOR               *
3196
1652                         ***************************************************
3197
1653                         *
3198
1654                         VINIZ   LDX  #0
3199
1655                                 STX  COLADX   ; AND ROWADX
3200
1656                                 STX  NEWROW   ; AND ESCFLG
3201
1657                                 LDX  #SCREEN  ; POINT TO SCREEN
3202
1658                                 STX  CURSOR   ; SET PROGRAM CURSOR
3203
1659                                 LDA  #$1B     ; SEND ESCAPE
3204
1660                                 BSR  VOUTCH
3205
1661                                 LDA  #'Y      ; CLEAR TO END OF SCREEN
3206
1662                         *
3207
1663                         ** VIDEO OUTPUT ROUTINE
3208
1664                         *
3209
1665                         VOUTCH  PSHS A,B,X    ; SAVE REGISTERS
3210
1666                         *
3211
1667                         ** CLEAR CURSOR
3212
1668                         *
3213
1669                                 LDX  CURSOR
3214
1670                                 LDB  0,X
3215
1671                                 ANDB #$7F
3216
1672                                 STB  0,X
3217
1673                         *
3218
1674                         ** CHECK FOR ESCAPE SEQUENCE
3219
1675                         *
3220
1676                                 TST  ESCFLG   ; ESCAPE ACTIVE?
3221
1677                                 BEQ  SOROU1   ; BRANCH IF NOT
3222
1678                                 BSR  ESCAPE   ; ELSE DO ESCAPE
3223
1679                                 BRA  RETURN   ; AND RETURN
3224
1680                         *
3225
1681                         ** CHECK FOR CONTROL CHARACTERS
3226
1682                         *
3227
1683                         SOROU1  CMPA #$20     ; CONTROL CODES?
3228
1684                                 BHS  SOROU2
3229
1685                                 BSR  CONTRL   ; BRANCH IF SO
3230
1686                                 BRA  RETURN
3231
1687                         *
3232
1688                         ** OUTPUT TEXT CHARACTER
3233
1689                         *
3234
1690                         SOROU2  LDX  CURSOR   ; ELSE GET CURSOR
3235
1691                                 STA  0,X      ; DISPLAY CHARACTER
3236
1692                                 LBSR NEWCOL   ; UPDATE COLUMN
3237
1693                         *
3238
1694                         ** DISPLAY CURSOR AND RETURN
3239
1695                         *
3240
1696                         RETURN  LDX  CURSOR   ; AND DISPLAY IT
3241
1697                                 LDB  ,X
3242
1698                                 ORB  #$80     ; WITH REVID
3243
1699                                 STB  ,X
3244
1700                                 PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN
3245
1701                         *
3246
1702                         ***************************************************
3247
1703                         *              CONTROL CODE HANDLERS              *
3248
1704                         ***************************************************
3249
1705                         *
3250
1706                         CONTRL  CMPA #$08     ; CTRL H - BACKSPACE ?
3251
1707                                 LBEQ BACKSP
3252
1708                                 CMPA #$1B     ; ESCAPE SEQUENCE?
3253
1709                                 LBEQ SETESC
3254
1710                                 CMPA #$D      ; CTRL M - RETURN?
3255
1711                                 LBEQ CRETN
3256
1712                                 CMPA #$0A     ; CTRL J - LINE FEED
3257
1713                                 BNE  RETESC   ; NONE OF THESE, RETURN
3258
1714                         *
3259
1715                         ***************************************** LINE FEED
3260
1716                         *
3261
1717                         LINEFD  LDD  COLADX   ; GET CURRENT COLUMN AND ROW
3262
1718                                 INCB          ; BUMP ROW
3263
1719                                 CMPB #NUMLIN  ; SCROLL TIME?
3264
1720                                 LBNE NEWCUR   ; POSITION CURSOR IF NOT
3265
1721                                 LBRA SCROLL   ; ELSE SCROLL IT
3266
1722                         *
3267
1723                         ***************************************** LINE FEED
3268
1724                         *
3269
1725                         LINEUP  LDD  COLADX   ; GET CURRENT COLUMN AND ROW
3270
1726                                 TSTB          ; AT TOP OF SCREEN ?
3271
1727                                 BEQ  RETESC   ; YES, RETURN
3272
1728                                 DECB          ; NO, DECREMENT ROW
3273
1729                                 LBRA NEWCUR   ; POSITION CURSOR
3274
1730                         *
3275
1731                         *********************************** BACK SPACE
3276
1732                         *
3277
1733                         BACKSP  LDA  COLADX    ; GET CURRENT COLUMN AND ROW
3278
1734                                 BEQ  RETESC    ; IF AT TOP LEFT CORNER RETURN
3279
1735                                 DECA           ; OTHERWISE BACK STEP ONE CHARACTER
3280
1736                                 LBRA POSCOL    ; POSITION CURSOR
3281
1737                         *
3282
1738                         *********************************** CURSOR RIGHT
3283
1739                         *
3284
1740                         CHRIGHT LDA  COLADX    ; GET CURRENT COLUMN AND ROW
3285
1741                                 INCA           ; MOVE RIGHT ONE CHARACTER
3286
1742                                 CMPA #LINLEN   ; ARE WE AT THE END OF THE LINE ?
3287
1743                                 BEQ  RETESC    ; YES, RETURN
3288
1744                                 LBRA POSCOL    ; NO, POSITION CURSOR
3289
1745                         *
3290
1746                         ***************************************************
3291
1747                         *                 ESCAPE HANDLERS                 *
3292
1748                         ***************************************************
3293
1749                         *
3294
1750                         ESCAPE  LDB  ESCFLG   ; ARE WE IN AN ESCAPE SEQUENCE ?
3295
1751                                 CMPB #'=      ; ARE WE SETTING CURSOR?
3296
1752                                 BEQ  ESCCUR   ; YES BRANCH TO SET CURSOR
3297
1753                                 CMPA #'Y      ; CLEAR TO END OF SCREEN?
3298
1754                                 LBEQ ESCCLS   ; YES, CLEAR SCREEN
3299
1755                                 CMPA #'T      ; CLEAR TO END OF LINE?
3300
1756                                 BEQ  ESCCLL   ; YES, CLEAR LINE
3301
1757                                 CMPA #'E      ; INSERT LINE?
3302
1758                                 BEQ  ESCINL
3303
1759                                 CMPA #'R      ; DELETE LINE?
3304
1760                                 BEQ  ESCDLL
3305
1761                                 CMPA #'=      ; STARTING CURSOR SET?
3306
1762                                 BNE  CLRESC   ; BRANCH IF NOT
3307
1763                         *
3308
1764                         ***************************** START ESCAPE SEQUENCE
3309
1765                         *
3310
1766                         SETESC  STA  ESCFLG   ; ELSE START CURSORING
3311
1767                                 RTS           ; AND RETURN
3312
1768                         *
3313
1769                         CLRESC  CLR  ESCFLG   ; NO OTHERS SUPPORTED
3314
1770                         RETESC  RTS           ;  SO RETURN
3315
1771                         *
3316
1772                         ********************************* SET SCREEN CURSOR
3317
1773                         *
3318
1774                         ESCCUR  TST  NEWROW   ; ROW SET?
3319
1775                                 BNE  ESCCU1   ; BRANCH IF SO
3320
1776                                 STA  NEWROW   ; ELSE SET NEW ROW
3321
1777                                 RTS           ;  AND RETURN
3322
1778                         *
3323
1779                         ESCCU1  CLR  ESCFLG
3324
1780                                 SUBA #$20      ; ADJUST COLUMN ADDRESS
3325
1781                                 CMPA #LINLEN-1 ; CHECK FOR ACCEPTABLE COLUM
3326
1782                                 BHI  RETESC    ; NOT OK, DO NOTHING
3327
1783                         *
3328
1784                         ESCCU2  LDB  NEWROW
3329
1785                                 CLR  NEWROW
3330
1786                                 SUBB #$20      ; ADJUST TO ROW ADDRESS
3331
1787                                 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW
3332
1788                                 BHI  RETESC    ; ELSE RETURN DOING NOTHING
3333
1789                                 BRA  NEWCUR    ; GO SET NEW CURSOR IF SO
3334
1790                         *
3335
1791                         *************************** DELETE LINE FROM SCREEN
3336
1792                         *
3337
1793                         ESCDLL  BSR  CRETN     ; GO COL. ZERO
3338
1794                                 LDB  ROWADX
3339
1795                                 CMPB #NUMLIN-1
3340
1796                                 BEQ  SCROL3
3341
1797                                 BRA  SCROL1    ; AND DELETE THIS LINE
3342
1798                         *
3343
1799                         *************************** INSERT LINE INTO SCREEN
3344
1800                         *
3345
1801                         ESCINL  BSR  CRETN     ; GO TO COL. ZERO
3346
1802                                 LDB  ROWADX
3347
1803                                 CMPB #NUMLIN-1
3348
1804                                 BEQ  ESCCLL
3349
1805                         *
3350
1806                         ** SCROLL SCREEN DOWN FROM CURSOR
3351
1807                         *
3352
1808                                 LDX  #SCREEN+SCNLEN-LINLEN
3353
1809                         ESCIN0  LDA  ,-X
3354
1810                                 STA  LINLEN,X
3355
1811                                 LDA  SCNLEN,X
3356
1812                                 STA  SCNLEN+LINLEN,X
3357
1813                                 CMPX CURSOR
3358
1814                                 BNE  ESCIN0
3359
1815                         *
3360
1816                         ****************** CLEAR FROM CURSOR TO END OF LINE
3361
1817                         *
3362
1818                         ESCCLL  LDA  COLADX    ; GET CURRENT COLUMN
3363
1819                                 LDX  CURSOR    ; GET CURSOR
3364
1820                                 LDB  #$20      ; AND CLEAR CHAR
3365
1821                         ESCLL1  STB  SCNLEN,X  ; CLEAR ATTRIBUTE
3366
1822                                 STB  ,X+       ; CLEAR TEXT
3367
1823                                 INCA
3368
1824                                 CMPA #LINLEN   ; UNTIL END OF LINE
3369
1825                                 BNE  ESCLL1
3370
1826                                 CLR  ESCFLG
3371
1827                                 RTS
3372
1828                         *
3373
1829                         *********************************** CARRIAGE RETURN
3374
1830                         *
3375
1831                         CRETN   CLRA           ; SET COLUMN ZERO
3376
1832                         POSCOL  LDB  ROWADX    ; GET CURRENT ROW
3377
1833                         *
3378
1834                         *********** GENERATE NEW CURSOR POSITION AND RETURN
3379
1835                         *
3380
1836                         NEWCUR  STD  COLADX    ; SAVE NEW ROW AND COLUMN
3381
1837                                 LDA  #LINLEN   ; ELSE ADD A LINE
3382
1838                                 MUL            ; LINLEN * ROWADX
3383
1839                                 ADDB COLADX
3384
1840                                 ADCA #0
3385
1841                                 ADDD #SCREEN   ; ADD SCREEN BASE.
3386
1842                                 STD  CURSOR    ; SAVE NEW CURSOR
3387
1843                                 TFR  D,X       ; GET CURSOR IN X
3388
1844                                 RTS            ; AND RETURN
3389
1845                         *
3390
1846                         ********************* UPDATE CURRENT COLUMN AND ROW
3391
1847                         *
3392
1848                         NEWCOL  LDD  COLADX    ; GET ROW AND COLUMN
3393
1849                                 INCA           ; BUMP COLUMN
3394
1850                                 CMPA #LINLEN   ; ROLL?
3395
1851                                 BNE  NEWCUR    ; BRANCH IF NOT
3396
1852                                 CLRA           ; ELSE RESET TO ZERO
3397
1853                                 INCB           ; AND BUMP ROW
3398
1854                                 CMPB #NUMLIN
3399
1855                                 BNE  NEWCUR
3400
1856                                 DECB           ; BOTTOM ROW
3401
1857                                 BSR  NEWCUR
3402
1858                         *
3403
1859                         ********************************* SCROLL THE SCREEN
3404
1860                         *
3405
1861                         SCROLL  LDX  #SCREEN   ; POINT TO SCREEN
3406
1862                         SCROL1  LDA  SCNLEN+LINLEN,X
3407
1863                                 STA  SCNLEN,X
3408
1864                                 LDA  LINLEN,X  ; MOVE TWO BYTES
3409
1865                                 STA  ,X+       ; UP ONE LINE
3410
1866                                 CMPX #SCREEN+SCNLEN-LINLEN
3411
1867                                 BNE  SCROL1    ; LOOP UNTIL DONE
3412
1868                                 BRA  SCROL3
3413
1869                         *
3414
1870                         **************** CLEAR FROM CURSOR TO END OF SCREEN
3415
1871                         *
3416
1872                         ESCCLS  LDX   CURSOR   ; GET CURSOR
3417
1873                         SCROL3  LDA   #$20     ; GET A SPACE
3418
1874                         SCROL2  STA   SCNLEN,X ; CLEAR ATTRIBUTES
3419
1875                                 STA   ,X+      ; AND TEXT
3420
1876                                 CMPX  #SCREEN+SCNLEN
3421
1877                                 BNE   SCROL2   ; UNTIL DONE
3422
1878                                 CLR   ESCFLG
3423
1879                                 RTS
3424
1880                                 ENDIF DG640OPT
3425
1880                                 ENDIF DG640OPT
3426
1881                         *
3427
1882                                 IFD PRTOPT
3428
1883                         *************************************
3429
1884                         *
3430
1885                         ** PRINTER DRIVER ROUTINES
3431
1886                         *
3432
1887                         *************************************
3433
1888                         *
3434
1889                         ** PINIZ - INITIATE PRINTER PORT
3435
1890                         *
3436
1891                         PINIZ   PSHS B
3437
1892                                 LDD #DIRMSK*256+$04 ; ACCA=DIRMSK ACCB=$04
3438
1893                                 STD PADATA     ; SET DDR AND SELECT DATA
3439
1894                         *
3440
1895                         ** RESET PRINTER
3441
1896                         *
3442
1897                                 LDB  #PRESET
3443
1898                                 STB  PADATA
3444
1899                         RESTLP  INCB           ; DELAY FOR RESET
3445
1900                                 BNE  RESTLP
3446
1901                                 STA  PADATA    ; ACCA=DIRMSK
3447
1902                         *
3448
1903                         ** INITALIZE PORT B (DATA PORT)
3449
1904                         *
3450
1905                                 LDA  #$2A
3451
1906                                 STA  PBCTRL
3452
1907                                 LDD  #$FF2E    ; ACCA=$FF ACCB =%00101110
3453
1908                                 STD  PBDATA    ; PBDREG   PBCTRL
3454
1909                         *
3455
1910                         ** SELECT 66 LINES/PAGE
3456
1911                         *
3457
1912                                 LDA  #$1B
3458
1913                                 BSR  POUTCH
3459
1914                                 LDA  #'C
3460
1915                                 BSR  POUTCH
3461
1916                                 LDA  #66
3462
1917                                 PULS B
3463
1918                         *************************************
3464
1919                         *
3465
1920                         ** OUTPUT A CHARACTER TO THE PRINTER
3466
1921                         *
3467
1922                         *************************************
3468
1923                         POUTCH  PSHS B
3469
1924                                 LDB  PBDATA    ; CLEAR INTERRUPT BIT
3470
1925                         *
3471
1926                         ** WAIT TILL NOT BUSY
3472
1927                         *
3473
1928                         BUSYLP  LDB  PADATA
3474
1929                                 BITB #PERROR
3475
1930                                 BEQ  PEXIT
3476
1931                                 TSTB
3477
1932                                 BMI  BUSYLP
3478
1933                         *
3479
1934                         ** NOW OUTPUT CHARACTER
3480
1935                         *
3481
1936                                 STA  PBDATA
3482
1937                         PEXIT   PULS B,PC
3483
1938                         *************************************
3484
1939                         *
3485
1940                         ** PCHK TEST IFD PRINTER READY
3486
1941                         *
3487
1942                         *************************************
3488
1943                         PCHK    TST  PBCTRL    ; TEST STATE OF CRB7
3489
1944                                 RTS            ; SET ON ACKNOWLEDGE
3490
1945                                 ENDIF PRTOPT
3491
1945                                 ENDIF PRTOPT
3492
1946                         *************************************
3493
1947                         *
3494
1948                         * MONITOR KEYBOARD COMMAND JUMP TABLE
3495
1949                         *
3496
1950                         *************************************
3497
1951                         *
3498
1952 FC49                    JMPTAB  EQU *
3499
1953 FC49 01                         FCB 1 " ^A "
3500
1954 FC4A FA DB                      FDB ALTRA
3501
1955 FC4C 02                         FCB 2 " ^B "
3502
1956 FC4D FA D0                      FDB ALTRB
3503
1957 FC4F 03                         FCB 3 " ^C "
3504
1958 FC50 FA E6                      FDB ALTRCC
3505
1959 FC52 04                         FCB 4 " ^D "
3506
1960 FC53 FA C5                      FDB ALTRDP
3507
1961 FC55 10                         FCB $10 " ^P "
3508
1962 FC56 FA 98                      FDB ALTRPC
3509
1963 FC58 15                         FCB $15 " ^U "
3510
1964 FC59 FA A4                      FDB ALTRU
3511
1965 FC5B 18                         FCB $18 " ^X "
3512
1966 FC5C FA BA                      FDB ALTRX
3513
1967 FC5E 19                         FCB $19 " ^Y "
3514
1968 FC5F FA AF                      FDB ALTRY
3515
1969                         *
3516
1970 FC61 42                         FCC 'B'
3517
1971 FC62 F9 43                      FDB BRKPNT
3518
1972 FC64 45                         FCC 'E'
3519
1973 FC65 F8 E4                      FDB MEMDUMP
3520
1974 FC67 47                         FCC 'G'
3521
1975 FC68 F8 8C                      FDB GO
3522
1976 FC6A 4C                         FCC 'L'
3523
1977 FC6B F9 C5                      FDB LOAD
3524
1978 FC6D 50                         FCC 'P'
3525
1979 FC6E FA 23                      FDB PUNCH
3526
1980 FC70 4D                         FCC 'M'
3527
1981 FC71 F8 8F                      FDB MEMCHG
3528
1982 FC73 52                         FCC 'R'
3529
1983 FC74 FB 54                      FDB REGSTR
3530
1984 FC76 53                         FCC 'S'
3531
1985 FC77 F8 D8                      FDB DISSTK
3532
1986 FC79 58                         FCC 'X'
3533
1987 FC7A F9 6F                      FDB XBKPNT
3534
1988                                 IFD MFDCOPT
3535
1989                                 FCC 'D'        ; *** SWTPC USES 'U' FOR MINIBOOT
3536
1990                                 FDB MINBOOT
3537
1991                                 ENDIF MFDCOPT
3538
1991                                 ENDIF MFDCOPT
3539
1992                                 IFD CF8OPT
3540
1993                                 FCC 'D'        ; *** FPGA 8 BIT USES 'D' FOR CFBOOT
3541
1994                                 FDB CFBOOT
3542
1995                                 ENDIF CF8OPT
3543
1995                                 ENDIF CF8OPT
3544
1996                                 IFD IDEOPT
3545
1997                                 FCC 'D'        ; *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
3546
1998                                 FDB IDEBOOT
3547
1999                                 ENDIF IDEOPT
3548
1999                                 ENDIF IDEOPT
3549
2000                                 IFD DMAFOPT
3550
2001                                 FCC 'U'        ; *** SWTPC USES 'D' FOR DMAF2 BOOT
3551
2002                                 FDB DBOOT
3552
2003                                 ENDIF DMAFOPT
3553
2003                                 ENDIF DMAFOPT
3554
2004                                 IFD EXTOPT
3555
2005                                 FCC 'U'        ; *** IF FPGA, 'U' IS FOR USER
3556
2006                                 FDB USRCMD
3557
2007                                 ENDIF EXTOPT
3558
2007                                 ENDIF EXTOPT
3559
2008                                 IFD RTCOPT
3560
2009                                 FCC 'T'
3561
2010                                 FDB TIMSET
3562
2011                                 ENDIF RTCOPT
3563
2011                                 ENDIF RTCOPT
3564
2012                                 IFD TRAOPT
3565
2013                                 FCC "T"
3566
2014                                 FDB TRACE
3567
2015                                 ENDIF TRAOPT
3568
2015                                 ENDIF TRAOPT
3569
2016                         *
3570
2017 FC7C                    TABEND  EQU *
3571
2018                         *
3572
2019                         * ** 6809 VECTOR ADDRESSES **
3573
2020                         *
3574
2021                         * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
3575
2022                         * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
3576
2023                         * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
3577
2024                         * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
3578
2025                         * HIS OWN ROUTINES IF HE SO DESIRES.
3579
2026                         *
3580
2027                         *
3581
2028 FC7C F9 7B              RAMVEC  FDB SWIE       ; USER-V
3582
2029 FC7E F8 8E                      FDB RTI        ; SWI3-V
3583
2030 FC80 F8 8E                      FDB RTI        ; SWI2-V
3584
2031 FC82 F8 8E                      FDB RTI        ; FIRQ-V
3585
2032 FC84 F8 8E                      FDB RTI        ; IRQ-V
3586
2033 FC86 F9 7B                      FDB SWIE       ; SWI-V
3587
2034 FC88 FF FF                      FDB $FFFF      ; SVC-VO
3588
2035 FC8A FF FF                      FDB $FFFF      ; SVC-VL
3589
2036                         *
3590
2037                         * PRINTABLE MESSAGE STRINGS
3591
2038                         *
3592
2039 FC8C 0D 0A 00 00 00     MSG1    FCB  $D,$A,$0,$0,$0 * 0, CR/LF, 0
3593
2040 FC91 53 79 73 30 39 42          FCC  'Sys09Bug 1.7 FOR '
3594
          75 67 20 31 2E 37
3595
          20 46 4F 52 20
3596
2041                                 IFD  SWTOPT
3597
2042                                 FCC  'SWTPC'
3598
2043                                 ENDIF SWTOPT
3599
2043                                 ENDIF SWTOPT
3600
2044                                 IFD  ADSOPT
3601
2045                                 FCC  'ADS6809'
3602
2046                                 ENDIF ADSOPT
3603
2046                                 ENDIF ADSOPT
3604
2047                                 IFD  B3SOPT
3605
2048                                 FCC  'B3-S2+'
3606
2049                                 ENDIF B3SOPT
3607
2049                                 ENDIF B3SOPT
3608
2050                                 IFD  B5XOPT
3609
2051                                 FCC  'B5-X300'
3610
2052                                 ENDIF B5XOPT
3611
2052                                 ENDIF B5XOPT
3612
2053                                 IFD  S3SOPT
3613
2054                                 FCC  'S3STARTER'
3614
2055                                 ENDIF S3SOPT
3615
2055                                 ENDIF S3SOPT
3616
2056                                 IFD  S3EOPT
3617
2057                                 FCC  'S3E'
3618
2058                                 ENDIF S3EOPT
3619
2058                                 ENDIF S3EOPT
3620
2059                                 IFD  XESOPT
3621
2060                                 FCC  'XESS'
3622
2061                                 ENDIF XESOPT
3623
2061                                 ENDIF XESOPT
3624
2062                                 IFD  ATLYSOPT
3625
2063                                 FCC  'Atlys'
3626
2064                                 ENDIF ATLYSOPT
3627
2064                                 ENDIF ATLYSOPT
3628
2065                                 IFD  DE270OPT
3629
2066                                 FCC  'DE2-70'
3630
2067                                 ENDIF DE270OPT
3631
2067                                 ENDIF DE270OPT
3632
2068 FCA2 20 2D 20                   FCC ' - '
3633
2069 FCA5 04                         FCB 4
3634
2070 FCA6 4B 0D 0A 00 00 00  MSG2    FCB 'K,$0D,$0A,$00,$00,$00,$04 ; K,,,3 NULS,
3635
          04
3636
2071 FCAD 3E                 MSG3    FCC '>'
3637
2072 FCAE 04                         FCB 4
3638
2073 FCAF 57 48 41 54 3F     MSG4    FCC 'WHAT?'
3639
2074 FCB4 04                         FCB 4
3640
2075 FCB5 20 2D 20           MSG5    FCC ' - '
3641
2076 FCB8 04                         FCB 4'
3642
2077 FCB9 20 20 53 50 3D     MSG10   FCC '  SP='
3643
2078 FCBE 04                         FCB 4
3644
2079 FCBF 20 20 50 43 3D     MSG11   FCC '  PC='
3645
2080 FCC4 04                         FCB 4
3646
2081 FCC5 20 20 55 53 3D     MSG12   FCC '  US='
3647
2082 FCCA 04                         FCB 4
3648
2083 FCCB 20 20 49 59 3D     MSG13   FCC '  IY='
3649
2084 FCD0 04                         FCB 4
3650
2085 FCD1 20 20 49 58 3D     MSG14   FCC '  IX='
3651
2086 FCD6 04                         FCB 4
3652
2087 FCD7 20 20 44 50 3D     MSG15   FCC '  DP='
3653
2088 FCDC 04                         FCB 4
3654
2089 FCDD 20 20 41 3D        MSG16   FCC '  A='
3655
2090 FCE1 04                         FCB 4
3656
2091 FCE2 20 20 42 3D        MSG17   FCC '  B='
3657
2092 FCE6 04                         FCB 4
3658
2093 FCE7 20 20 43 43 3A 20  MSG18   FCC '  CC: '
3659
2094 FCED 04                         FCB 4
3660
2095 FCEE 45 46 48 49 4E 5A  MSG19   FCC 'EFHINZVC'
3661
          56 43
3662
2096 FCF6 53 31              MSG20   FCC 'S1'
3663
2097 FCF8 04                         FCB 4
3664
2098                                 IFD DATOPT
3665
2099                         *
3666
2100                         * POWER UP/ RESET/ NMI ENTRY POINT
3667
2101                         *
3668
2102                                 ORG $FF00
3669
2103                         *
3670
2104                         *
3671
2105                         START   LDX  #IC11    ; POINT TO DAT RAM IC11
3672
2106                                 LDA  #$0F     ; GET COMPLIMENT OF ZERO
3673
2107                         *
3674
2108                         *
3675
2109                         * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
3676
2110                         * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS
3677
2111                         * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE
3678
2112                         * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA
3679
2113                         * STORED IN IT.
3680
2114                         *
3681
2115                         *
3682
2116                         DATLP   STA  ,X+       ; STORE & POINT TO NEXT RAM LOCATION
3683
2117                                 DECA           ; GET COMP. VALUE FOR NEXT LOCATION
3684
2118                                 BNE  DATLP     ; ALL 16 LOCATIONS INITIALIZED ?
3685
2119                         *
3686
2120                         * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
3687
2121                         *       ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
3688
2122                         *       PHYSICAL ADDRESSES.
3689
2123                         *
3690
2124                                 LDA  #$F0
3691
2125                                 STA  ,X        ; STORE $F0 AT $FFFF
3692
2126                                 LDX  #$D0A0    ; ASSUME RAM TO BE AT $D000-$DFFF
3693
2127                                 LDY  #TSTPAT   ; LOAD TEST DATA PATTERN INTO "Y"
3694
2128                         TSTRAM  LDU  ,X        ; SAVE DATA FROM TEST LOCATION
3695
2129                                 STY  ,X        ; STORE TEST PATTERN AT $D0A0
3696
2130                                 CMPY ,X        ; IS THERE RAM AT THIS LOCATION ?
3697
2131                                 BEQ  CNVADR    ; IF MATCH THERE'S RAM, SO SKIP
3698
2132                                 LEAX -$1000,X  ; ELSE POINT 4K LOWER
3699
2133                                 CMPX #$F0A0    ; DECREMENTED PAST ZER0 YET ?
3700
2134                                 BNE  TSTRAM    ; IF NOT CONTINUE TESTING FOR RAM
3701
2135                                 BRA  START     ; ELSE START ALL OVER AGAIN
3702
2136                         *
3703
2137                         *
3704
2138                         * THE FOLLOWING CODE STORES THE COMPLEMENT OF
3705
2139                         * THE MS CHARACTER OF THE FOUR CHARACTER HEX
3706
2140                         * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED
3707
2141                         * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT
3708
2142                         * IS STORED IN RAM IN THE LOCATION THAT IS
3709
2143                         * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---,
3710
2144                         * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND
3711
2145                         * WHEN TESTING LOCATION $70A0, MEANING THERE
3712
2146                         * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE
3713
2147                         * $8000-$DFFF, THEN THE COMPLEMENT OF THE
3714
2148                         * "7" IN THE $70A0 WILL BE STORED IN
3715
2149                         * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS
3716
2150                         * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND
3717
2151                         * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE
3718
2152                         * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE
3719
2153                         * RAM THAT IS PHYSICALLY ADDRESSED AT $7---
3720
2154                         * WILL RESPOND AND APPEAR TO THE 6809 THAT IT
3721
2155                         * IS AT $D--- SINCE THAT IS THE ADDRESS THE
3722
2156                         * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK
3723
2157                         * OF RAM RESPONDS.
3724
2158                         *
3725
2159                         *
3726
2160                         CNVADR  STU  ,X        ; RESTORE DATA AT TEST LOCATION
3727
2161                                 TFR  X,D       ; PUT ADDR. OF PRESENT 4K BLOCK IN D
3728
2162                                 COMA           ; COMPLEMENT MSB OF THAT ADDRESS
3729
2163                                 LSRA           ; PUT MS 4 BITS OF ADDRESS IN
3730
2164                                 LSRA           ; LOCATION D0-D3 TO ALLOW STORING
3731
2165                                 LSRA           ; IT IN THE DYNAMIC ADDRESS
3732
2166                                 LSRA           ; TRANSLATION RAM.
3733
2167                                 STA  $FFFD     ; STORE XLATION FACTOR IN DAT "D"
3734
2168                         *
3735
2169                                 LDS  #STACK    ; INITIALIZE STACK POINTER
3736
2170                         *
3737
2171                         *
3738
2172                         * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
3739
2173                         * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK
3740
2174                         * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS
3741
2175                         * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION
3742
2176                         * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF
3743
2177                         * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO
3744
2178                         * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---....
3745
2179                         *
3746
2180                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3747
2181                         * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- --
3748
2182                         *
3749
2183                         * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE
3750
2184                         * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING....
3751
2185                         *
3752
2186                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3753
2187                         * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0
3754
2188                         *
3755
2189                         *
3756
2190                         * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF
3757
2191                         * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL
3758
2192                         * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK
3759
2193                         * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT
3760
2194                         * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000
3761
2195                         * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000
3762
2196                         * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE
3763
2197                         * MEMORY ADDRESSED AS FOLLOWS....
3764
2198                         *
3765
2199                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3766
2200                         * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
3767
2201                         *
3768
2202                         *
3769
2203                                 LDY  #LRARAM   ; POINT TO LOGICAL/REAL ADDR. TABLE
3770
2204                                 STA  13,Y      ; STORE $D--- XLATION FACTOR AT $DFDD
3771
2205                                 CLR  14,Y      ; CLEAR $DFDE
3772
2206                                 LDA  #$F0      ; DESTINED FOR IC8 AN MEM EXPANSION ?
3773
2207                                 STA  15,Y      ; STORE AT $DFDF
3774
2208                                 LDA  #$0C      ; PRESET NUMBER OF BYTES TO CLEAR
3775
2209                         CLRLRT  CLR  A,Y       ; CLEAR $DFDC THRU $DFD0
3776
2210                                 DECA           ; SUB. 1 FROM BYTES LEFT TO CLEAR
3777
2211                                 BPL  CLRLRT    ; CONTINUE IF NOT DONE CLEARING
3778
2212                         FNDRAM  LEAX -$1000,X  ; POINT TO NEXT LOWER 4K OF RAM
3779
2213                                 CMPX #$F0A0    ; TEST FOR DECREMENT PAST ZERO
3780
2214                                 BEQ  FINTAB    ; SKIP IF FINISHED
3781
2215                                 LDU  ,X        ; SAVE DATA AT CURRENT TEST LOCATION
3782
2216                                 LDY  #TSTPAT   ; LOAD TEST DATA PATTERN INTO Y REG.
3783
2217                                 STY  ,X        ; STORE TEST PATT. INTO RAM TEST LOC.
3784
2218                                 CMPY ,X        ; VERIFY RAM AT TEST LOCATION
3785
2219                                 BNE  FNDRAM    ; IF NO RAM GO LOOK 4K LOWER
3786
2220                                 STU  ,X        ; ELSE RESTORE DATA TO TEST LOCATION
3787
2221                                 LDY  #LRARAM   ; POINT TO LOGICAL/REAL ADDR. TABLE
3788
2222                                 TFR  X,D       ; PUT ADDR. OF PRESENT 4K BLOCK IN D
3789
2223                                 LSRA           ; PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
3790
2224                                 LSRA           ; TO ALLOW STORING IT IN THE DAT RAM.
3791
2225                                 LSRA
3792
2226                                 LSRA
3793
2227                                 TFR  A,B       ; SAVE OFFSET INTO LRARAM TABLE
3794
2228                                 EORA #$0F      ; INVERT MSB OF ADDR. OF CURRENT 4K BLK
3795
2229                                 STA  B,Y       ; SAVE TRANSLATION FACTOR IN LRARAM TABLE
3796
2230                                 BRA  FNDRAM    ; GO TRANSLATE ADDR. OF NEXT 4K BLK
3797
2231                         FINTAB  LDA  #$F1      ; DESTINED FOR IC8 AND MEM EXPANSION ?
3798
2232                                 LDY  #LRARAM   ; POINT TO LRARAM TABLE
3799
2233                                 STA  14,Y      ; STORE $F1 AT $DFCE
3800
2234                         *
3801
2235                         * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
3802
2236                         * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
3803
2237                         * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT
3804
2238                         * LOGICALLY RESPONDS TO THE ADDRESS $C---.
3805
2239                         *
3806
2240                         *
3807
2241                                 LDA  #$0C      ; PRESET NUMBER HEX "C"
3808
2242                         FINDC   LDB  A,Y       ; GET ENTRY FROM LRARAM TABLE
3809
2243                                 BNE  FOUNDC    ; BRANCH IF RAM THIS PHYSICAL ADDR.
3810
2244                                 DECA           ; ELSE POINT 4K LOWER
3811
2245                                 BPL  FINDC     ; GO TRY AGAIN
3812
2246                                 BRA  XFERTF
3813
2247                         FOUNDC  CLR  A,Y       ; CLR XLATION FACTOR OF 4K BLOCK FOUND
3814
2248                                 STB  $0C,Y     ; GIVE IT XLATION FACTOR MOVING IT TO $C---
3815
2249                         *
3816
2250                         * THE FOLLOWING CODE ADJUSTS THE TRANSLATION
3817
2251                         * FACTORS SUCH THAT ALL REMAINING RAM WILL
3818
2252                         * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
3819
2253                         * ADDRESSES FROM $0000 AND UP....
3820
2254                         *
3821
2255                                 CLRA           ; START AT ZERO
3822
2256                                 TFR  Y,X       ; START POINTER "X" START OF "LRARAM" TABLE.
3823
2257                         COMPRS  LDB  A,Y       ; GET ENTRY FROM "LRARAM" TABLE
3824
2258                                 BEQ  PNTNXT    ; IF IT'S ZER0 SKIP
3825
2259                                 CLR  A,Y       ; ELSE ERASE FROM TABLE
3826
2260                                 STB  ,X+       ; AND ENTER ABOVE LAST ENTRY- BUMP
3827
2261                         PNTNXT  INCA           ; GET OFFSET TO NEXT ENTRY
3828
2262                                 CMPA #$0C      ; LAST ENTRY YET ?
3829
2263                                 BLT  COMPRS
3830
2264                         *
3831
2265                         * THE FOLLOWING CODE TRANSFER THE TRANSLATION
3832
2266                         * FACTORS FROM THE LRARAM TABLE TO IC11 ON
3833
2267                         * THE MP-09 CPU CARD.
3834
2268                         *
3835
2269                         XFERTF  LDX  #IC11     ; POINT TO DAT RAM IC11
3836
2270                                 LDB  #$10      ; GET NO. OF BYTES TO MOVE
3837
2271                         FETCH   LDA  ,Y+       ; GET BYTE AND POINT TO NEXT
3838
2272                                 STA  ,X+       ; POKE XLATION FACTOR IN IC11
3839
2273                                 DECB           ; SUB 1 FROM BYTES TO MOVE
3840
2274                                 BNE  FETCH     ; CONTINUE UNTIL 16 MOVED
3841
2275                         *
3842
2276                                 ELSE
3843
2277 FCF9 39                 LRA     RTS
3844
2278 FCFA 10 CE DF C0        START   LDS  #STACK    ; INITIALIZE STACK POINTER
3845
2279 FCFE 5F                         CLRB
3846
2280                                 ENDIF DATOPT
3847
2281                         *
3848
2282 FCFF 53                         COMB           ; SET "B" NON-ZERO
3849
2283 FD00 F7 DF D2                   STB  ECHO      ; TURN ON ECHO FLAG
3850
2284 FD03 16 FB 0E                   LBRA MONITOR   ; INITIALIZATION IS COMPLETE
3851
2285                         *
3852
2286                         ** INTERRUPT JUMP VECTORS
3853
2287                         *
3854
2288 FD06 6E 9F DF C0        V1      JMP  [STACK]
3855
2289 FD0A 6E 9F DF C4        V2      JMP  [SWI2]
3856
2290 FD0E 6E 9F DF C6        V3      JMP  [FIRQ]
3857
2291 FD12 6E 9F DF C8        V4      JMP  [IRQ]
3858
2292 FD16 6E 9F DF CA        V5      JMP  [SWI]
3859
2293                         *
3860
2294                         * SWI3 ENTRY POINT
3861
2295                         *
3862
2296 FD1A 1F 43              SWI3E   TFR  S,U
3863
2297 FD1C AE 4A                      LDX  10,U      *$FFC8
3864
2298 FD1E E6 80                      LDB  ,X+
3865
2299 FD20 AF 4A                      STX  10,U
3866
2300 FD22 4F                         CLRA
3867
2301 FD23 58                         ASLB
3868
2302 FD24 49                         ROLA
3869
2303 FD25 BE DF CC                   LDX  SVCVO
3870
2304 FD28 8C FF FF                   CMPX #$FFFF
3871
2305 FD2B 27 0F                      BEQ  SWI3Z
3872
2306 FD2D 30 8B                      LEAX D,X
3873
2307 FD2F BC DF CE                   CMPX SVCVL
3874
2308 FD32 22 08                      BHI  SWI3Z
3875
2309 FD34 34 10                      PSHS X
3876
2310 FD36 EC C4                      LDD  ,U
3877
2311 FD38 AE 44                      LDX  4,U
3878
2312 FD3A 6E F1                      JMP  [,S++]
3879
2313 FD3C 37 1F              SWI3Z   PULU A,B,X,CC,DP
3880
2314 FD3E EE 42                      LDU  2,U
3881
2315 FD40 6E 9F DF C2                JMP  [SWI3]
3882
2316                         *
3883
2317                         * 6809 VECTORS
3884
2318                         *
3885
2319 FFF0                            ORG $FFF0
3886
2320 FFF0 FD 06                      FDB V1    USER-V
3887
2321 FFF2 FD 1A                      FDB SWI3E SWI3-V
3888
2322 FFF4 FD 0A                      FDB V2    SWI2-V
3889
2323 FFF6 FD 0E                      FDB V3    FIRQ-V
3890
2324 FFF8 FD 12                      FDB V4    IRQ-V
3891
2325 FFFA FD 16                      FDB V5    SWI-V
3892
2326 FFFC FD 06                      FDB V1    NMI-V
3893
2327 FFFE FC FA                      FDB START RESTART-V
3894
0005                                 END START
3895
0006                          END
3896
Program + Init Data = 2898 bytes
3897
Error count = 0
3898
 
3899
 
3900
ACIAC1     0000
3901
ACIAD1     0001
3902
ACINIZ     FC36
3903
ACIRST     01F7
3904
ACK        0006
3905
AJDUMP     F8F0
3906
ALTAD      FAE5
3907
ALTBD      FADA
3908
ALTCCD     FAF2
3909
ALTDPD     FACF
3910
ALTPC1     FA9B
3911
ALTPCD     FAA3
3912
ALTRA      FADB
3913
ALTRB      FAD0
3914
ALTRCC     FAE6
3915
ALTRDP     FAC5
3916
ALTRPC     FA98
3917
ALTRU      FAA4
3918
ALTRX      FABA
3919
ALTRY      FAAF
3920
ALTUD      FAAE
3921
ALTXD      FAC4
3922
ALTYD      FAB9
3923
AOUTCH     FC21
3924
ATLOPT     00FF
3925
BACK       F8D4
3926
BIASCI     FBE4
3927
BLKNUM     0104
3928
BLOAD0     070D
3929
BLOAD1     071B
3930
BLOAD2     0731
3931
BLOAD3     0745
3932
BOOT       0700
3933
BPADJ      F9B9
3934
BPERR      F967
3935
BPTBL      DFD3
3936
BPTEST     F9A9
3937
BRKPNT     F943
3938
BSSTACK    C0FF
3939
BUFFER     0200
3940
BYTCNT     0105
3941
BYTE       FB8D
3942
CAN        0018
3943
CFLAG      0001
3944
CHANGE     F8C2
3945
CHKDRV     053B
3946
CHKSUM     0103
3947
CHRTN      F8C1
3948
CLRSTK     F82F
3949
CPORT      DFD0
3950
DELCNT     0108
3951
DELCON     04E2
3952
DFL1       0115
3953
DFL2       0122
3954
DFL3       0136
3955
DFL4       01A0
3956
DISFOS     0085
3957
DISSTK     F8D8
3958
DLY        F9BC
3959
DNS        0707
3960
DRNUM      070C
3961
DRVNUM     0100
3962
DRVS2      0536
3963
DRVSEL     052F
3964
ECHO       DFD2
3965
ECHON      FBF9
3966
EDPASC     F92F
3967
EDPRTN     F8EF
3968
EDUMP      F90B
3969
EFLAG      0080
3970
ELOOP      F91D
3971
EOT        0004
3972
EXITBP     F966
3973
EXTEND     0035
3974
EXTTAB     002C
3975
FETSTA     FC26
3976
FFLAG      0040
3977
FFSTBL     F9A0
3978
FIRQ       DFC6
3979
FNDBP      F9AF
3980
FORWRD     F8D0
3981
GETCH      0752
3982
GETCH2     0758
3983
GETCH4     0767
3984
GETST1     FC0F
3985
GETSTA     FC06
3986
GO         F88C
3987
GOFLEX     076A
3988
HFLAG      0020
3989
IFLAG      0010
3990
IN1ADR     FB7D
3991
IN2ADR     FB72
3992
INCH       FC04
3993
INCHE      FBFE
3994
INCHEK     FC13
3995
INCHEK1    FC1B
3996
INCHEV     F806
3997
INCHKV     F808
3998
INCHV      F804
3999
INHEX      FBA0
4000
INHEXA     FBAD
4001
INHEXL     FBB8
4002
INITDR     04B2
4003
INTER      0200
4004
INTER0     020B
4005
INTER1     0219
4006
INTER2     021E
4007
INTEST     01F2
4008
IOINIZ     FC36
4009
IRQ        DFC8
4010
JBYTE      FA92
4011
JIN1ADR    FA95
4012
JMPCMD     F888
4013
JMPEXT     002A
4014
JMPTAB     FC49
4015
JOUT1S     FA8F
4016
JOUT2H     FB17
4017
JOUT4H     FB04
4018
LADR       070A
4019
LOAD       F9C5
4020
LOAD1      F9D0
4021
LOAD10     F9FA
4022
LOAD16     FA10
4023
LOAD2      F9D3
4024
LOAD21     FA1B
4025
LODERR     FA0F
4026
LOOPA      F81D
4027
LRA        FCF9
4028
LRAV       F812
4029
MAXSEC     010C
4030
MAXTRK     010B
4031
MDUMP1     F8E9
4032
MEMC2      F896
4033
MEMCHG     F88F
4034
MEMDUMP    F8E4
4035
MESS6      00AE
4036
MONIO      E000
4037
MONITOR    F814
4038
MONITV     F800
4039
MONRAM     DFC0
4040
MONROM     F800
4041
MSG1       FC8C
4042
MSG10      FCB9
4043
MSG11      FCBF
4044
MSG12      FCC5
4045
MSG13      FCCB
4046
MSG14      FCD1
4047
MSG15      FCD7
4048
MSG16      FCDD
4049
MSG17      FCE2
4050
MSG18      FCE7
4051
MSG19      FCEE
4052
MSG2       FCA6
4053
MSG20      FCF6
4054
MSG3       FCAD
4055
MSG4       FCAF
4056
MSG5       FCB5
4057
MSGWHAT    0035
4058
NAK        0015
4059
NEXTCMD    F848
4060
NEXTEXT    0002
4061
NFLAG      0008
4062
NMI        DFC0
4063
NOTHEX     FBC3
4064
NXTCH0     F872
4065
NXTCHR     F875
4066
NXTCMV     F802
4067
NXTEX0     0016
4068
NXTEX1     0019
4069
NXTLIN     F8FF
4070
OUT1S      FC1F
4071
OUT2H      FBCE
4072
OUT2S      FC1D
4073
OUT4H      FBC6
4074
OUTBA      FBE8
4075
OUTC       FBE2
4076
OUTCH      FC21
4077
OUTCHV     F80A
4078
OUTHL      FBCE
4079
OUTHR      FBD6
4080
OUTTE1     0233
4081
OUTTE2     0241
4082
OUTTER     0231
4083
PCLKHI     0001
4084
PCLKLO     0000
4085
PCRLF      FA85
4086
PCRLFV     F80E
4087
PDATA      FAF6
4088
PDATA0     0246
4089
PDATA1     0248
4090
PDATAV     F80C
4091
PERIOD     F939
4092
PRASC      F93B
4093
PRINT      FAF3
4094
PROMREG    E0C0
4095
PRSTHI     0002
4096
PRSTLO     0000
4097
PRTA       FB35
4098
PRTB       FB3E
4099
PRTBA      FBF0
4100
PRTCC      FB47
4101
PRTCMD     F866
4102
PRTDP      FB10
4103
PRTIX      FB1A
4104
PRTIY      FB23
4105
PRTPC      FB2C
4106
PRTSP      FAFD
4107
PRTUS      FB07
4108
PSTRGV     F810
4109
PSTRNG     FA81
4110
PUNCH      FA23
4111
PUNCH2     FA3C
4112
PUNCH3     FA48
4113
PUNCH4     FA4A
4114
PUNCHL     FA62
4115
PUNEXT     FA79
4116
RAMVEC     FC7C
4117
RCHAR      0046
4118
RCHAR1     004B
4119
RCHAR2     004F
4120
RCHAR3     005E
4121
RDLP1      04F7
4122
READ       0787
4123
READ1      0797
4124
READSC     04E6
4125
REGPR      F989
4126
REGSTR     FB54
4127
RESTR1     04C7
4128
RF3        01D7
4129
RMAXSEC    00FF
4130
RMAXTRK    0100
4131
RPLSWI     F98F
4132
RTI        F88E
4133
RTOTSEC    FE01
4134
SCHAR      0062
4135
SCHAR1     0069
4136
SCHAR2     006D
4137
SCHAR3     007F
4138
SCT        0706
4139
SCTBUF     C300
4140
SECTOR     0102
4141
SEEK       076D
4142
SEEKTS     04CC
4143
SKPDMP     F908
4144
SOH        0001
4145
STACK      DFC0
4146
START      FCFA
4147
SUB1       F9C0
4148
SVCVL      DFCE
4149
SVCVO      DFCC
4150
SWI        DFCA
4151
SWI2       DFC4
4152
SWI3       DFC2
4153
SWI3E      FD1A
4154
SWI3Z      FD3C
4155
SWIE       F97B
4156
SYNCHI     AA55
4157
SYNCLO     FF00
4158
TABEND     FC7C
4159
TADR       0708
4160
TRACK      0101
4161
TRK        0705
4162
UBSUB      003E
4163
UFEXIT     01EC
4164
UFMSG1     00CB
4165
UFSUB      00E6
4166
UFSUB1     00EF
4167
UXERR      03FF
4168
UXEXIT     03F9
4169
UXLOOP     03AD
4170
UXMES0     024F
4171
UXMES1     0268
4172
UXMES2     027A
4173
UXMSG3     0289
4174
UXMSG4     029A
4175
UXSUB      02B1
4176
UXSUB1     02BD
4177
UXSUB2     02EA
4178
V1         FD06
4179
V2         FD0A
4180
V3         FD0E
4181
V4         FD12
4182
V5         FD16
4183
VFLAG      0002
4184
VOLMSG     00DD
4185
WRITSC     050A
4186
WRTLP1     051C
4187
WTDRQ      07B7
4188
WTRDY      07A8
4189
XACK       04A9
4190
XASCII     FBDA
4191
XBKPNT     F96F
4192
XBPLP      F975
4193
XBYTE0     040A
4194
XBYTE1     0419
4195
XREAD      0405
4196
XSTATE     0106
4197
XSTBL      0442
4198
XSTBLE     044D
4199
XSTCK      0483
4200
XSTCK1     0493
4201
XSTCK2     04A0
4202
XSTCOM     0458
4203
XSTDA      046C
4204
XSTDA1     047E
4205
XSTST      0422
4206
XSTST1     042C
4207
XSTST2     0438
4208
XSTST3     043F
4209
ZFLAG      0004

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.