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

Subversion Repositories System09

[/] [System09/] [tags/] [V10/] [sw/] [sbug_src.txt] - Blame information for rev 201

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

Line No. Rev Author Line
1 2 dilbert57
* NAM SBUG18 MP-09 MONITOR
2
 OPT l
3
 PAGE
4
*
5
* MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL
6
* PRODUCTS MP-09 CPU BOARD AS COMMENTED BY....
7
*
8
* ALLEN CLARK            WALLACE WATSON
9
* 2502 REGAL OAKS LANE   4815 EAST 97th AVE.
10
* LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617
11
* PH. 813-977-0347       PH. 813-985-1359
12
*
13
* MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT
14
*                                 2561 NANTUCKET DR APT. E
15
*                                 ATLANTA, GA  30345
16
*                                 PH. 404-320-1043
17
*
18
*
19
*       *** COMMANDS ***
20
*
21
* CONTROL A   = ALTER THE "A" ACCUMULATOR
22
* CONTROL B   = ALTER THE "B" ACCUMULATOR
23
* CONTROL C   = ALTER THE CONDITION CODE REGISTER
24
* CONTROL D   = ALTER THE DIRECT PAGE REGISTER
25
* CONTROL P   = ALTER THE PROGRAM COUNTER
26
* CONTROL U   = ALTER USER STACK POINTER
27
* CONTROL X   = ALTER "X" INDEX REGISTER
28
* CONTROL Y   = ALTER "Y" INDEX REGISTER
29
* B hhhh      = SET BREAKPOINT AT LOCATION $hhhh
30
* D           = BOOT A SWTPC 8 INCH FLOPPY SYSTEM
31
* U           = BOOT A SWTPC 5 INCH FLOPPY SYSTEM
32
* E ssss-eeee = EXAMINE MEMORY FROM STARTING ADDRESS ssss
33
*              -TO ENDING ADDRESS eeee.
34
* G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI
35
* L           = LOAD TAPE
36
* M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh
37
* P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR.
38
* Q ssss-eeee = TEST MEMORY FROM ssss TO eeee
39
* R           = DISPLAY REGISTER CONTENTS
40
* S           = DISPLAY STACK FROM ssss TO $DFC0
41
* X           = REMOVE ALL BREAKPOINTS
42
*
43
*
44
TSTPAT EQU $55AA  TEST PATTERN
45
*
46
*
47
*
48
       ORG $DFC0
49
STACK  RMB 2  TOP OF INTERNAL STACK / USER VECTOR
50
SWI3   RMB 2  SOFTWARE INTERRUPT VECTOR #3
51
SWI2   RMB 2  SOFTWARE INTERRUPT VECTOR #2
52
FIRQ   RMB 2  FAST INTERRUPT VECTOR
53
IRQ    RMB 2  INTERRUPT VECTOR
54
SWI    RMB 2  SOFTWARE INTERRUPT VECTOR
55
SVCVO  RMB 2  SUPERVISOR CALL VECTOR ORGIN
56
SVCVL  RMB 2  SUPERVISOR CALL VECTOR LIMIT
57
LRARAM RMB 16 LRA ADDRESSES
58
CPORT  RMB 2  RE-VECTORABLE CONTROL PORT
59
ECHO   RMB 1  ECHO FLAG
60
BPTBL  RMB 24 BREAKPOINT TABLE BASE ADDR
61
ACIAS  EQU $E004  CONTROL PORT
62
Comreg EQU $E018  COMMAND REGISTER
63
Drvreg EQU $E014  DRIVE REGISTER
64
Secreg EQU $E01A  SECTOR REGISTER
65
Datreg EQU $E01B  DATA REGISTER
66
*
67
ADDREG EQU $F000  ADDRESS REGISTER
68
CNTREG EQU $F002  COUNT REGISTER
69
CCREG  EQU $F010  CHANNEL CONTROL REGISTER
70
PRIREG EQU $F014  DMA PRIORITY REGISTER
71
AAAREG EQU $F015  ???
72
BBBREG EQU $F016  ???
73
COMREG EQU $F020  1791 COMMAND REGISTER
74
SECREG EQU $F022  SECTOR REGISTER
75
DRVREG EQU $F024  DRIVE SELECT LATCH
76
CCCREG EQU $F040  ???
77
*
78
IC11   EQU $FFF0  DAT RAM CHIP
79
*
80
 ORG $F800
81
 FDB MONITOR
82
 FDB NEXTCMD
83
 FDB INCH
84
 FDB INCHE
85
 FDB INCHEK
86
 FDB OUTCH
87
 FDB PDATA
88
 FDB PCRLF
89
 FDB PSTRNG
90
 FDB LRA
91
*
92
* MONITOR
93
*
94
* VECTOR ADDRESS STRING IS.....
95
* $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
96
*
97
MONITOR LDX #RAMVEC POINT TO VECTOR ADDR. STRING
98
 LDY  #STACK POINT TO RAM VECTOR LOCATION
99
 LDB  #$10 BYTES TO MOVE = 16
100
LOOPA LDA  ,X+ GET VECTOR BYTE
101
 STA  ,Y+   PUT VECTORS IN RAM / $DFC0-$DFCF
102
 DECB SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE
103
 BNE LOOPA CONTINUE UNTIL ALL VECTORS MOVED
104
*
105
* CONTENTS     FROM         TO      FUNCTION
106
*  $F8A1       $FE40      $DFC0     USER-V
107
*  $F8A1       $FE42      $DFC2     SWI3-V
108
*  $F8A1       $FE44      $DFC4     SWI2-V
109
*  $F8A1       $FE46      $DFC6     FIRQ-V
110
*  $F8A1       $FE48      $DFC8     IRQ-V
111
*  $FAB0       $FE4A      $DFCA     SWI-V
112
*  $FFFF       $FE4C      $DFCC     SVC-VO
113
*  $FFFF       $FE4E      $DFCE     SVC-VL
114
*
115
 LDX  #ACIAS  GET CONTROL PORT ADDR.
116
 STX  CPORT   STORE ADDR. IN RAM
117
 LBSR XBKPNT  CLEAR OUTSTANDING BREAKPOINTS
118
 LDB  #12     CLEAR 12 BYTES ON STACK
119
CLRSTK CLR  ,-S
120
 DECB
121
 BNE  CLRSTK
122
 LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY
123
 STX  10,S ON STACK
124
 LDA  #$D0  PRESET CONDITION CODES ON STACK
125
 STA  ,S
126
 TFR  S,U
127
 LBSR ACINIZ  INITIALIZE CONTROL PORT
128
 LDX  #MSG1  POINT TO 'SBUG 1.8' MESSAGE
129
 LBSR PDATA  PRINT MSG
130
 LDX  #LRARAM  POINT TO LRA RAM STORAGE AREA
131
 CLRA START TOTAL AT ZERO
132
 LDB  #13  TOTAL UP ALL ACTIVE RAM MEMORY
133
FNDREL TST  B,X TEST FOR RAM AT NEXT LOC.
134
 BEQ  RELPAS IF NO RAM GO TO NEXT LOC.
135
 ADDA #4 ELSE ADD 4K TO TOTAL
136
 DAA  ADJ. TOTAL FOR DECIMAL
137
RELPAS DECB SUB. 1 FROM LOCS. TO TEST
138
 BPL  FNDREL  PRINT TOTAL OF RAM
139
 LBSR OUT2H OUTPUT HEX BYTE AS ASCII
140
 LDX  #MSG2  POINT TO MSG 'K' CR/LF + 3 NULS
141
 LBSR PDATA  PRINT MSG
142
*
143
***** NEXTCMD *****
144
*
145
NEXTCMD LDX  #MSG3   POINT TO MSG ">"
146
 LBSR PSTRNG PRINT MSG
147
 LBSR INCH  GET ONE CHAR. FROM TERMINAL
148
 ANDA #$7F STRIP PARITY FROM CHAR.
149
 CMPA #$0D IS IT CARRIAGE RETURN ?
150
 BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR.
151
 TFR  A,B PUT CHAR. IN "B" ACCUM.
152
 CMPA #$20 IS IT CONTROL OR DATA CHAR ?
153
 BGE  PRTCMD IF CMD CHAR IS DATA, PRNT IT
154
 LDA  #'^ ELSE CNTRL CHAR CMD SO...
155
 LBSR OUTCH PRINT "^"
