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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [sys09bug/] [sys09xes.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 XESS
4
0000                          INCLUDE "opt_xes.txt"
5
0001                         *
6
0002                         ***************************************************
7
0003                         *   OPTION SWITCHES
8
0004                         ***************************************************
9
0005                         *
10
0006                         *
11
0007                         ** THE CONTROL PORT CAN ONLY BE ONE OF THESE
12
0008                         ** NOTE THAT THE ACIA WILL ALWAYS BE PRESET
13
0009                         ** FOR LOADING AND SAVING S1 RECORDS
14
0010                         *
15
0011                         *S3EOPT EQU $FF SPARTAN3E STARTER
16
0012                         *S3SOPT EQU $FF SPARTAN3 STARTER FPGA VIDEO & PS2 KEYBOARD
17
0013                         *B5XOPT EQU $FF B5-X300 FPGA VIDEO & PS2 KEYBOARD
18
0014 00FF                    XESOPT EQU $FF XESS XSA-3S100 & XST-3.0
19
0015                         *ADSOPT  EQU $FF ADS6809 & DG640 VIDEO DISPAY
20
0016                         *SWTOPT EQU $FF SWTP ACIA SERIAL CONTROL PORT
21
0017                         *
22
0002                          END
23
0000                          INCLUDE "sys09equ.txt"
24
0001                         *
25
0002                         ***************************************************
26
0003                         *   MEMORY MAP EQUATES                            *
27
0004                         ***************************************************
28
0005 E000                    MONIO  EQU $E000  I/O SPACE
29
0006                                IFD S3EOPT
30
0007                         MONRAM EQU $7FC0
31
0008                                ELSE
32
0009 DFC0                    MONRAM EQU $DFC0  STACK SPACE
33
0010                                ENDIF S3EOPT
34
0011 F800                    MONROM EQU $F800  START OF ROM
35
0012                                IFD S3SOPT
36
0013                         MONEXT EQU $F000  START OF EXTENDED COMMANDS
37
0014                         EXTCMD EQU $00    EXTENDED OFFSET
38
0015                                ENDIF S3SOPT
39
0015                                ENDIF S3SOPT
40
0016                                IFD XESOPT
41
0017 F000                    MONEXT EQU $F000  START OF EXTENDED COMMANDS
42
0018 0000                    EXTCMD EQU $00    EXTENDED OFFSET
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                         ACIAOPT EQU $FF ACIA AT PORT 0
62
0037                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
63
0038                         VDUOPT  EQU $FF VDU AT $E030
64
0039                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
65
0040                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
66
0041                         EXTOPT  EQU $FF EXTENDED COMMANDS
67
0042                                 ENDIF S3SOPT
68
0042                                 ENDIF S3SOPT
69
0043                         *
70
0044                                 IFD B5XOPT
71
0045                         *
72
0046                         * BURCHED B5-X300
73
0047                         *
74
0048                         ACIAOPT EQU $FF ACIA AT PORT 0
75
0049                         PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
76
0050                         VDUOPT  EQU $FF VDU AT $E030
77
0051                         CF8OPT  EQU $FF COMPACT FLASH AT $E040
78
0052                         DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
79
0053                                 ENDIF B5XOPT
80
0053                                 ENDIF B5XOPT
81
0054                         *
82
0055                                 IFD XESOPT
83
0056                         *
84
0057                         * XESS XSA-3S1000 & XST-3.0
85
0058                         *
86
0059 00FF                    ACIAOPT EQU $FF ACIA AT PORT 0
87
0060 00FF                    PS2OPT  EQU $FF PS2 KEYBOARD AT $E020
88
0061 00FF                    VDUOPT  EQU $FF VDU AT $E030
89
0062 00FF                    IDEOPT  EQU $FF XESS IDE AT $E100
90
0063 00FF                    DATOPT  EQU $FF DYNAMIC ADDRESS TRANSLATION
91
0064 00FF                    EXTOPT  EQU $FF EXTENDED COMMANDS
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                         CF_BASE    EQU MONIO+$40
179
0149                         CF_DATA    EQU CF_BASE+0
180
0150                         CF_ERROR   EQU CF_BASE+1 ; read error
181
0151                         CF_FEATURE EQU CF_BASE+1 ; write feature
182
0152                         CF_SECCNT  EQU CF_BASE+2
183
0153                         CF_SECNUM  EQU CF_BASE+3
184
0154                         CF_CYLLO   EQU CF_BASE+4
185
0155                         CF_CYLHI   EQU CF_BASE+5
186
0156                         CF_HEAD    EQU CF_BASE+6
187
0157                         CF_STATUS  EQU CF_BASE+7 ; read status
188
0158                         CF_COMAND  EQU CF_BASE+7 ; write command
189
0159                         *
190
0160                         * Command Equates
191
0161                         *
192
0162                         CMDREAD    EQU $20 ; Read Single sector
193
0163                         CMDWRITE   EQU $30 ; Write Single sector
194
0164                         CMDFEATURE EQU $EF
195
0165                         FEAT8BIT   EQU $01 ; enable 8 bit transfers
196
0166                         HEADLBA    EQU $E0
197
0167                         *
198
0168                         * Status bit equates
199
0169                         *
200
0170                         BUSY       EQU $80
201
0171                         DRDY       EQU $40
202
0172                         DRQ        EQU $08
203
0173                         ERR        EQU $01
204
0174                         *
205
0175                                    ENDIF CF8OPT
206
0175                                    ENDIF CF8OPT
207
0176                         *
208
0177                                    IFD IDEOPT
209
0178                         *
210
0179                         ***************************************************
211
0180                         *   COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS)  *
212
0181                         ***************************************************
213
0182                         *
214
0183                         ** COMPACT FLASH SITS AT PORT 4
215
0184                         *
216
0185 E100                    CF_BASE    EQU MONIO+$0100
217
0186 E100                    CF_DATA    EQU CF_BASE+0
218
0187 E102                    CF_ERROR   EQU CF_BASE+2 ; read error
219
0188 E102                    CF_FEATURE EQU CF_BASE+2 ; write feature
220
0189 E104                    CF_SECCNT  EQU CF_BASE+4
221
0190 E106                    CF_SECNUM  EQU CF_BASE+6
222
0191 E108                    CF_CYLLO   EQU CF_BASE+8
223
0192 E10A                    CF_CYLHI   EQU CF_BASE+10
224
0193 E10C                    CF_HEAD    EQU CF_BASE+12
225
0194 E10E                    CF_STATUS  EQU CF_BASE+14 ; read status
226
0195 E10E                    CF_COMAND  EQU CF_BASE+14 ; write command
227
0196 E11E                    CF_AUX     EQU CF_BASE+30
228
0197                         *
229
0198                         * Command Equates
230
0199                         *
231
0200 0020                    CMDREAD    EQU $20 ; Read Single sector
232
0201 0030                    CMDWRITE   EQU $30 ; Write Single sector
233
0202 0006                    AUXRESET   EQU $06 ; Reset IDE
234
0203 0002                    AUXRSTREL  EQU $02 ; Reset release IRQ masked
235
0204 00E0                    HEADLBA    EQU $E0
236
0205                         *
237
0206                         * Status bit equates
238
0207                         *
239
0208 0080                    BUSY       EQU $80
240
0209 0040                    DRDY       EQU $40
241
0210 0008                    DRQ        EQU $08
242
0211 0001                    ERR        EQU $01
243
0212                         *
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 "sys09ide.txt"
455
0001                         *
456
0002                         ** SYS09BUG MONITOR EXTENSIONS
457
0003                         *
458
0004                         * FOR SYS09BUG ON THE XESS XSA-3S100 / XST-3.0
459
0005                         * WITH I/O MAPPED AT $XE000
460
0006                         * 16 BIT IDE MAPPED AT $E100
461
0007                         * AND ROM MAPPED AT $XF000
462
0008                         *
463
0009                         *
464
 
465
 
466
sys09ide.txt                                                                      page   2
467
0011                         *
468
0012                         ***************************************************
469
0013                         * Serial PROM register
470
0014                         ***************************************************
471
0015                         *
472
0016                         ** CONFIGURATION PROM DEFINITIONS
473
0017                         *
474
0018 E0C0                    PROMREG EQU MONIO+$C0
475
0019 0001                    PCLKHI  EQU $01     Toggle PROM Clock High
476
0020 0000                    PCLKLO  EQU $00     Toggle PROM Clock Low
477
0021 0002                    PRSTHI  EQU $02     Toggle PROM Reset High
478
0022 0000                    PRSTLO  EQU $00     Toggle PROM Reset Low
479
0023 AA55                    SYNCHI  EQU $AA55   Synch Pattern High Word
480
0024 FF00                    SYNCLO  EQU $FF00   Synch Pattern Low Word
481
0025                         *
482
0026                         *
483
0027                         ***************************************************
484
0028                         *   START OF ROM                                  *
485
0029                         ***************************************************
486
0030                         *
487
0031 F800                    MONITV EQU MONROM+0  FDB MONITOR
488
0032 F802                    NXTCMV EQU MONROM+2  FDB NEXTCMD
489
0033 F804                    INCHV  EQU MONROM+4  FDB INCH
490
0034 F806                    INCHEV EQU MONROM+6  FDB INCHE
491
0035 F808                    INCHKV EQU MONROM+8  FDB INCHEK
492
0036 F80A                    OUTCHV EQU MONROM+10 FDB OUTCH
493
0037 F80C                    PDATAV EQU MONROM+12 FDB PDATA
494
0038 F80E                    PCRLFV EQU MONROM+14 FDB PCRLF
495
0039 F810                    PSTRGV EQU MONROM+16 FDB PSTRNG
496
0040 F812                    LRAV   EQU MONROM+18 FDB LRA
497
0041                         *
498
0042                         * Condition code flags
499
0043                         *
500
0044 0001                    CFLAG   EQU $01     CARRY FLAG
501
0045 0002                    VFLAG   EQU $02     OVERFLOW FLAG
502
0046 0004                    ZFLAG   EQU $04     ZERO FLAG
503
0047 0008                    NFLAG   EQU $08     NEGATIVE FLAG
504
0048 0010                    IFLAG   EQU $10     IRQ MASK CC
505
0049 0020                    HFLAG   EQU $20     HALF CARRY
506
0050 0040                    FFLAG   EQU $40     FIRQ MASK CC
507
0051 0080                    EFLAG   EQU $80     ENTIRE FLAG
508
0052                         *
509
0053                         * Serial Port
510
0054                         *
511
0055 E000                    ACIAC1  EQU ACIAS
512
0056 E001                    ACIAD1  EQU ACIAS+1
513
0057 04E2                    DELCON  EQU 1250    Delay (Processor clock in MHz * 50)
514
0058                         *
515
0059                         * XMODEM Control characters
516
0060                         *
517
0061 0001                    SOH     EQU $01
518
0062 0004                    EOT     EQU $04
519
0063 0006                    ACK     EQU $06
520
0064 0015                    NAK     EQU $15
521
0065 0018                    CAN     EQU $18
522
0066                         *
523
0067                         * Some Disk Constants
524
0068                         *
525
0069 0100                    RMAXTRK EQU 256
526
0070 00FF                    RMAXSEC EQU 255
527
0071 FE01                    RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
528
0072                         *
529
0073                         * RAM SPACE
530
0074                         *
531
0075                         * PUT THIS DOWN THE BOTTOM OF MEMORY
532
0076                         *
533
0077 0100                            ORG  $0100
534
0078 0100                    DRVNUM  RMB 1
535
0079 0101                    TRACK   RMB 1
536
0080 0102                    SECTOR  RMB 1
537
0081 0103                    CHKSUM  RMB 1
538
0082 0104                    BLKNUM  RMB 1 Xmodem block number
539
0083 0105                    BYTCNT  RMB 1 Xmodem byte count
540
0084 0106                    XSTATE  RMB 2 Xmodem State Vector
541
0085 0108                    DELCNT  RMB 3  $00,$00,$00 Xmodem Poll timer
542
0086 010B                    MAXTRK  RMB 1
543
0087 010C                    MAXSEC  RMB 1
544
0088 0200                            ORG  $0200
545
0089                         *
546
0090                         * SECTOR BUFFER
547
0091                         *
548
0092 0200                    BUFFER  RMB  256
549
0093                         *
550
0094                         ****************************************
551
0095                         *
552
0096                         * START OF EXTENSION COMMANDS
553
0097                         *
554
0098                         ****************************************
555
0099                         *
556
0100 F000                            ORG MONEXT
557
0101 F000 F0 02                      FDB NEXTEXT   Jump to next extended command
558
0102                         *
559
0103                         ***** NEXTCMD *****
560
0104                         *
561
0105 F002 AD 9F F8 06        NEXTEXT JSR [INCHEV]  GET ONE CHAR. FROM TERMINAL
562
0106 F006 84 7F                      ANDA #$7F STRIP PARITY FROM CHAR.
563
0107 F008 1F 89                      TFR  A,B
564
0108 F00A 86 20                      LDA  #$20
565
0109 F00C AD 9F F8 0A                JSR [OUTCHV] PRNT SPACE
566
0110 F010 C1 60                      CMPB #$60
567
0111 F012 2F 02                      BLE NXTEX0
568
0112 F014 C0 20                      SUBB #$20
569
0113                         *
570
0114                         ***** DO TABLE LOOKUP *****
571
0115                         *   FOR COMMAND FUNCTIONS
572
0116                         *
573
0117 F016 8E F0 2C           NXTEX0  LDX #EXTTAB    POINT TO JUMP TABLE
574
0118 F019 E1 80              NXTEX1  CMPB ,X+       DOES COMMAND MATCH TABLE ENTRY ?
575
0119 F01B 27 0D                      BEQ  JMPEXT    BRANCH IF MATCH FOUND
576
0120 F01D 30 02                      LEAX 2,X       POINT TO NEXT ENTRY IN TABLE
577
0121 F01F 8C F0 35                   CMPX #EXTEND   REACHED END OF TABLE YET ?
578
0122 F022 26 F5                      BNE  NXTEX1    IF NOT END, CHECK NEXT ENTRY
579
0123 F024 8E F0 35                   LDX  #MSGWHAT  POINT TO MSG "WHAT?"
580
0124 F027 16 02 29                   LBRA PDATA1    PRINT MSG AND RETURN
581
0125 F02A 6E 94              JMPEXT  JMP  [,X]      JUMP TO COMMAND ROUTINE
582
0126                         *
583
0127                         * EXTENDED COMMAND JUMP TABLE
584
0128                         *
585
0129 F02C                    EXTTAB EQU *
586
0130 F02C 42                        FCC 'B'   BOOT FLEX
587
0131 F02D F0 3E                     FDB UBSUB
588
0132 F02F 46                        FCC 'F'   FORMAT IDE DISK
589
0133 F030 F0 EA                     FDB UFSUB
590
0134 F032 58                        FCC 'X'   XMODEM ROM DISK UPLOAD
591
0135 F033 F2 BC                     FDB UXSUB
592
0136                         *
593
0137 F035                    EXTEND EQU *
594
0138                         *
595
0139 F035 57 48 41 54 20 3F  MSGWHAT FCC "WHAT ?"
596
0140 F03B 0A 0D 04                   FCB $0A,$0D,$04
597
0141                         *
598
0142                         * GO TO FLEX RESIDENT IN MEMORY
599
0143                         *
600
0144 F03E 8E CD 00           UBSUB   LDX #$CD00
601
0145 F041 AF 4A                      STX 10,U
602
0146 F043 1F 34                      TFR  U,S
603
0147 F045 3B                         RTI
604
0148                         *
605
0149                         * recieve char from remote drive.
606
0150                         * timeout if no response for approx 1s.
607
0151                         * Entry: no parameters
608
0152                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
609
0153                         *
610
0154 F046 34 30              RCHAR   PSHS    X,Y
611
0155                         *
612
0156 F048 8E 03 E8                   LDX     #1000         1000x inner loop
613
0157 F04B 10 8E 04 E2        RCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
614
0158 F04F B6 E0 00           RCHAR2  LDA     ACIAC1        test for recieved char
615
0159 F052 47                         ASRA
616
0160 F053 25 0A                      BCS     RCHAR3        get character
617
0161 F055 31 3F                      LEAY    -1,Y          else, continue to count delay
618
0162 F057 26 F6                      BNE     RCHAR2
619
0163 F059 30 1F                      LEAX    -1,X
620
0164 F05B 26 EE                      BNE     RCHAR1
621
0165 F05D 35 B0                      PULS    X,Y,PC        return with error if timed out
622
0166                         *
623
0167 F05F B6 E0 01           RCHAR3  LDA     ACIAD1        return data (carry bit still set)
624
0168 F062 35 B0                      PULS    X,Y,PC
625
0169                         *
626
0170                         *
627
0171                         * transmit char to remote drive.
628
0172                         * timeout if no response for approx 1s. (allows for use of hardware flow control)
629
0173                         * Entry: (A) = char to transmit
630
0174                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
631
0175                         *
632
0176 F064 34 30              SCHAR   PSHS    X,Y
633
0177 F066 34 02                      PSHS    A
634
0178                         *
635
0179 F068 8E 03 E8                   LDX     #1000         1000x inner loop
636
0180 F06B 10 8E 04 E2        SCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
637
0181 F06F B6 E0 00           SCHAR2  LDA     ACIAC1        test for space in transmit FIFO
638
0182 F072 47                         ASRA
639
0183 F073 47                         ASRA
640
0184 F074 25 0C                      BCS     SCHAR3        send character
641
0185 F076 31 3F                      LEAY    -1,Y          else, continue to count delay
642
0186 F078 26 F5                      BNE     SCHAR2
643
0187 F07A 30 1F                      LEAX    -1,X
644
0188 F07C 26 ED                      BNE     SCHAR1
645
0189 F07E 35 02                      PULS    A
646
0190 F080 35 B0                      PULS    X,Y,PC        return with error if timed out
647
0191                         *
648
0192 F082 35 02              SCHAR3  PULS    A
649
0193 F084 B7 E0 01                   STA     ACIAD1        send data (carry bit still set)
650
0194 F087 35 B0                      PULS    X,Y,PC
651
0195                         *
652
0196                         ** 'UF' Format IDE Drive to FLEX standard.
653
0197                         *
654
0198 F089 0A 0D              DISFOS  FCB $0A,$0D
655
0199 F08B 46 6F 72 6D 61 74          FCC 'Formating IDE disk... '
656
          69 6E 67 20 49 44
657
          45 20 64 69 73 6B
658
          2E 2E 2E 20
659
0200 F0A1 0A 0D                      FCB $0A,$0D
660
0201 F0A3 44 72 69 76 65 20          FCC 'Drive Number ?'
661
          4E 75 6D 62 65 72
662
          20 3F
663
0202 F0B1 04                         FCB 4
664
0203 F0B2 0A 0D 04           MESS6   FCB $0A,$0D,4
665
0204 F0B5 49 44 45 20 64 72          FCC 'IDE drive not allocated! '
666
          69 76 65 20 6E 6F
667
          74 20 61 6C 6C 6F
668
          63 61 74 65 64 21
669
          20
670
0205 F0CE 04                    FCB 4
671
0206 F0CF 0A 0D              UFMSG1  FCB $0A,$0D
672
0207 F0D1 46 6F 72 6D 61 74          FCC 'Format Complete'
673
          20 43 6F 6D 70 6C
674
          65 74 65
675
0208 F0E0 04                         FCB 4
676
0209 F0E1 49 44 45 44 49 53  VOLMSG  FCC 'IDEDISK '
677
          4B 20
678
0210 F0E9 04                         FCB 4
679
0211                         *
680
0212 F0EA BD F4 BD           UFSUB   JSR  INITDR
681
0213 F0ED 8E F0 89                   LDX #DISFOS
682
0214 F0F0 BD F2 53                   JSR PDATA1
683
0215 F0F3 17 FF 50           UFSUB1  LBSR RCHAR
684
0216 F0F6 24 FB                      BCC  UFSUB1
685
0217 F0F8 17 FF 69                   LBSR SCHAR
686
0218 F0FB 81 30                      CMPA #'0'
687
0219 F0FD 10 25 00 EF                LBLO UFEXIT
688
0220 F101 81 33                      CMPA #'3'
689
0221 F103 10 22 00 E9                LBHI  UFEXIT
690
0222 F107 80 30                      SUBA #'0'
691
0223 F109 1F 89                      TFR  A,B
692
0224 F10B F7 01 00                   STB DRVNUM
693
0225 F10E 8E 00 FD                   LDX #DRVNUM-3
694
0226 F111 BD F5 3A                   JSR DRVSEL
695
0227                         *
696
0228                         * set up free chain
697
0229                         *
698
0230 F114 8E 02 00                   LDX #BUFFER clear out buffer
699
0231 F117 4F                         CLRA
700
0232 F118 5F                         CLRB
701
0233 F119 A7 80              DFL1    STA 0,X+
702
0234 F11B 5A                         DECB
703
0235 F11C 26 FB                      BNE DFL1
704
0236                         *
705
0237 F11E 7F 01 01                   CLR TRACK
706
0238 F121 86 01                      LDA #1
707
0239 F123 B7 01 02                   STA SECTOR
708
0240 F126 8E 02 00           DFL2    LDX #BUFFER
709
0241 F129 B6 01 01                   LDA TRACK
710
0242 F12C A7 84                      STA 0,X
711
0243 F12E B6 01 02                   LDA SECTOR
712
0244 F131 4C                         INCA
713
0245 F132 81 00                      CMPA #RMAXSEC+1 last sector on track?
714
0246 F134 26 04                      BNE DFL3
715
0247 F136 6C 84                      INC 0,X
716
0248 F138 86 01                      LDA #1
717
0249 F13A A7 01              DFL3    STA 1,X
718
0250 F13C B6 01 01                   LDA TRACK
719
0251 F13F F6 01 02                   LDB SECTOR
720
0252 F142 BD F5 15                   JSR WRITSC
721
0253 F145 7C 01 02                   INC SECTOR
722
0254 F148 B6 01 02                   LDA SECTOR
723
0255 F14B 81 00                      CMPA #RMAXSEC+1
724
0256 F14D 26 D7                      BNE DFL2
725
0257 F14F 86 01                      LDA #1
726
0258 F151 B7 01 02                   STA  SECTOR
727
0259 F154 7C 01 01                   INC TRACK
728
0260 F157 B6 01 01                   LDA TRACK
729
0261 F15A 81 00                      CMPA #RMAXTRK
730
0262 F15C 26 C8                      BNE DFL2
731
0263                         * break free chain at last track/sector
732
0264 F15E 8E 02 00                   LDX  #BUFFER
733
0265 F161 86 FF                      LDA  #RMAXTRK-1
734
0266 F163 C6 FF                      LDB  #RMAXSEC
735
0267 F165 BD F4 F1                   JSR  READSC
736
0268 F168 8E 02 00                   LDX  #BUFFER
737
0269 F16B 6F 84                      CLR  0,X
738
0270 F16D 6F 01                      CLR  1,X
739
0271 F16F 86 FF                      LDA  #RMAXTRK-1
740
0272 F171 C6 FF                      LDB  #RMAXSEC
741
0273 F173 BD F5 15                   JSR  WRITSC
742
0274                         * set up sector structure, SIR, directory etc
743
0275 F176 8E 02 00                   LDX  #BUFFER
744
0276 F179 4F                         CLRA
745
0277 F17A C6 FF                      LDB  #RMAXSEC
746
0278 F17C BD F4 F1                   JSR  READSC
747
0279 F17F 8E 02 00                   LDX  #BUFFER
748
0280 F182 6F 84                      CLR  0,X break end of directory chain
749
0281 F184 6F 01                      CLR  1,X
750
0282 F186 4F                         CLRA
751
0283 F187 C6 FF                      LDB  #RMAXSEC
752
0284 F189 BD F5 15                   JSR  WRITSC
753
0285                         *
754
0286 F18C 8E 02 00                   LDX  #BUFFER
755
0287 F18F 4F                         CLRA
756
0288 F190 C6 03                      LDB  #3 set up SIR
757
0289 F192 BD F4 F1                   JSR  READSC
758
0290 F195 8E 02 00                   LDX  #BUFFER
759
0291 F198 6F 84                      CLR  0,X break forward link
760
0292 F19A 6F 01                      CLR  1,X
761
0293                         *
762
0294 F19C 34 20                      PSHS Y
763
0295 F19E 10 8E F0 E1                LDY  #VOLMSG
764
0296 F1A2 C6 10                      LDB  #16
765
0297 F1A4 A6 A0              DFL4    LDA  ,Y+
766
0298 F1A6 A7 85                      STA  B,X
767
0299 F1A8 5C                         INCB
768
0300 F1A9 C1 18                      CMPB #24
769
0301 F1AB 26 F7                      BNE  DFL4
770
0302 F1AD 35 20                      PULS Y
771
0303                         *
772
0304 F1AF 4F                         CLRA
773
0305 F1B0 F6 01 00                   LDB  DRVNUM volume number
774
0306 F1B3 ED 88 1B                   STD  27,X
775
0307                         *
776
0308 F1B6 CC 01 01                   LDD  #$0101 first trk/sec  01-01
777
0309 F1B9 ED 88 1D                   STD  29,X
778
0310 F1BC 86 FF                      LDA  #RMAXTRK-1
779
0311 F1BE C6 FF                      LDB  #RMAXSEC
780
0312 F1C0 ED 88 1F                   STD  31,X
781
0313 F1C3 ED 88 26                   STD  38,X
782
0314 F1C6 CC FE 01                   LDD  #RTOTSEC total DATA sectors (2912-14)
783
0315 F1C9 ED 88 21                   STD  33,X
784
0316                         *
785
0317 F1CC 86 01                      LDA #01 month   set default creation date (SYS09's birthday!)
786
0318 F1CE A7 88 23                   STA 35,X
787
0319 F1D1 86 07                      LDA #07 day
788
0320 F1D3 A7 88 24                   STA 36,X
789
0321 F1D6 86 07                      LDA #07 year
790
0322 F1D8 A7 88 25                   STA 37,X
791
0323                         *
792
0324 F1DB 4F                 RF3     CLRA
793
0325 F1DC C6 03                      LDB  #3
794
0326 F1DE BD F5 15                   JSR  WRITSC
795
0327                         *
796
0328                         * Not sure what this is about
797
0329                         * put bootstrap on track 0 sector 1
798
0330                         *
799
0331                         *        LDX #BUFFER
800
0332                         *        CLRA
801
0333                         *        LDB #1
802
0334                         *        JSR READSC
803
0335                         *        LDX #BUFFER
804
0336                         *        LDA #$AA set the init flag
805
0337                         *        STA 0,X
806
0338                         *        LDA  #$55
807
0339                         *        STA 1,X
808
0340                         *        CLRA
809
0341                         *        LDB #1
810
0342                         *        JSR WRITSC
811
0343                         *
812
0344                         *  Write Boot sector
813
0345                         *
814
0346 F1E1 8E F7 00                   LDX  #BOOT
815
0347 F1E4 4F                         CLRA         TRACK 0
816
0348 F1E5 C6 01                      LDB  #$01    SECTOR 1
817
0349 F1E7 B7 01 01                   STA  TRACK
818
0350 F1EA F7 01 02                   STB  SECTOR
819
0351 F1ED 17 03 25                   LBSR WRITSC
820
0352                         *
821
0353 F1F0 8E F0 CF           UFEXIT  LDX #UFMSG1
822
0354 F1F3 7E F2 53                   JMP PDATA1
823
0355                         *
824
0356                         * ACIA INPUT TEST
825
0357                         *
826
0358 F1F6 B6 E0 00           INTEST  LDA ACIAC1
827
0359 F1F9 85 01                      BITA #$01
828
0360 F1FB 39                         RTS
829
0361                         *
830
0362                         * RESET ACIA
831
0363                         *
832
0364 F1FC 86 03              ACIRST  LDA #$03 master reset
833
0365 F1FE B7 E0 00                   STA  ACIAC1
834
0366 F201 86 11                      LDA #$11
835
0367 F203 B7 E0 00                   STA ACIAC1
836
0368 F206 39                         RTS
837
0369                         *
838
0370                         * ACIA INPUT
839
0371                         *
840
0372 F207 86 10              INTER   LDA  #16
841
0373 F209 B7 01 08                   STA  DELCNT+0
842
0374 F20C 7F 01 09                   CLR  DELCNT+1
843
0375 F20F 7F 01 0A                   CLR  DELCNT+2
844
0376 F212 B6 E0 00           INTER0  LDA  ACIAC1
845
0377 F215 85 01                      BITA #$01
846
0378 F217 26 08                      BNE  INTER1
847
0379 F219 85 78                      BITA #$78
848
0380 F21B 27 0A                      BEQ  INTER2
849
0381 F21D 8D DD                      BSR  ACIRST
850
0382 F21F 20 E6                      BRA  INTER
851
0383                         *
852
0384 F221 B6 E0 01           INTER1  LDA  ACIAD1
853
0385 F224 1C FD                      ANDCC #$FF-VFLAG
854
0386 F226 39                         RTS
855
0387                         *
856
0388 F227 7A 01 0A           INTER2  DEC  DELCNT+2
857
0389 F22A 26 E6                      BNE  INTER0
858
0390 F22C 7A 01 09                   DEC  DELCNT+1
859
0391 F22F 26 E1                      BNE  INTER0
860
0392 F231 7A 01 08                   DEC  DELCNT+0
861
0393 F234 26 DC                      BNE  INTER0
862
0394 F236 4F                         CLRA
863
0395 F237 1A 02                      ORCC #VFLAG
864
0396 F239 39                         RTS
865
0397                         *
866
0398                         * ACIA OUTPUT
867
0399                         *
868
0400 F23A 34 02              OUTTER  PSHS A
869
0401                         *
870
0402 F23C B6 E0 00           OUTTE1  LDA ACIAC1
871
0403 F23F 85 02                      BITA #$02
872
0404 F241 26 08                      BNE  OUTTE2
873
0405 F243 85 78                      BITA #$78
874
0406 F245 27 F5                      BEQ  OUTTE1
875
0407 F247 8D B3                      BSR  ACIRST
876
0408 F249 20 F1                      BRA  OUTTE1
877
0409                         *
878
0410 F24B 35 02              OUTTE2  PULS A
879
0411 F24D B7 E0 01                   STA ACIAD1
880
0412 F250 39                         RTS
881
0413                         *
882
0414                         * Print Data
883
0415                         *
884
0416 F251 8D E7              PDATA0  BSR  OUTTER
885
0417 F253 A6 80              PDATA1  LDA  ,X+
886
0418 F255 81 04                      CMPA #$04
887
0419 F257 26 F8                      BNE  PDATA0
888
0420 F259 39                         RTS
889
0421                         *
890
0422                         *
891
0423                         ** 'UX' Xmodem IDE Disk upload
892
0424                         *
893
0425 F25A 0D 0A              UXMES0  FCB $0D,$0A
894
0426 F25C 58 6D 6F 64 65 6D          FCC 'Xmodem IDE Disk Upload'
895
          20 49 44 45 20 44
