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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [sys09bug/] [sys09ads.lst] - Blame information for rev 66

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 ADS6809
4
0000                          INCLUDE "opt_ads.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 00FF                    ADSOPT  EQU $FF ADS6809 & DG640 VIDEO DISPAY
20
0016                         *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 00FF                    DG640OPT  EQU $FF DG640 VDU AT $E800
101
0072                         *RTCOPT  EQU $FF REAL TIME CLOCK
102
0073 00FF                    PRTOPT  EQU $FF PRINTER DRIVERS
103
0074 00FF                    MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
104
0075                                 ENDIF ADSOPT
105
0076                         *
106
0077                                 IFD SWTOPT
107
0078                         *
108
0079                         * SOUTH WEST TECHNICAL PRODUCTS COMPUTER
109
0080                         *
110
0081                         ACIAOPT EQU $FF ACIA AT PORT 0
111
0082                         DMAFOPT EQU $FF DMAF2 8" FLOPPY DISK BOOT
112
0083                         MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
113
0084                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
114
0085                                 ENDIF
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                         ACIAS   EQU   MONIO+$00   CONTROL PORT
126
0096                         *
127
0097                                 ENDIF ACIAOPT
128
0097                                 ENDIF ACIAOPT
129
0098                                 IFD   MFDCOPT
130
0099                         *
131
0100                         ***************************************************
132
0101                         *   MINIFLOPPY DRIVE                              *
133
0102                         ***************************************************
134
0103                         *
135
0104                         ** FLOPPY DISK CONTROLLER SITS ON PORT 1
136
0105                         *
137
0106 E014                    DRVFDC  EQU   MONIO+$14
138
0107 E018                    CMDFDC  EQU   MONIO+$18
139
0108 E01A                    SECFDC  EQU   MONIO+$1A
140
0109 E01B                    DATFDC  EQU   MONIO+$1B
141
0110                                 ENDIF MFDCOPT
142
0111                                 IFD PS2OPT
143
0112                         *
144
0113                         ***************************************************
145
0114                         *   VDU8 PS/2 KEYBOARD PORT                       *
146
0115                         ***************************************************
147
0116                         *
148
0117                         ** KEYBOARD SITS ON PORT 2
149
0118                         *
150
0119                         PS2KBD  EQU   MONIO+$20   PS/2 KEYBOARD PORT
151
0120                                 ENDIF PS2OPT
152
0120                                 ENDIF PS2OPT
153
0121                                 IFD VDUOPT
154
0122                         *
155
0123                         ***************************************************
156
0124                         *   VDU8 DISPLAY DRIVER EQUATES                   *
157
0125                         ***************************************************
158
0126                         *
159
0127                         ** VDU8 DISPLAY SITS ON PORT 3
160
0128                         *
161
0129                         VDU     EQU   MONIO+$30
162
0130                         VDUCHR  EQU   0        CHARACTER REGISTER
163
0131                         VDUATT  EQU   1        ATTRIBUTE REGISTER
164
0132                         VDUCOL  EQU   2        CURSOR COLUMN
165
0133                         VDUROW  EQU   3        CURSOR ROW
166
0134                         VDUOFF  EQU   4        ROW OFFSET
167
0135                         *
168
0136                         LINLEN  EQU   80       LENGTH OF A LINE
169
0137                         NUMLIN  EQU   25       NUMBER OF LINES
170
0138                                 ENDIF VDUOPT
171
0138                                 ENDIF VDUOPT
172
0139                         *
173
0140                                    IFD CF8OPT
174
0141                         *
175
0142                         ***************************************************
176
0143                         *   COMPACT FLASH EQUATES 8 BIT TRANSFER          *
177
0144                         ***************************************************
178
0145                         *
179
0146                         ** COMPACT FLASH SITS AT PORT 4
180
0147                         *
181
0148                         CF_BASE    EQU MONIO+$40
182
0149                         CF_DATA    EQU CF_BASE+0
183
0150                         CF_ERROR   EQU CF_BASE+1 ; read error
184
0151                         CF_FEATURE EQU CF_BASE+1 ; write feature
185
0152                         CF_SECCNT  EQU CF_BASE+2
186
0153                         CF_SECNUM  EQU CF_BASE+3
187
0154                         CF_CYLLO   EQU CF_BASE+4
188
0155                         CF_CYLHI   EQU CF_BASE+5
189
0156                         CF_HEAD    EQU CF_BASE+6
190
0157                         CF_STATUS  EQU CF_BASE+7 ; read status
191
0158                         CF_COMAND  EQU CF_BASE+7 ; write command
192
0159                         *
193
0160                         * Command Equates
194
0161                         *
195
0162                         CMDREAD    EQU $20 ; Read Single sector
196
0163                         CMDWRITE   EQU $30 ; Write Single sector
197
0164                         CMDFEATURE EQU $EF
198
0165                         FEAT8BIT   EQU $01 ; enable 8 bit transfers
199
0166                         HEADLBA    EQU $E0
200
0167                         *
201
0168                         * Status bit equates
202
0169                         *
203
0170                         BUSY       EQU $80
204
0171                         DRDY       EQU $40
205
0172                         DRQ        EQU $08
206
0173                         ERR        EQU $01
207
0174                         *
208
0175                                    ENDIF CF8OPT
209
0175                                    ENDIF CF8OPT
210
0176                         *
211
0177                                    IFD IDEOPT
212
0178                         *
213
0179                         ***************************************************
214
0180                         *   COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS)  *
215
0181                         ***************************************************
216
0182                         *
217
0183                         ** COMPACT FLASH SITS AT PORT 4
218
0184                         *
219
0185                         CF_BASE    EQU MONIO+$0100
220
0186                         CF_DATA    EQU CF_BASE+0
221
0187                         CF_ERROR   EQU CF_BASE+2 ; read error
222
0188                         CF_FEATURE EQU CF_BASE+2 ; write feature
223
0189                         CF_SECCNT  EQU CF_BASE+4
224
0190                         CF_SECNUM  EQU CF_BASE+6
225
0191                         CF_CYLLO   EQU CF_BASE+8
226
0192                         CF_CYLHI   EQU CF_BASE+10
227
0193                         CF_HEAD    EQU CF_BASE+12
228
0194                         CF_STATUS  EQU CF_BASE+14 ; read status
229
0195                         CF_COMAND  EQU CF_BASE+14 ; write command
230
0196                         CF_AUX     EQU CF_BASE+30
231
0197                         *
232
0198                         * Command Equates
233
0199                         *
234
0200                         CMDREAD    EQU $20 ; Read Single sector
235
0201                         CMDWRITE   EQU $30 ; Write Single sector
236
0202                         AUXRESET   EQU $06 ; Reset IDE
237
0203                         AUXRSTREL  EQU $02 ; Reset release IRQ masked
238
0204                         HEADLBA    EQU $E0
239
0205                         *
240
0206                         * Status bit equates
241
0207                         *
242
0208                         BUSY       EQU $80
243
0209                         DRDY       EQU $40
244
0210                         DRQ        EQU $08
245
0211                         ERR        EQU $01
246
0212                         *
247
0213                                    ENDIF CF8OPT
248
0213                                    ENDIF CF8OPT
249
0214                         *
250
0215                                 IFD RTCOPT
251
0216                         *
252
0217                         **************************************************
253
0218                         * MM58167A REAL TIME CLOCK MEMORY MAP:
254
0219                         **************************************************
255
0220                         *
256
0221                         ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5
257
0222                         *
258
0223                         CLOCK  EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS
259
0224                         *
260
0225                         * COUNTER AND COMPARITOR REGISTERS:
261
0226                         *
262
0227                         * Both the Clock Counter and Clock Comparitor
263
0228                         * consist of 8 registers for holding the time.
264
0229                         * The register offsets from the Counter and
265
0230                         * Comparitor registers are listed above.
266
0231                         *
267
0232                         COUNTR EQU CLOCK+0
268
0233                         CMPRAM EQU CLOCK+8 COMPARITOR REGISTERS
269
0234                         *
270
0235                         * CLOCK REGISTER OFFSETS:
271
0236                         * These register offsets are used for the CLOCK
272
0237                         * and comparitor ram CMPRAM.
273
0238                         *
274
0239                         S10000 EQU 0 TEN THOUNSANDTHS OF SECONDS
275
0240                         S100   EQU 1 HUNDRETHS AND TENTHS OF SECONDS
276
0241                         SECOND EQU 2
277
0242                         MINUIT EQU 3
278
0243                         HOUR   EQU 4
279
0244                         WKDAY  EQU 5
280
0245                         MTHDAY EQU 6
281
0246                         MONTH  EQU 7
282
0247                         *
283
0248                         * INTERRUPT OUTPUT REGISTERS:
284
0249                         *
285
0250                         * An interrupt output may be generated at the
286
0251                         * following rates by setting the appropriate bit
287
0252                         * in the Interrupt Control Register (CINTCR).
288
0253                         * The Interrupt Status Register (CINTSR) must be
289
0254                         * read to clear the interrupt and will return
290
0255                         * the source of the interrupt.
291
0256                         *
292
0257                         * 1/Month      Bit 7
293
0258                         * 1/Week       Bit 6
294
0259                         * 1/Day        Bit 5
295
0260                         * 1/Hour       Bit 4
296
0261                         * 1/Minuite    Bit 3
297
0262                         * 1/Second     Bit 2
298
0263                         * 10/Second    Bit 1
299
0264                         * Comparitor   Bit 0
300
0265                         *
301
0266                         CINTSR  EQU CLOCK+16 INTERRUPT STATUS REGISTER
302
0267                         CINTCR  EQU CLOCK+17 INTERRUPT CONTROL REGISTER
303
0268                         *
304
0269                         * COUNTER AND RAM RESETS; GO COMMAND.
305
0270                         *
306
0271                         * The counter and comparitor may be reset
307
0272                         * by writing $FF into CTRRES and CMPRES
308
0273                         * respectivly.
309
0274                         * A write to the Go command register (GOCMND)
310
0275                         * will reset the 1/1000ths, 1/100ths and 1/10ths
311
0276                         * of a second counter.
312
0277                         *
313
0278                         CTRRES EQU CLOCK+18 COUNTER RESET
314
0279                         CMPRES EQU CLOCK+19 COMPARITOR RAM RESET
315
0280                         GOCMND EQU CLOCK+21 GO COMMAND
316
0281                         *
317
0282                         * CLOCK STATUS REGISTER.
318
0283                         *
319
0284                         * The counter takes 61 usec. to rollover for
320
0285                         * every 1KHz clock pulse. If the Status bit is
321
0286                         * set after reading the counter, the counter
322
0287                         * should be re-read to ensure the time is correct.
323
0288                         *
324
0289                         CLKSTA EQU CLOCK+20 STATUS BIT
325
0290                         SBYINT EQU CLOCK+22 STANDBY INTERRUPT
326
0291                         TSTMOD EQU CLOCK+31 TEST MODE REGISTER
327
0292                                ENDIF RTCOPT
328
0292                                ENDIF RTCOPT
329
0293                         *
330
0294                                IFD TRAOPT
331
0295                         *
332
0296                         **************************************************
333
0297                         * PIA INTERRUPT TIMER
334
0298                         **************************************************
335
0299                         *
336
0300                         ** PIA INTERRUPT TIMER SITS ON PORT 7
337
0301                         *
338
0302                         ** PIA TIMER FOR SINGLE STEP / TRACE
339
0303                         *
340
0304                         * TADATA = Output = Timer preset register
341
0305                         * TACTRL - CA1 = input = rising edge = NMI
342
0306                         *        - CA2 = Output = Timer Reset (Active High)
343
0307                         * TBDATA = Input = Timer read back register
344
0308                         * TBCTRL - CB1 = input = rising edge = FIRQ
345
0309                         *        - CB2 = output = strobe low on write to TBDATA = Timer Preset
346
0310                         *
347
0311                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
348
0312                         * CRA1 = 1 CA1 Rising edge IRQ
349
0313                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
350
0314                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
351
0315                         * CRA4 = 1 ] CA2 = Set/Reset output
352
0316                         * CRA5 = 1 ]
353
0317                         * CRA6 = X CA2 Input Interrupt Flag
354
0318                         * CRA7 = X CA1 Interrupt Flag
355
0319                         *
356
0320                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
357
0321                         * CRB1 = 1 CB1 Rising edge IRQ
358
0322                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
359
0323                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
360
0324                         * CRB4 = 1 ] CB2 = Set/Reset output
361
0325                         * CRB5 = 1 ]
362
0326                         * CRB6 = X CB2 Input Interrupt Flag
363
0327                         * CRB7 = X CB1 Interrupt Flag
364
0328                         *
365
0329                         * DDRA = 0 TADATA = Input, DDRA = 1 TADATA = Output
366
0330                         * DDRB = 0 TBDATA = Input, DDRB = 1 TBDATA = Output
367
0331                         *
368
0332                         TADATA EQU MONIO+$70 Timer preset port
369
0333                         TACTRL EQU MONIO+$71
370
0334                         TBDATA EQU MONIO+$72 Timer read back port
371
0335                         TBCTRL EQU MONIO+$73
372
0336                         *
373
0337                         TRADEL EQU 13  Number of E cycles for RTI (May need to be fudged)
374
0338                         *
375
0339                                ENDIF TRAOPT
376
0339                                ENDIF TRAOPT
377
0340                                IFD ADSOPT
378
0341                         *
379
0342                         ***************************************************
380
0343                         *   SERIAL PORT FOR DG640                         *
381
0344                         ***************************************************
382
0345                         *
383
0346                         ** SET UP FOR ACKERMAN DIGITAL ADS6809
384
0347                         ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA
385
0348                         *
386
0349 E400                    ACIAS   EQU   MONIO+$400   CONTROL PORT
387
0350                         *
388
0351                                 ENDIF ADSOPT
389
0352                                 IFD PRTOPT
390
0353                         *
391
0354                         ***************************************************
392
0355                         * PRINTER INTERFACE                               *
393
0356                         ***************************************************
394
0357                         *
395
0358 E404                    PADATA EQU MONIO+$404
396
0359 E405                    PACTRL EQU MONIO+$405
397
0360 E406                    PBDATA EQU MONIO+$406
398
0361 E407                    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 0080                    PBUSY  EQU $80 I/P
406
0369 0040                    PEMPTY EQU $40 I/P
407
0370 0020                    SELECT EQU $20 I/P
408
0371 0010                    PERROR EQU $10 I/P
409
0372 0004                    PRESET EQU %00000100 O/P PA3 = 0
410
0373 0008                    AUTOFD EQU %00001000 O/P PA2 = 0
411
0374 000C                    DIRMSK EQU %00001100
412
0375                                ENDIF PRTOPT
413
0376                                IFD DG640OPT
414
0377                         *
415
0378                         ***************************************************
416
0379                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
417
0380                         ***************************************************
418
0381                         *
419
0382                         ** VIDEO DISPLAY DEFINITIONS
420
0383                         *
421
0384 E800                    SCREEN  EQU   MONIO+$0800 START OF SCREEN MEMORY
422
0385 0040                    LINLEN  EQU   64          LENGTH OF A LINE
423
0386 0010                    NUMLIN  EQU   16          NUMBER OF LINES
424
0387 0400                    SCNLEN  EQU   $400        LENGTH OF SCREEN
425
0388                                 ENDIF DG640OPT
426
0389                         *
427
0390                                 IFD   DMAFOPT
428
0391                         *
429
0392                         ***************************************************
430
0393                         *   DMAF2 8" DRIVE                                *
431
0394                         ***************************************************
432
0395                         *
433
0396                         ADDREG  EQU   $F000  ADDRESS REGISTER
434
0397                         CNTREG  EQU   $F002  COUNT REGISTER
435
0398                         CCREG   EQU   $F010  CHANNEL CONTROL REGISTER
436
0399                         PRIREG  EQU   $F014  DMA PRIORITY REGISTER
437
0400                         AAAREG  EQU   $F015  ???
438
0401                         BBBREG  EQU   $F016  ???
439
0402                         COMREG  EQU   $F020  1791 COMMAND REGISTER
440
0403                         SECREG  EQU   $F022  SECTOR REGISTER
441
0404                         DRVREG  EQU   $F024  DRIVE SELECT LATCH
442
0405                         CCCREG  EQU   $F040  ???
443
0406                                 ENDIF DMAFOPT
444
0406                                 ENDIF DMAFOPT
445
0407                                 IFD DATOPT
446
0408                         **************************************************
447
0409                         * DYNAMIC ADDRESS TRANSLATION REGISTERS          *
448
0410                         **************************************************
449
0411                         *
450
0412                         IC11    EQU  $FFF0  DAT RAM CHIP
451
0413                         TSTPAT  EQU  $55AA  TEST PATTERN
452
0414                                 ENDIF DATOPT
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                         LRARAM  RMB   16 LRA ADDRESSES
557
0099                                 ENDIF DATOPT
558
0099                                 ENDIF DATOPT
559
0100 DFD0                    CPORT   RMB   2  RE-VECTORABLE CONTROL PORT
560
0101 DFD2                    ECHO    RMB   1  ECHO FLAG
561
0102 DFD3                    BPTBL   RMB   24 BREAKPOINT TABLE BASE ADDR
562
0103                                 IFD  TRAOPT
563
0104                         NMISAV  RMB 2 NMI Jump Vector Backup
564
0105                         TRACNT  RMB 2 Trace Count
565
0106                                 ENDIF TRAOPT
566
0106                                 ENDIF TRAOPT
567
0107                                 IFD VDUOPT
568
0108                         *
569
0109                         **************************************************
570
0110                         *   VDU8 DISPLAY DRIVER VARIABLES                                    *
571
0111                         **************************************************
572
0112                         *
573
0113                         **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ******
574
0114                         COLADX  RMB   1         CURSOR COLUMN
575
0115                         ROWADX  RMB   1         CURSOR ROW
576
0116                         **************************************************
577
0117                         *
578
0118                         NEWROW  RMB   1         NEW ROW TEMP FOR ESCAPE
579
0119                         ESCFLG  RMB   1         ESCAPE SEQUENCE ACTIVE
580
0120                                 ENDIF VDUOPT
581
0120                                 ENDIF VDUOPT
582
0121                                IFD DG640OPT
583
0122                         *
584
0123                         ***************************************************
585
0124                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
586
0125                         ***************************************************
587
0126                         *
588
0127                         ***** ALWAYS KEEP THESE TWO BYTES TOGETHER *****
589
0128 DFEB                    COLADX  RMB   1           CURSOR COLUMN
590
0129 DFEC                    ROWADX  RMB   1           CURSOR ROW
591
0130                         *************************************************
592
0131 DFED                    CURSOR  RMB   2           ABSOLUTE SCREEN ADDRESS
593
0132 DFEF                    NEWROW  RMB   1           NEW ROW TEMP FOR ESCAPE
594
0133 DFF0                    ESCFLG  RMB   1           ESCAPE SEQUENCE ACTIVE
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 22                      FDB   MONITOR
604
0143 F802 F8 56                      FDB   NEXTCMD
605
0144 F804 FC 66                      FDB   INCH
606
0145 F806 FC 60                      FDB   INCHE
607
0146 F808 FC 75                      FDB   INCHEK
608
0147 F80A FC 83                      FDB   OUTCH
609
0148 F80C FB 58                      FDB   PDATA
610
0149 F80E FA E7                      FDB   PCRLF
611
0150 F810 FA E3                      FDB   PSTRNG
612
0151 F812 FF 06                      FDB   LRA
613
0152                         *
614
0153                                 IFD ADSOPT
615
0154 F814 FE 47                      FDB PCHK  CHECK FOR PRINTER INPUT
616
0155 F816 FE 09                      FDB PINIZ INITIATE PRINTER
617
0156 F818 FE 33                      FDB POUTCH OUTPUT CH. TO PRINTER
618
0157 F81A FC AB                      FDB VINIZ
619
0158 F81C FC C0                      FDB VOUTCH
620
0159 F81E FC 98                      FDB ACINIZ
621
0160 F820 FC 85                      FDB AOUTCH
622
0161                                 ENDIF ADSOPT
623
0162                         *
624
0163                         * MONITOR
625
0164                         *
626
0165                         * VECTOR ADDRESS STRING IS.....
627
0166                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
628
0167                         *
629
0168 F822 8E FE 81           MONITOR LDX   #RAMVEC POINT TO VECTOR ADDR. STRING
630
0169 F825 10 8E DF C0                LDY   #STACK  POINT TO RAM VECTOR LOCATION
631
0170 F829 C6 10                      LDB   #$10    BYTES TO MOVE = 16
632
0171 F82B A6 80              LOOPA   LDA   ,X+     GET VECTOR BYTE
633
0172 F82D A7 A0                      STA   ,Y+     PUT VECTORS IN RAM / $DFC0-$DFCF
634
0173 F82F 5A                         DECB          SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
635
0174 F830 26 F9                      BNE   LOOPA   CONTINUE UNTIL ALL VECTORS MOVED
636
0175                         *
637
0176                         * CONTENTS     FROM         TO      FUNCTION
638
0177                         *  $F8A1       $FE40      $DFC0     USER-V
639
0178                         *  $F8A1       $FE42      $DFC2     SWI3-V
640
0179                         *  $F8A1       $FE44      $DFC4     SWI2-V
641
0180                         *  $F8A1       $FE46      $DFC6     FIRQ-V
642
0181                         *  $F8A1       $FE48      $DFC8     IRQ-V
643
0182                         *  $FAB0       $FE4A      $DFCA     SWI-V
644
0183                         *  $FFFF       $FE4C      $DFCC     SVC-VO
645
0184                         *  $FFFF       $FE4E      $DFCE     SVC-VL
646
0185                         *
647
0186 F832 8E E4 00                   LDX  #ACIAS
648
0187 F835 BF DF D0                   STX  CPORT    STORE ADDR. IN RAM
649
0188 F838 17 01 42                   LBSR XBKPNT   CLEAR OUTSTANDING BREAKPOINTS
650
0189 F83B C6 0C                      LDB  #12      CLEAR 12 BYTES ON STACK
651
0190 F83D 6F E2              CLRSTK  CLR  ,-S
652
0191 F83F 5A                         DECB
653
0192 F840 26 FB                      BNE  CLRSTK
654
0193 F842 30 8C DD                   LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY
655
0194 F845 AF 6A                      STX  10,S    ON STACK
656
0195 F847 86 D0                      LDA  #$D0    PRESET CONDITION CODES ON STACK
657
0196 F849 A7 E4                      STA  ,S
658
0197 F84B 1F 43                      TFR  S,U
659
0198 F84D 17 04 46                   LBSR IOINIZ  INITIALIZE CONTROL PORT
660
0199 F850 8E FE 91                   LDX  #MSG1   POINT TO MONITOR MESSAGE
661
0200 F853 17 03 02                   LBSR PDATA   PRINT MSG
662
0201                         *
663
0202                                 IFD DATOPT
664
0203                                 LDX  #LRARAM POINT TO LRA RAM STORAGE AREA
665
0204                                 CLRA START   TOTAL AT ZERO
666
0205                                 LDB  #13     TOTAL UP ALL ACTIVE RAM MEMORY
667
0206                         FNDREL  TST  B,X     TEST FOR RAM AT NEXT LOC.
668
0207                                 BEQ  RELPAS  IF NO RAM GO TO NEXT LOC.
669
0208                                 ADDA #4      ELSE ADD 4K TO TOTAL
670
0209                                 DAA          ADJ. TOTAL FOR DECIMAL
671
0210                         RELPAS  DECB         SUB. 1 FROM LOCS. TO TEST
672
0211                                 BPL  FNDREL  PRINT TOTAL OF RAM
673
0212                                 LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
674
0213                                 LDX  #MSG2   POINT TO MSG 'K' CR/LF + 3 NULS
675
0214                                 LBSR PDATA   PRINT MSG
676
0215                                 ENDIF DATOPT
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 F856 8E FE BA           NEXTCMD LDX  #MSG3   POINT TO MSG ">"
687
0224 F859 17 02 87                   LBSR PSTRNG  PRINT MSG
688
0225 F85C 17 04 07                   LBSR INCH    GET ONE CHAR. FROM TERMINAL
689
0226 F85F 84 7F                      ANDA #$7F    STRIP PARITY FROM CHAR.
690
0227 F861 81 0D                      CMPA #$0D    IS IT CARRIAGE RETURN ?
691
0228 F863 27 F1                      BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR.
692
0229 F865 1F 89                      TFR  A,B     PUT CHAR. IN "B" ACCUM.
693
0230 F867 81 20                      CMPA #$20    IS IT CONTROL OR DATA CHAR ?
694
0231 F869 2C 09                      BGE  PRTCMD  IF CMD CHAR IS DATA, PRNT IT
695
0232 F86B 86 5E                      LDA  #'^     ELSE CNTRL CHAR CMD SO...
696
0233 F86D 17 04 13                   LBSR OUTCH   PRINT "^"
697
0234 F870 1F 98                      TFR  B,A     RECALL CNTRL CMD CHAR
698
0235 F872 8B 40                      ADDA #$40    CONVERT IT TO ASCII LETTER
699
0236 F874 17 04 0C           PRTCMD  LBSR OUTCH   PRNT CMD CHAR
700
0237 F877 17 04 07                   LBSR OUT1S   PRNT SPACE
701
0238 F87A C1 60                      CMPB #$60
702
0239 F87C 2F 02                      BLE  NXTCH0
703
0240 F87E C0 20                      SUBB #$20
704
0241                         *
705
0242                         ***** DO TABLE LOOKUP *****
706
0243                         *   FOR COMMAND FUNCTIONS
707
0244                         *
708
0245 F880 8E FE 4B           NXTCH0  LDX  #JMPTAB POINT TO JUMP TABLE
709
0246 F883 E1 80              NXTCHR  CMPB ,X+     DOES COMMAND MATCH TABLE ENTRY ?
710
0247 F885 27 0F                      BEQ  JMPCMD  BRANCH IF MATCH FOUND
711
0248 F887 30 02                      LEAX 2,X     POINT TO NEXT ENTRY IN TABLE
712
0249 F889 8C FE 81                   CMPX #TABEND REACHED END OF TABLE YET ?
713
0250 F88C 26 F5                      BNE  NXTCHR  IF NOT END, CHECK NEXT ENTRY
714
0251 F88E 8E FE BC                   LDX  #MSG4   POINT TO MSG "WHAT?"
715
0252 F891 17 02 C4                   LBSR PDATA   PRINT MSG
716
0253 F894 20 C0                      BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD
717
0254 F896 AD 94              JMPCMD  JSR  [,X]    JUMP TO COMMAND ROUTINE
718
0255 F898 20 BC                      BRA  NEXTCMD PROMPT FOR NEW COMMAND
719
0256                         *
720
0257                         * "G" GO OR CONTINUE
721
0258                         *
722
0259 F89A 1F 34              GO      TFR  U,S
723
0260 F89C 3B                 RTI     RTI
724
0261                         *
725
0262                         ***** "M" MEMORY EXAMINE AND CHANGE *****
726
0263                         *
727
0264 F89D 17 03 3F           MEMCHG  LBSR IN1ADR  INPUT ADDRESS
728
0265 F8A0 29 2D                      BVS  CHRTN   IF NOT HEX, RETURN
729
0266 F8A2 1F 12                      TFR  X,Y     SAVE ADDR IN "Y"
730
0267 F8A4 8E FE C2           MEMC2   LDX  #MSG5   POINT TO MSG " - "
731
0268 F8A7 17 02 39                   LBSR PSTRNG  PRINT MSG
732
0269 F8AA 1F 21                      TFR  Y,X     FETCH ADDRESS
733
0270 F8AC 17 03 79                   LBSR OUT4H   PRINT ADDR IN HEX
734
0271 F8AF 17 03 CF                   LBSR OUT1S   OUTPUT SPACE
735
0272 F8B2 A6 A4                      LDA  ,Y      GET CONTENTS OF CURRENT ADDR.
736
0273 F8B4 17 03 79                   LBSR OUT2H   OUTPUT CONTENTS IN ASCII
737
0274 F8B7 17 03 C7                   LBSR OUT1S   OUTPUT SPACE
738
0275 F8BA 17 03 32                   LBSR BYTE    LOOP WAITING FOR OPERATOR INPUT
739
0276 F8BD 28 11                      BVC  CHANGE  IF VALID HEX GO CHANGE MEM. LOC.
740
0277 F8BF 81 08                      CMPA #8      IS IT A BACKSPACE (CNTRL H)?
741
0278 F8C1 27 E1                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
742
0279 F8C3 81 18                      CMPA #$18    IS IT A CANCEL (CNTRL X)?
743
0280 F8C5 27 DD                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
744
0281 F8C7 81 5E                      CMPA #'^     IS IT AN UP ARROW?
745
0282 F8C9 27 17                      BEQ  BACK    DISPLAY PREVIOUS BYTE
746
0283 F8CB 81 0D                      CMPA #$D     IS IT A CR?
747
0284 F8CD 26 0F                      BNE  FORWRD  DISPLAY NEXT BYTE
748
0285 F8CF 39                 CHRTN   RTS          EXIT ROUTINE
749
0286                         *
750
0287                         *
751
0288 F8D0 A7 A4              CHANGE  STA  ,Y      CHANGE BYTE IN MEMORY
752
0289 F8D2 A1 A4                      CMPA ,Y      DID MEMORY BYTE CHANGE?
753
0290 F8D4 27 08                      BEQ  FORWRD  $F972
754
0291 F8D6 17 03 A8                   LBSR OUT1S   OUTPUT SPACE
755
0292 F8D9 86 3F                      LDA  #'?     LOAD QUESTION MARK
756
0293 F8DB 17 03 A5                   LBSR OUTCH   PRINT IT
757
0294 F8DE 31 21              FORWRD  LEAY 1,Y     POINT TO NEXT HIGHER MEM LOCATION
758
0295 F8E0 20 C2                      BRA  MEMC2   PRINT LOCATION & CONTENTS
759
0296 F8E2 31 3F              BACK    LEAY -1,Y    POINT TO LAST MEM LOCATION
760
0297 F8E4 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 F8E6 17 02 76           DISSTK  LBSR PRTSP   PRINT CURRENT STACK POINTER
767
0304 F8E9 1F 32                      TFR  U,Y
768
0305 F8EB 8E DF C0                   LDX  #STACK  LOAD INTERNAL STACK AS UPPER LIMIT
769
0306 F8EE 30 1F                      LEAX -1,X    POINT TO CURRENT STACK
770
0307 F8F0 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 F8F2 17 02 DF           MEMDUMP LBSR IN2ADR  INPUT ADDRESS BOUNDRIES
778
0315 F8F5 29 06                      BVS  EDPRTN  NEW COMMAND IF ILLEGAL HEX
779
0316 F8F7 34 20              MDUMP1  PSHS Y       COMPARE LOWER TO UPPER BOUNDS
780
0317 F8F9 AC E1                      CMPX ,S++    LOWER BOUNDS > UPPER BOUNDS?
781
0318 F8FB 24 01                      BCC  AJDUMP  IF NOT, DUMP HEX AND ASCII
782
0319 F8FD 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 F8FE 1F 10              AJDUMP  TFR  X,D     GET UPPER ADDR IN D-REG
797
0334 F900 C3 00 10                   ADDD #$10    ADD 16 TO UPPER ADDRESS
798
0335 F903 C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
799
0336 F905 34 06                      PSHS A,B     SAVE ON STACK AS UPPER DUMP LIMIT
800
0337 F907 1F 20                      TFR  Y,D     $F9A5 GET LOWER ADDRESS IN D-REG
801
0338 F909 C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
802
0339 F90B 1F 01                      TFR  D,X     PUT IN X-REG AS LOWER DUMP LIMIT
803
0340 F90D AC E4              NXTLIN  CMPX ,S      COMPARE LOWER TO UPPER LIMIT
804
0341 F90F 27 05                      BEQ  SKPDMP  IF EQUAL SKIP HEX-ASCII DUMP
805
0342 F911 17 03 61                   LBSR INCHEK  CHECK FOR INPUT FROM KEYBOARD
806
0343 F914 27 03                      BEQ  EDUMP
807
0344 F916 32 62              SKPDMP  LEAS 2,S     READJUST STACK IF NOT DUMPING
808
0345 F918 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 F919 34 10              EDUMP   PSHS X       PUSH LOWER ADDR LIMIT ON STACK
814
0351 F91B 8E FE C2                   LDX  #MSG5   POINT TO MSG " - "
815
0352 F91E 17 01 C2                   LBSR PSTRNG  PRINT MSG
816
0353 F921 AE E4                      LDX  ,S      LOAD LOWER ADDR FROM TOP OF STACK
817
0354 F923 17 03 02                   LBSR OUT4H   PRINT THE ADDRESS
818
0355 F926 17 03 56                   LBSR OUT2S   2 SPACES
819
0356 F929 C6 10                      LDB  #$10    LOAD COUNT OF 16 BYTES TO DUMP
820
0357 F92B A6 80              ELOOP   LDA  ,X+     GET FROM MEMORY HEX BYTE TO PRINT
821
0358 F92D 17 03 00                   LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
822
0359 F930 17 03 4E                   LBSR OUT1S   OUTPUT SPACE
823
0360 F933 5A                         DECB         $F9D1 DECREMENT BYTE COUNT
824
0361 F934 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 F936 17 03 46                   LBSR OUT2S   2 SPACES
830
0367 F939 AE E1                      LDX  ,S++    GET LOW LIMIT FRM STACK - ADJ STACK
831
0368 F93B C6 10                      LDB  #$10    SET ASCII CHAR TO PRINT = 16
832
0369 F93D A6 80              EDPASC  LDA  ,X+     GET CHARACTER FROM MEMORY
833
0370 F93F 81 20                      CMPA #$20    IF LESS THAN $20, NON-PRINTABLE?
834
0371 F941 25 04                      BCS  PERIOD  IF SO, PRINT PERIOD INSTEAD
835
0372 F943 81 7E                      CMPA #$7E    IS IT VALID ASCII?
836
0373 F945 23 02                      BLS  PRASC   IF SO PRINT IT
837
0374 F947 86 2E              PERIOD  LDA  #'.     LOAD A PERIOD (.)
838
0375 F949 17 03 37           PRASC   LBSR OUTCH   PRINT ASCII CHARACTER
839
0376 F94C 5A                         DECB         DECREMENT COUNT
840
0377 F94D 26 EE                      BNE  EDPASC
841
0378 F94F 20 BC                      BRA  NXTLIN
842
0379                         *
843
0380                         ***** "B" SET BREAKPOINT *****
844
0381                         *
845
0382 F951 17 02 8B           BRKPNT  LBSR IN1ADR  GET BREAKPOINT ADDRESS
846
0383 F954 29 1E                      BVS  EXITBP  EXIT IF INVALID HEX ADDR.
847
0384 F956 8C DF C0                   CMPX #STACK  ADDRESS ILLEGAL IF >=$DFC0
848
0385 F959 24 1A                      BCC  BPERR   IF ERROR PRINT (?), EXIT
849
0386 F95B 34 10                      PSHS X       $FA82 PUSH BP ADDRESS ON STACK
850
0387 F95D 8E FF FF                   LDX  #$FFFF  LOAD DUMMY ADDR TO TEST BP TABLE
851
0388 F960 8D 55                      BSR BPTEST   TEST BP TABLE FOR FREE SPACE
852
0389 F962 35 10                      PULS X       POP BP ADDRESS FROM STACK
853
0390 F964 27 0F                      BEQ  BPERR   (Z) SET, OUT OF BP TABLE SPACE
854
0391 F966 A6 84                      LDA  ,X      GET DATA AT BREAKPOINT ADDRESS
855
0392 F968 81 3F                      CMPA #$3F    IS IT A SWI?
856
0393 F96A 27 09                      BEQ  BPERR   IF SWI ALREADY, INDICATE ERROR
857
0394 F96C A7 A0                      STA  ,Y+     SAVE DATA BYTE IN BP TABLE
858
0395 F96E AF A4                      STX  ,Y      SAVE BP ADDRESS IN BP TABLE
859
0396 F970 86 3F                      LDA  #$3F    LOAD A SWI ($3F)
860
0397 F972 A7 84                      STA  ,X      SAVE SWI AT BREAKPOINT ADDRESS
861
0398 F974 39                 EXITBP  RTS ;
862
0399                         *
863
0400                         *  INDICATE ERROR SETTING BREAKPOINT
864
0401                         *
865
0402 F975 17 03 09           BPERR   LBSR OUT1S   OUTPUT SPACE
866
0403 F978 86 3F                      LDA  #'?     LOAD (?), INDICATE BREAKPOINT ERROR
867
0404 F97A 16 03 06                   LBRA OUTCH   PRINT "?"
868
0405                         *
869
0406                         *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
870
0407                         *
871
0408 F97D 10 8E DF D3        XBKPNT  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
872
0409 F981 C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
873
0410 F983 8D 18              XBPLP   BSR  RPLSWI  REMOVE USED ENTRY IN BP TABLE
874
0411 F985 5A                         DECB  $FAAC  DECREMENT BP COUNTER
875
0412 F986 26 FB                      BNE  XBPLP   END OF BREAKPOINT TABLE?
876
0413 F988 39                         RTS
877
0414                         *
878
0415                         ***** SWI ENTRY POINT *****
879
0416                         *
880
0417 F989 1F 43              SWIE    TFR  S,U     TRANSFER STACK TO USER POINTER
881
0418 F98B AE 4A                      LDX  10,U    LOAD PC FROM STACK INTO X-REG
882
0419 F98D 30 1F                      LEAX -1,X    ADJUST ADDR DOWN 1 BYTE.
883
0420 F98F 8D 26                      BSR  BPTEST  FIND BREAKPOINT IN BP TABLE
884
0421 F991 27 04                      BEQ  REGPR   IF FOUND, REPLACE DATA AT BP ADDR
885
0422 F993 AF 4A                      STX  10,U    SAVE BREAKPOINT ADDR IN STACK
886
0423 F995 8D 06                      BSR  RPLSWI  GO REPLACE SWI WITH ORIGINAL DATA
887
0424 F997 17 02 1C           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 F99A 16 FE B9                   LBRA NEXTCMD GET NEXT COMMAND
896
0432                         *
897
0433 F99D AE 21              RPLSWI  LDX  1,Y     LOAD BP ADDRESS FROM BP TABLE
898
0434 F99F 8C DF C0                   CMPX #STACK  COMPARE TO TOP AVAILABLE USER MEMORY
899
0435 F9A2 24 0A                      BCC  FFSTBL  GO RESET TABLE ENTRY TO $FF'S
900
0436 F9A4 A6 84                      LDA  ,X      GET DATA FROM BP ADDRESS
901
0437 F9A6 81 3F                      CMPA #$3F    IS IT SWI?
902
0438 F9A8 26 04                      BNE  FFSTBL  IF NOT, RESET TABLE ENTRY TO $FF'S
903
0439 F9AA A6 A4                      LDA  ,Y      GET ORIGINAL DATA FROM BP TABLE
904
0440 F9AC A7 84                      STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS
905
0441 F9AE 86 FF              FFSTBL  LDA  #$FF    LOAD $FF IN A-ACC
906
0442 F9B0 A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE DATA TO $FF'S
907
0443 F9B2 A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE ADDR TO $FF'S
908
0444 F9B4 A7 A0                      STA  ,Y+
909
0445 F9B6 39                         RTS
910
0446                         *
911
0447                         ** SEARCH BREAKPOINT TABLE FOR MATCH **
912
0448                         *
913
0449 F9B7 10 8E DF D3        BPTEST  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
914
0450 F9BB C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
915
0451 F9BD A6 A0              FNDBP   LDA  ,Y+     LOAD DATA BYTE
916
0452 F9BF AC A1                      CMPX ,Y++    COMPARE ADDRESS, IS IT SAME?
917
0453 F9C1 27 04                      BEQ  BPADJ   IF SO, ADJUST POINTER FOR TABLE ENTRY
918
0454 F9C3 5A                         DECB         IF NOT, DECREMENT BREAKPOINT COUNTER
919
0455 F9C4 26 F7                      BNE  FNDBP   AND LOOK FOR NEXT POSSIBLE MATCH
920
0456 F9C6 39                         RTS ;
921
0457                         *
922
0458                         *
923
0459 F9C7 31 3D              BPADJ   LEAY -3,Y    MOVE POINTER TO BEGIN OF BP ENTRY
924
0460 F9C9 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 F9CA 7D E0 18           MINBOOT TST  CMDFDC
1024
0559 F9CD 7F E0 14                   CLR  DRVFDC
1025
0560 F9D0 8E 00 00                   LDX  #$0000
1026
0561 F9D3 30 01              LOOP    LEAX $01,X
1027
0562 F9D5 8C 00 00                   CMPX #$0000
1028
0563 F9D8 26 F9                      BNE  LOOP
1029
0564 F9DA 86 0F                      LDA  #$0F
1030
0565 F9DC B7 E0 18                   STA  CMDFDC
1031
0566 F9DF 8D 37                      BSR  DELAY
1032
0567 F9E1 F6 E0 18           LOOP1   LDB  CMDFDC
1033
0568 F9E4 C5 01                      BITB #$01
1034
0569 F9E6 26 F9                      BNE  LOOP1
1035
0570 F9E8 86 01                      LDA  #$01
1036
0571 F9EA B7 E0 1A                   STA  SECFDC
1037
0572 F9ED 8D 29                      BSR  DELAY
1038
0573 F9EF 86 8C                      LDA  #$8C
1039
0574 F9F1 B7 E0 18                   STA  CMDFDC
1040
0575 F9F4 8D 22                      BSR  DELAY
1041
0576 F9F6 8E C0 00                   LDX  #$C000
1042
0577 F9F9 20 09                      BRA  LOOP3
1043
0578 F9FB C5 02              LOOP2   BITB #$02
1044
0579 F9FD 27 05                      BEQ  LOOP3
1045
0580 F9FF B6 E0 1B                   LDA  DATFDC
1046
0581 FA02 A7 80                      STA ,X+
1047
0582 FA04 F6 E0 18           LOOP3   LDB  CMDFDC
1048
0583 FA07 C5 01                      BITB #$01
1049
0584 FA09 26 F0                      BNE  LOOP2
1050
0585 FA0B C5 2C                      BITB #$2C
1051
0586 FA0D 27 01                      BEQ  LOOP4
1052
0587 FA0F 39                         RTS
1053
0588                         *
1054
0589 FA10 8E C0 00           LOOP4   LDX  #$C000
1055
0590 FA13 AF 4A                      STX  $0A,U
1056
0591 FA15 1F 34                      TFR  U,S
1057
0592 FA17 3B                         RTI
1058
0593                         *
1059
0594 FA18 C6 04              DELAY   LDB  #$04
1060
0595 FA1A 5A                 LOOP5   DECB
1061
0596 FA1B 26 FD                      BNE  LOOP5
1062
0597 FA1D 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                         DBOOT   LDA  #$DE
1070
0605                                 STA  DRVREG
1071
0606                                 LDA  #$FF
1072
0607                                 STA  PRIREG     $FAF8
1073
0608                                 STA  CCREG
1074
0609                                 STA  AAAREG
1075
0610                                 STA  BBBREG
1076
0611                                 TST  CCREG
1077
0612                                 LDA  #$D8
1078
0613                                 STA  COMREG
1079
0614                                 LBSR DLY
1080
0615                         DBOOT0  LDA  COMREG
1081
0616                                 BMI  DBOOT0
1082
0617                                 LDA  #$09
1083
0618                                 STA  COMREG
1084
0619                                 LBSR DLY
1085
0620                         *
1086
0621                         DISKWT  LDA  COMREG FETCH DRIVE STATUS
1087
0622                                 BITA #1 TEST BUSY BIT
1088
0623                                 BNE  DISKWT LOOP UNTIL NOT BUSY
1089
0624                         *
1090
0625                                 BITA #$10
1091
0626                                 BNE  DBOOT
1092
0627                         *
1093
0628                                 LDX  #$C000 LOGICAL ADDR. = $C000
1094
0629                                 BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
1095
0630                                 ORA  #$10
1096
0631                                 STA  CCCREG
1097
0632                                 TFR  X,D
1098
0633                                 COMA  ;
1099
0634                                 COMB  ;
1100
0635                                 STD  ADDREG
1101
0636                                 LDX  #$FEFF LOAD DMA BYTE COUNT = $100
1102
0637                                 STX  CNTREG STORE IN COUNT REGISTER
1103
0638                                 LDA  #$FF LOAD THE CHANNEL REGISTER
1104
0639                                 STA  CCREG
1105
0640                                 LDA  #$FE SET CHANNEL 0
1106
0641                                 STA  PRIREG
1107
0642                                 LDA  #1 SET SECTOR TO "1"
1108
0643                                 STA  SECREG ISSUE COMMAND
1109
0644                                 LDA  #$8C SET SINGLE SECTOR READ
1110
0645                                 STA  COMREG ISSUE COMMAND
1111
0646                                 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                                 CLRB  ;
1121
0656                         DBOOT1  PSHS B     $FB55
1122
0657                                 CLRB  ;
1123
0658                         DBOOT2  TST  CCREG
1124
0659                                 BPL  DBOOT3
1125
0660                                 DECB  ;
1126
0661                                 BNE  DBOOT2
1127
0662                                 PULS B
1128
0663                                 DECB
1129
0664                                 BNE  DBOOT1
1130
0665                                 BRA  DBOOT
1131
0666                         DBOOT3  PULS B
1132
0667                                 LDA  COMREG
1133
0668                                 BITA #$1C
1134
0669                                 BEQ  DBOOT4
1135
0670                                 RTS  ;
1136
0671                         *
1137
0672                         *
1138
0673                         DBOOT4  LDB  #$DE
1139
0674                                 STB  DRVREG
1140
0675                                 LDX  #$C000
1141
0676                                 STX  10,U
1142
0677                                 TFR  U,S    $FB7B
1143
0678                                 RTI  ;
1144
0679                                 ENDIF DMAFOPT
1145
0679                                 ENDIF DMAFOPT
1146
0680                         *
1147
0681                                 IFD CF8OPT
1148
0682                         *
1149
0683                         * COMPACT FLASH BOOT
1150
0684                         *
1151
0685                         CFBOOT  BSR  WAITRDY
1152
0686                                 LDA  #HEADLBA
1153
0687                                 STA  CF_HEAD
1154
0688                                 BSR  WAITRDY
1155
0689                                 LDA  #FEAT8BIT
1156
0690                                 STA  CF_FEATURE
1157
0691                                 LDA  #CMDFEATURE
1158
0692                                 STA  CF_COMAND
1159
0693                                 BSR  WAITRDY
1160
0694                         *
1161
0695                         * READ SECTORS FROM CF
1162
0696                         *
1163
0697                         CFREAD  LDA  #$01
1164
0698                                 STA  CF_SECCNT
1165
0699                                 CLRA
1166
0700                                 STA  CF_SECNUM
1167
0701                                 STA  CF_CYLLO
1168
0702                                 STA  CF_CYLHI
1169
0703                         *
1170
0704                                 LDA  #CMDREAD ; IDE READ MULTIPLE
1171
0705                                 STA  CF_COMAND
1172
0706                                 BSR  WAITRDY
1173
0707                                 LDX  #$C000
1174
0708                         *
1175
0709                         * READ LOOP
1176
0710                         *
1177
0711                         RDLOOP  BSR  WAITDRQ
1178
0712                                 LDA  CF_DATA
1179
0713                                 STA  ,X+
1180
0714                                 CMPX #$C200
1181
0715                                 BNE  RDLOOP
1182
0716                         *
1183
0717                                 LDX  #$C000
1184
0718                                 STX  $0A,U
1185
0719                                 TFR  U,S
1186
0720                                 RTI
1187
0721                         *
1188
0722                         * WAIT UNTIL READY
1189
0723                         *
1190
0724                         WAITRDY LDA  CF_STATUS
1191
0725                                 BITA #BUSY
1192
0726                                 BNE  WAITRDY
1193
0727                                 LDA  CF_STATUS
1194
0728                                 BITA #DRDY
1195
0729                                 BEQ  WAITRDY
1196
0730                                 RTS
1197
0731                         *
1198
0732                         * WAIT FOR DATA REQUEST
1199
0733                         *
1200
0734                         WAITDRQ LDA  CF_STATUS
1201
0735                                 BITA #DRQ
1202
0736                                 BEQ  WAITDRQ
1203
0737                                 RTS
1204
0738                                 ENDIF CF8OPT
1205
0738                                 ENDIF CF8OPT
1206
0739                         *
1207
0740                                 IFD IDEOPT
1208
0741                         *
1209
0742                         * XESS 16 BIT IDE BOOT
1210
0743                         *
1211
0744                         IDEBOOT LDD  #AUXRESET
1212
0745                                 STD  CF_AUX
1213
0746                                 LDD #AUXRSTREL
1214
0747                                 STD CF_AUX
1215
0748                                 LDD  #HEADLBA
1216
0749                                 STD  CF_HEAD
1217
0750                                 BSR  WAITRDY
1218
0751                         *
1219
0752                         * READ SECTORS FROM CF
1220
0753                         *
1221
0754                                 LDD  #$01
1222
0755                                 STD  CF_SECCNT
1223
0756                                 CLRB
1224
0757                                 STD  CF_SECNUM
1225
0758                                 STD  CF_CYLLO
1226
0759                                 STD  CF_CYLHI
1227
0760                         *
1228
0761                                 LDB  #CMDREAD ; IDE READ MULTIPLE
1229
0762                                 STD  CF_COMAND
1230
0763                                 BSR  WAITRDY
1231
0764                                 LDX  #$C000
1232
0765                         *
1233
0766                         * READ LOOP
1234
0767                         *
1235
0768                         RDLOOP  BSR  WAITDRQ
1236
0769                                 LDD  CF_DATA
1237
0770                                 STB  ,X+
1238
0771                                 CMPX #$C100
1239
0772                                 BNE  RDLOOP
1240
0773                         *
1241
0774                                 LDX  #$C000
1242
0775                                 STX  $0A,U
1243
0776                                 TFR  U,S
1244
0777                                 RTI
1245
0778                         *
1246
0779                         * WAIT UNTIL READY
1247
0780                         *
1248
0781                         WAITRDY LDD  CF_STATUS
1249
0782                                 BITB #BUSY
1250
0783                                 BNE  WAITRDY
1251
0784                                 LDD  CF_STATUS
1252
0785                                 BITB #DRDY
1253
0786                                 BEQ  WAITRDY
1254
0787                                 RTS
1255
0788                         *
1256
0789                         * WAIT FOR DATA REQUEST
1257
0790                         *
1258
0791                         WAITDRQ LDD  CF_STATUS
1259
0792                                 BITB #DRQ
1260
0793                                 BEQ  WAITDRQ
1261
0794                                 RTS
1262
0795                                 ENDIF IDEOPT
1263
0795                                 ENDIF IDEOPT
1264
0796                         *
1265
0797                                 IFD RTCOPT
1266
0798                         *
1267
0799                         * CLOCK INTER FACE UTILITY
1268
0800                         *
1269
0801                         * TIME   
1270
0802                         * If no argument is specified, the current time
1271
0803                         * will be displayed.
1272
0804                         *
1273
0805                         * READ A REGISTER FROM THE COUNTER.
1274
0806                         * The X Index rgister points to the register
1275
0807                         * to be read. The Status Register is checked
1276
0808                         * before and after the register is read before
1277
0809                         * returning a value in accumulator A
1278
0810                         *
1279
0811                         RDCLK  TST CLKSTA
1280
0812                                BNE RDCLK
1281
0813                         RDCLK1 LDA 0,X
1282
0814                                TST CLKSTA
1283
0815                                BNE RDCLK1
1284
0816                                RTS
1285
0817                         *
1286
0818                         * MAIN PROGRAM:
1287
0819                         *
1288
0820                         TIMSET LDX #COUNTR POINT TO TIMER
1289
0821                               LBSR BYTE READ HOURS
1290
0822                               BVS  SHOWTM NO ARG, DISP TIME
1291
0823                               STA HOUR,X
1292
0824                               LBSR OUT1S
1293
0825                               LBSR BYTE READ MINUITES
1294
0826                               BVS  SHOWTM
1295
0827                               STA MINUIT,X
1296
0828                               LBSR OUT1S
1297
0829                               LBSR BYTE SECONDS.
1298
0830                               BVS SHOWTM
1299
0831                               STA SECOND,X
1300
0832                         *
1301
0833                         * DISPLAY CURRENT TIME
1302
0834                         *
1303
0835                         SHOWTM LBSR PCRLF
1304
0836                                LDX #COUNTR+HOUR
1305
0837                                LDB #3
1306
0838                         SHOWLP BSR RDCLK
1307
0839                                LBSR OUT2H
1308
0840                                LDA #':
1309
0841                                LBSR OUTCH
1310
0842                                LEAX -1,X
1311
0843                                DECB
1312
0844                                BNE SHOWLP
1313
0845                                RTS
1314
0846                         *
1315
0847                         * INITIATE CLOCK.
1316
0848                         * MASK INTERRUPTS.
1317
0849                         *
1318
0850                         CLKINZ CLR CINTCR  MASK ALL INTERRUPTS
1319
0851                                TST CINTSR  CLEAR ANY INTERRUPTS
1320
0852                                RTS
1321
0853                                ENDIF RTCOPT
1322
0853                                ENDIF RTCOPT
1323
0854                                IFD DATOPT
1324
0855                         *
1325
0856                         ***** LRA LOAD REAL ADDRESS *****
1326
0857                         *
1327
0858                         * THE FOLLOWING CODE LOADS THE 20-BIT
1328
0859                         * PHYSICAL ADDRESS OF A MEMORY BYTE
1329
0860                         * INTO THE "A" AND "X" REGISTERS. THIS
1330
0861                         * ROUTINE IS ENTERED WITH THE LOGICAL
1331
0862                         * ADDRESS OF A MEMORY BYTE IN THE "IX"
1332
0863                         * REGISTER. EXIT IS MADE WITH THE HIGH-
1333
0864                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL
1334
0865                         * ADDRESS IN THE "A" REGISTER, AND THE
1335
0866                         * LOW-ORDER 16-BITS OF THE 20-BIT
1336
0867                         * PHYSICAL ADDRESS IN THE "IX" REGISTER.
1337
0868                         * ALL OTHER REGISTERS ARE PRESERVED.
1338
0869                         * THIS ROUTINE IS REQUIRED SINCE THE
1339
0870                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST
1340
0871                         * PRESENT PHYSICAL ADDRESSES ON THE
1341
0872                         * SYSTEM BUS.
1342
0873                         *
1343
0874                         LRA     PSHS A,B,X,Y PUSH REGISTERS ON STACK
1344
0875                                 LDA  2,S     GET MSB LOGICAL ADDR FRM X REG ON STACK
1345
0876                                 LSRA         ;
1346
0877                                 LSRA         ADJ FOR INDEXED INTO
1347
0878                                 LSRA         CORRESPONDING LOCATION
1348
0879                                 LSRA         IN LRA TABLE
1349
0880                                 LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS
1350
0881                                 LDB  A,Y     GET PHYSICAL ADDR. DATA FROM LRA TABLE
1351
0882                                 LSRB         ADJ. REAL ADDR. TO REFLECT EXTENDED
1352
0883                                 LSRB         PHYSICAL ADDRESS.
1353
0884                                 LSRB         EXTENDED MS 4-BITS ARE RETURNED
1354
0885                                 LSRB         IN THE "A" ACCUMULATOR
1355
0886                                 STB  ,S      MS 4 BITS IN A ACCUM. STORED ON STACK
1356
0887                                 LDB  A,Y     LOAD REAL ADDRESS DATA FROM LRA TABLE
1357
0888                                 COMB         COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
1358
0889                                 ASLB         ADJ DATA FOR RELOCATION IN X REG
1359
0890                                 ASLB         ;
1360
0891                                 ASLB         $FB97
1361
0892                                 ASLB         ;
1362
0893                                 LDA  2,S     GET MS BYTE OF LOGICAL ADDR.
1363
0894                                 ANDA #$0F    MASK MS NIBBLE OF LOGICAL ADDRESS
1364
0895                                 STA  2,S     SAVE IT IN X REG ON STACK
1365
0896                                 ORB  2,S     SET MS BYTE IN X REG TO ADJ PHY ADDR.
1366
0897                         *
1367
0898                         * PLUS LS NIBBLE OF LOGICAL ADDRESS
1368
0899                                 STB  2,S     SAVE AS LS 16 BITS OF PHY ADDR IN X REG
1369
0900                         * ON STACK
1370
0901                                 PULS A,B,X,Y,PC POP REGS. FROM STACK
1371
0902                                 ENDIF DATOPT
1372
0902                                 ENDIF DATOPT
1373
0903                         *
1374
0904                         * DELAY LOOP
1375
0905                         *
1376
0906 FA1E 34 04              DLY     PSHS B       SAVE CONTENTS OF "B"
1377
0907 FA20 C6 20                      LDB  #$20    GET LOOP DELAY VALUE
1378
0908 FA22 5A                 SUB1    DECB         SUBTRACT ONE FROM VALUE
1379
0909 FA23 26 FD                      BNE  SUB1    LOOP UNTIL ZERO
1380
0910 FA25 35 84                      PULS B,PC    RESTORE CONTENTS OF "B"
1381
0911                         * RTS  ;
1382
0912                         *
1383
0913                         ***** "L" LOAD MIKBUG TAPE *****
1384
0914                         *
1385
0915 FA27 BD FC 98           LOAD    JSR  ACINIZ
1386
0916 FA2A 86 11                      LDA  #$11   LOAD 'DC1' CASS. READ ON CODE
1387
0917 FA2C 17 02 54                   LBSR OUTCH  OUTPUT IT TO TERMINAL PORT
1388
0918 FA2F 7F DF D2                   CLR  ECHO   TURN OFF ECHO FLAG
1389
0919 FA32 17 02 26           LOAD1   LBSR ECHON  INPUT 8 BIT BYTE WITH NO ECHO
1390
0920 FA35 81 53              LOAD2   CMPA #'S    IS IT AN "S", START CHARACTER ?
1391
0921 FA37 26 F9                      BNE  LOAD1  IF NOT, DISCARD AND GET NEXT CHAR.
1392
0922 FA39 17 02 1F                   LBSR ECHON
1393
0923 FA3C 81 39                      CMPA #'9    IS IT A "9" , END OF FILE CHAR ?
1394
0924 FA3E 27 3D                      BEQ  LOAD21 IF SO, EXIT LOAD
1395
0925 FA40 81 31                      CMPA #'1    IS IT A "1" , FILE LOAD CHAR ?
1396
0926 FA42 26 F1                      BNE  LOAD2  IF NOT, LOOK FOR START CHAR.
1397
0927 FA44 17 01 A8                   LBSR BYTE   INPUT BYTE COUNT
1398
0928 FA47 34 02                      PSHS A      PUSH COUNT ON STACK
1399
0929 FA49 29 26                      BVS  LODERR (V) C-CODE SET, ILLEGAL HEX
1400
0930 FA4B 17 01 91                   LBSR IN1ADR INPUT LOAD ADDRESS
1401
0931 FA4E 29 21                      BVS  LODERR (V) C-CODE SET, ADDR NOT HEX
1402
0932 FA50 34 10                      PSHS X      PUSH ADDR ON STACK
1403
0933 FA52 E6 E0                      LDB  ,S+    LOAD MSB OF ADDR AS CHECKSUM BYTE
1404
0934 FA54 EB E0                      ADDB ,S+    ADD LSB OF ADDR TO CHECKSUM
1405
0935 FA56 EB E4                      ADDB ,S     ADD BYTE COUNT BYTE TO CHECKSUM
1406
0936 FA58 6A E4                      DEC  ,S     $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
1407
0937 FA5A 6A E4                      DEC  ,S     ADDRESS BYTES.
1408
0938 FA5C 34 04              LOAD10  PSHS B      PUSH CHECKSUM ON STACK
1409
0939 FA5E 17 01 8E                   LBSR BYTE   INPUT DATA BYTE (2 HEX CHAR)
1410
0940 FA61 35 04                      PULS B      POP CHECKSUM FROM STACK
1411
0941 FA63 29 0C                      BVS  LODERR (V) SET, DATA BYTE NOT HEX
1412
0942 FA65 34 02                      PSHS A      PUSH DATA BYTE ON STACK
1413
0943 FA67 EB E0                      ADDB ,S+    ADD DATA TO CHECKSUM, AUTO INC STACK
1414
0944 FA69 6A E4                      DEC  ,S     DECREMENT BYTE COUNT 1
1415
0945 FA6B 27 05                      BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM
1416
0946 FA6D A7 80                      STA  ,X+    SAVE DATA BYTE IN MEMORY
1417
0947 FA6F 20 EB                      BRA  LOAD10 GET NEXT DATA BYTE
1418
0948 FA71 5F                 LODERR  CLRB        ;ERROR CONDITION, ZERO CHECKSUM  ;
1419
0949 FA72 35 02              LOAD16  PULS A      ADJUST STACK (REMOVE BYTE COUNT)
1420
0950 FA74 C1 FF                      CMPB #$FF   CHECKSUM OK?
1421
0951 FA76 27 BA                      BEQ  LOAD1  IF SO, LOAD NEXT LINE
1422
0952 FA78 86 3F                      LDA  #'?    LOAD (?) ERROR INDICATOR
1423
0953 FA7A 17 02 06                   LBSR OUTCH  OUTPUT IT TO TERMINAL
1424
0954 FA7D 73 DF D2           LOAD21  COM  ECHO   TURN ECHO ON
1425
0955 FA80 86 13                      LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE
1426
0956 FA82 16 01 FE                   LBRA OUTCH  OUTPUT IT
1427
0957                         *
1428
0958                         ***** "P" PUNCH MIKBUG TAPE *****
1429
0959                         *
1430
0960 FA85 6F E2              PUNCH   CLR  ,-S CLEAR RESERVED BYTE ON STACK
1431
0961 FA87 17 01 4A                   LBSR IN2ADR GET BEGIN AND END ADDRESS
1432
0962 FA8A 34 30                      PSHS X,Y SAVE ADDRESSES ON STACK
1433
0963 FA8C 29 4D                      BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH
1434
0964 FA8E AC 62                      CMPX 2,S COMPARE BEGIN TO END ADDR
1435
0965 FA90 25 49                      BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH
1436
0966 FA92 30 01                      LEAX 1,X INCREMENT END ADDRESS
1437
0967 FA94 AF E4                      STX  ,S STORE END ADDR ON STACK
1438
0968 FA96 BD FC 98                   JSR  ACINIZ
1439
0969 FA99 86 12                      LDA  #$12 LOAD 'DC2' PUNCH ON CODE
1440
0970 FA9B 17 01 E5                   LBSR OUTCH OUTPUT IT TO TERMINAL
1441
0971 FA9E EC E4              PUNCH2  LDD  ,S LOAD END ADDR IN D-ACC
1442
0972 FAA0 A3 62                      SUBD 2,S SUBTRACT BEGIN FROM END
1443
0973 FAA2 27 06                      BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT
1444
0974 FAA4 10 83 00 20                CMPD #$20 LESS THAN 32 BYTES?
1445
0975 FAA8 23 02                      BLS  PUNCH4 PUNCH THAT MANY BYTES
1446
0976 FAAA C6 20              PUNCH3  LDB  #$20 LOAD BYTE COUNT OF 32.
1447
0977 FAAC E7 64              PUNCH4  STB  4,S STORE ON STACK AS BYTE COUNT
1448
0978 FAAE 8E FF 03                   LDX  #MSG20 POINT TO MSG "S1"
1449
0979 FAB1 17 00 2F                   LBSR PSTRNG PRINT MSG
1450
0980 FAB4 CB 03                      ADDB #3 ADD 3 BYTES TO BYTE COUNT
1451
0981 FAB6 1F 98                      TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH
1452
0982 FAB8 17 01 75                   LBSR OUT2H OUTPUT BYTE COUNT
1453
0983 FABB AE 62                      LDX  2,S LOAD BEGIN ADDRESS
1454
0984 FABD 17 01 68                   LBSR OUT4H PUNCH ADDRESS
1455
0985 FAC0 EB 62                      ADDB 2,S ADD ADDR MSB TO CHECKSUM
1456
0986 FAC2 EB 63                      ADDB 3,S ADD ADDR LSB TO CHECKSUM
1457
0987 FAC4 EB 84              PUNCHL  ADDB ,X ADD DATA BYTE TO CHECKSUM
1458
0988 FAC6 A6 80                      LDA  ,X+ LOAD DATA BYTE TO PUNCH
1459
0989 FAC8 17 01 65                   LBSR OUT2H OUTPUT DATA BYTE
1460
0990 FACB 6A 64                      DEC  4,S DECREMENT BYTE COUNT
1461
0991 FACD 26 F5                      BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE
1462
0992 FACF 53                         COMB  1's COMPLIMENT CHECKSUM BYTE
1463
0993 FAD0 1F 98                      TFR  B,A GET IT IN A-ACC TO PUNCH
1464
0994 FAD2 17 01 5B                   LBSR OUT2H OUTPUT CHECKSUM BYTE
1465
0995 FAD5 AF 62                      STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR
1466
0996 FAD7 AC E4                      CMPX ,S COMPARE IT TO END ADDR
1467
0997 FAD9 26 C3                      BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT.
1468
0998 FADB 86 14              PUNEXT  LDA  #$14 LOAD 'DC4' PUNCH OFF CODE
1469
0999 FADD 17 01 A3                   LBSR OUTCH OUTPUT IT
1470
1000 FAE0 32 65                      LEAS 5,S READJUST STACK POINTER
1471
1001 FAE2 39                         RTS  ;
1472
1002                         *
1473
1003                         * PRINT STRING PRECEEDED BY A CR & LF.
1474
1004                         *
1475
1005 FAE3 8D 02              PSTRNG BSR PCRLF PRINT CR/LF
1476
1006 FAE5 20 71                     BRA  PDATA  PRINT STRING POINTED TO BY IX
1477
1007                         *
1478
1008                         * PCRLF
1479
1009                         *
1480
1010 FAE7 34 10              PCRLF  PSHS X SAVE IX
1481
1011 FAE9 8E FE B4                  LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS
1482
1012 FAEC 17 00 69                  LBSR PDATA  PRINT MSG
1483
1013 FAEF 35 90                     PULS X,PC RESTORE IX & RETURN
1484
1014                         *
1485
1015                         * LONG BRANCHES TO COMMON ROUTINES
1486
1016                         *
1487
1017 FAF1 16 01 8D           JOUT1S  LBRA OUT1S
1488
1018 FAF4 16 00 F8           JBYTE   LBRA BYTE
1489
1019 FAF7 16 00 E5           JIN1ADR LBRA IN1ADR
1490
1020                         *
1491
1021                         * ALTER "PC" PROGRAM COUNTER
1492
1022                         *
1493
1023 FAFA 17 00 91           ALTRPC  LBSR  PRTPC   $FCF5 PRINT MSG " PC = "
1494
1024 FAFD 8D F2              ALTPC1  BSR  JOUT1S   OUTPUT SPACE
1495
1025 FAFF 8D F6                      BSR  JIN1ADR  GET NEW CONTENTS FOR "PC"
1496
1026 FB01 29 02                      BVS  ALTPCD  EXIT IF INVALID HEX
1497
1027 FB03 AF 4A                      STX  10,U    POKE IN NEW CONTENTS
1498
1028 FB05 39                 ALTPCD  RTS          ;
1499
1029                         *
1500
1030                         * ALTER "U" USER STACK POINTER
1501
1031                         *
1502
1032 FB06 8D 61              ALTRU   BSR  PRTUS   $FCCA PRINT MSG " US = "
1503
1033 FB08 8D E7                      BSR  JOUT1S   OUTPUT SPACE
1504
1034 FB0A 8D EB                      BSR  JIN1ADR
1505
1035 FB0C 29 02                      BVS  ALTUD
1506
1036 FB0E AF 48                      STX  8,U
1507
1037 FB10 39                 ALTUD   RTS ;
1508
1038                         *
1509
1039                         * ALTER "Y" INDEX REGISTER
1510
1040                         *
1511
1041 FB11 8D 72              ALTRY   BSR  PRTIY   PRINT MSG " IY = "
1512
1042 FB13 8D DC                      BSR  JOUT1S   OUTPUT SPACE
1513
1043 FB15 8D E0                      BSR  JIN1ADR
1514
1044 FB17 29 02                      BVS  ALTYD
1515
1045 FB19 AF 46                      STX  6,U     $F8F0
1516
1046 FB1B 39                 ALTYD   RTS ;
1517
1047                         *
1518
1048                         * ALTER "X" INDEX REGISTER
1519
1049                         *
1520
1050 FB1C 8D 5E              ALTRX   BSR  PRTIX   $FCE0 PRINT MSG " IX = "
1521
1051 FB1E 8D D1                      BSR  JOUT1S   OUTPUT SPACE
1522
1052 FB20 8D D5                      BSR  JIN1ADR
1523
1053 FB22 29 02                      BVS  ALTXD
1524
1054 FB24 AF 44                      STX  4,U
1525
1055 FB26 39                 ALTXD   RTS ;
1526
1056                         *
1527
1057                         * ALTER "DP" DIRECT PAGE REGISTER
1528
1058                         *
1529
1059 FB27 8D 49              ALTRDP  BSR  PRTDP   $FCD5 PRINT MSG " DP = "
1530
1060 FB29 8D C6                      BSR  JOUT1S   OUTPUT SPACE
1531
1061 FB2B 8D C7                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1532
1062 FB2D 29 02                      BVS  ALTDPD
1533
1063 FB2F A7 43                      STA  3,U
1534
1064 FB31 39                 ALTDPD  RTS ;
1535
1065                         *
1536
1066                         * ALTER "B" ACCUMULATOR
1537
1067                         *
1538
1068 FB32 8D 6C              ALTRB   BSR  PRTB    $FD09 PRINT MSG " B = "
1539
1069 FB34 8D BB                      BSR  JOUT1S   OUTPUT SPACE
1540
1070 FB36 8D BC                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1541
1071 FB38 29 02                      BVS  ALTBD
1542
1072 FB3A A7 42                      STA  2,U
1543
1073 FB3C 39                 ALTBD   RTS          $F91C
1544
1074                         *
1545
1075                         * ALTER "A" ACCUMULATOR
1546
1076                         *
1547
1077 FB3D 8D 58              ALTRA   BSR  PRTA    $FCFF RINT MSG " A = "
1548
1078 FB3F 8D B0                      BSR  JOUT1S   OUTPUT SPACE
1549
1079 FB41 8D B1                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1550
1080 FB43 29 02                      BVS  ALTAD
1551
1081 FB45 A7 41                      STA  1,U
1552
1082 FB47 39                 ALTAD   RTS ;
1553
1083                         *
1554
1084                         * ALTER "CC" REGISTER
1555
1085                         *
1556
1086 FB48 8D 5F              ALTRCC  BSR  PRTCC   $FD13 PRINT MSG " CC: "
1557
1087 FB4A 8D A5                      BSR  JOUT1S   OUTPUT SPACE
1558
1088 FB4C 8D A6                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
1559
1089 FB4E 29 04                      BVS  ALTCCD
1560
1090 FB50 8A 80                      ORA  #$80    SETS "E" FLAG IN PRINT LIST
1561
1091 FB52 A7 C4                      STA  ,U
1562
1092 FB54 39                 ALTCCD  RTS ;
1563
1093                         *
1564
1094                         * PDATA
1565
1095                         *
1566
1096 FB55 17 01 2B           PRINT LBSR OUTCH
1567
1097 FB58 A6 80              PDATA LDA  ,X+ GET 1st CHAR. TO PRINT
1568
1098 FB5A 81 04                    CMPA #4 IS IT EOT?
1569
1099 FB5C 26 F7                    BNE  PRINT IF NOT EOT PRINT IT
1570
1100 FB5E 39                       RTS  ;
1571
1101                         *
1572
1102                         * PRINT REGISTERS
1573
1103                         *
1574
1104 FB5F 8E FE C6           PRTSP  LDX  #MSG10 POINT TO MSG "SP="
1575
1105 FB62 8D F4                     BSR  PDATA  PRINT MSG
1576
1106 FB64 1F 31                     TFR  U,X
1577
1107 FB66 16 00 BF           JOUT4H LBRA OUT4H
1578
1108                         *
1579
1109 FB69 8E FE D2           PRTUS  LDX  #MSG12 POINT TO MSG "US="
1580
1110 FB6C 8D EA                     BSR  PDATA  PRINT MSG
1581
1111 FB6E AE 48                     LDX  8,U
1582
1112 FB70 20 F4                     BRA  JOUT4H
1583
1113                         *
1584
1114 FB72 8E FE E4           PRTDP  LDX   #MSG15 POINT TO MSG "DP="
1585
1115 FB75 8D E1                     BSR  PDATA  PRINT MSG
1586
1116 FB77 A6 43                     LDA  3,U
1587
1117 FB79 16 00 B4           JOUT2H LBRA OUT2H OUTPUT HEX BYTE AS ASCII
1588
1118                         *
1589
1119 FB7C 8E FE DE           PRTIX  LDX  #MSG14 POINT TO MSG "IX="
1590
1120 FB7F 8D D7                     BSR  PDATA  PRINT MSG
1591
1121 FB81 AE 44                     LDX  4,U      $FCE6
1592
1122 FB83 20 E1                     BRA  JOUT4H
1593
1123                         *
1594
1124 FB85 8E FE D8           PRTIY  LDX  #MSG13 POINT TO MSG "IY="
1595
1125 FB88 8D CE                     BSR  PDATA  PRINT MSG
1596
1126 FB8A AE 46                     LDX  6,U
1597
1127 FB8C 20 D8                     BRA  JOUT4H
1598
1128                         *
1599
1129 FB8E 8E FE CC           PRTPC  LDX  #MSG11 POINT TO MSG "PC="
1600
1130 FB91 8D C5                     BSR  PDATA  PRINT MSG
1601
1131 FB93 AE 4A                     LDX  10,U
1602
1132 FB95 20 CF                     BRA  JOUT4H
1603
1133                         *
1604
1134 FB97 8E FE EA           PRTA   LDX  #MSG16 POINT TO MSG "A="
1605
1135 FB9A 8D BC                     BSR  PDATA  PRINT MSG
1606
1136 FB9C A6 41                     LDA  1,U
1607
1137 FB9E 20 D9                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
1608
1138                         *
1609
1139 FBA0 8E FE EF           PRTB   LDX  #MSG17 POINT TO MSG "B="
1610
1140 FBA3 8D B3                     BSR  PDATA  PRINT MSG
1611
1141 FBA5 A6 42                     LDA  2,U
1612
1142 FBA7 20 D0                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
1613
1143                         *
1614
1144 FBA9 8E FE F4           PRTCC  LDX  #MSG18 POINT TO MSG "CC:"
1615
1145 FBAC 8D AA                     BSR  PDATA  PRINT MSG
1616
1146 FBAE A6 C4                     LDA  ,U
1617
1147 FBB0 8E FE FB                  LDX  #MSG19 POINT TO MSG "EFHINZVC"
1618
1148 FBB3 16 00 90                  LBRA BIASCI OUTPUT IN BINARY/ASCII FORMAT
1619
1149                         *
1620
1150                         * "R" DISPLAY REGISTERS
1621
1151                         *
1622
1152 FBB6 8E FE C2           REGSTR  LDX  #MSG5   POINT TO MSG " - "
1623
1153 FBB9 17 FF 27                   LBSR PSTRNG  PRINT MSG
1624
1154 FBBC 8D A1                      BSR PRTSP   $FCBF
1625
1155 FBBE 8D A9                      BSR PRTUS   $FCCA
1626
1156 FBC0 8D B0                      BSR PRTDP   $FCD5
1627
1157 FBC2 8D B8                      BSR PRTIX   $FCE0
1628
1158 FBC4 8D BF                      BSR PRTIY   $FCEB
1629
1159 FBC6 8E FE C2                   LDX  #MSG5   POINT TO MSG " - "
1630
1160 FBC9 17 FF 17                   LBSR PSTRNG  PRINT MSG
1631
1161 FBCC 8D C0                      BSR PRTPC   $FCF5
1632
1162 FBCE 8D C7                      BSR PRTA    $FCFF
1633
1163 FBD0 8D CE                      BSR PRTB    $FD09
1634
1164 FBD2 20 D5                      BRA PRTCC   $FD13
1635
1165                         *
1636
1166                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
1637
1167                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
1638
1168                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
1639
1169                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT
1640
1170                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX
1641
1171                         * ADDRESS IS INPUT.
1642
1172                         *
1643
1173 FBD4 8D 09              IN2ADR BSR IN1ADR GET FIRST ADDRESS
1644
1174 FBD6 29 4D                     BVS NOTHEX EXIT IF NOT VALID HEX
1645
1175 FBD8 1F 12                     TFR  X,Y SAVE FIRST ADDR. IN "IY"
1646
1176 FBDA 86 2D                     LDA #'-
1647
1177 FBDC 17 00 A4                  LBSR OUTCH PRINT " - "
1648
1178                         *
1649
1179                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
1650
1180                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
1651
1181                         * ADDRESS IS RETURNED IN THE "X" REGISTER.
1652
1182                         *
1653
1183 FBDF 8D 0E              IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR)
1654
1184 FBE1 29 42                     BVS NOTHEX EXIT IF NOT VALID HEX
1655
1185 FBE3 1F 01                     TFR  D,X
1656
1186 FBE5 8D 08                     BSR BYTE INPUT BYTE (2 HEX CHAR)
1657
1187 FBE7 29 3C                     BVS NOTHEX
1658
1188 FBE9 34 10                     PSHS X
1659
1189 FBEB A7 61                     STA  1,S
1660
1190 FBED 35 90                     PULS X,PC
1661
1191                         *
1662
1192                         ***** INPUT BYTE (2 HEX CHAR.) *****
1663
1193                         *
1664
1194 FBEF 8D 11              BYTE   BSR INHEX GET HEX LEFT
1665
1195 FBF1 29 32                     BVS NOTHEX EXIT IF NOT VALID HEX
1666
1196 FBF3 48                        ASLA   ;
1667
1197 FBF4 48                        ASLA   ;
1668
1198 FBF5 48                        ASLA   ; SHIFT INTO LEFT NIBBLE
1669
1199 FBF6 48                        ASLA   ;
1670
1200 FBF7 1F 89                     TFR  A,B PUT HEXL IN "B"
1671
1201 FBF9 8D 07                     BSR INHEX GET HEX RIGHT
1672
1202 FBFB 29 28                     BVS NOTHEX EXIT IF NOT VALID HEX
1673
1203 FBFD 34 04                     PSHS B PUSH HEXL ON STACK
1674
1204 FBFF AB E0                     ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
1675
1205 FC01 39                        RTS  RETURN WITH HEX L&R IN "A"
1676
1206                         *
1677
1207                         *
1678
1208 FC02 8D 57              INHEX  BSR ECHON INPUT ASCII CHAR.
1679
1209 FC04 81 30                     CMPA #'0 IS IT > OR = "0" ?
1680
1210 FC06 25 1D                     BCS NOTHEX IF LESS IT AIN'T HEX
1681
1211 FC08 81 39                     CMPA #'9 IS IT < OR = "9" ?
1682
1212 FC0A 22 03                     BHI INHEXA IF > MAYBE IT'S ALPHA
1683
1213 FC0C 80 30                     SUBA #$30 ASCII ADJ. NUMERIC
1684
1214 FC0E 39                        RTS  ;
1685
1215                         *
1686
1216                         *
1687
1217 FC0F 81 41              INHEXA CMPA #'A IS IT > OR = "A"
1688
1218 FC11 25 12                     BCS NOTHEX IF LESS IT AIN'T HEX
1689
1219 FC13 81 46                     CMPA #'F IS IT < OR = "F" ?
1690
1220 FC15 22 03                     BHI INHEXL IF > IT AIN'T HEX
1691
1221 FC17 80 37                     SUBA #$37 ASCII ADJ. ALPHA
1692
1222 FC19 39                        RTS  ;
1693
1223                         *
1694
1224 FC1A 81 61              INHEXL CMPA #'a IS IT > OR = "a"
1695
1225 FC1C 25 07                     BCS NOTHEX IF LESS IT AIN'T HEX
1696
1226 FC1E 81 66                     CMPA #'f IS IT < "f"
1697
1227 FC20 22 03                     BHI NOTHEX IF > IT AIN'T HEX
1698
1228 FC22 80 57                     SUBA #$57 ADJUST TO LOWER CASE
1699
1229 FC24 39                        RTS  ;
1700
1230                         *
1701
1231                         *
1702
1232 FC25 1A 02              NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
1703
1233 FC27 39                        RTS  ;
1704
1234                         *
1705
1235                         *
1706
1236 FC28 34 10              OUT4H  PSHS X PUSH X-REG. ON THE STACK
1707
1237 FC2A 35 02                     PULS A POP MS BYTE OF X-REG INTO A-ACC.
1708
1238 FC2C 8D 02                     BSR OUTHL OUTPUT HEX LEFT
1709
1239 FC2E 35 02                     PULS A POP LS BYTE OF X-REG INTO A-ACC.
1710
1240 FC30                    OUTHL  EQU *
1711
1241 FC30 34 02              OUT2H  PSHS A SAVE IT BACK ON STACK
1712
1242 FC32 44                        LSRA CONVERT UPPER HEX NIBBLE TO ASCII
1713
1243 FC33 44                        LSRA  ;
1714
1244 FC34 44                        LSRA  ;
1715
1245 FC35 44                        LSRA  ;
1716
1246 FC36 8D 04                     BSR XASCII PRINT HEX NIBBLE AS ASCII
1717
1247 FC38 35 02              OUTHR  PULS A CONVERT LOWER HEX NIBBLE TO ASCII
1718
1248 FC3A 84 0F                     ANDA #$0F STRIP LEFT NIBBLE
1719
1249 FC3C 8B 30              XASCII ADDA #$30 ASCII ADJ
1720
1250 FC3E 81 39                     CMPA #$39 IS IT < OR = "9" ?
1721
1251 FC40 2F 02                     BLE  OUTC IF LESS, OUTPUT IT
1722
1252 FC42 8B 07                     ADDA #7 IF > MAKE ASCII LETTER
1723
1253 FC44 20 3D              OUTC   BRA  OUTCH OUTPUT CHAR
1724
1254                         *
1725
1255                         * BINARY / ASCII --- THIS ROUTINE
1726
1256                         * OUTPUTS A BYTE IN ENHANCED
1727
1257                         * BINARY FORMAT. THE ENHANCEMENT
1728
1258                         * IS DONE BY SUBSTITUTING ASCII
1729
1259                         * LETTERS FOR THE ONES IN THE BYTE.
1730
1260                         * THE ASCII ENHANCEMENT LETTERS
1731
1261                         * ARE OBTAINED FROM THE STRING
1732
1262                         * POINTED TO BY THE INDEX REG. "X".
1733
1263                         *
1734
1264 FC46 34 02              BIASCI PSHS A SAVE "A" ON STACK
1735
1265 FC48 C6 08                     LDB  #8 PRESET LOOP# TO BITS PER BYTE
1736
1266 FC4A A6 80              OUTBA  LDA ,X+ GET LETTER FROM STRING
1737
1267 FC4C 68 E4                     ASL  ,S TEST BYTE FOR "1" IN B7
1738
1268 FC4E 25 02                     BCS PRTBA IF ONE PRINT LETTER
1739
1269 FC50 86 2D                     LDA #'- IF ZERO PRINT "-"
1740
1270 FC52 8D 2F              PRTBA  BSR OUTCH PRINT IT
1741
1271 FC54 8D 2B                     BSR OUT1S PRINT SPACE
1742
1272 FC56 5A                        DECB SUB 1 FROM #BITS YET TO PRINT
1743
1273 FC57 26 F1                     BNE OUTBA
1744
1274 FC59 35 82                     PULS A,PC
1745
1275                         *
1746
1276                                IFD EXTOPT
1747
1277                         *
1748
1278                         * EXTENDED USER COMMANDS
1749
1279                         *
1750
1280                         USRCMD JMP [MONEXT+EXTCMD]
1751
1281                                ENDIF EXTOPT
1752
1281                                ENDIF EXTOPT
1753
1282                         *
1754
1283                         *
1755
1284 FC5B 7D DF D2           ECHON  TST  ECHO IS ECHO REQUIRED ?
1756
1285 FC5E 27 06                     BEQ  INCH ECHO NOT REQ. IF CLEAR
1757
1286                         *
1758
1287                         * INCHE
1759
1288                         *
1760
1289                         * ---GETS CHARACTER FROM TERMINAL AND
1761
1290                         * ECHOS SAME. THE CHARACTER IS RETURNED
1762
1291                         * IN THE "A" ACCUMULATOR WITH THE PARITY
1763
1292                         * BIT MASKED OFF. ALL OTHER REGISTERS
1764
1293                         * ARE PRESERVED.
1765
1294                         *
1766
1295 FC60 8D 04              INCHE  BSR INCH GET CHAR FROM TERMINAL
1767
1296 FC62 84 7F                     ANDA #$7F      STRIP PARITY FROM CHAR.
1768
1297 FC64 20 1D                     BRA  OUTCH     ECHO CHAR TO TERMINAL
1769
1298                         *
1770
1299                         * INCH
1771
1300                         *
1772
1301                         * GET CHARACTER FROM TERMINAL. RETURN
1773
1302                         * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
1774
1303                         * ALL OTHER REGISTERS. THE INPUT CHARACTER
1775
1304                         * IS 8 BITS AND IS NOT ECHOED.
1776
1305                         *
1777
1306                         *
1778
1307 FC66 34 10              INCH   PSHS X SAVE IX
1779
1308 FC68 BE DF D0           GETSTA LDX  CPORT POINT TO TERMINAL PORT
1780
1309 FC6B A6 84                     LDA  ,X  FETCH PORT STATUS
1781
1310 FC6D 85 01                     BITA #1 TEST READY BIT, RDRF ?
1782
1311                                IFD  PS2OPT
1783
1312                                BNE GETST1
1784
1313                                LDX  #PS2KBD
1785
1314                                LDA  ,X
1786
1315                                BITA #1
1787
1316                                ENDIF PS2OPT
1788
1316                                ENDIF PS2OPT
1789
1317 FC6F 27 F7                     BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN
1790
1318 FC71 A6 01              GETST1 LDA  1,X FETCH CHAR
1791
1319 FC73 35 90                     PULS X,PC RESTORE IX
1792
1320                         *
1793
1321                         * INCHEK
1794
1322                         *
1795
1323                         * CHECK FOR A CHARACTER AVAILABLE FROM
1796
1324                         * THE TERMINAL. THE SERIAL PORT IS CHECKED
1797
1325                         * FOR READ READY. ALL REGISTERS ARE
1798
1326                         * PRESERVED, AND THE "Z" BIT WILL BE
1799
1327                         * CLEAR IF A CHARACTER CAN BE READ.
1800
1328                         *
1801
1329                         *
1802
1330 FC75 34 02              INCHEK  PSHS A SAVE A ACCUM.
1803
1331 FC77 A6 9F DF D0                LDA  [CPORT] FETCH PORT STATUS
1804
1332 FC7B 85 01                      BITA #1 TEST READY BIT, RDRF ?
1805
1333                                 IFD PS2OPT
1806
1334                                 BNE  INCHEK1
1807
1335                                 LDA  PS2KBD
1808
1336                                 BITA #1 TEST READY BIT< RDRF ?
1809
1337                                 ENDIF PS2OPT
1810
1337                                 ENDIF PS2OPT
1811
1338 FC7D 35 82              INCHEK1 PULS A,PC RESTORE A ACCUM.
1812
1339                         *
1813
1340 FC7F 8D 00              OUT2S BSR OUT1S OUTPUT 2 SPACES
1814
1341 FC81 86 20              OUT1S LDA  #$20  OUTPUT 1 SPACE
1815
1342                         *
1816
1343                         *
1817
1344                         * OUTCH
1818
1345                         *
1819
1346                         * OUTPUT CHARACTER TO TERMINAL.
1820
1347                         * THE CHAR. TO BE OUTPUT IS
1821
1348                         * PASSED IN THE A REGISTER.
1822
1349                         * ALL REGISTERS ARE PRESERVED.
1823
1350                         *
1824
1351                         OUTCH   IFD VDUOPT
1825
1352                                 BSR  VOUTCH
1826
1353                                 ENDIF VDUOPT
1827
1353                                 ENDIF VDUOPT
1828
1354                                 IFD  DG640OPT
1829
1355 FC83 8D 3B                      BSR  VOUTCH
1830
1356                                 ENDIF DG640OPT
1831
1357 FC85 34 12              AOUTCH  PSHS A,X    SAVE A ACCUM AND IX
1832
1358 FC87 BE DF D0                   LDX  CPORT  GET ADDR. OF TERMINAL
1833
1359 FC8A A6 84              FETSTA  LDA  ,X     FETCH PORT STATUS
1834
1360 FC8C 85 02                      BITA #2     TEST TDRE, OK TO XMIT ?
1835
1361 FC8E 27 FA                      BEQ  FETSTA IF NOT LOOP UNTIL RDY
1836
1362 FC90 35 02                      PULS A      GET CHAR. FOR XMIT
1837
1363 FC92 A7 01                      STA  1,X    XMIT CHAR.
1838
1364 FC94 35 90                      PULS X,PC   RESTORE IX
1839
1365                         *
1840
1366                         * IO INITIALIZATION
1841
1367                         *
1842
1368 FC96                    IOINIZ  EQU  *
1843
1369                                 IFD  VDUOPT
1844
1370                                 BSR  VINIZ
1845
1371                                 ENDIF VDUOPT
1846
1371                                 ENDIF VDUOPT
1847
1372                                 IFD  DG640OPT
1848
1373 FC96 8D 13                      BSR  VINIZ
1849
1374                                 ENDIF DG640OPT
1850
1375 FC98 BE DF D0           ACINIZ  LDX  CPORT  POINT TO CONTROL PORT ADDRESS
1851
1376 FC9B 86 03                      LDA  #3     RESET ACIA PORT CODE
1852
1377 FC9D A7 84                      STA  ,X     STORE IN CONTROL REGISTER
1853
1378 FC9F 86 11                      LDA  #$11   SET 8 DATA, 2 STOP AN 0 PARITY
1854
1379 FCA1 A7 84                      STA  ,X     STORE IN CONTROL REGISTER
1855
1380 FCA3 6D 01                      TST  1,X    ANYTHING IN DATA REGISTER?
1856
1381 FCA5 86 FF                      LDA  #$FF   TURN ON ECHO FLAG
1857
1382 FCA7 B7 DF D2                   STA  ECHO
1858
1383 FCAA 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 FCAB 8E 00 00           VINIZ   LDX    #0
2103
1627 FCAE BF DF EB                   STX    COLADX    AND ROWADX
2104
1628 FCB1 BF DF EF                   STX    NEWROW    AND ESCFLG
2105
1629 FCB4 8E E8 00                   LDX    #SCREEN   POINT TO SCREEN
2106
1630 FCB7 BF DF ED                   STX    CURSOR    SET PROGRAM CURSOR
2107
1631 FCBA 86 1B                      LDA    #$1B      SEND ESCAPE
2108
1632 FCBC 8D 02                      BSR    VOUTCH
2109
1633 FCBE 86 59                      LDA    #'Y       CLEAR TO END OF SCREEN
2110
1634                         *
2111
1635                         ** VIDEO OUTPUT ROUTINE
2112
1636                         *
2113
1637 FCC0 34 16              VOUTCH  PSHS   A,B,X     SAVE REGISTERS
2114
1638                         *
2115
1639                         ** CLEAR CURSOR
2116
1640 FCC2 BE DF ED                   LDX    CURSOR
2117
1641 FCC5 E6 84                      LDB   0,X
2118
1642 FCC7 C4 7F                      ANDB   #$7F
2119
1643 FCC9 E7 84                      STB   0,X
2120
1644                         *
2121
1645                         ** CHECK FOR ESCAPE SEQUENCE
2122
1646 FCCB 7D DF F0                   TST    ESCFLG    ESCAPE ACTIVE?
2123
1647 FCCE 27 04                      BEQ    SOROU1    BRANCH IF NOT
2124
1648 FCD0 8D 5E                      BSR   ESCAPE    ELSE DO ESCAPE
2125
1649 FCD2 20 10                      BRA    RETURN    AND RETURN
2126
1650                         *
2127
1651                         ** CHECK FOR CONTROL CHARACTERS
2128
1652 FCD4 81 20              SOROU1  CMPA   #$20      CONTROL CODES?
2129
1653 FCD6 24 04                      BHS    SOROU2
2130
1654 FCD8 8D 15                      BSR    CONTRL    BRANCH IF SO
2131
1655 FCDA 20 08                      BRA    RETURN
2132
1656                         *
2133
1657                         ** OUTPUT TEXT CHARACTER
2134
1658 FCDC BE DF ED           SOROU2  LDX    CURSOR    ELSE GET CURSOR
2135
1659 FCDF A7 84                      STAA   0,X       DISPLAY CHARACTER
2136
1660 FCE1 17 00 E9                   LBSR   NEWCOL    UPDATE COLUMN
2137
1661                         *
2138
1662                         ** DISPLAY CURSOR AND RETURN
2139
1663 FCE4 BE DF ED           RETURN  LDX    CURSOR    AND DISPLAY IT
2140
1664 FCE7 E6 84                      LDB    ,X
2141
1665 FCE9 CA 80                      ORAB   #$80      WITH REVID
2142
1666 FCEB E7 84                      STB    ,X
2143
1667 FCED 35 96                      PULS   A,B,X,PC  RESTORE REGISTERS AND RETURN
2144
1668
2145
1669                         ***************************************************
2146
1670                         *              CONTROL CODE HANDLERS              *
2147
1671                         ***************************************************
2148
1672
2149
1673 FCEF 81 08              CONTRL  CMPA   #$08      CTRL H - BACKSPACE ?
2150
1674 FCF1 10 27 00 27                LBEQ   BACKSP
2151
1675 FCF5 81 1B                      CMPA   #$1B      ESCAPE SEQUENCE?
2152
1676 FCF7 10 27 00 52                LBEQ   SETESC
2153
1677 FCFB 81 0D                      CMPA   #$D       CTRL M - RETURN?
2154
1678 FCFD 10 27 00 B4                LBEQ   CRETN
2155
1679 FD01 81 0A                      CMPA   #$0A      CTRL J - LINE FEED
2156
1680 FD03 26 4F                      BNE    RETESC    NONE OF THESE, RETURN
2157
1681
2158
1682                         ***************************************** LINE FEED
2159
1683
2160
1684 FD05 FC DF EB           LINEFD  LDD    COLADX    GET CURRENT COLUMN AND ROW
2161
1685 FD08 5C                         INCB             BUMP ROW
2162
1686 FD09 C1 10                      CMPB   #NUMLIN   SCROLL TIME?
2163
1687 FD0B 10 26 00 AA                LBNE   NEWCUR    POSITION CURSOR IF NOT
2164
1688 FD0F 16 00 CC                   LBRA   SCROLL    ELSE SCROLL IT
2165
1689
2166
1690                         ***************************************** LINE FEED
2167
1691
2168
1692 FD12 FC DF EB           LINEUP  LDD    COLADX    GET CURRENT COLUMN AND ROW
2169
1693 FD15 5D                         TSTB                AT TOP OF SCREEN ?
2170
1694 FD16 27 3C                      BEQ   RETESC    Yes, Ignore
2171
1695 FD18 5A                         DECB             No, Decrement ROW
2172
1696 FD19 16 00 9D                   LBRA   NEWCUR    POSITION CURSOR
2173
1697
2174
1698
2175
1699                         *********************************** BACK SPACE
2176
1700
2177
1701 FD1C B6 DF EB           BACKSP  LDA    COLADX
2178
1702 FD1F 27 33                      BEQ    RETESC      RETURN
2179
1703 FD21 4A                         DECA
2180
1704 FD22 16 00 91                   LBRA   POSCOL    POSITION CURSOR
2181
1705
2182
1706                         *********************************** CURSOR RIGHT
2183
1707
2184
1708 FD25 B6 DF EB           CHRIGHT LDA    COLADX
2185
1709 FD28 4C                         INCA
2186
1710 FD29 81 40                      CMPA   #LINLEN
2187
1711 FD2B 27 27                      BEQ   RETESC
2188
1712 FD2D 16 00 86                   LBRA   POSCOL
2189
1713
2190
1714                         ***************************************************
2191
1715                         *                 ESCAPE HANDLERS                 *
2192
1716                         ***************************************************
2193
1717
2194
1718 FD30 F6 DF F0           ESCAPE  LDAB   ESCFLG    GET FLAG
2195
1719 FD33 C1 3D                      CMPB   #'=       SETTING CURSOR?
2196
1720 FD35 27 1E                      BEQ    ESCCUR    BRANCH IF SO
2197
1721 FD37 81 59                      CMPA   #'Y       CLEAR TO END OF SCREEN?
2198
1722 FD39 10 27 00 B8                LBEQ   ESCCLS
2199
1723 FD3D 81 54                      CMPA   #'T       CLEAR TO END OF LINE?
2200
1724 FD3F 27 5D                      BEQ   ESCCLL
2201
1725 FD41 81 45                      CMPA   #'E       INSERT LINE?
2202
1726 FD43 27 3B                      BEQ   ESCINL
2203
1727 FD45 81 52                      CMPA   #'R       DELETE LINE?
2204
1728 FD47 27 2C                      BEQ   ESCDLL
2205
1729 FD49 81 3D                      CMPA   #'=       STARTING CURSOR SET?
2206
1730 FD4B 26 04                      BNE    CLRESC    BRANCH IF NOT
2207
1731
2208
1732                         ***************************** START ESCAPE SEQUENCE
2209
1733
2210
1734 FD4D B7 DF F0           SETESC  STAA   ESCFLG    ELSE START CURSORING
2211
1735 FD50 39                         RTS              AND RETURN
2212
1736
2213
1737 FD51 7F DF F0           CLRESC  CLR    ESCFLG    NO OTHERS SUPPORTED
2214
1738 FD54 39                 RETESC  RTS              SO RETURN
2215
1739
2216
1740                         ********************************* SET SCREEN CURSOR
2217
1741
2218
1742 FD55 7D DF EF           ESCCUR  TST   NEWROW    ROW SET?
2219
1743 FD58 26 04                      BNE   ESCCU1    BRANCH IF SO
2220
1744 FD5A B7 DF EF                   STAA  NEWROW    ELSE SET NEW ROW
2221
1745 FD5D 39                         RTS              AND RETURN
2222
1746
2223
1747 FD5E 7F DF F0           ESCCU1  CLR   ESCFLG
2224
1748 FD61 80 20                      SUBA  #$20      ADJUST COLUMN ADDRESS
2225
1749 FD63 81 3F                      CMPA  #LINLEN-1 CHECK FOR ACCEPTABLE COLUM
2226
1750 FD65 22 ED                      BHI   RETESC    NOT OK, DO NOTHING
2227
1751
2228
1752 FD67 F6 DF EF           ESCCU2  LDAB  NEWROW
2229
1753 FD6A 7F DF EF                   CLR   NEWROW
2230
1754 FD6D C0 20                      SUBB  #$20      ADJUST TO ROW ADDRESS
2231
1755 FD6F C1 0F                      CMPB  #NUMLIN-1 CHECK FOR ACCEPTABLE ROW
2232
1756 FD71 22 E1                      BHI   RETESC    ELSE RETURN DOING NOTHING
2233
1757 FD73 20 44                      BRA   NEWCUR    GO SET NEW CURSOR IF SO
2234
1758                         *
2235
1759                         *************************** DELETE LINE FROM SCREEN
2236
1760
2237
1761 FD75 8D 3E              ESCDLL  BSR   CRETN     GO COL. ZERO
2238
1762 FD77 F6 DF EC                   LDB   ROWADX
2239
1763 FD7A C1 0F                      CMPB  #NUMLIN-1
2240
1764 FD7C 27 7A                      BEQ   SCROL3
2241
1765 FD7E 20 61                      BRA   SCROL1    AND DELETE THIS LINE
2242
1766
2243
1767                         *************************** INSERT LINE INTO SCREEN
2244
1768
2245
1769 FD80 8D 33              ESCINL  BSR   CRETN    GO TO COL. ZERO
2246
1770 FD82 F6 DF EC                   LDAB  ROWADX
2247
1771 FD85 C1 0F                      CMPB  #NUMLIN-1
2248
1772 FD87 27 15                      BEQ   ESCCLL
2249
1773                         *
2250
1774                         ** SCROLL SCREEN DOWN FROM CURSOR
2251
1775                         *
2252
1776 FD89 8E EB C0                   LDX   #SCREEN+SCNLEN-LINLEN
2253
1777 FD8C A6 82              ESCIN0  LDAA  0,-X
2254
1778 FD8E A7 88 40                   STAA  LINLEN,X
2255
1779 FD91 A6 89 04 00                LDA   SCNLEN,X
2256
1780 FD95 A7 89 04 40                STA   SCNLEN+LINLEN,X
2257
1781 FD99 BC DF ED                   CPX   CURSOR
2258
1782 FD9C 26 EE                      BNE   ESCIN0
2259
1783
2260
1784                         ****************** CLEAR FROM CURSOR TO END OF LINE
2261
1785
2262
1786 FD9E B6 DF EB           ESCCLL  LDA   COLADX    GET CURRENT COLUMN
2263
1787 FDA1 BE DF ED                   LDX   CURSOR    GET CURSOR
2264
1788 FDA4 C6 20                      LDB   #$20      AND CLEAR CHAR
2265
1789 FDA6 E7 89 04 00        ESCLL1  STB   SCNLEN,X  CLEAR ATTRIBUTE
2266
1790 FDAA E7 80                      STB   ,X+       CLEAR TEXT
2267
1791 FDAC 4C                         INCA
2268
1792 FDAD 81 40                      CMPA  #LINLEN   UNTIL END OF LINE
2269
1793 FDAF 26 F5                      BNE   ESCLL1
2270
1794 FDB1 7F DF F0                   CLR   ESCFLG
2271
1795 FDB4 39                         RTS
2272
1796
2273
1797                         *********************************** CARRIAGE RETURN
2274
1798
2275
1799 FDB5 4F                 CRETN   CLRA               SET COLUMN ZERO
2276
1800 FDB6 F6 DF EC           POSCOL  LDB   ROWADX    GET CURRENT ROW
2277
1801
2278
1802                         *********** GENERATE NEW CURSOR POSITION AND RETURN
2279
1803
2280
1804 FDB9 FD DF EB           NEWCUR  STD   COLADX    SAVE NEW ROW AND COLUMN
2281
1805 FDBC 86 40                      LDA   #LINLEN   ELSE ADD A LINE
2282
1806 FDBE 3D                         MUL              LINLEN * ROWADX
2283
1807 FDBF FB DF EB                   ADDB  COLADX
2284
1808 FDC2 89 00                      ADCA  #0
2285
1809 FDC4 C3 E8 00                   ADDD  #SCREEN   ADD SCREEN BASE.
2286
1810 FDC7 FD DF ED                   STD   CURSOR    SAVE NEW CURSOR
2287
1811 FDCA 1F 01                      TFR   D,X       GET CURSOR IN X
2288
1812 FDCC 39                         RTS              AND RETURN
2289
1813
2290
1814                         ********************* UPDATE CURRENT COLUMN AND ROW
2291
1815
2292
1816 FDCD FC DF EB           NEWCOL  LDD   COLADX    GET ROW AND COLUMN
2293
1817 FDD0 4C                         INCA             BUMP COLUMN
2294
1818 FDD1 81 40                      CMPA  #LINLEN   ROLL?
2295
1819 FDD3 26 E4                      BNE   NEWCUR    BRANCH IF NOT
2296
1820 FDD5 4F                         CLRA             ELSE RESET TO ZERO
2297
1821 FDD6 5C                         INCB             AND BUMP ROW
2298
1822 FDD7 C1 10                      CMPB  #NUMLIN
2299
1823 FDD9 26 DE                      BNE   NEWCUR
2300
1824 FDDB 5A                         DECB             BOTTOM ROW
2301
1825 FDDC 8D DB                      BSR   NEWCUR
2302
1826
2303
1827                         ********************************* SCROLL THE SCREEN
2304
1828
2305
1829 FDDE 8E E8 00           SCROLL  LDX   #SCREEN   POINT TO SCREEN
2306
1830 FDE1 A6 89 04 40        SCROL1  LDA   SCNLEN+LINLEN,X
2307
1831 FDE5 A7 89 04 00                STA   SCNLEN,X
2308
1832 FDE9 A6 88 40                   LDAA  LINLEN,X  MOVE TWO BYTES
2309
1833 FDEC A7 80                      STAA  0,X+      UP ONE LINE
2310
1834 FDEE 8C EB C0                   CMPX  #SCREEN+SCNLEN-LINLEN
2311
1835 FDF1 26 EE                      BNE   SCROL1    LOOP UNTIL DONE
2312
1836 FDF3 20 03                      BRA   SCROL3
2313
1837
2314
1838                         **************** CLEAR FROM CURSOR TO END OF SCREEN
2315
1839
2316
1840 FDF5 BE DF ED           ESCCLS  LDX   CURSOR    GET CURSOR
2317
1841 FDF8 86 20              SCROL3  LDAA  #$20      GET A SPACE
2318
1842 FDFA A7 89 04 00        SCROL2  STA   SCNLEN,X  CLEAR ATTRIBUTES
2319
1843 FDFE A7 80                      STA   ,X+       AND TEXT
2320
1844 FE00 8C EC 00                   CMPX  #SCREEN+SCNLEN
2321
1845 FE03 26 F5                      BNE   SCROL2    UNTIL DONE
2322
1846 FE05 7F DF F0                   CLR   ESCFLG
2323
1847 FE08 39                         RTS
2324
1848                                 ENDIF DG640OPT
2325
1849                         *
2326
1850                                 IFD PRTOPT
2327
1851                         *************************************
2328
1852                         *
2329
1853                         ** PRINTER DRIVER ROUTINES
2330
1854                         *
2331
1855                         *************************************
2332
1856                         *
2333
1857                         ** PINIZ - INITIATE PRINTER PORT
2334
1858                         *
2335
1859 FE09 34 04              PINIZ   PSHS B
2336
1860 FE0B CC 0C 04                   LDD #DIRMSK*256+$04 ACCA=DIRMSK ACCB=$04
2337
1861 FE0E FD E4 04                   STD PADATA SET DDR AND SELECT DATA
2338
1862                         *
2339
1863                         ** RESET PRINTER
2340
1864 FE11 C6 04                      LDB #PRESET
2341
1865 FE13 F7 E4 04                   STAB PADATA
2342
1866 FE16 5C                 RESTLP  INCB DELAY FOR RESET
2343
1867 FE17 26 FD                      BNE RESTLP
2344
1868 FE19 B7 E4 04                   STAA PADATA ACCA=DIRMSK
2345
1869                         *
2346
1870                         ** INITALIZE PORT B (DATA PORT)
2347
1871 FE1C 86 2A                      LDAA #$2A
2348
1872 FE1E B7 E4 07                   STAA PBCTRL
2349
1873 FE21 CC FF 2E                   LDD #$FF2E ACCA=$FF ACCB =%00101110
2350
1874 FE24 FD E4 06                   STD PBDATA PBDREG   PBCTRL
2351
1875                         *
2352
1876                         ** SELECT 66 LINES/PAGE
2353
1877 FE27 86 1B                      LDAA #$1B
2354
1878 FE29 8D 08                      BSR POUTCH
2355
1879 FE2B 86 43                      LDAA #'C
2356
1880 FE2D 8D 04                      BSR POUTCH
2357
1881 FE2F 86 42                      LDAA #66
2358
1882 FE31 35 04                      PULS B
2359
1883                         *************************************
2360
1884                         *
2361
1885                         ** OUTPUT A CHARACTER TO THE PRINTER
2362
1886                         *
2363
1887                         *************************************
2364
1888 FE33 34 04              POUTCH  PSHS B
2365
1889 FE35 F6 E4 06                   LDAB PBDATA CLEAR INTERRUPT BIT
2366
1890                         *
2367
1891                         ** WAIT TILL NOT BUSY
2368
1892 FE38 F6 E4 04           BUSYLP  LDAB PADATA
2369
1893 FE3B C5 10                      BITB #PERROR
2370
1894 FE3D 27 06                      BEQ PEXIT
2371
1895 FE3F 5D                         TSTB
2372
1896 FE40 2B F6                      BMI BUSYLP
2373
1897                         *
2374
1898                         ** NOW OUTPUT CHARACTER
2375
1899 FE42 B7 E4 06                   STAA PBDATA
2376
1900 FE45 35 84              PEXIT   PULS B,PC
2377
1901                         *************************************
2378
1902                         *
2379
1903                         ** PCHK TEST IFD PRINTER READY
2380
1904                         *
2381
1905                         *************************************
2382
1906 FE47 7D E4 07           PCHK    TST PBCTRL TEST STATE OF CRB7
2383
1907 FE4A 39                         RTS SET ON ACKNOWLEDGE
2384
1908                                 ENDIF PRTOPT
2385
1909                         *************************************
2386
1910                         *
2387
1911                         * MONITOR KEYBOARD COMMAND JUMP TABLE
2388
1912                         *
2389
1913                         *************************************
2390
1914                         *
2391
1915 FE4B                    JMPTAB EQU *
2392
1916 FE4B 01                  FCB 1 " ^A "
2393
1917 FE4C FB 3D               FDB ALTRA
2394
1918 FE4E 02                  FCB 2 " ^B "
2395
1919 FE4F FB 32               FDB ALTRB
2396
1920 FE51 03                  FCB 3 " ^C "
2397
1921 FE52 FB 48               FDB ALTRCC
2398
1922 FE54 04                  FCB 4 " ^D "
2399
1923 FE55 FB 27               FDB ALTRDP
2400
1924 FE57 10                  FCB $10 " ^P "
2401
1925 FE58 FA FA               FDB ALTRPC
2402
1926 FE5A 15                  FCB $15 " ^U "
2403
1927 FE5B FB 06               FDB ALTRU
2404
1928 FE5D 18                  FCB $18 " ^X "
2405
1929 FE5E FB 1C               FDB ALTRX
2406
1930 FE60 19                  FCB $19 " ^Y "
2407
1931 FE61 FB 11               FDB ALTRY
2408
1932                         *
2409
1933 FE63 42                  FCC 'B'
2410
1934 FE64 F9 51               FDB BRKPNT
2411
1935 FE66 45                  FCC 'E'
2412
1936 FE67 F8 F2               FDB MEMDUMP
2413
1937 FE69 47                  FCC 'G'
2414
1938 FE6A F8 9A               FDB GO
2415
1939 FE6C 4C                  FCC 'L'
2416
1940 FE6D FA 27               FDB LOAD
2417
1941 FE6F 50                  FCC 'P'
2418
1942 FE70 FA 85               FDB PUNCH
2419
1943 FE72 4D                  FCC 'M'
2420
1944 FE73 F8 9D               FDB MEMCHG
2421
1945 FE75 52                  FCC 'R'
2422
1946 FE76 FB B6               FDB REGSTR
2423
1947 FE78 53                  FCC 'S'
2424
1948 FE79 F8 E6               FDB DISSTK
2425
1949 FE7B 58                  FCC 'X'
2426
1950 FE7C F9 7D               FDB XBKPNT
2427
1951                          IFD MFDCOPT
2428
1952 FE7E 44                  FCC 'D'      *** SWTPC USES 'U' FOR MINIBOOT
2429
1953 FE7F F9 CA               FDB MINBOOT
2430
1954                          ENDIF MFDCOPT
2431
1955                          IFD CF8OPT
2432
1956                          FCC 'D'      *** FPGA 8 BIT USES 'D' FOR CFBOOT
2433
1957                          FDB CFBOOT
2434
1958                          ENDIF CF8OPT
2435
1958                          ENDIF CF8OPT
2436
1959                          IFD IDEOPT
2437
1960                          FCC 'D'      *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
2438
1961                          FDB IDEBOOT
2439
1962                          ENDIF IDEOPT
2440
1962                          ENDIF IDEOPT
2441
1963                          IFD DMAFOPT
2442
1964                          FCC 'U'      *** SWTPC USES 'D' FOR DMAF2 BOOT
2443
1965                          FDB DBOOT
2444
1966                          ENDIF DMAFOPT
2445
1966                          ENDIF DMAFOPT
2446
1967                          IFD EXTOPT
2447
1968                          FCC 'U'      *** IF FPGA, 'U' IS FOR USER
2448
1969                          FDB USRCMD
2449
1970                          ENDIF EXTOPT
2450
1970                          ENDIF EXTOPT
2451
1971                          IFD RTCOPT
2452
1972                          FCC 'T'
2453
1973                          FDB TIMSET
2454
1974                          ENDIF RTCOPT
2455
1974                          ENDIF RTCOPT
2456
1975                          IFD TRAOPT
2457
1976                          FCC "T"
2458
1977                          FDB TRACE
2459
1978                          ENDIF TRAOPT
2460
1978                          ENDIF TRAOPT
2461
1979                         *
2462
1980 FE81                    TABEND EQU *
2463
1981                         *
2464
1982                         * ** 6809 VECTOR ADDRESSES **
2465
1983                         *
2466
1984                         * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
2467
1985                         * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
2468
1986                         * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
2469
1987                         * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
2470
1988                         * HIS OWN ROUTINES IF HE SO DESIRES.
2471
1989                         *
2472
1990                         *
2473
1991 FE81 F9 89              RAMVEC FDB SWIE  USER-V
2474
1992 FE83 F8 9C               FDB RTI    SWI3-V
2475
1993 FE85 F8 9C               FDB RTI    SWI2-V
2476
1994 FE87 F8 9C               FDB RTI    FIRQ-V
2477
1995 FE89 F8 9C               FDB RTI    IRQ-V
2478
1996 FE8B F9 89               FDB SWIE   SWI-V
2479
1997 FE8D FF FF               FDB $FFFF  SVC-VO
2480
1998 FE8F FF FF               FDB $FFFF  SVC-VL
2481
1999                         *
2482
2000                         * PRINTABLE MESSAGE STRINGS
2483
2001                         *
2484
2002 FE91 0D 0A 00 00 00     MSG1  FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0
2485
2003 FE96 53 59 53 30 39 42        FCC 'SYS09BUG 1.4 FOR '
2486
          55 47 20 31 2E 34