156
 TFR  B,A RECALL CNTRL CMD CHAR
157
 ADDA #$40 CONVERT IT TO ASCII LETTER
158
PRTCMD LBSR OUTCH PRNT CMD CHAR
159
 LBSR OUT1S PRNT SPACE
160
 CMPB #$60
161
 BLE NXTCH0
162
 SUBB #$20
163
*
164
*
165
***** DO TABLE LOOKUP *****
166
*   FOR COMMAND FUNCTIONS
167
*
168
*
169
NXTCH0 LDX #JMPTAB POINT TO JUMP TABLE
170
NXTCHR CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ?
171
 BEQ  JMPCMD BRANCH IF MATCH FOUND
172
 LEAX 2,X POINT TO NEXT ENTRY IN TABLE
173
 CMPX #TABEND REACHED END OF TABLE YET ?
174
 BNE  NXTCHR IF NOT END, CHECK NEXT ENTRY
175
 LDX  #MSG4  POINT TO MSG "WHAT?"
176
 LBSR PDATA  PRINT MSG
177
 BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD
178
JMPCMD JSR  [,X] JUMP TO COMMAND ROUTINE
179
 BRA  NEXTCMD PROMPT FOR NEW COMMAND
180
*
181
* "G" GO OR CONTINUE
182
*
183
GO TFR  U,S
184
RTI RTI
185
*
186
* "R" DISPLAY REGISTERS
187
*
188
REGSTR LDX  #MSG5 POINT TO MSG " - "
189
 LBSR PSTRNG PRINT MSG
190
 LBSR PRTSP $FCBF
191
 LBSR PRTUS $FCCA
192
 LBSR PRTDP $FCD5
193
 LBSR PRTIX $FCE0
194
 LBSR PRTIY $FCEB
195
 LDX  #MSG5 POINT TO MSG " - "
196
 LBSR PSTRNG PRINT MSG
197
 LBSR PRTPC $FCF5
198
 LBSR PRTA $FCFF
199
 LBSR PRTB $FD09
200
 LBRA PRTCC $FD13
201
*
202
*
203
* ALTER "PC" PROGRAM COUNTER
204
*
205
*
206
ALTRPC LBSR PRTPC $FCF5 PRINT MSG " PC = "
207
 LBSR OUT1S OUTPUT SPACE
208
 LBSR IN1ADR GET NEW CONTENTS FOR "PC"
209
 BVS  ALTPCD EXIT IF INVALID HEX
210
 STX  10,U POKE IN NEW CONTENTS
211
ALTPCD RTS ;
212
*
213
*
214
* ALTER "U" USER STACK POINTER
215
*
216
*
217
ALTRU LBSR PRTUS $FCCA PRINT MSG " US = "
218
 LBSR OUT1S OUTPUT SPACE
219
 LBSR IN1ADR
220
 BVS  ALTUD
221
 STX  8,U
222
ALTUD RTS ;
223
*
224
*
225
* ALTER "Y" INDEX REGISTER
226
*
227
*
228
ALTRY LBSR PRTIY PRINT MSG " IY = "
229
 LBSR OUT1S OUTPUT SPACE
230
 LBSR IN1ADR
231
 BVS  ALTYD
232
 STX  6,U   $F8F0
233
ALTYD RTS ;
234
*
235
*
236
* ALTER "X" INDEX REGISTER
237
*
238
*
239
ALTRX LBSR PRTIX $FCE0 PRINT MSG " IX = "
240
 LBSR OUT1S OUTPUT SPACE
241
 LBSR IN1ADR
242
 BVS  ALTXD
243
 STX  4,U
244
ALTXD RTS ;
245
*
246
*
247
* ALTER "DP" DIRECT PAGE REGISTER
248
*
249
*
250
ALTRDP LBSR PRTDP $FCD5 PRINT MSG " DP = "
251
 LBSR OUT1S OUTPUT SPACE
252
 LBSR BYTE INPUT BYTE (2 HEX CHAR)
253
 BVS  ALTDPD
254
 STA  3,U
255
ALTDPD RTS ;
256
*
257
*
258
* ALTER "B" ACCUMULATOR
259
*
260
*
261
ALTRB LBSR PRTB $FD09 PRINT MSG " B = "
262
 LBSR OUT1S OUTPUT SPACE
263
 LBSR BYTE INPUT BYTE (2 HEX CHAR)
264
 BVS  ALTBD
265
 STA  2,U
266
ALTBD RTS       $F91C
267
*
268
*
269
* ALTER "A" ACCUMULATOR
270
*
271
*
272
ALTRA LBSR PRTA $FCFF RINT MSG " A = "
273
 LBSR OUT1S OUTPUT SPACE
274
 LBSR BYTE INPUT BYTE (2 HEX CHAR)
275
 BVS  ALTAD
276
 STA  1,U
277
ALTAD RTS ;
278
*
279
*
280
* ALTER "CC" REGISTER
281
*
282
*
283
ALTRCC LBSR PRTCC $FD13 PRINT MSG " CC: "
284
 LBSR OUT1S OUTPUT SPACE
285
 LBSR BYTE INPUT BYTE (2 HEX CHAR)
286
 BVS  ALTCCD
287
 ORA  #$80 SETS "E" FLAG IN PRINT LIST
288
 STA  ,U
289
ALTCCD RTS ;
290
*
291
***** "M" MEMORY EXAMINE AND CHANGE *****
292
*
293
MEMCHG LBSR IN1ADR  INPUT ADDRESS
294
 BVS  CHRTN  IF NOT HEX, RETURN
295
 TFR  X,Y SAVE ADDR IN "Y"
296
MEMC2 LDX  #MSG5 POINT TO MSG " - "
297
 LBSR PSTRNG PRINT MSG
298
 TFR  Y,X FETCH ADDRESS
299
 LBSR OUT4H PRINT ADDR IN HEX
300
 LBSR OUT1S OUTPUT SPACE
301
 LDA  ,Y GET CONTENTS OF CURRENT ADDR.
302
 LBSR OUT2H OUTPUT CONTENTS IN ASCII
303
 LBSR OUT1S OUTPUT SPACE
304
 LBSR BYTE LOOP WAITING FOR OPERATOR INPUT
305
 BVC  CHANGE IF VALID HEX GO CHANGE MEM. LOC.
306
 CMPA #8  IS IT A BACKSPACE (CNTRL H)?
307
 BEQ  MEMC2 PROMPT OPERATOR AGAIN
308
 CMPA #$18  IS IT A CANCEL (CNTRL X)?
309
 BEQ  MEMC2 PROMPT OPERATOR AGAIN
310
 CMPA #'^  IS IT AN UP ARROW?
311
 BEQ  BACK  DISPLAY PREVIOUS BYTE
312
 CMPA #$D  IS IT A CR?
313
 BNE  FORWRD  DISPLAY NEXT BYTE
314
CHRTN RTS  EXIT ROUTINE
315
*
316
*
317
CHANGE STA ,Y  CHANGE BYTE IN MEMORY
318
 CMPA ,Y  DID MEMORY BYTE CHANGE?
319
 BEQ  FORWRD    $F972
320
 LBSR OUT1S OUTPUT SPACE
321
 LDA  #'?  LOAD QUESTION MARK
322
 LBSR OUTCH  PRINT IT
323
FORWRD LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION
324
 BRA  MEMC2 PRINT LOCATION & CONTENTS
325
BACK LEAY -1,Y POINT TO LAST MEM LOCATION
326
 BRA  MEMC2 PRINT LOCATION & CONTENTS
327
*
328
* "S" DISPLAY STACK
329
* HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM
330
** CURRENT STACK POINTER TO INTERNAL STACK LIMIT.
331
*
332
DISSTK LBSR PRTSP PRINT CURRENT STACK POINTER
333
 TFR  U,Y
334
 LDX  #STACK LOAD INTERNAL STACK AS UPPER LIMIT
335
 LEAX -1,X POINT TO CURRENT STACK
336
 BRA  MDUMP1 ENTER MEMORY DUMP OF STACK CONTENTS
337
*
338
* "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII
339
* AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG.
340
*                        UPPER ADDRESS IN X-REG.
341
* IF HEX ADDRESSES ARE INVALID (V)=1.
342
*
343
MEMDUMP LBSR IN2ADR INPUT ADDRESS BOUNDRIES
344
 BVS  EDPRTN NEW COMMAND IF ILLEGAL HEX