896
          69 73 6B 20 55 70
897
          6C 6F 61 64
898
0427 F272 04                         FCB 4
899
0428 F273 0D 0A              UXMES1  FCB $0D,$0A
900
0429 F275 55 70 6C 6F 61 64          FCC 'Upload Complete'
901
          20 43 6F 6D 70 6C
902
          65 74 65
903
0430 F284 04                         FCB 4
904
0431 F285 0D 0A              UXMES2  FCB $0D,$0A
905
0432 F287 55 70 6C 6F 61 64          FCC 'Upload Error'
906
          20 45 72 72 6F 72
907
0433 F293 04                         FCB 4
908
0434 F294 0D 0A              UXMSG3  FCB $0D,$0A
909
0435 F296 44 72 69 76 65 20          FCC 'Drive Number :'
910
          4E 75 6D 62 65 72
911
          20 3A
912
0436 F2A4 04                         FCB 4
913
0437 F2A5 0D 0A              UXMSG4  FCB $0D,$0A
914
0438 F2A7 41 72 65 20 59 6F          FCC 'Are You Sure ? (Y/N)'
915
          75 20 53 75 72 65
916
          20 3F 20 28 59 2F
917
          4E 29
918
0439 F2BB 04                         FCB 4
919
0440                         *
920
0441                         * Print Banner
921
0442                         *
922
0443 F2BC 8E F2 5A           UXSUB   LDX #UXMES0
923
0444 F2BF 17 FF 91                   LBSR PDATA1
924
0445                         *
925
0446                         * Prompt for Disk drive number (0 to 3)
926
0447                         *
927
0448 F2C2 8E F2 94                   LDX #UXMSG3
928
0449 F2C5 17 FF 8B                   LBSR PDATA1
929
0450 F2C8 17 FF 3C           UXSUB1  LBSR INTER
930
0451 F2CB 29 FB                      BVS  UXSUB1
931
0452 F2CD 17 FF 6A                   LBSR OUTTER
932
0453 F2D0 81 30                      CMPA #'0
933
0454 F2D2 10 25 01 2E                LBLO UXEXIT
934
0455 F2D6 81 33                      CMPA #'3
935
0456 F2D8 10 22 01 28                LBHI UXEXIT
936
0457 F2DC 80 30                      SUBA #'0
937
0458 F2DE B7 01 00                   STA  DRVNUM
938
0459                         *
939
0460                         * Report selected drive
940
0461                         *
941
0462 F2E1 8E F2 94                   LDX #UXMSG3
942
0463 F2E4 17 FF 6C                   LBSR PDATA1
943
0464 F2E7 B6 01 00                   LDA  DRVNUM
944
0465 F2EA 8B 30                      ADDA #'0
945
0466 F2EC 17 FF 4B                   LBSR OUTTER
946
0467                         *
947
0468                         * Ask for confirmation (Y/N)
948
0469                         *
949
0470 F2EF 8E F2 A5                   LDX #UXMSG4
950
0471 F2F2 17 FF 5E                   LBSR PDATA1
951
0472 F2F5 17 FF 0F           UXSUB2  LBSR INTER
952
0473 F2F8 29 FB                      BVS  UXSUB2
953
0474 F2FA 17 FF 3D                   LBSR OUTTER
954
0475 F2FD 84 5F                      ANDA #$5F
955
0476 F2FF 81 4E                      CMPA #'N
956
0477 F301 10 27 00 FF                LBEQ UXEXIT
957
0478 F305 81 59                      CMPA #'Y
958
0479 F307 26 B3                      BNE  UXSUB
959
0480                         *
960
0481                         * We have confirmation ... now load the disk image
961
0482                         *
962
0483 F309 17 01 B1                   LBSR INITDR
963
0484 F30C CE F4 2D                   LDU  #XSTST
964
0485 F30F FF 01 06                   STU  XSTATE
965
0486 F312 86 01                      LDA  #1
966
0487 F314 B7 01 04                   STA  BLKNUM
967
0488                         *
968
0489                         * Sector1
969
0490                         *
970
0491 F317 8E 02 00                   LDX  #BUFFER
971
0492                         *
972
0493 F31A 4F                         CLRA         TRACK 0
973
0494 F31B C6 01                      LDB  #$01    SECTOR 1
974
0495 F31D B7 01 01                   STA  TRACK
975
0496 F320 F7 01 02                   STB  SECTOR
976
0497                         *
977
0498 F323 17 00 EA                   LBSR XREAD
978
0499 F326 10 25 00 E0                LBCS UXERR
979
0500 F32A 17 01 87                   LBSR XACK
980
0501 F32D 17 00 E0                   LBSR XREAD
981
0502 F330 10 25 00 D6                LBCS UXERR
982
0503                         *
983
0504 F334 8E 02 00                   LDX  #BUFFER
984
0505 F337 B6 01 01                   LDA  TRACK
985
0506 F33A F6 01 02                   LDB  SECTOR
986
0507 F33D 17 01 D5                   LBSR WRITSC
987
0508 F340 17 01 71                   LBSR XACK
988
0509                         *
989
0510                         * Sector 2
990
0511                         *
991
0512 F343 8E 02 00                   LDX  #BUFFER
992
0513                         *
993
0514 F346 B6 01 01                   LDA  TRACK
994
0515 F349 F6 01 02                   LDB  SECTOR
995
0516 F34C 5C                         INCB
996
0517 F34D B7 01 01                   STA  TRACK
997
0518 F350 F7 01 02                   STB  SECTOR
998
0519                         *
999
0520 F353 17 00 BA                   LBSR XREAD
1000
0521 F356 10 25 00 B0                LBCS UXERR
1001
0522 F35A 17 01 57                   LBSR XACK
1002
0523 F35D 17 00 B0                   LBSR XREAD
1003
0524 F360 10 25 00 A6                LBCS UXERR
1004
0525                         *
1005
0526 F364 8E 02 00                   LDX  #BUFFER
1006
0527 F367 B6 01 01                   LDA  TRACK
1007
0528 F36A F6 01 02                   LDB  SECTOR
1008
0529 F36D 17 01 A5                   LBSR WRITSC
1009
0530                         *
1010
0531 F370 17 01 41                   LBSR XACK
1011
0532                         *
1012
0533                         * Sector 3 - SIR
1013
0534                         *
1014
0535 F373 8E 02 00                   LDX  #BUFFER
1015
0536                         *
1016
0537 F376 B6 01 01                   LDA  TRACK
1017
0538 F379 F6 01 02                   LDB  SECTOR
1018
0539 F37C 5C                         INCB
1019
0540 F37D B7 01 01                   STA  TRACK
1020
0541 F380 F7 01 02                   STB  SECTOR
1021
0542                         *
1022
0543 F383 17 00 8A                   LBSR XREAD
1023
0544 F386 10 25 00 80                LBCS UXERR
1024
0545 F38A 17 01 27                   LBSR XACK
1025
0546 F38D 17 00 80                   LBSR XREAD
1026
0547 F390 10 25 00 76                LBCS UXERR
1027
0548                         *
1028
0549 F394 8E 02 00                   LDX  #BUFFER
1029
0550 F397 A6 88 26                   LDA  38,X
1030
0551 F39A 4C                         INCA
1031
0552 F39B B7 01 0B                   STA  MAXTRK
1032
0553 F39E E6 88 27                   LDB  39,X
1033
0554 F3A1 5C                         INCB
1034
0555 F3A2 F7 01 0C                   STB  MAXSEC
1035
0556 F3A5 B6 01 01                   LDA  TRACK
1036
0557 F3A8 F6 01 02                   LDB  SECTOR
1037
0558 F3AB 17 01 67                   LBSR WRITSC
1038
0559                         *
1039
0560 F3AE 17 01 03                   LBSR XACK
1040
0561                         *
1041
0562                         * Sector 4 to Last Track & Sector
1042
0563                         *
1043
0564                         *
1044
0565 F3B1 B6 01 01                   LDA  TRACK
1045
0566 F3B4 F6 01 02                   LDB  SECTOR
1046
0567 F3B7 5C                         INCB
1047
0568                         *
1048
0569 F3B8 8E 02 00           UXLOOP  LDX  #BUFFER
1049
0570 F3BB B7 01 01                   STA  TRACK
1050
0571 F3BE F7 01 02                   STB  SECTOR
1051
0572                         *
1052
0573 F3C1 17 00 4C                   LBSR XREAD
1053
0574 F3C4 10 25 00 42                LBCS UXERR
1054
0575 F3C8 17 00 E9                   LBSR XACK
1055
0576 F3CB 17 00 42                   LBSR XREAD
1056
0577 F3CE 10 25 00 38                LBCS UXERR
1057
0578                         *
1058
0579 F3D2 8E 02 00                   LDX  #BUFFER
1059
0580 F3D5 B6 01 01                   LDA  TRACK
1060
0581 F3D8 F6 01 02                   LDB  SECTOR
1061
0582 F3DB 17 01 37                   LBSR WRITSC
1062
0583 F3DE 17 00 D3                   LBSR XACK
1063
0584                         *
1064
0585 F3E1 B6 01 01                   LDA  TRACK
1065
0586 F3E4 F6 01 02                   LDB  SECTOR
1066
0587 F3E7 5C                         INCB
1067
0588 F3E8 F1 01 0C                   CMPB MAXSEC
1068
0589 F3EB 26 CB                      BNE  UXLOOP
1069
0590 F3ED C6 01                      LDB  #1
1070
0591 F3EF 4C                         INCA
1071
0592 F3F0 B1 01 0B                   CMPA MAXTRK
1072
0593 F3F3 26 C3                      BNE  UXLOOP
1073
0594                         *
1074
0595                         *
1075
0596                         *  Write Boot sector
1076
0597                         *
1077
0598 F3F5 8E F7 00                   LDX  #BOOT
1078
0599 F3F8 4F                         CLRA         TRACK 0
1079
0600 F3F9 C6 01                      LDB  #$01    SECTOR 1
1080
0601 F3FB B7 01 01                   STA  TRACK
1081
0602 F3FE F7 01 02                   STB  SECTOR
1082
0603 F401 17 01 11                   LBSR WRITSC
1083
0604                         *
1084
0605 F404 8E F2 73           UXEXIT  LDX  #UXMES1
1085
0606 F407 7E F2 53                   JMP  PDATA1
1086
0607                         *
1087
0608 F40A 8E F2 85           UXERR   LDX  #UXMES2
1088
0609 F40D 16 FE 43                   LBRA PDATA1
1089
0610                         *
1090
0611                         * Get a Byte using XModem protocol
1091
0612                         * Carry clear => no errors
1092
0613                         * Carry set   => errors
1093
0614                         *
1094
0615 F410 34 40              XREAD   PSHS U
1095
0616 F412 FE 01 06                   LDU  XSTATE
1096
0617                         *
1097
0618 F415 17 FD EF           XBYTE0  LBSR INTER
1098
0619 F418 28 0A                      BVC  XBYTE1
1099
0620 F41A 86 15                      LDA  #NAK
1100
0621 F41C 17 FE 1B                   LBSR OUTTER
1101
0622 F41F CE F4 2D                   LDU  #XSTST
1102
0623 F422 20 F1                      BRA  XBYTE0
1103
0624                         *
1104
0625 F424 AD C4              XBYTE1  JSR  ,U
1105
0626 F426 26 ED                      BNE  XBYTE0
1106
0627 F428 FF 01 06                   STU  XSTATE
1107
0628 F42B 35 C0                      PULS U,PC
1108
0629                         *
1109
0630                         * START - LOOK FOR SOH (START OF HEADER) = $01
1110
0631                         *
1111
0632 F42D 81 01              XSTST   CMPA #SOH
1112
0633 F42F 26 06                      BNE  XSTST1
1113
0634 F431 CE F4 4D                   LDU  #XSTBL
1114
0635 F434 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1115
0636 F436 39                         RTS
1116
0637                         *
1117
0638 F437 81 04              XSTST1  CMPA #EOT
1118
0639 F439 26 08                      BNE  XSTST2
1119
0640 F43B 86 06                      LDA  #ACK
1120
0641 F43D 17 FD FA                   LBSR OUTTER
1121
0642 F440 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
1122
0643 F442 39                         RTS
1123
0644                         *
1124
0645 F443 81 18              XSTST2  CMPA #CAN
1125
0646 F445 26 03                      BNE  XSTST3
1126
0647 F447 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
1127
0648 F449 39                         RTS
1128
0649                         *
1129
0650 F44A 1C FA              XSTST3  ANDCC #$FF-CFLAG-ZFLAG
1130
0651 F44C 39                         RTS
1131
0652                         *
1132
0653                         * Got SOH
1133
0654                         * Now get block number
1134
0655                         *
1135
0656 F44D B1 01 04           XSTBL   CMPA BLKNUM
1136
0657 F450 26 06                      BNE  XSTBLE
1137
0658 F452 CE F4 63                   LDU  #XSTCOM
1138
0659 F455 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1139
0660 F457 39                         RTS
1140
0661                         *
1141
0662                         * Error in block number
1142
0663                         *
1143
0664 F458 86 15              XSTBLE  LDA  #NAK
1144
0665 F45A 17 FD DD                   LBSR OUTTER
1145
0666 F45D CE F4 2D                   LDU  #XSTST
1146
0667 F460 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1147
0668 F462 39                         RTS
1148
0669                         *
1149
0670                         * Get complement of block number
1150
0671                         *
1151
0672 F463 43                 XSTCOM  COMA
1152
0673 F464 B1 01 04                   CMPA BLKNUM
1153
0674 F467 26 EF                      BNE  XSTBLE
1154
0675 F469 7F 01 03                   CLR  CHKSUM
1155
0676 F46C 86 80                      LDA  #128
1156
0677 F46E B7 01 05                   STA  BYTCNT
1157
0678 F471 CE F4 77                   LDU  #XSTDA
1158
0679 F474 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
1159
0680 F476 39                         RTS
1160
0681                         *
1161
0682                         * Get data bytes
1162
0683                         *
1163
0684 F477 34 02              XSTDA   PSHS A
1164
0685 F479 BB 01 03                   ADDA CHKSUM
1165
0686 F47C B7 01 03                   STA  CHKSUM
1166
0687 F47F 35 02                      PULS A
1167
0688 F481 7A 01 05                   DEC  BYTCNT
1168
0689 F484 26 03                      BNE  XSTDA1
1169
0690 F486 CE F4 8E                   LDU  #XSTCK
1170
0691 F489 A7 80              XSTDA1  STA  ,X+
1171
0692 F48B 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1172
0693 F48D 39                         RTS
1173
0694                         *
1174
0695                         * Byte count reached zero
1175
0696                         * Check checksum byte
1176
0697                         *
1177
0698 F48E B1 01 03           XSTCK   CMPA CHKSUM
1178
0699 F491 26 0B                      BNE  XSTCK1 retry if wrong checksum
1179
0700                         *
1180
0701                         * Checksum OK ...
1181
0702                         * increment block number
1182
0703                         * Don't send ACK until data written to CF
1183
0704                         *
1184
0705 F493 7C 01 04                   INC  BLKNUM
1185
0706 F496 CE F4 2D                   LDU  #XSTST
1186
0707 F499 1C FE                      ANDCC #$FF-CFLAG No abort
1187
0708 F49B 1A 04                      ORCC #ZFLAG      Valid data (exit)
1188
0709 F49D 39                         RTS
1189
0710                         *
1190
0711                         * Checksum Error detected ...
1191
0712                         * Reset Sector counter in ACCB to last 128 byte boundary
1192
0713                         * and send NAK
1193
0714                         *
1194
0715 F49E 34 04              XSTCK1  PSHS B
1195
0716 F4A0 1F 10                      TFR  X,D
1196
0717 F4A2 5A                         DECB
1197
0718 F4A3 C4 80                      ANDB #128
1198
0719 F4A5 1F 01                      TFR  D,X
1199
0720 F4A7 35 04                      PULS B
1200
0721 F4A9 86 15                      LDA  #NAK
1201
0722 F4AB 17 FD 8C           XSTCK2  LBSR OUTTER
1202
0723 F4AE CE F4 2D                   LDU  #XSTST
1203
0724 F4B1 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
1204
0725 F4B3 39                         RTS
1205
0726                         *
1206
0727                         * Acknowledge Data Received
1207
0728                         *
1208
0729 F4B4 34 02              XACK    PSHS A
1209
0730 F4B6 86 06                      LDA  #ACK
1210
0731 F4B8 17 FD 7F                   LBSR OUTTER
1211
0732 F4BB 35 82                      PULS A,PC
1212
0733                         *
1213
0734                         *
1214
0735                         ** FLEX 9 IDE DISK DRIVERS
1215
0736                         *
1216
0737                         * FOR SYS09BUG 1.2 ON THE XSA-3S1000
1217
0738                         * WITH I/O MAPPED AT $XE000
1218
0739                         * AND ROM MAPPED AT $XF000
1219
0740                         *
1220
0741                         *
1221
0742                         * INITIALIZE CF CARD FOR 8 BIT LBA MODE
1222
0743                         *
1223
0744 F4BD CC 00 06           INITDR LDD #AUXRESET
1224
0745 F4C0 FD E1 1E                  STD CF_AUX
1225
0746 F4C3 CC 00 02                  LDD #AUXRSTREL
1226
0747 F4C6 FD E1 1E                  STD CF_AUX
1227
0748 F4C9 CC 00 E0                  LDD  #HEADLBA
1228
0749 F4CC FD E1 0C                  STD  CF_HEAD
1229
0750 F4CF 16 02 D6                  LBRA WTRDY
1230
0751                         *
1231
0752                         * RESTORE DISK DRIVER (SEEK TRACK 00)
1232
0753                         *
1233
0754 F4D2 8D 66              RESTR1 BSR   DRVSEL
1234
0755 F4D4 4F                        CLRA           ; Track 0
1235
0756 F4D5 C6 01                     LDB   #$01     ; Sector 1
1236
0757                         *
1237
0758                         * Seek track and sector
1238
0759                         * A holds track number (0 - ??)
1239
0760                         * B holds sector number (1 - ??)
1240
0761                         * Sector numbers starts from 1
1241
0762                         * subtract 1 to start from sector 0 on CF
1242
0763                         *
1243
0764 F4D7 34 02              SEEKTS PSHS A
1244
0765 F4D9 4F                        CLRA
1245
0766 F4DA 5A                        DECB
1246
0767 F4DB FD E1 06                  STD  CF_SECNUM
1247
0768 F4DE E6 E4                     LDB ,S
1248
0769 F4E0 FD E1 08                  STD  CF_CYLLO
1249
0770 F4E3 F6 01 00                  LDB  DRVNUM
1250
0771 F4E6 FD E1 0A                  STD  CF_CYLHI
1251
0772 F4E9 C6 01                     LDB  #$01
1252
0773 F4EB FD E1 04                  STD  CF_SECCNT
1253
0774 F4EE 5F                        CLRB
1254
0775 F4EF 35 82                     PULS A,PC
1255
0776                         *
1256
0777                         * READ SECTORS FROM CF
1257
0778                         *
1258
0779                         *
1259
0780 F4F1 8D E4              READSC BSR  SEEKTS
1260
0781 F4F3 CC 00 20                  LDD  #CMDREAD ; IDE READ MULTIPLE
1261
0782 F4F6 FD E1 0E                  STD  CF_COMAND
1262
0783 F4F9 17 02 AC                  LBSR  WTRDY
1263
0784                         *
1264
0785                         * READ LOOP
1265
0786                         *
1266
0787 F4FC 34 20                     PSHS Y
1267
0788 F4FE 10 8E 01 00               LDY #256
1268
0789 F502 17 02 B2           RDLP1  LBSR  WTDRQ
1269
0790 F505 FC E1 00                  LDD  CF_DATA
1270
0791 F508 E7 80                     STB  ,X+
1271
0792 F50A 31 3F                     LEAY -1,Y
1272
0793 F50C 26 F4                     BNE  RDLP1
1273
0794 F50E 35 20                     PULS Y
1274
0795                         *
1275
0796 F510 17 02 95                  LBSR  WTRDY
1276
0797 F513 5F                        CLRB
1277
0798 F514 39                        RTS
1278
0799                         *
1279
0800                         * WRITE SECTOR TO CF
1280
0801                         *
1281
0802 F515 8D C0              WRITSC BSR  SEEKTS   ; SEEK TRACK & SECTOR
1282
0803 F517 CC 00 30                  LDD  #CMDWRITE ; IDE WRITE MULTIPLE
1283
0804 F51A FD E1 0E                  STD  CF_COMAND
1284
0805 F51D 17 02 88                  LBSR  WTRDY
1285
0806                         *
1286
0807                         * WRITE LOOP
1287
0808                         *
1288
0809 F520 34 20                     PSHS Y
1289
0810 F522 10 8E 01 00               LDY #256
1290
0811 F526 4F                        CLRA
1291
0812 F527 17 02 8D           WRTLP1 LBSR  WTDRQ
1292
0813 F52A E6 80                     LDB  ,X+
1293
0814 F52C FD E1 00                  STD  CF_DATA
1294
0815 F52F 31 3F                     LEAY -1,Y
1295
0816 F531 26 F4                     BNE  WRTLP1
1296
0817 F533 35 20                     PULS Y
1297
0818                         *
1298
0819 F535 17 02 70                  LBSR  WTRDY
1299
0820 F538 5F                        CLRB
1300
0821 F539 39                        RTS
1301
0822                         *
1302
0823                         * DRIVE SELECT DISK DRIVER
1303
0824                         *
1304
0825 F53A A6 03              DRVSEL LDA   3,X       GET DRIVE # FROM FCB
1305
0826 F53C 81 03                     CMPA  #3
1306
0827 F53E 23 01                     BLS   DRVS2     IF > 3, SET IT TO 0
1307
0828 F540 4F                        CLRA
1308
0829 F541 B7 01 00           DRVS2  STA   DRVNUM
1309
0830 F544 5F                        CLRB            ; SET Z, CLEAR C
1310
0831 F545 39                        RTS
1311
0832                         *
1312
0833                         * CHECK DRIVE READY DISK DRIVER
1313
0834                         *
1314
0835 F546 A6 03              CHKDRV LDA  3,X
1315
0836 F548 5F                        CLRB             ; CLEAR C, SET Z
1316
0837 F549 39                        RTS
1317
0838                         *******************************************************
1318
0839                         *
1319
0840                         * Bootstrap FLEX Loader
1320
0841                         *
1321
0842                         * SBUG1.8 loads the bootstap loader at $C000
1322
0843                         * however the Flex adaption manual has the
1323
0844                         * bootstrap loader residing at $C100
1324
0845                         * Bootstrap Loader is position independent code
1325
0846                         *
1326
0847                         ******************************************************
1327
0848                         *
1328
0849                         * Equates
1329
0850                         *
1330
0851 C0FF                    BSSTACK EQU $C0FF
1331
0852 C300                    SCTBUF  EQU $C300
1332
0853                         *
1333
0854                         * Start of Utility
1334
0855                         *
1335
0856 F700                            ORG MONEXT+$0700
1336
0857 F700 20 0B              BOOT    BRA BLOAD0
1337
0858 F702 00 00 00                   FCB 0,0,0
1338
0859 F705 00                 TRK     FCB 0        File start track
1339
0860 F706 00                 SCT     FCB 0        File start sector
1340
0861 F707 00                 DNS     FCB 0        Density Flag (not used)
1341
0862 F708 C0 00              TADR    FDB $C000    Transfer address
1342
0863 F70A 00 00              LADR    FDB 0        Load Address
1343
0864 F70C 00                 DRNUM   FCB 0        Drive number 0
1344
0865                         *
1345
0866 F70D 10 CE C0 FF        BLOAD0  LDS  #BSSTACK   Set up Bootstrap stack
1346
0867 F711 EC 8C F1                   LDD  TRK,PCR    Set up start track and sector
1347
0868 F714 FD C3 00                   STD  SCTBUF
1348
0869 F717 10 8E C4 00                LDY  #SCTBUF+256
1349
0870                         *
1350
0871                         * Perform actual file load
1351
0872                         *
1352
0873 F71B 8D 35              BLOAD1  BSR GETCH    Get acharcater
1353
0874 F71D 81 02                      CMPA #$02    Data record hearder ?
1354
0875 F71F 27 10                      BEQ  BLOAD2   Skip, is so
1355
0876 F721 81 16                      CMPA #$16    Xfr address hearder ?
1356
0877 F723 26 F6                      BNE BLOAD1    Loop if neither
1357
0878                         *
1358
0879                         * Get transfer address
1359
0880                         *
1360
0881 F725 8D 2B                      BSR  GETCH
1361
0882 F727 A7 8C DE                   STA  TADR,PCR
1362
0883 F72A 8D 26                      BSR  GETCH
1363
0884 F72C A7 8C DA                   STA  TADR+1,PCR
1364
0885 F72F 20 EA                      BRA  BLOAD1
1365
0886                         *
1366
0887                         * Load data record
1367
0888                         *
1368
0889 F731 8D 1F              BLOAD2 BSR  GETCH  Get load address
1369
0890 F733 A7 8C D4                  STA  LADR,PCR
1370
0891 F736 8D 1A                     BSR  GETCH
1371
0892 F738 A7 8C D0                  STA  LADR+1,PCR
1372
0893 F73B 8D 15                     BSR  GETCH  Get Bytes count
1373
0894 F73D 1F 89                     TFR  A,B
1374
0895 F73F 5D                        TSTB
1375
0896 F740 27 D9                     BEQ  BLOAD1 Loop if count = 0
1376
0897 F742 AE 8C C5                  LDX  LADR,PCR  Get load address
1377
0898 F745 34 14              BLOAD3 PSHS B,X
1378
0899 F747 8D 09                     BSR  GETCH  Get data character
1379
0900 F749 35 14                     PULS B,X
1380
0901 F74B A7 80                     STA  ,X+    Store at load address
1381
0902 F74D 5A                        DECB
1382
0903 F74E 26 F5                     BNE  BLOAD3  Loop until count = 0
1383
0904 F750 20 C9                     BRA  BLOAD1
1384
0905                         *
1385
0906                         * Get Character routine
1386
0907                         * Reads a sector if needed
1387
0908                         *
1388
0909 F752 10 8C C4 00        GETCH  CMPY #SCTBUF+256 out of data ?
1389
0910 F756 26 0F                     BNE  GETCH4      Go read Character if not
1390
0911 F758 8E C3 00           GETCH2 LDX  #SCTBUF     Point to buffer
1391
0912 F75B EC 84                     LDD  0,X         Get forward Link
1392
0913 F75D 27 0B                     BEQ  GOFLEX      if zero, file is loaded
1393
0914 F75F 8D 26                     BSR  READ        Read next sector
1394
0915 F761 26 9D                     BNE  BOOT        start over if error
1395
0916 F763 10 8E C3 04               LDY  #SCTBUF+4   Point past link
1396
0917 F767 A6 A0              GETCH4 LDA  ,Y+         Else, get a character
1397
0918 F769 39                        RTS
1398
0919                         *
1399
0920                         * File is loaded, Jump to it
1400
0921                         *
1401
0922 F76A 6E 9C 9B           GOFLEX JMP  [TADR,PCR]      Jump to transfer address
1402
0923
1403
0924                         *
1404
0925                         ** FLEX 9 IDE DISK DRIVERS
1405
0926                         *
1406
0927                         * Seek track and sector
1407
0928                         * A holds track number (0 - ??)
1408
0929                         * B holds sector number (1 - ??)
1409
0930                         * Sector numbers starts from 1
1410
0931                         * subtract 1 to start from sector 0 on CF
1411
0932                         *
1412
0933 F76D 34 02              SEEK   PSHS A
1413
0934 F76F 4F                        CLRA
1414
0935 F770 5A                        DECB
1415
0936 F771 FD E1 06                  STD  CF_SECNUM
1416
0937 F774 E6 E4                     LDB  ,S
1417
0938 F776 FD E1 08                  STD  CF_CYLLO
1418
0939 F779 E6 8C 90                  LDB  DRNUM,PCR
1419
0940 F77C FD E1 0A                  STD  CF_CYLHI
1420
0941 F77F C6 01                     LDB  #$01
1421
0942 F781 FD E1 04                  STD  CF_SECCNT
1422
0943 F784 5F                        CLRB
1423
0944 F785 35 82                     PULS A,PC
1424
0945                         *
1425
0946                         * READ SECTORS FROM CF
1426
0947                         *
1427
0948                         *
1428
0949 F787 8D E4              READ   BSR  SEEK
1429
0950 F789 CC 00 20                  LDD  #CMDREAD ; IDE READ MULTIPLE
1430
0951 F78C FD E1 0E                  STD  CF_COMAND
1431
0952 F78F 8D 17                     BSR  WTRDY
1432
0953                         *
1433
0954                         * READ LOOP
1434
0955                         *
1435
0956 F791 34 20                     PSHS Y
1436
0957 F793 10 8E 01 00               LDY #256
1437
0958 F797 8D 1E              READ1  BSR  WTDRQ
1438
0959 F799 FC E1 00                  LDD  CF_DATA
1439
0960 F79C E7 80                     STB  ,X+
1440
0961 F79E 31 3F                     LEAY -1,Y
1441
0962 F7A0 26 F5                     BNE  READ1
1442
0963 F7A2 35 20                     PULS Y
1443
0964                         *
1444
0965 F7A4 8D 02                     BSR  WTRDY
1445
0966 F7A6 5F                        CLRB
1446
0967 F7A7 39                        RTS
1447
0968                         *
1448
0969                         * WAIT UNTIL READY
1449
0970                         *
1450
0971 F7A8 FC E1 0E           WTRDY   LDD  CF_STATUS
1451
0972 F7AB C5 80                      BITB #BUSY
1452
0973 F7AD 26 F9                      BNE  WTRDY
1453
0974 F7AF FC E1 0E                   LDD  CF_STATUS
1454
0975 F7B2 C5 40                      BITB #DRDY
1455
0976 F7B4 27 F2                      BEQ  WTRDY
1456
0977 F7B6 39                         RTS
1457
0978                         *
1458
0979                         * WAIT FOR DATA REQUEST
1459
0980                         *
1460
0981 F7B7 FC E1 0E           WTDRQ   LDD  CF_STATUS
1461
0982 F7BA C5 08                      BITB #DRQ
1462
0983 F7BC 27 F9                      BEQ  WTDRQ
1463
0984 F7BE 39                         RTS
1464
0985                         *
1465
0004                                END
1466
0000                          INCLUDE "sys09bug.txt"
1467
0001                         * NAM SYS09BUG12 SYSTEM09 MONITOR
1468
0002                          OPT l
1469
 