2487
          20 46 4F 52 20
2488
2004                               IFD S3EOPT
2489
2005                               FCC 'S3E '
2490
2006                               ENDIF S3EOPT
2491
2006                               ENDIF S3EOPT
2492
2007                               IFD B5XOPT
2493
2008                               FCC 'B5-X300 '
2494
2009                               ENDIF B5XOPT
2495
2009                               ENDIF B5XOPT
2496
2010                               IFD S3SOPT
2497
2011                               FCC 'S3STARTER '
2498
2012                               ENDIF S3SOPT
2499
2012                               ENDIF S3SOPT
2500
2013                               IFD ADSOPT
2501
2014 FEA7 41 44 53 36 38 30        FCC 'ADS6809 '
2502
          39 20
2503
2015                               ENDIF ADSOPT
2504
2016                               IFD SWTOPT`
2505
2017                               FCC 'SWTPC '
2506
2018                               ENDIF SWTOPT
2507
2018                               ENDIF SWTOPT
2508
2019                               IFD XESOPT`
2509
2020                               FCC  'XESS '
2510
2021                               ENDIF XESOPT
2511
2021                               ENDIF XESOPT
2512
2022 FEAF 20 2D 20                 FCC ' - '
2513
2023 FEB2 04                       FCB 4
2514
2024 FEB3 4B 0D 0A 00 00 00  MSG2  FCB 'K,$D,$A,$00,$00,$00,$04 K, * CR/LF + 3 NULS
2515
          04