345
MDUMP1 PSHS Y COMPARE LOWER TO UPPER BOUNDS
346
 CMPX ,S++ LOWER BOUNDS > UPPER BOUNDS?
347
 BCC  AJDUMP IF NOT, DUMP HEX AND ASCII
348
EDPRTN RTS ;
349
*
350
* ADJUST LOWER AND UPPER ADDRESS LIMITS
351
* TO EVEN 16 BYTE BOUNDRIES.
352
*
353
* IF LOWER ADDR = $4532
354
* LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
355
*
356
* IF UPPER ADDR = $4567
357
* UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
358
*
359
* ENTER WITH LOWER ADDRESS IN X-REG.
360
*           -UPPER ADDRESS ON TOP OF STACK.
361
*
362
AJDUMP TFR  X,D GET UPPER ADDR IN D-REG
363
 ADDD #$10 ADD 16 TO UPPER ADDRESS
364
 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
365
 PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT
366
 TFR  Y,D   $F9A5 GET LOWER ADDRESS IN D-REG
367
 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
368
 TFR  D,X PUT IN X-REG AS LOWER DUMP LIMIT
369
NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT
370
 BEQ  SKPDMP IF EQUAL SKIP HEX-ASCII DUMP
371
 LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD
372
 BEQ  EDUMP IF NONE, CONTINUE WITH DUMP
373
SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING
374
 RTS ;
375
*
376
* PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
377
* FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
378
*
379
EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK
380
 LDX  #MSG5 POINT TO MSG " - "
381
 LBSR PSTRNG PRINT MSG
382
 LDX  ,S LOAD LOWER ADDR FROM TOP OF STACK
383
 LBSR OUT4H PRINT THE ADDRESS LBSR OUT2S PRINT 2 SPACES
384
 LDB  #$10 LOAD COUNT OF 16 BYTES TO DUMP
385
ELOOP LDA  ,X+ GET FROM MEMORY HEX BYTE TO PRINT
386
 LBSR OUT2H OUTPUT HEX BYTE AS ASCII
387
 LBSR OUT1S OUTPUT SPACE
388
 DECB      $F9D1 DECREMENT BYTE COUNT
389
 BNE  ELOOP CONTINUE TIL 16 HEX BYTES PRINTED
390
*
391
* PRINT 16 ASCII CHARACTERS
392
* IF NOT PRINTABLE OR NOT VALID
393
* ASCII PRINT A PERIOD (.)
394
 LBSR OUT2S 2 SPACES
395
 LDX  ,S++ GET LOW LIMIT FRM STACK - ADJ STACK
396
 LDB  #$10 SET ASCII CHAR TO PRINT = 16
397
EDPASC LDA  ,X+ GET CHARACTER FROM MEMORY
398
 CMPA #$20 IF LESS THAN $20, NON-PRINTABLE?
399
 BCS  PERIOD IF SO, PRINT PERIOD INSTEAD
400
 CMPA #$7E IS IT VALID ASCII?
401
 BLS  PRASC IF SO PRINT IT
402
PERIOD LDA  #'. LOAD A PERIOD (.)
403
PRASC LBSR OUTCH PRINT ASCII CHARACTER
404
 DECB DECREMENT COUNT
405
 BNE  EDPASC
406
 BRA  NXTLIN
407
*
408
***** "Q" MEMORY TEST *****
409
*
410
MEMTST CLR  ,-S CLEAR BYTE ON STACK
411
 CLR  ,-S CLEAR ANOTHER BYTE
412
 LBSR IN2ADR GET BEGIN(Y) & END(X) ADDR. LIMITS
413
 PSHS X,Y SAVE ADDRESSES ON STACK
414
 BVS  ADJSK6 EXIT IF NOT VALID HEX
415
 CMPX 2,S COMPARE BEGIN TO END ADDR.
416
 BCS  ADJSK6 EXIT IF BEGIN > END ADDR.
417
 LBSR OUT1S OUTPUT SPACE
418
MEMSET TFR  Y,D PUT BEGIN ADDR. IN 'D'-ACCUM.
419
 ADDD 4,S ADD PASS COUNT TO BEGIN ADDR
420
 PSHS B ADD LS BYTE TO MS BYTE OF BEGIN ADDR
421
 ADDA ,S+
422
 STA  ,Y+ SAVE THIS DATA BYTE AT BEGIN ADDR
423
 CMPY ,S COMPARE END TO BEGIN ADDR
424
 BCS  MEMSET IF BEGIN LOWER, CONTINUE TO SET MEMORY
425
 LDY  2,S RELOAD BEGIN ADDRESS
426
TEST1 TFR  Y,D PUT BEGIN ADDR IN 'D'-ACC.
427
 ADDD 4,S ADD PASS COUNT TO ADDRESS
428
 PSHS A ADD MS BYTE TO LS BYTE OF ADDRESS
429
 ADDB ,S+
430
 EORB ,Y+ EX-OR THIS DATA WITH DATA IN MEMORY LOC.
431
 BEQ  GUDPAS IF (Z) SET, MEMORY BYTE OK
432
 LDX  #MSG5 POINT TO MSG " - "
433
 LBSR PSTRNG PRINT MSG
434
 LEAX -1,Y GET ERROR ADDRESS IN X-REG
435
 LBSR OUT4H OUTPUT IT
436
 PSHS X PUSH ERROR ADDR ON STACK
437
 LDX  #MSG8  POINT TO MSG " =>"
438
 LBSR PDATA  PRINT MSG
439
 PULS X POP ERROR ADDR FROM STACK
440
 LBSR LRA GET PHYSICAL ADDR FROM LRA
441
 LBSR XASCII OUTPUT EXTENDED 4 BITS OF PHYSICAL ADDR
442
 LBSR OUT4H OUTPUT LS 16 BITS OF PHYSICAL ADDR
443
 LDX  #MSG6  POINT TO MSG ", PASS "
444
 LBSR PDATA  PRINT MSG
445
 LDX  4,S LOAD PASS COUNT
446
 LBSR OUT4H OUTPUT IT
447
 LDX  #MSG7 POINT TO MSG ", BITS IN ERROR
448
 LBSR PDATA  PRINT MSG
449
 TFR  B,A GET ERROR BYTE INTO A-ACC
450
 LDX  #MSG9 POINT TO MSG "76543210"
451
 LBSR BIASCI OUTPUT IN BINARY/ASCII FORMAT
452
 LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD $FA56
453
 BNE  ADJSK6 IF SO, EXIT MEMORY TEST
454
GUDPAS CMPY ,S COMPARE END ADDR TO BEGIN ADDR
455
 BCS  TEST1
456
 LDA  #'+ GET "PASS" SYMBOL IF MEMORY PASS OK
457
 LBSR OUTCH OUTPUT SYMBOL TO TERMINAL
458
 LBSR INCHEK INPUT FROM KEYBOARD?
459
 BNE  ADJSK6 IF SO, EXIT MEMORY TEST
460
 LDY  2,S LOAD BEGIN ADDRESS
461
 INC  5,S INCREMENT LS BYTE OF PASS COUNT
462
 BNE  MEMSET IF NOT ZERO, SET NEXT MEMORY BYTE
463
 INC  4,S INCREMENT MS BYTE OF PASS COUNT
464
 BNE  MEMSET DONE WITH 65,535 PASSES OF MEMORY?
465
ADJSK6 LEAS 6,S ADJ STACK POINTER BY 6
466
 RTS
467
*
468
***** "B" SET BREAKPOINT *****
469
*
470
BRKPNT LBSR IN1ADR GET BREAKPOINT ADDRESS
471
 BVS  EXITBP EXIT IF INVALID HEX ADDR.
472
 CMPX #STACK ADDRESS ILLEGAL IF >=$DFC0
473
 BCC  BPERR IF ERROR PRINT (?), EXIT
474
 PSHS X $FA82 PUSH BP ADDRESS ON STACK
475
 LDX  #$FFFF LOAD DUMMY ADDR TO TEST BP TABLE
476
 BSR BPTEST TEST BP TABLE FOR FREE SPACE
477
 PULS X POP BP ADDRESS FROM STACK
478
 BEQ  BPERR (Z) SET, OUT OF BP TABLE SPACE
479
 LDA  ,X GET DATA AT BREAKPOINT ADDRESS
