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

Subversion Repositories System09

[/] [System09/] [tags/] [V10/] [sw/] [sbug_src.lst] - Rev 66

Compare with Previous | Blame | View Log

0001                         * NAM SBUG18 MP-09 MONITOR 
0002                          OPT l 
sbug_src.txt                                   page   2
0004                         * 
0005                         * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL 
0006                         * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY.... 
0007                         * 
0008                         * ALLEN CLARK            WALLACE WATSON 
0009                         * 2502 REGAL OAKS LANE   4815 EAST 97th AVE. 
0010                         * LUTZ, FLA. 33549       TEMPLE TERRACE, FLA. 33617 
0011                         * PH. 813-977-0347       PH. 813-985-1359 
0012                         * 
0013                         * MODIFIED TO SBUG09 VER 1.8 BY:  RANDY JARRETT 
0014                         *                                 2561 NANTUCKET DR APT. E 
0015                         *                                 ATLANTA, GA  30345 
0016                         *                                 PH. 404-320-1043 
0017                         * 
0018                         * 
0019                         *       *** COMMANDS *** 
0020                         * 
0021                         * CONTROL A   = ALTER THE "A" ACCUMULATOR 
0022                         * CONTROL B   = ALTER THE "B" ACCUMULATOR 
0023                         * CONTROL C   = ALTER THE CONDITION CODE REGISTER 
0024                         * CONTROL D   = ALTER THE DIRECT PAGE REGISTER 
0025                         * CONTROL P   = ALTER THE PROGRAM COUNTER 
0026                         * CONTROL U   = ALTER USER STACK POINTER 
0027                         * CONTROL X   = ALTER "X" INDEX REGISTER 
0028                         * CONTROL Y   = ALTER "Y" INDEX REGISTER 
0029                         * B hhhh      = SET BREAKPOINT AT LOCATION $hhhh 
0030                         * D           = BOOT A SWTPC 8 INCH FLOPPY SYSTEM 
0031                         * U           = BOOT A SWTPC 5 INCH FLOPPY SYSTEM 
0032                         * E ssss-eeee = EXAMINE MEMORY FROM STARTING ADDRESS ssss 
0033                         *              -TO ENDING ADDRESS eeee. 
0034                         * G           = CONTINUE EXECUTION FROM BREAKPOINT OR SWI 
0035                         * L           = LOAD TAPE 
0036                         * M hhhh      = EXAMINE AND CHANGE MEMORY LOCATION hhhh 
0037                         * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR. 
0038                         * Q ssss-eeee = TEST MEMORY FROM ssss TO eeee 
0039                         * R           = DISPLAY REGISTER CONTENTS 
0040                         * S           = DISPLAY STACK FROM ssss TO $DFC0 
0041                         * X           = REMOVE ALL BREAKPOINTS 
0042                         * 
0043                         * 
0044 55aa                    TSTPAT EQU $55AA  TEST PATTERN 
0045                         * 
0046                         * 
0047                         * 
0048 dfc0                           ORG $DFC0 
0049 dfc0                    STACK  RMB 2  TOP OF INTERNAL STACK / USER VECTOR 
0050 dfc2                    SWI3   RMB 2  SOFTWARE INTERRUPT VECTOR #3 
0051 dfc4                    SWI2   RMB 2  SOFTWARE INTERRUPT VECTOR #2 
0052 dfc6                    FIRQ   RMB 2  FAST INTERRUPT VECTOR 
0053 dfc8                    IRQ    RMB 2  INTERRUPT VECTOR 
0054 dfca                    SWI    RMB 2  SOFTWARE INTERRUPT VECTOR 
0055 dfcc                    SVCVO  RMB 2  SUPERVISOR CALL VECTOR ORGIN 
0056 dfce                    SVCVL  RMB 2  SUPERVISOR CALL VECTOR LIMIT 
0057 dfd0                    LRARAM RMB 16 LRA ADDRESSES 
0058 dfe0                    CPORT  RMB 2  RE-VECTORABLE CONTROL PORT 
0059 dfe2                    ECHO   RMB 1  ECHO FLAG 
0060 dfe3                    BPTBL  RMB 24 BREAKPOINT TABLE BASE ADDR 
0061 e004                    ACIAS  EQU $E004  CONTROL PORT 
0062 e018                    Comreg EQU $E018  COMMAND REGISTER 
0063 e014                    Drvreg EQU $E014  DRIVE REGISTER 
0064 e01a                    Secreg EQU $E01A  SECTOR REGISTER 
0065 e01b                    Datreg EQU $E01B  DATA REGISTER 
0066                         * 
0067 f000                    ADDREG EQU $F000  ADDRESS REGISTER 
0068 f002                    CNTREG EQU $F002  COUNT REGISTER 
0069 f010                    CCREG  EQU $F010  CHANNEL CONTROL REGISTER 
0070 f014                    PRIREG EQU $F014  DMA PRIORITY REGISTER 
0071 f015                    AAAREG EQU $F015  ??? 
0072 f016                    BBBREG EQU $F016  ??? 
0073 f020                    COMREG EQU $F020  1791 COMMAND REGISTER 
0074 f022                    SECREG EQU $F022  SECTOR REGISTER 
0075 f024                    DRVREG EQU $F024  DRIVE SELECT LATCH 
0076 f040                    CCCREG EQU $F040  ??? 
0077                         * 
0078 fff0                    IC11   EQU $FFF0  DAT RAM CHIP 
0079                         * 
0080 f800                     ORG $F800 
0081 f800 f8 14               FDB MONITOR 
0082 f802 f8 61               FDB NEXTCMD 
0083 f804 fd cf               FDB INCH 
0084 f806 fd c9               FDB INCHE 
0085 f808 fd df               FDB INCHEK 
0086 f80a fd ee               FDB OUTCH 
0087 f80c fd bd               FDB PDATA 
0088 f80e fd b1               FDB PCRLF 
0089 f810 fd ad               FDB PSTRNG 
0090 f812 fb 81               FDB LRA 
0091                         * 
0092                         * MONITOR 
0093                         * 
0094                         * VECTOR ADDRESS STRING IS..... 
0095                         * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF 
0096                         * 
0097 f814 8e fe 4f           MONITOR LDX #RAMVEC POINT TO VECTOR ADDR. STRING 
0098 f817 10 8e df c0         LDY  #STACK POINT TO RAM VECTOR LOCATION 
0099 f81b c6 10               LDB  #$10 BYTES TO MOVE = 16 
0100 f81d a6 80              LOOPA LDA  ,X+ GET VECTOR BYTE 
0101 f81f a7 a0               STA  ,Y+   PUT VECTORS IN RAM / $DFC0-$DFCF 
0102 f821 5a                  DECB SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE 
0103 f822 26 f9               BNE LOOPA CONTINUE UNTIL ALL VECTORS MOVED 
0104                         * 
0105                         * CONTENTS     FROM         TO      FUNCTION 
0106                         *  $F8A1       $FE40      $DFC0     USER-V 
0107                         *  $F8A1       $FE42      $DFC2     SWI3-V 
0108                         *  $F8A1       $FE44      $DFC4     SWI2-V 
0109                         *  $F8A1       $FE46      $DFC6     FIRQ-V 
0110                         *  $F8A1       $FE48      $DFC8     IRQ-V 
0111                         *  $FAB0       $FE4A      $DFCA     SWI-V 
0112                         *  $FFFF       $FE4C      $DFCC     SVC-VO 
0113                         *  $FFFF       $FE4E      $DFCE     SVC-VL 
0114                         * 
0115 f824 8e e0 04            LDX  #ACIAS  GET CONTROL PORT ADDR. 
0116 f827 bf df e0            STX  CPORT   STORE ADDR. IN RAM 
0117 f82a 17 02 7a            LBSR XBKPNT  CLEAR OUTSTANDING BREAKPOINTS 
0118 f82d c6 0c               LDB  #12     CLEAR 12 BYTES ON STACK 
0119 f82f 6f e2              CLRSTK CLR  ,-S 
0120 f831 5a                  DECB 
0121 f832 26 fb               BNE  CLRSTK 
0122 f834 30 8c dd            LEAX MONITOR,PCR  SET PC TO SBUG-E ENTRY 
0123 f837 af 6a               STX  10,S ON STACK 
0124 f839 86 d0               LDA  #$D0  PRESET CONDITION CODES ON STACK 
0125 f83b a7 e4               STA  ,S 
0126 f83d 1f 43               TFR  S,U 
0127 f83f 17 05 be            LBSR ACINIZ  INITIALIZE CONTROL PORT 
0128 f842 8e fe 5f            LDX  #MSG1  POINT TO 'SBUG 1.8' MESSAGE 
0129 f845 17 05 75            LBSR PDATA  PRINT MSG 
0130 f848 8e df d0            LDX  #LRARAM  POINT TO LRA RAM STORAGE AREA 
0131 f84b 4f                  CLRA START TOTAL AT ZERO 
0132 f84c c6 0d               LDB  #13  TOTAL UP ALL ACTIVE RAM MEMORY 
0133 f84e 6d 85              FNDREL TST  B,X TEST FOR RAM AT NEXT LOC. 
0134 f850 27 03               BEQ  RELPAS IF NO RAM GO TO NEXT LOC. 
0135 f852 8b 04               ADDA #4 ELSE ADD 4K TO TOTAL 
0136 f854 19                  DAA  ADJ. TOTAL FOR DECIMAL 
0137 f855 5a                 RELPAS DECB SUB. 1 FROM LOCS. TO TEST 
0138 f856 2a f6               BPL  FNDREL  PRINT TOTAL OF RAM 
0139 f858 17 05 26            LBSR OUT2H OUTPUT HEX BYTE AS ASCII 
0140 f85b 8e fe 74            LDX  #MSG2  POINT TO MSG 'K' CR/LF + 3 NULS 
0141 f85e 17 05 5c            LBSR PDATA  PRINT MSG 
0142                         * 
0143                         ***** NEXTCMD ***** 
0144                         * 
0145 f861 8e fe 7b           NEXTCMD LDX  #MSG3   POINT TO MSG ">" 
0146 f864 17 05 46            LBSR PSTRNG PRINT MSG 
0147 f867 17 05 65            LBSR INCH  GET ONE CHAR. FROM TERMINAL 
0148 f86a 84 7f               ANDA #$7F STRIP PARITY FROM CHAR. 
0149 f86c 81 0d               CMPA #$0D IS IT CARRIAGE RETURN ? 
0150 f86e 27 f1               BEQ  NEXTCMD IF CR THEN GET ANOTHER CHAR. 
0151 f870 1f 89               TFR  A,B PUT CHAR. IN "B" ACCUM. 
0152 f872 81 20               CMPA #$20 IS IT CONTROL OR DATA CHAR ? 
0153 f874 2c 09               BGE  PRTCMD IF CMD CHAR IS DATA, PRNT IT 
0154 f876 86 5e               LDA  #'^ ELSE CNTRL CHAR CMD SO... 
0155 f878 17 05 73            LBSR OUTCH PRINT "^" 
0156 f87b 1f 98               TFR  B,A RECALL CNTRL CMD CHAR 
0157 f87d 8b 40               ADDA #$40 CONVERT IT TO ASCII LETTER 
0158 f87f 17 05 6c           PRTCMD LBSR OUTCH PRNT CMD CHAR 
0159 f882 17 05 67            LBSR OUT1S PRNT SPACE 
0160 f885 c1 60               CMPB #$60 
0161 f887 2f 02               BLE NXTCH0 
0162 f889 c0 20               SUBB #$20 
0163                         * 
0164                         * 
0165                         ***** DO TABLE LOOKUP ***** 
0166                         *   FOR COMMAND FUNCTIONS 
0167                         * 
0168                         * 
0169 f88b 8e fe 13           NXTCH0 LDX #JMPTAB POINT TO JUMP TABLE 
0170 f88e e1 80              NXTCHR CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? 
0171 f890 27 0f               BEQ  JMPCMD BRANCH IF MATCH FOUND 
0172 f892 30 02               LEAX 2,X POINT TO NEXT ENTRY IN TABLE 
0173 f894 8c fe 4f            CMPX #TABEND REACHED END OF TABLE YET ? 
0174 f897 26 f5               BNE  NXTCHR IF NOT END, CHECK NEXT ENTRY 
0175 f899 8e fe 7d            LDX  #MSG4  POINT TO MSG "WHAT?" 
0176 f89c 17 05 1e            LBSR PDATA  PRINT MSG 
0177 f89f 20 c0               BRA  NEXTCMD IF NO MATCH, PRMPT FOR NEW CMD 
0178 f8a1 ad 94              JMPCMD JSR  [,X] JUMP TO COMMAND ROUTINE 
0179 f8a3 20 bc               BRA  NEXTCMD PROMPT FOR NEW COMMAND 
0180                         * 
0181                         * "G" GO OR CONTINUE 
0182                         * 
0183 f8a5 1f 34              GO TFR  U,S 
0184 f8a7 3b                 RTI RTI 
0185                         * 
0186                         * "R" DISPLAY REGISTERS 
0187                         * 
0188 f8a8 8e fe 83           REGSTR LDX  #MSG5 POINT TO MSG " - " 
0189 f8ab 17 04 ff            LBSR PSTRNG PRINT MSG 
0190 f8ae 17 04 11            LBSR PRTSP $FCBF 
0191 f8b1 17 04 19            LBSR PRTUS $FCCA 
0192 f8b4 17 04 21            LBSR PRTDP $FCD5 
0193 f8b7 17 04 29            LBSR PRTIX $FCE0 
0194 f8ba 17 04 31            LBSR PRTIY $FCEB 
0195 f8bd 8e fe 83            LDX  #MSG5 POINT TO MSG " - " 
0196 f8c0 17 04 ea            LBSR PSTRNG PRINT MSG 
0197 f8c3 17 04 33            LBSR PRTPC $FCF5 
0198 f8c6 17 04 3a            LBSR PRTA $FCFF 
0199 f8c9 17 04 41            LBSR PRTB $FD09 
0200 f8cc 16 04 48            LBRA PRTCC $FD13 
0201                         * 
0202                         * 
0203                         * ALTER "PC" PROGRAM COUNTER 
0204                         * 
0205                         * 
0206 f8cf 17 04 27           ALTRPC LBSR PRTPC $FCF5 PRINT MSG " PC = " 
0207 f8d2 17 05 17            LBSR OUT1S OUTPUT SPACE 
0208 f8d5 17 04 57            LBSR IN1ADR GET NEW CONTENTS FOR "PC" 
0209 f8d8 29 02               BVS  ALTPCD EXIT IF INVALID HEX 
0210 f8da af 4a               STX  10,U POKE IN NEW CONTENTS 
0211 f8dc 39                 ALTPCD RTS ;
0212                         * 
0213                         * 
0214                         * ALTER "U" USER STACK POINTER 
0215                         * 
0216                         * 
0217 f8dd 17 03 ed           ALTRU LBSR PRTUS $FCCA PRINT MSG " US = " 
0218 f8e0 17 05 09            LBSR OUT1S OUTPUT SPACE 
0219 f8e3 17 04 49            LBSR IN1ADR 
0220 f8e6 29 02               BVS  ALTUD 
0221 f8e8 af 48               STX  8,U 
0222 f8ea 39                 ALTUD RTS ;
0223                         * 
0224                         * 
0225                         * ALTER "Y" INDEX REGISTER 
0226                         * 
0227                         * 
0228 f8eb 17 04 00           ALTRY LBSR PRTIY PRINT MSG " IY = " 
0229 f8ee 17 04 fb            LBSR OUT1S OUTPUT SPACE 
0230 f8f1 17 04 3b            LBSR IN1ADR 
0231 f8f4 29 02               BVS  ALTYD 
0232 f8f6 af 46               STX  6,U   $F8F0 
0233 f8f8 39                 ALTYD RTS ;
0234                         * 
0235                         * 
0236                         * ALTER "X" INDEX REGISTER 
0237                         * 
0238                         * 
0239 f8f9 17 03 e7           ALTRX LBSR PRTIX $FCE0 PRINT MSG " IX = " 
0240 f8fc 17 04 ed            LBSR OUT1S OUTPUT SPACE 
0241 f8ff 17 04 2d            LBSR IN1ADR 
0242 f902 29 02               BVS  ALTXD 
0243 f904 af 44               STX  4,U 
0244 f906 39                 ALTXD RTS ;
0245                         * 
0246                         * 
0247                         * ALTER "DP" DIRECT PAGE REGISTER 
0248                         * 
0249                         * 
0250 f907 17 03 ce           ALTRDP LBSR PRTDP $FCD5 PRINT MSG " DP = " 
0251 f90a 17 04 df            LBSR OUT1S OUTPUT SPACE 
0252 f90d 17 04 30            LBSR BYTE INPUT BYTE (2 HEX CHAR) 
0253 f910 29 02               BVS  ALTDPD 
0254 f912 a7 43               STA  3,U 
0255 f914 39                 ALTDPD RTS ;
0256                         * 
0257                         * 
0258                         * ALTER "B" ACCUMULATOR 
0259                         * 
0260                         * 
0261 f915 17 03 f5           ALTRB LBSR PRTB $FD09 PRINT MSG " B = " 
0262 f918 17 04 d1            LBSR OUT1S OUTPUT SPACE 
0263 f91b 17 04 22            LBSR BYTE INPUT BYTE (2 HEX CHAR) 
0264 f91e 29 02               BVS  ALTBD 
0265 f920 a7 42               STA  2,U 
0266 f922 39                 ALTBD RTS       $F91C 
0267                         * 
0268                         * 
0269                         * ALTER "A" ACCUMULATOR 
0270                         * 
0271                         * 
0272 f923 17 03 dd           ALTRA LBSR PRTA $FCFF RINT MSG " A = " 
0273 f926 17 04 c3            LBSR OUT1S OUTPUT SPACE 
0274 f929 17 04 14            LBSR BYTE INPUT BYTE (2 HEX CHAR) 
0275 f92c 29 02               BVS  ALTAD 
0276 f92e a7 41               STA  1,U 
0277 f930 39                 ALTAD RTS ;
0278                         * 
0279                         * 
0280                         * ALTER "CC" REGISTER 
0281                         * 
0282                         * 
0283 f931 17 03 e3           ALTRCC LBSR PRTCC $FD13 PRINT MSG " CC: " 
0284 f934 17 04 b5            LBSR OUT1S OUTPUT SPACE 
0285 f937 17 04 06            LBSR BYTE INPUT BYTE (2 HEX CHAR) 
0286 f93a 29 04               BVS  ALTCCD 
0287 f93c 8a 80               ORA  #$80 SETS "E" FLAG IN PRINT LIST 
0288 f93e a7 c4               STA  ,U 
0289 f940 39                 ALTCCD RTS ;
0290                         * 
0291                         ***** "M" MEMORY EXAMINE AND CHANGE ***** 
0292                         * 
0293 f941 17 03 eb           MEMCHG LBSR IN1ADR  INPUT ADDRESS 
0294 f944 29 2d               BVS  CHRTN  IF NOT HEX, RETURN 
0295 f946 1f 12               TFR  X,Y SAVE ADDR IN "Y" 
0296 f948 8e fe 83           MEMC2 LDX  #MSG5 POINT TO MSG " - " 
0297 f94b 17 04 5f            LBSR PSTRNG PRINT MSG 
0298 f94e 1f 21               TFR  Y,X FETCH ADDRESS 
0299 f950 17 04 26            LBSR OUT4H PRINT ADDR IN HEX 
0300 f953 17 04 96            LBSR OUT1S OUTPUT SPACE 
0301 f956 a6 a4               LDA  ,Y GET CONTENTS OF CURRENT ADDR. 
0302 f958 17 04 26            LBSR OUT2H OUTPUT CONTENTS IN ASCII 
0303 f95b 17 04 8e            LBSR OUT1S OUTPUT SPACE 
0304 f95e 17 03 df            LBSR BYTE LOOP WAITING FOR OPERATOR INPUT 
0305 f961 28 11               BVC  CHANGE IF VALID HEX GO CHANGE MEM. LOC. 
0306 f963 81 08               CMPA #8  IS IT A BACKSPACE (CNTRL H)? 
0307 f965 27 e1               BEQ  MEMC2 PROMPT OPERATOR AGAIN 
0308 f967 81 18               CMPA #$18  IS IT A CANCEL (CNTRL X)? 
0309 f969 27 dd               BEQ  MEMC2 PROMPT OPERATOR AGAIN 
0310 f96b 81 5e               CMPA #'^  IS IT AN UP ARROW? 
0311 f96d 27 17               BEQ  BACK  DISPLAY PREVIOUS BYTE 
0312 f96f 81 0d               CMPA #$D  IS IT A CR? 
0313 f971 26 0f               BNE  FORWRD  DISPLAY NEXT BYTE 
0314 f973 39                 CHRTN RTS  EXIT ROUTINE 
0315                         * 
0316                         * 
0317 f974 a7 a4              CHANGE STA ,Y  CHANGE BYTE IN MEMORY 
0318 f976 a1 a4               CMPA ,Y  DID MEMORY BYTE CHANGE? 
0319 f978 27 08               BEQ  FORWRD    $F972 
0320 f97a 17 04 6f            LBSR OUT1S OUTPUT SPACE 
0321 f97d 86 3f               LDA  #'?  LOAD QUESTION MARK 
0322 f97f 17 04 6c            LBSR OUTCH  PRINT IT 
0323 f982 31 21              FORWRD LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION 
0324 f984 20 c2               BRA  MEMC2 PRINT LOCATION & CONTENTS 
0325 f986 31 3f              BACK LEAY -1,Y POINT TO LAST MEM LOCATION 
0326 f988 20 be               BRA  MEMC2 PRINT LOCATION & CONTENTS 
0327                         * 
0328                         * "S" DISPLAY STACK 
0329                         * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM 
0330                         ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT. 
0331                         * 
0332 f98a 17 03 35           DISSTK LBSR PRTSP PRINT CURRENT STACK POINTER 
0333 f98d 1f 32               TFR  U,Y 
0334 f98f 8e df c0            LDX  #STACK LOAD INTERNAL STACK AS UPPER LIMIT 
0335 f992 30 1f               LEAX -1,X POINT TO CURRENT STACK 
0336 f994 20 05               BRA  MDUMP1 ENTER MEMORY DUMP OF STACK CONTENTS 
0337                         * 
0338                         * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII 
0339                         * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG. 
0340                         *                        UPPER ADDRESS IN X-REG. 
0341                         * IF HEX ADDRESSES ARE INVALID (V)=1. 
0342                         * 
0343 f996 17 03 8b           MEMDUMP LBSR IN2ADR INPUT ADDRESS BOUNDRIES 
0344 f999 29 06               BVS  EDPRTN NEW COMMAND IF ILLEGAL HEX 
0345 f99b 34 20              MDUMP1 PSHS Y COMPARE LOWER TO UPPER BOUNDS 
0346 f99d ac e1               CMPX ,S++ LOWER BOUNDS > UPPER BOUNDS? 
0347 f99f 24 01               BCC  AJDUMP IF NOT, DUMP HEX AND ASCII 
0348 f9a1 39                 EDPRTN RTS ;
0349                         * 
0350                         * ADJUST LOWER AND UPPER ADDRESS LIMITS 
0351                         * TO EVEN 16 BYTE BOUNDRIES. 
0352                         * 
0353                         * IF LOWER ADDR = $4532 
0354                         * LOWER BOUNDS WILL BE ADJUSTED TO = $4530. 
0355                         * 
0356                         * IF UPPER ADDR = $4567 
0357                         * UPPER BOUNDS WILL BE ADJUSTED TO = $4570. 
0358                         * 
0359                         * ENTER WITH LOWER ADDRESS IN X-REG. 
0360                         *           -UPPER ADDRESS ON TOP OF STACK. 
0361                         * 
0362 f9a2 1f 10              AJDUMP TFR  X,D GET UPPER ADDR IN D-REG 
0363 f9a4 c3 00 10            ADDD #$10 ADD 16 TO UPPER ADDRESS 
0364 f9a7 c4 f0               ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY 
0365 f9a9 34 06               PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT 
0366 f9ab 1f 20               TFR  Y,D   $F9A5 GET LOWER ADDRESS IN D-REG 
0367 f9ad c4 f0               ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY 
0368 f9af 1f 01               TFR  D,X PUT IN X-REG AS LOWER DUMP LIMIT 
0369 f9b1 ac e4              NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT 
0370 f9b3 27 05               BEQ  SKPDMP IF EQUAL SKIP HEX-ASCII DUMP 
0371 f9b5 17 04 27            LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD 
0372 f9b8 27 03               BEQ  EDUMP IF NONE, CONTINUE WITH DUMP 
0373 f9ba 32 62              SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING 
0374 f9bc 39                  RTS ;
0375                         * 
0376                         * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS 
0377                         * FOR EACH LINE THROUGHOUT ADDRESS LIMITS. 
0378                         * 
0379 f9bd 34 10              EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK 
0380 f9bf 8e fe 83            LDX  #MSG5 POINT TO MSG " - " 
0381 f9c2 17 03 e8            LBSR PSTRNG PRINT MSG 
0382 f9c5 ae e4               LDX  ,S LOAD LOWER ADDR FROM TOP OF STACK 
0383 f9c7 17 03 af            LBSR OUT4H PRINT THE ADDRESS LBSR OUT2S PRINT 2 SPACES 
0384 f9ca c6 10               LDB  #$10 LOAD COUNT OF 16 BYTES TO DUMP 
0385 f9cc a6 80              ELOOP LDA  ,X+ GET FROM MEMORY HEX BYTE TO PRINT 
0386 f9ce 17 03 b0            LBSR OUT2H OUTPUT HEX BYTE AS ASCII 
0387 f9d1 17 04 18            LBSR OUT1S OUTPUT SPACE 
0388 f9d4 5a                  DECB      $F9D1 DECREMENT BYTE COUNT 
0389 f9d5 26 f5               BNE  ELOOP CONTINUE TIL 16 HEX BYTES PRINTED 
0390                         * 
0391                         * PRINT 16 ASCII CHARACTERS 
0392                         * IF NOT PRINTABLE OR NOT VALID 
0393                         * ASCII PRINT A PERIOD (.) 
0394 f9d7 17 04 10            LBSR OUT2S 2 SPACES 
0395 f9da ae e1               LDX  ,S++ GET LOW LIMIT FRM STACK - ADJ STACK 
0396 f9dc c6 10               LDB  #$10 SET ASCII CHAR TO PRINT = 16 
0397 f9de a6 80              EDPASC LDA  ,X+ GET CHARACTER FROM MEMORY 
0398 f9e0 81 20               CMPA #$20 IF LESS THAN $20, NON-PRINTABLE? 
0399 f9e2 25 04               BCS  PERIOD IF SO, PRINT PERIOD INSTEAD 
0400 f9e4 81 7e               CMPA #$7E IS IT VALID ASCII? 
0401 f9e6 23 02               BLS  PRASC IF SO PRINT IT 
0402 f9e8 86 2e              PERIOD LDA  #'. LOAD A PERIOD (.) 
0403 f9ea 17 04 01           PRASC LBSR OUTCH PRINT ASCII CHARACTER 
0404 f9ed 5a                  DECB DECREMENT COUNT 
0405 f9ee 26 ee               BNE  EDPASC 
0406 f9f0 20 bf               BRA  NXTLIN 
0407                         * 
0408                         ***** "Q" MEMORY TEST ***** 
0409                         * 
0410 f9f2 6f e2              MEMTST CLR  ,-S CLEAR BYTE ON STACK 
0411 f9f4 6f e2               CLR  ,-S CLEAR ANOTHER BYTE 
0412 f9f6 17 03 2b            LBSR IN2ADR GET BEGIN(Y) & END(X) ADDR. LIMITS 
0413 f9f9 34 30               PSHS X,Y SAVE ADDRESSES ON STACK 
0414 f9fb 29 7b               BVS  ADJSK6 EXIT IF NOT VALID HEX 
0415 f9fd ac 62               CMPX 2,S COMPARE BEGIN TO END ADDR. 
0416 f9ff 25 77               BCS  ADJSK6 EXIT IF BEGIN > END ADDR. 
0417 fa01 17 03 e8            LBSR OUT1S OUTPUT SPACE 
0418 fa04 1f 20              MEMSET TFR  Y,D PUT BEGIN ADDR. IN 'D'-ACCUM. 
0419 fa06 e3 64               ADDD 4,S ADD PASS COUNT TO BEGIN ADDR 
0420 fa08 34 04               PSHS B ADD LS BYTE TO MS BYTE OF BEGIN ADDR 
0421 fa0a ab e0               ADDA ,S+ 
0422 fa0c a7 a0               STA  ,Y+ SAVE THIS DATA BYTE AT BEGIN ADDR 
0423 fa0e 10 ac e4            CMPY ,S COMPARE END TO BEGIN ADDR 
0424 fa11 25 f1               BCS  MEMSET IF BEGIN LOWER, CONTINUE TO SET MEMORY 
0425 fa13 10 ae 62            LDY  2,S RELOAD BEGIN ADDRESS 
0426 fa16 1f 20              TEST1 TFR  Y,D PUT BEGIN ADDR IN 'D'-ACC. 
0427 fa18 e3 64               ADDD 4,S ADD PASS COUNT TO ADDRESS 
0428 fa1a 34 02               PSHS A ADD MS BYTE TO LS BYTE OF ADDRESS 
0429 fa1c eb e0               ADDB ,S+ 
0430 fa1e e8 a0               EORB ,Y+ EX-OR THIS DATA WITH DATA IN MEMORY LOC. 
0431 fa20 27 3c               BEQ  GUDPAS IF (Z) SET, MEMORY BYTE OK 
0432 fa22 8e fe 83            LDX  #MSG5 POINT TO MSG " - " 
0433 fa25 17 03 85            LBSR PSTRNG PRINT MSG 
0434 fa28 30 3f               LEAX -1,Y GET ERROR ADDRESS IN X-REG 
0435 fa2a 17 03 4c            LBSR OUT4H OUTPUT IT 
0436 fa2d 34 10               PSHS X PUSH ERROR ADDR ON STACK 
0437 fa2f 8e fe a1            LDX  #MSG8  POINT TO MSG " =>" 
0438 fa32 17 03 88            LBSR PDATA  PRINT MSG 
0439 fa35 35 10               PULS X POP ERROR ADDR FROM STACK 
0440 fa37 17 01 47            LBSR LRA GET PHYSICAL ADDR FROM LRA 
0441 fa3a 17 03 50            LBSR XASCII OUTPUT EXTENDED 4 BITS OF PHYSICAL ADDR 
0442 fa3d 17 03 39            LBSR OUT4H OUTPUT LS 16 BITS OF PHYSICAL ADDR 
0443 fa40 8e fe 87            LDX  #MSG6  POINT TO MSG ", PASS " 
0444 fa43 17 03 77            LBSR PDATA  PRINT MSG 
0445 fa46 ae 64               LDX  4,S LOAD PASS COUNT 
0446 fa48 17 03 2e            LBSR OUT4H OUTPUT IT 
0447 fa4b 8e fe 8f            LDX  #MSG7 POINT TO MSG ", BITS IN ERROR 
0448 fa4e 17 03 6c            LBSR PDATA  PRINT MSG 
0449 fa51 1f 98               TFR  B,A GET ERROR BYTE INTO A-ACC 
0450 fa53 8e fe a6            LDX  #MSG9 POINT TO MSG "76543210" 
0451 fa56 17 03 3e            LBSR BIASCI OUTPUT IN BINARY/ASCII FORMAT 
0452 fa59 17 03 83            LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD $FA56 
0453 fa5c 26 1a               BNE  ADJSK6 IF SO, EXIT MEMORY TEST 
0454 fa5e 10 ac e4           GUDPAS CMPY ,S COMPARE END ADDR TO BEGIN ADDR 
0455 fa61 25 b3               BCS  TEST1 
0456 fa63 86 2b               LDA  #'+ GET "PASS" SYMBOL IF MEMORY PASS OK 
0457 fa65 17 03 86            LBSR OUTCH OUTPUT SYMBOL TO TERMINAL 
0458 fa68 17 03 74            LBSR INCHEK INPUT FROM KEYBOARD? 
0459 fa6b 26 0b               BNE  ADJSK6 IF SO, EXIT MEMORY TEST 
0460 fa6d 10 ae 62            LDY  2,S LOAD BEGIN ADDRESS 
0461 fa70 6c 65               INC  5,S INCREMENT LS BYTE OF PASS COUNT 
0462 fa72 26 90               BNE  MEMSET IF NOT ZERO, SET NEXT MEMORY BYTE 
0463 fa74 6c 64               INC  4,S INCREMENT MS BYTE OF PASS COUNT 
0464 fa76 26 8c               BNE  MEMSET DONE WITH 65,535 PASSES OF MEMORY? 
0465 fa78 32 66              ADJSK6 LEAS 6,S ADJ STACK POINTER BY 6 
0466 fa7a 39                  RTS 
0467                         * 
0468                         ***** "B" SET BREAKPOINT ***** 
0469                         * 
0470 fa7b 17 02 b1           BRKPNT LBSR IN1ADR GET BREAKPOINT ADDRESS 
0471 fa7e 29 1e               BVS  EXITBP EXIT IF INVALID HEX ADDR. 
0472 fa80 8c df c0            CMPX #STACK ADDRESS ILLEGAL IF >=$DFC0 
0473 fa83 24 1a               BCC  BPERR IF ERROR PRINT (?), EXIT 
0474 fa85 34 10               PSHS X $FA82 PUSH BP ADDRESS ON STACK 
0475 fa87 8e ff ff            LDX  #$FFFF LOAD DUMMY ADDR TO TEST BP TABLE 
0476 fa8a 8d 55               BSR BPTEST TEST BP TABLE FOR FREE SPACE 
0477 fa8c 35 10               PULS X POP BP ADDRESS FROM STACK 
0478 fa8e 27 0f               BEQ  BPERR (Z) SET, OUT OF BP TABLE SPACE 
0479 fa90 a6 84               LDA  ,X GET DATA AT BREAKPOINT ADDRESS 
0480 fa92 81 3f               CMPA #$3F IS IT A SWI? 
0481 fa94 27 09               BEQ  BPERR IF SWI ALREADY, INDICATE ERROR 
0482 fa96 a7 a0               STA  ,Y+ SAVE DATA BYTE IN BP TABLE 
0483 fa98 af a4               STX  ,Y SAVE BP ADDRESS IN BP TABLE 
0484 fa9a 86 3f               LDA  #$3F LOAD A SWI ($3F) 
0485 fa9c a7 84               STA  ,X SAVE SWI AT BREAKPOINT ADDRESS 
0486 fa9e 39                 EXITBP RTS ;
0487                         * 
0488                         *  INDICATE ERROR SETTING BREAKPOINT 
0489                         * 
0490 fa9f 17 03 4a           BPERR LBSR OUT1S OUTPUT SPACE 
0491 faa2 86 3f               LDA  #'? LOAD (?), INDICATE BREAKPOINT ERROR 
0492 faa4 16 03 47            LBRA OUTCH PRINT "?" 
0493                         * 
0494                         *** "X" CLEAR OUTSTANDING BREAKPOINTS *** 
0495                         * 
0496 faa7 10 8e df e3        XBKPNT LDY  #BPTBL POINT TO BREAKPOINT TABLE 
0497 faab c6 08               LDB  #8 LOAD BREAKPOINT COUNTER 
0498 faad 8d 18              XBPLP BSR RPLSWI REMOVE USED ENTRY IN BP TABLE 
0499 faaf 5a                  DECB  $FAAC DECREMENT BP COUNTER 
0500 fab0 26 fb               BNE XBPLP END OF BREAKPOINT TABLE? 
0501 fab2 39                  RTS 
0502                         * 
0503                         ***** SWI ENTRY POINT ***** 
0504                         * 
0505 fab3 1f 43              SWIE TFR  S,U TRANSFER STACK TO USER POINTER 
0506 fab5 ae 4a               LDX  10,U LOAD PC FROM STACK INTO X-REG 
0507 fab7 30 1f               LEAX -1,X ADJUST ADDR DOWN 1 BYTE. 
0508 fab9 8d 26               BSR BPTEST FIND BREAKPOINT IN BP TABLE 
0509 fabb 27 04               BEQ  REGPR IF FOUND, REPLACE DATA AT BP ADDR 
0510 fabd af 4a               STX  10,U SAVE BREAKPOINT ADDR IN STACK 
0511 fabf 8d 06               BSR RPLSWI GO REPLACE SWI WITH ORIGINAL DATA 
0512 fac1 17 fd e4           REGPR LBSR REGSTR GO PRINT REGISTERS 
0513 fac4 16 fd 9a            LBRA NEXTCMD GET NEXT COMMAND 
0514 fac7 ae 21              RPLSWI LDX  1,Y LOAD BP ADDRESS FROM BP TABLE 
0515 fac9 8c df c0            CMPX #STACK COMPARE TO TOP AVAILABLE USER MEMORY 
0516 facc 24 0a               BCC  FFSTBL GO RESET TABLE ENTRY TO $FF'S 
0517 face a6 84               LDA  ,X GET DATA FROM BP ADDRESS 
0518 fad0 81 3f               CMPA #$3F IS IT SWI? 
0519 fad2 26 04               BNE  FFSTBL IF NOT, RESET TABLE ENTRY TO $FF'S 
0520 fad4 a6 a4               LDA  ,Y GET ORIGINAL DATA FROM BP TABLE 
0521 fad6 a7 84               STA  ,X      $FAD3 RESTORE DATA AT BP ADDRESS 
0522 fad8 86 ff              FFSTBL LDA  #$FF LOAD $FF IN A-ACC 
0523 fada a7 a0               STA  ,Y+ RESET BREAKPOINT TABLE DATA TO $FF'S 
0524 fadc a7 a0               STA  ,Y+ RESET BREAKPOINT TABLE ADDR TO $FF'S 
0525 fade a7 a0               STA  ,Y+ 
0526 fae0 39                  RTS 
0527                         * 
0528                         ** SEARCH BREAKPOINT TABLE FOR MATCH ** 
0529                         * 
0530 fae1 10 8e df e3        BPTEST LDY  #BPTBL POINT TO BREAKPOINT TABLE 
0531 fae5 c6 08               LDB  #8 LOAD BREAKPOINT COUNTER 
0532 fae7 a6 a0              FNDBP LDA  ,Y+ LOAD DATA BYTE 
0533 fae9 ac a1               CMPX ,Y++ COMPARE ADDRESS, IS IT SAME? 
0534 faeb 27 04               BEQ  BPADJ IF SO, ADJUST POINTER FOR TABLE ENTRY 
0535 faed 5a                  DECB IF NOT, DECREMENT BREAKPOINT COUNTER 
0536 faee 26 f7               BNE  FNDBP AND LOOK FOR NEXT POSSIBLE MATCH 
0537 faf0 39                  RTS ;
0538                         * 
0539                         * 
0540 faf1 31 3d              BPADJ LEAY -3,Y MOVE POINTER TO BEGIN OF BP ENTRY 
0541 faf3 39                  RTS 
0542                         * 
0543                         *** "D" DISK BOOT FOR DMAF2 *** 
0544                         * 
0545 faf4 86 de              DBOOT LDA  #$DE 
0546 faf6 b7 f0 24            STA  DRVREG 
0547 faf9 86 ff               LDA  #$FF 
0548 fafb b7 f0 14            STA  PRIREG     $FAF8 
0549 fafe b7 f0 10            STA  CCREG 
0550 fb01 b7 f0 15            STA  AAAREG 
0551 fb04 b7 f0 16            STA  BBBREG 
0552 fb07 7d f0 10            TST  CCREG 
0553 fb0a 86 d8               LDA  #$D8 
0554 fb0c b7 f0 20            STA  COMREG 
0555 fb0f 17 00 97            LBSR DLY 
0556 fb12 b6 f0 20           DBOOT0 LDA  COMREG 
0557 fb15 2b fb               BMI  DBOOT0 
0558 fb17 86 09               LDA  #$09 
0559 fb19 b7 f0 20            STA  COMREG 
0560 fb1c 17 00 8a            LBSR DLY 
0561                         * 
0562 fb1f b6 f0 20           DISKWT LDA  COMREG FETCH DRIVE STATUS 
0563 fb22 85 01               BITA #1 TEST BUSY BIT 
0564 fb24 26 f9               BNE  DISKWT LOOP UNTIL NOT BUSY 
0565                         * 
0566 fb26 85 10               BITA #$10 
0567 fb28 26 ca               BNE  DBOOT 
0568                         * 
0569 fb2a 8e c0 00            LDX  #$C000 LOGICAL ADDR. = $C000 
0570 fb2d 8d 52               BSR LRA  GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR. 
0571 fb2f 8a 10               ORA  #$10 
0572 fb31 b7 f0 40            STA  CCCREG 
0573 fb34 1f 10               TFR  X,D 
0574 fb36 43                  COMA  ; 
0575 fb37 53                  COMB  ; 
0576 fb38 fd f0 00            STD  ADDREG 
0577 fb3b 8e fe ff            LDX  #$FEFF LOAD DMA BYTE COUNT = $100 
0578 fb3e bf f0 02            STX  CNTREG STORE IN COUNT REGISTER 
0579 fb41 86 ff               LDA  #$FF LOAD THE CHANNEL REGISTER 
0580 fb43 b7 f0 10            STA  CCREG 
0581 fb46 86 fe               LDA  #$FE SET CHANNEL 0 
0582 fb48 b7 f0 14            STA  PRIREG 
0583 fb4b 86 01               LDA  #1 SET SECTOR TO "1" 
0584 fb4d b7 f0 22            STA  SECREG ISSUE COMMAND 
0585 fb50 86 8c               LDA  #$8C SET SINGLE SECTOR READ 
0586 fb52 b7 f0 20            STA  COMREG ISSUE COMMAND 
0587 fb55 8d 52               BSR DLY 
0588                         * 
0589                         * THE FOLLOWING CODE TESTS THE STATUS OF THE 
0590                         * CHANNEL CONTROL REGISTER. IF "D7" IS NOT 
0591                         * ZERO THEN IT WILL LOOP WAITING FOR "D7" 
0592                         * TO GO TO ZERO. IF AFTER 65,536 TRIES IT 
0593                         * IS STILL A ONE THE BOOT OPERATION WILL 
0594                         * BE STARTED OVER FROM THE BEGINING. 
0595                         * 
0596 fb57 5f                  CLRB  ; 
0597 fb58 34 04              DBOOT1 PSHS B     $FB55 
0598 fb5a 5f                  CLRB  ; 
0599 fb5b 7d f0 10           DBOOT2 TST  CCREG 
0600 fb5e 2a 0a               BPL  DBOOT3 
0601 fb60 5a                  DECB  ; 
0602 fb61 26 f8               BNE  DBOOT2 
0603 fb63 35 04               PULS B 
0604 fb65 5a                  DECB 
0605 fb66 26 f0               BNE  DBOOT1 
0606 fb68 20 8a               BRA  DBOOT 
0607 fb6a 35 04              DBOOT3 PULS B 
0608 fb6c b6 f0 20            LDA  COMREG 
0609 fb6f 85 1c               BITA #$1C 
0610 fb71 27 01               BEQ  DBOOT4 
0611 fb73 39                  RTS  ; 
0612                         * 
0613                         * 
0614 fb74 c6 de              DBOOT4 LDB  #$DE 
0615 fb76 f7 f0 24            STB  DRVREG 
0616 fb79 8e c0 00            LDX  #$C000 
0617 fb7c af 4a               STX  10,U 
0618 fb7e 1f 34               TFR  U,S    $FB7B 
0619 fb80 3b                  RTI  ; 
0620                         * 
0621                         ***** LRA LOAD REAL ADDRESS ***** 
0622                         * 
0623                         * THE FOLLOWING CODE LOADS THE 20-BIT 
0624                         * PHYSICAL ADDRESS OF A MEMORY BYTE 
0625                         * INTO THE "A" AND "X" REGISTERS. THIS 
0626                         * ROUTINE IS ENTERED WITH THE LOGICAL 
0627                         * ADDRESS OF A MEMORY BYTE IN THE "IX" 
0628                         * REGISTER. EXIT IS MADE WITH THE HIGH- 
0629                         * ORDER FOUR BITS OF THE 20-BIT PHYSICAL 
0630                         * ADDRESS IN THE "A" REGISTER, AND THE 
0631                         * LOW-ORDER 16-BITS OF THE 20-BIT 
0632                         * PHYSICAL ADDRESS IN THE "IX" REGISTER. 
0633                         * ALL OTHER REGISTERS ARE PRESERVED. 
0634                         * THIS ROUTINE IS REQUIRED SINCE THE 
0635                         * DMAF1 AND DMAF2 DISK CONTROLLERS MUST 
0636                         * PRESENT PHYSICAL ADDRESSES ON THE 
0637                         * SYSTEM BUS. 
0638                         * 
0639 fb81 34 36              LRA PSHS A,B,X,Y PUSH REGISTERS ON STACK 
0640 fb83 a6 62               LDA  2,S GET MSB LOGICAL ADDR FRM X REG ON STACK 
0641 fb85 44                  LSRA  ; 
0642 fb86 44                  LSRA  ADJ FOR INDEXED INTO 
0643 fb87 44                  LSRA  CORRESPONDING LOCATION 
0644 fb88 44                  LSRA  IN LRA TABLE 
0645 fb89 10 8e df d0         LDY  #LRARAM LOAD LRA TABLE BASE ADDRESS 
0646 fb8d e6 a6               LDB  A,Y GET PHYSICAL ADDR. DATA FROM LRA TABLE 
0647 fb8f 54                  LSRB  ADJ. REAL ADDR. TO REFLECT EXTENDED 
0648 fb90 54                  LSRB  PHYSICAL ADDRESS. 
0649 fb91 54                  LSRB  EXTENDED MS 4-BITS ARE RETURNED 
0650 fb92 54                  LSRB  IN THE "A" ACCUMULATOR 
0651 fb93 e7 e4               STB  ,S MS 4 BITS IN A ACCUM. STORED ON STACK 
0652 fb95 e6 a6               LDB  A,Y LOAD REAL ADDRESS DATA FROM LRA TABLE 
0653 fb97 53                  COMB  COMP TO ADJ FOR PHYSICAL ADDR. IN X REG 
0654 fb98 58                  ASLB ADJ DATA FOR RELOCATION IN X REG 
0655 fb99 58                  ASLB  ; 
0656 fb9a 58                  ASLB       $FB97 
0657 fb9b 58                  ASLB  ; 
0658 fb9c a6 62               LDA  2,S GET MS BYTE OF LOGICAL ADDR. 
0659 fb9e 84 0f               ANDA #$0F MASK MS NIBBLE OF LOGICAL ADDRESS 
0660 fba0 a7 62               STA  2,S SAVE IT IN X REG ON STACK 
0661 fba2 ea 62               ORB  2,S SET MS BYTE IN X REG TO ADJ PHY ADDR. 
0662                         * 
0663                         * PLUS LS NIBBLE OF LOGICAL ADDRESS 
0664 fba4 e7 62               STB  2,S SAVE AS LS 16 BITS OF PHY ADDR IN X REG 
0665                         * ON STACK 
0666 fba6 35 36               PULS A,B,X,Y POP REGS. FROM STACK 
0667 fba8 39                  RTS  ;
0668                         * 
0669                         * DELAY LOOP 
0670                         * 
0671 fba9 34 04              DLY PSHS B SAVE CONTENTS OF "B" 
0672 fbab c6 20               LDB  #$20 GET LOOP DELAY VALUE 
0673 fbad 5a                 SUB1 DECB  SUBTRACT ONE FROM VALUE 
0674 fbae 26 fd               BNE  SUB1 LOOP UNTIL ZERO 
0675 fbb0 35 04               PULS B RESTORE CONTENTS OF "B" 
0676 fbb2 39                  RTS  ;
0677                         * 
0678                         ***** "U" MINIDISK BOOT ***** 
0679                         * 
0680 fbb3 7d e0 18           MINBOOT TST  Comreg 
0681 fbb6 7f e0 14            CLR  Drvreg  SELECT DRIVE 0 
0682                         * 
0683                         * DELAY BEFORE ISSUING RESTORE COMMAND 
0684 fbb9 c6 03               LDB  #3 
0685 fbbb 8e 00 00            LDX  #0 
0686 fbbe 30 01              LOOP LEAX 1,X      $FBBB 
0687 fbc0 8c 00 00            CMPX #0 
0688 fbc3 26 f9               BNE  LOOP 
0689 fbc5 5a                  DECB                $FBC2 
0690 fbc6 26 f6               BNE  LOOP 
0691                         * 
0692 fbc8 86 0f               LDA  #$0F *LOAD HEAD, VERIFY, 20msec/step 
0693 fbca b7 e0 18            STA  Comreg  ISSUE RESTORE COMMAND 
0694 fbcd 8d 37               BSR DELAY 
0695 fbcf f6 e0 18           LOOP1 LDB  Comreg      $FBCC 
0696 fbd2 c5 01               BITB #1 
0697 fbd4 26 f9               BNE  LOOP1  LOOP UNTIL THRU 
0698 fbd6 86 01               LDA  #1 
0699 fbd8 b7 e0 1a            STA  Secreg SET SECTOR REGISTER TO ONE 
0700 fbdb 8d 29               BSR DELAY 
0701 fbdd 86 8c               LDA  #$8C  LOAD HEAD, DELAY 10msec, 
0702 fbdf b7 e0 18            STA  Comreg  AND READ SINGLE RECORD 
0703 fbe2 8d 22               BSR DELAY 
0704 fbe4 8e c0 00            LDX  #$C000 
0705 fbe7 20 09               BRA  LOOP3 
0706                         * 
0707 fbe9 c5 02              LOOP2 BITB #2      $FBE6 DRQ? 
0708 fbeb 27 05               BEQ  LOOP3 
0709 fbed b6 e0 1b            LDA  Datreg 
0710 fbf0 a7 80               STA  ,X+ 
0711                         * 
0712 fbf2 f6 e0 18           LOOP3 LDB  Comreg FETCH STATUS 
0713 fbf5 c5 01               BITB #1  BUSY? 
0714 fbf7 26 f0               BNE  LOOP2 
0715 fbf9 c5 2c               BITB #$2C CRC ERROR OR LOST DATA? 
0716 fbfb 27 01               BEQ  LOOP4 
0717 fbfd 39                  RTS  ;
0718 fbfe 8e c0 00           LOOP4 LDX  #$C000        $FBFB 
0719 fc01 af 4a               STX  10,U 
0720 fc03 1f 34               TFR  U,S 
0721 fc05 3b                  RTI  ;
0722                         * 
0723                         * DELAY 
0724                         * 
0725 fc06 c6 20              DELAY LDB  #$20 
0726 fc08 5a                 LOOP5 DECB  ;
0727 fc09 26 fd               BNE  LOOP5 
0728 fc0b 39                  RTS  ;
0729                         * 
0730                         ***** "L" LOAD MIKBUG TAPE ***** 
0731                         * 
0732 fc0c 86 11              LOAD LDA  #$11  LOAD 'DC1' CASS. READ ON CODE 
0733 fc0e 17 01 dd            LBSR OUTCH  OUTPUT IT TO TERMINAL PORT 
0734 fc11 7f df e2            CLR  ECHO  TURN OFF ECHO FLAG 
0735 fc14 17 01 ad           LOAD1 LBSR ECHON INPUT 8 BIT BYTE WITH NO ECHO 
0736 fc17 81 53              LOAD2 CMPA #'S IS IT AN "S", START CHARACTER ? 
0737 fc19 26 f9               BNE  LOAD1 IF NOT, DISCARD AND GET NEXT CHAR. 
0738 fc1b 17 01 a6            LBSR ECHON 
0739 fc1e 81 39               CMPA #'9 IS IT A "9" , END OF FILE CHAR ? 
0740 fc20 27 3d               BEQ  LOAD21 IF SO, EXIT LOAD 
0741 fc22 81 31               CMPA #'1 IS IT A "1" , FILE LOAD CHAR ? 
0742 fc24 26 f1               BNE  LOAD2 IF NOT, LOOK FOR START CHAR. 
0743 fc26 17 01 17            LBSR BYTE INPUT BYTE COUNT 
0744 fc29 34 02               PSHS A PUSH COUNT ON STACK 
0745 fc2b 29 26               BVS  LODERR (V) C-CODE SET, ILLEGAL HEX 
0746 fc2d 17 00 ff            LBSR IN1ADR INPUT LOAD ADDRESS 
0747 fc30 29 21               BVS  LODERR (V) C-CODE SET, ADDR NOT HEX 
0748 fc32 34 10               PSHS X PUSH ADDR ON STACK 
0749 fc34 e6 e0               LDB  ,S+ LOAD MSB OF ADDR AS CHECKSUM BYTE 
0750 fc36 eb e0               ADDB ,S+ ADD LSB OF ADDR TO CHECKSUM 
0751 fc38 eb e4               ADDB ,S ADD BYTE COUNT BYTE TO CHECKSUM 
0752 fc3a 6a e4               DEC  ,S $FC37 DECREMENT BYTE COUNT 2 TO BYPASS 
0753 fc3c 6a e4               DEC  ,S ADDRESS BYTES. 
0754 fc3e 34 04              LOAD10 PSHS B PUSH CHECKSUM ON STACK 
0755 fc40 17 00 fd            LBSR BYTE INPUT DATA BYTE (2 HEX CHAR) 
0756 fc43 35 04               PULS B POP CHECKSUM FROM STACK 
0757 fc45 29 0c               BVS  LODERR (V) SET, DATA BYTE NOT HEX 
0758 fc47 34 02               PSHS A PUSH DATA BYTE ON STACK 
0759 fc49 eb e0               ADDB ,S+ ADD DATA TO CHECKSUM, AUTO INC STACK 
0760 fc4b 6a e4               DEC  ,S DECREMENT BYTE COUNT 1 
0761 fc4d 27 05               BEQ  LOAD16 IF BYTE COUNT ZERO, TEST CHECKSUM 
0762 fc4f a7 80               STA  ,X+ SAVE DATA BYTE IN MEMORY 
0763 fc51 20 eb               BRA  LOAD10 GET NEXT DATA BYTE 
0764 fc53 5f                 LODERR CLRB  ;ERROR CONDITION, ZERO CHECKSUM  ;
0765 fc54 35 02              LOAD16 PULS A ADJUST STACK (REMOVE BYTE COUNT) 
0766 fc56 c1 ff               CMPB #$FF CHECKSUM OK? 
0767 fc58 27 b2               BEQ  LOAD IF SO, LOAD NEXT LINE 
0768 fc5a 86 3f               LDA  #'? LOAD (?) ERROR INDICATOR 
0769 fc5c 17 01 8f            LBSR OUTCH OUTPUT IT TO TERMINAL 
0770 fc5f 73 df e2           LOAD21 COM  ECHO TURN ECHO ON 
0771 fc62 86 13               LDA  #$13   $FC5F LOAD 'DC3' CASS. READ OFF CODE 
0772 fc64 16 01 87            LBRA OUTCH OUTPUT IT 
0773                         * 
0774                         ***** "P" PUNCH MIKBUG TAPE ***** 
0775                         * 
0776 fc67 6f e2              PUNCH CLR  ,-S CLEAR RESERVED BYTE ON STACK 
0777 fc69 17 00 b8            LBSR IN2ADR GET BEGIN AND END ADDRESS 
0778 fc6c 34 30               PSHS X,Y SAVE ADDRESSES ON STACK 
0779 fc6e 29 4a               BVS  PUNEXT (V) C-CODE SET, EXIT PUNCH 
0780 fc70 ac 62               CMPX 2,S COMPARE BEGIN TO END ADDR 
0781 fc72 25 46               BCS  PUNEXT IF BEGIN GREATER THAN END, EXIT PUNCH 
0782 fc74 30 01               LEAX 1,X INCREMENT END ADDRESS 
0783 fc76 af e4               STX  ,S STORE END ADDR ON STACK 
0784 fc78 86 12               LDA  #$12 LOAD 'DC2' PUNCH ON CODE 
0785 fc7a 17 01 71            LBSR OUTCH OUTPUT IT TO TERMINAL 
0786 fc7d ec e4              PUNCH2 LDD  ,S LOAD END ADDR IN D-ACC 
0787 fc7f a3 62               SUBD 2,S SUBTRACT BEGIN FROM END 
0788 fc81 27 06               BEQ  PUNCH3 SAME, PUNCH 32 BYTES DEFAULT 
0789 fc83 10 83 00 20         CMPD #$20 LESS THAN 32 BYTES? 
0790 fc87 23 02               BLS  PUNCH4 PUNCH THAT MANY BYTES 
0791 fc89 c6 20              PUNCH3 LDB  #$20 LOAD BYTE COUNT OF 32. 
0792 fc8b e7 64              PUNCH4 STB  4,S STORE ON STACK AS BYTE COUNT 
0793 fc8d 8e fe eb            LDX  #MSG20 POINT TO MSG "S1" 
0794 fc90 17 01 1a            LBSR PSTRNG PRINT MSG 
0795 fc93 cb 03               ADDB #3 ADD 3 BYTES TO BYTE COUNT 
0796 fc95 1f 98               TFR  B,A GET BYTE COUNT IN A-ACC TO PUNCH 
0797 fc97 17 00 e7            LBSR OUT2H OUTPUT BYTE COUNT 
0798 fc9a ae 62               LDX  2,S LOAD BEGIN ADDRESS 
0799 fc9c 17 00 da            LBSR OUT4H PUNCH ADDRESS 
0800 fc9f eb 62               ADDB 2,S ADD ADDR MSB TO CHECKSUM 
0801 fca1 eb 63               ADDB 3,S ADD ADDR LSB TO CHECKSUM 
0802 fca3 eb 84              PUNCHL ADDB ,X ADD DATA BYTE TO CHECKSUM 
0803 fca5 a6 80               LDA  ,X+ LOAD DATA BYTE TO PUNCH 
0804 fca7 17 00 d7            LBSR OUT2H OUTPUT DATA BYTE 
0805 fcaa 6a 64               DEC  4,S DECREMENT BYTE COUNT 
0806 fcac 26 f5               BNE  PUNCHL NOT DONE, PUNCH NEXT BYTE 
0807 fcae 53                  COMB  1's COMPLIMENT CHECKSUM BYTE 
0808 fcaf 1f 98               TFR  B,A GET IT IN A-ACC TO PUNCH 
0809 fcb1 17 00 cd            LBSR OUT2H OUTPUT CHECKSUM BYTE 
0810 fcb4 af 62               STX  2,S SAVE X-REG IN STACK AS NEW PUNCH ADDR 
0811 fcb6 ac e4               CMPX ,S COMPARE IT TO END ADDR 
0812 fcb8 26 c3               BNE  PUNCH2      $FCB5 PUNCH NOT DONE, CONT. 
0813 fcba 86 14              PUNEXT LDA  #$14 LOAD 'DC4' PUNCH OFF CODE 
0814 fcbc 17 01 2f            LBSR OUTCH OUTPUT IT 
0815 fcbf 32 65               LEAS 5,S READJUST STACK POINTER 
0816 fcc1 39                  RTS  ; 
0817                         * 
0818                         * 
0819 fcc2 8e fe ae           PRTSP LDX  #MSG10 POINT TO MSG "SP=" 
0820 fcc5 17 00 f5            LBSR PDATA  PRINT MSG 
0821 fcc8 1f 31               TFR  U,X 
0822 fcca 16 00 ac            LBRA OUT4H 
0823 fccd 8e fe ba           PRTUS LDX  #MSG12 POINT TO MSG "US=" 
0824 fcd0 17 00 ea            LBSR PDATA  PRINT MSG 
0825 fcd3 ae 48               LDX  8,U 
0826 fcd5 16 00 a1            LBRA OUT4H 
0827 fcd8 8e fe cc           PRTDP LDX  #MSG15 POINT TO MSG "DP=" 
0828 fcdb 17 00 df            LBSR PDATA  PRINT MSG 
0829 fcde a6 43               LDA  3,U 
0830 fce0 16 00 9e            LBRA OUT2H OUTPUT HEX BYTE AS ASCII 
0831 fce3 8e fe c6           PRTIX LDX  #MSG14 POINT TO MSG "IX=" 
0832 fce6 17 00 d4            LBSR PDATA  PRINT MSG 
0833 fce9 ae 44               LDX  4,U      $FCE6 
0834 fceb 16 00 8b            LBRA OUT4H 
0835 fcee 8e fe c0           PRTIY LDX  #MSG13 POINT TO MSG "IY=" 
0836 fcf1 17 00 c9            LBSR PDATA  PRINT MSG 
0837 fcf4 ae 46               LDX  6,U 
0838 fcf6 16 00 80            LBRA  OUT4H 
0839 fcf9 8e fe b4           PRTPC LDX  #MSG11 POINT TO MSG "PC=" 
0840 fcfc 17 00 be            LBSR PDATA  PRINT MSG 
0841 fcff ae 4a               LDX  10,U 
0842 fd01 20 76               BRA  OUT4H 
0843 fd03 8e fe d2           PRTA LDX  #MSG16 POINT TO MSG "A=" 
0844 fd06 17 00 b4            LBSR PDATA  PRINT MSG 
0845 fd09 a6 41               LDA  1,U 
0846 fd0b 20 74               BRA OUT2H OUTPUT HEX BYTE AS ASCII 
0847 fd0d 8e fe d7           PRTB LDX  #MSG17 POINT TO MSG "B=" 
0848 fd10 17 00 aa            LBSR PDATA  PRINT MSG 
0849 fd13 a6 42               LDA  2,U 
0850 fd15 20 6a               BRA OUT2H OUTPUT HEX BYTE AS ASCII 
0851 fd17 8e fe dc           PRTCC LDX  #MSG18 POINT TO MSG "CC:" 
0852 fd1a 17 00 a0            LBSR PDATA  PRINT MSG 
0853 fd1d a6 c4               LDA  ,U 
0854 fd1f 8e fe e3            LDX  #MSG19 POINT TO MSG "EFHINZVC" 
0855 fd22 20 73               BRA BIASCI OUTPUT IN BINARY/ASCII FORMAT 
0856                         * 
0857                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE 
0858                         * OPERATOR TO INPUT TWO VALID HEX ADDRESSES. 
0859                         * THE FIRST ADDRESS INPUT IS RETURNED IN "IY". 
0860                         * THE SECOND IS RETURNED IN "IX". THE "V" BIT 
0861                         * IN THE C-CODE REG. IS SET IF AN INVALID HEX 
0862                         * ADDRESS IS INPUT. 
0863                         * 
0864 fd24 8d 09              IN2ADR BSR IN1ADR GET FIRST ADDRESS 
0865 fd26 29 4e               BVS NOTHEX EXIT IF NOT VALID HEX 
0866 fd28 1f 12               TFR  X,Y SAVE FIRST ADDR. IN "IY" 
0867 fd2a 86 2d               LDA #'- 
0868 fd2c 17 00 bf            LBSR OUTCH PRINT " - " 
0869                         * 
0870                         * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE 
0871                         * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE 
0872                         * ADDRESS IS RETURNED IN THE "X" REGISTER. 
0873                         * 
0874 fd2f 8d 0f              IN1ADR BSR BYTE INPUT BYTE (2 HEX CHAR) 
0875 fd31 29 43               BVS NOTHEX EXIT IF NOT VALID HEX 
0876 fd33 1f 01               TFR  D,X 
0877 fd35 8d 09               BSR BYTE INPUT BYTE (2 HEX CHAR) 
0878 fd37 29 3d               BVS NOTHEX 
0879 fd39 34 10               PSHS X 
0880 fd3b a7 61               STA  1,S 
0881 fd3d 35 10               PULS X 
0882 fd3f 39                  RTS   ;
0883                         * 
0884                         ***** INPUT BYTE (2 HEX CHAR.) ***** 
0885                         * 
0886 fd40 8d 11              BYTE BSR INHEX GET HEX LEFT 
0887 fd42 29 32               BVS NOTHEX EXIT IF NOT VALID HEX 
0888 fd44 48                  ASLA   ;
0889 fd45 48                  ASLA   ;
0890 fd46 48                  ASLA   ; SHIFT INTO LEFT NIBBLE
0891 fd47 48                  ASLA   ;
0892 fd48 1f 89               TFR  A,B PUT HEXL IN "B" 
0893 fd4a 8d 07               BSR INHEX GET HEX RIGHT 
0894 fd4c 29 28               BVS NOTHEX EXIT IF NOT VALID HEX 
0895 fd4e 34 04               PSHS B PUSH HEXL ON STACK 
0896 fd50 ab e0               ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK 
0897 fd52 39                  RTS  RETURN WITH HEX L&R IN "A" 
0898                         * 
0899                         * 
0900 fd53 8d 6f              INHEX BSR ECHON INPUT ASCII CHAR. 
0901 fd55 81 30               CMPA #'0 IS IT > OR = "0" ? 
0902 fd57 25 1d               BCS NOTHEX IF LESS IT AIN'T HEX 
0903 fd59 81 39               CMPA #'9 IS IT < OR = "9" ? 
0904 fd5b 22 03               BHI INHEXA IF > MAYBE IT'S ALPHA 
0905 fd5d 80 30               SUBA #$30 ASCII ADJ. NUMERIC 
0906 fd5f 39                  RTS  ;
0907                         * 
0908                         * 
0909 fd60 81 41              INHEXA CMPA #'A IS IT > OR = "A" 
0910 fd62 25 12               BCS NOTHEX IF LESS IT AIN'T HEX 
0911 fd64 81 46               CMPA #'F IS IT < OR = "F" ? 
0912 fd66 22 03               BHI INHEXL IF > IT AIN'T HEX 
0913 fd68 80 37               SUBA #$37 ASCII ADJ. ALPHA 
0914 fd6a 39                  RTS  ;
0915                         * 
0916 fd6b 81 61              INHEXL CMPA #'a IS IT > OR = "a" 
0917 fd6d 25 07               BCS NOTHEX IF LESS IT AIN'T HEX 
0918 fd6f 81 66               CMPA #'f IS IT < "f" 
0919 fd71 22 03               BHI NOTHEX IF > IT AIN'T HEX 
0920 fd73 80 57               SUBA #$57 ADJUST TO LOWER CASE 
0921 fd75 39                  RTS  ;
0922                         * 
0923                         * 
0924 fd76 1a 02              NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER 
0925 fd78 39                  RTS  ;
0926                         * 
0927                         * 
0928 fd79 34 10              OUT4H PSHS X PUSH X-REG. ON THE STACK 
0929 fd7b 35 02               PULS A POP MS BYTE OF X-REG INTO A-ACC. 
0930 fd7d 8d 02               BSR OUTHL OUTPUT HEX LEFT 
0931 fd7f 35 02               PULS A POP LS BYTE OF X-REG INTO A-ACC. 
0932 fd81                    OUTHL EQU * 
0933 fd81 34 02              OUT2H PSHS A SAVE IT BACK ON STACK 
0934 fd83 44                  LSRA CONVERT UPPER HEX NIBBLE TO ASCII 
0935 fd84 44                  LSRA  ;
0936 fd85 44                  LSRA  ;
0937 fd86 44                  LSRA  ;
0938 fd87 8d 04               BSR XASCII PRINT HEX NIBBLE AS ASCII 
0939 fd89 35 02              OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII 
0940 fd8b 84 0f               ANDA #$0F STRIP LEFT NIBBLE 
0941 fd8d 8b 30              XASCII ADDA #$30 ASCII ADJ 
0942 fd8f 81 39               CMPA #$39 IS IT < OR = "9" ? 
0943 fd91 2f 02               BLE  OUTC IF LESS, OUTPUT IT 
0944 fd93 8b 07               ADDA #7 IF > MAKE ASCII LETTER 
0945 fd95 20 57              OUTC BRA  OUTCH OUTPUT CHAR 
0946                         * 
0947                         * BINARY / ASCII --- THIS ROUTINE 
0948                         * OUTPUTS A BYTE IN ENHANCED 
0949                         * BINARY FORMAT. THE ENHANCEMENT 
0950                         * IS DONE BY SUBSTITUTING ASCII 
0951                         * LETTERS FOR THE ONES IN THE BYTE. 
0952                         * THE ASCII ENHANCEMENT LETTERS 
0953                         * ARE OBTAINED FROM THE STRING 
0954                         * POINTED TO BY THE INDEX REG. "X". 
0955                         * 
0956 fd97 34 02              BIASCI PSHS A SAVE "A" ON STACK 
0957 fd99 c6 08               LDB  #8 PRESET LOOP# TO BITS PER BYTE 
0958 fd9b a6 80              OUTBA LDA ,X+ GET LETTER FROM STRING 
0959 fd9d 68 e4               ASL  ,S TEST BYTE FOR "1" IN B7 
0960 fd9f 25 02               BCS PRTBA IF ONE PRINT LETTER 
0961 fda1 86 2d               LDA #'- IF ZERO PRINT "-" 
0962 fda3 8d 49              PRTBA BSR OUTCH PRINT IT 
0963 fda5 8d 45               BSR OUT1S PRINT SPACE 
0964 fda7 5a                  DECB SUB 1 FROM #BITS YET TO PRINT 
0965 fda8 26 f1               BNE OUTBA 
0966 fdaa 35 02               PULS A 
0967 fdac 39                  RTS 
0968                         * 
0969                         * PRINT STRING PRECEEDED BY A CR & LF. 
0970                         * 
0971 fdad 8d 02              PSTRNG BSR PCRLF PRINT CR/LF 
0972 fdaf 20 0c               BRA  PDATA  PRINT STRING POINTED TO BY IX 
0973                         * 
0974                         * PCRLF 
0975                         * 
0976 fdb1 34 10              PCRLF PSHS X SAVE IX 
0977 fdb3 8e fe 75            LDX  #MSG2+1  POINT TO MSG CR/LF + 3 NULS 
0978 fdb6 8d 05               BSR PDATA  PRINT MSG 
0979 fdb8 35 10               PULS X RESTORE IX 
0980 fdba 39                  RTS  ;
0981 fdbb 8d 31              PRINT BSR OUTCH 
0982                         * 
0983                         * PDATA 
0984                         * 
0985 fdbd a6 80              PDATA LDA  ,X+ GET 1st CHAR. TO PRINT 
0986 fdbf 81 04               CMPA #4 IS IT EOT? 
0987 fdc1 26 f8               BNE  PRINT IF NOT EOT PRINT IT 
0988 fdc3 39                  RTS  ;
0989                         * 
0990                         * 
0991 fdc4 7d df e2           ECHON TST  ECHO IS ECHO REQUIRED ? 
0992 fdc7 27 06               BEQ  INCH ECHO NOT REQ. IF CLEAR 
0993                         * 
0994                         * INCHE 
0995                         * 
0996                         * ---GETS CHARACTER FROM TERMINAL AND 
0997                         * ECHOS SAME. THE CHARACTER IS RETURNED 
0998                         * IN THE "A" ACCUMULATOR WITH THE PARITY 
0999                         * BIT MASKED OFF. ALL OTHER REGISTERS 
1000                         * ARE PRESERVED. 
1001                         * 
1002 fdc9 8d 04              INCHE BSR INCH GET CHAR FROM TERMINAL 
1003 fdcb 84 7f               ANDA #$7F      STRIP PARITY FROM CHAR. 
1004 fdcd 20 1f               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 fdcf 34 10              INCH PSHS X SAVE IX 
1015 fdd1 be df e0            LDX  CPORT POINT TO TERMINAL PORT 
1016 fdd4 a6 84              GETSTA LDA  ,X  FETCH PORT STATUS 
1017 fdd6 85 01               BITA #1 TEST READY BIT, RDRF ? 
1018 fdd8 27 fa               BEQ  GETSTA IF NOT RDY, THEN TRY AGAIN 
1019 fdda a6 01               LDA  1,X FETCH CHAR 
1020 fddc 35 10               PULS X RESTORE IX 
1021 fdde 39                  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 fddf 34 02              INCHEK PSHS A SAVE A ACCUM. 
1033 fde1 a6 9f df e0         LDA  [CPORT] FETCH PORT STATUS 
1034 fde5 85 01               BITA #1 TEST READY BIT, RDRF ? 
1035 fde7 35 02               PULS A RESTORE A ACCUM. 
1036 fde9 39                  RTS  ;
1037                         * 
1038 fdea 8d 00              OUT2S BSR OUT1S OUTPUT 2 SPACES 
1039 fdec 86 20              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 fdee 34 12              OUTCH PSHS A,X SAVE A ACCUM AND IX 
1050 fdf0 be df e0            LDX  CPORT GET ADDR. OF TERMINAL 
1051 fdf3 a6 84              FETSTA LDA  ,X FETCH PORT STATUS 
1052 fdf5 85 02               BITA #2 TEST TDRE, OK TO XMIT ? 
1053 fdf7 27 fa               BEQ  FETSTA IF NOT LOOP UNTIL RDY 
1054 fdf9 35 02               PULS A GET CHAR. FOR XMIT 
1055 fdfb a7 01               STA  1,X XMIT CHAR. 
1056 fdfd 35 10               PULS X RESTORE IX 
1057 fdff 39                  RTS  ;
1058                         * 
1059                         * 
1060 fe00 be df e0           ACINIZ LDX  CPORT  POINT TO CONTROL PORT ADDRESS 
1061 fe03 86 03               LDA  #3  RESET ACIA PORT CODE 
1062 fe05 a7 84               STA  ,X  STORE IN CONTROL REGISTER 
1063 fe07 86 11               LDA  #$11  SET 8 DATA, 2 STOP AN 0 PARITY 
1064 fe09 a7 84               STA  ,X  STORE IN CONTROL REGISTER 
1065 fe0b 6d 01               TST  1,X  ANYTHING IN DATA REGISTER? 
1066 fe0d 86 ff               LDA  #$FF  TURN ON ECHO FLAG 
1067 fe0f b7 df e2            STA  ECHO 
1068 fe12 39                  RTS 
1069                         * 
1070                         * 
1071                         * MONITOR KEYBOARD COMMAND JUMP TABLE 
1072                         * 
1073                         * 
1074 fe13                    JMPTAB EQU * 
1075 fe13 01                  FCB 1 " ^A "  $F91D 
1076 fe14 f9 23               FDB ALTRA 
1077 fe16 02                  FCB 2 " ^B "  $F90F 
1078 fe17 f9 15               FDB ALTRB 
1079 fe19 03                  FCB 3 " ^C "  $F92B 
1080 fe1a f9 31               FDB ALTRCC 
1081 fe1c 04                  FCB 4 " ^D "  $F901 
1082 fe1d f9 07               FDB ALTRDP 
1083 fe1f 10                  FCB $10 " ^P "  $F8C9 
1084 fe20 f8 cf               FDB ALTRPC 
1085 fe22 15                  FCB $15 " ^U "  $F8D7 
1086 fe23 f8 dd               FDB ALTRU 
1087 fe25 18                  FCB $18 " ^X "  $F8F3 
1088 fe26 f8 f9               FDB ALTRX 
1089 fe28 19                  FCB $19 " ^Y "  $F8E5 
1090 fe29 f8 eb               FDB ALTRY 
1091                         * 
1092 fe2b 42                  FCC 'B' 
1093 fe2c fa 7b               FDB BRKPNT *$FA78 
1094 fe2e 44                  FCC 'D' 
1095 fe2f fa f4               FDB DBOOT *$FAF1 
1096 fe31 45                  FCC 'E' 
1097 fe32 f9 96               FDB MEMDUMP *$F990 
1098 fe34 47                  FCC 'G' 
1099 fe35 f8 a5               FDB GO *$F89F 
1100 fe37 4c                  FCC 'L' 
1101 fe38 fc 0c               FDB LOAD *$FC09 
1102 fe3a 4d                  FCC 'M' 
1103 fe3b f9 41               FDB MEMCHG *$F93B 
1104 fe3d 50                  FCC 'P' 
1105 fe3e fc 67               FDB PUNCH *$FC64 
1106 fe40 51                  FCC 'Q' 
1107 fe41 f9 f2               FDB MEMTST *$F9EF 
1108 fe43 52                  FCC 'R' 
1109 fe44 f8 a8               FDB REGSTR *$F8A2 
1110 fe46 53                  FCC 'S' 
1111 fe47 f9 8a               FDB DISSTK *$F984 
1112 fe49 55                  FCC 'U' 
1113 fe4a fb b3               FDB MINBOOT *$FBB0 
1114 fe4c 58                  FCC 'X' 
1115 fe4d fa a7               FDB XBKPNT *$FAA4 
1116                         * 
1117 fe4f                    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 fe4f fa b3              RAMVEC FDB SWIE  USER-V 
1129 fe51 f8 a7               FDB RTI    SWI3-V 
1130 fe53 f8 a7               FDB RTI    SWI2-V 
1131 fe55 f8 a7               FDB RTI    FIRQ-V 
1132 fe57 f8 a7               FDB RTI    IRQ-V 
1133 fe59 fa b3               FDB SWIE   SWI-V 
1134 fe5b ff ff               FDB $FFFF  SVC-VO 
1135 fe5d ff ff               FDB $FFFF  SVC-VL 
1136                         * 
1137                         * PRINTABLE MESSAGE STRINGS 
1138                         * 
1139 fe5f 00 00 00 0d 0a 00  MSG1 FCB $0,$0,$0,$D,$A,$0,$0,$0 * 0, CR/LF, 0 
     00 00
