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

Subversion Repositories System09

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

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

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

powered by: WebSVN 2.1.0

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