480
 CMPA #$3F IS IT A SWI?
481
 BEQ  BPERR IF SWI ALREADY, INDICATE ERROR
482
 STA  ,Y+ SAVE DATA BYTE IN BP TABLE
483
 STX  ,Y SAVE BP ADDRESS IN BP TABLE
484
 LDA  #$3F LOAD A SWI ($3F)
485
 STA  ,X SAVE SWI AT BREAKPOINT ADDRESS
486
EXITBP RTS ;
487
*
488
*  INDICATE ERROR SETTING BREAKPOINT
489
*
490
BPERR LBSR OUT1S OUTPUT SPACE
491
 LDA  #'? LOAD (?), INDICATE BREAKPOINT ERROR
492
 LBRA OUTCH PRINT "?"
493
*
494
*** "X" CLEAR OUTSTANDING BREAKPOINTS ***
495
*
496
XBKPNT LDY  #BPTBL POINT TO BREAKPOINT TABLE
497
 LDB  #8 LOAD BREAKPOINT COUNTER
498
XBPLP BSR RPLSWI REMOVE USED ENTRY IN BP TABLE
499
 DECB  $FAAC DECREMENT BP COUNTER
500
 BNE XBPLP END OF BREAKPOINT TABLE?
501
 RTS
502
*
503
***** SWI ENTRY POINT *****
504
*
505
SWIE TFR  S,U TRANSFER STACK TO USER POINTER
506
 LDX  10,U LOAD PC FROM STACK INTO X-REG
507
 LEAX -1,X ADJUST ADDR DOWN 1 BYTE.
508
 BSR BPTEST FIND BREAKPOINT IN BP TABLE
509
 BEQ  REGPR IF FOUND, REPLACE DATA AT BP ADDR
510
 STX  10,U SAVE BREAKPOINT ADDR IN STACK
511
 BSR RPLSWI GO REPLACE SWI WITH ORIGINAL DATA
512
REGPR LBSR REGSTR GO PRINT REGISTERS
513
 LBRA NEXTCMD GET NEXT COMMAND
514
RPLSWI LDX  1,Y LOAD BP ADDRESS FROM BP TABLE
515
 CMPX #STACK COMPARE TO TOP AVAILABLE USER MEMORY
516
 BCC  FFSTBL GO RESET TABLE ENTRY TO $FF'S
517
 LDA  ,X GET DATA FROM BP ADDRESS
518
 CMPA #$3F IS IT SWI?
519
 BNE  FFSTBL IF NOT, RESET TABLE ENTRY TO $FF'S
520
 LDA  ,Y GET ORIGINAL DATA FROM BP TABLE
521
 STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS
522
FFSTBL LDA  #$FF LOAD $FF IN A-ACC
523
 STA  ,Y+ RESET BREAKPOINT TABLE DATA TO $FF'S
524
 STA  ,Y+ RESET BREAKPOINT TABLE ADDR TO $FF'S
525
 STA  ,Y+
526
 RTS
527
*
528
** SEARCH BREAKPOINT TABLE FOR MATCH **
529
*
530
BPTEST LDY  #BPTBL POINT TO BREAKPOINT TABLE
531
 LDB  #8 LOAD BREAKPOINT COUNTER
532
FNDBP LDA  ,Y+ LOAD DATA BYTE
533
 CMPX ,Y++ COMPARE ADDRESS, IS IT SAME?
534
 BEQ  BPADJ IF SO, ADJUST POINTER FOR TABLE ENTRY
535
 DECB IF NOT, DECREMENT BREAKPOINT COUNTER
536
 BNE  FNDBP AND LOOK FOR NEXT POSSIBLE MATCH
537
 RTS ;
538
*
539
*
540
BPADJ LEAY -3,Y MOVE POINTER TO BEGIN OF BP ENTRY
541
 RTS
542
*
543
*** "D" DISK BOOT FOR DMAF2 ***
544
*
545
DBOOT LDA  #$DE
546
 STA  DRVREG
547
 LDA  #$FF
548
 STA  PRIREG     $FAF8
549
 STA  CCREG
550
 STA  AAAREG
551
 STA  BBBREG
552
 TST  CCREG
553
 LDA  #$D8
554
 STA  COMREG
555
 LBSR DLY
556
DBOOT0 LDA  COMREG
557
 BMI  DBOOT0
558
 LDA  #$09
559
 STA  COMREG
560
 LBSR DLY
561
*
562
DISKWT LDA  COMREG FETCH DRIVE STATUS
563
 BITA #1 TEST BUSY BIT
564
 BNE  DISKWT LOOP UNTIL NOT BUSY
565
*
566
 BITA #$10
567
 BNE  DBOOT
568
*
569
 LDX  #$C000 LOGICAL ADDR. = $C000
570
 BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR.
571
 ORA  #$10
572
 STA  CCCREG
573
 TFR  X,D
574
 COMA  ;
575
 COMB  ;
576
 STD  ADDREG
577
 LDX  #$FEFF LOAD DMA BYTE COUNT = $100
578
 STX  CNTREG STORE IN COUNT REGISTER
579
 LDA  #$FF LOAD THE CHANNEL REGISTER
580
 STA  CCREG
581
 LDA  #$FE SET CHANNEL 0
582
 STA  PRIREG
583
 LDA  #1 SET SECTOR TO "1"
584
 STA  SECREG ISSUE COMMAND
585
 LDA  #$8C SET SINGLE SECTOR READ
586
 STA  COMREG ISSUE COMMAND
587
 BSR DLY
588
*
589
* THE FOLLOWING CODE TESTS THE STATUS OF THE
590
* CHANNEL CONTROL REGISTER. IF "D7" IS NOT
591
* ZERO THEN IT WILL LOOP WAITING FOR "D7"
592
* TO GO TO ZERO. IF AFTER 65,536 TRIES IT
593
* IS STILL A ONE THE BOOT OPERATION WILL
594
* BE STARTED OVER FROM THE BEGINING.
595
*
596
 CLRB  ;
597
DBOOT1 PSHS B     $FB55
598
 CLRB  ;
599
DBOOT2 TST  CCREG
600
 BPL  DBOOT3
601
 DECB  ;
602
 BNE  DBOOT2
603
 PULS B
604
 DECB
605
 BNE  DBOOT1
606
 BRA  DBOOT
607
DBOOT3 PULS B
608
 LDA  COMREG
609
 BITA #$1C
610
 BEQ  DBOOT4
611
 RTS  ;
612
*
613
*
614
DBOOT4 LDB  #$DE
615
 STB  DRVREG
616
 LDX  #$C000
617
 STX  10,U
618
 TFR  U,S    $FB7B
619
 RTI  ;
620
*
621
***** LRA LOAD REAL ADDRESS *****
622
*
623
* THE FOLLOWING CODE LOADS THE 20-BIT
624
* PHYSICAL ADDRESS OF A MEMORY BYTE
625
* INTO THE "A" AND "X" REGISTERS. THIS
626
* ROUTINE IS ENTERED WITH THE LOGICAL
627
* ADDRESS OF A MEMORY BYTE IN THE "IX"
628
* REGISTER. EXIT IS MADE WITH THE HIGH-
629
* ORDER FOUR BITS OF THE 20-BIT PHYSICAL
630
* ADDRESS IN THE "A" REGISTER, AND THE
631
* LOW-ORDER 16-BITS OF THE 20-BIT
632
* PHYSICAL ADDRESS IN THE "IX" REGISTER.
633
* ALL OTHER REGISTERS ARE PRESERVED.
634
* THIS ROUTINE IS REQUIRED SINCE THE
635
* DMAF1 AND DMAF2 DISK CONTROLLERS MUST
636
* PRESENT PHYSICAL ADDRESSES ON THE
637
* SYSTEM BUS.
638
*
639
LRA PSHS A,B,X,Y PUSH REGISTERS ON STACK
640
 LDA  2,S GET MSB LOGICAL ADDR FRM X REG ON STACK
641
 LSRA  ;
642
 LSRA  ADJ FOR INDEXED INTO
643
 LSRA  CORRESPONDING LOCATION
644
 LSRA  IN LRA TABLE
645
 LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS
646
 LDB  A,Y GET PHYSICAL ADDR. DATA FROM LRA TABLE
647
 LSRB  ADJ. REAL ADDR. TO REFLECT EXTENDED
648
 LSRB  PHYSICAL ADDRESS.
