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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [sys09bug/] [sys09swt.lst] - Blame information for rev 188

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

Line No. Rev Author Line
1 22 dilbert57
Assembler release DWC_2.0 version 2.11
2
May 6, 2004 (c) Motorola (free ware)
3
0001                          NAM SYS09BUG FOR SWTPc
4
0000                          INCLUDE "opt_swt.txt"
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                         *S3EOPT EQU $FF SPARTAN3E STARTER
16
0012                         *S3SOPT EQU $FF SPARTAN3 STARTER FPGA VIDEO & PS2 KEYBOARD
17
0013                         *B5XOPT EQU $FF B5-X300 FPGA VIDEO & PS2 KEYBOARD
18
0014                         *XESOPT EQU $FF XESS XSA-3S100 & XST-3.0
19
0015                         *ADSOPT  EQU $FF ADS6809 & DG640 VIDEO DISPAY
20
0016 00FF                    SWTOPT EQU $FF SWTP ACIA SERIAL CONTROL PORT
21
0017                         *
22
0002                          END
23
0000                          INCLUDE "sys09equ.txt"
24
0001                         *
25
0002                         ***************************************************
26
0003                         *   MEMORY MAP EQUATES                            *
27
0004                         ***************************************************
28
0005 E000                    MONIO  EQU $E000  I/O SPACE
29
0006                                IFD S3EOPT
30
0007                         MONRAM EQU $7FC0
31
0008                                ELSE
32
0009 DFC0                    MONRAM EQU $DFC0  STACK SPACE
33
0010                                ENDIF S3EOPT
34
0011 F800                    MONROM EQU $F800  START OF ROM
35
0012                                IFD S3SOPT
36
0013                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
37
0014                         EXTCMD EQU $00    EXTENDED OFFSET
38
0015                                ENDIF S3SOPT
39
0015                                ENDIF S3SOPT
40
0016                                IFD XESOPT
41
0017                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
42
0018                         EXTCMD EQU $00    EXTENDED OFFSET
43
0019                                ENDIF XESOPT
44
0019                                ENDIF XESOPT
45
0020                         ***************************************************
46
0021
47
0022                                 IFD S3EOPT
48
0023                         *
49
0024                         * DIGILENT SPARTAN 3E STARTER
50
0025                         *
51
0026                         ACIAOPT EQU $FF ACIA AT PORT 0
52
0027                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
53
0028                         VDUOPT  EQU $FF VDU AT $E030
54
0029                         TRAOPT  EQU $FF PIA TRACE TIMER
55
0030                                 ENDIF S3EOPT
56
0030                                 ENDIF S3EOPT
57
0031                         *
58
0032                                 IFD S3SOPT
59
0033                         *
60
0034                         * DIGILENT SPARTAN 3 STARTER
61
0035                         *
62
0036                         ACIAOPT EQU $FF ACIA AT PORT 0
63
0037                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
64
0038                         VDUOPT  EQU $FF VDU AT $E030
65
0039                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
66
0040                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
67
0041                         EXTOPT  EQU $FF EXTENDED COMMANDS
68
0042                                 ENDIF S3SOPT
69
0042                                 ENDIF S3SOPT
70
0043                         *
71
0044                                 IFD B5XOPT
72
0045                         *
73
0046                         * BURCHED B5-X300
74
0047                         *
75
0048                         ACIAOPT EQU $FF ACIA AT PORT 0
76
0049                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
77
0050                         VDUOPT  EQU $FF VDU AT $E030
78
0051                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
79
0052                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
80
0053                                 ENDIF B5XOPT
81
0053                                 ENDIF B5XOPT
82
0054                         *
83
0055                                 IFD XESOPT
84
0056                         *
85
0057                         * XESS XSA-3S1000 & XST-3.0
86
0058                         *
87
0059                         ACIAOPT EQU $FF ACIA AT PORT 0
88
0060                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
89
0061                         VDUOPT  EQU $FF VDU AT $E030
90
0062                         IDEOPT  EQU $FF XESS IDE AT $E100
91
0063                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
92
0064                         EXTOPT  EQU $FF EXTENDED COMMANDS
93
0065                                 ENDIF XESOPT
94
0065                                 ENDIF XESOPT
95
0066                         *
96
0067                                 IFD ADSOPT
97
0068                         *
98
0069                         * ACKERMAN DIGITAL ADS6809
99
0070                         *
100
0071                         DG640OPT  EQU $FF DG640 VDU AT $E800
101
0072                         *RTCOPT  EQU $FF REAL TIME CLOCK
102
0073                         PRTOPT  EQU $FF PRINTER DRIVERS
103
0074                         MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
104
0075                                 ENDIF ADSOPT
105
0075                                 ENDIF ADSOPT
106
0076                         *
107
0077                                 IFD SWTOPT
108
0078                         *
109
0079                         * SOUTH WEST TECHNICAL PRODUCTS COMPUTER
110
0080                         *
111
0081 00FF                    ACIAOPT EQU $FF ACIA AT PORT 0
112
0082 00FF                    DMAFOPT EQU $FF DMAF2 8" FLOPPY DISK BOOT
113
0083 00FF                    MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
114
0084 00FF                    DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
115
0085                                 ENDIF
116
0086                         *
117
0087                                 IFD   ACIAOPT
118
0088                         *
119
0089                         ***************************************************
120
0090                         *   SERIAL PORT                                   *
121
0091                         ***************************************************
122
0092                         *
123
0093                         ** ACIA SITS ON PORT 0
124
0094                         *
125
0095 E000                    ACIAS   EQU   MONIO+$00   CONTROL PORT
126
0096                         *
127
0097                                 ENDIF ACIAOPT
128
0098                                 IFD   MFDCOPT
129
0099                         *
130
0100                         ***************************************************
131
0101                         *   MINIFLOPPY DRIVE                              *
132
0102                         ***************************************************
133
0103                         *
134
0104                         ** FLOPPY DISK CONTROLLER SITS ON PORT 1
135
0105                         *
136
0106 E014                    DRVFDC  EQU   MONIO+$14
137
0107 E018                    CMDFDC  EQU   MONIO+$18
138
0108 E01A                    SECFDC  EQU   MONIO+$1A
139
0109 E01B                    DATFDC  EQU   MONIO+$1B
140
0110                                 ENDIF MFDCOPT
141
0111                                 IFD PS2OPT
142
0112                         *
143
0113                         ***************************************************
144
0114                         *   VDU8 PS/2 KEYBOARD PORT                       *
145
0115                         ***************************************************
146
0116                         *
147
0117                         ** KEYBOARD SITS ON PORT 2
148
0118                         *
149
0119                         PS2KBD  EQU   MONIO+$20   PS/2 KEYBOARD PORT
150
0120                                 ENDIF PS2OPT
151
0120                                 ENDIF PS2OPT
152
0121                                 IFD VDUOPT
153
0122                         *
154
0123                         ***************************************************
155
0124                         *   VDU8 DISPLAY DRIVER EQUATES                   *
156
0125                         ***************************************************
157
0126                         *
158
0127                         ** VDU8 DISPLAY SITS ON PORT 3
159
0128                         *
160
0129                         VDU     EQU   MONIO+$30
161
0130                         VDUCHR  EQU   0        CHARACTER REGISTER
162
0131                         VDUATT  EQU   1        ATTRIBUTE REGISTER
163
0132                         VDUCOL  EQU   2        CURSOR COLUMN
164
0133                         VDUROW  EQU   3        CURSOR ROW
165
0134                         VDUOFF  EQU   4        ROW OFFSET
166
0135                         *
167
0136                         LINLEN  EQU   80       LENGTH OF A LINE
168
0137                         NUMLIN  EQU   25       NUMBER OF LINES
169
0138                                 ENDIF VDUOPT
170
0138                                 ENDIF VDUOPT
171
0139                         *
172
0140                                    IFD CF8OPT
173
0141                         *
174
0142                         ***************************************************
175
0143                         *   COMPACT FLASH EQUATES 8 BIT TRANSFER          *
176
0144                         ***************************************************
177
0145                         *
178
0146                         ** COMPACT FLASH SITS AT PORT 4
179
0147                         *
180
0148                         CF_BASE    EQU MONIO+$40
181
0149                         CF_DATA    EQU CF_BASE+0
182
0150                         CF_ERROR   EQU CF_BASE+1 ; read error
183
0151                         CF_FEATURE EQU CF_BASE+1 ; write feature
184
0152                         CF_SECCNT  EQU CF_BASE+2
185
0153                         CF_SECNUM  EQU CF_BASE+3
186
0154                         CF_CYLLO   EQU CF_BASE+4
187
0155                         CF_CYLHI   EQU CF_BASE+5
188
0156                         CF_HEAD    EQU CF_BASE+6
189
0157                         CF_STATUS  EQU CF_BASE+7 ; read status
190
0158                         CF_COMAND  EQU CF_BASE+7 ; write command
191
0159                         *
192
0160                         * Command Equates
193
0161                         *
194
0162                         CMDREAD    EQU $20 ; Read Single sector
195
0163                         CMDWRITE   EQU $30 ; Write Single sector
196
0164                         CMDFEATURE EQU $EF
197
0165                         FEAT8BIT   EQU $01 ; enable 8 bit transfers
198
0166                         HEADLBA    EQU $E0
199
0167                         *
200
0168                         * Status bit equates
201
0169                         *
202
0170                         BUSY       EQU $80
203
0171                         DRDY       EQU $40
204
0172                         DRQ        EQU $08
205
0173                         ERR        EQU $01
206
0174                         *
207
0175                                    ENDIF CF8OPT
208
0175                                    ENDIF CF8OPT
209
0176                         *
210
0177                                    IFD IDEOPT
211
0178                         *
212
0179                         ***************************************************
213
0180                         *   COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS)  *
214
0181                         ***************************************************
215
0182                         *
216
0183                         ** COMPACT FLASH SITS AT PORT 4
217
0184                         *
218
0185                         CF_BASE    EQU MONIO+$0100
219
0186                         CF_DATA    EQU CF_BASE+0
220
0187                         CF_ERROR   EQU CF_BASE+2 ; read error
221
0188                         CF_FEATURE EQU CF_BASE+2 ; write feature
222
0189                         CF_SECCNT  EQU CF_BASE+4
223
0190                         CF_SECNUM  EQU CF_BASE+6
224
0191                         CF_CYLLO   EQU CF_BASE+8
225
0192                         CF_CYLHI   EQU CF_BASE+10
226
0193                         CF_HEAD    EQU CF_BASE+12
227
0194                         CF_STATUS  EQU CF_BASE+14 ; read status
228
0195                         CF_COMAND  EQU CF_BASE+14 ; write command
229
0196                         CF_AUX     EQU CF_BASE+30
230
0197                         *
231
0198                         * Command Equates
232
0199                         *
233
0200                         CMDREAD    EQU $20 ; Read Single sector
234
0201                         CMDWRITE   EQU $30 ; Write Single sector
235
0202                         AUXRESET   EQU $06 ; Reset IDE
236
0203                         AUXRSTREL  EQU $02 ; Reset release IRQ masked
237
0204                         HEADLBA    EQU $E0
238
0205                         *
239
0206                         * Status bit equates
240
0207                         *
241
0208                         BUSY       EQU $80
242
0209                         DRDY       EQU $40
243
0210                         DRQ        EQU $08
244
0211                         ERR        EQU $01
245
0212                         *
246
0213                                    ENDIF CF8OPT
247
0213                                    ENDIF CF8OPT
248
0214                         *
249
0215                                 IFD RTCOPT
250
0216                         *
251
0217                         **************************************************
252
0218                         * MM58167A REAL TIME CLOCK MEMORY MAP:
253
0219                         **************************************************
254
0220                         *
255
0221                         ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5
256
0222                         *
257
0223                         CLOCK  EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS
258
0224                         *
259
0225                         * COUNTER AND COMPARITOR REGISTERS:
260
0226                         *
261
0227                         * Both the Clock Counter and Clock Comparitor
262
0228                         * consist of 8 registers for holding the time.
263
0229                         * The register offsets from the Counter and
264
0230                         * Comparitor registers are listed above.
265
0231                         *
266
0232                         COUNTR EQU CLOCK+0
267
0233                         CMPRAM EQU CLOCK+8 COMPARITOR REGISTERS
268
0234                         *
269
0235                         * CLOCK REGISTER OFFSETS:
270
0236                         * These register offsets are used for the CLOCK
271
0237                         * and comparitor ram CMPRAM.
272
0238                         *
273
0239                         S10000 EQU 0 TEN THOUNSANDTHS OF SECONDS
274
0240                         S100   EQU 1 HUNDRETHS AND TENTHS OF SECONDS
275
0241                         SECOND EQU 2
276
0242                         MINUIT EQU 3
277
0243                         HOUR   EQU 4
278
0244                         WKDAY  EQU 5
279
0245                         MTHDAY EQU 6
280
0246                         MONTH  EQU 7
281
0247                         *
282
0248                         * INTERRUPT OUTPUT REGISTERS:
283
0249                         *
284
0250                         * An interrupt output may be generated at the
285
0251                         * following rates by setting the appropriate bit
286
0252                         * in the Interrupt Control Register (CINTCR).
287
0253                         * The Interrupt Status Register (CINTSR) must be
288
0254                         * read to clear the interrupt and will return
289
0255                         * the source of the interrupt.
290
0256                         *
291
0257                         * 1/Month      Bit 7
292
0258                         * 1/Week       Bit 6
293
0259                         * 1/Day        Bit 5
294
0260                         * 1/Hour       Bit 4
295
0261                         * 1/Minuite    Bit 3
296
0262                         * 1/Second     Bit 2
297
0263                         * 10/Second    Bit 1
298
0264                         * Comparitor   Bit 0
299
0265                         *
300
0266                         CINTSR  EQU CLOCK+16 INTERRUPT STATUS REGISTER
301
0267                         CINTCR  EQU CLOCK+17 INTERRUPT CONTROL REGISTER
302
0268                         *
303
0269                         * COUNTER AND RAM RESETS; GO COMMAND.
304
0270                         *
305
0271                         * The counter and comparitor may be reset
306
0272                         * by writing $FF into CTRRES and CMPRES
307
0273                         * respectivly.
308
0274                         * A write to the Go command register (GOCMND)
309
0275                         * will reset the 1/1000ths, 1/100ths and 1/10ths
310
0276                         * of a second counter.
311
0277                         *
312
0278                         CTRRES EQU CLOCK+18 COUNTER RESET
313
0279                         CMPRES EQU CLOCK+19 COMPARITOR RAM RESET
314
0280                         GOCMND EQU CLOCK+21 GO COMMAND
315
0281                         *
316
0282                         * CLOCK STATUS REGISTER.
317
0283                         *
318
0284                         * The counter takes 61 usec. to rollover for
319
0285                         * every 1KHz clock pulse. If the Status bit is
320
0286                         * set after reading the counter, the counter
321
0287                         * should be re-read to ensure the time is correct.
322
0288                         *
323
0289                         CLKSTA EQU CLOCK+20 STATUS BIT
324
0290                         SBYINT EQU CLOCK+22 STANDBY INTERRUPT
325
0291                         TSTMOD EQU CLOCK+31 TEST MODE REGISTER
326
0292                                ENDIF RTCOPT
327
0292                                ENDIF RTCOPT
328
0293                         *
329
0294                                IFD TRAOPT
330
0295                         *
331
0296                         **************************************************
332
0297                         * PIA INTERRUPT TIMER
333
0298                         **************************************************
334
0299                         *
335
0300                         ** PIA INTERRUPT TIMER SITS ON PORT 7
336
0301                         *
337
0302                         ** PIA TIMER FOR SINGLE STEP / TRACE
338
0303                         *
339
0304                         * TADATA = Output = Timer preset register
340
0305                         * TACTRL - CA1 = input = rising edge = NMI
341
0306                         *        - CA2 = Output = Timer Reset (Active High)
342
0307                         * TBDATA = Input = Timer read back register
343
0308                         * TBCTRL - CB1 = input = rising edge = FIRQ
344
0309                         *        - CB2 = output = strobe low on write to TBDATA = Timer Preset
345
0310                         *
346
0311                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
347
0312                         * CRA1 = 1 CA1 Rising edge IRQ
348
0313                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
349
0314                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
350
0315                         * CRA4 = 1 ] CA2 = Set/Reset output
351
0316                         * CRA5 = 1 ]
352
0317                         * CRA6 = X CA2 Input Interrupt Flag
353
0318                         * CRA7 = X CA1 Interrupt Flag
354
0319                         *
355
0320                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
356
0321                         * CRB1 = 1 CB1 Rising edge IRQ
357
0322                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
358
0323                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
359
0324                         * CRB4 = 1 ] CB2 = Set/Reset output
360
0325                         * CRB5 = 1 ]
361
0326                         * CRB6 = X CB2 Input Interrupt Flag
362
0327                         * CRB7 = X CB1 Interrupt Flag
363
0328                         *
364
0329                         * DDRA = 0 TADATA = Input, DDRA = 1 TADATA = Output
365
0330                         * DDRB = 0 TBDATA = Input, DDRB = 1 TBDATA = Output
366
0331                         *
367
0332                         TADATA EQU MONIO+$70 Timer preset port
368
0333                         TACTRL EQU MONIO+$71
369
0334                         TBDATA EQU MONIO+$72 Timer read back port
370
0335                         TBCTRL EQU MONIO+$73
371
0336                         *
372
0337                         TRADEL EQU 13  Number of E cycles for RTI (May need to be fudged)
373
0338                         *
374
0339                                ENDIF TRAOPT
375
0339                                ENDIF TRAOPT
376
0340                                IFD ADSOPT
377
0341                         *
378
0342                         ***************************************************
379
0343                         *   SERIAL PORT FOR DG640                         *
380
0344                         ***************************************************
381
0345                         *
382
0346                         ** SET UP FOR ACKERMAN DIGITAL ADS6809
383
0347                         ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA
384
0348                         *
385
0349                         ACIAS   EQU   MONIO+$400   CONTROL PORT
386
0350                         *
387
0351                                 ENDIF ADSOPT
388
0351                                 ENDIF ADSOPT
389
0352                                 IFD PRTOPT
390
0353                         *
391
0354                         ***************************************************
392
0355                         * PRINTER INTERFACE                               *
393
0356                         ***************************************************
394
0357                         *
395
0358                         PADATA EQU MONIO+$404
396
0359                         PACTRL EQU MONIO+$405
397
0360                         PBDATA EQU MONIO+$406
398
0361                         PBCTRL EQU MONIO+$407
399
0362                         *
400
0363                         ** CB1  ACK.  I/P
401
0364                         ** CB2  STB.  O/P
402
0365                         ** PB0 - PB7   DATA 1 - 8   O/P
403
0366                         ** PORT A BIT ASSIGNMENT
404
0367                         *
405
0368                         PBUSY  EQU $80 I/P
406
0369                         PEMPTY EQU $40 I/P
407
0370                         SELECT EQU $20 I/P
408
0371                         PERROR EQU $10 I/P
409
0372                         PRESET EQU %00000100 O/P PA3 = 0
410
0373                         AUTOFD EQU %00001000 O/P PA2 = 0
411
0374                         DIRMSK EQU %00001100
412
0375                                ENDIF PRTOPT
413
0375                                ENDIF PRTOPT
414
0376                                IFD DG640OPT
415
0377                         *
416
0378                         ***************************************************
417
0379                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
418
0380                         ***************************************************
419
0381                         *
420
0382                         ** VIDEO DISPLAY DEFINITIONS
421
0383                         *
422
0384                         SCREEN  EQU   MONIO+$0800 START OF SCREEN MEMORY
423
0385                         LINLEN  EQU   64          LENGTH OF A LINE
424
0386                         NUMLIN  EQU   16          NUMBER OF LINES
425
0387                         SCNLEN  EQU   $400        LENGTH OF SCREEN
426
0388                                 ENDIF DG640OPT
427
0388                                 ENDIF DG640OPT
428
0389                         *
429
0390                                 IFD   DMAFOPT
430
0391                         *
431
0392                         ***************************************************
432
0393                         *   DMAF2 8" DRIVE                                *
433
0394                         ***************************************************
434
0395                         *
435
0396 F000                    ADDREG  EQU   $F000  ADDRESS REGISTER
436
0397 F002                    CNTREG  EQU   $F002  COUNT REGISTER
437
0398 F010                    CCREG   EQU   $F010  CHANNEL CONTROL REGISTER
438
0399 F014                    PRIREG  EQU   $F014  DMA PRIORITY REGISTER
439
0400 F015                    AAAREG  EQU   $F015  ???
440
0401 F016                    BBBREG  EQU   $F016  ???
441
0402 F020                    COMREG  EQU   $F020  1791 COMMAND REGISTER
442
0403 F022                    SECREG  EQU   $F022  SECTOR REGISTER
443
0404 F024                    DRVREG  EQU   $F024  DRIVE SELECT LATCH
444
0405 F040                    CCCREG  EQU   $F040  ???
445
0406                                 ENDIF DMAFOPT
446
0407                                 IFD DATOPT
447
0408                         **************************************************
448
0409                         * DYNAMIC ADDRESS TRANSLATION REGISTERS          *
449
0410                         **************************************************
450
0411                         *
451
0412 FFF0                    IC11    EQU  $FFF0  DAT RAM CHIP
452
0413 55AA                    TSTPAT  EQU  $55AA  TEST PATTERN
453
0414                                 ENDIF DATOPT
454
0415                         *
455
0003                                 END
456
0000                          INCLUDE "sys09bug.txt"
457
0001                         * NAM SYS09BUG12 SYSTEM09 MONITOR
458
0002                          OPT l
459
 