1140 fe67 53 2d 42 55 47 20   FCC 'S-BUG 1.8 - ' 
     31 2e 38 20 2d 20
1141 fe73 04                  FCB 4 
1142 fe74 4b 0d 0a 00 00 00  MSG2 FCB 'K,$D,$A,$0,$0,$0,4 K, * CR/LF + 3 NULS 
     04
1143 fe7b 3e                 MSG3 FCC '>' 
1144 fe7c 04                  FCB 4 
1145 fe7d 57 48 41 54 3f     MSG4 FCC 'WHAT?' 
1146 fe82 04                  FCB 4 
1147 fe83 20 2d 20           MSG5 FCC ' - ' 
1148 fe86 04                  FCB 4' 
1149 fe87 2c 20 50 41 53 53  MSG6 FCC ', PASS ' 
     20
1150 fe8e 04                  FCB 4 
1151 fe8f 2c 20 42 49 54 53  MSG7 FCC ', BITS IN ERROR: ' 
     20 49 4e 20 45 52
     52 4f 52 3a 20
1152 fea0 04                  FCB 4 
1153 fea1 20 3d 3e 20        MSG8 FCC ' => ' 
1154 fea5 04                  FCB 4 
1155 fea6 37 36 35 34 33 32  MSG9 FCC '76543210' 
     31 30