649
 LSRB  EXTENDED MS 4-BITS ARE RETURNED
650
 LSRB  IN THE "A" ACCUMULATOR
651
 STB  ,S MS 4 BITS IN A ACCUM. STORED ON STACK
652
 LDB  A,Y LOAD REAL ADDRESS DATA FROM LRA TABLE
653
 COMB  COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
654
 ASLB ADJ DATA FOR RELOCATION IN X REG
655
 ASLB  ;
656
 ASLB       $FB97
657
 ASLB  ;
658
 LDA  2,S GET MS BYTE OF LOGICAL ADDR.
659
 ANDA #$0F MASK MS NIBBLE OF LOGICAL ADDRESS
660
 STA  2,S SAVE IT IN X REG ON STACK
661
 ORB  2,S SET MS BYTE IN X REG TO ADJ PHY ADDR.
662
*
663
* PLUS LS NIBBLE OF LOGICAL ADDRESS
664
 STB  2,S SAVE AS LS 16 BITS OF PHY ADDR IN X REG
665
* ON STACK
666
 PULS A,B,X,Y POP REGS. FROM STACK
667
 RTS  ;
668
*
669
* DELAY LOOP
670
*
671
DLY PSHS B SAVE CONTENTS OF "B"
672
 LDB  #$20 GET LOOP DELAY VALUE
673
SUB1 DECB  SUBTRACT ONE FROM VALUE
674
 BNE  SUB1 LOOP UNTIL ZERO
675
 PULS B RESTORE CONTENTS OF "B"
676
 RTS  ;
677
*
678
***** "U" MINIDISK BOOT *****
679
*
680
MINBOOT TST  Comreg
681
 CLR  Drvreg  SELECT DRIVE 0
682
*
683
* DELAY BEFORE ISSUING RESTORE COMMAND
684
 LDB  #3
685
 LDX  #0
686
LOOP LEAX 1,X      $FBBB
687
 CMPX #0
688
 BNE  LOOP
689
 DECB                $FBC2
690
 BNE  LOOP
691
*
692
 LDA  #$0F *LOAD HEAD, VERIFY, 20msec/step
693
 STA  Comreg  ISSUE RESTORE COMMAND
694
 BSR DELAY
695
LOOP1 LDB  Comreg      $FBCC
696
 BITB #1
697
 BNE  LOOP1  LOOP UNTIL THRU
698
 LDA  #1
699
 STA  Secreg SET SECTOR REGISTER TO ONE
700
 BSR DELAY
701
 LDA  #$8C  LOAD HEAD, DELAY 10msec,
702
 STA  Comreg  AND READ SINGLE RECORD
703
 BSR DELAY
704
 LDX  #$C000
705
 BRA  LOOP3
706
*
707
LOOP2 BITB #2      $FBE6 DRQ?
708
 BEQ  LOOP3
709
 LDA  Datreg
710
 STA  ,X+
711
*
712
LOOP3 LDB  Comreg FETCH STATUS
713
 BITB #1  BUSY?
714
 BNE  LOOP2
715
 BITB #$2C CRC ERROR OR LOST DATA?
716
 BEQ  LOOP4
717
 RTS  ;
718
LOOP4 LDX  #$C000        $FBFB
719
 STX  10,U
720
 TFR  U,S
721
 RTI  ;
722
*
723
* DELAY
724
*
725
DELAY LDB  #$20
726
LOOP5 DECB  ;
727
 BNE  LOOP5
728
 RTS  ;
729
*
730
***** "L" LOAD MIKBUG TAPE *****
731
*
732
LOAD LDA  #$11  LOAD 'DC1' CASS. READ ON CODE
733
 LBSR OUTCH  OUTPUT IT TO TERMINAL PORT
734
 CLR  ECHO  TURN OFF ECHO FLAG
735
LOAD1 LBSR ECHON INPUT 8 BIT BYTE WITH NO ECHO
736
LOAD2 CMPA #'S IS IT AN "S", START CHARACTER ?
737
 BNE  LOAD1 IF NOT, DISCARD AND GET NEXT CHAR.
738
 LBSR ECHON
739
 CMPA #'9 IS IT A "9" , END OF FILE CHAR ?
740
 BEQ  LOAD21 IF SO, EXIT LOAD
741
 CMPA #'1 IS IT A "1" , FILE LOAD CHAR ?
742
 BNE  LOAD2 IF NOT, LOOK FOR START CHAR.
743
 LBSR BYTE INPUT BYTE COUNT
744
 PSHS A PUSH COUNT ON STACK
745
 BVS  LODERR (V) C-CODE SET, ILLEGAL HEX
746
 LBSR IN1ADR INPUT LOAD ADDRESS
747
 BVS  LODERR (V) C-CODE SET, ADDR NOT HEX
748
 PSHS X PUSH ADDR ON STACK
749
 LDB  ,S+ LOAD MSB OF ADDR AS CHECKSUM BYTE
750
 ADDB ,S+ ADD LSB OF ADDR TO CHECKSUM
751
 ADDB ,S ADD BYTE COUNT BYTE TO CHECKSUM
752
 DEC  ,S $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
753
 DEC  ,S ADDRESS BYTES.
754
LOAD10 PSHS B PUSH CHECKSUM ON STACK
755
 LBSR BYTE INPUT DATA BYTE (2 HEX CHAR)
756
 PULS B POP CHECKSUM FROM STACK
757
 BVS  LODERR (V) SET, DATA BYTE NOT HEX
758
 PSHS A PUSH DATA BYTE ON STACK
759
 ADDB ,S+ ADD DATA TO CHECKSUM, AUTO INC STACK
760
 DEC  ,S DECREMENT BYTE COUNT 1
761
 BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM
762
 STA  ,X+ SAVE DATA BYTE IN MEMORY
763
 BRA  LOAD10 GET NEXT DATA BYTE
764
LODERR CLRB  ;ERROR CONDITION, ZERO CHECKSUM  ;
765
LOAD16 PULS A ADJUST STACK (REMOVE BYTE COUNT)
766
 CMPB #$FF CHECKSUM OK?
767
 BEQ  LOAD IF SO, LOAD NEXT LINE
768
 LDA  #'? LOAD (?) ERROR INDICATOR
769
 LBSR OUTCH OUTPUT IT TO TERMINAL
770
LOAD21 COM  ECHO TURN ECHO ON
771
 LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE
772
 LBRA OUTCH OUTPUT IT
773
*
774
***** "P" PUNCH MIKBUG TAPE *****
775
*
776
PUNCH CLR  ,-S CLEAR RESERVED BYTE ON STACK
777
 LBSR IN2ADR GET BEGIN AND END ADDRESS
778
 PSHS X,Y SAVE ADDRESSES ON STACK
779
 BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH
780
 CMPX 2,S COMPARE BEGIN TO END ADDR
781
 BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH
782
 LEAX 1,X INCREMENT END ADDRESS
783
 STX  ,S STORE END ADDR ON STACK
784
 LDA  #$12 LOAD 'DC2' PUNCH ON CODE
785
 LBSR OUTCH OUTPUT IT TO TERMINAL
786
PUNCH2 LDD  ,S LOAD END ADDR IN D-ACC
787
 SUBD 2,S SUBTRACT BEGIN FROM END
788
 BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT
789
 CMPD #$20 LESS THAN 32 BYTES?
790
 BLS  PUNCH4 PUNCH THAT MANY BYTES
791
PUNCH3 LDB  #$20 LOAD BYTE COUNT OF 32.
792
PUNCH4 STB  4,S STORE ON STACK AS BYTE COUNT
793
 LDX  #MSG20 POINT TO MSG "S1"
794
 LBSR PSTRNG PRINT MSG
795
 ADDB #3 ADD 3 BYTES TO BYTE COUNT
796
 TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH
797
 LBSR OUT2H OUTPUT BYTE COUNT
798
 LDX  2,S LOAD BEGIN ADDRESS
799
 LBSR OUT4H PUNCH ADDRESS
800
 ADDB 2,S ADD ADDR MSB TO CHECKSUM
801
 ADDB 3,S ADD ADDR LSB TO CHECKSUM
802
PUNCHL ADDB ,X ADD DATA BYTE TO CHECKSUM
803
 LDA  ,X+ LOAD DATA BYTE TO PUNCH
804
 LBSR OUT2H OUTPUT DATA BYTE
