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

Subversion Repositories System09

[/] [System09/] [tags/] [V10/] [sw/] [sbug_src.lst] - Blame information for rev 188

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

Line No. Rev Author Line
1 2 dilbert57
0001                         * NAM SBUG18 MP-09 MONITOR
2
0002                          OPT l
3
sbug_src.txt                                   page   2
4
0004                         *
5
0005                         * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL
6
0006                         * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY....
7
0007                         *
8
0008                         * ALLEN CLARK            WALLACE WATSON
9
0009                         * 2502 REGAL OAKS LANE   4815 EAST 97th AVE.
10
0010                         * LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617
11
0011                         * PH. 813-977-0347       PH. 813-985-1359
12
0012                         *
13
0013                         * MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT
14
0014                         *                                 2561 NANTUCKET DR APT. E
15
0015                         *                                 ATLANTA, GA  30345
16
0016                         *                                 PH. 404-320-1043
17
0017                         *
18
0018                         *
19
0019                         *       *** COMMANDS ***
20
0020                         *
21
0021                         * CONTROL A   = ALTER THE "A" ACCUMULATOR
22
0022                         * CONTROL B   = ALTER THE "B" ACCUMULATOR
23
0023                         * CONTROL C   = ALTER THE CONDITION CODE REGISTER
24
0024                         * CONTROL D   = ALTER THE DIRECT PAGE REGISTER
25
0025                         * CONTROL P   = ALTER THE PROGRAM COUNTER
26
0026                         * CONTROL U   = ALTER USER STACK POINTER
27
0027                         * CONTROL X   = ALTER "X" INDEX REGISTER
28
0028                         * CONTROL Y   = ALTER "Y" INDEX REGISTER
29
0029                         * B hhhh      = SET BREAKPOINT AT LOCATION $hhhh
30
0030                         * D           = BOOT A SWTPC 8 INCH FLOPPY SYSTEM
31
0031                         * U           = BOOT A SWTPC 5 INCH FLOPPY SYSTEM
32
0032                         * E ssss-eeee = EXAMINE MEMORY FROM STARTING ADDRESS ssss
33
0033                         *              -TO ENDING ADDRESS eeee.
34
0034                         * G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI
35
0035                         * L           = LOAD TAPE
36
0036                         * M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh
37
0037                         * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR.
38
0038                         * Q ssss-eeee = TEST MEMORY FROM ssss TO eeee
39
0039                         * R           = DISPLAY REGISTER CONTENTS
40
0040                         * S           = DISPLAY STACK FROM ssss TO $DFC0
41
0041                         * X           = REMOVE ALL BREAKPOINTS
42
0042                         *
43
0043                         *
44
0044 55aa                    TSTPAT EQU $55AA  TEST PATTERN
45
0045                         *
46
0046                         *
47
0047                         *
48
0048 dfc0                           ORG $DFC0
49
0049 dfc0                    STACK  RMB 2  TOP OF INTERNAL STACK / USER VECTOR
50
0050 dfc2                    SWI3   RMB 2  SOFTWARE INTERRUPT VECTOR #3
51
0051 dfc4                    SWI2   RMB 2  SOFTWARE INTERRUPT VECTOR #2
52
0052 dfc6                    FIRQ   RMB 2  FAST INTERRUPT VECTOR
53
0053 dfc8                    IRQ    RMB 2  INTERRUPT VECTOR
54
0054 dfca                    SWI    RMB 2  SOFTWARE INTERRUPT VECTOR
55
0055 dfcc                    SVCVO  RMB 2  SUPERVISOR CALL VECTOR ORGIN
56
0056 dfce                    SVCVL  RMB 2  SUPERVISOR CALL VECTOR LIMIT
57
0057 dfd0                    LRARAM RMB 16 LRA ADDRESSES
58
0058 dfe0                    CPORT  RMB 2  RE-VECTORABLE CONTROL PORT
59
0059 dfe2                    ECHO   RMB 1  ECHO FLAG
60
0060 dfe3                    BPTBL  RMB 24 BREAKPOINT TABLE BASE ADDR
61
0061 e004                    ACIAS  EQU $E004  CONTROL PORT
62
0062 e018                    Comreg EQU $E018  COMMAND REGISTER
63
0063 e014                    Drvreg EQU $E014  DRIVE REGISTER
64
0064 e01a                    Secreg EQU $E01A  SECTOR REGISTER
65
0065 e01b                    Datreg EQU $E01B  DATA REGISTER
66
0066                         *
67
0067 f000                    ADDREG EQU $F000  ADDRESS REGISTER
68
0068 f002                    CNTREG EQU $F002  COUNT REGISTER
69
0069 f010                    CCREG  EQU $F010  CHANNEL CONTROL REGISTER
70
0070 f014                    PRIREG EQU $F014  DMA PRIORITY REGISTER
71
0071 f015                    AAAREG EQU $F015  ???
72
0072 f016                    BBBREG EQU $F016  ???
73
0073 f020                    COMREG EQU $F020  1791 COMMAND REGISTER
74
0074 f022                    SECREG EQU $F022  SECTOR REGISTER
75
0075 f024                    DRVREG EQU $F024  DRIVE SELECT LATCH
76
0076 f040                    CCCREG EQU $F040  ???
77
0077                         *
78
0078 fff0                    IC11   EQU $FFF0  DAT RAM CHIP
79
0079                         *
80
0080 f800                     ORG $F800
81
0081 f800 f8 14               FDB MONITOR
82
0082 f802 f8 61               FDB NEXTCMD
83
0083 f804 fd cf               FDB INCH
84
0084 f806 fd c9               FDB INCHE
85
0085 f808 fd df               FDB INCHEK
86
0086 f80a fd ee               FDB OUTCH
87
0087 f80c fd bd               FDB PDATA
88
0088 f80e fd b1               FDB PCRLF
89
0089 f810 fd ad               FDB PSTRNG
90
0090 f812 fb 81               FDB LRA
91
0091                         *
92
0092                         * MONITOR
93
0093                         *
94
0094                         * VECTOR ADDRESS STRING IS.....
95
0095                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
96
0096                         *
97
0097 f814 8e fe 4f           MONITOR LDX #RAMVEC POINT TO VECTOR ADDR. STRING
98
0098 f817 10 8e df c0         LDY  #STACK POINT TO RAM VECTOR LOCATION
99
0099 f81b c6 10               LDB  #$10 BYTES TO MOVE = 16
100
0100 f81d a6 80              LOOPA LDA  ,X+ GET VECTOR BYTE
101
0101 f81f a7 a0               STA  ,Y+   PUT VECTORS IN RAM / $DFC0-$DFCF
102
0102 f821 5a                  DECB SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
103
0103 f822 26 f9               BNE LOOPA CONTINUE UNTIL ALL VECTORS MOVED
104
0104                         *
105
0105                         * CONTENTS     FROM         TO      FUNCTION
106
0106                         *  $F8A1       $FE40      $DFC0     USER-V
107
0107                         *  $F8A1       $FE42      $DFC2     SWI3-V
108
0108                         *  $F8A1       $FE44      $DFC4     SWI2-V
109
0109                         *  $F8A1       $FE46      $DFC6     FIRQ-V
110
0110                         *  $F8A1       $FE48      $DFC8     IRQ-V
111
0111                         *  $FAB0       $FE4A      $DFCA     SWI-V
112
0112                         *  $FFFF       $FE4C      $DFCC     SVC-VO
113
0113                         *  $FFFF       $FE4E      $DFCE     SVC-VL
114
0114                         *
115
0115 f824 8e e0 04            LDX  #ACIAS  GET CONTROL PORT ADDR.
116
0116 f827 bf df e0            STX  CPORT   STORE ADDR. IN RAM
117
0117 f82a 17 02 7a            LBSR XBKPNT  CLEAR OUTSTANDING BREAKPOINTS
118
0118 f82d c6 0c               LDB  #12     CLEAR 12 BYTES ON STACK
119
0119 f82f 6f e2              CLRSTK CLR  ,-S
120
0120 f831 5a                  DECB
121
0121 f832 26 fb               BNE  CLRSTK
122
0122 f834 30 8c dd            LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY
123
0123 f837 af 6a               STX  10,S ON STACK
124
0124 f839 86 d0               LDA  #$D0  PRESET CONDITION CODES ON STACK
125
0125 f83b a7 e4               STA  ,S
126
0126 f83d 1f 43               TFR  S,U
127
0127 f83f 17 05 be            LBSR ACINIZ  INITIALIZE CONTROL PORT
128
0128 f842 8e fe 5f            LDX  #MSG1  POINT TO 'SBUG 1.8' MESSAGE
129
0129 f845 17 05 75            LBSR PDATA  PRINT MSG
130
0130 f848 8e df d0            LDX  #LRARAM  POINT TO LRA RAM STORAGE AREA
131
0131 f84b 4f                  CLRA START TOTAL AT ZERO
132
0132 f84c c6 0d               LDB  #13  TOTAL UP ALL ACTIVE RAM MEMORY
133
0133 f84e 6d 85              FNDREL TST  B,X TEST FOR RAM AT NEXT LOC.
134
0134 f850 27 03               BEQ  RELPAS IF NO RAM GO TO NEXT LOC.
135
0135 f852 8b 04               ADDA #4 ELSE ADD 4K TO TOTAL
136
0136 f854 19                  DAA  ADJ. TOTAL FOR DECIMAL
137
0137 f855 5a                 RELPAS DECB SUB. 1 FROM LOCS. TO TEST
138
0138 f856 2a f6               BPL  FNDREL  PRINT TOTAL OF RAM
139
0139 f858 17 05 26            LBSR OUT2H OUTPUT HEX BYTE AS ASCII
140
0140 f85b 8e fe 74            LDX  #MSG2  POINT TO MSG 'K' CR/LF + 3 NULS
141
0141 f85e 17 05 5c            LBSR PDATA  PRINT MSG
142
0142                         *
143
0143                         ***** NEXTCMD *****
144
0144                         *
145
0145 f861 8e fe 7b           NEXTCMD LDX  #MSG3   POINT TO MSG ">"
146
0146 f864 17 05 46            LBSR PSTRNG PRINT MSG
147
0147 f867 17 05 65            LBSR INCH  GET ONE CHAR. FROM TERMINAL
148
0148 f86a 84 7f               ANDA #$7F STRIP PARITY FROM CHAR.
149
0149 f86c 81 0d               CMPA #$0D IS IT CARRIAGE RETURN ?
150
0150 f86e 27 f1               BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR.
151
0151 f870 1f 89               TFR  A,B PUT CHAR. IN "B" ACCUM.
152
0152 f872 81 20               CMPA #$20 IS IT CONTROL OR DATA CHAR ?
153
0153 f874 2c 09               BGE  PRTCMD IF CMD CHAR IS DATA, PRNT IT
154
0154 f876 86 5e               LDA  #'^ ELSE CNTRL CHAR CMD SO...
155
0155 f878 17 05 73            LBSR OUTCH PRINT "^"
156
0156 f87b 1f 98               TFR  B,A RECALL CNTRL CMD CHAR
157
0157 f87d 8b 40               ADDA #$40 CONVERT IT TO ASCII LETTER
158
0158 f87f 17 05 6c           PRTCMD LBSR OUTCH PRNT CMD CHAR
159
0159 f882 17 05 67            LBSR OUT1S PRNT SPACE
160
0160 f885 c1 60               CMPB #$60
161
0161 f887 2f 02               BLE NXTCH0
162
0162 f889 c0 20               SUBB #$20
163
0163                         *
164
0164                         *
165
0165                         ***** DO TABLE LOOKUP *****
166
0166                         *   FOR COMMAND FUNCTIONS
167
0167                         *
168
0168                         *
169
0169 f88b 8e fe 13           NXTCH0 LDX #JMPTAB POINT TO JUMP TABLE
170
0170 f88e e1 80              NXTCHR CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ?
171
0171 f890 27 0f               BEQ  JMPCMD BRANCH IF MATCH FOUND
172
0172 f892 30 02               LEAX 2,X POINT TO NEXT ENTRY IN TABLE
173
0173 f894 8c fe 4f            CMPX #TABEND REACHED END OF TABLE YET ?
174
0174 f897 26 f5               BNE  NXTCHR IF NOT END, CHECK NEXT ENTRY
175
0175 f899 8e fe 7d            LDX  #MSG4  POINT TO MSG "WHAT?"
176
0176 f89c 17 05 1e            LBSR PDATA  PRINT MSG
177
0177 f89f 20 c0               BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD
178
0178 f8a1 ad 94              JMPCMD JSR  [,X] JUMP TO COMMAND ROUTINE
179
0179 f8a3 20 bc               BRA  NEXTCMD PROMPT FOR NEW COMMAND
180
0180                         *
181
0181                         * "G" GO OR CONTINUE
182
0182                         *
183
0183 f8a5 1f 34              GO TFR  U,S
184
0184 f8a7 3b                 RTI RTI
185
0185                         *
186
0186                         * "R" DISPLAY REGISTERS
187
0187                         *
188
0188 f8a8 8e fe 83           REGSTR LDX  #MSG5 POINT TO MSG " - "
189
0189 f8ab 17 04 ff            LBSR PSTRNG PRINT MSG
190
0190 f8ae 17 04 11            LBSR PRTSP $FCBF
191
0191 f8b1 17 04 19            LBSR PRTUS $FCCA
192
0192 f8b4 17 04 21            LBSR PRTDP $FCD5
193
0193 f8b7 17 04 29            LBSR PRTIX $FCE0
194
0194 f8ba 17 04 31            LBSR PRTIY $FCEB
195
0195 f8bd 8e fe 83            LDX  #MSG5 POINT TO MSG " - "
196
0196 f8c0 17 04 ea            LBSR PSTRNG PRINT MSG
197
0197 f8c3 17 04 33            LBSR PRTPC $FCF5
198
0198 f8c6 17 04 3a            LBSR PRTA $FCFF
199
0199 f8c9 17 04 41            LBSR PRTB $FD09
200
0200 f8cc 16 04 48            LBRA PRTCC $FD13
201
0201                         *
202
0202                         *
203
0203                         * ALTER "PC" PROGRAM COUNTER
204
0204                         *
205
0205                         *
206
0206 f8cf 17 04 27           ALTRPC LBSR PRTPC $FCF5 PRINT MSG " PC = "
207
0207 f8d2 17 05 17            LBSR OUT1S OUTPUT SPACE
208
0208 f8d5 17 04 57            LBSR IN1ADR GET NEW CONTENTS FOR "PC"
209
0209 f8d8 29 02               BVS  ALTPCD EXIT IF INVALID HEX
210
0210 f8da af 4a               STX  10,U POKE IN NEW CONTENTS
211
0211 f8dc 39                 ALTPCD RTS ;
212
0212                         *
213
0213                         *
214
0214                         * ALTER "U" USER STACK POINTER
215
0215                         *
216
0216                         *
217
0217 f8dd 17 03 ed           ALTRU LBSR PRTUS $FCCA PRINT MSG " US = "
218
0218 f8e0 17 05 09            LBSR OUT1S OUTPUT SPACE
219
0219 f8e3 17 04 49            LBSR IN1ADR
220
0220 f8e6 29 02               BVS  ALTUD
221
0221 f8e8 af 48               STX  8,U
222
0222 f8ea 39                 ALTUD RTS ;
223
0223                         *
224
0224                         *
225
0225                         * ALTER "Y" INDEX REGISTER
226
0226                         *
227
0227                         *
228
0228 f8eb 17 04 00           ALTRY LBSR PRTIY PRINT MSG " IY = "
229
0229 f8ee 17 04 fb            LBSR OUT1S OUTPUT SPACE
230
0230 f8f1 17 04 3b            LBSR IN1ADR
231
0231 f8f4 29 02               BVS  ALTYD
232
0232 f8f6 af 46               STX  6,U   $F8F0
233
0233 f8f8 39                 ALTYD RTS ;
234
0234                         *
235
0235                         *
236
0236                         * ALTER "X" INDEX REGISTER
237
0237                         *
238
0238                         *
239
0239 f8f9 17 03 e7           ALTRX LBSR PRTIX $FCE0 PRINT MSG " IX = "
240
0240 f8fc 17 04 ed            LBSR OUT1S OUTPUT SPACE
241
0241 f8ff 17 04 2d            LBSR IN1ADR
242
0242 f902 29 02               BVS  ALTXD
243
0243 f904 af 44               STX  4,U
244
0244 f906 39                 ALTXD RTS ;
245
0245                         *
246
0246                         *
247
0247                         * ALTER "DP" DIRECT PAGE REGISTER
248
0248                         *
249
0249                         *
250
0250 f907 17 03 ce           ALTRDP LBSR PRTDP $FCD5 PRINT MSG " DP = "
251
0251 f90a 17 04 df            LBSR OUT1S OUTPUT SPACE
252
0252 f90d 17 04 30            LBSR BYTE INPUT BYTE (2 HEX CHAR)
253
0253 f910 29 02               BVS  ALTDPD
254
0254 f912 a7 43               STA  3,U
255
0255 f914 39                 ALTDPD RTS ;
256
0256                         *
257
0257                         *
258
0258                         * ALTER "B" ACCUMULATOR
259
0259                         *
260
0260                         *
261
0261 f915 17 03 f5           ALTRB LBSR PRTB $FD09 PRINT MSG " B = "
262
0262 f918 17 04 d1            LBSR OUT1S OUTPUT SPACE
263
0263 f91b 17 04 22            LBSR BYTE INPUT BYTE (2 HEX CHAR)
264
0264 f91e 29 02               BVS  ALTBD
265
0265 f920 a7 42               STA  2,U
266
0266 f922 39                 ALTBD RTS       $F91C
267
0267                         *
268
0268                         *
269
0269                         * ALTER "A" ACCUMULATOR
270
0270                         *
271
0271                         *
272
0272 f923 17 03 dd           ALTRA LBSR PRTA $FCFF RINT MSG " A = "
273
0273 f926 17 04 c3            LBSR OUT1S OUTPUT SPACE
274
0274 f929 17 04 14            LBSR BYTE INPUT BYTE (2 HEX CHAR)
275
0275 f92c 29 02               BVS  ALTAD
276
0276 f92e a7 41               STA  1,U
277
0277 f930 39                 ALTAD RTS ;
278
0278                         *
279
0279                         *
280
0280                         * ALTER "CC" REGISTER
281
0281                         *
282
0282                         *
283
0283 f931 17 03 e3           ALTRCC LBSR PRTCC $FD13 PRINT MSG " CC: "
284
0284 f934 17 04 b5            LBSR OUT1S OUTPUT SPACE
285
0285 f937 17 04 06            LBSR BYTE INPUT BYTE (2 HEX CHAR)
286
0286 f93a 29 04               BVS  ALTCCD
287
0287 f93c 8a 80               ORA  #$80 SETS "E" FLAG IN PRINT LIST
288
0288 f93e a7 c4               STA  ,U
289
0289 f940 39                 ALTCCD RTS ;
290
0290                         *
291
0291                         ***** "M" MEMORY EXAMINE AND CHANGE *****
292
0292                         *
293
0293 f941 17 03 eb           MEMCHG LBSR IN1ADR  INPUT ADDRESS
294
0294 f944 29 2d               BVS  CHRTN  IF NOT HEX, RETURN
295
0295 f946 1f 12               TFR  X,Y SAVE ADDR IN "Y"
296
0296 f948 8e fe 83           MEMC2 LDX  #MSG5 POINT TO MSG " - "
297
0297 f94b 17 04 5f            LBSR PSTRNG PRINT MSG
298
0298 f94e 1f 21               TFR  Y,X FETCH ADDRESS
299
0299 f950 17 04 26            LBSR OUT4H PRINT ADDR IN HEX
300
0300 f953 17 04 96            LBSR OUT1S OUTPUT SPACE
301
0301 f956 a6 a4               LDA  ,Y GET CONTENTS OF CURRENT ADDR.
302
0302 f958 17 04 26            LBSR OUT2H OUTPUT CONTENTS IN ASCII
303
0303 f95b 17 04 8e            LBSR OUT1S OUTPUT SPACE
304
0304 f95e 17 03 df            LBSR BYTE LOOP WAITING FOR OPERATOR INPUT
305
0305 f961 28 11               BVC  CHANGE IF VALID HEX GO CHANGE MEM. LOC.
306
0306 f963 81 08               CMPA #8  IS IT A BACKSPACE (CNTRL H)?
307
0307 f965 27 e1               BEQ  MEMC2 PROMPT OPERATOR AGAIN
308
0308 f967 81 18               CMPA #$18  IS IT A CANCEL (CNTRL X)?
309
0309 f969 27 dd               BEQ  MEMC2 PROMPT OPERATOR AGAIN
310
0310 f96b 81 5e               CMPA #'^  IS IT AN UP ARROW?
311
0311 f96d 27 17               BEQ  BACK  DISPLAY PREVIOUS BYTE
312
0312 f96f 81 0d               CMPA #$D  IS IT A CR?
313
0313 f971 26 0f               BNE  FORWRD  DISPLAY NEXT BYTE
314
0314 f973 39                 CHRTN RTS  EXIT ROUTINE
315
0315                         *
316
0316                         *
317
0317 f974 a7 a4              CHANGE STA ,Y  CHANGE BYTE IN MEMORY
318
0318 f976 a1 a4               CMPA ,Y  DID MEMORY BYTE CHANGE?
319
0319 f978 27 08               BEQ  FORWRD    $F972
320
0320 f97a 17 04 6f            LBSR OUT1S OUTPUT SPACE
321
0321 f97d 86 3f               LDA  #'?  LOAD QUESTION MARK
322
0322 f97f 17 04 6c            LBSR OUTCH  PRINT IT
323
0323 f982 31 21              FORWRD LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION
324
0324 f984 20 c2               BRA  MEMC2 PRINT LOCATION & CONTENTS
325
0325 f986 31 3f              BACK LEAY -1,Y POINT TO LAST MEM LOCATION
326
0326 f988 20 be               BRA  MEMC2 PRINT LOCATION & CONTENTS
327
0327                         *
328
0328                         * "S" DISPLAY STACK
329
0329                         * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM
330
0330                         ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT.
331
0331                         *
332
0332 f98a 17 03 35           DISSTK LBSR PRTSP PRINT CURRENT STACK POINTER
333
0333 f98d 1f 32               TFR  U,Y
334
0334 f98f 8e df c0            LDX  #STACK LOAD INTERNAL STACK AS UPPER LIMIT
335
0335 f992 30 1f               LEAX -1,X POINT TO CURRENT STACK
336
0336 f994 20 05               BRA  MDUMP1 ENTER MEMORY DUMP OF STACK CONTENTS
337
0337                         *
338
0338                         * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII
339
0339                         * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG.
340
0340                         *                        UPPER ADDRESS IN X-REG.
341
0341                         * IF HEX ADDRESSES ARE INVALID (V)=1.
342
0342                         *
343
0343 f996 17 03 8b           MEMDUMP LBSR IN2ADR INPUT ADDRESS BOUNDRIES
344
0344 f999 29 06               BVS  EDPRTN NEW COMMAND IF ILLEGAL HEX
345
0345 f99b 34 20              MDUMP1 PSHS Y COMPARE LOWER TO UPPER BOUNDS
346
0346 f99d ac e1               CMPX ,S++ LOWER BOUNDS > UPPER BOUNDS?
347
0347 f99f 24 01               BCC  AJDUMP IF NOT, DUMP HEX AND ASCII
348
0348 f9a1 39                 EDPRTN RTS ;
349
0349                         *
350
0350                         * ADJUST LOWER AND UPPER ADDRESS LIMITS
351
0351                         * TO EVEN 16 BYTE BOUNDRIES.
352
0352                         *
353
0353                         * IF LOWER ADDR = $4532
354
0354                         * LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
355
0355                         *
356
0356                         * IF UPPER ADDR = $4567
357
0357                         * UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
358
0358                         *
359
0359                         * ENTER WITH LOWER ADDRESS IN X-REG.
360
0360                         *           -UPPER ADDRESS ON TOP OF STACK.
361
0361                         *
362
0362 f9a2 1f 10              AJDUMP TFR  X,D GET UPPER ADDR IN D-REG
363
0363 f9a4 c3 00 10            ADDD #$10 ADD 16 TO UPPER ADDRESS
364
0364 f9a7 c4 f0               ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
365
0365 f9a9 34 06               PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT
366
0366 f9ab 1f 20               TFR  Y,D   $F9A5 GET LOWER ADDRESS IN D-REG
367
0367 f9ad c4 f0               ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
368
0368 f9af 1f 01               TFR  D,X PUT IN X-REG AS LOWER DUMP LIMIT
369
0369 f9b1 ac e4              NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT
370
0370 f9b3 27 05               BEQ  SKPDMP IF EQUAL SKIP HEX-ASCII DUMP
371
0371 f9b5 17 04 27            LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD
372
0372 f9b8 27 03               BEQ  EDUMP IF NONE, CONTINUE WITH DUMP
373
0373 f9ba 32 62              SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING
374
0374 f9bc 39                  RTS ;
375
0375                         *
376
0376                         * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
377
0377                         * FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
378
0378                         *
379
0379 f9bd 34 10              EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK
380
0380 f9bf 8e fe 83            LDX  #MSG5 POINT TO MSG " - "
381
0381 f9c2 17 03 e8            LBSR PSTRNG PRINT MSG
382
0382 f9c5 ae e4               LDX  ,S LOAD LOWER ADDR FROM TOP OF STACK
383
0383 f9c7 17 03 af            LBSR OUT4H PRINT THE ADDRESS LBSR OUT2S PRINT 2 SPACES
384
0384 f9ca c6 10               LDB  #$10 LOAD COUNT OF 16 BYTES TO DUMP
385
0385 f9cc a6 80              ELOOP LDA  ,X+ GET FROM MEMORY HEX BYTE TO PRINT
386
0386 f9ce 17 03 b0            LBSR OUT2H OUTPUT HEX BYTE AS ASCII
387
0387 f9d1 17 04 18            LBSR OUT1S OUTPUT SPACE
388
0388 f9d4 5a                  DECB      $F9D1 DECREMENT BYTE COUNT
389
0389 f9d5 26 f5               BNE  ELOOP CONTINUE TIL 16 HEX BYTES PRINTED
390
0390                         *
391
0391                         * PRINT 16 ASCII CHARACTERS
392
0392                         * IF NOT PRINTABLE OR NOT VALID
393
0393                         * ASCII PRINT A PERIOD (.)
394
0394 f9d7 17 04 10            LBSR OUT2S 2 SPACES
395
0395 f9da ae e1               LDX  ,S++ GET LOW LIMIT FRM STACK - ADJ STACK
396
0396 f9dc c6 10               LDB  #$10 SET ASCII CHAR TO PRINT = 16
397
0397 f9de a6 80              EDPASC LDA  ,X+ GET CHARACTER FROM MEMORY
398
0398 f9e0 81 20               CMPA #$20 IF LESS THAN $20, NON-PRINTABLE?
399
0399 f9e2 25 04               BCS  PERIOD IF SO, PRINT PERIOD INSTEAD
400
0400 f9e4 81 7e               CMPA #$7E IS IT VALID ASCII?
401
0401 f9e6 23 02               BLS  PRASC IF SO PRINT IT
402
0402 f9e8 86 2e              PERIOD LDA  #'. LOAD A PERIOD (.)
403
0403 f9ea 17 04 01           PRASC LBSR OUTCH PRINT ASCII CHARACTER
404
0404 f9ed 5a                  DECB DECREMENT COUNT
405
0405 f9ee 26 ee               BNE  EDPASC
406
0406 f9f0 20 bf               BRA  NXTLIN
407
0407                         *
408
0408                         ***** "Q" MEMORY TEST *****
409
0409                         *
410
0410 f9f2 6f e2              MEMTST CLR  ,-S CLEAR BYTE ON STACK
411
0411 f9f4 6f e2               CLR  ,-S CLEAR ANOTHER BYTE
412
0412 f9f6 17 03 2b            LBSR IN2ADR GET BEGIN(Y) & END(X) ADDR. LIMITS
413
0413 f9f9 34 30               PSHS X,Y SAVE ADDRESSES ON STACK
414
0414 f9fb 29 7b               BVS  ADJSK6 EXIT IF NOT VALID HEX
415
0415 f9fd ac 62               CMPX 2,S COMPARE BEGIN TO END ADDR.
416
0416 f9ff 25 77               BCS  ADJSK6 EXIT IF BEGIN > END ADDR.
417
0417 fa01 17 03 e8            LBSR OUT1S OUTPUT SPACE
418
0418 fa04 1f 20              MEMSET TFR  Y,D PUT BEGIN ADDR. IN 'D'-ACCUM.
419
0419 fa06 e3 64               ADDD 4,S ADD PASS COUNT TO BEGIN ADDR
420
0420 fa08 34 04               PSHS B ADD LS BYTE TO MS BYTE OF BEGIN ADDR
421
0421 fa0a ab e0               ADDA ,S+
422
0422 fa0c a7 a0               STA  ,Y+ SAVE THIS DATA BYTE AT BEGIN ADDR
423
0423 fa0e 10 ac e4            CMPY ,S COMPARE END TO BEGIN ADDR
424
0424 fa11 25 f1               BCS  MEMSET IF BEGIN LOWER, CONTINUE TO SET MEMORY
425
0425 fa13 10 ae 62            LDY  2,S RELOAD BEGIN ADDRESS
426
0426 fa16 1f 20              TEST1 TFR  Y,D PUT BEGIN ADDR IN 'D'-ACC.
427
0427 fa18 e3 64               ADDD 4,S ADD PASS COUNT TO ADDRESS
428
0428 fa1a 34 02               PSHS A ADD MS BYTE TO LS BYTE OF ADDRESS
429
0429 fa1c eb e0               ADDB ,S+
430
0430 fa1e e8 a0               EORB ,Y+ EX-OR THIS DATA WITH DATA IN MEMORY LOC.
431
0431 fa20 27 3c               BEQ  GUDPAS IF (Z) SET, MEMORY BYTE OK
432
0432 fa22 8e fe 83            LDX  #MSG5 POINT TO MSG " - "
433
0433 fa25 17 03 85            LBSR PSTRNG PRINT MSG
434
0434 fa28 30 3f               LEAX -1,Y GET ERROR ADDRESS IN X-REG
435
0435 fa2a 17 03 4c            LBSR OUT4H OUTPUT IT
436
0436 fa2d 34 10               PSHS X PUSH ERROR ADDR ON STACK
437
0437 fa2f 8e fe a1            LDX  #MSG8  POINT TO MSG " =>"
438
0438 fa32 17 03 88            LBSR PDATA  PRINT MSG
439
0439 fa35 35 10               PULS X POP ERROR ADDR FROM STACK
440
0440 fa37 17 01 47            LBSR LRA GET PHYSICAL ADDR FROM LRA
441
0441 fa3a 17 03 50            LBSR XASCII OUTPUT EXTENDED 4 BITS OF PHYSICAL ADDR
442
0442 fa3d 17 03 39            LBSR OUT4H OUTPUT LS 16 BITS OF PHYSICAL ADDR
443
0443 fa40 8e fe 87            LDX  #MSG6  POINT TO MSG ", PASS "
444
0444 fa43 17 03 77            LBSR PDATA  PRINT MSG
445
0445 fa46 ae 64               LDX  4,S LOAD PASS COUNT
446
0446 fa48 17 03 2e            LBSR OUT4H OUTPUT IT
447
0447 fa4b 8e fe 8f            LDX  #MSG7 POINT TO MSG ", BITS IN ERROR
448
0448 fa4e 17 03 6c            LBSR PDATA  PRINT MSG
449
0449 fa51 1f 98               TFR  B,A GET ERROR BYTE INTO A-ACC
450
0450 fa53 8e fe a6            LDX  #MSG9 POINT TO MSG "76543210"
451
0451 fa56 17 03 3e            LBSR BIASCI OUTPUT IN BINARY/ASCII FORMAT
452
0452 fa59 17 03 83            LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD $FA56
453
0453 fa5c 26 1a               BNE  ADJSK6 IF SO, EXIT MEMORY TEST
454
0454 fa5e 10 ac e4           GUDPAS CMPY ,S COMPARE END ADDR TO BEGIN ADDR
455
0455 fa61 25 b3               BCS  TEST1
456
0456 fa63 86 2b               LDA  #'+ GET "PASS" SYMBOL IF MEMORY PASS OK
457
0457 fa65 17 03 86            LBSR OUTCH OUTPUT SYMBOL TO TERMINAL
458
0458 fa68 17 03 74            LBSR INCHEK INPUT FROM KEYBOARD?
459
0459 fa6b 26 0b               BNE  ADJSK6 IF SO, EXIT MEMORY TEST
460
0460 fa6d 10 ae 62            LDY  2,S LOAD BEGIN ADDRESS
461
0461 fa70 6c 65               INC  5,S INCREMENT LS BYTE OF PASS COUNT
462
0462 fa72 26 90               BNE  MEMSET IF NOT ZERO, SET NEXT MEMORY BYTE
463
0463 fa74 6c 64               INC  4,S INCREMENT MS BYTE OF PASS COUNT
464
0464 fa76 26 8c               BNE  MEMSET DONE WITH 65,535 PASSES OF MEMORY?
465
0465 fa78 32 66              ADJSK6 LEAS 6,S ADJ STACK POINTER BY 6
466
0466 fa7a 39                  RTS
467
0467                         *
468
0468                         ***** "B" SET BREAKPOINT *****
469
0469                         *
470
0470 fa7b 17 02 b1           BRKPNT LBSR IN1ADR GET BREAKPOINT ADDRESS
471
0471 fa7e 29 1e               BVS  EXITBP EXIT IF INVALID HEX ADDR.
472
0472 fa80 8c df c0            CMPX #STACK ADDRESS ILLEGAL IF >=$DFC0
473
0473 fa83 24 1a               BCC  BPERR IF ERROR PRINT (?), EXIT
474
0474 fa85 34 10               PSHS X $FA82 PUSH BP ADDRESS ON STACK
475
0475 fa87 8e ff ff            LDX  #$FFFF LOAD DUMMY ADDR TO TEST BP TABLE
476
0476 fa8a 8d 55               BSR BPTEST TEST BP TABLE FOR FREE SPACE
477
0477 fa8c 35 10               PULS X POP BP ADDRESS FROM STACK
478
0478 fa8e 27 0f               BEQ  BPERR (Z) SET, OUT OF BP TABLE SPACE
479
0479 fa90 a6 84               LDA  ,X GET DATA AT BREAKPOINT ADDRESS
480
0480 fa92 81 3f               CMPA #$3F IS IT A SWI?
481
0481 fa94 27 09               BEQ  BPERR IF SWI ALREADY, INDICATE ERROR
482
0482 fa96 a7 a0               STA  ,Y+ SAVE DATA BYTE IN BP TABLE
483
0483 fa98 af a4               STX  ,Y SAVE BP ADDRESS IN BP TABLE
484
0484 fa9a 86 3f               LDA  #$3F LOAD A SWI ($3F)
485
0485 fa9c a7 84               STA  ,X SAVE SWI AT BREAKPOINT ADDRESS
486
0486 fa9e 39                 EXITBP RTS ;
487
0487                         *
488
0488                         *  INDICATE ERROR SETTING BREAKPOINT
489
0489                         *
490
0490 fa9f 17 03 4a           BPERR LBSR OUT1S OUTPUT SPACE
491
0491 faa2 86 3f               LDA  #'? LOAD (?), INDICATE BREAKPOINT ERROR
492
0492 faa4 16 03 47            LBRA OUTCH PRINT "?"
493
0493                         *
494
0494                         *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
495
0495                         *
496
0496 faa7 10 8e df e3        XBKPNT LDY  #BPTBL POINT TO BREAKPOINT TABLE
497
0497 faab c6 08               LDB  #8 LOAD BREAKPOINT COUNTER
498
0498 faad 8d 18              XBPLP BSR RPLSWI REMOVE USED ENTRY IN BP TABLE
499
0499 faaf 5a                  DECB  $FAAC DECREMENT BP COUNTER
500
0500 fab0 26 fb               BNE XBPLP END OF BREAKPOINT TABLE?
501
0501 fab2 39                  RTS
502
0502                         *
503
0503                         ***** SWI ENTRY POINT *****
504
0504                         *
505
0505 fab3 1f 43              SWIE TFR  S,U TRANSFER STACK TO USER POINTER
506
0506 fab5 ae 4a               LDX  10,U LOAD PC FROM STACK INTO X-REG
507
0507 fab7 30 1f               LEAX -1,X ADJUST ADDR DOWN 1 BYTE.
508
0508 fab9 8d 26               BSR BPTEST FIND BREAKPOINT IN BP TABLE
509
0509 fabb 27 04               BEQ  REGPR IF FOUND, REPLACE DATA AT BP ADDR
510
0510 fabd af 4a               STX  10,U SAVE BREAKPOINT ADDR IN STACK
511
0511 fabf 8d 06               BSR RPLSWI GO REPLACE SWI WITH ORIGINAL DATA
512
0512 fac1 17 fd e4           REGPR LBSR REGSTR GO PRINT REGISTERS
513
0513 fac4 16 fd 9a            LBRA NEXTCMD GET NEXT COMMAND
514
0514 fac7 ae 21              RPLSWI LDX  1,Y LOAD BP ADDRESS FROM BP TABLE
515
0515 fac9 8c df c0            CMPX #STACK COMPARE TO TOP AVAILABLE USER MEMORY
516
0516 facc 24 0a               BCC  FFSTBL GO RESET TABLE ENTRY TO $FF'S
517
0517 face a6 84               LDA  ,X GET DATA FROM BP ADDRESS
518
0518 fad0 81 3f               CMPA #$3F IS IT SWI?
519
0519 fad2 26 04               BNE  FFSTBL IF NOT, RESET TABLE ENTRY TO $FF'S
520
0520 fad4 a6 a4               LDA  ,Y GET ORIGINAL DATA FROM BP TABLE
521
0521 fad6 a7 84               STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS
522
0522 fad8 86 ff              FFSTBL LDA  #$FF LOAD $FF IN A-ACC
523
0523 fada a7 a0               STA  ,Y+ RESET BREAKPOINT TABLE DATA TO $FF'S
524
0524 fadc a7 a0               STA  ,Y+ RESET BREAKPOINT TABLE ADDR TO $FF'S
525
0525 fade a7 a0               STA  ,Y+
526
0526 fae0 39                  RTS
527
0527                         *
528
0528                         ** SEARCH BREAKPOINT TABLE FOR MATCH **
529
0529                         *
530
0530 fae1 10 8e df e3        BPTEST LDY  #BPTBL POINT TO BREAKPOINT TABLE
531
0531 fae5 c6 08               LDB  #8 LOAD BREAKPOINT COUNTER
532
0532 fae7 a6 a0              FNDBP LDA  ,Y+ LOAD DATA BYTE
533
0533 fae9 ac a1               CMPX ,Y++ COMPARE ADDRESS, IS IT SAME?
534
0534 faeb 27 04               BEQ  BPADJ IF SO, ADJUST POINTER FOR TABLE ENTRY
535
0535 faed 5a                  DECB IF NOT, DECREMENT BREAKPOINT COUNTER
536
0536 faee 26 f7               BNE  FNDBP AND LOOK FOR NEXT POSSIBLE MATCH
537
0537 faf0 39                  RTS ;
538
0538                         *
539
0539                         *
540
0540 faf1 31 3d              BPADJ LEAY -3,Y MOVE POINTER TO BEGIN OF BP ENTRY
541
0541 faf3 39                  RTS
542
0542                         *
543
0543                         *** "D" DISK BOOT FOR DMAF2 ***
544
0544                         *
545
0545 faf4 86 de              DBOOT LDA  #$DE
546
0546 faf6 b7 f0 24            STA  DRVREG
547
0547 faf9 86 ff               LDA  #$FF
548
0548 fafb b7 f0 14            STA  PRIREG     $FAF8
549
0549 fafe b7 f0 10            STA  CCREG
550
0550 fb01 b7 f0 15            STA  AAAREG
551
0551 fb04 b7 f0 16            STA  BBBREG
552
0552 fb07 7d f0 10            TST  CCREG
553
0553 fb0a 86 d8               LDA  #$D8
554
0554 fb0c b7 f0 20            STA  COMREG
555
0555 fb0f 17 00 97            LBSR DLY
556
0556 fb12 b6 f0 20           DBOOT0 LDA  COMREG
557
0557 fb15 2b fb               BMI  DBOOT0
558
0558 fb17 86 09               LDA  #$09
559
0559 fb19 b7 f0 20            STA  COMREG
560
0560 fb1c 17 00 8a            LBSR DLY
561
0561                         *
562
0562 fb1f b6 f0 20           DISKWT LDA  COMREG FETCH DRIVE STATUS
563
0563 fb22 85 01               BITA #1 TEST BUSY BIT
564
0564 fb24 26 f9               BNE  DISKWT LOOP UNTIL NOT BUSY
565
0565                         *
566
0566 fb26 85 10               BITA #$10
567
0567 fb28 26 ca               BNE  DBOOT
568
0568                         *
569
0569 fb2a 8e c0 00            LDX  #$C000 LOGICAL ADDR. = $C000
570
0570 fb2d 8d 52               BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
571
0571 fb2f 8a 10               ORA  #$10
572
0572 fb31 b7 f0 40            STA  CCCREG
573
0573 fb34 1f 10               TFR  X,D
574
0574 fb36 43                  COMA  ;
575
0575 fb37 53                  COMB  ;
576
0576 fb38 fd f0 00            STD  ADDREG
577
0577 fb3b 8e fe ff            LDX  #$FEFF LOAD DMA BYTE COUNT = $100
578
0578 fb3e bf f0 02            STX  CNTREG STORE IN COUNT REGISTER
579
0579 fb41 86 ff               LDA  #$FF LOAD THE CHANNEL REGISTER
580
0580 fb43 b7 f0 10            STA  CCREG
581
0581 fb46 86 fe               LDA  #$FE SET CHANNEL 0
582
0582 fb48 b7 f0 14            STA  PRIREG
583
0583 fb4b 86 01               LDA  #1 SET SECTOR TO "1"
584
0584 fb4d b7 f0 22            STA  SECREG ISSUE COMMAND
585
0585 fb50 86 8c               LDA  #$8C SET SINGLE SECTOR READ
586
0586 fb52 b7 f0 20            STA  COMREG ISSUE COMMAND
587
0587 fb55 8d 52               BSR DLY
588
0588                         *
589
0589                         * THE FOLLOWING CODE TESTS THE STATUS OF THE
590
0590                         * CHANNEL CONTROL REGISTER. IF "D7" IS NOT
591
0591                         * ZERO THEN IT WILL LOOP WAITING FOR "D7"
592
0592                         * TO GO TO ZERO. IF AFTER 65,536 TRIES IT
593
0593                         * IS STILL A ONE THE BOOT OPERATION WILL
594
0594                         * BE STARTED OVER FROM THE BEGINING.
595
0595                         *
596
0596 fb57 5f                  CLRB  ;
597
0597 fb58 34 04              DBOOT1 PSHS B     $FB55
598
0598 fb5a 5f                  CLRB  ;
599
0599 fb5b 7d f0 10           DBOOT2 TST  CCREG
600
0600 fb5e 2a 0a               BPL  DBOOT3
601
0601 fb60 5a                  DECB  ;
602
0602 fb61 26 f8               BNE  DBOOT2
603
0603 fb63 35 04               PULS B
604
0604 fb65 5a                  DECB
605
0605 fb66 26 f0               BNE  DBOOT1
606
0606 fb68 20 8a               BRA  DBOOT
607
0607 fb6a 35 04              DBOOT3 PULS B
608
0608 fb6c b6 f0 20            LDA  COMREG
609
0609 fb6f 85 1c               BITA #$1C
610
0610 fb71 27 01               BEQ  DBOOT4
611
0611 fb73 39                  RTS  ;
612
0612                         *
613
0613                         *
614
0614 fb74 c6 de              DBOOT4 LDB  #$DE
615
0615 fb76 f7 f0 24            STB  DRVREG
616
0616 fb79 8e c0 00            LDX  #$C000
617
0617 fb7c af 4a               STX  10,U
618
0618 fb7e 1f 34               TFR  U,S    $FB7B
619
0619 fb80 3b                  RTI  ;
620
0620                         *
621
0621                         ***** LRA LOAD REAL ADDRESS *****
622
0622                         *
623
0623                         * THE FOLLOWING CODE LOADS THE 20-BIT
624
0624                         * PHYSICAL ADDRESS OF A MEMORY BYTE
625
0625                         * INTO THE "A" AND "X" REGISTERS. THIS
626
0626                         * ROUTINE IS ENTERED WITH THE LOGICAL
627
0627                         * ADDRESS OF A MEMORY BYTE IN THE "IX"
628
0628                         * REGISTER. EXIT IS MADE WITH THE HIGH-
629
0629                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL
630
0630                         * ADDRESS IN THE "A" REGISTER, AND THE
631
0631                         * LOW-ORDER 16-BITS OF THE 20-BIT
632
0632                         * PHYSICAL ADDRESS IN THE "IX" REGISTER.
633
0633                         * ALL OTHER REGISTERS ARE PRESERVED.
634
0634                         * THIS ROUTINE IS REQUIRED SINCE THE
635
0635                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST
636
0636                         * PRESENT PHYSICAL ADDRESSES ON THE
637
0637                         * SYSTEM BUS.
638
0638                         *
639
0639 fb81 34 36              LRA PSHS A,B,X,Y PUSH REGISTERS ON STACK
640
0640 fb83 a6 62               LDA  2,S GET MSB LOGICAL ADDR FRM X REG ON STACK
641
0641 fb85 44                  LSRA  ;
642
0642 fb86 44                  LSRA  ADJ FOR INDEXED INTO
643
0643 fb87 44                  LSRA  CORRESPONDING LOCATION
644
0644 fb88 44                  LSRA  IN LRA TABLE
645
0645 fb89 10 8e df d0         LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS
646
0646 fb8d e6 a6               LDB  A,Y GET PHYSICAL ADDR. DATA FROM LRA TABLE
647
0647 fb8f 54                  LSRB  ADJ. REAL ADDR. TO REFLECT EXTENDED
648
0648 fb90 54                  LSRB  PHYSICAL ADDRESS.
649
0649 fb91 54                  LSRB  EXTENDED MS 4-BITS ARE RETURNED
650
0650 fb92 54                  LSRB  IN THE "A" ACCUMULATOR
651
0651 fb93 e7 e4               STB  ,S MS 4 BITS IN A ACCUM. STORED ON STACK
652
0652 fb95 e6 a6               LDB  A,Y LOAD REAL ADDRESS DATA FROM LRA TABLE
653
0653 fb97 53                  COMB  COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
654
0654 fb98 58                  ASLB ADJ DATA FOR RELOCATION IN X REG
655
0655 fb99 58                  ASLB  ;
656
0656 fb9a 58                  ASLB       $FB97
657
0657 fb9b 58                  ASLB  ;
658
0658 fb9c a6 62               LDA  2,S GET MS BYTE OF LOGICAL ADDR.
659
0659 fb9e 84 0f               ANDA #$0F MASK MS NIBBLE OF LOGICAL ADDRESS
660
0660 fba0 a7 62               STA  2,S SAVE IT IN X REG ON STACK
661
0661 fba2 ea 62               ORB  2,S SET MS BYTE IN X REG TO ADJ PHY ADDR.
662
0662                         *
663
0663                         * PLUS LS NIBBLE OF LOGICAL ADDRESS
664
0664 fba4 e7 62               STB  2,S SAVE AS LS 16 BITS OF PHY ADDR IN X REG
665
0665                         * ON STACK
666
0666 fba6 35 36               PULS A,B,X,Y POP REGS. FROM STACK
667
0667 fba8 39                  RTS  ;
668
0668                         *
669
0669                         * DELAY LOOP
670
0670                         *
671
0671 fba9 34 04              DLY PSHS B SAVE CONTENTS OF "B"
672
0672 fbab c6 20               LDB  #$20 GET LOOP DELAY VALUE
673
0673 fbad 5a                 SUB1 DECB  SUBTRACT ONE FROM VALUE
674
0674 fbae 26 fd               BNE  SUB1 LOOP UNTIL ZERO
675
0675 fbb0 35 04               PULS B RESTORE CONTENTS OF "B"
676
0676 fbb2 39                  RTS  ;
677
0677                         *
678
0678                         ***** "U" MINIDISK BOOT *****
679
0679                         *
680
0680 fbb3 7d e0 18           MINBOOT TST  Comreg
681
0681 fbb6 7f e0 14            CLR  Drvreg  SELECT DRIVE 0
682
0682                         *
683
0683                         * DELAY BEFORE ISSUING RESTORE COMMAND
684
0684 fbb9 c6 03               LDB  #3
685
0685 fbbb 8e 00 00            LDX  #0
686
0686 fbbe 30 01              LOOP LEAX 1,X      $FBBB
687
0687 fbc0 8c 00 00            CMPX #0
688
0688 fbc3 26 f9               BNE  LOOP
689
0689 fbc5 5a                  DECB                $FBC2
690
0690 fbc6 26 f6               BNE  LOOP
691
0691                         *
692
0692 fbc8 86 0f               LDA  #$0F *LOAD HEAD, VERIFY, 20msec/step
693
0693 fbca b7 e0 18            STA  Comreg  ISSUE RESTORE COMMAND
694
0694 fbcd 8d 37               BSR DELAY
695
0695 fbcf f6 e0 18           LOOP1 LDB  Comreg      $FBCC
696
0696 fbd2 c5 01               BITB #1
697
0697 fbd4 26 f9               BNE  LOOP1  LOOP UNTIL THRU
698
0698 fbd6 86 01               LDA  #1
699
0699 fbd8 b7 e0 1a            STA  Secreg SET SECTOR REGISTER TO ONE
700
0700 fbdb 8d 29               BSR DELAY
701
0701 fbdd 86 8c               LDA  #$8C  LOAD HEAD, DELAY 10msec,
702
0702 fbdf b7 e0 18            STA  Comreg  AND READ SINGLE RECORD
703
0703 fbe2 8d 22               BSR DELAY
704
0704 fbe4 8e c0 00            LDX  #$C000
705
0705 fbe7 20 09               BRA  LOOP3
706
0706                         *
707
0707 fbe9 c5 02              LOOP2 BITB #2      $FBE6 DRQ?
708
0708 fbeb 27 05               BEQ  LOOP3
709
0709 fbed b6 e0 1b            LDA  Datreg
710
0710 fbf0 a7 80               STA  ,X+
711
0711                         *
712
0712 fbf2 f6 e0 18           LOOP3 LDB  Comreg FETCH STATUS
713
0713 fbf5 c5 01               BITB #1  BUSY?
714
0714 fbf7 26 f0               BNE  LOOP2
715
0715 fbf9 c5 2c               BITB #$2C CRC ERROR OR LOST DATA?
716
0716 fbfb 27 01               BEQ  LOOP4
717
0717 fbfd 39                  RTS  ;
718
0718 fbfe 8e c0 00           LOOP4 LDX  #$C000        $FBFB
719
0719 fc01 af 4a               STX  10,U
720
0720 fc03 1f 34               TFR  U,S
721
0721 fc05 3b                  RTI  ;
722
0722                         *
723
0723                         * DELAY
724
0724                         *
725
0725 fc06 c6 20              DELAY LDB  #$20
726
0726 fc08 5a                 LOOP5 DECB  ;
727
0727 fc09 26 fd               BNE  LOOP5
728
0728 fc0b 39                  RTS  ;
729
0729                         *
730
0730                         ***** "L" LOAD MIKBUG TAPE *****
731
0731                         *
732
0732 fc0c 86 11              LOAD LDA  #$11  LOAD 'DC1' CASS. READ ON CODE
733
0733 fc0e 17 01 dd            LBSR OUTCH  OUTPUT IT TO TERMINAL PORT
734
0734 fc11 7f df e2            CLR  ECHO  TURN OFF ECHO FLAG
735
0735 fc14 17 01 ad           LOAD1 LBSR ECHON INPUT 8 BIT BYTE WITH NO ECHO
736
0736 fc17 81 53              LOAD2 CMPA #'S IS IT AN "S", START CHARACTER ?
737
0737 fc19 26 f9               BNE  LOAD1 IF NOT, DISCARD AND GET NEXT CHAR.
738
0738 fc1b 17 01 a6            LBSR ECHON
739
0739 fc1e 81 39               CMPA #'9 IS IT A "9" , END OF FILE CHAR ?
740
0740 fc20 27 3d               BEQ  LOAD21 IF SO, EXIT LOAD
741
0741 fc22 81 31               CMPA #'1 IS IT A "1" , FILE LOAD CHAR ?
742
0742 fc24 26 f1               BNE  LOAD2 IF NOT, LOOK FOR START CHAR.
743
0743 fc26 17 01 17            LBSR BYTE INPUT BYTE COUNT
744
0744 fc29 34 02               PSHS A PUSH COUNT ON STACK
745
0745 fc2b 29 26               BVS  LODERR (V) C-CODE SET, ILLEGAL HEX
746
0746 fc2d 17 00 ff            LBSR IN1ADR INPUT LOAD ADDRESS
747
0747 fc30 29 21               BVS  LODERR (V) C-CODE SET, ADDR NOT HEX
748
0748 fc32 34 10               PSHS X PUSH ADDR ON STACK
749
0749 fc34 e6 e0               LDB  ,S+ LOAD MSB OF ADDR AS CHECKSUM BYTE
750
0750 fc36 eb e0               ADDB ,S+ ADD LSB OF ADDR TO CHECKSUM
751
0751 fc38 eb e4               ADDB ,S ADD BYTE COUNT BYTE TO CHECKSUM
752
0752 fc3a 6a e4               DEC  ,S $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
753
0753 fc3c 6a e4               DEC  ,S ADDRESS BYTES.
754
0754 fc3e 34 04              LOAD10 PSHS B PUSH CHECKSUM ON STACK
755
0755 fc40 17 00 fd            LBSR BYTE INPUT DATA BYTE (2 HEX CHAR)
756
0756 fc43 35 04               PULS B POP CHECKSUM FROM STACK
757
0757 fc45 29 0c               BVS  LODERR (V) SET, DATA BYTE NOT HEX
758
0758 fc47 34 02               PSHS A PUSH DATA BYTE ON STACK
759
0759 fc49 eb e0               ADDB ,S+ ADD DATA TO CHECKSUM, AUTO INC STACK
760
0760 fc4b 6a e4               DEC  ,S DECREMENT BYTE COUNT 1
761
0761 fc4d 27 05               BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM
762
0762 fc4f a7 80               STA  ,X+ SAVE DATA BYTE IN MEMORY
763
0763 fc51 20 eb               BRA  LOAD10 GET NEXT DATA BYTE
764
0764 fc53 5f                 LODERR CLRB  ;ERROR CONDITION, ZERO CHECKSUM  ;
765
0765 fc54 35 02              LOAD16 PULS A ADJUST STACK (REMOVE BYTE COUNT)
766
0766 fc56 c1 ff               CMPB #$FF CHECKSUM OK?
767
0767 fc58 27 b2               BEQ  LOAD IF SO, LOAD NEXT LINE
768
0768 fc5a 86 3f               LDA  #'? LOAD (?) ERROR INDICATOR
769
0769 fc5c 17 01 8f            LBSR OUTCH OUTPUT IT TO TERMINAL
770
0770 fc5f 73 df e2           LOAD21 COM  ECHO TURN ECHO ON
771
0771 fc62 86 13               LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE
772
0772 fc64 16 01 87            LBRA OUTCH OUTPUT IT
773
0773                         *
774
0774                         ***** "P" PUNCH MIKBUG TAPE *****
775
0775                         *
776
0776 fc67 6f e2              PUNCH CLR  ,-S CLEAR RESERVED BYTE ON STACK
777
0777 fc69 17 00 b8            LBSR IN2ADR GET BEGIN AND END ADDRESS
778
0778 fc6c 34 30               PSHS X,Y SAVE ADDRESSES ON STACK
779
0779 fc6e 29 4a               BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH
780
0780 fc70 ac 62               CMPX 2,S COMPARE BEGIN TO END ADDR
781
0781 fc72 25 46               BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH
782
0782 fc74 30 01               LEAX 1,X INCREMENT END ADDRESS
783
0783 fc76 af e4               STX  ,S STORE END ADDR ON STACK
784
0784 fc78 86 12               LDA  #$12 LOAD 'DC2' PUNCH ON CODE
785
0785 fc7a 17 01 71            LBSR OUTCH OUTPUT IT TO TERMINAL
786
0786 fc7d ec e4              PUNCH2 LDD  ,S LOAD END ADDR IN D-ACC
787
0787 fc7f a3 62               SUBD 2,S SUBTRACT BEGIN FROM END
788
0788 fc81 27 06               BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT
789
0789 fc83 10 83 00 20         CMPD #$20 LESS THAN 32 BYTES?
790
0790 fc87 23 02               BLS  PUNCH4 PUNCH THAT MANY BYTES
791
0791 fc89 c6 20              PUNCH3 LDB  #$20 LOAD BYTE COUNT OF 32.
792
0792 fc8b e7 64              PUNCH4 STB  4,S STORE ON STACK AS BYTE COUNT
793
0793 fc8d 8e fe eb            LDX  #MSG20 POINT TO MSG "S1"
794
0794 fc90 17 01 1a            LBSR PSTRNG PRINT MSG
795
0795 fc93 cb 03               ADDB #3 ADD 3 BYTES TO BYTE COUNT
796
0796 fc95 1f 98               TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH
797
0797 fc97 17 00 e7            LBSR OUT2H OUTPUT BYTE COUNT
798
0798 fc9a ae 62               LDX  2,S LOAD BEGIN ADDRESS
799
0799 fc9c 17 00 da            LBSR OUT4H PUNCH ADDRESS
800
0800 fc9f eb 62               ADDB 2,S ADD ADDR MSB TO CHECKSUM
801
0801 fca1 eb 63               ADDB 3,S ADD ADDR LSB TO CHECKSUM
802
0802 fca3 eb 84              PUNCHL ADDB ,X ADD DATA BYTE TO CHECKSUM
803
0803 fca5 a6 80               LDA  ,X+ LOAD DATA BYTE TO PUNCH
804
0804 fca7 17 00 d7            LBSR OUT2H OUTPUT DATA BYTE
805
0805 fcaa 6a 64               DEC  4,S DECREMENT BYTE COUNT
806
0806 fcac 26 f5               BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE
807
0807 fcae 53                  COMB  1's COMPLIMENT CHECKSUM BYTE
808
0808 fcaf 1f 98               TFR  B,A GET IT IN A-ACC TO PUNCH
809
0809 fcb1 17 00 cd            LBSR OUT2H OUTPUT CHECKSUM BYTE
810
0810 fcb4 af 62               STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR
811
0811 fcb6 ac e4               CMPX ,S COMPARE IT TO END ADDR
812
0812 fcb8 26 c3               BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT.
813
0813 fcba 86 14              PUNEXT LDA  #$14 LOAD 'DC4' PUNCH OFF CODE
814
0814 fcbc 17 01 2f            LBSR OUTCH OUTPUT IT
815
0815 fcbf 32 65               LEAS 5,S READJUST STACK POINTER
816
0816 fcc1 39                  RTS  ;
817
0817                         *
818
0818                         *
819
0819 fcc2 8e fe ae           PRTSP LDX  #MSG10 POINT TO MSG "SP="
820
0820 fcc5 17 00 f5            LBSR PDATA  PRINT MSG
821
0821 fcc8 1f 31               TFR  U,X
822
0822 fcca 16 00 ac            LBRA OUT4H
823
0823 fccd 8e fe ba           PRTUS LDX  #MSG12 POINT TO MSG "US="
824
0824 fcd0 17 00 ea            LBSR PDATA  PRINT MSG
825
0825 fcd3 ae 48               LDX  8,U
826
0826 fcd5 16 00 a1            LBRA OUT4H
827
0827 fcd8 8e fe cc           PRTDP LDX  #MSG15 POINT TO MSG "DP="
828
0828 fcdb 17 00 df            LBSR PDATA  PRINT MSG
829
0829 fcde a6 43               LDA  3,U
830
0830 fce0 16 00 9e            LBRA OUT2H OUTPUT HEX BYTE AS ASCII
831
0831 fce3 8e fe c6           PRTIX LDX  #MSG14 POINT TO MSG "IX="
832
0832 fce6 17 00 d4            LBSR PDATA  PRINT MSG
833
0833 fce9 ae 44               LDX  4,U      $FCE6
834
0834 fceb 16 00 8b            LBRA OUT4H
835
0835 fcee 8e fe c0           PRTIY LDX  #MSG13 POINT TO MSG "IY="
836
0836 fcf1 17 00 c9            LBSR PDATA  PRINT MSG
837
0837 fcf4 ae 46               LDX  6,U
838
0838 fcf6 16 00 80            LBRA  OUT4H
839
0839 fcf9 8e fe b4           PRTPC LDX  #MSG11 POINT TO MSG "PC="
840
0840 fcfc 17 00 be            LBSR PDATA  PRINT MSG
841
0841 fcff ae 4a               LDX  10,U
842
0842 fd01 20 76               BRA  OUT4H
843
0843 fd03 8e fe d2           PRTA LDX  #MSG16 POINT TO MSG "A="
844
0844 fd06 17 00 b4            LBSR PDATA  PRINT MSG
845
0845 fd09 a6 41               LDA  1,U
846
0846 fd0b 20 74               BRA OUT2H OUTPUT HEX BYTE AS ASCII
847
0847 fd0d 8e fe d7           PRTB LDX  #MSG17 POINT TO MSG "B="
848
0848 fd10 17 00 aa            LBSR PDATA  PRINT MSG
849
0849 fd13 a6 42               LDA  2,U
850
0850 fd15 20 6a               BRA OUT2H OUTPUT HEX BYTE AS ASCII
851
0851 fd17 8e fe dc           PRTCC LDX  #MSG18 POINT TO MSG "CC:"
852
0852 fd1a 17 00 a0            LBSR PDATA  PRINT MSG
853
0853 fd1d a6 c4               LDA  ,U
854
0854 fd1f 8e fe e3            LDX  #MSG19 POINT TO MSG "EFHINZVC"
855
0855 fd22 20 73               BRA BIASCI OUTPUT IN BINARY/ASCII FORMAT
856
0856                         *
857
0857                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
858
0858                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
859
0859                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
860
0860                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT
861
0861                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX
862
0862                         * ADDRESS IS INPUT.
863
0863                         *
864
0864 fd24 8d 09              IN2ADR BSR IN1ADR GET FIRST ADDRESS
865
0865 fd26 29 4e               BVS NOTHEX EXIT IF NOT VALID HEX
866
0866 fd28 1f 12               TFR  X,Y SAVE FIRST ADDR. IN "IY"
867
0867 fd2a 86 2d               LDA #'-
868
0868 fd2c 17 00 bf            LBSR OUTCH PRINT " - "
869
0869                         *
870
0870                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
871
0871                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
872
0872                         * ADDRESS IS RETURNED IN THE "X" REGISTER.
873
0873                         *
874
0874 fd2f 8d 0f              IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR)
875
0875 fd31 29 43               BVS NOTHEX EXIT IF NOT VALID HEX
876
0876 fd33 1f 01               TFR  D,X
877
0877 fd35 8d 09               BSR BYTE INPUT BYTE (2 HEX CHAR)
878
0878 fd37 29 3d               BVS NOTHEX
879
0879 fd39 34 10               PSHS X
880
0880 fd3b a7 61               STA  1,S
881
0881 fd3d 35 10               PULS X
882
0882 fd3f 39                  RTS   ;
883
0883                         *
884
0884                         ***** INPUT BYTE (2 HEX CHAR.) *****
885
0885                         *
886
0886 fd40 8d 11              BYTE BSR INHEX GET HEX LEFT
887
0887 fd42 29 32               BVS NOTHEX EXIT IF NOT VALID HEX
888
0888 fd44 48                  ASLA   ;
889
0889 fd45 48                  ASLA   ;
890
0890 fd46 48                  ASLA   ; SHIFT INTO LEFT NIBBLE
891
0891 fd47 48                  ASLA   ;
892
0892 fd48 1f 89               TFR  A,B PUT HEXL IN "B"
893
0893 fd4a 8d 07               BSR INHEX GET HEX RIGHT
894
0894 fd4c 29 28               BVS NOTHEX EXIT IF NOT VALID HEX
895
0895 fd4e 34 04               PSHS B PUSH HEXL ON STACK
896
0896 fd50 ab e0               ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
897
0897 fd52 39                  RTS  RETURN WITH HEX L&R IN "A"
898
0898                         *
899
0899                         *
900
0900 fd53 8d 6f              INHEX BSR ECHON INPUT ASCII CHAR.
901
0901 fd55 81 30               CMPA #'0 IS IT > OR = "0" ?
902
0902 fd57 25 1d               BCS NOTHEX IF LESS IT AIN'T HEX
903
0903 fd59 81 39               CMPA #'9 IS IT < OR = "9" ?
904
0904 fd5b 22 03               BHI INHEXA IF > MAYBE IT'S ALPHA
905
0905 fd5d 80 30               SUBA #$30 ASCII ADJ. NUMERIC
906
0906 fd5f 39                  RTS  ;
907
0907                         *
908
0908                         *
909
0909 fd60 81 41              INHEXA CMPA #'A IS IT > OR = "A"
910
0910 fd62 25 12               BCS NOTHEX IF LESS IT AIN'T HEX
911
0911 fd64 81 46               CMPA #'F IS IT < OR = "F" ?
912
0912 fd66 22 03               BHI INHEXL IF > IT AIN'T HEX
913
0913 fd68 80 37               SUBA #$37 ASCII ADJ. ALPHA
914
0914 fd6a 39                  RTS  ;
915
0915                         *
916
0916 fd6b 81 61              INHEXL CMPA #'a IS IT > OR = "a"
917
0917 fd6d 25 07               BCS NOTHEX IF LESS IT AIN'T HEX
918
0918 fd6f 81 66               CMPA #'f IS IT < "f"
919
0919 fd71 22 03               BHI NOTHEX IF > IT AIN'T HEX
920
0920 fd73 80 57               SUBA #$57 ADJUST TO LOWER CASE
921
0921 fd75 39                  RTS  ;
922
0922                         *
923
0923                         *
924
0924 fd76 1a 02              NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
925
0925 fd78 39                  RTS  ;
926
0926                         *
927
0927                         *
928
0928 fd79 34 10              OUT4H PSHS X PUSH X-REG. ON THE STACK
929
0929 fd7b 35 02               PULS A POP MS BYTE OF X-REG INTO A-ACC.
930
0930 fd7d 8d 02               BSR OUTHL OUTPUT HEX LEFT
931
0931 fd7f 35 02               PULS A POP LS BYTE OF X-REG INTO A-ACC.
932
0932 fd81                    OUTHL EQU *
933
0933 fd81 34 02              OUT2H PSHS A SAVE IT BACK ON STACK
934
0934 fd83 44                  LSRA CONVERT UPPER HEX NIBBLE TO ASCII
935
0935 fd84 44                  LSRA  ;
936
0936 fd85 44                  LSRA  ;
937
0937 fd86 44                  LSRA  ;
938
0938 fd87 8d 04               BSR XASCII PRINT HEX NIBBLE AS ASCII
939
0939 fd89 35 02              OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII
940
0940 fd8b 84 0f               ANDA #$0F STRIP LEFT NIBBLE
941
0941 fd8d 8b 30              XASCII ADDA #$30 ASCII ADJ
942
0942 fd8f 81 39               CMPA #$39 IS IT < OR = "9" ?
943
0943 fd91 2f 02               BLE  OUTC IF LESS, OUTPUT IT
944
0944 fd93 8b 07               ADDA #7 IF > MAKE ASCII LETTER
945
0945 fd95 20 57              OUTC BRA  OUTCH OUTPUT CHAR
946
0946                         *
947
0947                         * BINARY / ASCII --- THIS ROUTINE
948
0948                         * OUTPUTS A BYTE IN ENHANCED
949
0949                         * BINARY FORMAT. THE ENHANCEMENT
950
0950                         * IS DONE BY SUBSTITUTING ASCII
951
0951                         * LETTERS FOR THE ONES IN THE BYTE.
952
0952                         * THE ASCII ENHANCEMENT LETTERS
953
0953                         * ARE OBTAINED FROM THE STRING
954
0954                         * POINTED TO BY THE INDEX REG. "X".
955
0955                         *
956
0956 fd97 34 02              BIASCI PSHS A SAVE "A" ON STACK
957
0957 fd99 c6 08               LDB  #8 PRESET LOOP# TO BITS PER BYTE
958
0958 fd9b a6 80              OUTBA LDA ,X+ GET LETTER FROM STRING
959
0959 fd9d 68 e4               ASL  ,S TEST BYTE FOR "1" IN B7
960
0960 fd9f 25 02               BCS PRTBA IF ONE PRINT LETTER
961
0961 fda1 86 2d               LDA #'- IF ZERO PRINT "-"
962
0962 fda3 8d 49              PRTBA BSR OUTCH PRINT IT
963
0963 fda5 8d 45               BSR OUT1S PRINT SPACE
964
0964 fda7 5a                  DECB SUB 1 FROM #BITS YET TO PRINT
965
0965 fda8 26 f1               BNE OUTBA
966
0966 fdaa 35 02               PULS A
967
0967 fdac 39                  RTS
968
0968                         *
969
0969                         * PRINT STRING PRECEEDED BY A CR & LF.
970
0970                         *
971
0971 fdad 8d 02              PSTRNG BSR PCRLF PRINT CR/LF
972
0972 fdaf 20 0c               BRA  PDATA  PRINT STRING POINTED TO BY IX
973
0973                         *
974
0974                         * PCRLF
975
0975                         *
976
0976 fdb1 34 10              PCRLF PSHS X SAVE IX
977
0977 fdb3 8e fe 75            LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS
978
0978 fdb6 8d 05               BSR PDATA  PRINT MSG
979
0979 fdb8 35 10               PULS X RESTORE IX
980
0980 fdba 39                  RTS  ;
981
0981 fdbb 8d 31              PRINT BSR OUTCH
982
0982                         *
983
0983                         * PDATA
984
0984                         *
985
0985 fdbd a6 80              PDATA LDA  ,X+ GET 1st CHAR. TO PRINT
986
0986 fdbf 81 04               CMPA #4 IS IT EOT?
987
0987 fdc1 26 f8               BNE  PRINT IF NOT EOT PRINT IT
988
0988 fdc3 39                  RTS  ;
989
0989                         *
990
0990                         *
991
0991 fdc4 7d df e2           ECHON TST  ECHO IS ECHO REQUIRED ?
992
0992 fdc7 27 06               BEQ  INCH ECHO NOT REQ. IF CLEAR
993
0993                         *
994
0994                         * INCHE
995
0995                         *
996
0996                         * ---GETS CHARACTER FROM TERMINAL AND
997
0997                         * ECHOS SAME. THE CHARACTER IS RETURNED
998
0998                         * IN THE "A" ACCUMULATOR WITH THE PARITY
999
0999                         * BIT MASKED OFF. ALL OTHER REGISTERS
1000
1000                         * ARE PRESERVED.
1001
1001                         *
1002
1002 fdc9 8d 04              INCHE BSR INCH GET CHAR FROM TERMINAL
1003
1003 fdcb 84 7f               ANDA #$7F      STRIP PARITY FROM CHAR.
1004
1004 fdcd 20 1f               BRA  OUTCH     ECHO CHAR TO TERMINAL
1005
1005                         *
1006
1006                         * INCH
1007
1007                         *
1008
1008                         * GET CHARACTER FROM TERMINAL. RETURN
1009
1009                         * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
1010
1010                         * ALL OTHER REGISTERS. THE INPUT CHARACTER
1011
1011                         * IS 8 BITS AND IS NOT ECHOED.
1012
1012                         *
1013
1013                         *
1014
1014 fdcf 34 10              INCH PSHS X SAVE IX
1015
1015 fdd1 be df e0            LDX  CPORT POINT TO TERMINAL PORT
1016
1016 fdd4 a6 84              GETSTA LDA  ,X  FETCH PORT STATUS
1017
1017 fdd6 85 01               BITA #1 TEST READY BIT, RDRF ?
1018
1018 fdd8 27 fa               BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN
1019
1019 fdda a6 01               LDA  1,X FETCH CHAR
1020
1020 fddc 35 10               PULS X RESTORE IX
1021
1021 fdde 39                  RTS  ;
1022
1022                         *
1023
1023                         * INCHEK
1024
1024                         *
1025
1025                         * CHECK FOR A CHARACTER AVAILABLE FROM
1026
1026                         * THE TERMINAL. THE SERIAL PORT IS CHECKED
1027
1027                         * FOR READ READY. ALL REGISTERS ARE
1028
1028                         * PRESERVED, AND THE "Z" BIT WILL BE
1029
1029                         * CLEAR IF A CHARACTER CAN BE READ.
1030
1030                         *
1031
1031                         *
1032
1032 fddf 34 02              INCHEK PSHS A SAVE A ACCUM.
1033
1033 fde1 a6 9f df e0         LDA  [CPORT] FETCH PORT STATUS
1034
1034 fde5 85 01               BITA #1 TEST READY BIT, RDRF ?
1035
1035 fde7 35 02               PULS A RESTORE A ACCUM.
1036
1036 fde9 39                  RTS  ;
1037
1037                         *
1038
1038 fdea 8d 00              OUT2S BSR OUT1S OUTPUT 2 SPACES
1039
1039 fdec 86 20              OUT1S LDA  #$20  OUTPUT 1 SPACE
1040
1040                         *
1041
1041                         *
1042
1042                         * OUTCH
1043
1043                         *
1044
1044                         * OUTPUT CHARACTER TO TERMINAL.
1045
1045                         * THE CHAR. TO BE OUTPUT IS
1046
1046                         * PASSED IN THE A REGISTER.
1047
1047                         * ALL REGISTERS ARE PRESERVED.
1048
1048                         *
1049
1049 fdee 34 12              OUTCH PSHS A,X SAVE A ACCUM AND IX
1050
1050 fdf0 be df e0            LDX  CPORT GET ADDR. OF TERMINAL
1051
1051 fdf3 a6 84              FETSTA LDA  ,X FETCH PORT STATUS
1052
1052 fdf5 85 02               BITA #2 TEST TDRE, OK TO XMIT ?
1053
1053 fdf7 27 fa               BEQ  FETSTA IF NOT LOOP UNTIL RDY
1054
1054 fdf9 35 02               PULS A GET CHAR. FOR XMIT
1055
1055 fdfb a7 01               STA  1,X XMIT CHAR.
1056
1056 fdfd 35 10               PULS X RESTORE IX
1057
1057 fdff 39                  RTS  ;
1058
1058                         *
1059
1059                         *
1060
1060 fe00 be df e0           ACINIZ LDX  CPORT  POINT TO CONTROL PORT ADDRESS
1061
1061 fe03 86 03               LDA  #3  RESET ACIA PORT CODE
1062
1062 fe05 a7 84               STA  ,X  STORE IN CONTROL REGISTER
1063
1063 fe07 86 11               LDA  #$11  SET 8 DATA, 2 STOP AN 0 PARITY
1064
1064 fe09 a7 84               STA  ,X  STORE IN CONTROL REGISTER
1065
1065 fe0b 6d 01               TST  1,X  ANYTHING IN DATA REGISTER?
1066
1066 fe0d 86 ff               LDA  #$FF  TURN ON ECHO FLAG
1067
1067 fe0f b7 df e2            STA  ECHO
1068
1068 fe12 39                  RTS
1069
1069                         *
1070
1070                         *
1071
1071                         * MONITOR KEYBOARD COMMAND JUMP TABLE
1072
1072                         *
1073
1073                         *
1074
1074 fe13                    JMPTAB EQU *
1075
1075 fe13 01                  FCB 1 " ^A "  $F91D
1076
1076 fe14 f9 23               FDB ALTRA
1077
1077 fe16 02                  FCB 2 " ^B "  $F90F
1078
1078 fe17 f9 15               FDB ALTRB
1079
1079 fe19 03                  FCB 3 " ^C "  $F92B
1080
1080 fe1a f9 31               FDB ALTRCC
1081
1081 fe1c 04                  FCB 4 " ^D "  $F901
1082
1082 fe1d f9 07               FDB ALTRDP
1083
1083 fe1f 10                  FCB $10 " ^P "  $F8C9
1084
1084 fe20 f8 cf               FDB ALTRPC
1085
1085 fe22 15                  FCB $15 " ^U "  $F8D7
1086
1086 fe23 f8 dd               FDB ALTRU
1087
1087 fe25 18                  FCB $18 " ^X "  $F8F3
1088
1088 fe26 f8 f9               FDB ALTRX
1089
1089 fe28 19                  FCB $19 " ^Y "  $F8E5
1090
1090 fe29 f8 eb               FDB ALTRY
1091
1091                         *
1092
1092 fe2b 42                  FCC 'B'
1093
1093 fe2c fa 7b               FDB BRKPNT *$FA78
1094
1094 fe2e 44                  FCC 'D'
1095
1095 fe2f fa f4               FDB DBOOT *$FAF1
1096
1096 fe31 45                  FCC 'E'
1097
1097 fe32 f9 96               FDB MEMDUMP *$F990
1098
1098 fe34 47                  FCC 'G'
1099
1099 fe35 f8 a5               FDB GO *$F89F
1100
1100 fe37 4c                  FCC 'L'
1101
1101 fe38 fc 0c               FDB LOAD *$FC09
1102
1102 fe3a 4d                  FCC 'M'
1103
1103 fe3b f9 41               FDB MEMCHG *$F93B
1104
1104 fe3d 50                  FCC 'P'
1105
1105 fe3e fc 67               FDB PUNCH *$FC64
1106
1106 fe40 51                  FCC 'Q'
1107
1107 fe41 f9 f2               FDB MEMTST *$F9EF
1108
1108 fe43 52                  FCC 'R'
1109
1109 fe44 f8 a8               FDB REGSTR *$F8A2
1110
1110 fe46 53                  FCC 'S'
1111
1111 fe47 f9 8a               FDB DISSTK *$F984
1112
1112 fe49 55                  FCC 'U'
1113
1113 fe4a fb b3               FDB MINBOOT *$FBB0
1114
1114 fe4c 58                  FCC 'X'
1115
1115 fe4d fa a7               FDB XBKPNT *$FAA4
1116
1116                         *
1117
1117 fe4f                    TABEND EQU *
1118
1118                         *
1119
1119                         * ** 6809 VECTOR ADDRESSES **
1120
1120                         *
1121
1121                         * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
1122
1122                         * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
1123
1123                         * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
1124
1124                         * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
1125
1125                         * HIS OWN ROUTINES IF HE SO DESIRES.
1126
1126                         *
1127
1127                         *
1128
1128 fe4f fa b3              RAMVEC FDB SWIE  USER-V
1129
1129 fe51 f8 a7               FDB RTI    SWI3-V
1130
1130 fe53 f8 a7               FDB RTI    SWI2-V
1131
1131 fe55 f8 a7               FDB RTI    FIRQ-V
1132
1132 fe57 f8 a7               FDB RTI    IRQ-V
1133
1133 fe59 fa b3               FDB SWIE   SWI-V
1134
1134 fe5b ff ff               FDB $FFFF  SVC-VO
1135
1135 fe5d ff ff               FDB $FFFF  SVC-VL
1136
1136                         *
1137
1137                         * PRINTABLE MESSAGE STRINGS
1138
1138                         *
1139
1139 fe5f 00 00 00 0d 0a 00  MSG1 FCB $0,$0,$0,$D,$A,$0,$0,$0 * 0, CR/LF, 0
1140
     00 00
