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

Subversion Repositories System09

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

powered by: WebSVN 2.1.0

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