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

Subversion Repositories System09

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

Details | Compare with Previous | View Log

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