1141
1140 fe67 53 2d 42 55 47 20   FCC 'S-BUG 1.8 - '
1142
     31 2e 38 20 2d 20
1143
1141 fe73 04                  FCB 4
1144
1142 fe74 4b 0d 0a 00 00 00  MSG2 FCB 'K,$D,$A,$0,$0,$0,4 K, * CR/LF + 3 NULS
1145
     04
1146
1143 fe7b 3e                 MSG3 FCC '>'
1147
1144 fe7c 04                  FCB 4
1148
1145 fe7d 57 48 41 54 3f     MSG4 FCC 'WHAT?'
1149
1146 fe82 04                  FCB 4
1150
1147 fe83 20 2d 20           MSG5 FCC ' - '
1151
1148 fe86 04                  FCB 4'
1152
1149 fe87 2c 20 50 41 53 53  MSG6 FCC ', PASS '
1153
     20
1154
1150 fe8e 04                  FCB 4
1155
1151 fe8f 2c 20 42 49 54 53  MSG7 FCC ', BITS IN ERROR: '
1156
     20 49 4e 20 45 52
1157
     52 4f 52 3a 20
1158
1152 fea0 04                  FCB 4
1159
1153 fea1 20 3d 3e 20        MSG8 FCC ' => '
1160
1154 fea5 04                  FCB 4
1161
1155 fea6 37 36 35 34 33 32  MSG9 FCC '76543210'
1162
     31 30