1156 feae 20 20 53 50 3d     MSG10 FCC '  SP=' 
1157 feb3 04                  FCB 4 
1158 feb4 20 20 50 43 3d     MSG11 FCC '  PC=' 
1159 feb9 04                  FCB 4 
1160 feba 20 20 55 53 3d     MSG12 FCC '  US=' 
1161 febf 04                  FCB 4 
1162 fec0 20 20 49 59 3d     MSG13 FCC '  IY=' 
1163 fec5 04                  FCB 4 
1164 fec6 20 20 49 58 3d     MSG14 FCC '  IX=' 
1165 fecb 04                  FCB 4 
1166 fecc 20 20 44 50 3d     MSG15 FCC '  DP=' 
1167 fed1 04                  FCB 4 
1168 fed2 20 20 41 3d        MSG16 FCC '  A=' 
1169 fed6 04                  FCB 4 
1170 fed7 20 20 42 3d        MSG17 FCC '  B=' 
1171 fedb 04                  FCB 4 
1172 fedc 20 20 43 43 3a 20  MSG18 FCC '  CC: ' 
1173 fee2 04                  FCB 4 
1174 fee3 45 46 48 49 4e 5a  MSG19 FCC 'EFHINZVC' 
     56 43
1175 feeb 53 31              MSG20 FCC 'S1' 
1176 feed 04                  FCB 4 
1177                         * 
1178                         * MESSAGE EXPANSION AREA 
1179                         * 
1180 feee ff ff ff ff ff ff   FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF 
     ff ff