460
 
461
sys09bug.txt                                                                      page   2
462
0004                         *
463
0005                         * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL
464
0006                         * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY....
465
0007                         *
466
0008                         * ALLEN CLARK            WALLACE WATSON
467
0009                         * 2502 REGAL OAKS LANE   4815 EAST 97th AVE.
468
0010                         * LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617
469
0011                         * PH. 813-977-0347       PH. 813-985-1359
470
0012                         *
471
0013                         * MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT
472
0014                         *                                 2561 NANTUCKET DR APT. E
473
0015                         *                                 ATLANTA, GA  30345
474
0016                         *                                 PH. 404-320-1043
475
0017                         *
476
0018                         * MODIFIED TO SYS09BUG VER 1.0
477
0019                         * FOR:     SYSTEM09 FPGA SYSTEM
478
0020                         * BY:      JOHN KENT
479
0021                         * DATE:    21ST NOVEMBER 2006
480
0022                         * REMOVED: DISK BOOTS
481
0023                         *          MEMORY TEST
482
0024                         * ADDED:   ADM3A VDU DRIVER
483
0025                         *
484
0026                         * MODIFIED TO SYS09BUG VER 1.1
485
0027                         * FOR:     SYSTEM09 FPGA SYSTEM
486
0028                         * BY:      JOHN KENT
487
0029                         * DATE:    7TH JANUARY 2007
488
0030                         * ADDED:   'U' USER EXTENTION COMMANDS AT $F000
489
0031                         *          CONDITIONAL ASSEMBLY OF FLOPPY BOOTS
490
0032                         *          AND REALTIME CLOCK
491
0033                         *
492
0034                         * MODIFIED TO SYS09BUG VER 1.2
493
0035                         * FOR:     SYSTEM09 FPGA SYSTEM
494
0036                         * BY:      JOHN KENT
495
0037                         * DATE:    21ST MAY 2007
496
0038                         * ADDED:   COMPACT FLASH BOOT TO FPGA VERSION
497
0039                         *          REMOVED PORT REDIRECTION ON PUNCH & LOAD
498
0040                         *
499
0041                         * Modified to SYS09BUG VER 1.3
500
0042                         * FOR:     SYSTEM09 FPGA SYSTEM
501
0043                         * BY:      JOHN KENT
502
0044                         * DATE:    8TH JAN 2008
503
0045                         * ADDED:   CONDITIONALS FOR SPARTAN3E STARTER BOARD
504
0046                         *          WITH ONLY 32K OF RAM
505
0047                         *
506
0048                         * Modified to SYS09BUG VER 1.4
507
0049                         * FOR:     SYSTEM09 FPGA SYSTEM
508
0050                         * BY:      JOHN KENT
509
0051                         * DATE:    3RD FEB 2008
510
0052                         * ADDED:   CONDITIONALS FOR XESS BOARD WITH IDE
511
0053                         *          SEPERATE CONDITIONAL FOR S3 STARTER AND B5-X300
512
0054                         *          16 BIT IDE DISK BOOT STRAP ROUTINE
513
0055                         * CHANGED: SEPARARTED OPTIONS EQUATES AND BODY INTO SEPARATE FILES
514
0056                         *
515
0057                         *       *** COMMANDS ***
516
0058                         *
517
0059                         * CONTROL A   = ALTER THE "A" ACCUMULATOR
518
0060                         * CONTROL B   = ALTER THE "B" ACCUMULATOR
519
0061                         * CONTROL C   = ALTER THE CONDITION CODE REGISTER
520
0062                         * CONTROL D   = ALTER THE DIRECT PAGE REGISTER
521
0063                         * CONTROL P   = ALTER THE PROGRAM COUNTER
522
0064                         * CONTROL U   = ALTER USER STACK POINTER
523
0065                         * CONTROL X   = ALTER "X" INDEX REGISTER
524
0066                         * CONTROL Y   = ALTER "Y" INDEX REGISTER
525
0067                         * B hhhh      = SET BREAKPOINT AT LOCATION $hhhh
526
0068                         * D           = 5.25" MINIFLOPPY BOOT
527
0069                         * E ssss-eeee = EXAMINE MEMORY
528
0070                         *               FROM STARTING ADDRESS ssss
529
0071                         *               TO ENDING ADDRESS eeee.
530
0072                         * G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI
531
0073                         * L           = LOAD TAPE
532
0074                         * M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh
533
0075                         * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR.
534
0076                         * R           = DISPLAY REGISTER CONTENTS
535
0077                         * S           = DISPLAY STACK FROM ssss TO $DFC0
536
0078                         * U           = 8" DMAF2 FLOPPY BOOT
537
0079                         * U           = USER EXTENSION COMMANDS AT $F000
538
0080                         * X           = REMOVE ALL BREAKPOINTS
539
0081                         *
540
0082                         *
541
0083                         ***************************************************
542
0084                         *   SYS09BUG VARIABLE SPACE
543
0085                         ***************************************************
544
0086                         *
545
0087 DFC0                            ORG   MONRAM
546
0088 DFC0                    STACK   EQU   *  TOP OF INTERNAL STACK
547
0089 DFC0                    NMI     RMB   2  USER NMI VECTOR
548
0090 DFC2                    SWI3    RMB   2  SOFTWARE INTERRUPT VECTOR #3
549
0091 DFC4                    SWI2    RMB   2  SOFTWARE INTERRUPT VECTOR #2
550
0092 DFC6                    FIRQ    RMB   2  FAST INTERRUPT VECTOR
551
0093 DFC8                    IRQ     RMB   2  INTERRUPT VECTOR
552
0094 DFCA                    SWI     RMB   2  SOFTWARE INTERRUPT VECTOR
553
0095 DFCC                    SVCVO   RMB   2  SUPERVISOR CALL VECTOR ORGIN
554
0096 DFCE                    SVCVL   RMB   2  SUPERVISOR CALL VECTOR LIMIT
555
0097                                 IFD DATOPT
556
0098 DFD0                    LRARAM  RMB   16 LRA ADDRESSES
557
0099                                 ENDIF DATOPT
558
0100 DFE0                    CPORT   RMB   2  RE-VECTORABLE CONTROL PORT
559
0101 DFE2                    ECHO    RMB   1  ECHO FLAG
560
0102 DFE3                    BPTBL   RMB   24 BREAKPOINT TABLE BASE ADDR
561
0103                                 IFD  TRAOPT
562
0104                         NMISAV  RMB 2 NMI Jump Vector Backup
563
0105                         TRACNT  RMB 2 Trace Count
564
0106                                 ENDIF TRAOPT
565
0106                                 ENDIF TRAOPT
566
0107                                 IFD VDUOPT
567
0108                         *
568
0109                         **************************************************
569
0110                         *   VDU8 DISPLAY DRIVER VARIABLES                                    *
570
0111                         **************************************************
571
0112                         *
572
0113                         **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ******
573
0114                         COLADX  RMB   1         CURSOR COLUMN
574
0115                         ROWADX  RMB   1         CURSOR ROW
575
0116                         **************************************************
576
0117                         *
577
0118                         NEWROW  RMB   1         NEW ROW TEMP FOR ESCAPE
578
0119                         ESCFLG  RMB   1         ESCAPE SEQUENCE ACTIVE
579
0120                                 ENDIF VDUOPT
580
0120                                 ENDIF VDUOPT
581
0121                                IFD DG640OPT
582
0122                         *
583
0123                         ***************************************************
584
0124                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
585
0125                         ***************************************************
586
0126                         *
587
0127                         ***** ALWAYS KEEP THESE TWO BYTES TOGETHER *****
588
0128                         COLADX  RMB   1           CURSOR COLUMN
589
0129                         ROWADX  RMB   1           CURSOR ROW
590
0130                         *************************************************
591
0131                         CURSOR  RMB   2           ABSOLUTE SCREEN ADDRESS
592
0132                         NEWROW  RMB   1           NEW ROW TEMP FOR ESCAPE
593
0133                         ESCFLG  RMB   1           ESCAPE SEQUENCE ACTIVE
594
0134                                 ENDIF DG640OPT
595
0134                                 ENDIF DG640OPT
596
0135                         *
597
0136                         *
598
0137                         ***************************************************
599
0138                         *   START OF ROM                                  *
600
0139                         ***************************************************
601
0140                         *
602
0141 F800                            ORG   MONROM
603
0142 F800 F8 14                      FDB   MONITOR
604
0143 F802 F8 61                      FDB   NEXTCMD
605
0144 F804 FD 25                      FDB   INCH
606
0145 F806 FD 1F                      FDB   INCHE
607
0146 F808 FD 34                      FDB   INCHEK
608
0147 F80A FD 42                      FDB   OUTCH
609
0148 F80C FC 17                      FDB   PDATA
610
0149 F80E FB A6                      FDB   PCRLF
611
0150 F810 FB A2                      FDB   PSTRNG
612
0151 F812 FA B6                      FDB   LRA
613
0152                         *
614
0153                                 IFD ADSOPT
615
0154                                 FDB PCHK  CHECK FOR PRINTER INPUT
616
0155                                 FDB PINIZ INITIATE PRINTER
617
0156                                 FDB POUTCH OUTPUT CH. TO PRINTER
618
0157                                 FDB VINIZ
619
0158                                 FDB VOUTCH
620
0159                                 FDB ACINIZ
621
0160                                 FDB AOUTCH
622
0161                                 ENDIF ADSOPT
623
0161                                 ENDIF ADSOPT
624
0162                         *
625
0163                         * MONITOR
626
0164                         *
627
0165                         * VECTOR ADDRESS STRING IS.....
628
0166                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
629
0167                         *
630
0168 F814 8E FD 9F           MONITOR LDX   #RAMVEC POINT TO VECTOR ADDR. STRING
631
0169 F817 10 8E DF C0                LDY   #STACK  POINT TO RAM VECTOR LOCATION
632
0170 F81B C6 10                      LDB   #$10    BYTES TO MOVE = 16
633
0171 F81D A6 80              LOOPA   LDA   ,X+     GET VECTOR BYTE
634
0172 F81F A7 A0                      STA   ,Y+     PUT VECTORS IN RAM / $DFC0-$DFCF
635
0173 F821 5A                         DECB          SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
636
0174 F822 26 F9                      BNE   LOOPA   CONTINUE UNTIL ALL VECTORS MOVED
637
0175                         *
638
0176                         * CONTENTS     FROM         TO      FUNCTION
639
0177                         *  $F8A1       $FE40      $DFC0     USER-V
640
0178                         *  $F8A1       $FE42      $DFC2     SWI3-V
641
0179                         *  $F8A1       $FE44      $DFC4     SWI2-V
642
0180                         *  $F8A1       $FE46      $DFC6     FIRQ-V
643
0181                         *  $F8A1       $FE48      $DFC8     IRQ-V
644
0182                         *  $FAB0       $FE4A      $DFCA     SWI-V
645
0183                         *  $FFFF       $FE4C      $DFCC     SVC-VO
646
0184                         *  $FFFF       $FE4E      $DFCE     SVC-VL
647
0185                         *
648
0186 F824 8E E0 00                   LDX  #ACIAS
649
0187 F827 BF DF E0                   STX  CPORT    STORE ADDR. IN RAM
650
0188 F82A 17 01 5B                   LBSR XBKPNT   CLEAR OUTSTANDING BREAKPOINTS
651
0189 F82D C6 0C                      LDB  #12      CLEAR 12 BYTES ON STACK
652
0190 F82F 6F E2              CLRSTK  CLR  ,-S
653
0191 F831 5A                         DECB
654
0192 F832 26 FB                      BNE  CLRSTK
655
0193 F834 30 8C DD                   LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY
656
0194 F837 AF 6A                      STX  10,S    ON STACK
657
0195 F839 86 D0                      LDA  #$D0    PRESET CONDITION CODES ON STACK
658
0196 F83B A7 E4                      STA  ,S
659
0197 F83D 1F 43                      TFR  S,U
660
0198 F83F 17 05 11                   LBSR IOINIZ  INITIALIZE CONTROL PORT
661
0199 F842 8E FD AF                   LDX  #MSG1   POINT TO MONITOR MESSAGE
662
0200 F845 17 03 CF                   LBSR PDATA   PRINT MSG
663
0201                         *
664
0202                                 IFD DATOPT
665
0203 F848 8E DF D0                   LDX  #LRARAM POINT TO LRA RAM STORAGE AREA
666
0204 F84B 4F                         CLRA START   TOTAL AT ZERO
667
0205 F84C C6 0D                      LDB  #13     TOTAL UP ALL ACTIVE RAM MEMORY
668
0206 F84E 6D 85              FNDREL  TST  B,X     TEST FOR RAM AT NEXT LOC.
669
0207 F850 27 03                      BEQ  RELPAS  IF NO RAM GO TO NEXT LOC.
670
0208 F852 8B 04                      ADDA #4      ELSE ADD 4K TO TOTAL
671
0209 F854 19                         DAA          ADJ. TOTAL FOR DECIMAL
672
0210 F855 5A                 RELPAS  DECB         SUB. 1 FROM LOCS. TO TEST
673
0211 F856 2A F6                      BPL  FNDREL  PRINT TOTAL OF RAM
674
0212 F858 17 04 94                   LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
675
0213 F85B 8E FD CF                   LDX  #MSG2   POINT TO MSG 'K' CR/LF + 3 NULS
676
0214 F85E 17 03 B6                   LBSR PDATA   PRINT MSG
677
0215                                 ENDIF DATOPT
678
0216                         *
679
0217                                 IFD TRAOPT
680
0218                                 LBSR TRAINZ
681
0219                                 ENDIF TRAOPT
682
0219                                 ENDIF TRAOPT
683
0220                         *
684
0221                         ***** NEXTCMD *****
685
0222                         *
686
0223 F861 8E FD D6           NEXTCMD LDX  #MSG3   POINT TO MSG ">"
687
0224 F864 17 03 3B                   LBSR PSTRNG  PRINT MSG
688
0225 F867 17 04 BB                   LBSR INCH    GET ONE CHAR. FROM TERMINAL
689
0226 F86A 84 7F                      ANDA #$7F    STRIP PARITY FROM CHAR.
690
0227 F86C 81 0D                      CMPA #$0D    IS IT CARRIAGE RETURN ?
691
0228 F86E 27 F1                      BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR.
692
0229 F870 1F 89                      TFR  A,B     PUT CHAR. IN "B" ACCUM.
693
0230 F872 81 20                      CMPA #$20    IS IT CONTROL OR DATA CHAR ?
694
0231 F874 2C 09                      BGE  PRTCMD  IF CMD CHAR IS DATA, PRNT IT
695
0232 F876 86 5E                      LDA  #'^     ELSE CNTRL CHAR CMD SO...
696
0233 F878 17 04 C7                   LBSR OUTCH   PRINT "^"
697
0234 F87B 1F 98                      TFR  B,A     RECALL CNTRL CMD CHAR
698
0235 F87D 8B 40                      ADDA #$40    CONVERT IT TO ASCII LETTER
699
0236 F87F 17 04 C0           PRTCMD  LBSR OUTCH   PRNT CMD CHAR
700
0237 F882 17 04 BB                   LBSR OUT1S   PRNT SPACE
701
0238 F885 C1 60                      CMPB #$60
702
0239 F887 2F 02                      BLE  NXTCH0
703
0240 F889 C0 20                      SUBB #$20
704
0241                         *
705
0242                         ***** DO TABLE LOOKUP *****
706
0243                         *   FOR COMMAND FUNCTIONS
707
0244                         *
708
0245 F88B 8E FD 66           NXTCH0  LDX  #JMPTAB POINT TO JUMP TABLE
709
0246 F88E E1 80              NXTCHR  CMPB ,X+     DOES COMMAND MATCH TABLE ENTRY ?
710
0247 F890 27 0F                      BEQ  JMPCMD  BRANCH IF MATCH FOUND
711
0248 F892 30 02                      LEAX 2,X     POINT TO NEXT ENTRY IN TABLE
712
0249 F894 8C FD 9F                   CMPX #TABEND REACHED END OF TABLE YET ?
713
0250 F897 26 F5                      BNE  NXTCHR  IF NOT END, CHECK NEXT ENTRY
714
0251 F899 8E FD D8                   LDX  #MSG4   POINT TO MSG "WHAT?"
715
0252 F89C 17 03 78                   LBSR PDATA   PRINT MSG
716
0253 F89F 20 C0                      BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD
717
0254 F8A1 AD 94              JMPCMD  JSR  [,X]    JUMP TO COMMAND ROUTINE
718
0255 F8A3 20 BC                      BRA  NEXTCMD PROMPT FOR NEW COMMAND
719
0256                         *
720
0257                         * "G" GO OR CONTINUE
721
0258                         *
722
0259 F8A5 1F 34              GO      TFR  U,S
723
0260 F8A7 3B                 RTI     RTI
724
0261                         *
725
0262                         ***** "M" MEMORY EXAMINE AND CHANGE *****
726
0263                         *
727
0264 F8A8 17 03 F3           MEMCHG  LBSR IN1ADR  INPUT ADDRESS
728
0265 F8AB 29 2D                      BVS  CHRTN   IF NOT HEX, RETURN
729
0266 F8AD 1F 12                      TFR  X,Y     SAVE ADDR IN "Y"
730
0267 F8AF 8E FD DE           MEMC2   LDX  #MSG5   POINT TO MSG " - "
731
0268 F8B2 17 02 ED                   LBSR PSTRNG  PRINT MSG
732
0269 F8B5 1F 21                      TFR  Y,X     FETCH ADDRESS
733
0270 F8B7 17 04 2D                   LBSR OUT4H   PRINT ADDR IN HEX
734
0271 F8BA 17 04 83                   LBSR OUT1S   OUTPUT SPACE
735
0272 F8BD A6 A4                      LDA  ,Y      GET CONTENTS OF CURRENT ADDR.
736
0273 F8BF 17 04 2D                   LBSR OUT2H   OUTPUT CONTENTS IN ASCII
737
0274 F8C2 17 04 7B                   LBSR OUT1S   OUTPUT SPACE
738
0275 F8C5 17 03 E6                   LBSR BYTE    LOOP WAITING FOR OPERATOR INPUT
739
0276 F8C8 28 11                      BVC  CHANGE  IF VALID HEX GO CHANGE MEM. LOC.
740
0277 F8CA 81 08                      CMPA #8      IS IT A BACKSPACE (CNTRL H)?
741
0278 F8CC 27 E1                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
742
0279 F8CE 81 18                      CMPA #$18    IS IT A CANCEL (CNTRL X)?
743
0280 F8D0 27 DD                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
744
0281 F8D2 81 5E                      CMPA #'^     IS IT AN UP ARROW?
745
0282 F8D4 27 17                      BEQ  BACK    DISPLAY PREVIOUS BYTE
746
0283 F8D6 81 0D                      CMPA #$D     IS IT A CR?
747
0284 F8D8 26 0F                      BNE  FORWRD  DISPLAY NEXT BYTE
748
0285 F8DA 39                 CHRTN   RTS          EXIT ROUTINE
749
0286                         *
750
0287                         *
751
0288 F8DB A7 A4              CHANGE  STA  ,Y      CHANGE BYTE IN MEMORY
752
0289 F8DD A1 A4                      CMPA ,Y      DID MEMORY BYTE CHANGE?
753
0290 F8DF 27 08                      BEQ  FORWRD  $F972
754
0291 F8E1 17 04 5C                   LBSR OUT1S   OUTPUT SPACE
755
0292 F8E4 86 3F                      LDA  #'?     LOAD QUESTION MARK
756
0293 F8E6 17 04 59                   LBSR OUTCH   PRINT IT
757
0294 F8E9 31 21              FORWRD  LEAY 1,Y     POINT TO NEXT HIGHER MEM LOCATION
758
0295 F8EB 20 C2                      BRA  MEMC2   PRINT LOCATION & CONTENTS
759
0296 F8ED 31 3F              BACK    LEAY -1,Y    POINT TO LAST MEM LOCATION
760
0297 F8EF 20 BE                      BRA  MEMC2   PRINT LOCATION & CONTENTS
761
0298                         *
762
0299                         * "S" DISPLAY STACK
763
0300                         * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM
764
0301                         ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT.
765
0302                         *
766
0303 F8F1 17 03 2A           DISSTK  LBSR PRTSP   PRINT CURRENT STACK POINTER
767
0304 F8F4 1F 32                      TFR  U,Y
768
0305 F8F6 8E DF C0                   LDX  #STACK  LOAD INTERNAL STACK AS UPPER LIMIT
769
0306 F8F9 30 1F                      LEAX -1,X    POINT TO CURRENT STACK
770
0307 F8FB 20 05                      BRA  MDUMP1  ENTER MEMORY DUMP OF STACK CONTENTS
771
0308                         *
772
0309                         * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII
773
0310                         * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG.
774
0311                         *                        UPPER ADDRESS IN X-REG.
775
0312                         * IF HEX ADDRESSES ARE INVALID (V)=1.
776
0313                         *
777
0314 F8FD 17 03 93           MEMDUMP LBSR IN2ADR  INPUT ADDRESS BOUNDRIES
778
0315 F900 29 06                      BVS  EDPRTN  NEW COMMAND IF ILLEGAL HEX
779
0316 F902 34 20              MDUMP1  PSHS Y       COMPARE LOWER TO UPPER BOUNDS
780
0317 F904 AC E1                      CMPX ,S++    LOWER BOUNDS > UPPER BOUNDS?
781
0318 F906 24 01                      BCC  AJDUMP  IF NOT, DUMP HEX AND ASCII
782
0319 F908 39                 EDPRTN  RTS ;
783
0320                         *
784
0321                         * ADJUST LOWER AND UPPER ADDRESS LIMITS
785
0322                         * TO EVEN 16 BYTE BOUNDRIES.
786
0323                         *
787
0324                         * IF LOWER ADDR = $4532
788
0325                         * LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
789
0326                         *
790
0327                         * IF UPPER ADDR = $4567
791
0328                         * UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
792
0329                         *
793
0330                         * ENTER WITH LOWER ADDRESS IN X-REG.
794
0331                         *           -UPPER ADDRESS ON TOP OF STACK.
795
0332                         *
796
0333 F909 1F 10              AJDUMP  TFR  X,D     GET UPPER ADDR IN D-REG
797
0334 F90B C3 00 10                   ADDD #$10    ADD 16 TO UPPER ADDRESS
798
0335 F90E C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
799
0336 F910 34 06                      PSHS A,B     SAVE ON STACK AS UPPER DUMP LIMIT
800
0337 F912 1F 20                      TFR  Y,D     $F9A5 GET LOWER ADDRESS IN D-REG
801
0338 F914 C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
802
0339 F916 1F 01                      TFR  D,X     PUT IN X-REG AS LOWER DUMP LIMIT
803
0340 F918 AC E4              NXTLIN  CMPX ,S      COMPARE LOWER TO UPPER LIMIT
804
0341 F91A 27 05                      BEQ  SKPDMP  IF EQUAL SKIP HEX-ASCII DUMP
805
0342 F91C 17 04 15                   LBSR INCHEK  CHECK FOR INPUT FROM KEYBOARD
806
0343 F91F 27 03                      BEQ  EDUMP
807
0344 F921 32 62              SKPDMP  LEAS 2,S     READJUST STACK IF NOT DUMPING
808
0345 F923 39                         RTS          ;
809
0346                         *
810
0347                         * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
811
0348                         * FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
812
0349                         *
813
0350 F924 34 10              EDUMP   PSHS X       PUSH LOWER ADDR LIMIT ON STACK
814
0351 F926 8E FD DE                   LDX  #MSG5   POINT TO MSG " - "
815
0352 F929 17 02 76                   LBSR PSTRNG  PRINT MSG
816
0353 F92C AE E4                      LDX  ,S      LOAD LOWER ADDR FROM TOP OF STACK
817
0354 F92E 17 03 B6                   LBSR OUT4H   PRINT THE ADDRESS
818
0355 F931 17 04 0A                   LBSR OUT2S   2 SPACES
819
0356 F934 C6 10                      LDB  #$10    LOAD COUNT OF 16 BYTES TO DUMP
820
0357 F936 A6 80              ELOOP   LDA  ,X+     GET FROM MEMORY HEX BYTE TO PRINT
821
0358 F938 17 03 B4                   LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
822
0359 F93B 17 04 02                   LBSR OUT1S   OUTPUT SPACE
823
0360 F93E 5A                         DECB         $F9D1 DECREMENT BYTE COUNT
824
0361 F93F 26 F5                      BNE  ELOOP   CONTINUE TIL 16 HEX BYTES PRINTED
825
0362                         *
826
0363                         * PRINT 16 ASCII CHARACTERS
827
0364                         * IF NOT PRINTABLE OR NOT VALID
828
0365                         * ASCII PRINT A PERIOD (.)
829
0366 F941 17 03 FA                   LBSR OUT2S   2 SPACES
830
0367 F944 AE E1                      LDX  ,S++    GET LOW LIMIT FRM STACK - ADJ STACK
831
0368 F946 C6 10                      LDB  #$10    SET ASCII CHAR TO PRINT = 16
832
0369 F948 A6 80              EDPASC  LDA  ,X+     GET CHARACTER FROM MEMORY
833
0370 F94A 81 20                      CMPA #$20    IF LESS THAN $20, NON-PRINTABLE?
834
0371 F94C 25 04                      BCS  PERIOD  IF SO, PRINT PERIOD INSTEAD
835
0372 F94E 81 7E                      CMPA #$7E    IS IT VALID ASCII?
836
0373 F950 23 02                      BLS  PRASC   IF SO PRINT IT
837
0374 F952 86 2E              PERIOD  LDA  #'.     LOAD A PERIOD (.)
838
0375 F954 17 03 EB           PRASC   LBSR OUTCH   PRINT ASCII CHARACTER
839
0376 F957 5A                         DECB         DECREMENT COUNT
840
0377 F958 26 EE                      BNE  EDPASC
841
0378 F95A 20 BC                      BRA  NXTLIN
842
0379                         *
843
0380                         ***** "B" SET BREAKPOINT *****
844
0381                         *
845
0382 F95C 17 03 3F           BRKPNT  LBSR IN1ADR  GET BREAKPOINT ADDRESS
846
0383 F95F 29 1E                      BVS  EXITBP  EXIT IF INVALID HEX ADDR.
847
0384 F961 8C DF C0                   CMPX #STACK  ADDRESS ILLEGAL IF >=$DFC0
848
0385 F964 24 1A                      BCC  BPERR   IF ERROR PRINT (?), EXIT
849
0386 F966 34 10                      PSHS X       $FA82 PUSH BP ADDRESS ON STACK
850
0387 F968 8E FF FF                   LDX  #$FFFF  LOAD DUMMY ADDR TO TEST BP TABLE
851
0388 F96B 8D 55                      BSR BPTEST   TEST BP TABLE FOR FREE SPACE
852
0389 F96D 35 10                      PULS X       POP BP ADDRESS FROM STACK
853
0390 F96F 27 0F                      BEQ  BPERR   (Z) SET, OUT OF BP TABLE SPACE
854
0391 F971 A6 84                      LDA  ,X      GET DATA AT BREAKPOINT ADDRESS
855
0392 F973 81 3F                      CMPA #$3F    IS IT A SWI?
856
0393 F975 27 09                      BEQ  BPERR   IF SWI ALREADY, INDICATE ERROR
857
0394 F977 A7 A0                      STA  ,Y+     SAVE DATA BYTE IN BP TABLE
858
0395 F979 AF A4                      STX  ,Y      SAVE BP ADDRESS IN BP TABLE
859
0396 F97B 86 3F                      LDA  #$3F    LOAD A SWI ($3F)
860
0397 F97D A7 84                      STA  ,X      SAVE SWI AT BREAKPOINT ADDRESS
861
0398 F97F 39                 EXITBP  RTS ;
862
0399                         *
863
0400                         *  INDICATE ERROR SETTING BREAKPOINT
864
0401                         *
865
0402 F980 17 03 BD           BPERR   LBSR OUT1S   OUTPUT SPACE
866
0403 F983 86 3F                      LDA  #'?     LOAD (?), INDICATE BREAKPOINT ERROR
867
0404 F985 16 03 BA                   LBRA OUTCH   PRINT "?"
868
0405                         *
869
0406                         *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
870
0407                         *
871
0408 F988 10 8E DF E3        XBKPNT  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
872
0409 F98C C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
873
0410 F98E 8D 18              XBPLP   BSR  RPLSWI  REMOVE USED ENTRY IN BP TABLE
874
0411 F990 5A                         DECB  $FAAC  DECREMENT BP COUNTER
875
0412 F991 26 FB                      BNE  XBPLP   END OF BREAKPOINT TABLE?
876
0413 F993 39                         RTS
877
0414                         *
878
0415                         ***** SWI ENTRY POINT *****
879
0416                         *
880
0417 F994 1F 43              SWIE    TFR  S,U     TRANSFER STACK TO USER POINTER
881
0418 F996 AE 4A                      LDX  10,U    LOAD PC FROM STACK INTO X-REG
882
0419 F998 30 1F                      LEAX -1,X    ADJUST ADDR DOWN 1 BYTE.
883
0420 F99A 8D 26                      BSR  BPTEST  FIND BREAKPOINT IN BP TABLE
884
0421 F99C 27 04                      BEQ  REGPR   IF FOUND, REPLACE DATA AT BP ADDR
885
0422 F99E AF 4A                      STX  10,U    SAVE BREAKPOINT ADDR IN STACK
886
0423 F9A0 8D 06                      BSR  RPLSWI  GO REPLACE SWI WITH ORIGINAL DATA
887
0424 F9A2 17 02 D0           REGPR   LBSR REGSTR  GO PRINT REGISTERS
888
0425                         *
889
0426                                 IFD TRAOPT
890
0427                                 LDX #0
891
0428                                 STX TRACNT
892
0429                                 ENDIF TRAOPT
893
0429                                 ENDIF TRAOPT
894
0430                         *
895
0431 F9A5 16 FE B9                   LBRA NEXTCMD GET NEXT COMMAND
896
0432                         *
897
0433 F9A8 AE 21              RPLSWI  LDX  1,Y     LOAD BP ADDRESS FROM BP TABLE
898
0434 F9AA 8C DF C0                   CMPX #STACK  COMPARE TO TOP AVAILABLE USER MEMORY
899
0435 F9AD 24 0A                      BCC  FFSTBL  GO RESET TABLE ENTRY TO $FF'S
900
0436 F9AF A6 84                      LDA  ,X      GET DATA FROM BP ADDRESS
901
0437 F9B1 81 3F                      CMPA #$3F    IS IT SWI?
902
0438 F9B3 26 04                      BNE  FFSTBL  IF NOT, RESET TABLE ENTRY TO $FF'S
903
0439 F9B5 A6 A4                      LDA  ,Y      GET ORIGINAL DATA FROM BP TABLE
904
0440 F9B7 A7 84                      STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS
905
0441 F9B9 86 FF              FFSTBL  LDA  #$FF    LOAD $FF IN A-ACC
906
0442 F9BB A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE DATA TO $FF'S
907
0443 F9BD A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE ADDR TO $FF'S
908
0444 F9BF A7 A0                      STA  ,Y+
909
0445 F9C1 39                         RTS
910
0446                         *
911
0447                         ** SEARCH BREAKPOINT TABLE FOR MATCH **
912
0448                         *
913
0449 F9C2 10 8E DF E3        BPTEST  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
914
0450 F9C6 C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
915
0451 F9C8 A6 A0              FNDBP   LDA  ,Y+     LOAD DATA BYTE
916
0452 F9CA AC A1                      CMPX ,Y++    COMPARE ADDRESS, IS IT SAME?
917
0453 F9CC 27 04                      BEQ  BPADJ   IF SO, ADJUST POINTER FOR TABLE ENTRY
918
0454 F9CE 5A                         DECB         IF NOT, DECREMENT BREAKPOINT COUNTER
919
0455 F9CF 26 F7                      BNE  FNDBP   AND LOOK FOR NEXT POSSIBLE MATCH
920
0456 F9D1 39                         RTS ;
921
0457                         *
922
0458                         *
923
0459 F9D2 31 3D              BPADJ   LEAY -3,Y    MOVE POINTER TO BEGIN OF BP ENTRY
924
0460 F9D4 39                         RTS
925
0461                         *
926
0462                                 IFD TRAOPT
927
0463                         *
928
0464                         ** TRACE from address AAAA BB bytes
929
0465                         *
930
0466                         TRACE   LBSR ALTPC1 SET UP NEW PC
931
0467                                 BVS TREXIT ADDRESS ERROR, EXIT
932
0468                                 LBSR OUT1S
933
0469                                 LBSR IN1ADR Fetch Byte Count
934
0470                                 BVS TREXIT Byte Count error, EXIT
935
0471                                 STX TRACNT
936
0472                         *
937
0473                                 LDX NMI Save NMI Vector
938
0474                                 STX NMISAV
939
0475                                 LDX #NMIE Set up NMI for Tracing
940
0476                                 STX NMI
941
0477                                 LBSR TRAINZ   Initialise Hardware
942
0478                                 BRA TRACEG    Start Trace
943
0479                         TREXIT  RTS
944
0480                         *
945
0481                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
946
0482                         * CRA1 = 1 CA1 Rising edge IRQ
947
0483                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
948
0484                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
949
0485                         * CRA4 = 1 ] CA2 = Set/Reset output
950
0486                         * CRA5 = 1 ]
951
0487                         * CRA6 = X CA2 Input Interrupt Flag
952
0488                         * CRA7 = X CA1 Interrupt Flag
953
0489                         *
954
0490                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
955
0491                         * CRB1 = 1 CB1 Rising edge IRQ
956
0492                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
957
0493                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
958
0494                         * CRB4 = 1 ] CB2 = Set/Reset output
959
0495                         * CRB5 = 1 ]
960
0496                         * CRB6 = X CB2 Input Interrupt Flag
961
0497                         * CRB7 = X CB1 Interrupt Flag
962
0498                         *
963
0499                         *
964
0500                         ** TRACE NMI ENTRY POINT
965
0501                         *
966
0502                         NMIE    TFR S,U
967
0503                                 LDA #$36         Disable Interrupt, CA2 Low
968
0504                                 STA TACTRL
969
0505                                 LDA TADATA       Clear Interrupt flag by reading data port
970
0506                         *
971
0507                                 LBSR REGSTR       DUMP REGISTERS
972
0508                         *
973
0509                                 LDX 10,U         TEST IF NEXT INSTRUCTION IS A SWI
974
0510                                 LDA ,X
975
0511                                 CMPA #$3F
976
0512                                 BEQ TRACEX       EXIT ON SWI
977
0513                         *
978
0514                                 LDX TRACNT       CHECK IF TRACE COUNT EXPIRED
979
0515                                 BEQ TRACEX       YES, GO BACK TO THE MONITOR
980
0516                                 LEAX -1,X        DECREMENT TRACE COUNT
981
0517                                 STX TRACNT
982
0518                         *
983
0519                         **  TRACE GO (RESUME SINGLE STEP)
984
0520                         *
985
0521                         TRACEG  TFR U,S          SET UP PROGRAM STACK POINTER
986
0522                                 LDA #TRADEL      SET UP TIMER DELAY (NUMB CYCLES FOR RTI+1)
987
0523                                 STA TADATA
988
0524                                 LDA #$36         LOAD STROBE LOW
989
0525                                 STA TACTRL
990
0526                                 LDA TADATA       CLEAR INTERRUPT
991
0527                                 LDA #$36         RELEASE RESET
992
0528                                 STA TBCTRL
993
0529                                 LDA #$3F         RELEASE LOAD, ENABLE CA1 NMI, CA1 RISING EDGE
994
0530                                 STA TACTRL
995
0531                                 RTI              GO EXECUTE INSTRUCTION
996
0532                         *
997
0533                         TRACEX  LDX NMISAV       Restore NMI vector
998
0534                                 STX NMI
999
0535                                 LBRA NEXTCMD     Jump back to the command loop.
1000
0536                         *
1001
0537                         ** TRACE HARDWARE INITIALISATION
1002
0538                         *
1003
0539                         TRAINZ  LDA #$32         SELECT DDRA, CA2 LOW, NMI DISABLED
1004
0540                                 STA TACTRL
1005
0541                                 LDA #$3A         SELECT DDRB, CB2 HIGH, FIRQ DISABLED
1006
0542                                 STA TBCTRL
1007
0543                                 LDA #$FF         PORTA = OUTPUT
1008
0544                                 STA TADATA
1009
0545                                 LDA #$00         PORTB = INPUT
1010
0546                                 STA TBDATA
1011
0547                                 LDA #$36         SELECT OUTPUT REGISTER A, CA2 LOW
1012
0548                                 STA TACTRL
1013
0549                                 LDA #$3E         SELECT OUTPUT REGISTER B, CB2 HIGH
1014
0550                                 STA TBCTRL
1015
0551                                 RTS
1016
0552                         *
1017
0553                                 ENDIF TRAOPT
1018
0553                                 ENDIF TRAOPT
1019
0554                                 IFD  MFDCOPT
1020
0555                         *
1021
0556                         ** "U" MINI DISK BOOT
1022
0557                         *
1023
0558 F9D5 7D E0 18           MINBOOT TST  CMDFDC
1024
0559 F9D8 7F E0 14                   CLR  DRVFDC
1025
0560 F9DB 8E 00 00                   LDX  #$0000
1026
0561 F9DE 30 01              LOOP    LEAX $01,X
1027
0562 F9E0 8C 00 00                   CMPX #$0000
1028
0563 F9E3 26 F9                      BNE  LOOP
1029
0564 F9E5 86 0F                      LDA  #$0F
1030
0565 F9E7 B7 E0 18                   STA  CMDFDC
1031
0566 F9EA 8D 37                      BSR  DELAY
1032
0567 F9EC F6 E0 18           LOOP1   LDB  CMDFDC
1033
0568 F9EF C5 01                      BITB #$01
1034
0569 F9F1 26 F9                      BNE  LOOP1
1035
0570 F9F3 86 01                      LDA  #$01
1036
0571 F9F5 B7 E0 1A                   STA  SECFDC
1037
0572 F9F8 8D 29                      BSR  DELAY
1038
0573 F9FA 86 8C                      LDA  #$8C
1039
0574 F9FC B7 E0 18                   STA  CMDFDC
1040
0575 F9FF 8D 22                      BSR  DELAY
1041
0576 FA01 8E C0 00                   LDX  #$C000
1042
0577 FA04 20 09                      BRA  LOOP3
1043
0578 FA06 C5 02              LOOP2   BITB #$02
1044
0579 FA08 27 05                      BEQ  LOOP3
1045
0580 FA0A B6 E0 1B                   LDA  DATFDC
1046
0581 FA0D A7 80                      STA ,X+
1047
0582 FA0F F6 E0 18           LOOP3   LDB  CMDFDC
1048
0583 FA12 C5 01                      BITB #$01
1049
0584 FA14 26 F0                      BNE  LOOP2
1050
0585 FA16 C5 2C                      BITB #$2C
1051
0586 FA18 27 01                      BEQ  LOOP4
1052
0587 FA1A 39                         RTS
1053
0588                         *
1054
0589 FA1B 8E C0 00           LOOP4   LDX  #$C000
1055
0590 FA1E AF 4A                      STX  $0A,U
1056
0591 FA20 1F 34                      TFR  U,S
1057
0592 FA22 3B                         RTI
1058
0593                         *
1059
0594 FA23 C6 04              DELAY   LDB  #$04
1060
0595 FA25 5A                 LOOP5   DECB
1061
0596 FA26 26 FD                      BNE  LOOP5
1062
0597 FA28 39                         RTS
1063
0598                                 ENDIF MFDCOPT
1064
0599                         *
1065
0600                                 IFD  DMAFOPT
1066
0601                         *
1067
0602                         *** "D" DISK BOOT FOR DMAF2 ***
1068
0603                         *
1069
0604 FA29 86 DE              DBOOT   LDA  #$DE
1070
0605 FA2B B7 F0 24                   STA  DRVREG
1071
0606 FA2E 86 FF                      LDA  #$FF
1072
0607 FA30 B7 F0 14                   STA  PRIREG     $FAF8
1073
0608 FA33 B7 F0 10                   STA  CCREG
1074
0609 FA36 B7 F0 15                   STA  AAAREG
1075
0610 FA39 B7 F0 16                   STA  BBBREG
1076
0611 FA3C 7D F0 10                   TST  CCREG
1077
0612 FA3F 86 D8                      LDA  #$D8
1078
0613 FA41 B7 F0 20                   STA  COMREG
1079
0614 FA44 17 00 96                   LBSR DLY
1080
0615 FA47 B6 F0 20           DBOOT0  LDA  COMREG
1081
0616 FA4A 2B FB                      BMI  DBOOT0
1082
0617 FA4C 86 09                      LDA  #$09
1083
0618 FA4E B7 F0 20                   STA  COMREG
1084
0619 FA51 17 00 89                   LBSR DLY
1085
0620                         *
1086
0621 FA54 B6 F0 20           DISKWT  LDA  COMREG FETCH DRIVE STATUS
1087
0622 FA57 85 01                      BITA #1 TEST BUSY BIT
1088
0623 FA59 26 F9                      BNE  DISKWT LOOP UNTIL NOT BUSY
1089
0624                         *
1090
0625 FA5B 85 10                      BITA #$10
1091
0626 FA5D 26 CA                      BNE  DBOOT
1092
0627                         *
1093
0628 FA5F 8E C0 00                   LDX  #$C000 LOGICAL ADDR. = $C000
1094
0629 FA62 8D 52                      BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
1095
0630 FA64 8A 10                      ORA  #$10
1096
0631 FA66 B7 F0 40                   STA  CCCREG
1097
0632 FA69 1F 10                      TFR  X,D
1098
0633 FA6B 43                         COMA  ;
1099
0634 FA6C 53                         COMB  ;
1100
0635 FA6D FD F0 00                   STD  ADDREG
1101
0636 FA70 8E FE FF                   LDX  #$FEFF LOAD DMA BYTE COUNT = $100
1102
0637 FA73 BF F0 02                   STX  CNTREG STORE IN COUNT REGISTER
1103
0638 FA76 86 FF                      LDA  #$FF LOAD THE CHANNEL REGISTER
1104
0639 FA78 B7 F0 10                   STA  CCREG
1105
0640 FA7B 86 FE                      LDA  #$FE SET CHANNEL 0
1106
0641 FA7D B7 F0 14                   STA  PRIREG
1107
0642 FA80 86 01                      LDA  #1 SET SECTOR TO "1"
1108
0643 FA82 B7 F0 22                   STA  SECREG ISSUE COMMAND
1109
0644 FA85 86 8C                      LDA  #$8C SET SINGLE SECTOR READ
1110
0645 FA87 B7 F0 20                   STA  COMREG ISSUE COMMAND
1111
0646 FA8A 8D 51                      BSR DLY
1112
0647                         *
1113
0648                         * THE FOLLOWING CODE TESTS THE STATUS OF THE
1114
0649                         * CHANNEL CONTROL REGISTER. IF "D7" IS NOT
1115
0650                         * ZERO THEN IT WILL LOOP WAITING FOR "D7"
1116
0651                         * TO GO TO ZERO. IF AFTER 65,536 TRIES IT
1117
0652                         * IS STILL A ONE THE BOOT OPERATION WILL
1118
0653                         * BE STARTED OVER FROM THE BEGINING.
1119
0654                         *
1120
0655 FA8C 5F                         CLRB  ;
1121
0656 FA8D 34 04              DBOOT1  PSHS B     $FB55
1122
0657 FA8F 5F                         CLRB  ;
1123
0658 FA90 7D F0 10           DBOOT2  TST  CCREG
1124
0659 FA93 2A 0A                      BPL  DBOOT3
1125
0660 FA95 5A                         DECB  ;
1126
0661 FA96 26 F8                      BNE  DBOOT2
1127
0662 FA98 35 04                      PULS B
1128
0663 FA9A 5A                         DECB
1129
0664 FA9B 26 F0                      BNE  DBOOT1
1130
0665 FA9D 20 8A                      BRA  DBOOT
1131
0666 FA9F 35 04              DBOOT3  PULS B
1132
0667 FAA1 B6 F0 20                   LDA  COMREG
1133
0668 FAA4 85 1C                      BITA #$1C
1134
0669 FAA6 27 01                      BEQ  DBOOT4
1135
0670 FAA8 39                         RTS  ;
1136
0671                         *
1137
0672                         *
1138
0673 FAA9 C6 DE              DBOOT4  LDB  #$DE
1139
0674 FAAB F7 F0 24                   STB  DRVREG
1140
0675 FAAE 8E C0 00                   LDX  #$C000
1141
0676 FAB1 AF 4A                      STX  10,U
1142
0677 FAB3 1F 34                      TFR  U,S    $FB7B
1143
0678 FAB5 3B                         RTI  ;
1144
0679                                 ENDIF DMAFOPT
1145
0680                         *
1146
0681                                 IFD CF8OPT
1147
0682                         *
1148
0683                         * COMPACT FLASH BOOT
1149
0684                         *
1150
0685                         CFBOOT  BSR  WAITRDY
1151
0686                                 LDA  #HEADLBA
1152
0687                                 STA  CF_HEAD
1153
0688                                 BSR  WAITRDY
1154
0689                                 LDA  #FEAT8BIT
1155
0690                                 STA  CF_FEATURE
1156
0691                                 LDA  #CMDFEATURE
1157
0692                                 STA  CF_COMAND
1158
0693                                 BSR  WAITRDY
1159
0694                         *
1160
0695                         * READ SECTORS FROM CF
1161
0696                         *
1162
0697                         CFREAD  LDA  #$01
1163
0698                                 STA  CF_SECCNT
1164
0699                                 CLRA
1165
0700                                 STA  CF_SECNUM
1166
0701                                 STA  CF_CYLLO
1167
0702                                 STA  CF_CYLHI
1168
0703                         *
1169
0704                                 LDA  #CMDREAD ; IDE READ MULTIPLE
1170
0705                                 STA  CF_COMAND
1171
0706                                 BSR  WAITRDY
1172
0707                                 LDX  #$C000
1173
0708                         *
1174
0709                         * READ LOOP
1175
0710                         *
1176
0711                         RDLOOP  BSR  WAITDRQ
1177
0712                                 LDA  CF_DATA
1178
0713                                 STA  ,X+
1179
0714                                 CMPX #$C200
1180
0715                                 BNE  RDLOOP
1181
0716                         *
1182
0717                                 LDX  #$C000
1183
0718                                 STX  $0A,U
1184
0719                                 TFR  U,S
1185
0720                                 RTI
1186
0721                         *
1187
0722                         * WAIT UNTIL READY
1188
0723                         *
1189
0724                         WAITRDY LDA  CF_STATUS
1190
0725                                 BITA #BUSY
1191
0726                                 BNE  WAITRDY
1192
0727                                 LDA  CF_STATUS
1193
0728                                 BITA #DRDY
1194
0729                                 BEQ  WAITRDY
1195
0730                                 RTS
1196
0731                         *
1197
0732                         * WAIT FOR DATA REQUEST
1198
0733                         *
1199
0734                         WAITDRQ LDA  CF_STATUS
1200
0735                                 BITA #DRQ
1201
0736                                 BEQ  WAITDRQ
1202
0737                                 RTS
1203
0738                                 ENDIF CF8OPT
1204
0738                                 ENDIF CF8OPT
1205
0739                         *
1206
0740                                 IFD IDEOPT
1207
0741                         *
1208
0742                         * XESS 16 BIT IDE BOOT
1209
0743                         *
1210
0744                         IDEBOOT LDD  #AUXRESET
1211
0745                                 STD  CF_AUX
1212
0746                                 LDD #AUXRSTREL
1213
0747                                 STD CF_AUX
1214
0748                                 LDD  #HEADLBA
1215
0749                                 STD  CF_HEAD
1216
0750                                 BSR  WAITRDY
1217
0751                         *
1218
0752                         * READ SECTORS FROM CF
1219
0753                         *
1220
0754                                 LDD  #$01
1221
0755                                 STD  CF_SECCNT
1222
0756                                 CLRB
1223
0757                                 STD  CF_SECNUM
1224
0758                                 STD  CF_CYLLO
1225
0759                                 STD  CF_CYLHI
1226
0760                         *
1227
0761                                 LDB  #CMDREAD ; IDE READ MULTIPLE
1228
0762                                 STD  CF_COMAND
1229
0763                                 BSR  WAITRDY
1230
0764                                 LDX  #$C000
1231
0765                         *
1232
0766                         * READ LOOP
1233
0767                         *
1234
0768                         RDLOOP  BSR  WAITDRQ
1235
0769                                 LDD  CF_DATA
1236
0770                                 STB  ,X+
1237
0771                                 CMPX #$C100
1238
0772                                 BNE  RDLOOP
1239
0773                         *
1240
0774                                 LDX  #$C000
1241
0775                                 STX  $0A,U
1242
0776                                 TFR  U,S
1243
0777                                 RTI
1244
0778                         *
1245
0779                         * WAIT UNTIL READY
1246
0780                         *
1247
0781                         WAITRDY LDD  CF_STATUS
1248
0782                                 BITB #BUSY
1249
0783                                 BNE  WAITRDY
1250
0784                                 LDD  CF_STATUS
1251
0785                                 BITB #DRDY
1252
0786                                 BEQ  WAITRDY
1253
0787                                 RTS
1254
0788                         *
1255
0789                         * WAIT FOR DATA REQUEST
1256
0790                         *
1257
0791                         WAITDRQ LDD  CF_STATUS
1258
0792                                 BITB #DRQ
1259
0793                                 BEQ  WAITDRQ
1260
0794                                 RTS
1261
0795                                 ENDIF IDEOPT
1262
0795                                 ENDIF IDEOPT
1263
0796                         *
1264
0797                                 IFD RTCOPT
1265
0798                         *
1266
0799                         * CLOCK INTER FACE UTILITY
1267
0800                         *
1268
0801                         * TIME   
1269
0802                         * If no argument is specified, the current time
1270
0803                         * will be displayed.
1271
0804                         *
1272
0805                         * READ A REGISTER FROM THE COUNTER.
1273
0806                         * The X Index rgister points to the register
1274
0807                         * to be read. The Status Register is checked
1275
0808                         * before and after the register is read before
1276
0809                         * returning a value in accumulator A
1277
0810                         *
1278
0811                         RDCLK  TST CLKSTA
1279
0812                                BNE RDCLK
1280
0813                         RDCLK1 LDA 0,X
1281
0814                                TST CLKSTA
1282
0815                                BNE RDCLK1
1283
0816                                RTS
1284
0817                         *
1285
0818                         * MAIN PROGRAM:
1286
0819                         *
1287
0820                         TIMSET LDX #COUNTR POINT TO TIMER
1288
0821                               LBSR BYTE READ HOURS
1289
0822                               BVS  SHOWTM NO ARG, DISP TIME
1290
0823                               STA HOUR,X
1291
0824                               LBSR OUT1S
1292
0825                               LBSR BYTE READ MINUITES
1293
0826                               BVS  SHOWTM
1294
0827                               STA MINUIT,X
1295
0828                               LBSR OUT1S
1296
0829                               LBSR BYTE SECONDS.
1297
0830                               BVS SHOWTM
1298
0831                               STA SECOND,X
1299
0832                         *
1300
0833                         * DISPLAY CURRENT TIME
1301
0834                         *
1302
0835                         SHOWTM LBSR PCRLF
1303
0836                                LDX #COUNTR+HOUR
1304
0837                                LDB #3
1305
0838                         SHOWLP BSR RDCLK
1306
0839                                LBSR OUT2H
1307
0840                                LDA #':
1308
0841                                LBSR OUTCH
1309
0842                                LEAX -1,X
1310
0843                                DECB
1311
0844                                BNE SHOWLP
1312
0845                                RTS
1313
0846                         *
1314
0847                         * INITIATE CLOCK.
1315
0848                         * MASK INTERRUPTS.
1316
0849                         *
1317
0850                         CLKINZ CLR CINTCR  MASK ALL INTERRUPTS
1318
0851                                TST CINTSR  CLEAR ANY INTERRUPTS
1319
0852                                RTS
1320
0853                                ENDIF RTCOPT
1321
0853                                ENDIF RTCOPT
1322
0854                                IFD DATOPT
1323
0855                         *
1324
0856                         ***** LRA LOAD REAL ADDRESS *****
1325
0857                         *
1326
0858                         * THE FOLLOWING CODE LOADS THE 20-BIT
1327
0859                         * PHYSICAL ADDRESS OF A MEMORY BYTE
1328
0860                         * INTO THE "A" AND "X" REGISTERS. THIS
1329
0861                         * ROUTINE IS ENTERED WITH THE LOGICAL
1330
0862                         * ADDRESS OF A MEMORY BYTE IN THE "IX"
1331
0863                         * REGISTER. EXIT IS MADE WITH THE HIGH-
1332
0864                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL
1333
0865                         * ADDRESS IN THE "A" REGISTER, AND THE
1334
0866                         * LOW-ORDER 16-BITS OF THE 20-BIT
1335
0867                         * PHYSICAL ADDRESS IN THE "IX" REGISTER.
1336
0868                         * ALL OTHER REGISTERS ARE PRESERVED.
1337
0869                         * THIS ROUTINE IS REQUIRED SINCE THE
1338
0870                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST
1339
0871                         * PRESENT PHYSICAL ADDRESSES ON THE
1340
0872                         * SYSTEM BUS.
1341
0873                         *
1342
0874 FAB6 34 36              LRA     PSHS A,B,X,Y PUSH REGISTERS ON STACK
1343
0875 FAB8 A6 62                      LDA  2,S     GET MSB LOGICAL ADDR FRM X REG ON STACK
1344
0876 FABA 44                         LSRA         ;
1345
0877 FABB 44                         LSRA         ADJ FOR INDEXED INTO
1346
0878 FABC 44                         LSRA         CORRESPONDING LOCATION
1347
0879 FABD 44                         LSRA         IN LRA TABLE
1348
0880 FABE 10 8E DF D0                LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS
1349
0881 FAC2 E6 A6                      LDB  A,Y     GET PHYSICAL ADDR. DATA FROM LRA TABLE
1350
0882 FAC4 54                         LSRB         ADJ. REAL ADDR. TO REFLECT EXTENDED
1351
0883 FAC5 54                         LSRB         PHYSICAL ADDRESS.
1352
0884 FAC6 54                         LSRB         EXTENDED MS 4-BITS ARE RETURNED
1353
0885 FAC7 54                         LSRB         IN THE "A" ACCUMULATOR
1354
0886 FAC8 E7 E4                      STB  ,S      MS 4 BITS IN A ACCUM. STORED ON STACK
1355
0887 FACA E6 A6                      LDB  A,Y     LOAD REAL ADDRESS DATA FROM LRA TABLE
1356
0888 FACC 53                         COMB         COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
1357
0889 FACD 58                         ASLB         ADJ DATA FOR RELOCATION IN X REG
1358
0890 FACE 58                         ASLB         ;
1359
0891 FACF 58                         ASLB         $FB97
1360
0892 FAD0 58                         ASLB         ;
1361
0893 FAD1 A6 62                      LDA  2,S     GET MS BYTE OF LOGICAL ADDR.
1362
0894 FAD3 84 0F                      ANDA #$0F    MASK MS NIBBLE OF LOGICAL ADDRESS
1363
0895 FAD5 A7 62                      STA  2,S     SAVE IT IN X REG ON STACK
1364
0896 FAD7 EA 62                      ORB  2,S     SET MS BYTE IN X REG TO ADJ PHY ADDR.
1365
0897                         *
1366
0898                         * PLUS LS NIBBLE OF LOGICAL ADDRESS
1367
0899 FAD9 E7 62                      STB  2,S     SAVE AS LS 16 BITS OF PHY ADDR IN X REG
1368
0900                         * ON STACK
1369
0901 FADB 35 B6                      PULS A,B,X,Y,PC POP REGS. FROM STACK
1370
0902                                 ENDIF DATOPT
1371
0903                         *
1372
0904                         * DELAY LOOP
1373
0905                         *
1374
0906 FADD 34 04              DLY     PSHS B       SAVE CONTENTS OF "B"
1375
0907 FADF C6 20                      LDB  #$20    GET LOOP DELAY VALUE
1376
0908 FAE1 5A                 SUB1    DECB         SUBTRACT ONE FROM VALUE
1377
0909 FAE2 26 FD                      BNE  SUB1    LOOP UNTIL ZERO
1378
0910 FAE4 35 84                      PULS B,PC    RESTORE CONTENTS OF "B"
1379
0911                         * RTS  ;
1380
0912                         *
1381
0913                         ***** "L" LOAD MIKBUG TAPE *****
1382
0914                         *
1383
0915 FAE6 BD FD 53           LOAD    JSR  ACINIZ
1384
0916 FAE9 86 11                      LDA  #$11   LOAD 'DC1' CASS. READ ON CODE
1385
0917 FAEB 17 02 54                   LBSR OUTCH  OUTPUT IT TO TERMINAL PORT
1386
0918 FAEE 7F DF E2                   CLR  ECHO   TURN OFF ECHO FLAG
1387
0919 FAF1 17 02 26           LOAD1   LBSR ECHON  INPUT 8 BIT BYTE WITH NO ECHO
1388
0920 FAF4 81 53              LOAD2   CMPA #'S    IS IT AN "S", START CHARACTER ?
1389
0921 FAF6 26 F9                      BNE  LOAD1  IF NOT, DISCARD AND GET NEXT CHAR.
1390
0922 FAF8 17 02 1F                   LBSR ECHON
1391
0923 FAFB 81 39                      CMPA #'9    IS IT A "9" , END OF FILE CHAR ?
1392
0924 FAFD 27 3D                      BEQ  LOAD21 IF SO, EXIT LOAD
1393
0925 FAFF 81 31                      CMPA #'1    IS IT A "1" , FILE LOAD CHAR ?
1394
0926 FB01 26 F1                      BNE  LOAD2  IF NOT, LOOK FOR START CHAR.
1395
0927 FB03 17 01 A8                   LBSR BYTE   INPUT BYTE COUNT
1396
0928 FB06 34 02                      PSHS A      PUSH COUNT ON STACK
1397
0929 FB08 29 26                      BVS  LODERR (V) C-CODE SET, ILLEGAL HEX
1398
0930 FB0A 17 01 91                   LBSR IN1ADR INPUT LOAD ADDRESS
1399
0931 FB0D 29 21                      BVS  LODERR (V) C-CODE SET, ADDR NOT HEX
1400
0932 FB0F 34 10                      PSHS X      PUSH ADDR ON STACK
1401
0933 FB11 E6 E0                      LDB  ,S+    LOAD MSB OF ADDR AS CHECKSUM BYTE
1402
0934 FB13 EB E0                      ADDB ,S+    ADD LSB OF ADDR TO CHECKSUM
1403
0935 FB15 EB E4                      ADDB ,S     ADD BYTE COUNT BYTE TO CHECKSUM
1404
0936 FB17 6A E4                      DEC  ,S     $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
1405
0937 FB19 6A E4                      DEC  ,S     ADDRESS BYTES.
1406
0938 FB1B 34 04              LOAD10  PSHS B      PUSH CHECKSUM ON STACK
1407
0939 FB1D 17 01 8E                   LBSR BYTE   INPUT DATA BYTE (2 HEX CHAR)
1408
0940 FB20 35 04                      PULS B      POP CHECKSUM FROM STACK
1409
0941 FB22 29 0C                      BVS  LODERR (V) SET, DATA BYTE NOT HEX
1410
0942 FB24 34 02                      PSHS A      PUSH DATA BYTE ON STACK
1411
0943 FB26 EB E0                      ADDB ,S+    ADD DATA TO CHECKSUM, AUTO INC STACK
1412
0944 FB28 6A E4                      DEC  ,S     DECREMENT BYTE COUNT 1
1413
0945 FB2A 27 05                      BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM
1414
0946 FB2C A7 80                      STA  ,X+    SAVE DATA BYTE IN MEMORY
1415
0947 FB2E 20 EB                      BRA  LOAD10 GET NEXT DATA BYTE
1416
0948 FB30 5F                 LODERR  CLRB        ;ERROR CONDITION, ZERO CHECKSUM  ;
1417
0949 FB31 35 02              LOAD16  PULS A      ADJUST STACK (REMOVE BYTE COUNT)
1418
0950 FB33 C1 FF                      CMPB #$FF   CHECKSUM OK?
1419
0951 FB35 27 BA                      BEQ  LOAD1  IF SO, LOAD NEXT LINE
1420
0952 FB37 86 3F                      LDA  #'?    LOAD (?) ERROR INDICATOR
1421
0953 FB39 17 02 06                   LBSR OUTCH  OUTPUT IT TO TERMINAL
1422
0954 FB3C 73 DF E2           LOAD21  COM  ECHO   TURN ECHO ON
1423
0955 FB3F 86 13                      LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE
1424
0956 FB41 16 01 FE                   LBRA OUTCH  OUTPUT IT
1425
0957                         *
1426
0958                         ***** "P" PUNCH MIKBUG TAPE *****
1427
0959                         *
1428
0960 FB44 6F E2              PUNCH   CLR  ,-S CLEAR RESERVED BYTE ON STACK
1429
0961 FB46 17 01 4A                   LBSR IN2ADR GET BEGIN AND END ADDRESS
1430
0962 FB49 34 30                      PSHS X,Y SAVE ADDRESSES ON STACK
1431
0963 FB4B 29 4D                      BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH
1432
0964 FB4D AC 62                      CMPX 2,S COMPARE BEGIN TO END ADDR
1433
0965 FB4F 25 49                      BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH
1434
0966 FB51 30 01                      LEAX 1,X INCREMENT END ADDRESS
1435
0967 FB53 AF E4                      STX  ,S STORE END ADDR ON STACK
1436
0968 FB55 BD FD 53                   JSR  ACINIZ
1437
0969 FB58 86 12                      LDA  #$12 LOAD 'DC2' PUNCH ON CODE
1438
0970 FB5A 17 01 E5                   LBSR OUTCH OUTPUT IT TO TERMINAL
1439
0971 FB5D EC E4              PUNCH2  LDD  ,S LOAD END ADDR IN D-ACC
1440
0972 FB5F A3 62                      SUBD 2,S SUBTRACT BEGIN FROM END
1441
0973 FB61 27 06                      BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT
1442
0974 FB63 10 83 00 20                CMPD #$20 LESS THAN 32 BYTES?
1443
0975 FB67 23 02                      BLS  PUNCH4 PUNCH THAT MANY BYTES
1444
0976 FB69 C6 20              PUNCH3  LDB  #$20 LOAD BYTE COUNT OF 32.
1445
0977 FB6B E7 64              PUNCH4  STB  4,S STORE ON STACK AS BYTE COUNT
1446
0978 FB6D 8E FE 1F                   LDX  #MSG20 POINT TO MSG "S1"
1447
0979 FB70 17 00 2F                   LBSR PSTRNG PRINT MSG
1448
0980 FB73 CB 03                      ADDB #3 ADD 3 BYTES TO BYTE COUNT
1449
0981 FB75 1F 98                      TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH
1450
0982 FB77 17 01 75                   LBSR OUT2H OUTPUT BYTE COUNT
1451
0983 FB7A AE 62                      LDX  2,S LOAD BEGIN ADDRESS
1452
0984 FB7C 17 01 68                   LBSR OUT4H PUNCH ADDRESS
1453
0985 FB7F EB 62                      ADDB 2,S ADD ADDR MSB TO CHECKSUM
1454
0986 FB81 EB 63                      ADDB 3,S ADD ADDR LSB TO CHECKSUM
1455
0987 FB83 EB 84              PUNCHL  ADDB ,X ADD DATA BYTE TO CHECKSUM
1456
0988 FB85 A6 80                      LDA  ,X+ LOAD DATA BYTE TO PUNCH
1457
0989 FB87 17 01 65                   LBSR OUT2H OUTPUT DATA BYTE
1458
0990 FB8A 6A 64                      DEC  4,S DECREMENT BYTE COUNT
1459
0991 FB8C 26 F5                      BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE
1460
0992 FB8E 53                         COMB  1's COMPLIMENT CHECKSUM BYTE
1461
0993 FB8F 1F 98                      TFR  B,A GET IT IN A-ACC TO PUNCH
1462
0994 FB91 17 01 5B                   LBSR OUT2H OUTPUT CHECKSUM BYTE
1463
0995 FB94 AF 62                      STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR
1464
0996 FB96 AC E4                      CMPX ,S COMPARE IT TO END ADDR
1465
0997 FB98 26 C3                      BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT.
1466
0998 FB9A 86 14              PUNEXT  LDA  #$14 LOAD 'DC4' PUNCH OFF CODE
1467
0999 FB9C 17 01 A3                   LBSR OUTCH OUTPUT IT
1468
1000 FB9F 32 65                      LEAS 5,S READJUST STACK POINTER
1469
1001 FBA1 39                         RTS  ;
1470
1002                         *
1471
1003                         * PRINT STRING PRECEEDED BY A CR & LF.
1472
1004                         *
1473
1005 FBA2 8D 02              PSTRNG BSR PCRLF PRINT CR/LF
1474
1006 FBA4 20 71                     BRA  PDATA  PRINT STRING POINTED TO BY IX
1475
1007                         *
1476
1008                         * PCRLF
1477
1009                         *
1478
1010 FBA6 34 10              PCRLF  PSHS X SAVE IX
1479
1011 FBA8 8E FD D0                  LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS
1480
1012 FBAB 17 00 69                  LBSR PDATA  PRINT MSG
1481
1013 FBAE 35 90                     PULS X,PC RESTORE IX & RETURN
1482
1014                         *
1483
1015                         * LONG BRANCHES TO COMMON ROUTINES
1484
1016                         *
1485
1017 FBB0 16 01 8D           JOUT1S  LBRA OUT1S
1486
1018 FBB3 16 00 F8           JBYTE   LBRA BYTE
1487
1019 FBB6 16 00 E5           JIN1ADR LBRA IN1ADR
1488
1020                         *
1489
1021                         * ALTER "PC" PROGRAM COUNTER
1490
1022                         *
1491
1023 FBB9 17 00 91           ALTRPC  LBSR  PRTPC   $FCF5 PRINT MSG " PC = "
1492
1024 FBBC 8D F2              ALTPC1  BSR  JOUT1S   OUTPUT SPACE
1493
1025 FBBE 8D F6                      BSR  JIN1ADR  GET NEW CONTENTS FOR "PC"
1494
1026 FBC0 29 02                      BVS  ALTPCD  EXIT IF INVALID HEX
1495
1027 FBC2 AF 4A                      STX  10,U    POKE IN NEW CONTENTS
1496
1028 FBC4 39                 ALTPCD  RTS          ;
1497
1029                         *
1498
1030                         * ALTER "U" USER STACK POINTER
1499
1031                         *
1500
1032 FBC5 8D 61              ALTRU   BSR  PRTUS   $FCCA PRINT MSG " US = "
1501
1033 FBC7 8D E7                      BSR  JOUT1S   OUTPUT SPACE
1502
1034 FBC9 8D EB                      BSR  JIN1ADR
1503
1035 FBCB 29 02                      BVS  ALTUD
1504
1036 FBCD AF 48                      STX  8,U
1505
1037 FBCF 39                 ALTUD   RTS ;
1506
1038                         *
1507
1039                         * ALTER "Y" INDEX REGISTER
1508
1040                         *
1509
1041 FBD0 8D 72              ALTRY   BSR  PRTIY   PRINT MSG " IY = "
1510
1042 FBD2 8D DC                      BSR  JOUT1S   OUTPUT SPACE
1511
1043 FBD4 8D E0                      BSR  JIN1ADR
1512
1044 FBD6 29 02                      BVS  ALTYD
1513
1045 FBD8 AF 46                      STX  6,U     $F8F0
1514
1046 FBDA 39                 ALTYD   RTS ;
1515
1047                         *
1516
1048                         * ALTER "X" INDEX REGISTER
1517
1049                         *
1518
1050 FBDB 8D 5E              ALTRX   BSR  PRTIX   $FCE0 PRINT MSG " IX = "
1519
1051 FBDD 8D D1                      BSR  JOUT1S   OUTPUT SPACE
1520
1052 FBDF 8D D5                      BSR  JIN1ADR
1521
1053 FBE1 29 02                      BVS  ALTXD
1522
1054 FBE3 AF 44                      STX  4,U
1523
1055 FBE5 39                 ALTXD   RTS ;
1524
1056                         *
1525
1057                         * ALTER "DP" DIRECT PAGE REGISTER
1526
1058                         *
1527
1059 FBE6 8D 49              ALTRDP  BSR  PRTDP   $FCD5 PRINT MSG " DP = "
1528
1060 FBE8 8D C6                      BSR  JOUT1S   OUTPUT SPACE
1529
1061 FBEA 8D C7                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1530
1062 FBEC 29 02                      BVS  ALTDPD
1531
1063 FBEE A7 43                      STA  3,U
1532
1064 FBF0 39                 ALTDPD  RTS ;
1533
1065                         *
1534
1066                         * ALTER "B" ACCUMULATOR
1535
1067                         *
1536
1068 FBF1 8D 6C              ALTRB   BSR  PRTB    $FD09 PRINT MSG " B = "
1537
1069 FBF3 8D BB                      BSR  JOUT1S   OUTPUT SPACE
1538
1070 FBF5 8D BC                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1539
1071 FBF7 29 02                      BVS  ALTBD
1540
1072 FBF9 A7 42                      STA  2,U
1541
1073 FBFB 39                 ALTBD   RTS          $F91C
1542
1074                         *
1543
1075                         * ALTER "A" ACCUMULATOR
1544
1076                         *
1545
1077 FBFC 8D 58              ALTRA   BSR  PRTA    $FCFF RINT MSG " A = "
1546
1078 FBFE 8D B0                      BSR  JOUT1S   OUTPUT SPACE
1547
1079 FC00 8D B1                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1548
1080 FC02 29 02                      BVS  ALTAD
1549
1081 FC04 A7 41                      STA  1,U
1550
1082 FC06 39                 ALTAD   RTS ;
1551
1083                         *
1552
1084                         * ALTER "CC" REGISTER
1553
1085                         *
1554
1086 FC07 8D 5F              ALTRCC  BSR  PRTCC   $FD13 PRINT MSG " CC: "
1555
1087 FC09 8D A5                      BSR  JOUT1S   OUTPUT SPACE
1556
1088 FC0B 8D A6                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1557
1089 FC0D 29 04                      BVS  ALTCCD
1558
1090 FC0F 8A 80                      ORA  #$80    SETS "E" FLAG IN PRINT LIST
1559
1091 FC11 A7 C4                      STA  ,U
1560
1092 FC13 39                 ALTCCD  RTS ;
1561
1093                         *
1562
1094                         * PDATA
1563
1095                         *
1564
1096 FC14 17 01 2B           PRINT LBSR OUTCH
1565
1097 FC17 A6 80              PDATA LDA  ,X+ GET 1st CHAR. TO PRINT
1566
1098 FC19 81 04                    CMPA #4 IS IT EOT?
1567
1099 FC1B 26 F7                    BNE  PRINT IF NOT EOT PRINT IT
1568
1100 FC1D 39                       RTS  ;
1569
1101                         *
1570
1102                         * PRINT REGISTERS
1571
1103                         *
1572
1104 FC1E 8E FD E2           PRTSP  LDX  #MSG10 POINT TO MSG "SP="
1573
1105 FC21 8D F4                     BSR  PDATA  PRINT MSG
1574
1106 FC23 1F 31                     TFR  U,X
1575
1107 FC25 16 00 BF           JOUT4H LBRA OUT4H
1576
1108                         *
1577
1109 FC28 8E FD EE           PRTUS  LDX  #MSG12 POINT TO MSG "US="
1578
1110 FC2B 8D EA                     BSR  PDATA  PRINT MSG
1579
1111 FC2D AE 48                     LDX  8,U
1580
1112 FC2F 20 F4                     BRA  JOUT4H
1581
1113                         *
1582
1114 FC31 8E FE 00           PRTDP  LDX   #MSG15 POINT TO MSG "DP="
1583
1115 FC34 8D E1                     BSR  PDATA  PRINT MSG
1584
1116 FC36 A6 43                     LDA  3,U
1585
1117 FC38 16 00 B4           JOUT2H LBRA OUT2H OUTPUT HEX BYTE AS ASCII
1586
1118                         *
1587
1119 FC3B 8E FD FA           PRTIX  LDX  #MSG14 POINT TO MSG "IX="
1588
1120 FC3E 8D D7                     BSR  PDATA  PRINT MSG
1589
1121 FC40 AE 44                     LDX  4,U      $FCE6
1590
1122 FC42 20 E1                     BRA  JOUT4H
1591
1123                         *
1592
1124 FC44 8E FD F4           PRTIY  LDX  #MSG13 POINT TO MSG "IY="
1593
1125 FC47 8D CE                     BSR  PDATA  PRINT MSG
1594
1126 FC49 AE 46                     LDX  6,U
1595
1127 FC4B 20 D8                     BRA  JOUT4H
1596
1128                         *
1597
1129 FC4D 8E FD E8           PRTPC  LDX  #MSG11 POINT TO MSG "PC="
1598
1130 FC50 8D C5                     BSR  PDATA  PRINT MSG
1599
1131 FC52 AE 4A                     LDX  10,U
1600
1132 FC54 20 CF                     BRA  JOUT4H
1601
1133                         *
1602
1134 FC56 8E FE 06           PRTA   LDX  #MSG16 POINT TO MSG "A="
1603
1135 FC59 8D BC                     BSR  PDATA  PRINT MSG
1604
1136 FC5B A6 41                     LDA  1,U
1605
1137 FC5D 20 D9                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
1606
1138                         *
1607
1139 FC5F 8E FE 0B           PRTB   LDX  #MSG17 POINT TO MSG "B="
1608
1140 FC62 8D B3                     BSR  PDATA  PRINT MSG
1609
1141 FC64 A6 42                     LDA  2,U
1610
1142 FC66 20 D0                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
1611
1143                         *
1612
1144 FC68 8E FE 10           PRTCC  LDX  #MSG18 POINT TO MSG "CC:"
1613
1145 FC6B 8D AA                     BSR  PDATA  PRINT MSG
1614
1146 FC6D A6 C4                     LDA  ,U
1615
1147 FC6F 8E FE 17                  LDX  #MSG19 POINT TO MSG "EFHINZVC"
1616
1148 FC72 16 00 90                  LBRA BIASCI OUTPUT IN BINARY/ASCII FORMAT
1617
1149                         *
1618
1150                         * "R" DISPLAY REGISTERS
1619
1151                         *
1620
1152 FC75 8E FD DE           REGSTR  LDX  #MSG5   POINT TO MSG " - "
1621
1153 FC78 17 FF 27                   LBSR PSTRNG  PRINT MSG
1622
1154 FC7B 8D A1                      BSR PRTSP   $FCBF
1623
1155 FC7D 8D A9                      BSR PRTUS   $FCCA
1624
1156 FC7F 8D B0                      BSR PRTDP   $FCD5
1625
1157 FC81 8D B8                      BSR PRTIX   $FCE0
1626
1158 FC83 8D BF                      BSR PRTIY   $FCEB
1627
1159 FC85 8E FD DE                   LDX  #MSG5   POINT TO MSG " - "
1628
1160 FC88 17 FF 17                   LBSR PSTRNG  PRINT MSG
1629
1161 FC8B 8D C0                      BSR PRTPC   $FCF5
1630
1162 FC8D 8D C7                      BSR PRTA    $FCFF
1631
1163 FC8F 8D CE                      BSR PRTB    $FD09
1632
1164 FC91 20 D5                      BRA PRTCC   $FD13
1633
1165                         *
1634
1166                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
1635
1167                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
1636
1168                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
1637
1169                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT
1638
1170                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX
1639
1171                         * ADDRESS IS INPUT.
1640
1172                         *
1641
1173 FC93 8D 09              IN2ADR BSR IN1ADR GET FIRST ADDRESS
1642
1174 FC95 29 4D                     BVS NOTHEX EXIT IF NOT VALID HEX
1643
1175 FC97 1F 12                     TFR  X,Y SAVE FIRST ADDR. IN "IY"
1644
1176 FC99 86 2D                     LDA #'-
1645
1177 FC9B 17 00 A4                  LBSR OUTCH PRINT " - "
1646
1178                         *
1647
1179                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
1648
1180                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
1649
1181                         * ADDRESS IS RETURNED IN THE "X" REGISTER.
1650
1182                         *
1651
1183 FC9E 8D 0E              IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR)
1652
1184 FCA0 29 42                     BVS NOTHEX EXIT IF NOT VALID HEX
1653
1185 FCA2 1F 01                     TFR  D,X
1654
1186 FCA4 8D 08                     BSR BYTE INPUT BYTE (2 HEX CHAR)
1655
1187 FCA6 29 3C                     BVS NOTHEX
1656
1188 FCA8 34 10                     PSHS X
1657
1189 FCAA A7 61                     STA  1,S
1658
1190 FCAC 35 90                     PULS X,PC
1659
1191                         *
1660
1192                         ***** INPUT BYTE (2 HEX CHAR.) *****
1661
1193                         *
1662
1194 FCAE 8D 11              BYTE   BSR INHEX GET HEX LEFT
1663
1195 FCB0 29 32                     BVS NOTHEX EXIT IF NOT VALID HEX
1664
1196 FCB2 48                        ASLA   ;
1665
1197 FCB3 48                        ASLA   ;
1666
1198 FCB4 48                        ASLA   ; SHIFT INTO LEFT NIBBLE
1667
1199 FCB5 48                        ASLA   ;
1668
1200 FCB6 1F 89                     TFR  A,B PUT HEXL IN "B"
1669
1201 FCB8 8D 07                     BSR INHEX GET HEX RIGHT
1670
1202 FCBA 29 28                     BVS NOTHEX EXIT IF NOT VALID HEX
1671
1203 FCBC 34 04                     PSHS B PUSH HEXL ON STACK
1672
1204 FCBE AB E0                     ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
1673
1205 FCC0 39                        RTS  RETURN WITH HEX L&R IN "A"
1674
1206                         *
1675
1207                         *
1676
1208 FCC1 8D 57              INHEX  BSR ECHON INPUT ASCII CHAR.
1677
1209 FCC3 81 30                     CMPA #'0 IS IT > OR = "0" ?
1678
1210 FCC5 25 1D                     BCS NOTHEX IF LESS IT AIN'T HEX
1679
1211 FCC7 81 39                     CMPA #'9 IS IT < OR = "9" ?
1680
1212 FCC9 22 03                     BHI INHEXA IF > MAYBE IT'S ALPHA
1681
1213 FCCB 80 30                     SUBA #$30 ASCII ADJ. NUMERIC
1682
1214 FCCD 39                        RTS  ;
1683
1215                         *
1684
1216                         *
1685
1217 FCCE 81 41              INHEXA CMPA #'A IS IT > OR = "A"
1686
1218 FCD0 25 12                     BCS NOTHEX IF LESS IT AIN'T HEX
1687
1219 FCD2 81 46                     CMPA #'F IS IT < OR = "F" ?
1688
1220 FCD4 22 03                     BHI INHEXL IF > IT AIN'T HEX
1689
1221 FCD6 80 37                     SUBA #$37 ASCII ADJ. ALPHA
1690
1222 FCD8 39                        RTS  ;
1691
1223                         *
1692
1224 FCD9 81 61              INHEXL CMPA #'a IS IT > OR = "a"
1693
1225 FCDB 25 07                     BCS NOTHEX IF LESS IT AIN'T HEX
1694
1226 FCDD 81 66                     CMPA #'f IS IT < "f"
1695
1227 FCDF 22 03                     BHI NOTHEX IF > IT AIN'T HEX
1696
1228 FCE1 80 57                     SUBA #$57 ADJUST TO LOWER CASE
1697
1229 FCE3 39                        RTS  ;
1698
1230                         *
1699
1231                         *
1700
1232 FCE4 1A 02              NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
1701
1233 FCE6 39                        RTS  ;
1702
1234                         *
1703
1235                         *
1704
1236 FCE7 34 10              OUT4H  PSHS X PUSH X-REG. ON THE STACK
1705
1237 FCE9 35 02                     PULS A POP MS BYTE OF X-REG INTO A-ACC.
1706
1238 FCEB 8D 02                     BSR OUTHL OUTPUT HEX LEFT
1707
1239 FCED 35 02                     PULS A POP LS BYTE OF X-REG INTO A-ACC.
1708
1240 FCEF                    OUTHL  EQU *
1709
1241 FCEF 34 02              OUT2H  PSHS A SAVE IT BACK ON STACK
1710
1242 FCF1 44                        LSRA CONVERT UPPER HEX NIBBLE TO ASCII
1711
1243 FCF2 44                        LSRA  ;
1712
1244 FCF3 44                        LSRA  ;
1713
1245 FCF4 44                        LSRA  ;
1714
1246 FCF5 8D 04                     BSR XASCII PRINT HEX NIBBLE AS ASCII
1715
1247 FCF7 35 02              OUTHR  PULS A CONVERT LOWER HEX NIBBLE TO ASCII
1716
1248 FCF9 84 0F                     ANDA #$0F STRIP LEFT NIBBLE
1717
1249 FCFB 8B 30              XASCII ADDA #$30 ASCII ADJ
1718
1250 FCFD 81 39                     CMPA #$39 IS IT < OR = "9" ?
1719
1251 FCFF 2F 02                     BLE  OUTC IF LESS, OUTPUT IT
1720
1252 FD01 8B 07                     ADDA #7 IF > MAKE ASCII LETTER
1721
1253 FD03 20 3D              OUTC   BRA  OUTCH OUTPUT CHAR
1722
1254                         *
1723
1255                         * BINARY / ASCII --- THIS ROUTINE
1724
1256                         * OUTPUTS A BYTE IN ENHANCED
1725
1257                         * BINARY FORMAT. THE ENHANCEMENT
1726
1258                         * IS DONE BY SUBSTITUTING ASCII
1727
1259                         * LETTERS FOR THE ONES IN THE BYTE.
1728
1260                         * THE ASCII ENHANCEMENT LETTERS
1729
1261                         * ARE OBTAINED FROM THE STRING
1730
1262                         * POINTED TO BY THE INDEX REG. "X".
1731
1263                         *
1732
1264 FD05 34 02              BIASCI PSHS A SAVE "A" ON STACK
1733
1265 FD07 C6 08                     LDB  #8 PRESET LOOP# TO BITS PER BYTE
1734
1266 FD09 A6 80              OUTBA  LDA ,X+ GET LETTER FROM STRING
1735
1267 FD0B 68 E4                     ASL  ,S TEST BYTE FOR "1" IN B7
1736
1268 FD0D 25 02                     BCS PRTBA IF ONE PRINT LETTER
1737
1269 FD0F 86 2D                     LDA #'- IF ZERO PRINT "-"
1738
1270 FD11 8D 2F              PRTBA  BSR OUTCH PRINT IT
1739
1271 FD13 8D 2B                     BSR OUT1S PRINT SPACE
1740
1272 FD15 5A                        DECB SUB 1 FROM #BITS YET TO PRINT
1741
1273 FD16 26 F1                     BNE OUTBA
1742
1274 FD18 35 82                     PULS A,PC
1743
1275                         *
1744
1276                                IFD EXTOPT
1745
1277                         *
1746
1278                         * EXTENDED USER COMMANDS
1747
1279                         *
1748
1280                         USRCMD JMP [MONEXT+EXTCMD]
1749
1281                                ENDIF EXTOPT
1750
1281                                ENDIF EXTOPT
1751
1282                         *
1752
1283                         *
1753
1284 FD1A 7D DF E2           ECHON  TST  ECHO IS ECHO REQUIRED ?
1754
1285 FD1D 27 06                     BEQ  INCH ECHO NOT REQ. IF CLEAR
1755
1286                         *
1756
1287                         * INCHE
1757
1288                         *
1758
1289                         * ---GETS CHARACTER FROM TERMINAL AND
1759
1290                         * ECHOS SAME. THE CHARACTER IS RETURNED
1760
1291                         * IN THE "A" ACCUMULATOR WITH THE PARITY
1761
1292                         * BIT MASKED OFF. ALL OTHER REGISTERS
1762
1293                         * ARE PRESERVED.
1763
1294                         *
1764
1295 FD1F 8D 04              INCHE  BSR INCH GET CHAR FROM TERMINAL
1765
1296 FD21 84 7F                     ANDA #$7F      STRIP PARITY FROM CHAR.
1766
1297 FD23 20 1D                     BRA  OUTCH     ECHO CHAR TO TERMINAL
1767
1298                         *
1768
1299                         * INCH
1769
1300                         *
1770
1301                         * GET CHARACTER FROM TERMINAL. RETURN
1771
1302                         * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
1772
1303                         * ALL OTHER REGISTERS. THE INPUT CHARACTER
1773
1304                         * IS 8 BITS AND IS NOT ECHOED.
1774
1305                         *
1775
1306                         *
1776
1307 FD25 34 10              INCH   PSHS X SAVE IX
1777
1308 FD27 BE DF E0           GETSTA LDX  CPORT POINT TO TERMINAL PORT
1778
1309 FD2A A6 84                     LDA  ,X  FETCH PORT STATUS
1779
1310 FD2C 85 01                     BITA #1 TEST READY BIT, RDRF ?
1780
1311                                IFD  PS2OPT
1781
1312                                BNE GETST1
1782
1313                                LDX  #PS2KBD
1783
1314                                LDA  ,X
1784
1315                                BITA #1
1785
1316                                ENDIF PS2OPT
1786
1316                                ENDIF PS2OPT
1787
1317 FD2E 27 F7                     BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN
1788
1318 FD30 A6 01              GETST1 LDA  1,X FETCH CHAR
1789
1319 FD32 35 90                     PULS X,PC RESTORE IX
1790
1320                         *
1791
1321                         * INCHEK
1792
1322                         *
1793
1323                         * CHECK FOR A CHARACTER AVAILABLE FROM
1794
1324                         * THE TERMINAL. THE SERIAL PORT IS CHECKED
1795
1325                         * FOR READ READY. ALL REGISTERS ARE
1796
1326                         * PRESERVED, AND THE "Z" BIT WILL BE
1797
1327                         * CLEAR IF A CHARACTER CAN BE READ.
1798
1328                         *
1799
1329                         *
1800
1330 FD34 34 02              INCHEK  PSHS A SAVE A ACCUM.
1801
1331 FD36 A6 9F DF E0                LDA  [CPORT] FETCH PORT STATUS
1802
1332 FD3A 85 01                      BITA #1 TEST READY BIT, RDRF ?
1803
1333                                 IFD PS2OPT
1804
1334                                 BNE  INCHEK1
1805
1335                                 LDA  PS2KBD
1806
1336                                 BITA #1 TEST READY BIT< RDRF ?
1807
1337                                 ENDIF PS2OPT
1808
1337                                 ENDIF PS2OPT
1809
1338 FD3C 35 82              INCHEK1 PULS A,PC RESTORE A ACCUM.
1810
1339                         *
1811
1340 FD3E 8D 00              OUT2S BSR OUT1S OUTPUT 2 SPACES
1812
1341 FD40 86 20              OUT1S LDA  #$20  OUTPUT 1 SPACE
1813
1342                         *
1814
1343                         *
1815
1344                         * OUTCH
1816
1345                         *
1817
1346                         * OUTPUT CHARACTER TO TERMINAL.
1818
1347                         * THE CHAR. TO BE OUTPUT IS
1819
1348                         * PASSED IN THE A REGISTER.
1820
1349                         * ALL REGISTERS ARE PRESERVED.
1821
1350                         *
1822
1351                         OUTCH   IFD VDUOPT
1823
1352                                 BSR  VOUTCH
1824
1353                                 ENDIF VDUOPT
1825
1353                                 ENDIF VDUOPT
1826
1354                                 IFD  DG640OPT
1827
1355                                 BSR  VOUTCH
1828
1356                                 ENDIF DG640OPT
1829
1356                                 ENDIF DG640OPT
1830
1357 FD42 34 12              AOUTCH  PSHS A,X    SAVE A ACCUM AND IX
1831
1358 FD44 BE DF E0                   LDX  CPORT  GET ADDR. OF TERMINAL
1832
1359 FD47 A6 84              FETSTA  LDA  ,X     FETCH PORT STATUS
1833
1360 FD49 85 02                      BITA #2     TEST TDRE, OK TO XMIT ?
1834
1361 FD4B 27 FA                      BEQ  FETSTA IF NOT LOOP UNTIL RDY
1835
1362 FD4D 35 02                      PULS A      GET CHAR. FOR XMIT
1836
1363 FD4F A7 01                      STA  1,X    XMIT CHAR.
1837
1364 FD51 35 90                      PULS X,PC   RESTORE IX
1838
1365                         *
1839
1366                         * IO INITIALIZATION
1840
1367                         *
1841
1368 FD53                    IOINIZ  EQU  *
1842
1369                                 IFD  VDUOPT
1843
1370                                 BSR  VINIZ
1844
1371                                 ENDIF VDUOPT
1845
1371                                 ENDIF VDUOPT
1846
1372                                 IFD  DG640OPT
1847
1373                                 BSR  VINIZ
1848
1374                                 ENDIF DG640OPT
1849
1374                                 ENDIF DG640OPT
1850
1375 FD53 BE DF E0           ACINIZ  LDX  CPORT  POINT TO CONTROL PORT ADDRESS
1851
1376 FD56 86 03                      LDA  #3     RESET ACIA PORT CODE
1852
1377 FD58 A7 84                      STA  ,X     STORE IN CONTROL REGISTER
1853
1378 FD5A 86 11                      LDA  #$11   SET 8 DATA, 2 STOP AN 0 PARITY
1854
1379 FD5C A7 84                      STA  ,X     STORE IN CONTROL REGISTER
1855
1380 FD5E 6D 01                      TST  1,X    ANYTHING IN DATA REGISTER?
1856
1381 FD60 86 FF                      LDA  #$FF   TURN ON ECHO FLAG
1857
1382 FD62 B7 DF E2                   STA  ECHO
1858
1383 FD65 39                         RTS
1859
1384                         *
1860
1385                                 IFD VDUOPT
1861
1386                         *
1862
1387                         ***************************************************
1863
1388                         *      VDU8 ADM3A REGISTER-MAPPED EMULATOR        *
1864
1389                         *                                                 *
1865
1390                         *      80 x 25 Characters
1866
1391                         *
1867
1392                         ***************************************************
1868
1393                         *
1869
1394                         ***************************************************
1870
1395                         *               INITIALIZE EMULATOR               *
1871
1396                         ***************************************************
1872
1397                         *
1873
1398                         VINIZ   LDX    #VDU
1874
1399                                 LDD    #0
1875
1400                                 STD    COLADX    AND ROWADX
1876
1401                                 STA    VDUCOL,X
1877
1402                                 STB    VDUROW,X
1878
1403                                 STB    VDUOFF,X
1879
1404                                 STD    NEWROW    AND ESCFLG
1880
1405                                 LDB    #$02
1881
1406                                 STB    VDUATT,X
1882
1407                                 CLR    ESCFLG
1883
1408                                 LDA    #$1B      SEND ESCAPE
1884
1409                                 BSR    VOUTCH
1885
1410                                 LDA    #'Y       CLEAR TO END OF SCREEN
1886
1411                         *
1887
1412                         ** VIDEO OUTPUT ROUTINE
1888
1413                         *
1889
1414                         VOUTCH  PSHS   A,B,X     SAVE REGISTERS
1890
1415                                 LDX    #VDU      POINT TO VDU REGISTERS
1891
1416                         *
1892
1417                         ** CHECK FOR ESCAPE SEQUENCE
1893
1418                         *
1894
1419                                 TST    ESCFLG    ESCAPE ACTIVE?
1895
1420                                 BEQ    SOROU1    BRANCH IF NOT
1896
1421                                 BSR    ESCAPE    ELSE DO ESCAPE
1897
1422                                 BRA    RETURN    AND RETURN
1898
1423                         *
1899
1424                         ** CHECK FOR CONTROL CHARACTERS
1900
1425                         *
1901
1426                         SOROU1  CMPA   #$20      CONTROL CODES?
1902
1427                                 BHS    SOROU2
1903
1428                                 BSR    CONTRL    BRANCH IF SO
1904
1429                                 BRA    RETURN
1905
1430                         *
1906
1431                         ** OUTPUT TEXT CHARACTER
1907
1432                         *
1908
1433                         SOROU2  STAA   VDUCHR,X  DISPLAY CHARACTER
1909
1434                                 LBSR   NEWCOL    UPDATE COLUMN
1910
1435                         *
1911
1436                         ** DISPLAY CURSOR AND RETURN
1912
1437                         *
1913
1438                         RETURN  PULS   A,B,X,PC  RESTORE REGISTERS AND RETURN
1914
1439                         *
1915
1440                         ***************************************************
1916
1441                         *              CONTROL CODE HANDLERS              *
1917
1442                         ***************************************************
1918
1443                         *
1919
1444                         CONTRL  CMPA   #$08      CTRL H - BACKSPACE ?
1920
1445                                 LBEQ   BACKSP
1921
1446                                 CMPA   #$1B      ESCAPE SEQUENCE?
1922
1447                                 LBEQ   SETESC
1923
1448                                 CMPA   #$1A      CTRL Z - Clear Screen
1924
1449                                 LBEQ   CLRSCR
1925
1450                                 CMPA   #$16      CTRL ^ - Home
1926
1451                                 LBEQ   HOME
1927
1452                                 CMPA   #$D       CTRL M - RETURN?
1928
1453                                 LBEQ   CRETN
1929
1454                                 CMPA   #$0C      CTRL L - CHAR RIGHT
1930
1455                                 LBEQ   CHRIGHT
1931
1456                                 CMPA   #$0B      CTRL K - MOVE UP ONE LINE
1932
1457                                 LBEQ   LINEUP
1933
1458                                 CMPA   #$0A      CTRL J - LINE FEED
1934
1459                                 BNE    RETESC    NONE OF THESE, RETURN
1935
1460                         *
1936
1461                         ***************************************** LINE FEED
1937
1462                         *
1938
1463                         LINEFD  LDD    COLADX    GET CURRENT COLUMN AND ROW
1939
1464                                 INCB             BUMP ROW
1940
1465                                 CMPB   #NUMLIN   SCROLL TIME?
1941
1466                                 LBNE   NEWCUR    POSITION CURSOR IF NOT
1942
1467                                 LBRA   SCROLL    ELSE SCROLL IT
1943
1468                         *
1944
1469                         ***************************************** LINE FEED
1945
1470                         *
1946
1471                         LINEUP  LDD    COLADX    GET CURRENT COLUMN AND ROW
1947
1472                                 TSTB                AT TOP OF SCREEN ?
1948
1473                                 LBEQ   RETESC    Yes, Ignore
1949
1474                                 DECB             No, Decrement ROW
1950
1475                                 LBRA   NEWCUR    POSITION CURSOR
1951
1476                         *
1952
1477                         *********************************** BACK SPACE
1953
1478                         *
1954
1479                         BACKSP  LDA    COLADX
1955
1480                                 BEQ    RETESC      RETURN
1956
1481                                 DECA
1957
1482                                 LBRA   POSCOL    POSITION CURSOR
1958
1483                         *
1959
1484                         *********************************** CURSOR RIGHT
1960
1485                         *
1961
1486                         CHRIGHT LDA    COLADX
1962
1487                                 INCA
1963
1488                                 CMPA   #LINLEN
1964
1489                                 LBEQ   RETESC
1965
1490                                 LBRA   POSCOL
1966
1491                         *
1967
1492                         *********************************** CURSOR RIGHT
1968
1493                         *
1969
1494                         HOME    LDD    #0        HOME - POSITION TOP OF SCREEN
1970
1495                                 LBRA    NEWCUR
1971
1496                         *
1972
1497                         ***************************************************
1973
1498                         *                 ESCAPE HANDLERS                 *
1974
1499                         ***************************************************
1975
1500                         *
1976
1501                         ESCAPE  LDAB   ESCFLG    GET FLAG
1977
1502                                 CMPB   #'=       SETTING CURSOR?
1978
1503                                 BEQ    ESCCUR    BRANCH IF SO
1979
1504                                 CMPA   #'Y       CLEAR TO END OF SCREEN?
1980
1505                                 LBEQ   ESCCLS
1981
1506                                 CMPA   #'T       CLEAR TO END OF LINE?
1982
1507                                 BEQ   ESCCLL
1983
1508                                 CMPA   #'=       STARTING CURSOR SET?
1984
1509                                 BNE    CLRESC    BRANCH IF NOT
1985
1510                         *
1986
1511                         ***************************** START ESCAPE SEQUENCE
1987
1512                         *
1988
1513                         SETESC  STAA   ESCFLG    ELSE START CURSORING
1989
1514                                 RTS              AND RETURN
1990
1515                         *
1991
1516                         CLRESC  CLR    ESCFLG    NO OTHERS SUPPORTED
1992
1517                         RETESC  RTS              SO RETURN
1993
1518                         *
1994
1519                         ********************************* SET SCREEN CURSOR
1995
1520                         *
1996
1521                         ESCCUR  TST    NEWROW    ROW SET?
1997
1522                                 BNE    ESCCU1    BRANCH IF SO
1998
1523                                 STAA   NEWROW    ELSE SET NEW ROW
1999
1524                                 RTS              AND RETURN
2000
1525                         *
2001
1526                         ESCCU1  CLR    ESCFLG
2002
1527                                 SUBA   #$20      ADJUST COLUMN ADDRESS
2003
1528                                 CMPA   #LINLEN-1 CHECK FOR ACCEPTABLE COLUM
2004
1529                                 BHI    RETESC    NOT OK, DO NOTHING
2005
1530                         *
2006
1531                         ESCCU2  LDAB   NEWROW
2007
1532                                 CLR    NEWROW
2008
1533                                 SUBB   #$20      ADJUST TO ROW ADDRESS
2009
1534                                 CMPB   #NUMLIN-1 CHECK FOR ACCEPTABLE ROW
2010
1535                                 BHI    RETESC    ELSE RETURN DOING NOTHING
2011
1536                                 BRA    NEWCUR    GO SET NEW CURSOR IF SO
2012
1537                         *
2013
1538                         ****************** CLEAR FROM CURSOR TO END OF LINE
2014
1539                         CLRSCR  LDD    #0        CLEAR FROM TOP OF SCREEN
2015
1540                                 BSR    NEWCUR
2016
1541                         ESCCLL  LDA    COLADX
2017
1542                                 LDB    #$20      AND CLEAR CHAR
2018
1543                         ESCCL1  STB    VDUCHR,X  DISPLAY TEXT
2019
1544                                 INCA
2020
1545                            STA    VDUCOL,X
2021
1546                                 CMPA   #LINLEN   UNTIL END OF LINE
2022
1547                                 BNE    ESCCL1
2023
1548                                 CLR    ESCFLG
2024
1549                                 RTS
2025
1550                         *
2026
1551                         *********************************** CARRIAGE RETURN
2027
1552                         *
2028
1553                         CRETN   CLRA               SET COLUMN ZERO
2029
1554                         POSCOL  LDB    ROWADX    GET CURRENT ROW
2030
1555                         *
2031
1556                         *********** GENERATE NEW CURSOR POSITION AND RETURN
2032
1557                         *
2033
1558                         NEWCUR  STD    COLADX    SAVE NEW ROW AND COLUMN
2034
1559                            STA    VDUCOL,X  SET NEW COLUMN
2035
1560                                 STB    VDUROW,X  SET NEW ROW
2036
1561                                 RTS              AND RETURN
2037
1562                         *
2038
1563                         ********************* UPDATE CURRENT COLUMN AND ROW
2039
1564                         *
2040
1565                         NEWCOL  LDD    COLADX    GET ROW AND COLUMN
2041
1566                                 INCA             BUMP COLUMN
2042
1567                                 CMPA   #LINLEN   ROLL?
2043
1568                                 BNE    NEWCUR    BRANCH IF NOT
2044
1569                                 CLRA             ELSE RESET TO ZERO
2045
1570                                 INCB             AND BUMP ROW
2046
1571                                 CMPB   #NUMLIN
2047
1572                                 BNE    NEWCUR
2048
1573                                 DECB             BOTTOM ROW
2049
1574                                 BSR    NEWCUR
2050
1575                         *
2051
1576                         ********************************* SCROLL THE SCREEN
2052
1577                         *
2053
1578                         SCROLL  LDB    VDUOFF,X
2054
1579                                 INCB
2055
1580                                 CMPB   #NUMLIN
2056
1581                                 BLO    SCROL1
2057
1582                                 CLRB
2058
1583                         SCROL1  STB    VDUOFF,X
2059
1584                         *
2060
1585                         **************** CLEAR FROM CURSOR TO END OF SCREEN
2061
1586                         *
2062
1587                         ESCCLS  LDB    COLADX    GET CURSOR
2063
1588                                 LDA    #$20      GET A SPACE
2064
1589                         ESCCLS1    STB    COLADX
2065
1590                                 STB    VDUCOL,X
2066
1591                                 STA    VDUCHR,X
2067
1592                                 INCB
2068
1593                                 CMPB   #LINLEN
2069
1594                                 BNE    ESCCLS1
2070
1595                         *
2071
1596                                 LDB    ROWADX
2072
1597                                 INCB
2073
1598                                 CMPB   #NUMLIN
2074
1599                                 BEQ    ESCCLS2
2075
1600                                 STB    ROWADX
2076
1601                                 STB    VDUROW,X
2077
1602                                 CLRB
2078
1603                                 BRA    ESCCLS1
2079
1604                         *
2080
1605                         ESCCLS2 CLRB
2081
1606                                 STB    COLADX
2082
1607                                 STB    VDUCOL,X
2083
1608                                 STB    ESCFLG
2084
1609                                 RTS
2085
1610                                 ENDIF VDUOPT
2086
1610                                 ENDIF VDUOPT
2087
1611                         *
2088
1612                                 IFD DG640OPT
2089
1613                         ***************************************************
2090
1614                         *      TELEVIDEO-TYPE MEMORY-MAPPED EMULATOR      *
2091
1615                         *                                                 *
2092
1616                         * FOR HARD-WIRED MEMORY-MAPPED DISPLAYS USING THE *
2093
1617                         * HIGH ORDER BIT OF EACH BYTE FOR  REVERSE  VIDEO *
2094
1618                         * CURSORING  (SUCH  AS THE THOMAS INSTRUMENTATION *
2095
1619                         * 16x64 BOARD).                                   *
2096
1620                         ***************************************************
2097
1621
2098
1622                         ***************************************************
2099
1623                         *               INITIALIZE EMULATOR               *
2100
1624                         ***************************************************
2101
1625
2102
1626                         VINIZ   LDX    #0
2103
1627                                 STX    COLADX    AND ROWADX
2104
1628                                 STX    NEWROW    AND ESCFLG
2105
1629                                 LDX    #SCREEN   POINT TO SCREEN
2106
1630                                 STX    CURSOR    SET PROGRAM CURSOR
2107
1631                                 LDA    #$1B      SEND ESCAPE
2108
1632                                 BSR    VOUTCH
2109
1633                                 LDA    #'Y       CLEAR TO END OF SCREEN
2110
1634                         *
2111
1635                         ** VIDEO OUTPUT ROUTINE
2112
1636                         *
2113
1637                         VOUTCH  PSHS   A,B,X     SAVE REGISTERS
2114
1638                         *
2115
1639                         ** CLEAR CURSOR
2116
1640                                 LDX    CURSOR
2117
1641                                 LDB   0,X
2118
1642                                 ANDB   #$7F
2119
1643                                 STB   0,X
2120
1644                         *
2121
1645                         ** CHECK FOR ESCAPE SEQUENCE
2122
1646                                 TST    ESCFLG    ESCAPE ACTIVE?
2123
1647                                 BEQ    SOROU1    BRANCH IF NOT
2124
1648                                 BSR   ESCAPE    ELSE DO ESCAPE
2125
1649                                 BRA    RETURN    AND RETURN
2126
1650                         *
2127
1651                         ** CHECK FOR CONTROL CHARACTERS
2128
1652                         SOROU1  CMPA   #$20      CONTROL CODES?
2129
1653                                 BHS    SOROU2
2130
1654                                 BSR    CONTRL    BRANCH IF SO
2131
1655                                 BRA    RETURN
2132
1656                         *
2133
1657                         ** OUTPUT TEXT CHARACTER
2134
1658                         SOROU2  LDX    CURSOR    ELSE GET CURSOR
2135
1659                                 STAA   0,X       DISPLAY CHARACTER
2136
1660                                 LBSR   NEWCOL    UPDATE COLUMN
2137
1661                         *
2138
1662                         ** DISPLAY CURSOR AND RETURN
2139
1663                         RETURN  LDX    CURSOR    AND DISPLAY IT
2140
1664                                 LDB    ,X
2141
1665                                 ORAB   #$80      WITH REVID
2142
1666                                 STB    ,X
2143
1667                                 PULS   A,B,X,PC  RESTORE REGISTERS AND RETURN
2144
1668
2145
1669                         ***************************************************
2146
1670                         *              CONTROL CODE HANDLERS              *
2147
1671                         ***************************************************
2148
1672
2149
1673                         CONTRL  CMPA   #$08      CTRL H - BACKSPACE ?
2150
1674                                 LBEQ   BACKSP
2151
1675                                 CMPA   #$1B      ESCAPE SEQUENCE?
2152
1676                                 LBEQ   SETESC
2153
1677                                 CMPA   #$D       CTRL M - RETURN?
2154
1678                                 LBEQ   CRETN
2155
1679                                 CMPA   #$0A      CTRL J - LINE FEED
2156
1680                                 BNE    RETESC    NONE OF THESE, RETURN
2157
1681
2158
1682                         ***************************************** LINE FEED
2159
1683
2160
1684                         LINEFD  LDD    COLADX    GET CURRENT COLUMN AND ROW
2161
1685                                 INCB             BUMP ROW
2162
1686                                 CMPB   #NUMLIN   SCROLL TIME?
2163
1687                                 LBNE   NEWCUR    POSITION CURSOR IF NOT
2164
1688                                 LBRA   SCROLL    ELSE SCROLL IT
2165
1689
2166
1690                         ***************************************** LINE FEED
2167
1691
2168
1692                         LINEUP  LDD    COLADX    GET CURRENT COLUMN AND ROW
2169
1693                                 TSTB                AT TOP OF SCREEN ?
2170
1694                                 BEQ   RETESC    Yes, Ignore
2171
1695                                 DECB             No, Decrement ROW
2172
1696                                 LBRA   NEWCUR    POSITION CURSOR
2173
1697
2174
1698
2175
1699                         *********************************** BACK SPACE
2176
1700
2177
1701                         BACKSP  LDA    COLADX
2178
1702                                 BEQ    RETESC      RETURN
2179
1703                                 DECA
2180
1704                                 LBRA   POSCOL    POSITION CURSOR
2181
1705
2182
1706                         *********************************** CURSOR RIGHT
2183
1707
2184
1708                         CHRIGHT LDA    COLADX
2185
1709                                 INCA
2186
1710                                 CMPA   #LINLEN
2187
1711                                 BEQ   RETESC
2188
1712                                 LBRA   POSCOL
2189
1713
2190
1714                         ***************************************************
2191
1715                         *                 ESCAPE HANDLERS                 *
2192
1716                         ***************************************************
2193
1717
2194
1718                         ESCAPE  LDAB   ESCFLG    GET FLAG
2195
1719                                 CMPB   #'=       SETTING CURSOR?
2196
1720                                 BEQ    ESCCUR    BRANCH IF SO
2197
1721                                 CMPA   #'Y       CLEAR TO END OF SCREEN?
2198
1722                                 LBEQ   ESCCLS
2199
1723                                 CMPA   #'T       CLEAR TO END OF LINE?
2200
1724                                 BEQ   ESCCLL
2201
1725                                 CMPA   #'E       INSERT LINE?
2202
1726                                 BEQ   ESCINL
2203
1727                                 CMPA   #'R       DELETE LINE?
2204
1728                                 BEQ   ESCDLL
2205
1729                                 CMPA   #'=       STARTING CURSOR SET?
2206
1730                                 BNE    CLRESC    BRANCH IF NOT
2207
1731
2208
1732                         ***************************** START ESCAPE SEQUENCE
2209
1733
2210
1734                         SETESC  STAA   ESCFLG    ELSE START CURSORING
2211
1735                                 RTS              AND RETURN
2212
1736
2213
1737                         CLRESC  CLR    ESCFLG    NO OTHERS SUPPORTED
2214
1738                         RETESC  RTS              SO RETURN
2215
1739
2216
1740                         ********************************* SET SCREEN CURSOR
2217
1741
2218
1742                         ESCCUR  TST   NEWROW    ROW SET?
2219
1743                                 BNE   ESCCU1    BRANCH IF SO
2220
1744                                 STAA  NEWROW    ELSE SET NEW ROW
2221
1745                                 RTS              AND RETURN
2222
1746
2223
1747                         ESCCU1  CLR   ESCFLG
2224
1748                                 SUBA  #$20      ADJUST COLUMN ADDRESS
2225
1749                                 CMPA  #LINLEN-1 CHECK FOR ACCEPTABLE COLUM
2226
1750                                 BHI   RETESC    NOT OK, DO NOTHING
2227
1751
2228
1752                         ESCCU2  LDAB  NEWROW
2229
1753                                 CLR   NEWROW
2230
1754                                 SUBB  #$20      ADJUST TO ROW ADDRESS
2231
1755                                 CMPB  #NUMLIN-1 CHECK FOR ACCEPTABLE ROW
2232
1756                                 BHI   RETESC    ELSE RETURN DOING NOTHING
2233
1757                                 BRA   NEWCUR    GO SET NEW CURSOR IF SO
2234
1758                         *
2235
1759                         *************************** DELETE LINE FROM SCREEN
2236
1760
2237
1761                         ESCDLL  BSR   CRETN     GO COL. ZERO
2238
1762                                 LDB   ROWADX
2239
1763                                 CMPB  #NUMLIN-1
2240
1764                                 BEQ   SCROL3
2241
1765                                 BRA   SCROL1    AND DELETE THIS LINE
2242
1766
2243
1767                         *************************** INSERT LINE INTO SCREEN
2244
1768
2245
1769                         ESCINL  BSR   CRETN    GO TO COL. ZERO
2246
1770                                 LDAB  ROWADX
2247
1771                                 CMPB  #NUMLIN-1
2248
1772                                 BEQ   ESCCLL
2249
1773                         *
2250
1774                         ** SCROLL SCREEN DOWN FROM CURSOR
2251
1775                         *
2252
1776                                 LDX   #SCREEN+SCNLEN-LINLEN
2253
1777                         ESCIN0  LDAA  0,-X
2254
1778                                 STAA  LINLEN,X
2255
1779                                 LDA   SCNLEN,X
2256
1780                                 STA   SCNLEN+LINLEN,X
2257
1781                                 CPX   CURSOR
2258
1782                                 BNE   ESCIN0
2259
1783
2260
1784                         ****************** CLEAR FROM CURSOR TO END OF LINE
2261
1785
2262
1786                         ESCCLL  LDA   COLADX    GET CURRENT COLUMN
2263
1787                                 LDX   CURSOR    GET CURSOR
2264
1788                                 LDB   #$20      AND CLEAR CHAR
2265
1789                         ESCLL1  STB   SCNLEN,X  CLEAR ATTRIBUTE
2266
1790                                 STB   ,X+       CLEAR TEXT
2267
1791                                 INCA
2268
1792                                 CMPA  #LINLEN   UNTIL END OF LINE
2269
1793                                 BNE   ESCLL1
2270
1794                                 CLR   ESCFLG
2271
1795                                 RTS
2272
1796
2273
1797                         *********************************** CARRIAGE RETURN
2274
1798
2275
1799                         CRETN   CLRA               SET COLUMN ZERO
2276
1800                         POSCOL  LDB   ROWADX    GET CURRENT ROW
2277
1801
2278
1802                         *********** GENERATE NEW CURSOR POSITION AND RETURN
2279
1803
2280
1804                         NEWCUR  STD   COLADX    SAVE NEW ROW AND COLUMN
2281
1805                                 LDA   #LINLEN   ELSE ADD A LINE
2282
1806                                 MUL              LINLEN * ROWADX
2283
1807                                 ADDB  COLADX
2284
1808                                 ADCA  #0
2285
1809                                 ADDD  #SCREEN   ADD SCREEN BASE.
2286
1810                                 STD   CURSOR    SAVE NEW CURSOR
2287
1811                                 TFR   D,X       GET CURSOR IN X
2288
1812                                 RTS              AND RETURN
2289
1813
2290
1814                         ********************* UPDATE CURRENT COLUMN AND ROW
2291
1815
2292
1816                         NEWCOL  LDD   COLADX    GET ROW AND COLUMN
2293
1817                                 INCA             BUMP COLUMN
2294
1818                                 CMPA  #LINLEN   ROLL?
2295
1819                                 BNE   NEWCUR    BRANCH IF NOT
2296
1820                                 CLRA             ELSE RESET TO ZERO
2297
1821                                 INCB             AND BUMP ROW
2298
1822                                 CMPB  #NUMLIN
2299
1823                                 BNE   NEWCUR
2300
1824                                 DECB             BOTTOM ROW
2301
1825                                 BSR   NEWCUR
2302
1826
2303
1827                         ********************************* SCROLL THE SCREEN
2304
1828
2305
1829                         SCROLL  LDX   #SCREEN   POINT TO SCREEN
2306
1830                         SCROL1  LDA   SCNLEN+LINLEN,X
2307
1831                                 STA   SCNLEN,X
2308
1832                                 LDAA  LINLEN,X  MOVE TWO BYTES
2309
1833                                 STAA  0,X+      UP ONE LINE
2310
1834                                 CMPX  #SCREEN+SCNLEN-LINLEN
2311
1835                                 BNE   SCROL1    LOOP UNTIL DONE
2312
1836                                 BRA   SCROL3
2313
1837
2314
1838                         **************** CLEAR FROM CURSOR TO END OF SCREEN
2315
1839
2316
1840                         ESCCLS  LDX   CURSOR    GET CURSOR
2317
1841                         SCROL3  LDAA  #$20      GET A SPACE
2318
1842                         SCROL2  STA   SCNLEN,X  CLEAR ATTRIBUTES
2319
1843                                 STA   ,X+       AND TEXT
2320
1844                                 CMPX  #SCREEN+SCNLEN
2321
1845                                 BNE   SCROL2    UNTIL DONE
2322
1846                                 CLR   ESCFLG
2323
1847                                 RTS
2324
1848                                 ENDIF DG640OPT
2325
1848                                 ENDIF DG640OPT
2326
1849                         *
2327
1850                                 IFD PRTOPT
2328
1851                         *************************************
2329
1852                         *
2330
1853                         ** PRINTER DRIVER ROUTINES
2331
1854                         *
2332
1855                         *************************************
2333
1856                         *
2334
1857                         ** PINIZ - INITIATE PRINTER PORT
2335
1858                         *
2336
1859                         PINIZ   PSHS B
2337
1860                                 LDD #DIRMSK*256+$04 ACCA=DIRMSK ACCB=$04
2338
1861                                 STD PADATA SET DDR AND SELECT DATA
2339
1862                         *
2340
1863                         ** RESET PRINTER
2341
1864                                 LDB #PRESET
2342
1865                                 STAB PADATA
2343
1866                         RESTLP  INCB DELAY FOR RESET
2344
1867                                 BNE RESTLP
2345
1868                                 STAA PADATA ACCA=DIRMSK
2346
1869                         *
2347
1870                         ** INITALIZE PORT B (DATA PORT)
2348
1871                                 LDAA #$2A
2349
1872                                 STAA PBCTRL
2350
1873                                 LDD #$FF2E ACCA=$FF ACCB =%00101110
2351
1874                                 STD PBDATA PBDREG   PBCTRL
2352
1875                         *
2353
1876                         ** SELECT 66 LINES/PAGE
2354
1877                                 LDAA #$1B
2355
1878                                 BSR POUTCH
2356
1879                                 LDAA #'C
2357
1880                                 BSR POUTCH
2358
1881                                 LDAA #66
2359
1882                                 PULS B
2360
1883                         *************************************
2361
1884                         *
2362
1885                         ** OUTPUT A CHARACTER TO THE PRINTER
2363
1886                         *
2364
1887                         *************************************
2365
1888                         POUTCH  PSHS B
2366
1889                                 LDAB PBDATA CLEAR INTERRUPT BIT
2367
1890                         *
2368
1891                         ** WAIT TILL NOT BUSY
2369
1892                         BUSYLP  LDAB PADATA
2370
1893                                 BITB #PERROR
2371
1894                                 BEQ PEXIT
2372
1895                                 TSTB
2373
1896                                 BMI BUSYLP
2374
1897                         *
2375
1898                         ** NOW OUTPUT CHARACTER
2376
1899                                 STAA PBDATA
2377
1900                         PEXIT   PULS B,PC
2378
1901                         *************************************
2379
1902                         *
2380
1903                         ** PCHK TEST IFD PRINTER READY
2381
1904                         *
2382
1905                         *************************************
2383
1906                         PCHK    TST PBCTRL TEST STATE OF CRB7
2384
1907                                 RTS SET ON ACKNOWLEDGE
2385
1908                                 ENDIF PRTOPT
2386
1908                                 ENDIF PRTOPT
2387
1909                         *************************************
2388
1910                         *
2389
1911                         * MONITOR KEYBOARD COMMAND JUMP TABLE
2390
1912                         *
2391
1913                         *************************************
2392
1914                         *
2393
1915 FD66                    JMPTAB EQU *
2394
1916 FD66 01                  FCB 1 " ^A "
2395
1917 FD67 FB FC               FDB ALTRA
2396
1918 FD69 02                  FCB 2 " ^B "
2397
1919 FD6A FB F1               FDB ALTRB
2398
1920 FD6C 03                  FCB 3 " ^C "
2399
1921 FD6D FC 07               FDB ALTRCC
2400
1922 FD6F 04                  FCB 4 " ^D "
2401
1923 FD70 FB E6               FDB ALTRDP
2402
1924 FD72 10                  FCB $10 " ^P "
2403
1925 FD73 FB B9               FDB ALTRPC
2404
1926 FD75 15                  FCB $15 " ^U "
2405
1927 FD76 FB C5               FDB ALTRU
2406
1928 FD78 18                  FCB $18 " ^X "
2407
1929 FD79 FB DB               FDB ALTRX
2408
1930 FD7B 19                  FCB $19 " ^Y "
2409
1931 FD7C FB D0               FDB ALTRY
2410
1932                         *
2411
1933 FD7E 42                  FCC 'B'
2412
1934 FD7F F9 5C               FDB BRKPNT
2413
1935 FD81 45                  FCC 'E'
2414
1936 FD82 F8 FD               FDB MEMDUMP
2415
1937 FD84 47                  FCC 'G'
2416
1938 FD85 F8 A5               FDB GO
2417
1939 FD87 4C                  FCC 'L'
2418
1940 FD88 FA E6               FDB LOAD
2419
1941 FD8A 50                  FCC 'P'
2420
1942 FD8B FB 44               FDB PUNCH
2421
1943 FD8D 4D                  FCC 'M'
2422
1944 FD8E F8 A8               FDB MEMCHG
2423
1945 FD90 52                  FCC 'R'
2424
1946 FD91 FC 75               FDB REGSTR
2425
1947 FD93 53                  FCC 'S'
2426
1948 FD94 F8 F1               FDB DISSTK
2427
1949 FD96 58                  FCC 'X'
2428
1950 FD97 F9 88               FDB XBKPNT
2429
1951                          IFD MFDCOPT
2430
1952 FD99 44                  FCC 'D'      *** SWTPC USES 'U' FOR MINIBOOT
2431
1953 FD9A F9 D5               FDB MINBOOT
2432
1954                          ENDIF MFDCOPT
2433
1955                          IFD CF8OPT
2434
1956                          FCC 'D'      *** FPGA 8 BIT USES 'D' FOR CFBOOT
2435
1957                          FDB CFBOOT
2436
1958                          ENDIF CF8OPT
2437
1958                          ENDIF CF8OPT
2438
1959                          IFD IDEOPT
2439
1960                          FCC 'D'      *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
2440
1961                          FDB IDEBOOT
2441
1962                          ENDIF IDEOPT
2442
1962                          ENDIF IDEOPT
2443
1963                          IFD DMAFOPT
2444
1964 FD9C 55                  FCC 'U'      *** SWTPC USES 'D' FOR DMAF2 BOOT
2445
1965 FD9D FA 29               FDB DBOOT
2446
1966                          ENDIF DMAFOPT
2447
1967                          IFD EXTOPT
2448
1968                          FCC 'U'      *** IF FPGA, 'U' IS FOR USER
2449
1969                          FDB USRCMD
2450
1970                          ENDIF EXTOPT
2451
1970                          ENDIF EXTOPT
2452
1971                          IFD RTCOPT
2453
1972                          FCC 'T'
2454
1973                          FDB TIMSET
2455
1974                          ENDIF RTCOPT
2456
1974                          ENDIF RTCOPT
2457
1975                          IFD TRAOPT
2458
1976                          FCC "T"
2459
1977                          FDB TRACE
2460
1978                          ENDIF TRAOPT
2461
1978                          ENDIF TRAOPT
2462
1979                         *
2463
1980 FD9F                    TABEND EQU *
2464
1981                         *
2465
1982                         * ** 6809 VECTOR ADDRESSES **
2466
1983                         *
2467
1984                         * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
2468
1985                         * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
2469
1986                         * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
2470
1987                         * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
2471
1988                         * HIS OWN ROUTINES IF HE SO DESIRES.
2472
1989                         *
2473
1990                         *
2474
1991 FD9F F9 94              RAMVEC FDB SWIE  USER-V
2475
1992 FDA1 F8 A7               FDB RTI    SWI3-V
2476
1993 FDA3 F8 A7               FDB RTI    SWI2-V
2477
1994 FDA5 F8 A7               FDB RTI    FIRQ-V
2478
1995 FDA7 F8 A7               FDB RTI    IRQ-V
2479
1996 FDA9 F9 94               FDB SWIE   SWI-V
2480
1997 FDAB FF FF               FDB $FFFF  SVC-VO
2481
1998 FDAD FF FF               FDB $FFFF  SVC-VL
2482
1999                         *
2483
2000                         * PRINTABLE MESSAGE STRINGS
2484
2001                         *
2485
2002 FDAF 0D 0A 00 00 00     MSG1  FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0
2486
2003 FDB4 53 59 53 30 39 42        FCC 'SYS09BUG 1.4 FOR '
2487
          55 47 20 31 2E 34