1470
 
1471
sys09bug.txt                                                                      page   3
1472
0004                         *
1473
0005                         * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL
1474
0006                         * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY....
1475
0007                         *
1476
0008                         * ALLEN CLARK            WALLACE WATSON
1477
0009                         * 2502 REGAL OAKS LANE   4815 EAST 97th AVE.
1478
0010                         * LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617
1479
0011                         * PH. 813-977-0347       PH. 813-985-1359
1480
0012                         *
1481
0013                         * MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT
1482
0014                         *                                 2561 NANTUCKET DR APT. E
1483
0015                         *                                 ATLANTA, GA  30345
1484
0016                         *                                 PH. 404-320-1043
1485
0017                         *
1486
0018                         * MODIFIED TO SYS09BUG VER 1.0
1487
0019                         * FOR:     SYSTEM09 FPGA SYSTEM
1488
0020                         * BY:      JOHN KENT
1489
0021                         * DATE:    21ST NOVEMBER 2006
1490
0022                         * REMOVED: DISK BOOTS
1491
0023                         *          MEMORY TEST
1492
0024                         * ADDED:   ADM3A VDU DRIVER
1493
0025                         *
1494
0026                         * MODIFIED TO SYS09BUG VER 1.1
1495
0027                         * FOR:     SYSTEM09 FPGA SYSTEM
1496
0028                         * BY:      JOHN KENT
1497
0029                         * DATE:    7TH JANUARY 2007
1498
0030                         * ADDED:   'U' USER EXTENTION COMMANDS AT $F000
1499
0031                         *          CONDITIONAL ASSEMBLY OF FLOPPY BOOTS
1500
0032                         *          AND REALTIME CLOCK
1501
0033                         *
1502
0034                         * MODIFIED TO SYS09BUG VER 1.2
1503
0035                         * FOR:     SYSTEM09 FPGA SYSTEM
1504
0036                         * BY:      JOHN KENT
1505
0037                         * DATE:    21ST MAY 2007
1506
0038                         * ADDED:   COMPACT FLASH BOOT TO FPGA VERSION
1507
0039                         *          REMOVED PORT REDIRECTION ON PUNCH & LOAD
1508
0040                         *
1509
0041                         * Modified to SYS09BUG VER 1.3
1510
0042                         * FOR:     SYSTEM09 FPGA SYSTEM
1511
0043                         * BY:      JOHN KENT
1512
0044                         * DATE:    8TH JAN 2008
1513
0045                         * ADDED:   CONDITIONALS FOR SPARTAN3E STARTER BOARD
1514
0046                         *          WITH ONLY 32K OF RAM
1515
0047                         *
1516
0048                         * Modified to SYS09BUG VER 1.4
1517
0049                         * FOR:     SYSTEM09 FPGA SYSTEM
1518
0050                         * BY:      JOHN KENT
1519
0051                         * DATE:    3RD FEB 2008
1520
0052                         * ADDED:   CONDITIONALS FOR XESS BOARD WITH IDE
1521
0053                         *          SEPERATE CONDITIONAL FOR S3 STARTER AND B5-X300
1522
0054                         *          16 BIT IDE DISK BOOT STRAP ROUTINE
1523
0055                         * CHANGED: SEPARARTED OPTIONS EQUATES AND BODY INTO SEPARATE FILES
1524
0056                         *
1525
0057                         *       *** COMMANDS ***
1526
0058                         *
1527
0059                         * CONTROL A   = ALTER THE "A" ACCUMULATOR
1528
0060                         * CONTROL B   = ALTER THE "B" ACCUMULATOR
1529
0061                         * CONTROL C   = ALTER THE CONDITION CODE REGISTER
1530
0062                         * CONTROL D   = ALTER THE DIRECT PAGE REGISTER
1531
0063                         * CONTROL P   = ALTER THE PROGRAM COUNTER
1532
0064                         * CONTROL U   = ALTER USER STACK POINTER
1533
0065                         * CONTROL X   = ALTER "X" INDEX REGISTER
1534
0066                         * CONTROL Y   = ALTER "Y" INDEX REGISTER
1535
0067                         * B hhhh      = SET BREAKPOINT AT LOCATION $hhhh
1536
0068                         * D           = 5.25" MINIFLOPPY BOOT
1537
0069                         * E ssss-eeee = EXAMINE MEMORY
1538
0070                         *               FROM STARTING ADDRESS ssss
1539
0071                         *               TO ENDING ADDRESS eeee.
1540
0072                         * G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI
1541
0073                         * L           = LOAD TAPE
1542
0074                         * M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh
1543
0075                         * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR.
1544
0076                         * R           = DISPLAY REGISTER CONTENTS
1545
0077                         * S           = DISPLAY STACK FROM ssss TO $DFC0
1546
0078                         * U           = 8" DMAF2 FLOPPY BOOT
1547
0079                         * U           = USER EXTENSION COMMANDS AT $F000
1548
0080                         * X           = REMOVE ALL BREAKPOINTS
1549
0081                         *
1550
0082                         *
1551
0083                         ***************************************************
1552
0084                         *   SYS09BUG VARIABLE SPACE
1553
0085                         ***************************************************
1554
0086                         *
1555
0087 DFC0                            ORG   MONRAM
1556
0088 DFC0                    STACK   EQU   *  TOP OF INTERNAL STACK
1557
0089 DFC0                    NMI     RMB   2  USER NMI VECTOR
1558
0090 DFC2                    SWI3    RMB   2  SOFTWARE INTERRUPT VECTOR #3
1559
0091 DFC4                    SWI2    RMB   2  SOFTWARE INTERRUPT VECTOR #2
1560
0092 DFC6                    FIRQ    RMB   2  FAST INTERRUPT VECTOR
1561
0093 DFC8                    IRQ     RMB   2  INTERRUPT VECTOR
1562
0094 DFCA                    SWI     RMB   2  SOFTWARE INTERRUPT VECTOR
1563
0095 DFCC                    SVCVO   RMB   2  SUPERVISOR CALL VECTOR ORGIN
1564
0096 DFCE                    SVCVL   RMB   2  SUPERVISOR CALL VECTOR LIMIT
1565
0097                                 IFD DATOPT
1566
0098 DFD0                    LRARAM  RMB   16 LRA ADDRESSES
1567
0099                                 ENDIF DATOPT
1568
0100 DFE0                    CPORT   RMB   2  RE-VECTORABLE CONTROL PORT
1569
0101 DFE2                    ECHO    RMB   1  ECHO FLAG
1570
0102 DFE3                    BPTBL   RMB   24 BREAKPOINT TABLE BASE ADDR
1571
0103                                 IFD  TRAOPT
1572
0104                         NMISAV  RMB 2 NMI Jump Vector Backup
1573
0105                         TRACNT  RMB 2 Trace Count
1574
0106                                 ENDIF TRAOPT
1575
0106                                 ENDIF TRAOPT
1576
0107                                 IFD VDUOPT
1577
0108                         *
1578
0109                         **************************************************
1579
0110                         *   VDU8 DISPLAY DRIVER VARIABLES                                    *
1580
0111                         **************************************************
1581
0112                         *
1582
0113                         **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ******
1583
0114 DFFB                    COLADX  RMB   1         CURSOR COLUMN
1584
0115 DFFC                    ROWADX  RMB   1         CURSOR ROW
1585
0116                         **************************************************
1586
0117                         *
1587
0118 DFFD                    NEWROW  RMB   1         NEW ROW TEMP FOR ESCAPE
1588
0119 DFFE                    ESCFLG  RMB   1         ESCAPE SEQUENCE ACTIVE
1589
0120                                 ENDIF VDUOPT
1590
0121                                IFD DG640OPT
1591
0122                         *
1592
0123                         ***************************************************
1593
0124                         *   DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES  *
1594
0125                         ***************************************************
1595
0126                         *
1596
0127                         ***** ALWAYS KEEP THESE TWO BYTES TOGETHER *****
1597
0128                         COLADX  RMB   1           CURSOR COLUMN
1598
0129                         ROWADX  RMB   1           CURSOR ROW
1599
0130                         *************************************************
1600
0131                         CURSOR  RMB   2           ABSOLUTE SCREEN ADDRESS
1601
0132                         NEWROW  RMB   1           NEW ROW TEMP FOR ESCAPE
1602
0133                         ESCFLG  RMB   1           ESCAPE SEQUENCE ACTIVE
1603
0134                                 ENDIF DG640OPT
1604
0134                                 ENDIF DG640OPT
1605
0135                         *
1606
0136                         *
1607
0137                         ***************************************************
1608
0138                         *   START OF ROM                                  *
1609
0139                         ***************************************************
1610
0140                         *
1611
0141 F800                            ORG   MONROM
1612
0142 F800 F8 14                      FDB   MONITOR
1613
0143 F802 F8 61                      FDB   NEXTCMD
1614
0144 F804 FC A1                      FDB   INCH
1615
0145 F806 FC 9B                      FDB   INCHE
1616
0146 F808 FC B9                      FDB   INCHEK
1617
0147 F80A FC CE                      FDB   OUTCH
1618
0148 F80C FB 8F                      FDB   PDATA
1619
0149 F80E FB 1E                      FDB   PCRLF
1620
0150 F810 FB 1A                      FDB   PSTRNG
1621
0151 F812 FA 2E                      FDB   LRA
1622
0152                         *
1623
0153                                 IFD ADSOPT
1624
0154                                 FDB PCHK  CHECK FOR PRINTER INPUT
1625
0155                                 FDB PINIZ INITIATE PRINTER
1626
0156                                 FDB POUTCH OUTPUT CH. TO PRINTER
1627
0157                                 FDB VINIZ
1628
0158                                 FDB VOUTCH
1629
0159                                 FDB ACINIZ
1630
0160                                 FDB AOUTCH
1631
0161                                 ENDIF ADSOPT
1632
0161                                 ENDIF ADSOPT
1633
0162                         *
1634
0163                         * MONITOR
1635
0164                         *
1636
0165                         * VECTOR ADDRESS STRING IS.....
1637
0166                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
1638
0167                         *
1639
0168 F814 8E FE 74           MONITOR LDX   #RAMVEC POINT TO VECTOR ADDR. STRING
1640
0169 F817 10 8E DF C0                LDY   #STACK  POINT TO RAM VECTOR LOCATION
1641
0170 F81B C6 10                      LDB   #$10    BYTES TO MOVE = 16
1642
0171 F81D A6 80              LOOPA   LDA   ,X+     GET VECTOR BYTE
1643
0172 F81F A7 A0                      STA   ,Y+     PUT VECTORS IN RAM / $DFC0-$DFCF
1644
0173 F821 5A                         DECB          SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
1645
0174 F822 26 F9                      BNE   LOOPA   CONTINUE UNTIL ALL VECTORS MOVED
1646
0175                         *
1647
0176                         * CONTENTS     FROM         TO      FUNCTION
1648
0177                         *  $F8A1       $FE40      $DFC0     USER-V
1649
0178                         *  $F8A1       $FE42      $DFC2     SWI3-V
1650
0179                         *  $F8A1       $FE44      $DFC4     SWI2-V
1651
0180                         *  $F8A1       $FE46      $DFC6     FIRQ-V
1652
0181                         *  $F8A1       $FE48      $DFC8     IRQ-V
1653
0182                         *  $FAB0       $FE4A      $DFCA     SWI-V
1654
0183                         *  $FFFF       $FE4C      $DFCC     SVC-VO
1655
0184                         *  $FFFF       $FE4E      $DFCE     SVC-VL
1656
0185                         *
1657
0186 F824 8E E0 00                   LDX  #ACIAS
1658
0187 F827 BF DF E0                   STX  CPORT    STORE ADDR. IN RAM
1659
0188 F82A 17 01 5B                   LBSR XBKPNT   CLEAR OUTSTANDING BREAKPOINTS
1660
0189 F82D C6 0C                      LDB  #12      CLEAR 12 BYTES ON STACK
1661
0190 F82F 6F E2              CLRSTK  CLR  ,-S
1662
0191 F831 5A                         DECB
1663
0192 F832 26 FB                      BNE  CLRSTK
1664
0193 F834 30 8C DD                   LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY
1665
0194 F837 AF 6A                      STX  10,S    ON STACK
1666
0195 F839 86 D0                      LDA  #$D0    PRESET CONDITION CODES ON STACK
1667
0196 F83B A7 E4                      STA  ,S
1668
0197 F83D 1F 43                      TFR  S,U
1669
0198 F83F 17 04 9F                   LBSR IOINIZ  INITIALIZE CONTROL PORT
1670
0199 F842 8E FE 84                   LDX  #MSG1   POINT TO MONITOR MESSAGE
1671
0200 F845 17 03 47                   LBSR PDATA   PRINT MSG
1672
0201                         *
1673
0202                                 IFD DATOPT
1674
0203 F848 8E DF D0                   LDX  #LRARAM POINT TO LRA RAM STORAGE AREA
1675
0204 F84B 4F                         CLRA START   TOTAL AT ZERO
1676
0205 F84C C6 0D                      LDB  #13     TOTAL UP ALL ACTIVE RAM MEMORY
1677
0206 F84E 6D 85              FNDREL  TST  B,X     TEST FOR RAM AT NEXT LOC.
1678
0207 F850 27 03                      BEQ  RELPAS  IF NO RAM GO TO NEXT LOC.
1679
0208 F852 8B 04                      ADDA #4      ELSE ADD 4K TO TOTAL
1680
0209 F854 19                         DAA          ADJ. TOTAL FOR DECIMAL
1681
0210 F855 5A                 RELPAS  DECB         SUB. 1 FROM LOCS. TO TEST
1682
0211 F856 2A F6                      BPL  FNDREL  PRINT TOTAL OF RAM
1683
0212 F858 17 04 0C                   LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
1684
0213 F85B 8E FE A3                   LDX  #MSG2   POINT TO MSG 'K' CR/LF + 3 NULS
1685
0214 F85E 17 03 2E                   LBSR PDATA   PRINT MSG
1686
0215                                 ENDIF DATOPT
1687
0216                         *
1688
0217                                 IFD TRAOPT
1689
0218                                 LBSR TRAINZ
1690
0219                                 ENDIF TRAOPT
1691
0219                                 ENDIF TRAOPT
1692
0220                         *
1693
0221                         ***** NEXTCMD *****
1694
0222                         *
1695
0223 F861 8E FE AA           NEXTCMD LDX  #MSG3   POINT TO MSG ">"
1696
0224 F864 17 02 B3                   LBSR PSTRNG  PRINT MSG
1697
0225 F867 17 04 37                   LBSR INCH    GET ONE CHAR. FROM TERMINAL
1698
0226 F86A 84 7F                      ANDA #$7F    STRIP PARITY FROM CHAR.
1699
0227 F86C 81 0D                      CMPA #$0D    IS IT CARRIAGE RETURN ?
1700
0228 F86E 27 F1                      BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR.
1701
0229 F870 1F 89                      TFR  A,B     PUT CHAR. IN "B" ACCUM.
1702
0230 F872 81 20                      CMPA #$20    IS IT CONTROL OR DATA CHAR ?
1703
0231 F874 2C 09                      BGE  PRTCMD  IF CMD CHAR IS DATA, PRNT IT
1704
0232 F876 86 5E                      LDA  #'^     ELSE CNTRL CHAR CMD SO...
1705
0233 F878 17 04 53                   LBSR OUTCH   PRINT "^"
1706
0234 F87B 1F 98                      TFR  B,A     RECALL CNTRL CMD CHAR
1707
0235 F87D 8B 40                      ADDA #$40    CONVERT IT TO ASCII LETTER
1708
0236 F87F 17 04 4C           PRTCMD  LBSR OUTCH   PRNT CMD CHAR
1709
0237 F882 17 04 47                   LBSR OUT1S   PRNT SPACE
1710
0238 F885 C1 60                      CMPB #$60
1711
0239 F887 2F 02                      BLE  NXTCH0
1712
0240 F889 C0 20                      SUBB #$20
1713
0241                         *
1714
0242                         ***** DO TABLE LOOKUP *****
1715
0243                         *   FOR COMMAND FUNCTIONS
1716
0244                         *
1717
0245 F88B 8E FE 3B           NXTCH0  LDX  #JMPTAB POINT TO JUMP TABLE
1718
0246 F88E E1 80              NXTCHR  CMPB ,X+     DOES COMMAND MATCH TABLE ENTRY ?
1719
0247 F890 27 0F                      BEQ  JMPCMD  BRANCH IF MATCH FOUND
1720
0248 F892 30 02                      LEAX 2,X     POINT TO NEXT ENTRY IN TABLE
1721
0249 F894 8C FE 74                   CMPX #TABEND REACHED END OF TABLE YET ?
1722
0250 F897 26 F5                      BNE  NXTCHR  IF NOT END, CHECK NEXT ENTRY
1723
0251 F899 8E FE AC                   LDX  #MSG4   POINT TO MSG "WHAT?"
1724
0252 F89C 17 02 F0                   LBSR PDATA   PRINT MSG
1725
0253 F89F 20 C0                      BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD
1726
0254 F8A1 AD 94              JMPCMD  JSR  [,X]    JUMP TO COMMAND ROUTINE
1727
0255 F8A3 20 BC                      BRA  NEXTCMD PROMPT FOR NEW COMMAND
1728
0256                         *
1729
0257                         * "G" GO OR CONTINUE
1730
0258                         *
1731
0259 F8A5 1F 34              GO      TFR  U,S
1732
0260 F8A7 3B                 RTI     RTI
1733
0261                         *
1734
0262                         ***** "M" MEMORY EXAMINE AND CHANGE *****
1735
0263                         *
1736
0264 F8A8 17 03 6B           MEMCHG  LBSR IN1ADR  INPUT ADDRESS
1737
0265 F8AB 29 2D                      BVS  CHRTN   IF NOT HEX, RETURN
1738
0266 F8AD 1F 12                      TFR  X,Y     SAVE ADDR IN "Y"
1739
0267 F8AF 8E FE B2           MEMC2   LDX  #MSG5   POINT TO MSG " - "
1740
0268 F8B2 17 02 65                   LBSR PSTRNG  PRINT MSG
1741
0269 F8B5 1F 21                      TFR  Y,X     FETCH ADDRESS
1742
0270 F8B7 17 03 A5                   LBSR OUT4H   PRINT ADDR IN HEX
1743
0271 F8BA 17 04 0F                   LBSR OUT1S   OUTPUT SPACE
1744
0272 F8BD A6 A4                      LDA  ,Y      GET CONTENTS OF CURRENT ADDR.
1745
0273 F8BF 17 03 A5                   LBSR OUT2H   OUTPUT CONTENTS IN ASCII
1746
0274 F8C2 17 04 07                   LBSR OUT1S   OUTPUT SPACE
1747
0275 F8C5 17 03 5E                   LBSR BYTE    LOOP WAITING FOR OPERATOR INPUT
1748
0276 F8C8 28 11                      BVC  CHANGE  IF VALID HEX GO CHANGE MEM. LOC.
1749
0277 F8CA 81 08                      CMPA #8      IS IT A BACKSPACE (CNTRL H)?
1750
0278 F8CC 27 E1                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
1751
0279 F8CE 81 18                      CMPA #$18    IS IT A CANCEL (CNTRL X)?
1752
0280 F8D0 27 DD                      BEQ  MEMC2   PROMPT OPERATOR AGAIN
1753
0281 F8D2 81 5E                      CMPA #'^     IS IT AN UP ARROW?
1754
0282 F8D4 27 17                      BEQ  BACK    DISPLAY PREVIOUS BYTE
1755
0283 F8D6 81 0D                      CMPA #$D     IS IT A CR?
1756
0284 F8D8 26 0F                      BNE  FORWRD  DISPLAY NEXT BYTE
1757
0285 F8DA 39                 CHRTN   RTS          EXIT ROUTINE
1758
0286                         *
1759
0287                         *
1760
0288 F8DB A7 A4              CHANGE  STA  ,Y      CHANGE BYTE IN MEMORY
1761
0289 F8DD A1 A4                      CMPA ,Y      DID MEMORY BYTE CHANGE?
1762
0290 F8DF 27 08                      BEQ  FORWRD  $F972
1763
0291 F8E1 17 03 E8                   LBSR OUT1S   OUTPUT SPACE
1764
0292 F8E4 86 3F                      LDA  #'?     LOAD QUESTION MARK
1765
0293 F8E6 17 03 E5                   LBSR OUTCH   PRINT IT
1766
0294 F8E9 31 21              FORWRD  LEAY 1,Y     POINT TO NEXT HIGHER MEM LOCATION
1767
0295 F8EB 20 C2                      BRA  MEMC2   PRINT LOCATION & CONTENTS
1768
0296 F8ED 31 3F              BACK    LEAY -1,Y    POINT TO LAST MEM LOCATION
1769
0297 F8EF 20 BE                      BRA  MEMC2   PRINT LOCATION & CONTENTS
1770
0298                         *
1771
0299                         * "S" DISPLAY STACK
1772
0300                         * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM
1773
0301                         ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT.
1774
0302                         *
1775
0303 F8F1 17 02 A2           DISSTK  LBSR PRTSP   PRINT CURRENT STACK POINTER
1776
0304 F8F4 1F 32                      TFR  U,Y
1777
0305 F8F6 8E DF C0                   LDX  #STACK  LOAD INTERNAL STACK AS UPPER LIMIT
1778
0306 F8F9 30 1F                      LEAX -1,X    POINT TO CURRENT STACK
1779
0307 F8FB 20 05                      BRA  MDUMP1  ENTER MEMORY DUMP OF STACK CONTENTS
1780
0308                         *
1781
0309                         * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII
1782
0310                         * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG.
1783
0311                         *                        UPPER ADDRESS IN X-REG.
1784
0312                         * IF HEX ADDRESSES ARE INVALID (V)=1.
1785
0313                         *
1786
0314 F8FD 17 03 0B           MEMDUMP LBSR IN2ADR  INPUT ADDRESS BOUNDRIES
1787
0315 F900 29 06                      BVS  EDPRTN  NEW COMMAND IF ILLEGAL HEX
1788
0316 F902 34 20              MDUMP1  PSHS Y       COMPARE LOWER TO UPPER BOUNDS
1789
0317 F904 AC E1                      CMPX ,S++    LOWER BOUNDS > UPPER BOUNDS?
1790
0318 F906 24 01                      BCC  AJDUMP  IF NOT, DUMP HEX AND ASCII
1791
0319 F908 39                 EDPRTN  RTS ;
1792
0320                         *
1793
0321                         * ADJUST LOWER AND UPPER ADDRESS LIMITS
1794
0322                         * TO EVEN 16 BYTE BOUNDRIES.
1795
0323                         *
1796
0324                         * IF LOWER ADDR = $4532
1797
0325                         * LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
1798
0326                         *
1799
0327                         * IF UPPER ADDR = $4567
1800
0328                         * UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
1801
0329                         *
1802
0330                         * ENTER WITH LOWER ADDRESS IN X-REG.
1803
0331                         *           -UPPER ADDRESS ON TOP OF STACK.
1804
0332                         *
1805
0333 F909 1F 10              AJDUMP  TFR  X,D     GET UPPER ADDR IN D-REG
1806
0334 F90B C3 00 10                   ADDD #$10    ADD 16 TO UPPER ADDRESS
1807
0335 F90E C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
1808
0336 F910 34 06                      PSHS A,B     SAVE ON STACK AS UPPER DUMP LIMIT
1809
0337 F912 1F 20                      TFR  Y,D     $F9A5 GET LOWER ADDRESS IN D-REG
1810
0338 F914 C4 F0                      ANDB #$F0    MASK TO EVEN 16 BYTE BOUNDRY
1811
0339 F916 1F 01                      TFR  D,X     PUT IN X-REG AS LOWER DUMP LIMIT
1812
0340 F918 AC E4              NXTLIN  CMPX ,S      COMPARE LOWER TO UPPER LIMIT
1813
0341 F91A 27 05                      BEQ  SKPDMP  IF EQUAL SKIP HEX-ASCII DUMP
1814
0342 F91C 17 03 9A                   LBSR INCHEK  CHECK FOR INPUT FROM KEYBOARD
1815
0343 F91F 27 03                      BEQ  EDUMP
1816
0344 F921 32 62              SKPDMP  LEAS 2,S     READJUST STACK IF NOT DUMPING
1817
0345 F923 39                         RTS          ;
1818
0346                         *
1819
0347                         * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
1820
0348                         * FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
1821
0349                         *
1822
0350 F924 34 10              EDUMP   PSHS X       PUSH LOWER ADDR LIMIT ON STACK
1823
0351 F926 8E FE B2                   LDX  #MSG5   POINT TO MSG " - "
1824
0352 F929 17 01 EE                   LBSR PSTRNG  PRINT MSG
1825
0353 F92C AE E4                      LDX  ,S      LOAD LOWER ADDR FROM TOP OF STACK
1826
0354 F92E 17 03 2E                   LBSR OUT4H   PRINT THE ADDRESS
1827
0355 F931 17 03 96                   LBSR OUT2S   2 SPACES
1828
0356 F934 C6 10                      LDB  #$10    LOAD COUNT OF 16 BYTES TO DUMP
1829
0357 F936 A6 80              ELOOP   LDA  ,X+     GET FROM MEMORY HEX BYTE TO PRINT
1830
0358 F938 17 03 2C                   LBSR OUT2H   OUTPUT HEX BYTE AS ASCII
1831
0359 F93B 17 03 8E                   LBSR OUT1S   OUTPUT SPACE
1832
0360 F93E 5A                         DECB         $F9D1 DECREMENT BYTE COUNT
1833
0361 F93F 26 F5                      BNE  ELOOP   CONTINUE TIL 16 HEX BYTES PRINTED
1834
0362                         *
1835
0363                         * PRINT 16 ASCII CHARACTERS
1836
0364                         * IF NOT PRINTABLE OR NOT VALID
1837
0365                         * ASCII PRINT A PERIOD (.)
1838
0366 F941 17 03 86                   LBSR OUT2S   2 SPACES
1839
0367 F944 AE E1                      LDX  ,S++    GET LOW LIMIT FRM STACK - ADJ STACK
1840
0368 F946 C6 10                      LDB  #$10    SET ASCII CHAR TO PRINT = 16
1841
0369 F948 A6 80              EDPASC  LDA  ,X+     GET CHARACTER FROM MEMORY
1842
0370 F94A 81 20                      CMPA #$20    IF LESS THAN $20, NON-PRINTABLE?
1843
0371 F94C 25 04                      BCS  PERIOD  IF SO, PRINT PERIOD INSTEAD
1844
0372 F94E 81 7E                      CMPA #$7E    IS IT VALID ASCII?
1845
0373 F950 23 02                      BLS  PRASC   IF SO PRINT IT
1846
0374 F952 86 2E              PERIOD  LDA  #'.     LOAD A PERIOD (.)
1847
0375 F954 17 03 77           PRASC   LBSR OUTCH   PRINT ASCII CHARACTER
1848
0376 F957 5A                         DECB         DECREMENT COUNT
1849
0377 F958 26 EE                      BNE  EDPASC
1850
0378 F95A 20 BC                      BRA  NXTLIN
1851
0379                         *
1852
0380                         ***** "B" SET BREAKPOINT *****
1853
0381                         *
1854
0382 F95C 17 02 B7           BRKPNT  LBSR IN1ADR  GET BREAKPOINT ADDRESS
1855
0383 F95F 29 1E                      BVS  EXITBP  EXIT IF INVALID HEX ADDR.
1856
0384 F961 8C DF C0                   CMPX #STACK  ADDRESS ILLEGAL IF >=$DFC0
1857
0385 F964 24 1A                      BCC  BPERR   IF ERROR PRINT (?), EXIT
1858
0386 F966 34 10                      PSHS X       $FA82 PUSH BP ADDRESS ON STACK
1859
0387 F968 8E FF FF                   LDX  #$FFFF  LOAD DUMMY ADDR TO TEST BP TABLE
1860
0388 F96B 8D 55                      BSR BPTEST   TEST BP TABLE FOR FREE SPACE
1861
0389 F96D 35 10                      PULS X       POP BP ADDRESS FROM STACK
1862
0390 F96F 27 0F                      BEQ  BPERR   (Z) SET, OUT OF BP TABLE SPACE
1863
0391 F971 A6 84                      LDA  ,X      GET DATA AT BREAKPOINT ADDRESS
1864
0392 F973 81 3F                      CMPA #$3F    IS IT A SWI?
1865
0393 F975 27 09                      BEQ  BPERR   IF SWI ALREADY, INDICATE ERROR
1866
0394 F977 A7 A0                      STA  ,Y+     SAVE DATA BYTE IN BP TABLE
1867
0395 F979 AF A4                      STX  ,Y      SAVE BP ADDRESS IN BP TABLE
1868
0396 F97B 86 3F                      LDA  #$3F    LOAD A SWI ($3F)
1869
0397 F97D A7 84                      STA  ,X      SAVE SWI AT BREAKPOINT ADDRESS
1870
0398 F97F 39                 EXITBP  RTS ;
1871
0399                         *
1872
0400                         *  INDICATE ERROR SETTING BREAKPOINT
1873
0401                         *
1874
0402 F980 17 03 49           BPERR   LBSR OUT1S   OUTPUT SPACE
1875
0403 F983 86 3F                      LDA  #'?     LOAD (?), INDICATE BREAKPOINT ERROR
1876
0404 F985 16 03 46                   LBRA OUTCH   PRINT "?"
1877
0405                         *
1878
0406                         *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
1879
0407                         *
1880
0408 F988 10 8E DF E3        XBKPNT  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
1881
0409 F98C C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
1882
0410 F98E 8D 18              XBPLP   BSR  RPLSWI  REMOVE USED ENTRY IN BP TABLE
1883
0411 F990 5A                         DECB  $FAAC  DECREMENT BP COUNTER
1884
0412 F991 26 FB                      BNE  XBPLP   END OF BREAKPOINT TABLE?
1885
0413 F993 39                         RTS
1886
0414                         *
1887
0415                         ***** SWI ENTRY POINT *****
1888
0416                         *
1889
0417 F994 1F 43              SWIE    TFR  S,U     TRANSFER STACK TO USER POINTER
1890
0418 F996 AE 4A                      LDX  10,U    LOAD PC FROM STACK INTO X-REG
1891
0419 F998 30 1F                      LEAX -1,X    ADJUST ADDR DOWN 1 BYTE.
1892
0420 F99A 8D 26                      BSR  BPTEST  FIND BREAKPOINT IN BP TABLE
1893
0421 F99C 27 04                      BEQ  REGPR   IF FOUND, REPLACE DATA AT BP ADDR
1894
0422 F99E AF 4A                      STX  10,U    SAVE BREAKPOINT ADDR IN STACK
1895
0423 F9A0 8D 06                      BSR  RPLSWI  GO REPLACE SWI WITH ORIGINAL DATA
1896
0424 F9A2 17 02 48           REGPR   LBSR REGSTR  GO PRINT REGISTERS
1897
0425                         *
1898
0426                                 IFD TRAOPT
1899
0427                                 LDX #0
1900
0428                                 STX TRACNT
1901
0429                                 ENDIF TRAOPT
1902
0429                                 ENDIF TRAOPT
1903
0430                         *
1904
0431 F9A5 16 FE B9                   LBRA NEXTCMD GET NEXT COMMAND
1905
0432                         *
1906
0433 F9A8 AE 21              RPLSWI  LDX  1,Y     LOAD BP ADDRESS FROM BP TABLE
1907
0434 F9AA 8C DF C0                   CMPX #STACK  COMPARE TO TOP AVAILABLE USER MEMORY
1908
0435 F9AD 24 0A                      BCC  FFSTBL  GO RESET TABLE ENTRY TO $FF'S
1909
0436 F9AF A6 84                      LDA  ,X      GET DATA FROM BP ADDRESS
1910
0437 F9B1 81 3F                      CMPA #$3F    IS IT SWI?
1911
0438 F9B3 26 04                      BNE  FFSTBL  IF NOT, RESET TABLE ENTRY TO $FF'S
1912
0439 F9B5 A6 A4                      LDA  ,Y      GET ORIGINAL DATA FROM BP TABLE
1913
0440 F9B7 A7 84                      STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS
1914
0441 F9B9 86 FF              FFSTBL  LDA  #$FF    LOAD $FF IN A-ACC
1915
0442 F9BB A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE DATA TO $FF'S
1916
0443 F9BD A7 A0                      STA  ,Y+     RESET BREAKPOINT TABLE ADDR TO $FF'S
1917
0444 F9BF A7 A0                      STA  ,Y+
1918
0445 F9C1 39                         RTS
1919
0446                         *
1920
0447                         ** SEARCH BREAKPOINT TABLE FOR MATCH **
1921
0448                         *
1922
0449 F9C2 10 8E DF E3        BPTEST  LDY  #BPTBL  POINT TO BREAKPOINT TABLE
1923
0450 F9C6 C6 08                      LDB  #8      LOAD BREAKPOINT COUNTER
1924
0451 F9C8 A6 A0              FNDBP   LDA  ,Y+     LOAD DATA BYTE
1925
0452 F9CA AC A1                      CMPX ,Y++    COMPARE ADDRESS, IS IT SAME?
1926
0453 F9CC 27 04                      BEQ  BPADJ   IF SO, ADJUST POINTER FOR TABLE ENTRY
1927
0454 F9CE 5A                         DECB         IF NOT, DECREMENT BREAKPOINT COUNTER
1928
0455 F9CF 26 F7                      BNE  FNDBP   AND LOOK FOR NEXT POSSIBLE MATCH
1929
0456 F9D1 39                         RTS ;
1930
0457                         *
1931
0458                         *
1932
0459 F9D2 31 3D              BPADJ   LEAY -3,Y    MOVE POINTER TO BEGIN OF BP ENTRY
1933
0460 F9D4 39                         RTS
1934
0461                         *
1935
0462                                 IFD TRAOPT
1936
0463                         *
1937
0464                         ** TRACE from address AAAA BB bytes
1938
0465                         *
1939
0466                         TRACE   LBSR ALTPC1 SET UP NEW PC
1940
0467                                 BVS TREXIT ADDRESS ERROR, EXIT
1941
0468                                 LBSR OUT1S
1942
0469                                 LBSR IN1ADR Fetch Byte Count
1943
0470                                 BVS TREXIT Byte Count error, EXIT
1944
0471                                 STX TRACNT
1945
0472                         *
1946
0473                                 LDX NMI Save NMI Vector
1947
0474                                 STX NMISAV
1948
0475                                 LDX #NMIE Set up NMI for Tracing
1949
0476                                 STX NMI
1950
0477                                 LBSR TRAINZ   Initialise Hardware
1951
0478                                 BRA TRACEG    Start Trace
1952
0479                         TREXIT  RTS
1953
0480                         *
1954
0481                         * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
1955
0482                         * CRA1 = 1 CA1 Rising edge IRQ
1956
0483                         * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
1957
0484                         * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
1958
0485                         * CRA4 = 1 ] CA2 = Set/Reset output
1959
0486                         * CRA5 = 1 ]
1960
0487                         * CRA6 = X CA2 Input Interrupt Flag
1961
0488                         * CRA7 = X CA1 Interrupt Flag
1962
0489                         *
1963
0490                         * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
1964
0491                         * CRB1 = 1 CB1 Rising edge IRQ
1965
0492                         * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
1966
0493                         * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
1967
0494                         * CRB4 = 1 ] CB2 = Set/Reset output
1968
0495                         * CRB5 = 1 ]
1969
0496                         * CRB6 = X CB2 Input Interrupt Flag
1970
0497                         * CRB7 = X CB1 Interrupt Flag
1971
0498                         *
1972
0499                         *
1973
0500                         ** TRACE NMI ENTRY POINT
1974
0501                         *
1975
0502                         NMIE    TFR S,U
1976
0503                                 LDA #$36         Disable Interrupt, CA2 Low
1977
0504                                 STA TACTRL
1978
0505                                 LDA TADATA       Clear Interrupt flag by reading data port
1979
0506                         *
1980
0507                                 LBSR REGSTR       DUMP REGISTERS
1981
0508                         *
1982
0509                                 LDX 10,U         TEST IF NEXT INSTRUCTION IS A SWI
1983
0510                                 LDA ,X
1984
0511                                 CMPA #$3F
1985
0512                                 BEQ TRACEX       EXIT ON SWI
1986
0513                         *
1987
0514                                 LDX TRACNT       CHECK IF TRACE COUNT EXPIRED
1988
0515                                 BEQ TRACEX       YES, GO BACK TO THE MONITOR
1989
0516                                 LEAX -1,X        DECREMENT TRACE COUNT
1990
0517                                 STX TRACNT
1991
0518                         *
1992
0519                         **  TRACE GO (RESUME SINGLE STEP)
1993
0520                         *
1994
0521                         TRACEG  TFR U,S          SET UP PROGRAM STACK POINTER
1995
0522                                 LDA #TRADEL      SET UP TIMER DELAY (NUMB CYCLES FOR RTI+1)
1996
0523                                 STA TADATA
1997
0524                                 LDA #$36         LOAD STROBE LOW
1998
0525                                 STA TACTRL
1999
0526                                 LDA TADATA       CLEAR INTERRUPT
2000
0527                                 LDA #$36         RELEASE RESET
2001
0528                                 STA TBCTRL
2002
0529                                 LDA #$3F         RELEASE LOAD, ENABLE CA1 NMI, CA1 RISING EDGE
2003
0530                                 STA TACTRL
2004
0531                                 RTI              GO EXECUTE INSTRUCTION
2005
0532                         *
2006
0533                         TRACEX  LDX NMISAV       Restore NMI vector
2007
0534                                 STX NMI
2008
0535                                 LBRA NEXTCMD     Jump back to the command loop.
2009
0536                         *
2010
0537                         ** TRACE HARDWARE INITIALISATION
2011
0538                         *
2012
0539                         TRAINZ  LDA #$32         SELECT DDRA, CA2 LOW, NMI DISABLED
2013
0540                                 STA TACTRL
2014
0541                                 LDA #$3A         SELECT DDRB, CB2 HIGH, FIRQ DISABLED
2015
0542                                 STA TBCTRL
2016
0543                                 LDA #$FF         PORTA = OUTPUT
2017
0544                                 STA TADATA
2018
0545                                 LDA #$00         PORTB = INPUT
2019
0546                                 STA TBDATA
2020
0547                                 LDA #$36         SELECT OUTPUT REGISTER A, CA2 LOW
2021
0548                                 STA TACTRL
2022
0549                                 LDA #$3E         SELECT OUTPUT REGISTER B, CB2 HIGH
2023
0550                                 STA TBCTRL
2024
0551                                 RTS
2025
0552                         *
2026
0553                                 ENDIF TRAOPT
2027
0553                                 ENDIF TRAOPT
2028
0554                                 IFD  MFDCOPT
2029
0555                         *
2030
0556                         ** "U" MINI DISK BOOT
2031
0557                         *
2032
0558                         MINBOOT TST  CMDFDC
2033
0559                                 CLR  DRVFDC
2034
0560                                 LDX  #$0000
2035
0561                         LOOP    LEAX $01,X
2036
0562                                 CMPX #$0000
2037
0563                                 BNE  LOOP
2038
0564                                 LDA  #$0F
2039
0565                                 STA  CMDFDC
2040
0566                                 BSR  DELAY
2041
0567                         LOOP1   LDB  CMDFDC
2042
0568                                 BITB #$01
2043
0569                                 BNE  LOOP1
2044
0570                                 LDA  #$01
2045
0571                                 STA  SECFDC
2046
0572                                 BSR  DELAY
2047
0573                                 LDA  #$8C
2048
0574                                 STA  CMDFDC
2049
0575                                 BSR  DELAY
2050
0576                                 LDX  #$C000
2051
0577                                 BRA  LOOP3
2052
0578                         LOOP2   BITB #$02
2053
0579                                 BEQ  LOOP3
2054
0580                                 LDA  DATFDC
2055
0581                                 STA ,X+
2056
0582                         LOOP3   LDB  CMDFDC
2057
0583                                 BITB #$01
2058
0584                                 BNE  LOOP2
2059
0585                                 BITB #$2C
2060
0586                                 BEQ  LOOP4
2061
0587                                 RTS
2062
0588                         *
2063
0589                         LOOP4   LDX  #$C000
2064
0590                                 STX  $0A,U
2065
0591                                 TFR  U,S
2066
0592                                 RTI
2067
0593                         *
2068
0594                         DELAY   LDB  #$04
2069
0595                         LOOP5   DECB
2070
0596                                 BNE  LOOP5
2071
0597                                 RTS
2072
0598                                 ENDIF MFDCOPT
2073
0598                                 ENDIF MFDCOPT
2074
0599                         *
2075
0600                                 IFD  DMAFOPT
2076
0601                         *
2077
0602                         *** "D" DISK BOOT FOR DMAF2 ***
2078
0603                         *
2079
0604                         DBOOT   LDA  #$DE
2080
0605                                 STA  DRVREG
2081
0606                                 LDA  #$FF
2082
0607                                 STA  PRIREG     $FAF8
2083
0608                                 STA  CCREG
2084
0609                                 STA  AAAREG
2085
0610                                 STA  BBBREG
2086
0611                                 TST  CCREG
2087
0612                                 LDA  #$D8
2088
0613                                 STA  COMREG
2089
0614                                 LBSR DLY
2090
0615                         DBOOT0  LDA  COMREG
2091
0616                                 BMI  DBOOT0
2092
0617                                 LDA  #$09
2093
0618                                 STA  COMREG
2094
0619                                 LBSR DLY
2095
0620                         *
2096
0621                         DISKWT  LDA  COMREG FETCH DRIVE STATUS
2097
0622                                 BITA #1 TEST BUSY BIT
2098
0623                                 BNE  DISKWT LOOP UNTIL NOT BUSY
2099
0624                         *
2100
0625                                 BITA #$10
2101
0626                                 BNE  DBOOT
2102
0627                         *
2103
0628                                 LDX  #$C000 LOGICAL ADDR. = $C000
2104
0629                                 BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
2105
0630                                 ORA  #$10
2106
0631                                 STA  CCCREG
2107
0632                                 TFR  X,D
2108
0633                                 COMA  ;
2109
0634                                 COMB  ;
2110
0635                                 STD  ADDREG
2111
0636                                 LDX  #$FEFF LOAD DMA BYTE COUNT = $100
2112
0637                                 STX  CNTREG STORE IN COUNT REGISTER
2113
0638                                 LDA  #$FF LOAD THE CHANNEL REGISTER
2114
0639                                 STA  CCREG
2115
0640                                 LDA  #$FE SET CHANNEL 0
2116
0641                                 STA  PRIREG
2117
0642                                 LDA  #1 SET SECTOR TO "1"
2118
0643                                 STA  SECREG ISSUE COMMAND
2119
0644                                 LDA  #$8C SET SINGLE SECTOR READ
2120
0645                                 STA  COMREG ISSUE COMMAND
2121
0646                                 BSR DLY
2122
0647                         *
2123
0648                         * THE FOLLOWING CODE TESTS THE STATUS OF THE
2124
0649                         * CHANNEL CONTROL REGISTER. IF "D7" IS NOT
2125
0650                         * ZERO THEN IT WILL LOOP WAITING FOR "D7"
2126
0651                         * TO GO TO ZERO. IF AFTER 65,536 TRIES IT
2127
0652                         * IS STILL A ONE THE BOOT OPERATION WILL
2128
0653                         * BE STARTED OVER FROM THE BEGINING.
2129
0654                         *
2130
0655                                 CLRB  ;
2131
0656                         DBOOT1  PSHS B     $FB55
2132
0657                                 CLRB  ;
2133
0658                         DBOOT2  TST  CCREG
2134
0659                                 BPL  DBOOT3
2135
0660                                 DECB  ;
2136
0661                                 BNE  DBOOT2
2137
0662                                 PULS B
2138
0663                                 DECB
2139
0664                                 BNE  DBOOT1
2140
0665                                 BRA  DBOOT
2141
0666                         DBOOT3  PULS B
2142
0667                                 LDA  COMREG
2143
0668                                 BITA #$1C
2144
0669                                 BEQ  DBOOT4
2145
0670                                 RTS  ;
2146
0671                         *
2147
0672                         *
2148
0673                         DBOOT4  LDB  #$DE
2149
0674                                 STB  DRVREG
2150
0675                                 LDX  #$C000
2151
0676                                 STX  10,U
2152
0677                                 TFR  U,S    $FB7B
2153
0678                                 RTI  ;
2154
0679                                 ENDIF DMAFOPT
2155
0679                                 ENDIF DMAFOPT
2156
0680                         *
2157
0681                                 IFD CF8OPT
2158
0682                         *
2159
0683                         * COMPACT FLASH BOOT
2160
0684                         *
2161
0685                         CFBOOT  BSR  WAITRDY
2162
0686                                 LDA  #HEADLBA
2163
0687                                 STA  CF_HEAD
2164
0688                                 BSR  WAITRDY
2165
0689                                 LDA  #FEAT8BIT
2166
0690                                 STA  CF_FEATURE
2167
0691                                 LDA  #CMDFEATURE
2168
0692                                 STA  CF_COMAND
2169
0693                                 BSR  WAITRDY
2170
0694                         *
2171
0695                         * READ SECTORS FROM CF
2172
0696                         *
2173
0697                         CFREAD  LDA  #$01
2174
0698                                 STA  CF_SECCNT
2175
0699                                 CLRA
2176
0700                                 STA  CF_SECNUM
2177
0701                                 STA  CF_CYLLO
2178
0702                                 STA  CF_CYLHI
2179
0703                         *
2180
0704                                 LDA  #CMDREAD ; IDE READ MULTIPLE
2181
0705                                 STA  CF_COMAND
2182
0706                                 BSR  WAITRDY
2183
0707                                 LDX  #$C000
2184
0708                         *
2185
0709                         * READ LOOP
2186
0710                         *
2187
0711                         RDLOOP  BSR  WAITDRQ
2188
0712                                 LDA  CF_DATA
2189
0713                                 STA  ,X+
2190
0714                                 CMPX #$C200
2191
0715                                 BNE  RDLOOP
2192
0716                         *
2193
0717                                 LDX  #$C000
2194
0718                                 STX  $0A,U
2195
0719                                 TFR  U,S
2196
0720                                 RTI
2197
0721                         *
2198
0722                         * WAIT UNTIL READY
2199
0723                         *
2200
0724                         WAITRDY LDA  CF_STATUS
2201
0725                                 BITA #BUSY
2202
0726                                 BNE  WAITRDY
2203
0727                                 LDA  CF_STATUS
2204
0728                                 BITA #DRDY
2205
0729                                 BEQ  WAITRDY
2206
0730                                 RTS
2207
0731                         *
2208
0732                         * WAIT FOR DATA REQUEST
2209
0733                         *
2210
0734                         WAITDRQ LDA  CF_STATUS
2211
0735                                 BITA #DRQ
2212
0736                                 BEQ  WAITDRQ
2213
0737                                 RTS
2214
0738                                 ENDIF CF8OPT
2215
0738                                 ENDIF CF8OPT
2216
0739                         *
2217
0740                                 IFD IDEOPT
2218
0741                         *
2219
0742                         * XESS 16 BIT IDE BOOT
2220
0743                         *
2221
0744 F9D5 CC 00 06           IDEBOOT LDD  #AUXRESET
2222
0745 F9D8 FD E1 1E                   STD  CF_AUX
2223
0746 F9DB CC 00 02                   LDD #AUXRSTREL
2224
0747 F9DE FD E1 1E                   STD CF_AUX
2225
0748 F9E1 CC 00 E0                   LDD  #HEADLBA
2226
0749 F9E4 FD E1 0C                   STD  CF_HEAD
2227
0750 F9E7 8D 2E                      BSR  WAITRDY
2228
0751                         *
2229
0752                         * READ SECTORS FROM CF
2230
0753                         *
2231
0754 F9E9 CC 00 01                   LDD  #$01
2232
0755 F9EC FD E1 04                   STD  CF_SECCNT
2233
0756 F9EF 5F                         CLRB
2234
0757 F9F0 FD E1 06                   STD  CF_SECNUM
2235
0758 F9F3 FD E1 08                   STD  CF_CYLLO
2236
0759 F9F6 FD E1 0A                   STD  CF_CYLHI
2237
0760                         *
2238
0761 F9F9 C6 20                      LDB  #CMDREAD ; IDE READ MULTIPLE
2239
0762 F9FB FD E1 0E                   STD  CF_COMAND
2240
0763 F9FE 8D 17                      BSR  WAITRDY
2241
0764 FA00 8E C0 00                   LDX  #$C000
2242
0765                         *
2243
0766                         * READ LOOP
2244
0767                         *
2245
0768 FA03 8D 21              RDLOOP  BSR  WAITDRQ
2246
0769 FA05 FC E1 00                   LDD  CF_DATA
2247
0770 FA08 E7 80                      STB  ,X+
2248
0771 FA0A 8C C1 00                   CMPX #$C100
2249
0772 FA0D 26 F4                      BNE  RDLOOP
2250
0773                         *
2251
0774 FA0F 8E C0 00                   LDX  #$C000
2252
0775 FA12 AF 4A                      STX  $0A,U
2253
0776 FA14 1F 34                      TFR  U,S
2254
0777 FA16 3B                         RTI
2255
0778                         *
2256
0779                         * WAIT UNTIL READY
2257
0780                         *
2258
0781 FA17 FC E1 0E           WAITRDY LDD  CF_STATUS
2259
0782 FA1A C5 80                      BITB #BUSY
2260
0783 FA1C 26 F9                      BNE  WAITRDY
2261
0784 FA1E FC E1 0E                   LDD  CF_STATUS
2262
0785 FA21 C5 40                      BITB #DRDY
2263
0786 FA23 27 F2                      BEQ  WAITRDY
2264
0787 FA25 39                         RTS
2265
0788                         *
2266
0789                         * WAIT FOR DATA REQUEST
2267
0790                         *
2268
0791 FA26 FC E1 0E           WAITDRQ LDD  CF_STATUS
2269
0792 FA29 C5 08                      BITB #DRQ
2270
0793 FA2B 27 F9                      BEQ  WAITDRQ
2271
0794 FA2D 39                         RTS
2272
0795                                 ENDIF IDEOPT
2273
0796                         *
2274
0797                                 IFD RTCOPT
2275
0798                         *
2276
0799                         * CLOCK INTER FACE UTILITY
2277
0800                         *
2278
0801                         * TIME   
2279
0802                         * If no argument is specified, the current time
2280
0803                         * will be displayed.
2281
0804                         *
2282
0805                         * READ A REGISTER FROM THE COUNTER.
2283
0806                         * The X Index rgister points to the register
2284
0807                         * to be read. The Status Register is checked
2285
0808                         * before and after the register is read before
2286
0809                         * returning a value in accumulator A
2287
0810                         *
2288
0811                         RDCLK  TST CLKSTA
2289
0812                                BNE RDCLK
2290
0813                         RDCLK1 LDA 0,X
2291
0814                                TST CLKSTA
2292
0815                                BNE RDCLK1
2293
0816                                RTS
2294
0817                         *
2295
0818                         * MAIN PROGRAM:
2296
0819                         *
2297
0820                         TIMSET LDX #COUNTR POINT TO TIMER
2298
0821                               LBSR BYTE READ HOURS
2299
0822                               BVS  SHOWTM NO ARG, DISP TIME
2300
0823                               STA HOUR,X
2301
0824                               LBSR OUT1S
2302
0825                               LBSR BYTE READ MINUITES
2303
0826                               BVS  SHOWTM
2304
0827                               STA MINUIT,X
2305
0828                               LBSR OUT1S
2306
0829                               LBSR BYTE SECONDS.
2307
0830                               BVS SHOWTM
2308
0831                               STA SECOND,X
2309
0832                         *
2310
0833                         * DISPLAY CURRENT TIME
2311
0834                         *
2312
0835                         SHOWTM LBSR PCRLF
2313
0836                                LDX #COUNTR+HOUR
2314
0837                                LDB #3
2315
0838                         SHOWLP BSR RDCLK
2316
0839                                LBSR OUT2H
2317
0840                                LDA #':
2318
0841                                LBSR OUTCH
2319
0842                                LEAX -1,X
2320
0843                                DECB
2321
0844                                BNE SHOWLP
2322
0845                                RTS
2323
0846                         *
2324
0847                         * INITIATE CLOCK.
2325
0848                         * MASK INTERRUPTS.
2326
0849                         *
2327
0850                         CLKINZ CLR CINTCR  MASK ALL INTERRUPTS
2328
0851                                TST CINTSR  CLEAR ANY INTERRUPTS
2329
0852                                RTS
2330
0853                                ENDIF RTCOPT
2331
0853                                ENDIF RTCOPT
2332
0854                                IFD DATOPT
2333
0855                         *
2334
0856                         ***** LRA LOAD REAL ADDRESS *****
2335
0857                         *
2336
0858                         * THE FOLLOWING CODE LOADS THE 20-BIT
2337
0859                         * PHYSICAL ADDRESS OF A MEMORY BYTE
2338
0860                         * INTO THE "A" AND "X" REGISTERS. THIS
2339
0861                         * ROUTINE IS ENTERED WITH THE LOGICAL
2340
0862                         * ADDRESS OF A MEMORY BYTE IN THE "IX"
2341
0863                         * REGISTER. EXIT IS MADE WITH THE HIGH-
2342
0864                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL
2343
0865                         * ADDRESS IN THE "A" REGISTER, AND THE
2344
0866                         * LOW-ORDER 16-BITS OF THE 20-BIT
2345
0867                         * PHYSICAL ADDRESS IN THE "IX" REGISTER.
2346
0868                         * ALL OTHER REGISTERS ARE PRESERVED.
2347
0869                         * THIS ROUTINE IS REQUIRED SINCE THE
2348
0870                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST
2349
0871                         * PRESENT PHYSICAL ADDRESSES ON THE
2350
0872                         * SYSTEM BUS.
2351
0873                         *
2352
0874 FA2E 34 36              LRA     PSHS A,B,X,Y PUSH REGISTERS ON STACK
2353
0875 FA30 A6 62                      LDA  2,S     GET MSB LOGICAL ADDR FRM X REG ON STACK
2354
0876 FA32 44                         LSRA         ;
2355
0877 FA33 44                         LSRA         ADJ FOR INDEXED INTO
2356
0878 FA34 44                         LSRA         CORRESPONDING LOCATION
2357
0879 FA35 44                         LSRA         IN LRA TABLE
2358
0880 FA36 10 8E DF D0                LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS
2359
0881 FA3A E6 A6                      LDB  A,Y     GET PHYSICAL ADDR. DATA FROM LRA TABLE
2360
0882 FA3C 54                         LSRB         ADJ. REAL ADDR. TO REFLECT EXTENDED
2361
0883 FA3D 54                         LSRB         PHYSICAL ADDRESS.
2362
0884 FA3E 54                         LSRB         EXTENDED MS 4-BITS ARE RETURNED
2363
0885 FA3F 54                         LSRB         IN THE "A" ACCUMULATOR
2364
0886 FA40 E7 E4                      STB  ,S      MS 4 BITS IN A ACCUM. STORED ON STACK
2365
0887 FA42 E6 A6                      LDB  A,Y     LOAD REAL ADDRESS DATA FROM LRA TABLE
2366
0888 FA44 53                         COMB         COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
2367
0889 FA45 58                         ASLB         ADJ DATA FOR RELOCATION IN X REG
2368
0890 FA46 58                         ASLB         ;
2369
0891 FA47 58                         ASLB         $FB97
2370
0892 FA48 58                         ASLB         ;
2371
0893 FA49 A6 62                      LDA  2,S     GET MS BYTE OF LOGICAL ADDR.
2372
0894 FA4B 84 0F                      ANDA #$0F    MASK MS NIBBLE OF LOGICAL ADDRESS
2373
0895 FA4D A7 62                      STA  2,S     SAVE IT IN X REG ON STACK
2374
0896 FA4F EA 62                      ORB  2,S     SET MS BYTE IN X REG TO ADJ PHY ADDR.
2375
0897                         *
2376
0898                         * PLUS LS NIBBLE OF LOGICAL ADDRESS
2377
0899 FA51 E7 62                      STB  2,S     SAVE AS LS 16 BITS OF PHY ADDR IN X REG
2378
0900                         * ON STACK
2379
0901 FA53 35 B6                      PULS A,B,X,Y,PC POP REGS. FROM STACK
2380
0902                                 ENDIF DATOPT
2381
0903                         *
2382
0904                         * DELAY LOOP
2383
0905                         *
2384
0906 FA55 34 04              DLY     PSHS B       SAVE CONTENTS OF "B"
2385
0907 FA57 C6 20                      LDB  #$20    GET LOOP DELAY VALUE
2386
0908 FA59 5A                 SUB1    DECB         SUBTRACT ONE FROM VALUE
2387
0909 FA5A 26 FD                      BNE  SUB1    LOOP UNTIL ZERO
2388
0910 FA5C 35 84                      PULS B,PC    RESTORE CONTENTS OF "B"
2389
0911                         * RTS  ;
2390
0912                         *
2391
0913                         ***** "L" LOAD MIKBUG TAPE *****
2392
0914                         *
2393
0915 FA5E BD FC E3           LOAD    JSR  ACINIZ
2394
0916 FA61 86 11                      LDA  #$11   LOAD 'DC1' CASS. READ ON CODE
2395
0917 FA63 17 02 68                   LBSR OUTCH  OUTPUT IT TO TERMINAL PORT
2396
0918 FA66 7F DF E2                   CLR  ECHO   TURN OFF ECHO FLAG
2397
0919 FA69 17 02 2A           LOAD1   LBSR ECHON  INPUT 8 BIT BYTE WITH NO ECHO
2398
0920 FA6C 81 53              LOAD2   CMPA #'S    IS IT AN "S", START CHARACTER ?
2399
0921 FA6E 26 F9                      BNE  LOAD1  IF NOT, DISCARD AND GET NEXT CHAR.
2400
0922 FA70 17 02 23                   LBSR ECHON
2401
0923 FA73 81 39                      CMPA #'9    IS IT A "9" , END OF FILE CHAR ?
2402
0924 FA75 27 3D                      BEQ  LOAD21 IF SO, EXIT LOAD
2403
0925 FA77 81 31                      CMPA #'1    IS IT A "1" , FILE LOAD CHAR ?
2404
0926 FA79 26 F1                      BNE  LOAD2  IF NOT, LOOK FOR START CHAR.
2405
0927 FA7B 17 01 A8                   LBSR BYTE   INPUT BYTE COUNT
2406
0928 FA7E 34 02                      PSHS A      PUSH COUNT ON STACK
2407
0929 FA80 29 26                      BVS  LODERR (V) C-CODE SET, ILLEGAL HEX
2408
0930 FA82 17 01 91                   LBSR IN1ADR INPUT LOAD ADDRESS
2409
0931 FA85 29 21                      BVS  LODERR (V) C-CODE SET, ADDR NOT HEX
2410
0932 FA87 34 10                      PSHS X      PUSH ADDR ON STACK
2411
0933 FA89 E6 E0                      LDB  ,S+    LOAD MSB OF ADDR AS CHECKSUM BYTE
2412
0934 FA8B EB E0                      ADDB ,S+    ADD LSB OF ADDR TO CHECKSUM
2413
0935 FA8D EB E4                      ADDB ,S     ADD BYTE COUNT BYTE TO CHECKSUM
2414
0936 FA8F 6A E4                      DEC  ,S     $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
2415
0937 FA91 6A E4                      DEC  ,S     ADDRESS BYTES.
2416
0938 FA93 34 04              LOAD10  PSHS B      PUSH CHECKSUM ON STACK
2417
0939 FA95 17 01 8E                   LBSR BYTE   INPUT DATA BYTE (2 HEX CHAR)
2418
0940 FA98 35 04                      PULS B      POP CHECKSUM FROM STACK
2419
0941 FA9A 29 0C                      BVS  LODERR (V) SET, DATA BYTE NOT HEX
2420
0942 FA9C 34 02                      PSHS A      PUSH DATA BYTE ON STACK
2421
0943 FA9E EB E0                      ADDB ,S+    ADD DATA TO CHECKSUM, AUTO INC STACK
2422
0944 FAA0 6A E4                      DEC  ,S     DECREMENT BYTE COUNT 1
2423
0945 FAA2 27 05                      BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM
2424
0946 FAA4 A7 80                      STA  ,X+    SAVE DATA BYTE IN MEMORY
2425
0947 FAA6 20 EB                      BRA  LOAD10 GET NEXT DATA BYTE
2426
0948 FAA8 5F                 LODERR  CLRB        ;ERROR CONDITION, ZERO CHECKSUM  ;
2427
0949 FAA9 35 02              LOAD16  PULS A      ADJUST STACK (REMOVE BYTE COUNT)
2428
0950 FAAB C1 FF                      CMPB #$FF   CHECKSUM OK?
2429
0951 FAAD 27 BA                      BEQ  LOAD1  IF SO, LOAD NEXT LINE
2430
0952 FAAF 86 3F                      LDA  #'?    LOAD (?) ERROR INDICATOR
2431
0953 FAB1 17 02 1A                   LBSR OUTCH  OUTPUT IT TO TERMINAL
2432
0954 FAB4 73 DF E2           LOAD21  COM  ECHO   TURN ECHO ON
2433
0955 FAB7 86 13                      LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE
2434
0956 FAB9 16 02 12                   LBRA OUTCH  OUTPUT IT
2435
0957                         *
2436
0958                         ***** "P" PUNCH MIKBUG TAPE *****
2437
0959                         *
2438
0960 FABC 6F E2              PUNCH   CLR  ,-S CLEAR RESERVED BYTE ON STACK
2439
0961 FABE 17 01 4A                   LBSR IN2ADR GET BEGIN AND END ADDRESS
2440
0962 FAC1 34 30                      PSHS X,Y SAVE ADDRESSES ON STACK
2441
0963 FAC3 29 4D                      BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH
2442
0964 FAC5 AC 62                      CMPX 2,S COMPARE BEGIN TO END ADDR
2443
0965 FAC7 25 49                      BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH
2444
0966 FAC9 30 01                      LEAX 1,X INCREMENT END ADDRESS
2445
0967 FACB AF E4                      STX  ,S STORE END ADDR ON STACK
2446
0968 FACD BD FC E3                   JSR  ACINIZ
2447
0969 FAD0 86 12                      LDA  #$12 LOAD 'DC2' PUNCH ON CODE
2448
0970 FAD2 17 01 F9                   LBSR OUTCH OUTPUT IT TO TERMINAL
2449
0971 FAD5 EC E4              PUNCH2  LDD  ,S LOAD END ADDR IN D-ACC
2450
0972 FAD7 A3 62                      SUBD 2,S SUBTRACT BEGIN FROM END
2451
0973 FAD9 27 06                      BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT
2452
0974 FADB 10 83 00 20                CMPD #$20 LESS THAN 32 BYTES?
2453
0975 FADF 23 02                      BLS  PUNCH4 PUNCH THAT MANY BYTES
2454
0976 FAE1 C6 20              PUNCH3  LDB  #$20 LOAD BYTE COUNT OF 32.
2455
0977 FAE3 E7 64              PUNCH4  STB  4,S STORE ON STACK AS BYTE COUNT
2456
0978 FAE5 8E FE F3                   LDX  #MSG20 POINT TO MSG "S1"
2457
0979 FAE8 17 00 2F                   LBSR PSTRNG PRINT MSG
2458
0980 FAEB CB 03                      ADDB #3 ADD 3 BYTES TO BYTE COUNT
2459
0981 FAED 1F 98                      TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH
2460
0982 FAEF 17 01 75                   LBSR OUT2H OUTPUT BYTE COUNT
2461
0983 FAF2 AE 62                      LDX  2,S LOAD BEGIN ADDRESS
2462
0984 FAF4 17 01 68                   LBSR OUT4H PUNCH ADDRESS
2463
0985 FAF7 EB 62                      ADDB 2,S ADD ADDR MSB TO CHECKSUM
2464
0986 FAF9 EB 63                      ADDB 3,S ADD ADDR LSB TO CHECKSUM
2465
0987 FAFB EB 84              PUNCHL  ADDB ,X ADD DATA BYTE TO CHECKSUM
2466
0988 FAFD A6 80                      LDA  ,X+ LOAD DATA BYTE TO PUNCH
2467
0989 FAFF 17 01 65                   LBSR OUT2H OUTPUT DATA BYTE
2468
0990 FB02 6A 64                      DEC  4,S DECREMENT BYTE COUNT
2469
0991 FB04 26 F5                      BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE
2470
0992 FB06 53                         COMB  1's COMPLIMENT CHECKSUM BYTE
2471
0993 FB07 1F 98                      TFR  B,A GET IT IN A-ACC TO PUNCH
2472
0994 FB09 17 01 5B                   LBSR OUT2H OUTPUT CHECKSUM BYTE
2473
0995 FB0C AF 62                      STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR
2474
0996 FB0E AC E4                      CMPX ,S COMPARE IT TO END ADDR
2475
0997 FB10 26 C3                      BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT.
2476
0998 FB12 86 14              PUNEXT  LDA  #$14 LOAD 'DC4' PUNCH OFF CODE
2477
0999 FB14 17 01 B7                   LBSR OUTCH OUTPUT IT
2478
1000 FB17 32 65                      LEAS 5,S READJUST STACK POINTER
2479
1001 FB19 39                         RTS  ;
2480
1002                         *
2481
1003                         * PRINT STRING PRECEEDED BY A CR & LF.
2482
1004                         *
2483
1005 FB1A 8D 02              PSTRNG BSR PCRLF PRINT CR/LF
2484
1006 FB1C 20 71                     BRA  PDATA  PRINT STRING POINTED TO BY IX
2485
1007                         *
2486
1008                         * PCRLF
2487
1009                         *
2488
1010 FB1E 34 10              PCRLF  PSHS X SAVE IX
2489
1011 FB20 8E FE A4                  LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS
2490
1012 FB23 17 00 69                  LBSR PDATA  PRINT MSG
2491
1013 FB26 35 90                     PULS X,PC RESTORE IX & RETURN
2492
1014                         *
2493
1015                         * LONG BRANCHES TO COMMON ROUTINES
2494
1016                         *
2495
1017 FB28 16 01 A1           JOUT1S  LBRA OUT1S
2496
1018 FB2B 16 00 F8           JBYTE   LBRA BYTE
2497
1019 FB2E 16 00 E5           JIN1ADR LBRA IN1ADR
2498
1020                         *
2499
1021                         * ALTER "PC" PROGRAM COUNTER
2500
1022                         *
2501
1023 FB31 17 00 91           ALTRPC  LBSR  PRTPC   $FCF5 PRINT MSG " PC = "
2502
1024 FB34 8D F2              ALTPC1  BSR  JOUT1S   OUTPUT SPACE
2503
1025 FB36 8D F6                      BSR  JIN1ADR  GET NEW CONTENTS FOR "PC"
2504
1026 FB38 29 02                      BVS  ALTPCD  EXIT IF INVALID HEX
2505
1027 FB3A AF 4A                      STX  10,U    POKE IN NEW CONTENTS
2506
1028 FB3C 39                 ALTPCD  RTS          ;
2507
1029                         *
2508
1030                         * ALTER "U" USER STACK POINTER
2509
1031                         *
2510
1032 FB3D 8D 61              ALTRU   BSR  PRTUS   $FCCA PRINT MSG " US = "
2511
1033 FB3F 8D E7                      BSR  JOUT1S   OUTPUT SPACE
2512
1034 FB41 8D EB                      BSR  JIN1ADR
2513
1035 FB43 29 02                      BVS  ALTUD
2514
1036 FB45 AF 48                      STX  8,U
2515
1037 FB47 39                 ALTUD   RTS ;
2516
1038                         *
2517
1039                         * ALTER "Y" INDEX REGISTER
2518
1040                         *
2519
1041 FB48 8D 72              ALTRY   BSR  PRTIY   PRINT MSG " IY = "
2520
1042 FB4A 8D DC                      BSR  JOUT1S   OUTPUT SPACE
2521
1043 FB4C 8D E0                      BSR  JIN1ADR
2522
1044 FB4E 29 02                      BVS  ALTYD
2523
1045 FB50 AF 46                      STX  6,U     $F8F0
2524
1046 FB52 39                 ALTYD   RTS ;
2525
1047                         *
2526
1048                         * ALTER "X" INDEX REGISTER
2527
1049                         *
2528
1050 FB53 8D 5E              ALTRX   BSR  PRTIX   $FCE0 PRINT MSG " IX = "
2529
1051 FB55 8D D1                      BSR  JOUT1S   OUTPUT SPACE
2530
1052 FB57 8D D5                      BSR  JIN1ADR
2531
1053 FB59 29 02                      BVS  ALTXD
2532
1054 FB5B AF 44                      STX  4,U
2533
1055 FB5D 39                 ALTXD   RTS ;
2534
1056                         *
2535
1057                         * ALTER "DP" DIRECT PAGE REGISTER
2536
1058                         *
2537
1059 FB5E 8D 49              ALTRDP  BSR  PRTDP   $FCD5 PRINT MSG " DP = "
2538
1060 FB60 8D C6                      BSR  JOUT1S   OUTPUT SPACE
2539
1061 FB62 8D C7                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
2540
1062 FB64 29 02                      BVS  ALTDPD
2541
1063 FB66 A7 43                      STA  3,U
2542
1064 FB68 39                 ALTDPD  RTS ;
2543
1065                         *
2544
1066                         * ALTER "B" ACCUMULATOR
2545
1067                         *
2546
1068 FB69 8D 6C              ALTRB   BSR  PRTB    $FD09 PRINT MSG " B = "
2547
1069 FB6B 8D BB                      BSR  JOUT1S   OUTPUT SPACE
2548
1070 FB6D 8D BC                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
2549
1071 FB6F 29 02                      BVS  ALTBD
2550
1072 FB71 A7 42                      STA  2,U
2551
1073 FB73 39                 ALTBD   RTS          $F91C
2552
1074                         *
2553
1075                         * ALTER "A" ACCUMULATOR
2554
1076                         *
2555
1077 FB74 8D 58              ALTRA   BSR  PRTA    $FCFF RINT MSG " A = "
2556
1078 FB76 8D B0                      BSR  JOUT1S   OUTPUT SPACE
2557
1079 FB78 8D B1                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
2558
1080 FB7A 29 02                      BVS  ALTAD
2559
1081 FB7C A7 41                      STA  1,U
2560
1082 FB7E 39                 ALTAD   RTS ;
2561
1083                         *
2562
1084                         * ALTER "CC" REGISTER
2563
1085                         *
2564
1086 FB7F 8D 5F              ALTRCC  BSR  PRTCC   $FD13 PRINT MSG " CC: "
2565
1087 FB81 8D A5                      BSR  JOUT1S   OUTPUT SPACE
2566
1088 FB83 8D A6                      BSR  JBYTE    INPUT BYTE (2 HEX CHAR)
2567
1089 FB85 29 04                      BVS  ALTCCD
2568
1090 FB87 8A 80                      ORA  #$80    SETS "E" FLAG IN PRINT LIST
2569
1091 FB89 A7 C4                      STA  ,U
2570
1092 FB8B 39                 ALTCCD  RTS ;
2571
1093                         *
2572
1094                         * PDATA
2573
1095                         *
2574
1096 FB8C 17 01 3F           PRINT LBSR OUTCH
2575
1097 FB8F A6 80              PDATA LDA  ,X+ GET 1st CHAR. TO PRINT
2576
1098 FB91 81 04                    CMPA #4 IS IT EOT?
2577
1099 FB93 26 F7                    BNE  PRINT IF NOT EOT PRINT IT
2578
1100 FB95 39                       RTS  ;
2579
1101                         *
2580
1102                         * PRINT REGISTERS
2581
1103                         *
2582
1104 FB96 8E FE B6           PRTSP  LDX  #MSG10 POINT TO MSG "SP="
2583
1105 FB99 8D F4                     BSR  PDATA  PRINT MSG
2584
1106 FB9B 1F 31                     TFR  U,X
2585
1107 FB9D 16 00 BF           JOUT4H LBRA OUT4H
2586
1108                         *
2587
1109 FBA0 8E FE C2           PRTUS  LDX  #MSG12 POINT TO MSG "US="
2588
1110 FBA3 8D EA                     BSR  PDATA  PRINT MSG
2589
1111 FBA5 AE 48                     LDX  8,U
2590
1112 FBA7 20 F4                     BRA  JOUT4H
2591
1113                         *
2592
1114 FBA9 8E FE D4           PRTDP  LDX   #MSG15 POINT TO MSG "DP="
2593
1115 FBAC 8D E1                     BSR  PDATA  PRINT MSG
2594
1116 FBAE A6 43                     LDA  3,U
2595
1117 FBB0 16 00 B4           JOUT2H LBRA OUT2H OUTPUT HEX BYTE AS ASCII
2596
1118                         *
2597
1119 FBB3 8E FE CE           PRTIX  LDX  #MSG14 POINT TO MSG "IX="
2598
1120 FBB6 8D D7                     BSR  PDATA  PRINT MSG
2599
1121 FBB8 AE 44                     LDX  4,U      $FCE6
2600
1122 FBBA 20 E1                     BRA  JOUT4H
2601
1123                         *
2602
1124 FBBC 8E FE C8           PRTIY  LDX  #MSG13 POINT TO MSG "IY="
2603
1125 FBBF 8D CE                     BSR  PDATA  PRINT MSG
2604
1126 FBC1 AE 46                     LDX  6,U
2605
1127 FBC3 20 D8                     BRA  JOUT4H
2606
1128                         *
2607
1129 FBC5 8E FE BC           PRTPC  LDX  #MSG11 POINT TO MSG "PC="
2608
1130 FBC8 8D C5                     BSR  PDATA  PRINT MSG
2609
1131 FBCA AE 4A                     LDX  10,U
2610
1132 FBCC 20 CF                     BRA  JOUT4H
2611
1133                         *
2612
1134 FBCE 8E FE DA           PRTA   LDX  #MSG16 POINT TO MSG "A="
2613
1135 FBD1 8D BC                     BSR  PDATA  PRINT MSG
2614
1136 FBD3 A6 41                     LDA  1,U
2615
1137 FBD5 20 D9                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
2616
1138                         *
2617
1139 FBD7 8E FE DF           PRTB   LDX  #MSG17 POINT TO MSG "B="
2618
1140 FBDA 8D B3                     BSR  PDATA  PRINT MSG
2619
1141 FBDC A6 42                     LDA  2,U
2620
1142 FBDE 20 D0                     BRA  JOUT2H OUTPUT HEX BYTE AS ASCII
2621
1143                         *
2622
1144 FBE0 8E FE E4           PRTCC  LDX  #MSG18 POINT TO MSG "CC:"
2623
1145 FBE3 8D AA                     BSR  PDATA  PRINT MSG
2624
1146 FBE5 A6 C4                     LDA  ,U
2625
1147 FBE7 8E FE EB                  LDX  #MSG19 POINT TO MSG "EFHINZVC"
2626
1148 FBEA 16 00 90                  LBRA BIASCI OUTPUT IN BINARY/ASCII FORMAT
2627
1149                         *
2628
1150                         * "R" DISPLAY REGISTERS
2629
1151                         *
2630
1152 FBED 8E FE B2           REGSTR  LDX  #MSG5   POINT TO MSG " - "
2631
1153 FBF0 17 FF 27                   LBSR PSTRNG  PRINT MSG
2632
1154 FBF3 8D A1                      BSR PRTSP   $FCBF
2633
1155 FBF5 8D A9                      BSR PRTUS   $FCCA
2634
1156 FBF7 8D B0                      BSR PRTDP   $FCD5
2635
1157 FBF9 8D B8                      BSR PRTIX   $FCE0
2636
1158 FBFB 8D BF                      BSR PRTIY   $FCEB
2637
1159 FBFD 8E FE B2                   LDX  #MSG5   POINT TO MSG " - "
2638
1160 FC00 17 FF 17                   LBSR PSTRNG  PRINT MSG
2639
1161 FC03 8D C0                      BSR PRTPC   $FCF5
2640
1162 FC05 8D C7                      BSR PRTA    $FCFF
2641
1163 FC07 8D CE                      BSR PRTB    $FD09
2642
1164 FC09 20 D5                      BRA PRTCC   $FD13
2643
1165                         *
2644
1166                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
2645
1167                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
2646
1168                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
2647
1169                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT
2648
1170                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX
2649
1171                         * ADDRESS IS INPUT.
2650
1172                         *
2651
1173 FC0B 8D 09              IN2ADR BSR IN1ADR GET FIRST ADDRESS
2652
1174 FC0D 29 4D                     BVS NOTHEX EXIT IF NOT VALID HEX
2653
1175 FC0F 1F 12                     TFR  X,Y SAVE FIRST ADDR. IN "IY"
2654
1176 FC11 86 2D                     LDA #'-
2655
1177 FC13 17 00 B8                  LBSR OUTCH PRINT " - "
2656
1178                         *
2657
1179                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
2658
1180                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
2659
1181                         * ADDRESS IS RETURNED IN THE "X" REGISTER.
2660
1182                         *
2661
1183 FC16 8D 0E              IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR)
2662
1184 FC18 29 42                     BVS NOTHEX EXIT IF NOT VALID HEX
2663
1185 FC1A 1F 01                     TFR  D,X
2664
1186 FC1C 8D 08                     BSR BYTE INPUT BYTE (2 HEX CHAR)
2665
1187 FC1E 29 3C                     BVS NOTHEX
2666
1188 FC20 34 10                     PSHS X
2667
1189 FC22 A7 61                     STA  1,S
2668
1190 FC24 35 90                     PULS X,PC
2669
1191                         *
2670
1192                         ***** INPUT BYTE (2 HEX CHAR.) *****
2671
1193                         *
2672
1194 FC26 8D 11              BYTE   BSR INHEX GET HEX LEFT
2673
1195 FC28 29 32                     BVS NOTHEX EXIT IF NOT VALID HEX
2674
1196 FC2A 48                        ASLA   ;
2675
1197 FC2B 48                        ASLA   ;
2676
1198 FC2C 48                        ASLA   ; SHIFT INTO LEFT NIBBLE
2677
1199 FC2D 48                        ASLA   ;
2678
1200 FC2E 1F 89                     TFR  A,B PUT HEXL IN "B"
2679
1201 FC30 8D 07                     BSR INHEX GET HEX RIGHT
2680
1202 FC32 29 28                     BVS NOTHEX EXIT IF NOT VALID HEX
2681
1203 FC34 34 04                     PSHS B PUSH HEXL ON STACK
2682
1204 FC36 AB E0                     ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
2683
1205 FC38 39                        RTS  RETURN WITH HEX L&R IN "A"
2684
1206                         *
2685
1207                         *
2686
1208 FC39 8D 5B              INHEX  BSR ECHON INPUT ASCII CHAR.
2687
1209 FC3B 81 30                     CMPA #'0 IS IT > OR = "0" ?
2688
1210 FC3D 25 1D                     BCS NOTHEX IF LESS IT AIN'T HEX
2689
1211 FC3F 81 39                     CMPA #'9 IS IT < OR = "9" ?
2690
1212 FC41 22 03                     BHI INHEXA IF > MAYBE IT'S ALPHA
2691
1213 FC43 80 30                     SUBA #$30 ASCII ADJ. NUMERIC
2692
1214 FC45 39                        RTS  ;
2693
1215                         *
2694
1216                         *
2695
1217 FC46 81 41              INHEXA CMPA #'A IS IT > OR = "A"
2696
1218 FC48 25 12                     BCS NOTHEX IF LESS IT AIN'T HEX
2697
1219 FC4A 81 46                     CMPA #'F IS IT < OR = "F" ?
2698
1220 FC4C 22 03                     BHI INHEXL IF > IT AIN'T HEX
2699
1221 FC4E 80 37                     SUBA #$37 ASCII ADJ. ALPHA
2700
1222 FC50 39                        RTS  ;
2701
1223                         *
2702
1224 FC51 81 61              INHEXL CMPA #'a IS IT > OR = "a"
2703
1225 FC53 25 07                     BCS NOTHEX IF LESS IT AIN'T HEX
2704
1226 FC55 81 66                     CMPA #'f IS IT < "f"
2705
1227 FC57 22 03                     BHI NOTHEX IF > IT AIN'T HEX
2706
1228 FC59 80 57                     SUBA #$57 ADJUST TO LOWER CASE
2707
1229 FC5B 39                        RTS  ;
2708
1230                         *
2709
1231                         *
2710
1232 FC5C 1A 02              NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
2711
1233 FC5E 39                        RTS  ;
2712
1234                         *
2713
1235                         *
2714
1236 FC5F 34 10              OUT4H  PSHS X PUSH X-REG. ON THE STACK
2715
1237 FC61 35 02                     PULS A POP MS BYTE OF X-REG INTO A-ACC.
2716
1238 FC63 8D 02                     BSR OUTHL OUTPUT HEX LEFT
2717
1239 FC65 35 02                     PULS A POP LS BYTE OF X-REG INTO A-ACC.
2718
1240 FC67                    OUTHL  EQU *
2719
1241 FC67 34 02              OUT2H  PSHS A SAVE IT BACK ON STACK
2720
1242 FC69 44                        LSRA CONVERT UPPER HEX NIBBLE TO ASCII
2721
1243 FC6A 44                        LSRA  ;
2722
1244 FC6B 44                        LSRA  ;
2723
1245 FC6C 44                        LSRA  ;
2724
1246 FC6D 8D 04                     BSR XASCII PRINT HEX NIBBLE AS ASCII
2725
1247 FC6F 35 02              OUTHR  PULS A CONVERT LOWER HEX NIBBLE TO ASCII
2726
1248 FC71 84 0F                     ANDA #$0F STRIP LEFT NIBBLE
2727
1249 FC73 8B 30              XASCII ADDA #$30 ASCII ADJ
2728
1250 FC75 81 39                     CMPA #$39 IS IT < OR = "9" ?
2729
1251 FC77 2F 02                     BLE  OUTC IF LESS, OUTPUT IT
2730
1252 FC79 8B 07                     ADDA #7 IF > MAKE ASCII LETTER
2731
1253 FC7B 20 51              OUTC   BRA  OUTCH OUTPUT CHAR
2732
1254                         *
2733
1255                         * BINARY / ASCII --- THIS ROUTINE
2734
1256                         * OUTPUTS A BYTE IN ENHANCED
2735
1257                         * BINARY FORMAT. THE ENHANCEMENT
2736
1258                         * IS DONE BY SUBSTITUTING ASCII
2737
1259                         * LETTERS FOR THE ONES IN THE BYTE.
2738
1260                         * THE ASCII ENHANCEMENT LETTERS
2739
1261                         * ARE OBTAINED FROM THE STRING
2740
1262                         * POINTED TO BY THE INDEX REG. "X".
2741
1263                         *
2742
1264 FC7D 34 02              BIASCI PSHS A SAVE "A" ON STACK
2743
1265 FC7F C6 08                     LDB  #8 PRESET LOOP# TO BITS PER BYTE
2744
1266 FC81 A6 80              OUTBA  LDA ,X+ GET LETTER FROM STRING
2745
1267 FC83 68 E4                     ASL  ,S TEST BYTE FOR "1" IN B7
2746
1268 FC85 25 02                     BCS PRTBA IF ONE PRINT LETTER
2747
1269 FC87 86 2D                     LDA #'- IF ZERO PRINT "-"
2748
1270 FC89 8D 43              PRTBA  BSR OUTCH PRINT IT
2749
1271 FC8B 8D 3F                     BSR OUT1S PRINT SPACE
2750
1272 FC8D 5A                        DECB SUB 1 FROM #BITS YET TO PRINT
2751
1273 FC8E 26 F1                     BNE OUTBA
2752
1274 FC90 35 82                     PULS A,PC
2753
1275                         *
2754
1276                                IFD EXTOPT
2755
1277                         *
2756
1278                         * EXTENDED USER COMMANDS
2757
1279                         *
2758
1280 FC92 6E 9F F0 00        USRCMD JMP [MONEXT+EXTCMD]
2759
1281                                ENDIF EXTOPT
2760
1282                         *
2761
1283                         *
2762
1284 FC96 7D DF E2           ECHON  TST  ECHO IS ECHO REQUIRED ?
2763
1285 FC99 27 06                     BEQ  INCH ECHO NOT REQ. IF CLEAR
2764
1286                         *
2765
1287                         * INCHE
2766
1288                         *
2767
1289                         * ---GETS CHARACTER FROM TERMINAL AND
2768
1290                         * ECHOS SAME. THE CHARACTER IS RETURNED
2769
1291                         * IN THE "A" ACCUMULATOR WITH THE PARITY
2770
1292                         * BIT MASKED OFF. ALL OTHER REGISTERS
2771
1293                         * ARE PRESERVED.
2772
1294                         *
2773
1295 FC9B 8D 04              INCHE  BSR INCH GET CHAR FROM TERMINAL
2774
1296 FC9D 84 7F                     ANDA #$7F      STRIP PARITY FROM CHAR.
2775
1297 FC9F 20 2D                     BRA  OUTCH     ECHO CHAR TO TERMINAL
2776
1298                         *
2777
1299                         * INCH
2778
1300                         *
2779
1301                         * GET CHARACTER FROM TERMINAL. RETURN
2780
1302                         * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
2781
1303                         * ALL OTHER REGISTERS. THE INPUT CHARACTER
2782
1304                         * IS 8 BITS AND IS NOT ECHOED.
2783
1305                         *
2784
1306                         *
2785
1307 FCA1 34 10              INCH   PSHS X SAVE IX
2786
1308 FCA3 BE DF E0           GETSTA LDX  CPORT POINT TO TERMINAL PORT
2787
1309 FCA6 A6 84                     LDA  ,X  FETCH PORT STATUS
2788
1310 FCA8 85 01                     BITA #1 TEST READY BIT, RDRF ?
2789
1311                                IFD  PS2OPT
2790
1312 FCAA 26 09                     BNE GETST1
2791
1313 FCAC 8E E0 20                  LDX  #PS2KBD
2792
1314 FCAF A6 84                     LDA  ,X
2793
1315 FCB1 85 01                     BITA #1
2794
1316                                ENDIF PS2OPT
2795
1317 FCB3 27 EE                     BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN
2796
1318 FCB5 A6 01              GETST1 LDA  1,X FETCH CHAR
2797
1319 FCB7 35 90                     PULS X,PC RESTORE IX
2798
1320                         *
2799
1321                         * INCHEK
2800
1322                         *
2801
1323                         * CHECK FOR A CHARACTER AVAILABLE FROM
2802
1324                         * THE TERMINAL. THE SERIAL PORT IS CHECKED
2803
1325                         * FOR READ READY. ALL REGISTERS ARE
2804
1326                         * PRESERVED, AND THE "Z" BIT WILL BE
2805
1327                         * CLEAR IF A CHARACTER CAN BE READ.
2806
1328                         *
2807
1329                         *
2808
1330 FCB9 34 02              INCHEK  PSHS A SAVE A ACCUM.
2809
1331 FCBB A6 9F DF E0                LDA  [CPORT] FETCH PORT STATUS
2810
1332 FCBF 85 01                      BITA #1 TEST READY BIT, RDRF ?
2811
1333                                 IFD PS2OPT
2812
1334 FCC1 26 05                      BNE  INCHEK1
2813
1335 FCC3 B6 E0 20                   LDA  PS2KBD
2814
1336 FCC6 85 01                      BITA #1 TEST READY BIT< RDRF ?
2815
1337                                 ENDIF PS2OPT
2816
1338 FCC8 35 82              INCHEK1 PULS A,PC RESTORE A ACCUM.
2817
1339                         *
2818
1340 FCCA 8D 00              OUT2S BSR OUT1S OUTPUT 2 SPACES
2819
1341 FCCC 86 20              OUT1S LDA  #$20  OUTPUT 1 SPACE
2820
1342                         *
2821
1343                         *
2822
1344                         * OUTCH
2823
1345                         *
2824
1346                         * OUTPUT CHARACTER TO TERMINAL.
2825
1347                         * THE CHAR. TO BE OUTPUT IS
2826
1348                         * PASSED IN THE A REGISTER.
2827
1349                         * ALL REGISTERS ARE PRESERVED.
2828
1350                         *
2829
1351                         OUTCH   IFD VDUOPT
2830
1352 FCCE 8D 45                      BSR  VOUTCH
2831
1353                                 ENDIF VDUOPT
2832
1354                                 IFD  DG640OPT
2833
1355                                 BSR  VOUTCH
2834
1356                                 ENDIF DG640OPT
2835
1356                                 ENDIF DG640OPT
2836
1357 FCD0 34 12              AOUTCH  PSHS A,X    SAVE A ACCUM AND IX
2837
1358 FCD2 BE DF E0                   LDX  CPORT  GET ADDR. OF TERMINAL
2838
1359 FCD5 A6 84              FETSTA  LDA  ,X     FETCH PORT STATUS
2839
1360 FCD7 85 02                      BITA #2     TEST TDRE, OK TO XMIT ?
2840
1361 FCD9 27 FA                      BEQ  FETSTA IF NOT LOOP UNTIL RDY
2841
1362 FCDB 35 02                      PULS A      GET CHAR. FOR XMIT
2842
1363 FCDD A7 01                      STA  1,X    XMIT CHAR.
2843
1364 FCDF 35 90                      PULS X,PC   RESTORE IX
2844
1365                         *
2845
1366                         * IO INITIALIZATION
2846
1367                         *
2847
1368 FCE1                    IOINIZ  EQU  *
2848
1369                                 IFD  VDUOPT
2849
1370 FCE1 8D 13                      BSR  VINIZ
2850
1371                                 ENDIF VDUOPT
2851
1372                                 IFD  DG640OPT
2852
1373                                 BSR  VINIZ
2853
1374                                 ENDIF DG640OPT
2854
1374                                 ENDIF DG640OPT
2855
1375 FCE3 BE DF E0           ACINIZ  LDX  CPORT  POINT TO CONTROL PORT ADDRESS
2856
1376 FCE6 86 03                      LDA  #3     RESET ACIA PORT CODE
2857
1377 FCE8 A7 84                      STA  ,X     STORE IN CONTROL REGISTER
2858
1378 FCEA 86 11                      LDA  #$11   SET 8 DATA, 2 STOP AN 0 PARITY
2859
1379 FCEC A7 84                      STA  ,X     STORE IN CONTROL REGISTER
2860
1380 FCEE 6D 01                      TST  1,X    ANYTHING IN DATA REGISTER?
2861
1381 FCF0 86 FF                      LDA  #$FF   TURN ON ECHO FLAG
2862
1382 FCF2 B7 DF E2                   STA  ECHO
2863
1383 FCF5 39                         RTS
2864
1384                         *
2865
1385                                 IFD VDUOPT
2866
1386                         *
2867
1387                         ***************************************************
2868
1388                         *      VDU8 ADM3A REGISTER-MAPPED EMULATOR        *
2869
1389                         *                                                 *
2870
1390                         *      80 x 25 Characters
2871
1391                         *
2872
1392                         ***************************************************
2873
1393                         *
2874
1394                         ***************************************************
2875
1395                         *               INITIALIZE EMULATOR               *
2876
1396                         ***************************************************
2877
1397                         *
2878
1398 FCF6 8E E0 30           VINIZ   LDX    #VDU
2879
1399 FCF9 CC 00 00                   LDD    #0
2880
1400 FCFC FD DF FB                   STD    COLADX    AND ROWADX
2881
1401 FCFF A7 02                      STA    VDUCOL,X
2882
1402 FD01 E7 03                      STB    VDUROW,X
2883
1403 FD03 E7 04                      STB    VDUOFF,X
2884
1404 FD05 FD DF FD                   STD    NEWROW    AND ESCFLG
2885
1405 FD08 C6 02                      LDB    #$02
2886
1406 FD0A E7 01                      STB    VDUATT,X
2887
1407 FD0C 7F DF FE                   CLR    ESCFLG
2888
1408 FD0F 86 1B                      LDA    #$1B      SEND ESCAPE
2889
1409 FD11 8D 02                      BSR    VOUTCH
2890
1410 FD13 86 59                      LDA    #'Y       CLEAR TO END OF SCREEN
2891
1411                         *
2892
1412                         ** VIDEO OUTPUT ROUTINE
2893
1413                         *
2894
1414 FD15 34 16              VOUTCH  PSHS   A,B,X     SAVE REGISTERS
2895
1415 FD17 8E E0 30                   LDX    #VDU      POINT TO VDU REGISTERS
2896
1416                         *
2897
1417                         ** CHECK FOR ESCAPE SEQUENCE
2898
1418                         *
2899
1419 FD1A 7D DF FE                   TST    ESCFLG    ESCAPE ACTIVE?
2900
1420 FD1D 27 04                      BEQ    SOROU1    BRANCH IF NOT
2901
1421 FD1F 8D 74                      BSR    ESCAPE    ELSE DO ESCAPE
2902
1422 FD21 20 0D                      BRA    RETURN    AND RETURN
2903
1423                         *
2904
1424                         ** CHECK FOR CONTROL CHARACTERS
2905
1425                         *
2906
1426 FD23 81 20              SOROU1  CMPA   #$20      CONTROL CODES?
2907
1427 FD25 24 04                      BHS    SOROU2
2908
1428 FD27 8D 09                      BSR    CONTRL    BRANCH IF SO
2909
1429 FD29 20 05                      BRA    RETURN
2910
1430                         *
2911
1431                         ** OUTPUT TEXT CHARACTER
2912
1432                         *
2913
1433 FD2B A7 84              SOROU2  STAA   VDUCHR,X  DISPLAY CHARACTER
2914
1434 FD2D 17 00 C5                   LBSR   NEWCOL    UPDATE COLUMN
2915
1435                         *
2916
1436                         ** DISPLAY CURSOR AND RETURN
2917
1437                         *
2918
1438 FD30 35 96              RETURN  PULS   A,B,X,PC  RESTORE REGISTERS AND RETURN
2919
1439                         *
2920
1440                         ***************************************************
2921
1441                         *              CONTROL CODE HANDLERS              *
2922
1442                         ***************************************************
2923
1443                         *
2924
1444 FD32 81 08              CONTRL  CMPA   #$08      CTRL H - BACKSPACE ?
2925
1445 FD34 10 27 00 41                LBEQ   BACKSP
2926
1446 FD38 81 1B                      CMPA   #$1B      ESCAPE SEQUENCE?
2927
1447 FD3A 10 27 00 6C                LBEQ   SETESC
2928
1448 FD3E 81 1A                      CMPA   #$1A      CTRL Z - Clear Screen
2929
1449 FD40 10 27 00 8E                LBEQ   CLRSCR
2930
1450 FD44 81 16                      CMPA   #$16      CTRL ^ - Home
2931
1451 FD46 10 27 00 45                LBEQ   HOME
2932
1452 FD4A 81 0D                      CMPA   #$D       CTRL M - RETURN?
2933
1453 FD4C 10 27 00 99                LBEQ   CRETN
2934
1454 FD50 81 0C                      CMPA   #$0C      CTRL L - CHAR RIGHT
2935
1455 FD52 10 27 00 2C                LBEQ   CHRIGHT
2936
1456 FD56 81 0B                      CMPA   #$0B      CTRL K - MOVE UP ONE LINE
2937
1457 FD58 10 27 00 11                LBEQ   LINEUP
2938
1458 FD5C 81 0A                      CMPA   #$0A      CTRL J - LINE FEED
2939
1459 FD5E 26 51                      BNE    RETESC    NONE OF THESE, RETURN
2940
1460                         *
2941
1461                         ***************************************** LINE FEED
2942
1462                         *
2943
1463 FD60 FC DF FB           LINEFD  LDD    COLADX    GET CURRENT COLUMN AND ROW
2944
1464 FD63 5C                         INCB             BUMP ROW
2945
1465 FD64 C1 19                      CMPB   #NUMLIN   SCROLL TIME?
2946
1466 FD66 10 26 00 83                LBNE   NEWCUR    POSITION CURSOR IF NOT
2947
1467 FD6A 16 00 99                   LBRA   SCROLL    ELSE SCROLL IT
2948
1468                         *
2949
1469                         ***************************************** LINE FEED
2950
1470                         *
2951
1471 FD6D FC DF FB           LINEUP  LDD    COLADX    GET CURRENT COLUMN AND ROW
2952
1472 FD70 5D                         TSTB                AT TOP OF SCREEN ?
2953
1473 FD71 10 27 00 3C                LBEQ   RETESC    Yes, Ignore
2954
1474 FD75 5A                         DECB             No, Decrement ROW
2955
1475 FD76 16 00 74                   LBRA   NEWCUR    POSITION CURSOR
2956
1476                         *
2957
1477                         *********************************** BACK SPACE
2958
1478                         *
2959
1479 FD79 B6 DF FB           BACKSP  LDA    COLADX
2960
1480 FD7C 27 33                      BEQ    RETESC      RETURN
2961
1481 FD7E 4A                         DECA
2962
1482 FD7F 16 00 68                   LBRA   POSCOL    POSITION CURSOR
2963
1483                         *
2964
1484                         *********************************** CURSOR RIGHT
2965
1485                         *
2966
1486 FD82 B6 DF FB           CHRIGHT LDA    COLADX
2967
1487 FD85 4C                         INCA
2968
1488 FD86 81 50                      CMPA   #LINLEN
2969
1489 FD88 10 27 00 25                LBEQ   RETESC
2970
1490 FD8C 16 00 5B                   LBRA   POSCOL
2971
1491                         *
2972
1492                         *********************************** CURSOR RIGHT
2973
1493                         *
2974
1494 FD8F CC 00 00           HOME    LDD    #0        HOME - POSITION TOP OF SCREEN
2975
1495 FD92 16 00 58                   LBRA    NEWCUR
2976
1496                         *
2977
1497                         ***************************************************
2978
1498                         *                 ESCAPE HANDLERS                 *
2979
1499                         ***************************************************
2980
1500                         *
2981
1501 FD95 F6 DF FE           ESCAPE  LDAB   ESCFLG    GET FLAG
2982
1502 FD98 C1 3D                      CMPB   #'=       SETTING CURSOR?
2983
1503 FD9A 27 16                      BEQ    ESCCUR    BRANCH IF SO
2984
1504 FD9C 81 59                      CMPA   #'Y       CLEAR TO END OF SCREEN?
2985
1505 FD9E 10 27 00 6E                LBEQ   ESCCLS
2986
1506 FDA2 81 54                      CMPA   #'T       CLEAR TO END OF LINE?
2987
1507 FDA4 27 31                      BEQ   ESCCLL
2988
1508 FDA6 81 3D                      CMPA   #'=       STARTING CURSOR SET?
2989
1509 FDA8 26 04                      BNE    CLRESC    BRANCH IF NOT
2990
1510                         *
2991
1511                         ***************************** START ESCAPE SEQUENCE
2992
1512                         *
2993
1513 FDAA B7 DF FE           SETESC  STAA   ESCFLG    ELSE START CURSORING
2994
1514 FDAD 39                         RTS              AND RETURN
2995
1515                         *
2996
1516 FDAE 7F DF FE           CLRESC  CLR    ESCFLG    NO OTHERS SUPPORTED
2997
1517 FDB1 39                 RETESC  RTS              SO RETURN
2998
1518                         *
2999
1519                         ********************************* SET SCREEN CURSOR
3000
1520                         *
3001
1521 FDB2 7D DF FD           ESCCUR  TST    NEWROW    ROW SET?
3002
1522 FDB5 26 04                      BNE    ESCCU1    BRANCH IF SO
3003
1523 FDB7 B7 DF FD                   STAA   NEWROW    ELSE SET NEW ROW
3004
1524 FDBA 39                         RTS              AND RETURN
3005
1525                         *
3006
1526 FDBB 7F DF FE           ESCCU1  CLR    ESCFLG
3007
1527 FDBE 80 20                      SUBA   #$20      ADJUST COLUMN ADDRESS
3008
1528 FDC0 81 4F                      CMPA   #LINLEN-1 CHECK FOR ACCEPTABLE COLUM
3009
1529 FDC2 22 ED                      BHI    RETESC    NOT OK, DO NOTHING
3010
1530                         *
3011
1531 FDC4 F6 DF FD           ESCCU2  LDAB   NEWROW
3012
1532 FDC7 7F DF FD                   CLR    NEWROW
3013
1533 FDCA C0 20                      SUBB   #$20      ADJUST TO ROW ADDRESS
3014
1534 FDCC C1 18                      CMPB   #NUMLIN-1 CHECK FOR ACCEPTABLE ROW
3015
1535 FDCE 22 E1                      BHI    RETESC    ELSE RETURN DOING NOTHING
3016
1536 FDD0 20 1B                      BRA    NEWCUR    GO SET NEW CURSOR IF SO
3017
1537                         *
3018
1538                         ****************** CLEAR FROM CURSOR TO END OF LINE
3019
1539 FDD2 CC 00 00           CLRSCR  LDD    #0        CLEAR FROM TOP OF SCREEN
3020
1540 FDD5 8D 16                      BSR    NEWCUR
3021
1541 FDD7 B6 DF FB           ESCCLL  LDA    COLADX
3022
1542 FDDA C6 20                      LDB    #$20      AND CLEAR CHAR
3023
1543 FDDC E7 84              ESCCL1  STB    VDUCHR,X  DISPLAY TEXT
3024
1544 FDDE 4C                         INCA
3025
1545 FDDF A7 02                 STA    VDUCOL,X
3026
1546 FDE1 81 50                      CMPA   #LINLEN   UNTIL END OF LINE
3027
1547 FDE3 26 F7                      BNE    ESCCL1
3028
1548 FDE5 7F DF FE                   CLR    ESCFLG
3029
1549 FDE8 39                         RTS
3030
1550                         *
3031
1551                         *********************************** CARRIAGE RETURN
3032
1552                         *
3033
1553 FDE9 4F                 CRETN   CLRA               SET COLUMN ZERO
3034
1554 FDEA F6 DF FC           POSCOL  LDB    ROWADX    GET CURRENT ROW
3035
1555                         *
3036
1556                         *********** GENERATE NEW CURSOR POSITION AND RETURN
3037
1557                         *
3038
1558 FDED FD DF FB           NEWCUR  STD    COLADX    SAVE NEW ROW AND COLUMN
3039
1559 FDF0 A7 02                 STA    VDUCOL,X  SET NEW COLUMN
3040
1560 FDF2 E7 03                      STB    VDUROW,X  SET NEW ROW
3041
1561 FDF4 39                         RTS              AND RETURN
3042
1562                         *
3043
1563                         ********************* UPDATE CURRENT COLUMN AND ROW
3044
1564                         *
3045
1565 FDF5 FC DF FB           NEWCOL  LDD    COLADX    GET ROW AND COLUMN
3046
1566 FDF8 4C                         INCA             BUMP COLUMN
3047
1567 FDF9 81 50                      CMPA   #LINLEN   ROLL?
3048
1568 FDFB 26 F0                      BNE    NEWCUR    BRANCH IF NOT
3049
1569 FDFD 4F                         CLRA             ELSE RESET TO ZERO
3050
1570 FDFE 5C                         INCB             AND BUMP ROW
3051
1571 FDFF C1 19                      CMPB   #NUMLIN
3052
1572 FE01 26 EA                      BNE    NEWCUR
3053
1573 FE03 5A                         DECB             BOTTOM ROW
3054
1574 FE04 8D E7                      BSR    NEWCUR
3055
1575                         *
3056
1576                         ********************************* SCROLL THE SCREEN
3057
1577                         *
3058
1578 FE06 E6 04              SCROLL  LDB    VDUOFF,X
3059
1579 FE08 5C                         INCB
3060
1580 FE09 C1 19                      CMPB   #NUMLIN
3061
1581 FE0B 25 01                      BLO    SCROL1
3062
1582 FE0D 5F                         CLRB
3063
1583 FE0E E7 04              SCROL1  STB    VDUOFF,X
3064
1584                         *
3065
1585                         **************** CLEAR FROM CURSOR TO END OF SCREEN
3066
1586                         *
3067
1587 FE10 F6 DF FB           ESCCLS  LDB    COLADX    GET CURSOR
3068
1588 FE13 86 20                      LDA    #$20      GET A SPACE
3069
1589 FE15 F7 DF FB           ESCCLS1    STB    COLADX
3070
1590 FE18 E7 02                      STB    VDUCOL,X
3071
1591 FE1A A7 84                      STA    VDUCHR,X
3072
1592 FE1C 5C                         INCB
3073
1593 FE1D C1 50                      CMPB   #LINLEN
3074
1594 FE1F 26 F4                      BNE    ESCCLS1
3075
1595                         *
3076
1596 FE21 F6 DF FC                   LDB    ROWADX
3077
1597 FE24 5C                         INCB
3078
1598 FE25 C1 19                      CMPB   #NUMLIN
3079
1599 FE27 27 08                      BEQ    ESCCLS2
3080
1600 FE29 F7 DF FC                   STB    ROWADX
3081
1601 FE2C E7 03                      STB    VDUROW,X
3082
1602 FE2E 5F                         CLRB
3083
1603 FE2F 20 E4                      BRA    ESCCLS1
3084
1604                         *
3085
1605 FE31 5F                 ESCCLS2 CLRB
3086
1606 FE32 F7 DF FB                   STB    COLADX
3087
1607 FE35 E7 02                      STB    VDUCOL,X
3088
1608 FE37 F7 DF FE                   STB    ESCFLG
3089
1609 FE3A 39                         RTS
3090
1610                                 ENDIF VDUOPT
3091
1611                         *
3092
1612                                 IFD DG640OPT
3093
1613                         ***************************************************
3094
1614                         *      TELEVIDEO-TYPE MEMORY-MAPPED EMULATOR      *
3095
1615                         *                                                 *
3096
1616                         * FOR HARD-WIRED MEMORY-MAPPED DISPLAYS USING THE *
3097
1617                         * HIGH ORDER BIT OF EACH BYTE FOR  REVERSE  VIDEO *
3098
1618                         * CURSORING  (SUCH  AS THE THOMAS INSTRUMENTATION *
3099
1619                         * 16x64 BOARD).                                   *
3100
1620                         ***************************************************
3101
1621
3102
1622                         ***************************************************
3103
1623                         *               INITIALIZE EMULATOR               *
3104
1624                         ***************************************************
3105
1625
3106
1626                         VINIZ   LDX    #0
3107
1627                                 STX    COLADX    AND ROWADX
3108
1628                                 STX    NEWROW    AND ESCFLG
3109
1629                                 LDX    #SCREEN   POINT TO SCREEN
3110
1630                                 STX    CURSOR    SET PROGRAM CURSOR
3111
1631                                 LDA    #$1B      SEND ESCAPE
3112
1632                                 BSR    VOUTCH
3113
1633                                 LDA    #'Y       CLEAR TO END OF SCREEN
3114
1634                         *
3115
1635                         ** VIDEO OUTPUT ROUTINE
3116
1636                         *
3117
1637                         VOUTCH  PSHS   A,B,X     SAVE REGISTERS
3118
1638                         *
3119
1639                         ** CLEAR CURSOR
3120
1640                                 LDX    CURSOR
3121
1641                                 LDB   0,X
3122
1642                                 ANDB   #$7F
3123
1643                                 STB   0,X
3124
1644                         *
3125
1645                         ** CHECK FOR ESCAPE SEQUENCE
3126
1646                                 TST    ESCFLG    ESCAPE ACTIVE?
3127
1647                                 BEQ    SOROU1    BRANCH IF NOT
3128
1648                                 BSR   ESCAPE    ELSE DO ESCAPE
3129
1649                                 BRA    RETURN    AND RETURN
3130
1650                         *
3131
1651                         ** CHECK FOR CONTROL CHARACTERS
3132
1652                         SOROU1  CMPA   #$20      CONTROL CODES?
3133
1653                                 BHS    SOROU2
3134
1654                                 BSR    CONTRL    BRANCH IF SO
3135
1655                                 BRA    RETURN
3136
1656                         *
3137
1657                         ** OUTPUT TEXT CHARACTER
3138
1658                         SOROU2  LDX    CURSOR    ELSE GET CURSOR
3139
1659                                 STAA   0,X       DISPLAY CHARACTER
3140
1660                                 LBSR   NEWCOL    UPDATE COLUMN
3141
1661                         *
3142
1662                         ** DISPLAY CURSOR AND RETURN
3143
1663                         RETURN  LDX    CURSOR    AND DISPLAY IT
3144
1664                                 LDB    ,X
3145
1665                                 ORAB   #$80      WITH REVID
3146
1666                                 STB    ,X
3147
1667                                 PULS   A,B,X,PC  RESTORE REGISTERS AND RETURN
3148
1668
3149
1669                         ***************************************************
3150
1670                         *              CONTROL CODE HANDLERS              *
3151
1671                         ***************************************************
3152
1672
3153
1673                         CONTRL  CMPA   #$08      CTRL H - BACKSPACE ?
3154
1674                                 LBEQ   BACKSP
3155
1675                                 CMPA   #$1B      ESCAPE SEQUENCE?
3156
1676                                 LBEQ   SETESC
3157
1677                                 CMPA   #$D       CTRL M - RETURN?
3158
1678                                 LBEQ   CRETN
3159
1679                                 CMPA   #$0A      CTRL J - LINE FEED
3160
1680                                 BNE    RETESC    NONE OF THESE, RETURN
3161
1681
3162
1682                         ***************************************** LINE FEED
3163
1683
3164
1684                         LINEFD  LDD    COLADX    GET CURRENT COLUMN AND ROW
3165
1685                                 INCB             BUMP ROW
3166
1686                                 CMPB   #NUMLIN   SCROLL TIME?
3167
1687                                 LBNE   NEWCUR    POSITION CURSOR IF NOT
3168
1688                                 LBRA   SCROLL    ELSE SCROLL IT
3169
1689
3170
1690                         ***************************************** LINE FEED
3171
1691
3172
1692                         LINEUP  LDD    COLADX    GET CURRENT COLUMN AND ROW
3173
1693                                 TSTB                AT TOP OF SCREEN ?
3174
1694                                 BEQ   RETESC    Yes, Ignore
3175
1695                                 DECB             No, Decrement ROW
3176
1696                                 LBRA   NEWCUR    POSITION CURSOR
3177
1697
3178
1698
3179
1699                         *********************************** BACK SPACE
3180
1700
3181
1701                         BACKSP  LDA    COLADX
3182
1702                                 BEQ    RETESC      RETURN
3183
1703                                 DECA
3184
1704                                 LBRA   POSCOL    POSITION CURSOR
3185
1705
3186
1706                         *********************************** CURSOR RIGHT
3187
1707
3188
1708                         CHRIGHT LDA    COLADX
3189
1709                                 INCA
3190
1710                                 CMPA   #LINLEN
3191
1711                                 BEQ   RETESC
3192
1712                                 LBRA   POSCOL
3193
1713
3194
1714                         ***************************************************
3195
1715                         *                 ESCAPE HANDLERS                 *
3196
1716                         ***************************************************
3197
1717
3198
1718                         ESCAPE  LDAB   ESCFLG    GET FLAG
3199
1719                                 CMPB   #'=       SETTING CURSOR?
3200
1720                                 BEQ    ESCCUR    BRANCH IF SO
3201
1721                                 CMPA   #'Y       CLEAR TO END OF SCREEN?
3202
1722                                 LBEQ   ESCCLS
3203
1723                                 CMPA   #'T       CLEAR TO END OF LINE?
3204
1724                                 BEQ   ESCCLL
3205
1725                                 CMPA   #'E       INSERT LINE?
3206
1726                                 BEQ   ESCINL
3207
1727                                 CMPA   #'R       DELETE LINE?
3208
1728                                 BEQ   ESCDLL
3209
1729                                 CMPA   #'=       STARTING CURSOR SET?
3210
1730                                 BNE    CLRESC    BRANCH IF NOT
3211
1731
3212
1732                         ***************************** START ESCAPE SEQUENCE
3213
1733
3214
1734                         SETESC  STAA   ESCFLG    ELSE START CURSORING
3215
1735                                 RTS              AND RETURN
3216
1736
3217
1737                         CLRESC  CLR    ESCFLG    NO OTHERS SUPPORTED
3218
1738                         RETESC  RTS              SO RETURN
3219
1739
3220
1740                         ********************************* SET SCREEN CURSOR
3221
1741
3222
1742                         ESCCUR  TST   NEWROW    ROW SET?
3223
1743                                 BNE   ESCCU1    BRANCH IF SO
3224
1744                                 STAA  NEWROW    ELSE SET NEW ROW
3225
1745                                 RTS              AND RETURN
3226
1746
3227
1747                         ESCCU1  CLR   ESCFLG
3228
1748                                 SUBA  #$20      ADJUST COLUMN ADDRESS
3229
1749                                 CMPA  #LINLEN-1 CHECK FOR ACCEPTABLE COLUM
3230
1750                                 BHI   RETESC    NOT OK, DO NOTHING
3231
1751
3232
1752                         ESCCU2  LDAB  NEWROW
3233
1753                                 CLR   NEWROW
3234
1754                                 SUBB  #$20      ADJUST TO ROW ADDRESS
3235
1755                                 CMPB  #NUMLIN-1 CHECK FOR ACCEPTABLE ROW
3236
1756                                 BHI   RETESC    ELSE RETURN DOING NOTHING
3237
1757                                 BRA   NEWCUR    GO SET NEW CURSOR IF SO
3238
1758                         *
3239
1759                         *************************** DELETE LINE FROM SCREEN
3240
1760
3241
1761                         ESCDLL  BSR   CRETN     GO COL. ZERO
3242
1762                                 LDB   ROWADX
3243
1763                                 CMPB  #NUMLIN-1
3244
1764                                 BEQ   SCROL3
3245
1765                                 BRA   SCROL1    AND DELETE THIS LINE
3246
1766
3247
1767                         *************************** INSERT LINE INTO SCREEN
3248
1768
3249
1769                         ESCINL  BSR   CRETN    GO TO COL. ZERO
3250
1770                                 LDAB  ROWADX
3251
1771                                 CMPB  #NUMLIN-1
3252
1772                                 BEQ   ESCCLL
3253
1773                         *
3254
1774                         ** SCROLL SCREEN DOWN FROM CURSOR
3255
1775                         *
3256
1776                                 LDX   #SCREEN+SCNLEN-LINLEN
3257
1777                         ESCIN0  LDAA  0,-X
3258
1778                                 STAA  LINLEN,X
3259
1779                                 LDA   SCNLEN,X
3260
1780                                 STA   SCNLEN+LINLEN,X
3261
1781                                 CPX   CURSOR
3262
1782                                 BNE   ESCIN0
3263
1783
3264
1784                         ****************** CLEAR FROM CURSOR TO END OF LINE
3265
1785
3266
1786                         ESCCLL  LDA   COLADX    GET CURRENT COLUMN
3267
1787                                 LDX   CURSOR    GET CURSOR
3268
1788                                 LDB   #$20      AND CLEAR CHAR
3269
1789                         ESCLL1  STB   SCNLEN,X  CLEAR ATTRIBUTE
3270
1790                                 STB   ,X+       CLEAR TEXT
3271
1791                                 INCA
3272
1792                                 CMPA  #LINLEN   UNTIL END OF LINE
3273
1793                                 BNE   ESCLL1
3274
1794                                 CLR   ESCFLG
3275
1795                                 RTS
3276
1796
3277
1797                         *********************************** CARRIAGE RETURN
3278
1798
3279
1799                         CRETN   CLRA               SET COLUMN ZERO
3280
1800                         POSCOL  LDB   ROWADX    GET CURRENT ROW
3281
1801
3282
1802                         *********** GENERATE NEW CURSOR POSITION AND RETURN
3283
1803
3284
1804                         NEWCUR  STD   COLADX    SAVE NEW ROW AND COLUMN
3285
1805                                 LDA   #LINLEN   ELSE ADD A LINE
3286
1806                                 MUL              LINLEN * ROWADX
3287
1807                                 ADDB  COLADX
3288
1808                                 ADCA  #0
3289
1809                                 ADDD  #SCREEN   ADD SCREEN BASE.
3290
1810                                 STD   CURSOR    SAVE NEW CURSOR
3291
1811                                 TFR   D,X       GET CURSOR IN X
3292
1812                                 RTS              AND RETURN
3293
1813
3294
1814                         ********************* UPDATE CURRENT COLUMN AND ROW
3295
1815
3296
1816                         NEWCOL  LDD   COLADX    GET ROW AND COLUMN
3297
1817                                 INCA             BUMP COLUMN
3298
1818                                 CMPA  #LINLEN   ROLL?
3299
1819                                 BNE   NEWCUR    BRANCH IF NOT
3300
1820                                 CLRA             ELSE RESET TO ZERO
3301
1821                                 INCB             AND BUMP ROW
3302
1822                                 CMPB  #NUMLIN
3303
1823                                 BNE   NEWCUR
3304
1824                                 DECB             BOTTOM ROW
3305
1825                                 BSR   NEWCUR
3306
1826
3307
1827                         ********************************* SCROLL THE SCREEN
3308
1828
3309
1829                         SCROLL  LDX   #SCREEN   POINT TO SCREEN
3310
1830                         SCROL1  LDA   SCNLEN+LINLEN,X
3311
1831                                 STA   SCNLEN,X
3312
1832                                 LDAA  LINLEN,X  MOVE TWO BYTES
3313
1833                                 STAA  0,X+      UP ONE LINE
3314
1834                                 CMPX  #SCREEN+SCNLEN-LINLEN
3315
1835                                 BNE   SCROL1    LOOP UNTIL DONE
3316
1836                                 BRA   SCROL3
3317
1837
3318
1838                         **************** CLEAR FROM CURSOR TO END OF SCREEN
3319
1839
3320
1840                         ESCCLS  LDX   CURSOR    GET CURSOR
3321
1841                         SCROL3  LDAA  #$20      GET A SPACE
3322
1842                         SCROL2  STA   SCNLEN,X  CLEAR ATTRIBUTES
3323
1843                                 STA   ,X+       AND TEXT
3324
1844                                 CMPX  #SCREEN+SCNLEN
3325
1845                                 BNE   SCROL2    UNTIL DONE
3326
1846                                 CLR   ESCFLG
3327
1847                                 RTS
3328
1848                                 ENDIF DG640OPT
3329
1848                                 ENDIF DG640OPT
3330
1849                         *
3331
1850                                 IFD PRTOPT
3332
1851                         *************************************
3333
1852                         *
3334
1853                         ** PRINTER DRIVER ROUTINES
3335
1854                         *
3336
1855                         *************************************
3337
1856                         *
3338
1857                         ** PINIZ - INITIATE PRINTER PORT
3339
1858                         *
3340
1859                         PINIZ   PSHS B
3341
1860                                 LDD #DIRMSK*256+$04 ACCA=DIRMSK ACCB=$04
3342
1861                                 STD PADATA SET DDR AND SELECT DATA
3343
1862                         *
3344
1863                         ** RESET PRINTER
3345
1864                                 LDB #PRESET
3346
1865                                 STAB PADATA
3347
1866                         RESTLP  INCB DELAY FOR RESET
3348
1867                                 BNE RESTLP
3349
1868                                 STAA PADATA ACCA=DIRMSK
3350
1869                         *
3351
1870                         ** INITALIZE PORT B (DATA PORT)
3352
1871                                 LDAA #$2A
3353
1872                                 STAA PBCTRL
3354
1873                                 LDD #$FF2E ACCA=$FF ACCB =%00101110
3355
1874                                 STD PBDATA PBDREG   PBCTRL
3356
1875                         *
3357
1876                         ** SELECT 66 LINES/PAGE
3358
1877                                 LDAA #$1B
3359
1878                                 BSR POUTCH
3360
1879                                 LDAA #'C
3361
1880                                 BSR POUTCH
3362
1881                                 LDAA #66
3363
1882                                 PULS B
3364
1883                         *************************************
3365
1884                         *
3366
1885                         ** OUTPUT A CHARACTER TO THE PRINTER
3367
1886                         *
3368
1887                         *************************************
3369
1888                         POUTCH  PSHS B
3370
1889                                 LDAB PBDATA CLEAR INTERRUPT BIT
3371
1890                         *
3372
1891                         ** WAIT TILL NOT BUSY
3373
1892                         BUSYLP  LDAB PADATA
3374
1893                                 BITB #PERROR
3375
1894                                 BEQ PEXIT
3376
1895                                 TSTB
3377
1896                                 BMI BUSYLP
3378
1897                         *
3379
1898                         ** NOW OUTPUT CHARACTER
3380
1899                                 STAA PBDATA
3381
1900                         PEXIT   PULS B,PC
3382
1901                         *************************************
3383
1902                         *
3384
1903                         ** PCHK TEST IFD PRINTER READY
3385
1904                         *
3386
1905                         *************************************
3387
1906                         PCHK    TST PBCTRL TEST STATE OF CRB7
3388
1907                                 RTS SET ON ACKNOWLEDGE
3389
1908                                 ENDIF PRTOPT
3390
1908                                 ENDIF PRTOPT
3391
1909                         *************************************
3392
1910                         *
3393
1911                         * MONITOR KEYBOARD COMMAND JUMP TABLE
3394
1912                         *
3395
1913                         *************************************
3396
1914                         *
3397
1915 FE3B                    JMPTAB EQU *
3398
1916 FE3B 01                  FCB 1 " ^A "
3399
1917 FE3C FB 74               FDB ALTRA
3400
1918 FE3E 02                  FCB 2 " ^B "
3401
1919 FE3F FB 69               FDB ALTRB
3402
1920 FE41 03                  FCB 3 " ^C "
3403
1921 FE42 FB 7F               FDB ALTRCC
3404
1922 FE44 04                  FCB 4 " ^D "
3405
1923 FE45 FB 5E               FDB ALTRDP
3406
1924 FE47 10                  FCB $10 " ^P "
3407
1925 FE48 FB 31               FDB ALTRPC
3408
1926 FE4A 15                  FCB $15 " ^U "
3409
1927 FE4B FB 3D               FDB ALTRU
3410
1928 FE4D 18                  FCB $18 " ^X "
3411
1929 FE4E FB 53               FDB ALTRX
3412
1930 FE50 19                  FCB $19 " ^Y "
3413
1931 FE51 FB 48               FDB ALTRY
3414
1932                         *
3415
1933 FE53 42                  FCC 'B'
3416
1934 FE54 F9 5C               FDB BRKPNT
3417
1935 FE56 45                  FCC 'E'
3418
1936 FE57 F8 FD               FDB MEMDUMP
3419
1937 FE59 47                  FCC 'G'
3420
1938 FE5A F8 A5               FDB GO
3421
1939 FE5C 4C                  FCC 'L'
3422
1940 FE5D FA 5E               FDB LOAD
3423
1941 FE5F 50                  FCC 'P'
3424
1942 FE60 FA BC               FDB PUNCH
3425
1943 FE62 4D                  FCC 'M'
3426
1944 FE63 F8 A8               FDB MEMCHG
3427
1945 FE65 52                  FCC 'R'
3428
1946 FE66 FB ED               FDB REGSTR
3429
1947 FE68 53                  FCC 'S'
3430
1948 FE69 F8 F1               FDB DISSTK
3431
1949 FE6B 58                  FCC 'X'
3432
1950 FE6C F9 88               FDB XBKPNT
3433
1951                          IFD MFDCOPT
3434
1952                          FCC 'D'      *** SWTPC USES 'U' FOR MINIBOOT
3435
1953                          FDB MINBOOT
3436
1954                          ENDIF MFDCOPT
3437
1954                          ENDIF MFDCOPT
3438
1955                          IFD CF8OPT
3439
1956                          FCC 'D'      *** FPGA 8 BIT USES 'D' FOR CFBOOT
3440
1957                          FDB CFBOOT
3441
1958                          ENDIF CF8OPT
3442
1958                          ENDIF CF8OPT
3443
1959                          IFD IDEOPT
3444
1960 FE6E 44                  FCC 'D'      *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
3445
1961 FE6F F9 D5               FDB IDEBOOT
3446
1962                          ENDIF IDEOPT
3447
1963                          IFD DMAFOPT
3448
1964                          FCC 'U'      *** SWTPC USES 'D' FOR DMAF2 BOOT
3449
1965                          FDB DBOOT
3450
1966                          ENDIF DMAFOPT
3451
1966                          ENDIF DMAFOPT
3452
1967                          IFD EXTOPT
3453
1968 FE71 55                  FCC 'U'      *** IF FPGA, 'U' IS FOR USER
3454
1969 FE72 FC 92               FDB USRCMD
3455
1970                          ENDIF EXTOPT
3456
1971                          IFD RTCOPT
3457
1972                          FCC 'T'
3458
1973                          FDB TIMSET
3459
1974                          ENDIF RTCOPT
3460
1974                          ENDIF RTCOPT
3461
1975                          IFD TRAOPT
3462
1976                          FCC "T"
3463
1977                          FDB TRACE
3464
1978                          ENDIF TRAOPT
3465
1978                          ENDIF TRAOPT
3466
1979                         *
3467
1980 FE74                    TABEND EQU *
3468
1981                         *
3469
1982                         * ** 6809 VECTOR ADDRESSES **
3470
1983                         *
3471
1984                         * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
3472
1985                         * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
3473
1986                         * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
3474
1987                         * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
3475
1988                         * HIS OWN ROUTINES IF HE SO DESIRES.
3476
1989                         *
3477
1990                         *
3478
1991 FE74 F9 94              RAMVEC FDB SWIE  USER-V
3479
1992 FE76 F8 A7               FDB RTI    SWI3-V
3480
1993 FE78 F8 A7               FDB RTI    SWI2-V
3481
1994 FE7A F8 A7               FDB RTI    FIRQ-V
3482
1995 FE7C F8 A7               FDB RTI    IRQ-V
3483
1996 FE7E F9 94               FDB SWIE   SWI-V
3484
1997 FE80 FF FF               FDB $FFFF  SVC-VO
3485
1998 FE82 FF FF               FDB $FFFF  SVC-VL
3486
1999                         *
3487
2000                         * PRINTABLE MESSAGE STRINGS
3488
2001                         *
3489
2002 FE84 0D 0A 00 00 00     MSG1  FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0
3490
2003 FE89 53 59 53 30 39 42        FCC 'SYS09BUG 1.4 FOR '
3491
          55 47 20 31 2E 34