1181 fef6 ff ff ff ff ff ff   FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF 
     ff
1182                         * 
1183                         * POWER UP/ RESET/ NMI ENTRY POINT 
1184                         * 
1185 ff00                     ORG $FF00 
1186                         * 
1187                         * 
1188 ff00 8e ff f0           START LDX  #IC11  POINT TO DAT RAM IC11 
1189 ff03 86 0f               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 ff05 a7 80              DATLP STA  ,X+ STORE & POINT TO NEXT RAM LOCATION 
1200 ff07 4a                  DECA  GET COMP. VALUE FOR NEXT LOCATION 
1201 ff08 26 fb               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 ff0a 86 f0               LDA  #$F0 
1208 ff0c a7 84               STA  ,X STORE $F0 AT $FFFF 
1209 ff0e 8e d0 a0            LDX  #$D0A0 ASSUME RAM TO BE AT $D000-$DFFF 
1210 ff11 10 8e 55 aa         LDY  #TSTPAT LOAD TEST DATA PATTERN INTO "Y" 
1211 ff15 ee 84              TSTRAM LDU  ,X SAVE DATA FROM TEST LOCATION 
1212 ff17 10 af 84            STY  ,X STORE TEST PATTERN AT $D0A0 
1213 ff1a 10 ac 84            CMPY ,X IS THERE RAM AT THIS LOCATION ? 
1214 ff1d 27 0b               BEQ  CNVADR IF MATCH THERE'S RAM, SO SKIP 
1215 ff1f 30 89 f0 00         LEAX -$1000,X ELSE POINT 4K LOWER 
1216 ff23 8c f0 a0            CMPX #$F0A0 DECREMENTED PAST ZER0 YET ? 
1217 ff26 26 ed               BNE  TSTRAM IF NOT CONTINUE TESTING FOR RAM 
1218 ff28 20 d6               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 ff2a ef 84              CNVADR STU  ,X RESTORE DATA AT TEST LOCATION 
1244 ff2c 1f 10               TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D 
1245 ff2e 43                  COMA  COMPLEMENT MSB OF THAT ADDRESS 
1246 ff2f 44                  LSRA  PUT MS 4 BITS OF ADDRESS IN 
1247 ff30 44                  LSRA  LOCATION D0-D3 TO ALLOW STORING 
1248 ff31 44                  LSRA  IT IN THE DYNAMIC ADDRESS 
1249 ff32 44                  LSRA  TRANSLATION RAM. 
1250 ff33 b7 ff fd            STA  $FFFD STORE XLATION FACTOR IN DAT "D" 
1251                         * 
1252 ff36 10 ce df c0         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 ff3a 10 8e df d0         LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE 
1287 ff3e a7 2d               STA  13,Y STORE $D--- XLATION FACTOR AT $DFDD 
1288 ff40 6f 2e               CLR  14,Y CLEAR $DFDE 
1289 ff42 86 f0               LDA  #$F0 DESTINED FOR IC8 AN MEM EXPANSION ? 
1290 ff44 a7 2f               STA  15,Y STORE AT $DFDF 
1291 ff46 86 0c               LDA  #$0C PRESET NUMBER OF BYTES TO CLEAR 
1292 ff48 6f a6              CLRLRT CLR  A,Y CLEAR $DFDC THRU $DFD0 
1293 ff4a 4a                  DECA SUB. 1 FROM BYTES LEFT TO CLEAR 
1294 ff4b 2a fb               BPL  CLRLRT CONTINUE IF NOT DONE CLEARING 
1295 ff4d 30 89 f0 00        FNDRAM LEAX -$1000,X POINT TO NEXT LOWER 4K OF RAM 
1296 ff51 8c f0 a0            CMPX #$F0A0 TEST FOR DECREMENT PAST ZERO 
1297 ff54 27 22               BEQ  FINTAB SKIP IF FINISHED 
1298 ff56 ee 84               LDU  ,X SAVE DATA AT CURRENT TEST LOCATION 
1299 ff58 10 8e 55 aa         LDY  #TSTPAT LOAD TEST DATA PATTERN INTO Y REG. 
1300 ff5c 10 af 84            STY  ,X STORE TEST PATT. INTO RAM TEST LOC. 
1301 ff5f 10 ac 84            CMPY ,X VERIFY RAM AT TEST LOCATION 
1302 ff62 26 e9               BNE  FNDRAM IF NO RAM GO LOOK 4K LOWER 
1303 ff64 ef 84               STU  ,X ELSE RESTORE DATA TO TEST LOCATION 
1304 ff66 10 8e df d0         LDY  #LRARAM POINT TO LOGICAL/REAL ADDR. TABLE 
1305 ff6a 1f 10               TFR  X,D PUT ADDR. OF PRESENT 4K BLOCK IN D 
1306 ff6c 44                  LSRA  PUT MS 4 BITS OF ADDR. IN LOC. D0-D3 
1307 ff6d 44                  LSRA  TO ALLOW STORING IT IN THE DAT RAM. 
1308 ff6e 44                  LSRA  
1309 ff6f 44                  LSRA  
1310 ff70 1f 89               TFR  A,B SAVE OFFSET INTO LRARAM TABLE 
1311 ff72 88 0f               EORA #$0F INVERT MSB OF ADDR. OF CURRENT 4K BLK 
1312 ff74 a7 a5               STA  B,Y SAVE TRANSLATION FACTOR IN LRARAM TABLE 
1313 ff76 20 d5               BRA  FNDRAM GO TRANSLATE ADDR. OF NEXT 4K BLK 
1314 ff78 86 f1              FINTAB LDA  #$F1 DESTINED FOR IC8 AND MEM EXPANSION ? 
1315 ff7a 10 8e df d0         LDY  #LRARAM POINT TO LRARAM TABLE 
1316 ff7e a7 2e               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 ff80 86 0c               LDA  #$0C PRESET NUMBER HEX "C" 
1325 ff82 e6 a6              FINDC LDB  A,Y GET ENTRY FROM LRARAM TABLE 
1326 ff84 26 05               BNE  FOUNDC BRANCH IF RAM THIS PHYSICAL ADDR. 
1327 ff86 4a                  DECA  ELSE POINT 4K LOWER 
1328 ff87 2a f9               BPL  FINDC GO TRY AGAIN 
1329 ff89 20 14               BRA  XFERTF 
1330 ff8b 6f a6              FOUNDC CLR  A,Y CLR XLATION FACTOR OF 4K BLOCK FOUND 
1331 ff8d e7 2c               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 ff8f 4f                  CLRA  START AT ZERO 
1339 ff90 1f 21               TFR  Y,X START POINTER "X" START OF "LRARAM" TABLE. 
1340 ff92 e6 a6              COMPRS LDB  A,Y GET ENTRY FROM "LRARAM" TABLE 
1341 ff94 27 04               BEQ  PNTNXT IF IT'S ZER0 SKIP 
1342 ff96 6f a6               CLR  A,Y ELSE ERASE FROM TABLE 
1343 ff98 e7 80               STB  ,X+ AND ENTER ABOVE LAST ENTRY- BUMP 
1344 ff9a 4c                 PNTNXT INCA GET OFFSET TO NEXT ENTRY 
1345 ff9b 81 0c               CMPA #$0C LAST ENTRY YET ? 
1346 ff9d 2d f3               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 ff9f 8e ff f0           XFERTF LDX  #IC11  POINT TO DAT RAM IC11 
1353 ffa2 c6 10               LDB  #$10 GET NO. OF BYTES TO MOVE 
1354 ffa4 a6 a0              FETCH LDA  ,Y+ GET BYTE AND POINT TO NEXT 
1355 ffa6 a7 80               STA  ,X+ POKE XLATION FACTOR IN IC11 
1356 ffa8 5a                  DECB  SUB 1 FROM BYTES TO MOVE 
1357 ffa9 26 f9               BNE  FETCH CONTINUE UNTIL 16 MOVED 
1358 ffab 53                  COMB  SET "B" NON-ZERO 
1359 ffac f7 df e2            STB  ECHO TURN ON ECHO FLAG 
1360 ffaf 16 f8 62            LBRA MONITOR INITIALIZATION IS COMPLETE 
1361                         * 
1362                         * 
1363 ffb2 6e 9f df c0        V1 JMP  [STACK] 
1364 ffb6 6e 9f df c4        V2 JMP  [SWI2] 
1365 ffba 6e 9f df c6        V3 JMP  [FIRQ] 
1366 ffbe 6e 9f df c8        V4 JMP  [IRQ] 
1367 ffc2 6e 9f df ca        V5 JMP  [SWI] 
1368                         * 
1369                         * SWI3 ENTRY POINT 
1370                         * 
1371 ffc6 1f 43              SWI3E TFR  S,U 
1372 ffc8 ae 4a               LDX  10,U      *$FFC8 
1373 ffca e6 80               LDB  ,X+ 
1374 ffcc af 4a               STX  10,U 
1375 ffce 4f                  CLRA  
1376 ffcf 58                  ASLB  
1377 ffd0 49                  ROLA  
1378 ffd1 be df cc            LDX  SVCVO 
1379 ffd4 8c ff ff            CMPX #$FFFF 
1380 ffd7 27 0f               BEQ  SWI3Z 
1381 ffd9 30 8b               LEAX D,X 
1382 ffdb bc df ce            CMPX SVCVL 
1383 ffde 22 08               BHI  SWI3Z 
1384 ffe0 34 10               PSHS X 
1385 ffe2 ec c4               LDD  ,U 
1386 ffe4 ae 44               LDX  4,U 
1387 ffe6 6e f1               JMP  [,S++] 
1388 ffe8 37 1f              SWI3Z PULU A,B,X,CC,DP 
1389 ffea ee 42               LDU  2,U 
1390 ffec 6e 9f df c2         JMP  [SWI3] 
1391                         * 
1392                         * 6809 VECTORS 
1393                         * 
1394 fff0 ff b2               FDB V1    USER-V 
1395 fff2 ff c6               FDB SWI3E SWI3-V 
1396 fff4 ff b6               FDB V2    SWI2-V 
1397 fff6 ff ba               FDB V3    FIRQ-V 
1398 fff8 ff be               FDB V4    IRQ-V 
1399 fffa ff c2               FDB V5    SWI-V 
1400 fffc ff b2               FDB V1    NMI-V 
1401 fffe ff 00               FDB START RESTART-V 
1402                          END START

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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