805
 DEC  4,S DECREMENT BYTE COUNT
806
 BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE
807
 COMB  1's COMPLIMENT CHECKSUM BYTE
808
 TFR  B,A GET IT IN A-ACC TO PUNCH
809
 LBSR OUT2H OUTPUT CHECKSUM BYTE
810
 STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR
811
 CMPX ,S COMPARE IT TO END ADDR
812
 BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT.
813
PUNEXT LDA  #$14 LOAD 'DC4' PUNCH OFF CODE
814
 LBSR OUTCH OUTPUT IT
815
 LEAS 5,S READJUST STACK POINTER
816
 RTS  ;
817
*
818
*
819
PRTSP LDX  #MSG10 POINT TO MSG "SP="
820
 LBSR PDATA  PRINT MSG
821
 TFR  U,X
822
 LBRA OUT4H
823
PRTUS LDX  #MSG12 POINT TO MSG "US="
824
 LBSR PDATA  PRINT MSG
825
 LDX  8,U
826
 LBRA OUT4H
827
PRTDP LDX  #MSG15 POINT TO MSG "DP="
828
 LBSR PDATA  PRINT MSG
829
 LDA  3,U
830
 LBRA OUT2H OUTPUT HEX BYTE AS ASCII
831
PRTIX LDX  #MSG14 POINT TO MSG "IX="
832
 LBSR PDATA  PRINT MSG
833
 LDX  4,U      $FCE6
834
 LBRA OUT4H
835
PRTIY LDX  #MSG13 POINT TO MSG "IY="
836
 LBSR PDATA  PRINT MSG
837
 LDX  6,U
838
 LBRA  OUT4H
839
PRTPC LDX  #MSG11 POINT TO MSG "PC="
840
 LBSR PDATA  PRINT MSG
841
 LDX  10,U
842
 BRA  OUT4H
843
PRTA LDX  #MSG16 POINT TO MSG "A="
844
 LBSR PDATA  PRINT MSG
845
 LDA  1,U
846
 BRA OUT2H OUTPUT HEX BYTE AS ASCII
847
PRTB LDX  #MSG17 POINT TO MSG "B="
848
 LBSR PDATA  PRINT MSG
849
 LDA  2,U
850
 BRA OUT2H OUTPUT HEX BYTE AS ASCII
851
PRTCC LDX  #MSG18 POINT TO MSG "CC:"
852
 LBSR PDATA  PRINT MSG
853
 LDA  ,U
854
 LDX  #MSG19 POINT TO MSG "EFHINZVC"
855
 BRA BIASCI OUTPUT IN BINARY/ASCII FORMAT
856
*
857
* THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
858
* OPERATOR TO INPUT TWO VALID HEX ADDRESSES.
859
* THE FIRST ADDRESS INPUT IS RETURNED IN "IY".
860
* THE SECOND IS RETURNED IN "IX". THE "V" BIT
861
* IN THE C-CODE REG. IS SET IF AN INVALID HEX
862
* ADDRESS IS INPUT.
863
*
864
IN2ADR BSR IN1ADR GET FIRST ADDRESS
865
 BVS NOTHEX EXIT IF NOT VALID HEX
866
 TFR  X,Y SAVE FIRST ADDR. IN "IY"
867
 LDA #'-
868
 LBSR OUTCH PRINT " - "
869
*
870
* THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
871
* OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
872
* ADDRESS IS RETURNED IN THE "X" REGISTER.
873
*
874
IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR)
875
 BVS NOTHEX EXIT IF NOT VALID HEX
876
 TFR  D,X
877
 BSR BYTE INPUT BYTE (2 HEX CHAR)
878
 BVS NOTHEX
879
 PSHS X
880
 STA  1,S
881
 PULS X
882
 RTS   ;
883
*
884
***** INPUT BYTE (2 HEX CHAR.) *****
885
*
886
BYTE BSR INHEX GET HEX LEFT
887
 BVS NOTHEX EXIT IF NOT VALID HEX
888
 ASLA   ;
889
 ASLA   ;
890
 ASLA   ; SHIFT INTO LEFT NIBBLE
891
 ASLA   ;
892
 TFR  A,B PUT HEXL IN "B"
893
 BSR INHEX GET HEX RIGHT
894
 BVS NOTHEX EXIT IF NOT VALID HEX
895
 PSHS B PUSH HEXL ON STACK
896
 ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
897
 RTS  RETURN WITH HEX L&R IN "A"
898
*
899
*
900
INHEX BSR ECHON INPUT ASCII CHAR.
901
 CMPA #'0 IS IT > OR = "0" ?
902
 BCS NOTHEX IF LESS IT AIN'T HEX
903
 CMPA #'9 IS IT < OR = "9" ?
904
 BHI INHEXA IF > MAYBE IT'S ALPHA
905
 SUBA #$30 ASCII ADJ. NUMERIC
906
 RTS  ;
907
*
908
*
909
INHEXA CMPA #'A IS IT > OR = "A"
910
 BCS NOTHEX IF LESS IT AIN'T HEX
911
 CMPA #'F IS IT < OR = "F" ?
912
 BHI INHEXL IF > IT AIN'T HEX
913
 SUBA #$37 ASCII ADJ. ALPHA
914
 RTS  ;
915
*
916
INHEXL CMPA #'a IS IT > OR = "a"
917
 BCS NOTHEX IF LESS IT AIN'T HEX
918
 CMPA #'f IS IT < "f"
919
 BHI NOTHEX IF > IT AIN'T HEX
920
 SUBA #$57 ADJUST TO LOWER CASE
921
 RTS  ;
922
*
923
*
924
NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
925
 RTS  ;
926
*
927
*
928
OUT4H PSHS X PUSH X-REG. ON THE STACK
929
 PULS A POP MS BYTE OF X-REG INTO A-ACC.
930
 BSR OUTHL OUTPUT HEX LEFT
931
 PULS A POP LS BYTE OF X-REG INTO A-ACC.
932
OUTHL EQU *
933
OUT2H PSHS A SAVE IT BACK ON STACK
934
 LSRA CONVERT UPPER HEX NIBBLE TO ASCII
935
 LSRA  ;
936
 LSRA  ;
937
 LSRA  ;
938
 BSR XASCII PRINT HEX NIBBLE AS ASCII
939
OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII
940
 ANDA #$0F STRIP LEFT NIBBLE
941
XASCII ADDA #$30 ASCII ADJ
942
 CMPA #$39 IS IT < OR = "9" ?
943
 BLE  OUTC IF LESS, OUTPUT IT
944
 ADDA #7 IF > MAKE ASCII LETTER
945
OUTC BRA  OUTCH OUTPUT CHAR
946
*
947
* BINARY / ASCII --- THIS ROUTINE
948
* OUTPUTS A BYTE IN ENHANCED
949
* BINARY FORMAT. THE ENHANCEMENT
950
* IS DONE BY SUBSTITUTING ASCII
951
* LETTERS FOR THE ONES IN THE BYTE.
952
* THE ASCII ENHANCEMENT LETTERS
953
* ARE OBTAINED FROM THE STRING
954
* POINTED TO BY THE INDEX REG. "X".
955
*
956
BIASCI PSHS A SAVE "A" ON STACK
957
 LDB  #8 PRESET LOOP# TO BITS PER BYTE
958
OUTBA LDA ,X+ GET LETTER FROM STRING
959
 ASL  ,S TEST BYTE FOR "1" IN B7
960
 BCS PRTBA IF ONE PRINT LETTER
961
 LDA #'- IF ZERO PRINT "-"
962
PRTBA BSR OUTCH PRINT IT
963
 BSR OUT1S PRINT SPACE
964
 DECB SUB 1 FROM #BITS YET TO PRINT
965
 BNE OUTBA
966
 PULS A
967
 RTS
968
*
969
* PRINT STRING PRECEEDED BY A CR & LF.
970
*
971
PSTRNG BSR PCRLF PRINT CR/LF
972
 BRA  PDATA  PRINT STRING POINTED TO BY IX
973
*
974
* PCRLF
975
*
976
PCRLF PSHS X SAVE IX
977
 LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS
978
 BSR PDATA  PRINT MSG
979
 PULS X RESTORE IX
980
 RTS  ;
981
PRINT BSR OUTCH
982
*
983
* PDATA
984
*
985
PDATA LDA  ,X+ GET 1st CHAR. TO PRINT
986
 CMPA #4 IS IT EOT?