3492
          20 46 4F 52 20
3493
2004                               IFD S3EOPT
3494
2005                               FCC 'S3E '
3495
2006                               ENDIF S3EOPT
3496
2006                               ENDIF S3EOPT
3497
2007                               IFD B5XOPT
3498
2008                               FCC 'B5-X300 '
3499
2009                               ENDIF B5XOPT
3500
2009                               ENDIF B5XOPT
3501
2010                               IFD S3SOPT
3502
2011                               FCC 'S3STARTER '
3503
2012                               ENDIF S3SOPT
3504
2012                               ENDIF S3SOPT
3505
2013                               IFD ADSOPT
3506
2014                               FCC 'ADS6809 '
3507
2015                               ENDIF ADSOPT
3508
2015                               ENDIF ADSOPT
3509
2016                               IFD SWTOPT`
3510
2017                               FCC 'SWTPC '
3511
2018                               ENDIF SWTOPT
3512
2018                               ENDIF SWTOPT
3513
2019                               IFD XESOPT`
3514
2020 FE9A 58 45 53 53 20           FCC  'XESS '
3515
2021                               ENDIF XESOPT
3516
2022 FE9F 20 2D 20                 FCC ' - '
3517
2023 FEA2 04                       FCB 4
3518
2024 FEA3 4B 0D 0A 00 00 00  MSG2  FCB 'K,$D,$A,$00,$00,$00,$04 K, * CR/LF + 3 NULS
3519
          04