2516
2025 FEBA 3E                 MSG3  FCC '>'
2517
2026 FEBB 04                       FCB 4
2518
2027 FEBC 57 48 41 54 3F     MSG4  FCC 'WHAT?'
2519
2028 FEC1 04                       FCB 4
2520
2029 FEC2 20 2D 20           MSG5  FCC ' - '
2521
2030 FEC5 04                       FCB 4'
2522
2031 FEC6 20 20 53 50 3D     MSG10 FCC '  SP='
2523
2032 FECB 04                       FCB 4
2524
2033 FECC 20 20 50 43 3D     MSG11 FCC '  PC='
2525
2034 FED1 04                       FCB 4
2526
2035 FED2 20 20 55 53 3D     MSG12 FCC '  US='
2527
2036 FED7 04                       FCB 4
2528
2037 FED8 20 20 49 59 3D     MSG13 FCC '  IY='
2529
2038 FEDD 04                       FCB 4
2530
2039 FEDE 20 20 49 58 3D     MSG14 FCC '  IX='
2531
2040 FEE3 04                       FCB 4
2532
2041 FEE4 20 20 44 50 3D     MSG15 FCC '  DP='
2533
2042 FEE9 04                       FCB 4
2534
2043 FEEA 20 20 41 3D        MSG16 FCC '  A='
2535
2044 FEEE 04                       FCB 4
2536
2045 FEEF 20 20 42 3D        MSG17 FCC '  B='
2537
2046 FEF3 04                       FCB 4
2538
2047 FEF4 20 20 43 43 3A 20  MSG18 FCC '  CC: '
2539
2048 FEFA 04                       FCB 4
2540
2049 FEFB 45 46 48 49 4E 5A  MSG19 FCC 'EFHINZVC'
2541
          56 43