987
 BNE  PRINT IF NOT EOT PRINT IT
988
 RTS  ;
989
*
990
*
991
ECHON TST  ECHO IS ECHO REQUIRED ?
992
 BEQ  INCH ECHO NOT REQ. IF CLEAR
993
*
994
* INCHE
995
*
996
* ---GETS CHARACTER FROM TERMINAL AND
997
* ECHOS SAME. THE CHARACTER IS RETURNED
998
* IN THE "A" ACCUMULATOR WITH THE PARITY
999
* BIT MASKED OFF. ALL OTHER REGISTERS
1000
* ARE PRESERVED.
1001
*
1002
INCHE BSR INCH GET CHAR FROM TERMINAL
1003
 ANDA #$7F      STRIP PARITY FROM CHAR.
1004
 BRA  OUTCH     ECHO CHAR TO TERMINAL
1005
*
1006
* INCH
1007
*
1008
* GET CHARACTER FROM TERMINAL. RETURN
1009
* CHARACTER IN "A" ACCUMULATOR AND PRESERVE
1010
* ALL OTHER REGISTERS. THE INPUT CHARACTER
1011
* IS 8 BITS AND IS NOT ECHOED.
1012
*
1013
*
1014
INCH PSHS X SAVE IX
1015
 LDX  CPORT POINT TO TERMINAL PORT
1016
GETSTA LDA  ,X  FETCH PORT STATUS
1017
 BITA #1 TEST READY BIT, RDRF ?
1018
 BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN
1019
 LDA  1,X FETCH CHAR
1020
 PULS X RESTORE IX
1021
 RTS  ;
1022
*
1023
* INCHEK
1024
*
1025
* CHECK FOR A CHARACTER AVAILABLE FROM
1026
* THE TERMINAL. THE SERIAL PORT IS CHECKED
1027
* FOR READ READY. ALL REGISTERS ARE
1028
* PRESERVED, AND THE "Z" BIT WILL BE
1029
* CLEAR IF A CHARACTER CAN BE READ.
1030
*
1031
*
1032
INCHEK PSHS A SAVE A ACCUM.
1033
 LDA  [CPORT] FETCH PORT STATUS
1034
 BITA #1 TEST READY BIT, RDRF ?
1035
 PULS A RESTORE A ACCUM.
1036
 RTS  ;
1037
*
1038
OUT2S BSR OUT1S OUTPUT 2 SPACES
1039
OUT1S LDA  #$20  OUTPUT 1 SPACE
1040
*
1041
*
1042
* OUTCH
1043
*
1044
* OUTPUT CHARACTER TO TERMINAL.
1045
* THE CHAR. TO BE OUTPUT IS
1046
* PASSED IN THE A REGISTER.
1047
* ALL REGISTERS ARE PRESERVED.
1048
*
1049
OUTCH PSHS A,X SAVE A ACCUM AND IX
1050
 LDX  CPORT GET ADDR. OF TERMINAL
1051
FETSTA LDA  ,X FETCH PORT STATUS
1052
 BITA #2 TEST TDRE, OK TO XMIT ?
1053
 BEQ  FETSTA IF NOT LOOP UNTIL RDY
1054
 PULS A GET CHAR. FOR XMIT
1055
 STA  1,X XMIT CHAR.
1056
 PULS X RESTORE IX
1057
 RTS  ;
1058
*
1059
*
1060
ACINIZ LDX  CPORT  POINT TO CONTROL PORT ADDRESS
1061
 LDA  #3  RESET ACIA PORT CODE
1062
 STA  ,X  STORE IN CONTROL REGISTER
1063
 LDA  #$11  SET 8 DATA, 2 STOP AN 0 PARITY
1064
 STA  ,X  STORE IN CONTROL REGISTER
1065
 TST  1,X  ANYTHING IN DATA REGISTER?
1066
 LDA  #$FF  TURN ON ECHO FLAG
1067
 STA  ECHO
1068
 RTS
1069
*
1070
*
1071
* MONITOR KEYBOARD COMMAND JUMP TABLE
1072
*
1073
*
1074
JMPTAB EQU *
1075
 FCB 1 " ^A "  $F91D
1076
 FDB ALTRA
1077
 FCB 2 " ^B "  $F90F
1078
 FDB ALTRB
1079
 FCB 3 " ^C "  $F92B
1080
 FDB ALTRCC
1081
 FCB 4 " ^D "  $F901
1082
 FDB ALTRDP
1083
 FCB $10 " ^P "  $F8C9
1084
 FDB ALTRPC
1085
 FCB $15 " ^U "  $F8D7
1086
 FDB ALTRU
1087
 FCB $18 " ^X "  $F8F3
1088
 FDB ALTRX
1089
 FCB $19 " ^Y "  $F8E5
1090
 FDB ALTRY
1091
*
1092
 FCC 'B'
1093
 FDB BRKPNT *$FA78
1094
 FCC 'D'
1095
 FDB DBOOT *$FAF1
1096
 FCC 'E'
1097
 FDB MEMDUMP *$F990
1098
 FCC 'G'
1099
 FDB GO *$F89F
1100
 FCC 'L'
1101
 FDB LOAD *$FC09
1102
 FCC 'M'
1103
 FDB MEMCHG *$F93B
1104
 FCC 'P'
1105
 FDB PUNCH *$FC64
1106
 FCC 'Q'
1107
 FDB MEMTST *$F9EF
1108
 FCC 'R'
1109
 FDB REGSTR *$F8A2
1110
 FCC 'S'
1111
 FDB DISSTK *$F984
1112
 FCC 'U'
1113
 FDB MINBOOT *$FBB0
1114
 FCC 'X'
1115
 FDB XBKPNT *$FAA4
1116
*
1117
TABEND EQU *
1118
*
1119
* ** 6809 VECTOR ADDRESSES **
1120
*
1121
* FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES
1122
* FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY
1123
* ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE
1124
* RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO
1125
* HIS OWN ROUTINES IF HE SO DESIRES.
1126
*
1127
*
1128
RAMVEC FDB SWIE  USER-V
1129
 FDB RTI    SWI3-V
1130
 FDB RTI    SWI2-V
1131
 FDB RTI    FIRQ-V
1132
 FDB RTI    IRQ-V
1133
 FDB SWIE   SWI-V
1134
 FDB $FFFF  SVC-VO
1135
 FDB $FFFF  SVC-VL
1136
*
1137
* PRINTABLE MESSAGE STRINGS
1138
*
1139
MSG1 FCB $0,$0,$0,$D,$A,$0,$0,$0 * 0, CR/LF, 0
1140
 FCC 'S-BUG 1.8 - '
1141
 FCB 4
1142
MSG2 FCB 'K,$D,$A,$0,$0,$0,4 K, * CR/LF + 3 NULS
1143
MSG3 FCC '>'
1144
 FCB 4
1145
MSG4 FCC 'WHAT?'
1146
 FCB 4
1147
MSG5 FCC ' - '
1148
 FCB 4'
1149
MSG6 FCC ', PASS '
1150
 FCB 4
1151
MSG7 FCC ', BITS IN ERROR: '
1152
 FCB 4
1153
MSG8 FCC ' => '
1154
 FCB 4
1155
MSG9 FCC '76543210'
1156
MSG10 FCC '  SP='
1157
 FCB 4
1158
MSG11 FCC '  PC='
1159
 FCB 4
1160
MSG12 FCC '  US='
1161
 FCB 4
1162
MSG13 FCC '  IY='
1163
 FCB 4
1164
MSG14 FCC '  IX='
1165
 FCB 4
1166
MSG15 FCC '  DP='
1167
 FCB 4
1168
MSG16 FCC '  A='
1169
 FCB 4
1170
MSG17 FCC '  B='
1171
 FCB 4
1172
MSG18 FCC '  CC: '
1173
 FCB 4
1174
MSG19 FCC 'EFHINZVC'
1175
MSG20 FCC 'S1'
1176
 FCB 4
1177
*
1178
* MESSAGE EXPANSION AREA
1179
*
1180
 FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
1181
 FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF
1182
*
1183
* POWER UP/ RESET/ NMI ENTRY POINT
1184
*
1185
 ORG $FF00
1186
*
1187
*
1188
START LDX  #IC11  POINT TO DAT RAM IC11
1189
 LDA  #$F GET COMPLIMENT OF ZERO