3520
2025 FEAA 3E                 MSG3  FCC '>'
3521
2026 FEAB 04                       FCB 4
3522
2027 FEAC 57 48 41 54 3F     MSG4  FCC 'WHAT?'
3523
2028 FEB1 04                       FCB 4
3524
2029 FEB2 20 2D 20           MSG5  FCC ' - '
3525
2030 FEB5 04                       FCB 4'
3526
2031 FEB6 20 20 53 50 3D     MSG10 FCC '  SP='
3527
2032 FEBB 04                       FCB 4
3528
2033 FEBC 20 20 50 43 3D     MSG11 FCC '  PC='
3529
2034 FEC1 04                       FCB 4
3530
2035 FEC2 20 20 55 53 3D     MSG12 FCC '  US='
3531
2036 FEC7 04                       FCB 4
3532
2037 FEC8 20 20 49 59 3D     MSG13 FCC '  IY='
3533
2038 FECD 04                       FCB 4
3534
2039 FECE 20 20 49 58 3D     MSG14 FCC '  IX='
3535
2040 FED3 04                       FCB 4
3536
2041 FED4 20 20 44 50 3D     MSG15 FCC '  DP='
3537
2042 FED9 04                       FCB 4
3538
2043 FEDA 20 20 41 3D        MSG16 FCC '  A='
3539
2044 FEDE 04                       FCB 4
3540
2045 FEDF 20 20 42 3D        MSG17 FCC '  B='
3541
2046 FEE3 04                       FCB 4
3542
2047 FEE4 20 20 43 43 3A 20  MSG18 FCC '  CC: '
3543
2048 FEEA 04                       FCB 4
3544
2049 FEEB 45 46 48 49 4E 5A  MSG19 FCC 'EFHINZVC'
3545
          56 43