2542
2050 FF03 53 31              MSG20 FCC 'S1'
2543
2051 FF05 04                       FCB 4
2544
2052                                 IFD DATOPT
2545
2053                         *
2546
2054                         * POWER UP/ RESET/ NMI ENTRY POINT
2547
2055                         *
2548
2056                          ORG $FF00
2549
2057                         *
2550
2058                         *
2551
2059                         START LDX  #IC11  POINT TO DAT RAM IC11
2552
2060                                 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                         DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION
2563
2071                                 DECA  GET COMP. VALUE FOR NEXT LOCATION
2564
2072                                 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                                 LDA  #$F0
2571
2079                                 STA  ,X STORE $F0 AT $FFFF
2572
2080                                 LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF
2573
2081                                 LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y"
2574
2082                         TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION
2575
2083                                 STY  ,X STORE TEST PATTERN AT $D0A0
2576
2084                                 CMPY ,X IS THERE RAM AT THIS LOCATION ?
2577
2085                                 BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP
2578
2086                                 LEAX -$1000,X ELSE POINT 4K LOWER
2579
2087                                 CMPX #$F0A0 DECREMENTED PAST ZER0 YET ?
2580
2088                                 BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM
2581
2089                                 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                         CNVADR  STU  ,X RESTORE DATA AT TEST LOCATION
2607
2115                                 TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
2608
2116                                 COMA  COMPLEMENT MSB OF THAT ADDRESS
2609
2117                                 LSRA  PUT MS 4 BITS OF ADDRESS IN
2610
2118                                 LSRA  LOCATION D0-D3 TO ALLOW STORING
2611
2119                                 LSRA  IT IN THE DYNAMIC ADDRESS
2612
2120                                 LSRA  TRANSLATION RAM.
2613
2121                                 STA  $FFFD STORE XLATION FACTOR IN DAT "D"
2614
2122                         *
2615
2123                                 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                                 LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
2650
2158                                 STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD
2651
2159                                 CLR  14,Y CLEAR $DFDE
2652
2160                                 LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ?
2653
2161                                 STA  15,Y STORE AT $DFDF
2654
2162                                 LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR
2655
2163                         CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0
2656
2164                                 DECA SUB. 1 FROM BYTES LEFT TO CLEAR
2657
2165                                 BPL  CLRLRT CONTINUE IF NOT DONE CLEARING
2658
2166                         FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM
2659
2167                                 CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO
2660
2168                                 BEQ  FINTAB SKIP IF FINISHED
2661
2169                                 LDU  ,X SAVE DATA AT CURRENT TEST LOCATION
2662
2170                                 LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG.
2663
2171                                 STY  ,X STORE TEST PATT. INTO RAM TEST LOC.
2664
2172                                 CMPY ,X VERIFY RAM AT TEST LOCATION
2665
2173                                 BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER
2666
2174                                 STU  ,X ELSE RESTORE DATA TO TEST LOCATION
2667
2175                                 LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
2668
2176                                 TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
2669
2177                                 LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
2670
2178                                 LSRA  TO ALLOW STORING IT IN THE DAT RAM.
2671
2179                                 LSRA
2672
2180                                 LSRA
2673
2181                                 TFR  A,B SAVE OFFSET INTO LRARAM TABLE
2674
2182                                 EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK
2675
2183                                 STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE
2676
2184                                 BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK
2677
2185                         FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ?
2678
2186                                 LDY  #LRARAM POINT TO LRARAM TABLE
2679
2187                                 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                                 LDA  #$0C PRESET NUMBER HEX "C"
2688
2196                         FINDC   LDB  A,Y GET ENTRY FROM LRARAM TABLE
2689
2197                                 BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR.
2690
2198                                 DECA  ELSE POINT 4K LOWER
2691
2199                                 BPL  FINDC GO TRY AGAIN
2692
2200                                 BRA  XFERTF
2693
2201                         FOUNDC  CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND
2694
2202                                 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                                 CLRA  START AT ZERO
2702
2210                                 TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE.
2703
2211                         COMPRS  LDB  A,Y GET ENTRY FROM "LRARAM" TABLE
2704
2212                                 BEQ  PNTNXT IF IT'S ZER0 SKIP
2705
2213                                 CLR  A,Y ELSE ERASE FROM TABLE
2706
2214                                 STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP
2707
2215                         PNTNXT  INCA GET OFFSET TO NEXT ENTRY
2708
2216                                 CMPA #$0C LAST ENTRY YET ?
2709
2217                                 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                         XFERTF  LDX  #IC11  POINT TO DAT RAM IC11
2716
2224                                 LDB  #$10 GET NO. OF BYTES TO MOVE
2717
2225                         FETCH   LDA  ,Y+ GET BYTE AND POINT TO NEXT
2718
2226                                 STA  ,X+ POKE XLATION FACTOR IN IC11
2719
2227                                 DECB  SUB 1 FROM BYTES TO MOVE
2720
2228                                 BNE  FETCH CONTINUE UNTIL 16 MOVED
2721
2229                         *
2722
2230                                 ELSE
2723
2231 FF06 39                 LRA     RTS
2724
2232 FF07 10 CE DF C0        START   LDS  #STACK INITIALIZE STACK POINTER
2725
2233 FF0B 5F                         CLRB
2726
2234                                 ENDIF DATOPT
2727
2235                         *
2728
2236 FF0C 53                         COMB  SET "B" NON-ZERO
2729
2237 FF0D F7 DF D2                   STB  ECHO TURN ON ECHO FLAG
2730
2238 FF10 16 F9 0F                   LBRA MONITOR INITIALIZATION IS COMPLETE
2731
2239                         *
2732
2240                         ** INTERRUPT JUMP VECTORS
2733
2241                         *
2734
2242 FF13 6E 9F DF C0        V1 JMP  [STACK]
2735
2243 FF17 6E 9F DF C4        V2 JMP  [SWI2]
2736
2244 FF1B 6E 9F DF C6        V3 JMP  [FIRQ]
2737
2245 FF1F 6E 9F DF C8        V4 JMP  [IRQ]
2738
2246 FF23 6E 9F DF CA        V5 JMP  [SWI]
2739
2247                         *
2740
2248                         * SWI3 ENTRY POINT
2741
2249                         *
2742
2250 FF27 1F 43              SWI3E  TFR  S,U
2743
2251 FF29 AE 4A                     LDX  10,U      *$FFC8
2744
2252 FF2B E6 80                     LDB  ,X+
2745
2253 FF2D AF 4A                     STX  10,U
2746
2254 FF2F 4F                        CLRA
2747
2255 FF30 58                        ASLB
2748
2256 FF31 49                        ROLA
2749
2257 FF32 BE DF CC                  LDX  SVCVO
2750
2258 FF35 8C FF FF                  CMPX #$FFFF
2751
2259 FF38 27 0F                     BEQ  SWI3Z
2752
2260 FF3A 30 8B                     LEAX D,X
2753
2261 FF3C BC DF CE                  CMPX SVCVL
2754
2262 FF3F 22 08                     BHI  SWI3Z
2755
2263 FF41 34 10                     PSHS X
2756
2264 FF43 EC C4                     LDD  ,U
2757
2265 FF45 AE 44                     LDX  4,U
2758
2266 FF47 6E F1                     JMP  [,S++]
2759
2267 FF49 37 1F              SWI3Z PULU A,B,X,CC,DP
2760
2268 FF4B EE 42                     LDU  2,U
2761
2269 FF4D 6E 9F DF C2               JMP  [SWI3]
2762
2270                         *
2763
2271                         * 6809 VECTORS
2764
2272                         *
2765
2273 FFF0                           ORG $FFF0
2766
2274 FFF0 FF 13                     FDB V1    USER-V
2767
2275 FFF2 FF 27                     FDB SWI3E SWI3-V
2768
2276 FFF4 FF 17                     FDB V2    SWI2-V
2769
2277 FFF6 FF 1B                     FDB V3    FIRQ-V
2770
2278 FFF8 FF 1F                     FDB V4    IRQ-V
2771
2279 FFFA FF 23                     FDB V5    SWI-V
2772
2280 FFFC FF 13                     FDB V1    NMI-V
2773
2281 FFFE FF 07                     FDB START RESTART-V
2774
0004                                END START
2775
0005                          END
2776
Program + Init Data = 1889 bytes
2777
Error count = 0

powered by: WebSVN 2.1.0

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