1163
1156 feae 20 20 53 50 3d     MSG10 FCC '  SP='
1164
1157 feb3 04                  FCB 4
1165
1158 feb4 20 20 50 43 3d     MSG11 FCC '  PC='
1166
1159 feb9 04                  FCB 4
1167
1160 feba 20 20 55 53 3d     MSG12 FCC '  US='
1168
1161 febf 04                  FCB 4
1169
1162 fec0 20 20 49 59 3d     MSG13 FCC '  IY='
1170
1163 fec5 04                  FCB 4
1171
1164 fec6 20 20 49 58 3d     MSG14 FCC '  IX='
1172
1165 fecb 04                  FCB 4
1173
1166 fecc 20 20 44 50 3d     MSG15 FCC '  DP='
1174
1167 fed1 04                  FCB 4
1175
1168 fed2 20 20 41 3d        MSG16 FCC '  A='
1176
1169 fed6 04                  FCB 4
1177
1170 fed7 20 20 42 3d        MSG17 FCC '  B='
1178
1171 fedb 04                  FCB 4
1179
1172 fedc 20 20 43 43 3a 20  MSG18 FCC '  CC: '
1180
1173 fee2 04                  FCB 4
1181
1174 fee3 45 46 48 49 4e 5a  MSG19 FCC 'EFHINZVC'
1182
     56 43