2488
          20 46 4F 52 20
2489
2004                               IFD S3EOPT
2490
2005                               FCC 'S3E '
2491
2006                               ENDIF S3EOPT
2492
2006                               ENDIF S3EOPT
2493
2007                               IFD B5XOPT
2494
2008                               FCC 'B5-X300 '
2495
2009                               ENDIF B5XOPT
2496
2009                               ENDIF B5XOPT
2497
2010                               IFD S3SOPT
2498
2011                               FCC 'S3STARTER '
2499
2012                               ENDIF S3SOPT
2500
2012                               ENDIF S3SOPT
2501
2013                               IFD ADSOPT
2502
2014                               FCC 'ADS6809 '
2503
2015                               ENDIF ADSOPT
2504
2015                               ENDIF ADSOPT
2505
2016                               IFD SWTOPT`
2506
2017 FDC5 53 57 54 50 43 20        FCC 'SWTPC '
2507
2018                               ENDIF SWTOPT
2508
2019                               IFD XESOPT`
2509
2020                               FCC  'XESS '
2510
2021                               ENDIF XESOPT
2511
2021                               ENDIF XESOPT
2512
2022 FDCB 20 2D 20                 FCC ' - '
2513
2023 FDCE 04                       FCB 4
2514
2024 FDCF 4B 0D 0A 00 00 00  MSG2  FCB 'K,$D,$A,$00,$00,$00,$04 K, * CR/LF + 3 NULS
2515
          04