3546
2050 FEF3 53 31              MSG20 FCC 'S1'
3547
2051 FEF5 04                       FCB 4
3548
2052                                 IFD DATOPT
3549
2053                         *
3550
2054                         * POWER UP/ RESET/ NMI ENTRY POINT
3551
2055                         *
3552
2056 FF00                     ORG $FF00
3553
2057                         *
3554
2058                         *
3555
2059 FF00 8E FF F0           START LDX  #IC11  POINT TO DAT RAM IC11
3556
2060 FF03 86 0F                      LDA  #$F GET COMPLIMENT OF ZERO
3557
2061                         *
3558
2062                         *
3559
2063                         * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
3560
2064                         * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS
3561
2065                         * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE
3562
2066                         * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA
3563
2067                         * STORED IN IT.
3564
2068                         *
3565
2069                         *
3566
2070 FF05 A7 80              DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION
3567
2071 FF07 4A                         DECA  GET COMP. VALUE FOR NEXT LOCATION
3568
2072 FF08 26 FB                      BNE  DATLP ALL 16 LOCATIONS INITIALIZED ?
3569
2073                         *
3570
2074                         * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
3571
2075                         *       ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
3572
2076                         *       PHYSICAL ADDRESSES.
3573
2077                         *
3574
2078 FF0A 86 F0                      LDA  #$F0
3575
2079 FF0C A7 84                      STA  ,X STORE $F0 AT $FFFF
3576
2080 FF0E 8E D0 A0                   LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF
3577
2081 FF11 10 8E 55 AA                LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y"
3578
2082 FF15 EE 84              TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION
3579
2083 FF17 10 AF 84                   STY  ,X STORE TEST PATTERN AT $D0A0
3580
2084 FF1A 10 AC 84                   CMPY ,X IS THERE RAM AT THIS LOCATION ?
3581
2085 FF1D 27 0B                      BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP
3582
2086 FF1F 30 89 F0 00                LEAX -$1000,X ELSE POINT 4K LOWER
3583
2087 FF23 8C F0 A0                   CMPX #$F0A0 DECREMENTED PAST ZER0 YET ?
3584
2088 FF26 26 ED                      BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM
3585
2089 FF28 20 D6                      BRA  START ELSE START ALL OVER AGAIN
3586
2090                         *
3587
2091                         *
3588
2092                         * THE FOLLOWING CODE STORES THE COMPLEMENT OF
3589
2093                         * THE MS CHARACTER OF THE FOUR CHARACTER HEX
3590
2094                         * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED
3591
2095                         * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT
3592
2096                         * IS STORED IN RAM IN THE LOCATION THAT IS
3593
2097                         * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---,
3594
2098                         * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND
3595
2099                         * WHEN TESTING LOCATION $70A0, MEANING THERE
3596
2100                         * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE
3597
2101                         * $8000-$DFFF, THEN THE COMPLEMENT OF THE
3598
2102                         * "7" IN THE $70A0 WILL BE STORED IN
3599
2103                         * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS
3600
2104                         * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND
3601
2105                         * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE
3602
2106                         * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE
3603
2107                         * RAM THAT IS PHYSICALLY ADDRESSED AT $7---
3604
2108                         * WILL RESPOND AND APPEAR TO THE 6809 THAT IT
3605
2109                         * IS AT $D--- SINCE THAT IS THE ADDRESS THE
3606
2110                         * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK
3607
2111                         * OF RAM RESPONDS.
3608
2112                         *
3609
2113                         *
3610
2114 FF2A EF 84              CNVADR  STU  ,X RESTORE DATA AT TEST LOCATION
3611
2115 FF2C 1F 10                      TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
3612
2116 FF2E 43                         COMA  COMPLEMENT MSB OF THAT ADDRESS
3613
2117 FF2F 44                         LSRA  PUT MS 4 BITS OF ADDRESS IN
3614
2118 FF30 44                         LSRA  LOCATION D0-D3 TO ALLOW STORING
3615
2119 FF31 44                         LSRA  IT IN THE DYNAMIC ADDRESS
3616
2120 FF32 44                         LSRA  TRANSLATION RAM.
3617
2121 FF33 B7 FF FD                   STA  $FFFD STORE XLATION FACTOR IN DAT "D"
3618
2122                         *
3619
2123 FF36 10 CE DF C0                LDS  #STACK INITIALIZE STACK POINTER
3620
2124                         *
3621
2125                         *
3622
2126                         * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
3623
2127                         * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK
3624
2128                         * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS
3625
2129                         * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION
3626
2130                         * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF
3627
2131                         * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO
3628
2132                         * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---....
3629
2133                         *
3630
2134                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3631
2135                         * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- --
3632
2136                         *
3633
2137                         * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE
3634
2138                         * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING....
3635
2139                         *
3636
2140                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3637
2141                         * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0
3638
2142                         *
3639
2143                         *
3640
2144                         * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF
3641
2145                         * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL
3642
2146                         * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK
3643
2147                         * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT
3644
2148                         * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000
3645
2149                         * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000
3646
2150                         * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE
3647
2151                         * MEMORY ADDRESSED AS FOLLOWS....
3648
2152                         *
3649
2153                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
3650
2154                         * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
3651
2155                         *
3652
2156                         *
3653
2157 FF3A 10 8E DF D0                LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
3654
2158 FF3E A7 2D                      STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD
3655
2159 FF40 6F 2E                      CLR  14,Y CLEAR $DFDE
3656
2160 FF42 86 F0                      LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ?
3657
2161 FF44 A7 2F                      STA  15,Y STORE AT $DFDF
3658
2162 FF46 86 0C                      LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR
3659
2163 FF48 6F A6              CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0
3660
2164 FF4A 4A                         DECA SUB. 1 FROM BYTES LEFT TO CLEAR
3661
2165 FF4B 2A FB                      BPL  CLRLRT CONTINUE IF NOT DONE CLEARING
3662
2166 FF4D 30 89 F0 00        FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM
3663
2167 FF51 8C F0 A0                   CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO
3664
2168 FF54 27 22                      BEQ  FINTAB SKIP IF FINISHED
3665
2169 FF56 EE 84                      LDU  ,X SAVE DATA AT CURRENT TEST LOCATION
3666
2170 FF58 10 8E 55 AA                LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG.
3667
2171 FF5C 10 AF 84                   STY  ,X STORE TEST PATT. INTO RAM TEST LOC.
3668
2172 FF5F 10 AC 84                   CMPY ,X VERIFY RAM AT TEST LOCATION
3669
2173 FF62 26 E9                      BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER
3670
2174 FF64 EF 84                      STU  ,X ELSE RESTORE DATA TO TEST LOCATION
3671
2175 FF66 10 8E DF D0                LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
3672
2176 FF6A 1F 10                      TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
3673
2177 FF6C 44                         LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
3674
2178 FF6D 44                         LSRA  TO ALLOW STORING IT IN THE DAT RAM.
3675
2179 FF6E 44                         LSRA
3676
2180 FF6F 44                         LSRA
3677
2181 FF70 1F 89                      TFR  A,B SAVE OFFSET INTO LRARAM TABLE
3678
2182 FF72 88 0F                      EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK
3679
2183 FF74 A7 A5                      STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE
3680
2184 FF76 20 D5                      BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK
3681
2185 FF78 86 F1              FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ?
3682
2186 FF7A 10 8E DF D0                LDY  #LRARAM POINT TO LRARAM TABLE
3683
2187 FF7E A7 2E                      STA  14,Y STORE $F1 AT $DFCE
3684
2188                         *
3685
2189                         * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
3686
2190                         * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
3687
2191                         * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT
3688
2192                         * LOGICALLY RESPONDS TO THE ADDRESS $C---.
3689
2193                         *
3690
2194                         *
3691
2195 FF80 86 0C                      LDA  #$0C PRESET NUMBER HEX "C"
3692
2196 FF82 E6 A6              FINDC   LDB  A,Y GET ENTRY FROM LRARAM TABLE
3693
2197 FF84 26 05                      BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR.
3694
2198 FF86 4A                         DECA  ELSE POINT 4K LOWER
3695
2199 FF87 2A F9                      BPL  FINDC GO TRY AGAIN
3696
2200 FF89 20 14                      BRA  XFERTF
3697
2201 FF8B 6F A6              FOUNDC  CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND
3698
2202 FF8D E7 2C                      STB  $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C---
3699
2203                         *
3700
2204                         * THE FOLLOWING CODE ADJUSTS THE TRANSLATION
3701
2205                         * FACTORS SUCH THAT ALL REMAINING RAM WILL
3702
2206                         * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
3703
2207                         * ADDRESSES FROM $0000 AND UP....
3704
2208                         *
3705
2209 FF8F 4F                         CLRA  START AT ZERO
3706
2210 FF90 1F 21                      TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE.
3707
2211 FF92 E6 A6              COMPRS  LDB  A,Y GET ENTRY FROM "LRARAM" TABLE
3708
2212 FF94 27 04                      BEQ  PNTNXT IF IT'S ZER0 SKIP
3709
2213 FF96 6F A6                      CLR  A,Y ELSE ERASE FROM TABLE
3710
2214 FF98 E7 80                      STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP
3711
2215 FF9A 4C                 PNTNXT  INCA GET OFFSET TO NEXT ENTRY
3712
2216 FF9B 81 0C                      CMPA #$0C LAST ENTRY YET ?
3713
2217 FF9D 2D F3                      BLT  COMPRS
3714
2218                         *
3715
2219                         * THE FOLLOWING CODE TRANSFER THE TRANSLATION
3716
2220                         * FACTORS FROM THE LRARAM TABLE TO IC11 ON
3717
2221                         * THE MP-09 CPU CARD.
3718
2222                         *
3719
2223 FF9F 8E FF F0           XFERTF  LDX  #IC11  POINT TO DAT RAM IC11
3720
2224 FFA2 C6 10                      LDB  #$10 GET NO. OF BYTES TO MOVE
3721
2225 FFA4 A6 A0              FETCH   LDA  ,Y+ GET BYTE AND POINT TO NEXT
3722
2226 FFA6 A7 80                      STA  ,X+ POKE XLATION FACTOR IN IC11
3723
2227 FFA8 5A                         DECB  SUB 1 FROM BYTES TO MOVE
3724
2228 FFA9 26 F9                      BNE  FETCH CONTINUE UNTIL 16 MOVED
3725
2229                         *
3726
2230                                 ELSE
3727
2231                         LRA     RTS
3728
2232                         START   LDS  #STACK INITIALIZE STACK POINTER
3729
2233                                 CLRB
3730
2234                                 ENDIF DATOPT
3731
2234                                 ENDIF DATOPT
3732
2235                         *
3733
2236 FFAB 53                         COMB  SET "B" NON-ZERO
3734
2237 FFAC F7 DF E2                   STB  ECHO TURN ON ECHO FLAG
3735
2238 FFAF 16 F8 62                   LBRA MONITOR INITIALIZATION IS COMPLETE
3736
2239                         *
3737
2240                         ** INTERRUPT JUMP VECTORS
3738
2241                         *
3739
2242 FFB2 6E 9F DF C0        V1 JMP  [STACK]
3740
2243 FFB6 6E 9F DF C4        V2 JMP  [SWI2]
3741
2244 FFBA 6E 9F DF C6        V3 JMP  [FIRQ]
3742
2245 FFBE 6E 9F DF C8        V4 JMP  [IRQ]
3743
2246 FFC2 6E 9F DF CA        V5 JMP  [SWI]
3744
2247                         *
3745
2248                         * SWI3 ENTRY POINT
3746
2249                         *
3747
2250 FFC6 1F 43              SWI3E  TFR  S,U
3748
2251 FFC8 AE 4A                     LDX  10,U      *$FFC8
3749
2252 FFCA E6 80                     LDB  ,X+
3750
2253 FFCC AF 4A                     STX  10,U
3751
2254 FFCE 4F                        CLRA
3752
2255 FFCF 58                        ASLB
3753
2256 FFD0 49                        ROLA
3754
2257 FFD1 BE DF CC                  LDX  SVCVO
3755
2258 FFD4 8C FF FF                  CMPX #$FFFF
3756
2259 FFD7 27 0F                     BEQ  SWI3Z
3757
2260 FFD9 30 8B                     LEAX D,X
3758
2261 FFDB BC DF CE                  CMPX SVCVL
3759
2262 FFDE 22 08                     BHI  SWI3Z
3760
2263 FFE0 34 10                     PSHS X
3761
2264 FFE2 EC C4                     LDD  ,U
3762
2265 FFE4 AE 44                     LDX  4,U
3763
2266 FFE6 6E F1                     JMP  [,S++]
3764
2267 FFE8 37 1F              SWI3Z PULU A,B,X,CC,DP
3765
2268 FFEA EE 42                     LDU  2,U
3766
2269 FFEC 6E 9F DF C2               JMP  [SWI3]
3767
2270                         *
3768
2271                         * 6809 VECTORS
3769
2272                         *
3770
2273 FFF0                           ORG $FFF0
3771
2274 FFF0 FF B2                     FDB V1    USER-V
3772
2275 FFF2 FF C6                     FDB SWI3E SWI3-V
3773
2276 FFF4 FF B6                     FDB V2    SWI2-V
3774
2277 FFF6 FF BA                     FDB V3    FIRQ-V
3775
2278 FFF8 FF BE                     FDB V4    IRQ-V
3776
2279 FFFA FF C2                     FDB V5    SWI-V
3777
2280 FFFC FF B2                     FDB V1    NMI-V
3778
2281 FFFE FF 00                     FDB START RESTART-V
3779
0005                                END START
3780
0006                          END
3781
Program + Init Data = 3583 bytes
3782
Error count = 0

powered by: WebSVN 2.1.0

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