1183
1175 feeb 53 31              MSG20 FCC 'S1'
1184
1176 feed 04                  FCB 4
1185
1177                         *
1186
1178                         * MESSAGE EXPANSION AREA
1187
1179                         *
1188
1180 feee ff ff ff ff ff ff   FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
1189
     ff ff
1190
1181 fef6 ff ff ff ff ff ff   FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF
1191
     ff
1192
1182                         *
1193
1183                         * POWER UP/ RESET/ NMI ENTRY POINT
1194
1184                         *
1195
1185 ff00                     ORG $FF00
1196
1186                         *
1197
1187                         *
1198
1188 ff00 8e ff f0           START LDX  #IC11  POINT TO DAT RAM IC11
1199
1189 ff03 86 0f               LDA  #$F GET COMPLIMENT OF ZERO
1200
1190                         *
1201
1191                         *
1202
1192                         * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
1203
1193                         * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS
1204
1194                         * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE
1205
1195                         * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA
1206
1196                         * STORED IN IT.
1207
1197                         *
1208
1198                         *
1209
1199 ff05 a7 80              DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION
1210
1200 ff07 4a                  DECA  GET COMP. VALUE FOR NEXT LOCATION
1211
1201 ff08 26 fb               BNE  DATLP ALL 16 LOCATIONS INITIALIZED ?
1212
1202                         *
1213
1203                         * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
1214
1204                         *       ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
1215
1205                         *       PHYSICAL ADDRESSES.
1216
1206                         *
1217
1207 ff0a 86 f0               LDA  #$F0
1218
1208 ff0c a7 84               STA  ,X STORE $F0 AT $FFFF
1219
1209 ff0e 8e d0 a0            LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF
1220
1210 ff11 10 8e 55 aa         LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y"
1221
1211 ff15 ee 84              TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION
1222
1212 ff17 10 af 84            STY  ,X STORE TEST PATTERN AT $D0A0
1223
1213 ff1a 10 ac 84            CMPY ,X IS THERE RAM AT THIS LOCATION ?
1224
1214 ff1d 27 0b               BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP
1225
1215 ff1f 30 89 f0 00         LEAX -$1000,X ELSE POINT 4K LOWER
1226
1216 ff23 8c f0 a0            CMPX #$F0A0 DECREMENTED PAST ZER0 YET ?
1227
1217 ff26 26 ed               BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM
1228
1218 ff28 20 d6               BRA  START ELSE START ALL OVER AGAIN
1229
1219                         *
1230
1220                         *
1231
1221                         * THE FOLLOWING CODE STORES THE COMPLEMENT OF
1232
1222                         * THE MS CHARACTER OF THE FOUR CHARACTER HEX
1233
1223                         * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED
1234
1224                         * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT
1235
1225                         * IS STORED IN RAM IN THE LOCATION THAT IS
1236
1226                         * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---,
1237
1227                         * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND
1238
1228                         * WHEN TESTING LOCATION $70A0, MEANING THERE
1239
1229                         * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE
1240
1230                         * $8000-$DFFF, THEN THE COMPLEMENT OF THE
1241
1231                         * "7" IN THE $70A0 WILL BE STORED IN
1242
1232                         * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS
1243
1233                         * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND
1244
1234                         * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE
1245
1235                         * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE
1246
1236                         * RAM THAT IS PHYSICALLY ADDRESSED AT $7---
1247
1237                         * WILL RESPOND AND APPEAR TO THE 6809 THAT IT
1248
1238                         * IS AT $D--- SINCE THAT IS THE ADDRESS THE
1249
1239                         * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK
1250
1240                         * OF RAM RESPONDS.
1251
1241                         *
1252
1242                         *
1253
1243 ff2a ef 84              CNVADR STU  ,X RESTORE DATA AT TEST LOCATION
1254
1244 ff2c 1f 10               TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
1255
1245 ff2e 43                  COMA  COMPLEMENT MSB OF THAT ADDRESS
1256
1246 ff2f 44                  LSRA  PUT MS 4 BITS OF ADDRESS IN
1257
1247 ff30 44                  LSRA  LOCATION D0-D3 TO ALLOW STORING
1258
1248 ff31 44                  LSRA  IT IN THE DYNAMIC ADDRESS
1259
1249 ff32 44                  LSRA  TRANSLATION RAM.
1260
1250 ff33 b7 ff fd            STA  $FFFD STORE XLATION FACTOR IN DAT "D"
1261
1251                         *
1262
1252 ff36 10 ce df c0         LDS  #STACK INITIALIZE STACK POINTER
1263
1253                         *
1264
1254                         *
1265
1255                         * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
1266
1256                         * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK
1267
1257                         * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS
1268
1258                         * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION
1269
1259                         * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF
1270
1260                         * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO
1271
1261                         * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---....
1272
1262                         *
1273
1263                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1274
1264                         * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- --
1275
1265                         *
1276
1266                         * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE
1277
1267                         * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING....
1278
1268                         *
1279
1269                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1280
1270                         * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0
1281
1271                         *
1282
1272                         *
1283
1273                         * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF
1284
1274                         * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL
1285
1275                         * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK
1286
1276                         * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT
1287
1277                         * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000
1288
1278                         * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000
1289
1279                         * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE
1290
1280                         * MEMORY ADDRESSED AS FOLLOWS....
1291
1281                         *
1292
1282                         *  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1293
1283                         * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
1294
1284                         *
1295
1285                         *
1296
1286 ff3a 10 8e df d0         LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
1297
1287 ff3e a7 2d               STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD
1298
1288 ff40 6f 2e               CLR  14,Y CLEAR $DFDE
1299
1289 ff42 86 f0               LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ?
1300
1290 ff44 a7 2f               STA  15,Y STORE AT $DFDF
1301
1291 ff46 86 0c               LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR
1302
1292 ff48 6f a6              CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0
1303
1293 ff4a 4a                  DECA SUB. 1 FROM BYTES LEFT TO CLEAR
1304
1294 ff4b 2a fb               BPL  CLRLRT CONTINUE IF NOT DONE CLEARING
1305
1295 ff4d 30 89 f0 00        FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM
1306
1296 ff51 8c f0 a0            CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO
1307
1297 ff54 27 22               BEQ  FINTAB SKIP IF FINISHED
1308
1298 ff56 ee 84               LDU  ,X SAVE DATA AT CURRENT TEST LOCATION
1309
1299 ff58 10 8e 55 aa         LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG.
1310
1300 ff5c 10 af 84            STY  ,X STORE TEST PATT. INTO RAM TEST LOC.
1311
1301 ff5f 10 ac 84            CMPY ,X VERIFY RAM AT TEST LOCATION
1312
1302 ff62 26 e9               BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER
1313
1303 ff64 ef 84               STU  ,X ELSE RESTORE DATA TO TEST LOCATION
1314
1304 ff66 10 8e df d0         LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
1315
1305 ff6a 1f 10               TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
1316
1306 ff6c 44                  LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
1317
1307 ff6d 44                  LSRA  TO ALLOW STORING IT IN THE DAT RAM.
1318
1308 ff6e 44                  LSRA
1319
1309 ff6f 44                  LSRA
1320
1310 ff70 1f 89               TFR  A,B SAVE OFFSET INTO LRARAM TABLE
1321
1311 ff72 88 0f               EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK
1322
1312 ff74 a7 a5               STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE
1323
1313 ff76 20 d5               BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK
1324
1314 ff78 86 f1              FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ?
1325
1315 ff7a 10 8e df d0         LDY  #LRARAM POINT TO LRARAM TABLE
1326
1316 ff7e a7 2e               STA  14,Y STORE $F1 AT $DFCE
1327
1317                         *
1328
1318                         * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
1329
1319                         * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
1330
1320                         * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT
1331
1321                         * LOGICALLY RESPONDS TO THE ADDRESS $C---.
1332
1322                         *
1333
1323                         *
1334
1324 ff80 86 0c               LDA  #$0C PRESET NUMBER HEX "C"
1335
1325 ff82 e6 a6              FINDC LDB  A,Y GET ENTRY FROM LRARAM TABLE
1336
1326 ff84 26 05               BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR.
1337
1327 ff86 4a                  DECA  ELSE POINT 4K LOWER
1338
1328 ff87 2a f9               BPL  FINDC GO TRY AGAIN
1339
1329 ff89 20 14               BRA  XFERTF
1340
1330 ff8b 6f a6              FOUNDC CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND
1341
1331 ff8d e7 2c               STB  $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C---
1342
1332                         *
1343
1333                         * THE FOLLOWING CODE ADJUSTS THE TRANSLATION
1344
1334                         * FACTORS SUCH THAT ALL REMAINING RAM WILL
1345
1335                         * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
1346
1336                         * ADDRESSES FROM $0000 AND UP....
1347
1337                         *
1348
1338 ff8f 4f                  CLRA  START AT ZERO
1349
1339 ff90 1f 21               TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE.
1350
1340 ff92 e6 a6              COMPRS LDB  A,Y GET ENTRY FROM "LRARAM" TABLE
1351
1341 ff94 27 04               BEQ  PNTNXT IF IT'S ZER0 SKIP
1352
1342 ff96 6f a6               CLR  A,Y ELSE ERASE FROM TABLE
1353
1343 ff98 e7 80               STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP
1354
1344 ff9a 4c                 PNTNXT INCA GET OFFSET TO NEXT ENTRY
1355
1345 ff9b 81 0c               CMPA #$0C LAST ENTRY YET ?
1356
1346 ff9d 2d f3               BLT  COMPRS
1357
1347                         *
1358
1348                         * THE FOLLOWING CODE TRANSFER THE TRANSLATION
1359
1349                         * FACTORS FROM THE LRARAM TABLE TO IC11 ON
1360
1350                         * THE MP-09 CPU CARD.
1361
1351                         *
1362
1352 ff9f 8e ff f0           XFERTF LDX  #IC11  POINT TO DAT RAM IC11
1363
1353 ffa2 c6 10               LDB  #$10 GET NO. OF BYTES TO MOVE
1364
1354 ffa4 a6 a0              FETCH LDA  ,Y+ GET BYTE AND POINT TO NEXT
1365
1355 ffa6 a7 80               STA  ,X+ POKE XLATION FACTOR IN IC11
1366
1356 ffa8 5a                  DECB  SUB 1 FROM BYTES TO MOVE
1367
1357 ffa9 26 f9               BNE  FETCH CONTINUE UNTIL 16 MOVED
1368
1358 ffab 53                  COMB  SET "B" NON-ZERO
1369
1359 ffac f7 df e2            STB  ECHO TURN ON ECHO FLAG
1370
1360 ffaf 16 f8 62            LBRA MONITOR INITIALIZATION IS COMPLETE
1371
1361                         *
1372
1362                         *
1373
1363 ffb2 6e 9f df c0        V1 JMP  [STACK]
1374
1364 ffb6 6e 9f df c4        V2 JMP  [SWI2]
1375
1365 ffba 6e 9f df c6        V3 JMP  [FIRQ]
1376
1366 ffbe 6e 9f df c8        V4 JMP  [IRQ]
1377
1367 ffc2 6e 9f df ca        V5 JMP  [SWI]
1378
1368                         *
1379
1369                         * SWI3 ENTRY POINT
1380
1370                         *
1381
1371 ffc6 1f 43              SWI3E TFR  S,U
1382
1372 ffc8 ae 4a               LDX  10,U      *$FFC8
1383
1373 ffca e6 80               LDB  ,X+
1384
1374 ffcc af 4a               STX  10,U
1385
1375 ffce 4f                  CLRA
1386
1376 ffcf 58                  ASLB
1387
1377 ffd0 49                  ROLA
1388
1378 ffd1 be df cc            LDX  SVCVO
1389
1379 ffd4 8c ff ff            CMPX #$FFFF
1390
1380 ffd7 27 0f               BEQ  SWI3Z
1391
1381 ffd9 30 8b               LEAX D,X
1392
1382 ffdb bc df ce            CMPX SVCVL
1393
1383 ffde 22 08               BHI  SWI3Z
1394
1384 ffe0 34 10               PSHS X
1395
1385 ffe2 ec c4               LDD  ,U
1396
1386 ffe4 ae 44               LDX  4,U
1397
1387 ffe6 6e f1               JMP  [,S++]
1398
1388 ffe8 37 1f              SWI3Z PULU A,B,X,CC,DP
1399
1389 ffea ee 42               LDU  2,U
1400
1390 ffec 6e 9f df c2         JMP  [SWI3]
1401
1391                         *
1402
1392                         * 6809 VECTORS
1403
1393                         *
1404
1394 fff0 ff b2               FDB V1    USER-V
1405
1395 fff2 ff c6               FDB SWI3E SWI3-V
1406
1396 fff4 ff b6               FDB V2    SWI2-V
1407
1397 fff6 ff ba               FDB V3    FIRQ-V
1408
1398 fff8 ff be               FDB V4    IRQ-V
1409
1399 fffa ff c2               FDB V5    SWI-V
1410
1400 fffc ff b2               FDB V1    NMI-V
1411
1401 fffe ff 00               FDB START RESTART-V
1412
1402                          END START

powered by: WebSVN 2.1.0

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