2516
2025 FDD6 3E                 MSG3  FCC '>'
2517
2026 FDD7 04                       FCB 4
2518
2027 FDD8 57 48 41 54 3F     MSG4  FCC 'WHAT?'
2519
2028 FDDD 04                       FCB 4
2520
2029 FDDE 20 2D 20           MSG5  FCC ' - '
2521
2030 FDE1 04                       FCB 4'
2522
2031 FDE2 20 20 53 50 3D     MSG10 FCC '  SP='
2523
2032 FDE7 04                       FCB 4
2524
2033 FDE8 20 20 50 43 3D     MSG11 FCC '  PC='
2525
2034 FDED 04                       FCB 4
2526
2035 FDEE 20 20 55 53 3D     MSG12 FCC '  US='
2527
2036 FDF3 04                       FCB 4
2528
2037 FDF4 20 20 49 59 3D     MSG13 FCC '  IY='
2529
2038 FDF9 04                       FCB 4
2530
2039 FDFA 20 20 49 58 3D     MSG14 FCC '  IX='
2531
2040 FDFF 04                       FCB 4
2532
2041 FE00 20 20 44 50 3D     MSG15 FCC '  DP='
2533
2042 FE05 04                       FCB 4
2534
2043 FE06 20 20 41 3D        MSG16 FCC '  A='
2535
2044 FE0A 04                       FCB 4
2536
2045 FE0B 20 20 42 3D        MSG17 FCC '  B='
2537
2046 FE0F 04                       FCB 4
2538
2047 FE10 20 20 43 43 3A 20  MSG18 FCC '  CC: '
2539
2048 FE16 04                       FCB 4
2540
2049 FE17 45 46 48 49 4E 5A  MSG19 FCC 'EFHINZVC'
2541
          56 43