1190
*
1191
*
1192
* INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
1193
* OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS
1194
* IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE
1195
* OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA
1196
* STORED IN IT.
1197
*
1198
*
1199
DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION
1200
 DECA  GET COMP. VALUE FOR NEXT LOCATION
1201
 BNE  DATLP ALL 16 LOCATIONS INITIALIZED ?
1202
*
1203
* NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
1204
*       ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
1205
*       PHYSICAL ADDRESSES.
1206
*
1207
 LDA  #$F0
1208
 STA  ,X STORE $F0 AT $FFFF
1209
 LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF
1210
 LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y"
1211
TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION
1212
 STY  ,X STORE TEST PATTERN AT $D0A0
1213
 CMPY ,X IS THERE RAM AT THIS LOCATION ?
1214
 BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP
1215
 LEAX -$1000,X ELSE POINT 4K LOWER
1216
 CMPX #$F0A0 DECREMENTED PAST ZER0 YET ?
1217
 BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM
1218
 BRA  START ELSE START ALL OVER AGAIN
1219
*
1220
*
1221
* THE FOLLOWING CODE STORES THE COMPLEMENT OF
1222
* THE MS CHARACTER OF THE FOUR CHARACTER HEX
1223
* ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED
1224
* BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT
1225
* IS STORED IN RAM IN THE LOCATION THAT IS
1226
* ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---,
1227
* THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND
1228
* WHEN TESTING LOCATION $70A0, MEANING THERE
1229
* IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE
1230
* $8000-$DFFF, THEN THE COMPLEMENT OF THE
1231
* "7" IN THE $70A0 WILL BE STORED IN
1232
* THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS
1233
* AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND
1234
* BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE
1235
* 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE
1236
* RAM THAT IS PHYSICALLY ADDRESSED AT $7---
1237
* WILL RESPOND AND APPEAR TO THE 6809 THAT IT
1238
* IS AT $D--- SINCE THAT IS THE ADDRESS THE
1239
* 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK
1240
* OF RAM RESPONDS.
1241
*
1242
*
1243
CNVADR STU  ,X RESTORE DATA AT TEST LOCATION
1244
 TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
1245
 COMA  COMPLEMENT MSB OF THAT ADDRESS
1246
 LSRA  PUT MS 4 BITS OF ADDRESS IN
1247
 LSRA  LOCATION D0-D3 TO ALLOW STORING
1248
 LSRA  IT IN THE DYNAMIC ADDRESS
1249
 LSRA  TRANSLATION RAM.
1250
 STA  $FFFD STORE XLATION FACTOR IN DAT "D"
1251
*
1252
 LDS  #STACK INITIALIZE STACK POINTER
1253
*
1254
*
1255
* THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
1256
* OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK
1257
* OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS
1258
* IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION
1259
* TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF
1260
* THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO
1261
* RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---....
1262
*
1263
*  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1264
* 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- --
1265
*
1266
* ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE
1267
* CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING....
1268
*
1269
*  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1270
* 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0
1271
*
1272
*
1273
* HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF
1274
* HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL
1275
* ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK
1276
* PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT
1277
* IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000
1278
* WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000
1279
* RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE
1280
* MEMORY ADDRESSED AS FOLLOWS....
1281
*
1282
*  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
1283
* 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
1284
*
1285
*
1286
 LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
1287
 STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD
1288
 CLR  14,Y CLEAR $DFDE
1289
 LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ?
1290
 STA  15,Y STORE AT $DFDF
1291
 LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR
1292
CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0
1293
 DECA SUB. 1 FROM BYTES LEFT TO CLEAR
1294
 BPL  CLRLRT CONTINUE IF NOT DONE CLEARING
1295
FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM
1296
 CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO
1297
 BEQ  FINTAB SKIP IF FINISHED
1298
 LDU  ,X SAVE DATA AT CURRENT TEST LOCATION
1299
 LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG.
1300
 STY  ,X STORE TEST PATT. INTO RAM TEST LOC.
1301
 CMPY ,X VERIFY RAM AT TEST LOCATION
1302
 BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER
1303
 STU  ,X ELSE RESTORE DATA TO TEST LOCATION
1304
 LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE
1305
 TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D
1306
 LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
1307
 LSRA  TO ALLOW STORING IT IN THE DAT RAM.
1308
 LSRA
1309
 LSRA
1310
 TFR  A,B SAVE OFFSET INTO LRARAM TABLE
1311
 EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK
1312
 STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE
1313
 BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK
1314
FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ?
1315
 LDY  #LRARAM POINT TO LRARAM TABLE
1316
 STA  14,Y STORE $F1 AT $DFCE
1317
*
1318
* THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
1319
* RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
1320
* THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT
1321
* LOGICALLY RESPONDS TO THE ADDRESS $C---.
1322
*
1323
*
1324
 LDA  #$0C PRESET NUMBER HEX "C"
1325
FINDC LDB  A,Y GET ENTRY FROM LRARAM TABLE
1326
 BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR.
1327
 DECA  ELSE POINT 4K LOWER
1328
 BPL  FINDC GO TRY AGAIN
1329
 BRA  XFERTF
1330
FOUNDC CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND
1331
 STB  $C,Y GIVE IT XLATION FACTOR MOVING IT TO $C---
1332
*
1333
* THE FOLLOWING CODE ADJUSTS THE TRANSLATION
1334
* FACTORS SUCH THAT ALL REMAINING RAM WILL
1335
* RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
1336
* ADDRESSES FROM $0000 AND UP....
1337
*
1338
 CLRA  START AT ZERO
1339
 TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE.
1340
COMPRS LDB  A,Y GET ENTRY FROM "LRARAM" TABLE
1341
 BEQ  PNTNXT IF IT'S ZER0 SKIP
1342
 CLR  A,Y ELSE ERASE FROM TABLE
1343
 STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP
1344
PNTNXT INCA GET OFFSET TO NEXT ENTRY
1345
 CMPA #$0C LAST ENTRY YET ?
1346
 BLT  COMPRS
1347
*
1348
* THE FOLLOWING CODE TRANSFER THE TRANSLATION
1349
* FACTORS FROM THE LRARAM TABLE TO IC11 ON
1350
* THE MP-09 CPU CARD.
1351
*
1352
XFERTF LDX  #IC11  POINT TO DAT RAM IC11
1353
 LDB  #$10 GET NO. OF BYTES TO MOVE
1354
FETCH LDA  ,Y+ GET BYTE AND POINT TO NEXT
1355
 STA  ,X+ POKE XLATION FACTOR IN IC11
1356
 DECB  SUB 1 FROM BYTES TO MOVE
1357
 BNE  FETCH CONTINUE UNTIL 16 MOVED
1358
 COMB  SET "B" NON-ZERO
1359
 STB  ECHO TURN ON ECHO FLAG
1360
 LBRA MONITOR INITIALIZATION IS COMPLETE
1361
*
1362
*
1363
V1 JMP  [STACK]
1364
V2 JMP  [SWI2]
1365
V3 JMP  [FIRQ]
1366
V4 JMP  [IRQ]
1367
V5 JMP  [SWI]
1368
*
1369
* SWI3 ENTRY POINT
1370
*
1371
SWI3E TFR  S,U
1372
 LDX  10,U      *$FFC8
1373
 LDB  ,X+
1374
 STX  10,U
1375
 CLRA
1376
 ASLB
1377
 ROLA
1378
 LDX  SVCVO
1379
 CMPX #$FFFF
1380
 BEQ  SWI3Z
1381
 LEAX D,X
1382
 CMPX SVCVL
1383
 BHI  SWI3Z
1384
 PSHS X
1385
 LDD  ,U
1386
 LDX  4,U
1387
 JMP  [,S++]
1388
SWI3Z PULU A,B,X,CC,DP
1389
 LDU  2,U
1390
 JMP  [SWI3]
1391
*
1392
* 6809 VECTORS
1393
*
1394
 FDB V1    USER-V
1395
 FDB SWI3E SWI3-V
1396
 FDB V2    SWI2-V
1397
 FDB V3    FIRQ-V
1398
 FDB V4    IRQ-V
1399
 FDB V5    SWI-V
1400
 FDB V1    NMI-V
1401
 FDB START RESTART-V
1402
 END START

powered by: WebSVN 2.1.0

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