2542
2050 FE1F 53 31              MSG20 FCC 'S1'
2543
2051 FE21 04                       FCB 4
2544
2052                                 IFD DATOPT
2545
2053                         *
2546
2054                         * POWER UP/ RESET/ NMI ENTRY POINT
2547
2055                         *
2548
2056 FF00                     ORG $FF00
2549
2057                         *
2550
2058                         *
2551
2059 FF00 8E FF F0           START LDX  #IC11  POINT TO DAT RAM IC11
2552
2060 FF03 86 0F                      LDA  #$F GET COMPLIMENT OF ZERO
2553
2061                         *
2554
2062                         *
2555
2063                         * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
2556
2064                         * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS
2557
2065                         * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE
2558
2066                         * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA
2559
2067                         * STORED IN IT.
2560
2068                         *
2561
2069                         *
2562
2070 FF05 A7 80              DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION
2563
2071 FF07 4A                         DECA  GET COMP. VALUE FOR NEXT LOCATION
2564
2072 FF08 26 FB                      BNE  DATLP ALL 16 LOCATIONS INITIALIZED ?
2565
2073                         *
2566
2074                         * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
2567
2075                         *       ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
2568
2076                         *       PHYSICAL ADDRESSES.
2569
2077                         *
2570
2078 FF0A 86 F0                      LDA  #$F0
2571
2079 FF0C A7 84                      STA  ,X STORE $F0 AT $FFFF
2572
2080 FF0E 8E D0 A0                   LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF
2573
2081 FF11 10 8E 55 AA                LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y"
2574
2082 FF15 EE 84              TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION
2575
2083 FF17 10 AF 84                   STY  ,X STORE TEST PATTERN AT $D0A0
2576
2084 FF1A 10 AC 84                   CMPY ,X IS THERE RAM AT THIS LOCATION ?
2577
2085 FF1D 27 0B                      BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP
2578
2086 FF1F 30 89 F0 00                LEAX -$1000,X ELSE POINT 4K LOWER
2579
2087 FF23 8C F0 A0                   CMPX #$F0A0 DECREMENTED PAST ZER0 YET ?
2580
2088 FF26 26 ED                      BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM
2581
2089 FF28 20 D6                      BRA  START ELSE START ALL OVER AGAIN
2582
2090                         *
2583
2091                         *
2584
2092                         * THE FOLLOWING CODE STORES THE COMPLEMENT OF
2585
2093                         * THE MS CHARACTER OF THE FOUR CHARACTER HEX
2586
2094                         * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED
2587
2095                         * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT
2588
2096                         * IS STORED IN RAM IN THE LOCATION THAT IS
2589
2097                         * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---,
2590
2098                         * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND
2591
2099                         * WHEN TESTING LOCATION $70A0, MEANING THERE
2592
2100                         * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE
2593
2101                         * $8000-$DFFF, THEN THE COMPLEMENT OF THE
2594
2102                         * "7" IN THE $70A0 WILL BE STORED IN
2595
2103                         * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS
2596
2104                         * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND
2597
2105                         * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE
2598
2106                         * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE
2599
2107                         * RAM THAT IS PHYSICALLY ADDRESSED AT $7---
2600
2108                         * WILL RESPOND AND APPEAR TO THE 6809 THAT IT
2601
2109                         * IS AT $D--- SINCE THAT IS THE ADDRESS THE
2602
2110                         * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK
2603
2111                         * OF RAM RESPONDS.
2604
2112                         *
2605
2113                         *
2606
2114 FF2A EF 84              CNVADR  STU  ,X RESTORE DATA AT TEST LOCATION
2607
2115 FF2C 1F 10                      TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
2608
2116 FF2E 43                         COMA  COMPLEMENT MSB OF THAT ADDRESS
2609
2117 FF2F 44                         LSRA  PUT MS 4 BITS OF ADDRESS IN
2610
2118 FF30 44                         LSRA  LOCATION D0-D3 TO ALLOW STORING
2611
2119 FF31 44                         LSRA  IT IN THE DYNAMIC ADDRESS
2612
2120 FF32 44                         LSRA  TRANSLATION RAM.
2613
2121 FF33 B7 FF FD                   STA  $FFFD STORE XLATION FACTOR IN DAT "D"
2614
2122                         *
2615
2123 FF36 10 CE DF C0                LDS  #STACK INITIALIZE STACK POINTER
2616
2124                         *
2617
2125                         *
2618
2126                         * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
2619
2127                         * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK
2620
2128                         * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS
2621
2129                         * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION
2622
2130                         * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF
2623
2131                         * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO
2624
2132                         * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---....
2625
2133                         *
2626
2134                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
2627
2135                         * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- --
2628
2136                         *
2629
2137                         * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE
2630
2138                         * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING....
2631
2139                         *
2632
2140                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
2633
2141                         * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0
2634
2142                         *
2635
2143                         *
2636
2144                         * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF
2637
2145                         * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL
2638
2146                         * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK
2639
2147                         * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT
2640
2148                         * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000
2641
2149                         * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000
2642
2150                         * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE
2643
2151                         * MEMORY ADDRESSED AS FOLLOWS....
2644
2152                         *
2645
2153                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
2646
2154                         * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
2647
2155                         *
2648
2156                         *
2649
2157 FF3A 10 8E DF D0                LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
2650
2158 FF3E A7 2D                      STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD
2651
2159 FF40 6F 2E                      CLR  14,Y CLEAR $DFDE
2652
2160 FF42 86 F0                      LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ?
2653
2161 FF44 A7 2F                      STA  15,Y STORE AT $DFDF
2654
2162 FF46 86 0C                      LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR
2655
2163 FF48 6F A6              CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0
2656
2164 FF4A 4A                         DECA SUB. 1 FROM BYTES LEFT TO CLEAR
2657
2165 FF4B 2A FB                      BPL  CLRLRT CONTINUE IF NOT DONE CLEARING
2658
2166 FF4D 30 89 F0 00        FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM
2659
2167 FF51 8C F0 A0                   CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO
2660
2168 FF54 27 22                      BEQ  FINTAB SKIP IF FINISHED
2661
2169 FF56 EE 84                      LDU  ,X SAVE DATA AT CURRENT TEST LOCATION
2662
2170 FF58 10 8E 55 AA                LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG.
2663
2171 FF5C 10 AF 84                   STY  ,X STORE TEST PATT. INTO RAM TEST LOC.
2664
2172 FF5F 10 AC 84                   CMPY ,X VERIFY RAM AT TEST LOCATION
2665
2173 FF62 26 E9                      BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER
2666
2174 FF64 EF 84                      STU  ,X ELSE RESTORE DATA TO TEST LOCATION
2667
2175 FF66 10 8E DF D0                LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
2668
2176 FF6A 1F 10                      TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
2669
2177 FF6C 44                         LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
2670
2178 FF6D 44                         LSRA  TO ALLOW STORING IT IN THE DAT RAM.
2671
2179 FF6E 44                         LSRA
2672
2180 FF6F 44                         LSRA
2673
2181 FF70 1F 89                      TFR  A,B SAVE OFFSET INTO LRARAM TABLE
2674
2182 FF72 88 0F                      EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK
2675
2183 FF74 A7 A5                      STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE
2676
2184 FF76 20 D5                      BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK
2677
2185 FF78 86 F1              FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ?
2678
2186 FF7A 10 8E DF D0                LDY  #LRARAM POINT TO LRARAM TABLE
2679
2187 FF7E A7 2E                      STA  14,Y STORE $F1 AT $DFCE
2680
2188                         *
2681
2189                         * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
2682
2190                         * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
2683
2191                         * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT
2684
2192                         * LOGICALLY RESPONDS TO THE ADDRESS $C---.
2685
2193                         *
2686
2194                         *
2687
2195 FF80 86 0C                      LDA  #$0C PRESET NUMBER HEX "C"
2688
2196 FF82 E6 A6              FINDC   LDB  A,Y GET ENTRY FROM LRARAM TABLE
2689
2197 FF84 26 05                      BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR.
2690
2198 FF86 4A                         DECA  ELSE POINT 4K LOWER
2691
2199 FF87 2A F9                      BPL  FINDC GO TRY AGAIN
2692
2200 FF89 20 14                      BRA  XFERTF
2693
2201 FF8B 6F A6              FOUNDC  CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND
2694
2202 FF8D E7 2C                      STB  $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C---
2695
2203                         *
2696
2204                         * THE FOLLOWING CODE ADJUSTS THE TRANSLATION
2697
2205                         * FACTORS SUCH THAT ALL REMAINING RAM WILL
2698
2206                         * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
2699
2207                         * ADDRESSES FROM $0000 AND UP....
2700
2208                         *
2701
2209 FF8F 4F                         CLRA  START AT ZERO
2702
2210 FF90 1F 21                      TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE.
2703
2211 FF92 E6 A6              COMPRS  LDB  A,Y GET ENTRY FROM "LRARAM" TABLE
2704
2212 FF94 27 04                      BEQ  PNTNXT IF IT'S ZER0 SKIP
2705
2213 FF96 6F A6                      CLR  A,Y ELSE ERASE FROM TABLE
2706
2214 FF98 E7 80                      STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP
2707
2215 FF9A 4C                 PNTNXT  INCA GET OFFSET TO NEXT ENTRY
2708
2216 FF9B 81 0C                      CMPA #$0C LAST ENTRY YET ?
2709
2217 FF9D 2D F3                      BLT  COMPRS
2710
2218                         *
2711
2219                         * THE FOLLOWING CODE TRANSFER THE TRANSLATION
2712
2220                         * FACTORS FROM THE LRARAM TABLE TO IC11 ON
2713
2221                         * THE MP-09 CPU CARD.
2714
2222                         *
2715
2223 FF9F 8E FF F0           XFERTF  LDX  #IC11  POINT TO DAT RAM IC11
2716
2224 FFA2 C6 10                      LDB  #$10 GET NO. OF BYTES TO MOVE
2717
2225 FFA4 A6 A0              FETCH   LDA  ,Y+ GET BYTE AND POINT TO NEXT
2718
2226 FFA6 A7 80                      STA  ,X+ POKE XLATION FACTOR IN IC11
2719
2227 FFA8 5A                         DECB  SUB 1 FROM BYTES TO MOVE
2720
2228 FFA9 26 F9                      BNE  FETCH CONTINUE UNTIL 16 MOVED
2721
2229                         *
2722
2230                                 ELSE
2723
2231                         LRA     RTS
2724
2232                         START   LDS  #STACK INITIALIZE STACK POINTER
2725
2233                                 CLRB
2726
2234                                 ENDIF DATOPT
2727
2234                                 ENDIF DATOPT
2728
2235                         *
2729
2236 FFAB 53                         COMB  SET "B" NON-ZERO
2730
2237 FFAC F7 DF E2                   STB  ECHO TURN ON ECHO FLAG
2731
2238 FFAF 16 F8 62                   LBRA MONITOR INITIALIZATION IS COMPLETE
2732
2239                         *
2733
2240                         ** INTERRUPT JUMP VECTORS
2734
2241                         *
2735
2242 FFB2 6E 9F DF C0        V1 JMP  [STACK]
2736
2243 FFB6 6E 9F DF C4        V2 JMP  [SWI2]
2737
2244 FFBA 6E 9F DF C6        V3 JMP  [FIRQ]
2738
2245 FFBE 6E 9F DF C8        V4 JMP  [IRQ]
2739
2246 FFC2 6E 9F DF CA        V5 JMP  [SWI]
2740
2247                         *
2741
2248                         * SWI3 ENTRY POINT
2742
2249                         *
2743
2250 FFC6 1F 43              SWI3E  TFR  S,U
2744
2251 FFC8 AE 4A                     LDX  10,U      *$FFC8
2745
2252 FFCA E6 80                     LDB  ,X+
2746
2253 FFCC AF 4A                     STX  10,U
2747
2254 FFCE 4F                        CLRA
2748
2255 FFCF 58                        ASLB
2749
2256 FFD0 49                        ROLA
2750
2257 FFD1 BE DF CC                  LDX  SVCVO
2751
2258 FFD4 8C FF FF                  CMPX #$FFFF
2752
2259 FFD7 27 0F                     BEQ  SWI3Z
2753
2260 FFD9 30 8B                     LEAX D,X
2754
2261 FFDB BC DF CE                  CMPX SVCVL
2755
2262 FFDE 22 08                     BHI  SWI3Z
2756
2263 FFE0 34 10                     PSHS X
2757
2264 FFE2 EC C4                     LDD  ,U
2758
2265 FFE4 AE 44                     LDX  4,U
2759
2266 FFE6 6E F1                     JMP  [,S++]
2760
2267 FFE8 37 1F              SWI3Z PULU A,B,X,CC,DP
2761
2268 FFEA EE 42                     LDU  2,U
2762
2269 FFEC 6E 9F DF C2               JMP  [SWI3]
2763
2270                         *
2764
2271                         * 6809 VECTORS
2765
2272                         *
2766
2273 FFF0                           ORG $FFF0
2767
2274 FFF0 FF B2                     FDB V1    USER-V
2768
2275 FFF2 FF C6                     FDB SWI3E SWI3-V
2769
2276 FFF4 FF B6                     FDB V2    SWI2-V
2770
2277 FFF6 FF BA                     FDB V3    FIRQ-V
2771
2278 FFF8 FF BE                     FDB V4    IRQ-V
2772
2279 FFFA FF C2                     FDB V5    SWI-V
2773
2280 FFFC FF B2                     FDB V1    NMI-V
2774
2281 FFFE FF 00                     FDB START RESTART-V
2775
0004                                END START
2776
0005                          END
2777
Program + Init Data = 1826 bytes
2778
Error count = 0

powered by: WebSVN 2.1.0

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