Assembler release DWC_2.0 version 2.11
|
Assembler release DWC_2.0 version 2.11
|
May 6, 2004 (c) Motorola (free ware)
|
May 6, 2004 (c) Motorola (free ware)
|
0001 *
|
0001 *
|
0002 ** FLEX 9 DISK DRIVERS
|
0002 ** FLEX 9 DISK DRIVERS
|
0003 *
|
0003 *
|
0004 * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD
|
0004 * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD
|
0005 * WITH I/O MAPPED AT $XE000
|
0005 * WITH I/O MAPPED AT $XE000
|
0006 * AND ROM MAPPED AT $XF000
|
0006 * AND ROM MAPPED AT $XF000
|
0007 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM
|
0007 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM
|
0008 * THE FIRST 64K IS USED BY FLEX,
|
0008 * THE FIRST 64K IS USED BY FLEX,
|
0009 * THE SECOND 128K IS USED AS A ROM DISK
|
0009 * THE SECOND 128K IS USED AS A ROM DISK
|
0010 * THE REMAINING RAM IS USED FOR A RAM DISK
|
0010 * THE REMAINING RAM IS USED FOR A RAM DISK
|
0011 *
|
0011 *
|
0012 *
|
0012 *
|
0013 0001 CFLAG EQU $01 CARRY FLAG
|
0013 0001 CFLAG EQU $01 CARRY FLAG
|
0014 0002 VFLAG EQU $02 OVERFLOW FLAG
|
0014 0002 VFLAG EQU $02 OVERFLOW FLAG
|
0015 0004 ZFLAG EQU $04 ZERO FLAG
|
0015 0004 ZFLAG EQU $04 ZERO FLAG
|
0016 0008 NFLAG EQU $08 NEGATIVE FLAG
|
0016 0008 NFLAG EQU $08 NEGATIVE FLAG
|
0017 0010 IFLAG EQU $10 IRQ MASK CC
|
0017 0010 IFLAG EQU $10 IRQ MASK CC
|
0018 0020 HFLAG EQU $20 HALF CARRY
|
0018 0020 HFLAG EQU $20 HALF CARRY
|
0019 0040 FFLAG EQU $40 FIRQ MASK CC
|
0019 0040 FFLAG EQU $40 FIRQ MASK CC
|
0020 0080 EFLAG EQU $80 ENTIRE FLAG
|
0020 0080 EFLAG EQU $80 ENTIRE FLAG
|
0021 *
|
0021 *
|
0022 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS
|
0022 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS
|
0023 *
|
0023 *
|
0024 * Serial Port
|
0024 * Serial Port
|
0025 *
|
0025 *
|
0026 E000 ACIAS EQU $E000
|
0026 E000 ACIAS EQU $E000
|
0027 E000 ACIAC1 EQU ACIAS
|
0027 E000 ACIAC1 EQU ACIAS
|
0028 E001 ACIAD1 EQU ACIAS+1
|
0028 E001 ACIAD1 EQU ACIAS+1
|
0029 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)
|
0029 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)
|
0030 *
|
0030 *
|
0031 * XMODEM Control characters
|
0031 * XMODEM Control characters
|
0032 *
|
0032 *
|
0033 0001 SOH EQU $01
|
0033 0001 SOH EQU $01
|
0034 0004 EOT EQU $04
|
0034 0004 EOT EQU $04
|
0035 0006 ACK EQU $06
|
0035 0006 ACK EQU $06
|
0036 0015 NAK EQU $15
|
0036 0015 NAK EQU $15
|
0037 0018 CAN EQU $18
|
0037 0018 CAN EQU $18
|
0038 *
|
0038 *
|
0039 * Some dummy Constants
|
0039 * Some dummy Constants
|
0040 *
|
0040 *
|
0041 0040 RMAXTRK EQU 64
|
0041 0040 RMAXTRK EQU 64
|
0042 00FF RMAXSEC EQU 255
|
0042 00FF RMAXSEC EQU 255
|
0043 3EC1 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
|
0043 3EC1 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
|
0044 *
|
0044 *
|
0045 * Start
|
0045 * Start
|
0046 *
|
0046 *
|
0047 0100 ORG $0100
|
0047 0100 ORG $0100
|
0048 0100 17 02 98 START LBSR UFSUB
|
0048 0100 17 02 98 START LBSR UFSUB
|
0049 0103 6E 9F F8 00 JMP [$F800] Jump to monitor on Completion.
|
0049 0103 6E 9F F8 00 JMP [$F800] Jump to monitor on Completion.
|
0050 *
|
0050 *
|
0051 *
|
0051 *
|
0052 * RAM SPACE
|
0052 * RAM SPACE
|
0053 *
|
0053 *
|
0054 0107 00 DRVNUM FCB 0
|
0054 0107 00 DRVNUM FCB 0
|
0055 0108 00 TRACK FCB 0
|
0055 0108 00 TRACK FCB 0
|
0056 0109 00 SECTOR FCB 0
|
0056 0109 00 SECTOR FCB 0
|
0057 010A 00 CHKSUM FCB 0
|
0057 010A 00 CHKSUM FCB 0
|
0058 010B 00 BLKNUM FCB 0 Xmodem block number
|
0058 010B 00 BLKNUM FCB 0 Xmodem block number
|
0059 010C 00 BYTCNT FCB 0 Xmodem byte count
|
0059 010C 00 BYTCNT FCB 0 Xmodem byte count
|
0060 010D 00 00 XSTATE FDB 0 Xmodem State Vector
|
0060 010D 00 00 XSTATE FDB 0 Xmodem State Vector
|
0061 010F 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer
|
0061 010F 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer
|
0062 0112 00 MAXTRK FCB 0
|
0062 0112 00 MAXTRK FCB 0
|
0063 0113 00 MAXSEC FCB 0
|
0063 0113 00 MAXSEC FCB 0
|
0064 0200 ORG $0200
|
0064 0200 ORG $0200
|
0065 *
|
0065 *
|
0066 * SECTOR BUFFER
|
0066 * SECTOR BUFFER
|
0067 *
|
0067 *
|
0068 0200 BUFFER RMB 256
|
0068 0200 BUFFER RMB 256
|
0069 *
|
0069 *
|
0070 *
|
0070 *
|
0071 * recieve char from remote drive.
|
0071 * recieve char from remote drive.
|
0072 * timeout if no response for approx 1s.
|
0072 * timeout if no response for approx 1s.
|
0073 * Entry: no parameters
|
0073 * Entry: no parameters
|
0074 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
|
0074 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
|
0075 *
|
0075 *
|
0076 0300 34 30 RCHAR PSHS X,Y
|
0076 0300 34 30 RCHAR PSHS X,Y
|
0077 *
|
0077 *
|
0078 0302 8E 03 E8 LDX #1000 1000x inner loop
|
0078 0302 8E 03 E8 LDX #1000 1000x inner loop
|
0079 0305 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
|
0079 0305 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
|
0080 0309 B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char
|
0080 0309 B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char
|
0081 030C 47 ASRA
|
0081 030C 47 ASRA
|
0082 030D 25 0A BCS RCHAR3 get character
|
0082 030D 25 0A BCS RCHAR3 get character
|
0083 030F 31 3F LEAY -1,Y else, continue to count delay
|
0083 030F 31 3F LEAY -1,Y else, continue to count delay
|
0084 0311 26 F6 BNE RCHAR2
|
0084 0311 26 F6 BNE RCHAR2
|
0085 0313 30 1F LEAX -1,X
|
0085 0313 30 1F LEAX -1,X
|
0086 0315 26 EE BNE RCHAR1
|
0086 0315 26 EE BNE RCHAR1
|
0087 0317 35 B0 PULS X,Y,PC return with error if timed out
|
0087 0317 35 B0 PULS X,Y,PC return with error if timed out
|
0088 *
|
0088 *
|
0089 0319 B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set)
|
0089 0319 B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set)
|
0090 031C 35 B0 PULS X,Y,PC
|
0090 031C 35 B0 PULS X,Y,PC
|
0091 *
|
0091 *
|
0092 *
|
0092 *
|
0093 * transmit char to remote drive.
|
0093 * transmit char to remote drive.
|
0094 * timeout if no response for approx 1s. (allows for use of hardware flow control)
|
0094 * timeout if no response for approx 1s. (allows for use of hardware flow control)
|
0095 * Entry: (A) = char to transmit
|
0095 * Entry: (A) = char to transmit
|
0096 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
|
0096 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
|
0097 *
|
0097 *
|
0098 031E 34 30 SCHAR PSHS X,Y
|
0098 031E 34 30 SCHAR PSHS X,Y
|
0099 0320 34 02 PSHS A
|
0099 0320 34 02 PSHS A
|
0100 *
|
0100 *
|
0101 0322 8E 03 E8 LDX #1000 1000x inner loop
|
0101 0322 8E 03 E8 LDX #1000 1000x inner loop
|
0102 0325 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
|
0102 0325 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
|
0103 0329 B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO
|
0103 0329 B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO
|
0104 032C 47 ASRA
|
0104 032C 47 ASRA
|
0105 032D 47 ASRA
|
0105 032D 47 ASRA
|
0106 032E 25 0C BCS SCHAR3 send character
|
0106 032E 25 0C BCS SCHAR3 send character
|
0107 0330 31 3F LEAY -1,Y else, continue to count delay
|
0107 0330 31 3F LEAY -1,Y else, continue to count delay
|
0108 0332 26 F5 BNE SCHAR2
|
0108 0332 26 F5 BNE SCHAR2
|
0109 0334 30 1F LEAX -1,X
|
0109 0334 30 1F LEAX -1,X
|
0110 0336 26 ED BNE SCHAR1
|
0110 0336 26 ED BNE SCHAR1
|
0111 0338 35 02 PULS A
|
0111 0338 35 02 PULS A
|
0112 033A 35 B0 PULS X,Y,PC return with error if timed out
|
0112 033A 35 B0 PULS X,Y,PC return with error if timed out
|
0113 *
|
0113 *
|
0114 033C 35 02 SCHAR3 PULS A
|
0114 033C 35 02 SCHAR3 PULS A
|
0115 033E B7 E0 01 STA ACIAD1 send data (carry bit still set)
|
0115 033E B7 E0 01 STA ACIAD1 send data (carry bit still set)
|
0116 0341 35 B0 PULS X,Y,PC
|
0116 0341 35 B0 PULS X,Y,PC
|
0117 *
|
0117 *
|
0118 ** 'UF' Format IDE Drive to FLEX standard.
|
0118 ** 'UF' Format IDE Drive to FLEX standard.
|
0119 *
|
0119 *
|
0120 0343 0A 0D DISFOS FCB $0A,$0D
|
0120 0343 0A 0D DISFOS FCB $0A,$0D
|
0121 0345 46 6F 72 6D 61 74 FCC 'Formating IDE disk... '
|
0121 0345 46 6F 72 6D 61 74 FCC 'Formating IDE disk... '
|
69 6E 67 20 49 44
|
69 6E 67 20 49 44
|
45 20 64 69 73 6B
|
45 20 64 69 73 6B
|
2E 2E 2E 20
|
2E 2E 2E 20
|
0122 035B 0A 0D FCB $0A,$0D
|
0122 035B 0A 0D FCB $0A,$0D
|
0123 035D 44 72 69 76 65 20 FCC 'Drive Number ?'
|
0123 035D 44 72 69 76 65 20 FCC 'Drive Number ?'
|
4E 75 6D 62 65 72
|
4E 75 6D 62 65 72
|
20 3F
|
20 3F
|
0124 036B 04 FCB 4
|
0124 036B 04 FCB 4
|
0125 036C 0A 0D 04 MESS6 FCB $0A,$0D,4
|
0125 036C 0A 0D 04 MESS6 FCB $0A,$0D,4
|
0126 036F 49 44 45 20 64 72 FCC 'IDE drive not allocated! '
|
0126 036F 49 44 45 20 64 72 FCC 'IDE drive not allocated! '
|
69 76 65 20 6E 6F
|
69 76 65 20 6E 6F
|
74 20 61 6C 6C 6F
|
74 20 61 6C 6C 6F
|
63 61 74 65 64 21
|
63 61 74 65 64 21
|
20
|
20
|
0127 0388 04 FCB 4
|
0127 0388 04 FCB 4
|
0128 0389 0A 0D UFMSG1 FCB $0A,$0D
|
0128 0389 0A 0D UFMSG1 FCB $0A,$0D
|
0129 038B 46 6F 72 6D 61 74 FCC 'Format Complete'
|
0129 038B 46 6F 72 6D 61 74 FCC 'Format Complete'
|
20 43 6F 6D 70 6C
|
20 43 6F 6D 70 6C
|
65 74 65
|
65 74 65
|
0130 039A 04 FCB 4
|
0130 039A 04 FCB 4
|
0131 *
|
0131 *
|
0132 039B BD 05 39 UFSUB JSR INITDR
|
0132 039B BD 05 39 UFSUB JSR INITDR
|
0133 039E 8E 03 43 LDX #DISFOS
|
0133 039E 8E 03 43 LDX #DISFOS
|
0134 03A1 BD 05 32 JSR PDATA1
|
0134 03A1 BD 05 32 JSR PDATA1
|
0135 03A4 17 FF 59 UFSUB1 LBSR RCHAR
|
0135 03A4 17 FF 59 UFSUB1 LBSR RCHAR
|
0136 03A7 24 FB BCC UFSUB1
|
0136 03A7 24 FB BCC UFSUB1
|
0137 03A9 17 FF 72 LBSR SCHAR
|
0137 03A9 17 FF 72 LBSR SCHAR
|
0138 03AC 81 30 CMPA #'0'
|
0138 03AC 81 30 CMPA #'0'
|
0139 03AE 10 25 00 F3 LBLO UFEXIT
|
0139 03AE 10 25 00 F3 LBLO UFEXIT
|
0140 03B2 81 33 CMPA #'3'
|
0140 03B2 81 33 CMPA #'3'
|
0141 03B4 10 22 00 ED LBHI UFEXIT
|
0141 03B4 10 22 00 ED LBHI UFEXIT
|
0142 03B8 80 30 SUBA #'0'
|
0142 03B8 80 30 SUBA #'0'
|
0143 03BA 1F 89 TFR A,B
|
0143 03BA 1F 89 TFR A,B
|
0144 03BC F7 01 07 STB DRVNUM
|
0144 03BC F7 01 07 STB DRVNUM
|
0145 03BF 8E 01 04 LDX #DRVNUM-3
|
0145 03BF 8E 01 04 LDX #DRVNUM-3
|
0146 03C2 BD 05 B1 JSR DRVSEL
|
0146 03C2 BD 05 B1 JSR DRVSEL
|
0147 *
|
0147 *
|
0148 * set up free chain
|
0148 * set up free chain
|
0149 *
|
0149 *
|
0150 03C5 8E 02 00 LDX #BUFFER clear out buffer
|
0150 03C5 8E 02 00 LDX #BUFFER clear out buffer
|
0151 03C8 4F CLRA
|
0151 03C8 4F CLRA
|
0152 03C9 5F CLRB
|
0152 03C9 5F CLRB
|
0153 03CA A7 80 DFL1 STA 0,X+
|
0153 03CA A7 80 DFL1 STA 0,X+
|
0154 03CC 5A DECB
|
0154 03CC 5A DECB
|
0155 03CD 26 FB BNE DFL1
|
0155 03CD 26 FB BNE DFL1
|
0156 *
|
0156 *
|
0157 03CF 7F 01 08 CLR TRACK
|
0157 03CF 7F 01 08 CLR TRACK
|
0158 03D2 86 01 LDA #1
|
0158 03D2 86 01 LDA #1
|
0159 03D4 B7 01 09 STA SECTOR
|
0159 03D4 B7 01 09 STA SECTOR
|
0160 03D7 8E 02 00 DFL2 LDX #BUFFER
|
0160 03D7 8E 02 00 DFL2 LDX #BUFFER
|
0161 03DA B6 01 08 LDA TRACK
|
0161 03DA B6 01 08 LDA TRACK
|
0162 03DD A7 84 STA 0,X
|
0162 03DD A7 84 STA 0,X
|
0163 03DF B6 01 09 LDA SECTOR
|
0163 03DF B6 01 09 LDA SECTOR
|
0164 03E2 4C INCA
|
0164 03E2 4C INCA
|
0165 03E3 81 00 CMPA #RMAXSEC+1 last sector on track?
|
0165 03E3 81 00 CMPA #RMAXSEC+1 last sector on track?
|
0166 03E5 26 04 BNE DFL3
|
0166 03E5 26 04 BNE DFL3
|
0167 03E7 6C 84 INC 0,X
|
0167 03E7 6C 84 INC 0,X
|
0168 03E9 86 01 LDA #1
|
0168 03E9 86 01 LDA #1
|
0169 03EB A7 01 DFL3 STA 1,X
|
0169 03EB A7 01 DFL3 STA 1,X
|
0170 03ED B6 01 08 LDA TRACK
|
0170 03ED B6 01 08 LDA TRACK
|
0171 03F0 F6 01 09 LDB SECTOR
|
0171 03F0 F6 01 09 LDB SECTOR
|
0172 03F3 BD 05 8D JSR WRITSC
|
0172 03F3 BD 05 8D JSR WRITSC
|
0173 03F6 7C 01 09 INC SECTOR
|
0173 03F6 7C 01 09 INC SECTOR
|
0174 03F9 B6 01 09 LDA SECTOR
|
0174 03F9 B6 01 09 LDA SECTOR
|
0175 03FC 81 00 CMPA #RMAXSEC+1
|
0175 03FC 81 00 CMPA #RMAXSEC+1
|
0176 03FE 26 D7 BNE DFL2
|
0176 03FE 26 D7 BNE DFL2
|
0177 0400 86 01 LDA #1
|
0177 0400 86 01 LDA #1
|
0178 0402 B7 01 09 STA SECTOR
|
0178 0402 B7 01 09 STA SECTOR
|
0179 0405 7C 01 08 INC TRACK
|
0179 0405 7C 01 08 INC TRACK
|
0180 0408 B6 01 08 LDA TRACK
|
0180 0408 B6 01 08 LDA TRACK
|
0181 040B 81 40 CMPA #RMAXTRK
|
0181 040B 81 40 CMPA #RMAXTRK
|
0182 040D 26 C8 BNE DFL2
|
0182 040D 26 C8 BNE DFL2
|
0183 * break free chain at last track/sector
|
0183 * break free chain at last track/sector
|
0184 040F 8E 02 00 LDX #BUFFER
|
0184 040F 8E 02 00 LDX #BUFFER
|
0185 0412 86 3F LDA #RMAXTRK-1
|
0185 0412 86 3F LDA #RMAXTRK-1
|
0186 0414 C6 FF LDB #RMAXSEC
|
0186 0414 C6 FF LDB #RMAXSEC
|
0187 0416 BD 05 6C JSR READSC
|
0187 0416 BD 05 6C JSR READSC
|
0188 0419 8E 02 00 LDX #BUFFER
|
0188 0419 8E 02 00 LDX #BUFFER
|
0189 041C 6F 84 CLR 0,X
|
0189 041C 6F 84 CLR 0,X
|
0190 041E 6F 01 CLR 1,X
|
0190 041E 6F 01 CLR 1,X
|
0191 0420 86 3F LDA #RMAXTRK-1
|
0191 0420 86 3F LDA #RMAXTRK-1
|
0192 0422 C6 FF LDB #RMAXSEC
|
0192 0422 C6 FF LDB #RMAXSEC
|
0193 0424 BD 05 8D JSR WRITSC
|
0193 0424 BD 05 8D JSR WRITSC
|
0194 * set up sector structure, SIR, directory etc
|
0194 * set up sector structure, SIR, directory etc
|
0195 0427 8E 02 00 LDX #BUFFER
|
0195 0427 8E 02 00 LDX #BUFFER
|
0196 042A 4F CLRA
|
0196 042A 4F CLRA
|
0197 042B C6 FF LDB #RMAXSEC
|
0197 042B C6 FF LDB #RMAXSEC
|
0198 042D BD 05 6C JSR READSC
|
0198 042D BD 05 6C JSR READSC
|
0199 0430 8E 02 00 LDX #BUFFER
|
0199 0430 8E 02 00 LDX #BUFFER
|
0200 0433 6F 84 CLR 0,X break end of directory chain
|
0200 0433 6F 84 CLR 0,X break end of directory chain
|
0201 0435 6F 01 CLR 1,X
|
0201 0435 6F 01 CLR 1,X
|
0202 0437 4F CLRA
|
0202 0437 4F CLRA
|
0203 0438 C6 FF LDB #RMAXSEC
|
0203 0438 C6 FF LDB #RMAXSEC
|
0204 043A BD 05 8D JSR WRITSC
|
0204 043A BD 05 8D JSR WRITSC
|
0205 *
|
0205 *
|
0206 043D 8E 02 00 LDX #BUFFER
|
0206 043D 8E 02 00 LDX #BUFFER
|
0207 0440 4F CLRA
|
0207 0440 4F CLRA
|
0208 0441 C6 03 LDB #3 set up SIR
|
0208 0441 C6 03 LDB #3 set up SIR
|
0209 0443 BD 05 6C JSR READSC
|
0209 0443 BD 05 6C JSR READSC
|
0210 0446 8E 02 00 LDX #BUFFER
|
0210 0446 8E 02 00 LDX #BUFFER
|
0211 0449 6F 84 CLR 0,X break forward link
|
0211 0449 6F 84 CLR 0,X break forward link
|
0212 044B 6F 01 CLR 1,X
|
0212 044B 6F 01 CLR 1,X
|
0213 044D CC 52 41 LDD #$5241 set volume name (RAMDISK )
|
0213 044D CC 52 41 LDD #$5241 set volume name (RAMDISK )
|
0214 0450 ED 88 10 STD 16,X
|
0214 0450 ED 88 10 STD 16,X
|
0215 0453 CC 4D 44 LDD #$4D44
|
0215 0453 CC 4D 44 LDD #$4D44
|
0216 0456 ED 88 12 STD 18,X
|
0216 0456 ED 88 12 STD 18,X
|
0217 0459 CC 49 53 LDD #$4953
|
0217 0459 CC 49 53 LDD #$4953
|
0218 045C ED 88 14 STD 20,X
|
0218 045C ED 88 14 STD 20,X
|
0219 045F CC 4B 20 LDD #$4B20
|
0219 045F CC 4B 20 LDD #$4B20
|
0220 0462 ED 88 16 STD 22,X
|
0220 0462 ED 88 16 STD 22,X
|
0221 0465 CC 00 01 LDD #1 volume number
|
0221 0465 CC 00 01 LDD #1 volume number
|
0222 0468 ED 88 1B STD 27,X
|
0222 0468 ED 88 1B STD 27,X
|
0223 046B CC 01 01 LDD #$0101 first trk/sec 01-01
|
0223 046B CC 01 01 LDD #$0101 first trk/sec 01-01
|
0224 046E ED 88 1D STD 29,X
|
0224 046E ED 88 1D STD 29,X
|
0225 0471 86 3F LDA #RMAXTRK-1
|
0225 0471 86 3F LDA #RMAXTRK-1
|
0226 0473 C6 FF LDB #RMAXSEC
|
0226 0473 C6 FF LDB #RMAXSEC
|
0227 0475 ED 88 1F STD 31,X
|
0227 0475 ED 88 1F STD 31,X
|
0228 0478 ED 88 26 STD 38,X
|
0228 0478 ED 88 26 STD 38,X
|
0229 047B CC 3E C1 LDD #RTOTSEC total DATA sectors (2912-14)
|
0229 047B CC 3E C1 LDD #RTOTSEC total DATA sectors (2912-14)
|
0230 047E ED 88 21 STD 33,X
|
0230 047E ED 88 21 STD 33,X
|
0231 *
|
0231 *
|
0232 0481 86 01 LDA #01 month set default creation date (SYS09's birthday!)
|
0232 0481 86 01 LDA #01 month set default creation date (SYS09's birthday!)
|
0233 0483 A7 88 23 STA 35,X
|
0233 0483 A7 88 23 STA 35,X
|
0234 0486 86 07 LDA #07 day
|
0234 0486 86 07 LDA #07 day
|
0235 0488 A7 88 24 STA 36,X
|
0235 0488 A7 88 24 STA 36,X
|
0236 048B 86 07 LDA #07 year
|
0236 048B 86 07 LDA #07 year
|
0237 048D A7 88 25 STA 37,X
|
0237 048D A7 88 25 STA 37,X
|
0238 *
|
0238 *
|
0239 0490 4F RF3 CLRA
|
0239 0490 4F RF3 CLRA
|
0240 0491 C6 03 LDB #3
|
0240 0491 C6 03 LDB #3
|
0241 0493 BD 05 8D JSR WRITSC
|
0241 0493 BD 05 8D JSR WRITSC
|
0242 *
|
0242 *
|
0243 * Not sure what this is about
|
0243 * Not sure what this is about
|
0244 * put bootstrap on track 0 sector 1
|
0244 * put bootstrap on track 0 sector 1
|
0245 *
|
0245 *
|
0246 * LDX #BUFFER
|
0246 * LDX #BUFFER
|
0247 * CLRA
|
0247 * CLRA
|
0248 * LDB #1
|
0248 * LDB #1
|
0249 * JSR READSC
|
0249 * JSR READSC
|
0250 * LDX #BUFFER
|
0250 * LDX #BUFFER
|
0251 * LDA #$AA set the init flag
|
0251 * LDA #$AA set the init flag
|
0252 * STA 0,X
|
0252 * STA 0,X
|
0253 * LDA #$55
|
0253 * LDA #$55
|
0254 * STA 1,X
|
0254 * STA 1,X
|
0255 * CLRA
|
0255 * CLRA
|
0256 * LDB #1
|
0256 * LDB #1
|
0257 * JSR WRITSC
|
0257 * JSR WRITSC
|
0258 *
|
0258 *
|
0259 * Write Boot sector
|
0259 * Write Boot sector
|
0260 *
|
0260 *
|
0261 0496 8E C0 00 LDX #$C000
|
0261 0496 8E C0 00 LDX #$C000
|
0262 0499 4F CLRA TRACK 0
|
0262 0499 4F CLRA TRACK 0
|
0263 049A C6 01 LDB #$01 SECTOR 1
|
0263 049A C6 01 LDB #$01 SECTOR 1
|
0264 049C B7 01 08 STA TRACK
|
0264 049C B7 01 08 STA TRACK
|
0265 049F F7 01 09 STB SECTOR
|
0265 049F F7 01 09 STB SECTOR
|
0266 04A2 17 00 E8 LBSR WRITSC
|
0266 04A2 17 00 E8 LBSR WRITSC
|
0267 *
|
0267 *
|
0268 04A5 8E 03 89 UFEXIT LDX #UFMSG1
|
0268 04A5 8E 03 89 UFEXIT LDX #UFMSG1
|
0269 04A8 7E 05 32 JMP PDATA1
|
0269 04A8 7E 05 32 JMP PDATA1
|
0270 *
|
0270 *
|
0271 * Read a byte from the serial port
|
0271 * Read a byte from the serial port
|
0272 *
|
0272 *
|
0273 04AB 34 04 LRBYTE PSHS B
|
0273 04AB 34 04 LRBYTE PSHS B
|
0274 04AD 8D 0E BSR LRHEX Get hex digit.
|
0274 04AD 8D 0E BSR LRHEX Get hex digit.
|
0275 04AF 48 ASLA
|
0275 04AF 48 ASLA
|
0276 04B0 48 ASLA Shift to msb.
|
0276 04B0 48 ASLA Shift to msb.
|
0277 04B1 48 ASLA
|
0277 04B1 48 ASLA
|
0278 04B2 48 ASLA
|
0278 04B2 48 ASLA
|
0279 04B3 1F 89 TFR A,B Save in B.
|
0279 04B3 1F 89 TFR A,B Save in B.
|
0280 04B5 8D 06 BSR LRHEX Get next digit.
|
0280 04B5 8D 06 BSR LRHEX Get next digit.
|
0281 04B7 34 04 PSHS B
|
0281 04B7 34 04 PSHS B
|
0282 04B9 AB E0 ADDA 0,S+ Add together bytes.
|
0282 04B9 AB E0 ADDA 0,S+ Add together bytes.
|
0283 04BB 35 84 PULS B,PC
|
0283 04BB 35 84 PULS B,PC
|
0284 *
|
0284 *
|
0285 04BD BD 04 E6 LRHEX JSR INTER
|
0285 04BD BD 04 E6 LRHEX JSR INTER
|
0286 04C0 29 FB BVS LRHEX
|
0286 04C0 29 FB BVS LRHEX
|
0287 04C2 80 30 SUBA #$30 Remove ascii bias.
|
0287 04C2 80 30 SUBA #$30 Remove ascii bias.
|
0288 04C4 2B F7 BMI LRHEX
|
0288 04C4 2B F7 BMI LRHEX
|
0289 04C6 81 09 CMPA #$09 Number?
|
0289 04C6 81 09 CMPA #$09 Number?
|
0290 04C8 2F 0A BLE LRHEX1 Yes.
|
0290 04C8 2F 0A BLE LRHEX1 Yes.
|
0291 04CA 81 11 CMPA #$11 Keep testing.
|
0291 04CA 81 11 CMPA #$11 Keep testing.
|
0292 04CC 2B EF BMI LRHEX
|
0292 04CC 2B EF BMI LRHEX
|
0293 04CE 81 16 CMPA #$16
|
0293 04CE 81 16 CMPA #$16
|
0294 04D0 2E EB BGT LRHEX
|
0294 04D0 2E EB BGT LRHEX
|
0295 04D2 80 07 SUBA #$07
|
0295 04D2 80 07 SUBA #$07
|
0296 04D4 39 LRHEX1 RTS
|
0296 04D4 39 LRHEX1 RTS
|
0297 *
|
0297 *
|
0298 * ACIA INPUT TEST
|
0298 * ACIA INPUT TEST
|
0299 *
|
0299 *
|
0300 04D5 B6 E0 00 INTEST LDA ACIAC1
|
0300 04D5 B6 E0 00 INTEST LDA ACIAC1
|
0301 04D8 85 01 BITA #$01
|
0301 04D8 85 01 BITA #$01
|
0302 04DA 39 RTS
|
0302 04DA 39 RTS
|
0303 *
|
0303 *
|
0304 * RESET ACIA
|
0304 * RESET ACIA
|
0305 *
|
0305 *
|
0306 04DB 86 03 ACIRST LDA #$03 master reset
|
0306 04DB 86 03 ACIRST LDA #$03 master reset
|
0307 04DD B7 E0 00 STA ACIAC1
|
0307 04DD B7 E0 00 STA ACIAC1
|
0308 04E0 86 11 LDA #$11
|
0308 04E0 86 11 LDA #$11
|
0309 04E2 B7 E0 00 STA ACIAC1
|
0309 04E2 B7 E0 00 STA ACIAC1
|
0310 04E5 39 RTS
|
0310 04E5 39 RTS
|
0311 *
|
0311 *
|
0312 * ACIA INPUT
|
0312 * ACIA INPUT
|
0313 *
|
0313 *
|
0314 04E6 86 10 INTER LDA #16
|
0314 04E6 86 10 INTER LDA #16
|
0315 04E8 B7 01 0F STA DELCNT+0
|
0315 04E8 B7 01 0F STA DELCNT+0
|
0316 04EB 7F 01 10 CLR DELCNT+1
|
0316 04EB 7F 01 10 CLR DELCNT+1
|
0317 04EE 7F 01 11 CLR DELCNT+2
|
0317 04EE 7F 01 11 CLR DELCNT+2
|
0318 04F1 B6 E0 00 INTER0 LDA ACIAC1
|
0318 04F1 B6 E0 00 INTER0 LDA ACIAC1
|
0319 04F4 85 01 BITA #$01
|
0319 04F4 85 01 BITA #$01
|
0320 04F6 26 08 BNE INTER1
|
0320 04F6 26 08 BNE INTER1
|
0321 04F8 85 78 BITA #$78
|
0321 04F8 85 78 BITA #$78
|
0322 04FA 27 0A BEQ INTER2
|
0322 04FA 27 0A BEQ INTER2
|
0323 04FC 8D DD BSR ACIRST
|
0323 04FC 8D DD BSR ACIRST
|
0324 04FE 20 E6 BRA INTER
|
0324 04FE 20 E6 BRA INTER
|
0325 *
|
0325 *
|
0326 0500 B6 E0 01 INTER1 LDA ACIAD1
|
0326 0500 B6 E0 01 INTER1 LDA ACIAD1
|
0327 0503 1C 02 ANDCC #VFLAG
|
0327 0503 1C 02 ANDCC #VFLAG
|
0328 0505 39 RTS
|
0328 0505 39 RTS
|
0329 *
|
0329 *
|
0330 0506 7A 01 11 INTER2 DEC DELCNT+2
|
0330 0506 7A 01 11 INTER2 DEC DELCNT+2
|
0331 0509 26 E6 BNE INTER0
|
0331 0509 26 E6 BNE INTER0
|
0332 050B 7A 01 10 DEC DELCNT+1
|
0332 050B 7A 01 10 DEC DELCNT+1
|
0333 050E 26 E1 BNE INTER0
|
0333 050E 26 E1 BNE INTER0
|
0334 0510 7A 01 0F DEC DELCNT+0
|
0334 0510 7A 01 0F DEC DELCNT+0
|
0335 0513 26 DC BNE INTER0
|
0335 0513 26 DC BNE INTER0
|
0336 0515 4F CLRA
|
0336 0515 4F CLRA
|
0337 0516 1A 02 ORCC #VFLAG
|
0337 0516 1A 02 ORCC #VFLAG
|
0338 0518 39 RTS
|
0338 0518 39 RTS
|
0339 *
|
0339 *
|
0340 * ACIA OUTPUT
|
0340 * ACIA OUTPUT
|
0341 *
|
0341 *
|
0342 0519 34 02 OUTTER PSHS A
|
0342 0519 34 02 OUTTER PSHS A
|
0343 *
|
0343 *
|
0344 051B B6 E0 00 OUTTE1 LDA ACIAC1
|
0344 051B B6 E0 00 OUTTE1 LDA ACIAC1
|
0345 051E 85 02 BITA #$02
|
0345 051E 85 02 BITA #$02
|
0346 0520 26 08 BNE OUTTE2
|
0346 0520 26 08 BNE OUTTE2
|
0347 0522 85 78 BITA #$78
|
0347 0522 85 78 BITA #$78
|
0348 0524 27 F5 BEQ OUTTE1
|
0348 0524 27 F5 BEQ OUTTE1
|
0349 0526 8D B3 BSR ACIRST
|
0349 0526 8D B3 BSR ACIRST
|
0350 0528 20 F1 BRA OUTTE1
|
0350 0528 20 F1 BRA OUTTE1
|
0351 *
|
0351 *
|
0352 052A 35 02 OUTTE2 PULS A
|
0352 052A 35 02 OUTTE2 PULS A
|
0353 052C B7 E0 01 STA ACIAD1
|
0353 052C B7 E0 01 STA ACIAD1
|
0354 052F 39 RTS
|
0354 052F 39 RTS
|
0355 *
|
0355 *
|
0356 * Print Data
|
0356 * Print Data
|
0357 *
|
0357 *
|
0358 0530 8D E7 PDATA0 BSR OUTTER
|
0358 0530 8D E7 PDATA0 BSR OUTTER
|
0359 0532 A6 80 PDATA1 LDA ,X+
|
0359 0532 A6 80 PDATA1 LDA ,X+
|
0360 0534 81 04 CMPA #$04
|
0360 0534 81 04 CMPA #$04
|
0361 0536 26 F8 BNE PDATA0
|
0361 0536 26 F8 BNE PDATA0
|
0362 0538 39 RTS
|
0362 0538 39 RTS
|
0363 *
|
0363 *
|
0364 ** FLEX 9 IDE DISK DRIVERS
|
0364 ** FLEX 9 IDE DISK DRIVERS
|
0365 *
|
0365 *
|
0366 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
|
0366 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
|
0367 * WITH I/O MAPPED AT $XE000
|
0367 * WITH I/O MAPPED AT $XE000
|
0368 * AND ROM MAPPED AT $XF000
|
0368 * AND ROM MAPPED AT $XF000
|
0369 *
|
0369 *
|
0370 *
|
0370 *
|
0371 0010 IMASK EQU $10 IRQ MASK CC
|
0371 0010 IMASK EQU $10 IRQ MASK CC
|
0372 0040 FMASK EQU $40 FIRQ MASK CC
|
0372 0040 FMASK EQU $40 FIRQ MASK CC
|
0373 *
|
0373 *
|
0374 E100 CF_BASE EQU $E100
|
0374 E100 CF_BASE EQU $E100
|
0375 E100 CF_DATA EQU CF_BASE+0
|
0375 E100 CF_DATA EQU CF_BASE+0
|
0376 E102 CF_ERROR EQU CF_BASE+2 ; read error
|
0376 E102 CF_ERROR EQU CF_BASE+2 ; read error
|
0377 E102 CF_FEATURE EQU CF_BASE+2 ; write feature
|
0377 E102 CF_FEATURE EQU CF_BASE+2 ; write feature
|
0378 E104 CF_SCNT EQU CF_BASE+4
|
0378 E104 CF_SCNT EQU CF_BASE+4
|
0379 E106 CF_SNUM EQU CF_BASE+6
|
0379 E106 CF_SNUM EQU CF_BASE+6
|
0380 E108 CF_CLO EQU CF_BASE+8
|
0380 E108 CF_CLO EQU CF_BASE+8
|
0381 E10A CF_CHI EQU CF_BASE+10
|
0381 E10A CF_CHI EQU CF_BASE+10
|
0382 E10C CF_HEAD EQU CF_BASE+12
|
0382 E10C CF_HEAD EQU CF_BASE+12
|
0383 E10E CF_STATUS EQU CF_BASE+14 ; read status
|
0383 E10E CF_STATUS EQU CF_BASE+14 ; read status
|
0384 E10E CF_COMAND EQU CF_BASE+14 ; write command
|
0384 E10E CF_COMAND EQU CF_BASE+14 ; write command
|
0385 E11E CF_AUX EQU CF_BASE+30
|
0385 E11E CF_AUX EQU CF_BASE+30
|
0386 *
|
0386 *
|
0387 * Command Equates
|
0387 * Command Equates
|
0388 *
|
0388 *
|
0389 0020 CMDREAD EQU $20 ; Read Single sector
|
0389 0020 CMDREAD EQU $20 ; Read Single sector
|
0390 0030 CMDWRITE EQU $30 ; Write Single sector
|
0390 0030 CMDWRITE EQU $30 ; Write Single sector
|
0391 0006 AUXRESET EQU $06
|
0391 0006 AUXRESET EQU $06
|
0392 0002 AUXRSTREL EQU $02
|
0392 0002 AUXRSTREL EQU $02
|
0393 00E0 HEADLBA EQU $E0
|
0393 00E0 HEADLBA EQU $E0
|
0394 *
|
0394 *
|
0395 * Status bit equates
|
0395 * Status bit equates
|
0396 *
|
0396 *
|
0397 0080 BSY EQU $80
|
0397 0080 BSY EQU $80
|
0398 0040 DRDY EQU $40
|
0398 0040 DRDY EQU $40
|
0399 0008 DRQ EQU $08
|
0399 0008 DRQ EQU $08
|
0400 0001 ERR EQU $01
|
0400 0001 ERR EQU $01
|
0401 *
|
0401 *
|
0402 *
|
0402 *
|
0403 * INITIALIZE CF CARD FOR 8 BIT LBA MODE
|
0403 * INITIALIZE CF CARD FOR 8 BIT LBA MODE
|
0404 *
|
0404 *
|
0405 0539 CC 00 06 INITDR LDD #AUXRESET
|
0405 0539 CC 00 06 INITDR LDD #AUXRESET
|
0406 053C FD E1 1E STD CF_AUX
|
0406 053C FD E1 1E STD CF_AUX
|
0407 053F CC 00 02 LDD #AUXRSTREL
|
0407 053F CC 00 02 LDD #AUXRSTREL
|
0408 0542 FD E1 1E STD CF_AUX
|
0408 0542 FD E1 1E STD CF_AUX
|
0409 0545 CC 00 E0 LDD #HEADLBA
|
0409 0545 CC 00 E0 LDD #HEADLBA
|
0410 0548 FD E1 0C STD CF_HEAD
|
0410 0548 FD E1 0C STD CF_HEAD
|
0411 054B 20 74 BRA WAITRDY
|
0411 054B 20 74 BRA WAITRDY
|
0412 *
|
0412 *
|
0413 * RESTORE DISK DRIVER (SEEK TRACK 00)
|
0413 * RESTORE DISK DRIVER (SEEK TRACK 00)
|
0414 *
|
0414 *
|
0415 054D 8D 62 RESTR1 BSR DRVSEL
|
0415 054D 8D 62 RESTR1 BSR DRVSEL
|
0416 054F 4F CLRA ; Track 0
|
0416 054F 4F CLRA ; Track 0
|
0417 0550 C6 01 LDB #$01 ; Sector 1
|
0417 0550 C6 01 LDB #$01 ; Sector 1
|
0418 *
|
0418 *
|
0419 * Seek track and sector
|
0419 * Seek track and sector
|
0420 * A holds track number (0 - ??)
|
0420 * A holds track number (0 - ??)
|
0421 * B holds sector number (1 - ??)
|
0421 * B holds sector number (1 - ??)
|
0422 * Sector numbers starts from 1
|
0422 * Sector numbers starts from 1
|
0423 * subtract 1 to start from sector 0 on CF
|
0423 * subtract 1 to start from sector 0 on CF
|
0424 *
|
0424 *
|
0425 0552 34 02 SEEKTS PSHS A
|
0425 0552 34 02 SEEKTS PSHS A
|
0426 0554 4F CLRA
|
0426 0554 4F CLRA
|
0427 0555 5A DECB
|
0427 0555 5A DECB
|
0428 0556 FD E1 06 STD CF_SNUM
|
0428 0556 FD E1 06 STD CF_SNUM
|
0429 0559 E6 E4 LDB ,S
|
0429 0559 E6 E4 LDB ,S
|
0430 055B FD E1 08 STD CF_CLO
|
0430 055B FD E1 08 STD CF_CLO
|
0431 055E F6 01 07 LDB DRVNUM
|
0431 055E F6 01 07 LDB DRVNUM
|
0432 0561 FD E1 0A STD CF_CHI
|
0432 0561 FD E1 0A STD CF_CHI
|
0433 0564 C6 01 LDB #$01
|
0433 0564 C6 01 LDB #$01
|
0434 0566 FD E1 04 STD CF_SCNT
|
0434 0566 FD E1 04 STD CF_SCNT
|
0435 0569 5F CLRB
|
0435 0569 5F CLRB
|
0436 056A 35 82 PULS A,PC
|
0436 056A 35 82 PULS A,PC
|
0437 *
|
0437 *
|
0438 * READ SECTORS FROM CF
|
0438 * READ SECTORS FROM CF
|
0439 *
|
0439 *
|
0440 *
|
0440 *
|
0441 056C 8D E4 READSC BSR SEEKTS
|
0441 056C 8D E4 READSC BSR SEEKTS
|
0442 056E CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
|
0442 056E CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
|
0443 0571 FD E1 0E STD CF_COMAND
|
0443 0571 FD E1 0E STD CF_COMAND
|
0444 0574 8D 4B BSR WAITRDY
|
0444 0574 8D 4B BSR WAITRDY
|
0445 *
|
0445 *
|
0446 * READ LOOP
|
0446 * READ LOOP
|
0447 *
|
0447 *
|
0448 0576 34 20 PSHS Y
|
0448 0576 34 20 PSHS Y
|
0449 0578 10 8E 01 00 LDY #256
|
0449 0578 10 8E 01 00 LDY #256
|
0450 057C 8D 52 RDLP1 BSR WAITDRQ
|
0450 057C 8D 52 RDLP1 BSR WAITDRQ
|
0451 057E FC E1 00 LDD CF_DATA
|
0451 057E FC E1 00 LDD CF_DATA
|
0452 0581 E7 80 STB ,X+
|
0452 0581 E7 80 STB ,X+
|
0453 0583 31 3F LEAY -1,Y
|
0453 0583 31 3F LEAY -1,Y
|
0454 0585 26 F5 BNE RDLP1
|
0454 0585 26 F5 BNE RDLP1
|
0455 0587 35 20 PULS Y
|
0455 0587 35 20 PULS Y
|
0456 *
|
0456 *
|
0457 0589 8D 36 BSR WAITRDY
|
0457 0589 8D 36 BSR WAITRDY
|
0458 058B 5F CLRB
|
0458 058B 5F CLRB
|
0459 058C 39 RTS
|
0459 058C 39 RTS
|
0460 *
|
0460 *
|
0461 * WRITE SECTOR TO CF
|
0461 * WRITE SECTOR TO CF
|
0462 *
|
0462 *
|
0463 058D 8D C3 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR
|
0463 058D 8D C3 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR
|
0464 058F CC 00 30 LDD #CMDWRITE ; IDE WRITE MULTIPLE
|
0464 058F CC 00 30 LDD #CMDWRITE ; IDE WRITE MULTIPLE
|
0465 0592 FD E1 0E STD CF_COMAND
|
0465 0592 FD E1 0E STD CF_COMAND
|
0466 0595 8D 2A BSR WAITRDY
|
0466 0595 8D 2A BSR WAITRDY
|
0467 *
|
0467 *
|
0468 * WRITE LOOP
|
0468 * WRITE LOOP
|
0469 *
|
0469 *
|
0470 0597 34 20 PSHS Y
|
0470 0597 34 20 PSHS Y
|
0471 0599 10 8E 01 00 LDY #256
|
0471 0599 10 8E 01 00 LDY #256
|
0472 059D 4F CLRA
|
0472 059D 4F CLRA
|
0473 059E 8D 30 WRTLP1 BSR WAITDRQ
|
0473 059E 8D 30 WRTLP1 BSR WAITDRQ
|
0474 05A0 E6 80 LDB ,X+
|
0474 05A0 E6 80 LDB ,X+
|
0475 05A2 FD E1 00 STD CF_DATA
|
0475 05A2 FD E1 00 STD CF_DATA
|
0476 05A5 31 3F LEAY -1,Y
|
0476 05A5 31 3F LEAY -1,Y
|
0477 05A7 26 F5 BNE WRTLP1
|
0477 05A7 26 F5 BNE WRTLP1
|
0478 05A9 35 20 PULS Y
|
0478 05A9 35 20 PULS Y
|
0479 *
|
0479 *
|
0480 05AB 8D 14 BSR WAITRDY
|
0480 05AB 8D 14 BSR WAITRDY
|
0481 05AD 5F CLRB
|
0481 05AD 5F CLRB
|
0482 05AE 39 RTS
|
0482 05AE 39 RTS
|
0483 *
|
0483 *
|
0484 * CHECK FOR BUSY
|
0484 * CHECK FOR BUSY
|
0485 * Doubles as VERIFY
|
0485 * Doubles as VERIFY
|
0486 *
|
0486 *
|
0487 05AF 5F BUSY CLRB Never busy
|
0487 05AF 5F BUSY CLRB Never busy
|
0488 05B0 39 RTS
|
0488 05B0 39 RTS
|
0489 *
|
0489 *
|
0490 * DRIVE SELECT DISK DRIVER
|
0490 * DRIVE SELECT DISK DRIVER
|
0491 *
|
0491 *
|
0492 05B1 A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB
|
0492 05B1 A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB
|
0493 05B3 81 03 CMPA #3
|
0493 05B3 81 03 CMPA #3
|
0494 05B5 23 01 BLS DRVS2 IF > 3, SET IT TO 0
|
0494 05B5 23 01 BLS DRVS2 IF > 3, SET IT TO 0
|
0495 05B7 4F CLRA
|
0495 05B7 4F CLRA
|
0496 05B8 B7 01 07 DRVS2 STA DRVNUM
|
0496 05B8 B7 01 07 DRVS2 STA DRVNUM
|
0497 05BB 5F CLRB ; SET Z, CLEAR C
|
0497 05BB 5F CLRB ; SET Z, CLEAR C
|
0498 05BC 39 RTS
|
0498 05BC 39 RTS
|
0499 *
|
0499 *
|
0500 * CHECK DRIVE READY DISK DRIVER
|
0500 * CHECK DRIVE READY DISK DRIVER
|
0501 *
|
0501 *
|
0502 05BD A6 03 CHKDRV LDA 3,X
|
0502 05BD A6 03 CHKDRV LDA 3,X
|
0503 05BF 5F CLRB ; CLEAR C, SET Z
|
0503 05BF 5F CLRB ; CLEAR C, SET Z
|
0504 05C0 39 RTS
|
0504 05C0 39 RTS
|
0505 *
|
0505 *
|
0506 * WAIT UNTIL READY
|
0506 * WAIT UNTIL READY
|
0507 *
|
0507 *
|
0508 05C1 FC E1 0E WAITRDY LDD CF_STATUS
|
0508 05C1 FC E1 0E WAITRDY LDD CF_STATUS
|
0509 05C4 C5 80 BITB #BSY
|
0509 05C4 C5 80 BITB #BSY
|
0510 05C6 26 F9 BNE WAITRDY
|
0510 05C6 26 F9 BNE WAITRDY
|
0511 05C8 FC E1 0E LDD CF_STATUS
|
0511 05C8 FC E1 0E LDD CF_STATUS
|
0512 05CB C5 40 BITB #DRDY
|
0512 05CB C5 40 BITB #DRDY
|
0513 05CD 27 F2 BEQ WAITRDY
|
0513 05CD 27 F2 BEQ WAITRDY
|
0514 05CF 39 RTS
|
0514 05CF 39 RTS
|
0515 *
|
0515 *
|
0516 * WAIT FOR DATA REQUEST
|
0516 * WAIT FOR DATA REQUEST
|
0517 *
|
0517 *
|
0518 05D0 FC E1 0E WAITDRQ LDD CF_STATUS
|
0518 05D0 FC E1 0E WAITDRQ LDD CF_STATUS
|
0519 05D3 C5 08 BITB #DRQ
|
0519 05D3 C5 08 BITB #DRQ
|
0520 05D5 27 F9 BEQ WAITDRQ
|
0520 05D5 27 F9 BEQ WAITDRQ
|
0521 05D7 39 RTS
|
0521 05D7 39 RTS
|
0522 *
|
0522 *
|
0523 *******************************************************
|
0523 *******************************************************
|
0524 *
|
0524 *
|
0525 * Bootstrap FLEX Loader
|
0525 * Bootstrap FLEX Loader
|
0526 *
|
0526 *
|
0527 * SBUG1.8 loads the bootstap loader at $C000
|
0527 * SBUG1.8 loads the bootstap loader at $C000
|
0528 * however the Flex adaption manual has the
|
0528 * however the Flex adaption manual has the
|
0529 * bootstrap loader residing at $C100
|
0529 * bootstrap loader residing at $C100
|
0530 *
|
0530 *
|
0531 ******************************************************
|
0531 ******************************************************
|
0532 *
|
0532 *
|
0533 * Equates
|
0533 * Equates
|
0534 *
|
0534 *
|
0535 C0FF STACK EQU $C0FF
|
0535 C0FF STACK EQU $C0FF
|
0536 C300 SCTBUF EQU $C300
|
0536 C300 SCTBUF EQU $C300
|
0537 *
|
0537 *
|
0538 * Start of Utility
|
0538 * Start of Utility
|
0539 *
|
0539 *
|
0540 C000 ORG $C000
|
0540 C000 ORG $C000
|
0541 C000 20 0B BOOT BRA LOAD0
|
0541 C000 20 0B BOOT BRA LOAD0
|
0542 C002 00 00 00 FCB 0,0,0
|
0542 C002 00 00 00 FCB 0,0,0
|
0543 C005 00 TRK FCB 0 File start track
|
0543 C005 00 TRK FCB 0 File start track
|
0544 C006 00 SCT FCB 0 File start sector
|
0544 C006 00 SCT FCB 0 File start sector
|
0545 C007 00 DNS FCB 0 Density Flag (not used)
|
0545 C007 00 DNS FCB 0 Density Flag (not used)
|
0546 C008 C0 00 TADR FDB $C000 Transfer address
|
0546 C008 C0 00 TADR FDB $C000 Transfer address
|
0547 C00A 00 00 LADR FDB 0 Load Address
|
0547 C00A 00 00 LADR FDB 0 Load Address
|
0548 C00C 00 DRNUM FCB 0 Drive number 0
|
0548 C00C 00 DRNUM FCB 0 Drive number 0
|
0549 *
|
0549 *
|
0550 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack
|
0550 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack
|
0551 C011 FC C0 05 LDD TRK Set up start track and sector
|
0551 C011 FC C0 05 LDD TRK Set up start track and sector
|
0552 C014 FD C3 00 STD SCTBUF
|
0552 C014 FD C3 00 STD SCTBUF
|
0553 C017 10 8E C4 00 LDY #SCTBUF+256
|
0553 C017 10 8E C4 00 LDY #SCTBUF+256
|
0554 *
|
0554 *
|
0555 * Perform actual file load
|
0555 * Perform actual file load
|
0556 *
|
0556 *
|
0557 C01B 8D 35 LOAD1 BSR GETCH Get acharcater
|
0557 C01B 8D 35 LOAD1 BSR GETCH Get acharcater
|
0558 C01D 81 02 CMPA #$02 Data record hearder ?
|
0558 C01D 81 02 CMPA #$02 Data record hearder ?
|
0559 C01F 27 10 BEQ LOAD2 Skip, is so
|
0559 C01F 27 10 BEQ LOAD2 Skip, is so
|
0560 C021 81 16 CMPA #$16 Xfr address hearder ?
|
0560 C021 81 16 CMPA #$16 Xfr address hearder ?
|
0561 C023 26 F6 BNE LOAD1 Loop if neither
|
0561 C023 26 F6 BNE LOAD1 Loop if neither
|
0562 *
|
0562 *
|
0563 * Get transfer address
|
0563 * Get transfer address
|
0564 *
|
0564 *
|
0565 C025 8D 2B BSR GETCH
|
0565 C025 8D 2B BSR GETCH
|
0566 C027 B7 C0 08 STA TADR
|
0566 C027 B7 C0 08 STA TADR
|
0567 C02A 8D 26 BSR GETCH
|
0567 C02A 8D 26 BSR GETCH
|
0568 C02C B7 C0 09 STA TADR+1
|
0568 C02C B7 C0 09 STA TADR+1
|
0569 C02F 20 EA BRA LOAD1
|
0569 C02F 20 EA BRA LOAD1
|
0570 *
|
0570 *
|
0571 * Load data record
|
0571 * Load data record
|
0572 *
|
0572 *
|
0573 C031 8D 1F LOAD2 BSR GETCH Get load address
|
0573 C031 8D 1F LOAD2 BSR GETCH Get load address
|
0574 C033 B7 C0 0A STA LADR
|
0574 C033 B7 C0 0A STA LADR
|
0575 C036 8D 1A BSR GETCH
|
0575 C036 8D 1A BSR GETCH
|
0576 C038 B7 C0 0B STA LADR+1
|
0576 C038 B7 C0 0B STA LADR+1
|
0577 C03B 8D 15 BSR GETCH Get Bytes count
|
0577 C03B 8D 15 BSR GETCH Get Bytes count
|
0578 C03D 1F 89 TFR A,B
|
0578 C03D 1F 89 TFR A,B
|
0579 C03F 5D TSTB
|
0579 C03F 5D TSTB
|
0580 C040 27 D9 BEQ LOAD1 Loop if count = 0
|
0580 C040 27 D9 BEQ LOAD1 Loop if count = 0
|
0581 C042 BE C0 0A LDX LADR Get load address
|
0581 C042 BE C0 0A LDX LADR Get load address
|
0582 C045 34 14 LOAD3 PSHS B,X
|
0582 C045 34 14 LOAD3 PSHS B,X
|
0583 C047 8D 09 BSR GETCH Get data character
|
0583 C047 8D 09 BSR GETCH Get data character
|
0584 C049 35 14 PULS B,X
|
0584 C049 35 14 PULS B,X
|
0585 C04B A7 80 STA ,X+ Store at load address
|
0585 C04B A7 80 STA ,X+ Store at load address
|
0586 C04D 5A DECB
|
0586 C04D 5A DECB
|
0587 C04E 26 F5 BNE LOAD3 Loop until count = 0
|
0587 C04E 26 F5 BNE LOAD3 Loop until count = 0
|
0588 C050 20 C9 BRA LOAD1
|
0588 C050 20 C9 BRA LOAD1
|
0589 *
|
0589 *
|
0590 * Get Character routine
|
0590 * Get Character routine
|
0591 * Reads a sector if needed
|
0591 * Reads a sector if needed
|
0592 *
|
0592 *
|
0593 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
|
0593 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
|
0594 C056 26 0F BNE GETCH4 Go read Character if not
|
0594 C056 26 0F BNE GETCH4 Go read Character if not
|
0595 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
|
0595 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
|
0596 C05B EC 84 LDD 0,X Get forward Link
|
0596 C05B EC 84 LDD 0,X Get forward Link
|
0597 C05D 27 0B BEQ GO if zero, file is loaded
|
0597 C05D 27 0B BEQ GO if zero, file is loaded
|
0598 C05F 8D 27 BSR READ Read next sector
|
0598 C05F 8D 27 BSR READ Read next sector
|
0599 C061 26 9D BNE BOOT start over if error
|
0599 C061 26 9D BNE BOOT start over if error
|
0600 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link
|
0600 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link
|
0601 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character
|
0601 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character
|
0602 C069 39 RTS
|
0602 C069 39 RTS
|
0603 *
|
0603 *
|
0604 * File is loaded, Jump to it
|
0604 * File is loaded, Jump to it
|
0605 *
|
0605 *
|
0606 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address
|
0606 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address
|
0607
|
0607
|
0608 *
|
0608 *
|
0609 ** FLEX 9 IDE DISK DRIVERS
|
0609 ** FLEX 9 IDE DISK DRIVERS
|
0610 *
|
0610 *
|
0611 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
|
0611 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
|
0612 * WITH I/O MAPPED AT $XE000
|
0612 * WITH I/O MAPPED AT $XE000
|
0613 * AND ROM MAPPED AT $XF000
|
0613 * AND ROM MAPPED AT $XF000
|
0614 *
|
0614 *
|
0615 *IMASK EQU $10 IRQ MASK CC
|
0615 *IMASK EQU $10 IRQ MASK CC
|
0616 *FMASK EQU $40 FIRQ MASK CC
|
0616 *FMASK EQU $40 FIRQ MASK CC
|
0617 *
|
0617 *
|
0618 *CF_BASE EQU $E100
|
0618 *CF_BASE EQU $E100
|
0619 *CF_DATA EQU CF_BASE+0
|
0619 *CF_DATA EQU CF_BASE+0
|
0620 *CF_ERROR EQU CF_BASE+2 ; read error
|
0620 *CF_ERROR EQU CF_BASE+2 ; read error
|
0621 *CF_FEATURE EQU CF_BASE+2 ; write feature
|
0621 *CF_FEATURE EQU CF_BASE+2 ; write feature
|
0622 *CF_SCNT EQU CF_BASE+4
|
0622 *CF_SCNT EQU CF_BASE+4
|
0623 *CF_SNUM EQU CF_BASE+6
|
0623 *CF_SNUM EQU CF_BASE+6
|
0624 *CF_CLO EQU CF_BASE+8
|
0624 *CF_CLO EQU CF_BASE+8
|
0625 *CF_CHI EQU CF_BASE+10
|
0625 *CF_CHI EQU CF_BASE+10
|
0626 *CF_HEAD EQU CF_BASE+12
|
0626 *CF_HEAD EQU CF_BASE+12
|
0627 *CF_STATUS EQU CF_BASE+14 ; read status
|
0627 *CF_STATUS EQU CF_BASE+14 ; read status
|
0628 *CF_COMAND EQU CF_BASE+14 ; write command
|
0628 *CF_COMAND EQU CF_BASE+14 ; write command
|
0629 *CF_AUX EQU CF_BASE+30
|
0629 *CF_AUX EQU CF_BASE+30
|
0630 *
|
0630 *
|
0631 * Command Equates
|
0631 * Command Equates
|
0632 *
|
0632 *
|
0633 *CMDREAD EQU $20 ; Read Single sector
|
0633 *CMDREAD EQU $20 ; Read Single sector
|
0634 *CMDWRITE EQU $30 ; Write Single sector
|
0634 *CMDWRITE EQU $30 ; Write Single sector
|
0635 *HEADLBA EQU $E0
|
0635 *HEADLBA EQU $E0
|
0636 *AUXRESET EQU $06
|
0636 *AUXRESET EQU $06
|
0637 *AUXRSTREL EQU $02
|
0637 *AUXRSTREL EQU $02
|
0638 *
|
0638 *
|
0639 * Status bit equates
|
0639 * Status bit equates
|
0640 *
|
0640 *
|
0641 *BSY EQU $80
|
0641 *BSY EQU $80
|
0642 *DRDY EQU $40
|
0642 *DRDY EQU $40
|
0643 *DRQ EQU $08
|
0643 *DRQ EQU $08
|
0644 *ERR EQU $01
|
0644 *ERR EQU $01
|
0645 *
|
0645 *
|
0646 * Seek track and sector
|
0646 * Seek track and sector
|
0647 * A holds track number (0 - ??)
|
0647 * A holds track number (0 - ??)
|
0648 * B holds sector number (1 - ??)
|
0648 * B holds sector number (1 - ??)
|
0649 * Sector numbers starts from 1
|
0649 * Sector numbers starts from 1
|
0650 * subtract 1 to start from sector 0 on CF
|
0650 * subtract 1 to start from sector 0 on CF
|
0651 *
|
0651 *
|
0652 C06E 34 02 SEEK PSHS A
|
0652 C06E 34 02 SEEK PSHS A
|
0653 C070 4F CLRA
|
0653 C070 4F CLRA
|
0654 C071 5A DECB
|
0654 C071 5A DECB
|
0655 C072 FD E1 06 STD CF_SNUM
|
0655 C072 FD E1 06 STD CF_SNUM
|
0656 C075 E6 E4 LDB ,S
|
0656 C075 E6 E4 LDB ,S
|
0657 C077 FD E1 08 STD CF_CLO
|
0657 C077 FD E1 08 STD CF_CLO
|
0658 C07A F6 C0 0C LDB DRNUM
|
0658 C07A F6 C0 0C LDB DRNUM
|
0659 C07D FD E1 0A STD CF_CHI
|
0659 C07D FD E1 0A STD CF_CHI
|
0660 C080 C6 01 LDB #$01
|
0660 C080 C6 01 LDB #$01
|
0661 C082 FD E1 04 STD CF_SCNT
|
0661 C082 FD E1 04 STD CF_SCNT
|
0662 C085 5F CLRB
|
0662 C085 5F CLRB
|
0663 C086 35 82 PULS A,PC
|
0663 C086 35 82 PULS A,PC
|
0664 *
|
0664 *
|
0665 * READ SECTORS FROM CF
|
0665 * READ SECTORS FROM CF
|
0666 *
|
0666 *
|
0667 *
|
0667 *
|
0668 C088 8D E4 READ BSR SEEK
|
0668 C088 8D E4 READ BSR SEEK
|
0669 C08A CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
|
0669 C08A CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
|
0670 C08D FD E1 0E STD CF_COMAND
|
0670 C08D FD E1 0E STD CF_COMAND
|
0671 C090 8D 17 BSR WTRDY
|
0671 C090 8D 17 BSR WTRDY
|
0672 *
|
0672 *
|
0673 * READ LOOP
|
0673 * READ LOOP
|
0674 *
|
0674 *
|
0675 C092 34 20 PSHS Y
|
0675 C092 34 20 PSHS Y
|
0676 C094 10 8E 01 00 LDY #256
|
0676 C094 10 8E 01 00 LDY #256
|
0677 C098 8D 1E READ1 BSR WTDRQ
|
0677 C098 8D 1E READ1 BSR WTDRQ
|
0678 C09A FC E1 00 LDD CF_DATA
|
0678 C09A FC E1 00 LDD CF_DATA
|
0679 C09D E7 80 STB ,X+
|
0679 C09D E7 80 STB ,X+
|
0680 C09F 31 3F LEAY -1,Y
|
0680 C09F 31 3F LEAY -1,Y
|
0681 C0A1 26 F5 BNE READ1
|
0681 C0A1 26 F5 BNE READ1
|
0682 C0A3 35 20 PULS Y
|
0682 C0A3 35 20 PULS Y
|
0683 *
|
0683 *
|
0684 C0A5 8D 02 BSR WTRDY
|
0684 C0A5 8D 02 BSR WTRDY
|
0685 C0A7 5F CLRB
|
0685 C0A7 5F CLRB
|
0686 C0A8 39 RTS
|
0686 C0A8 39 RTS
|
0687 *
|
0687 *
|
0688 * WAIT UNTIL READY
|
0688 * WAIT UNTIL READY
|
0689 *
|
0689 *
|
0690 C0A9 FC E1 0E WTRDY LDD CF_STATUS
|
0690 C0A9 FC E1 0E WTRDY LDD CF_STATUS
|
0691 C0AC C5 80 BITB #BSY
|
0691 C0AC C5 80 BITB #BSY
|
0692 C0AE 26 F9 BNE WTRDY
|
0692 C0AE 26 F9 BNE WTRDY
|
0693 C0B0 FC E1 0E LDD CF_STATUS
|
0693 C0B0 FC E1 0E LDD CF_STATUS
|
0694 C0B3 C5 40 BITB #DRDY
|
0694 C0B3 C5 40 BITB #DRDY
|
0695 C0B5 27 F2 BEQ WTRDY
|
0695 C0B5 27 F2 BEQ WTRDY
|
0696 C0B7 39 RTS
|
0696 C0B7 39 RTS
|
0697 *
|
0697 *
|
0698 * WAIT FOR DATA REQUEST
|
0698 * WAIT FOR DATA REQUEST
|
0699 *
|
0699 *
|
0700 C0B8 FC E1 0E WTDRQ LDD CF_STATUS
|
0700 C0B8 FC E1 0E WTDRQ LDD CF_STATUS
|
0701 C0BB C5 08 BITB #DRQ
|
0701 C0BB C5 08 BITB #DRQ
|
0702 C0BD 27 F9 BEQ WTDRQ
|
0702 C0BD 27 F9 BEQ WTDRQ
|
0703 C0BF 39 RTS
|
0703 C0BF 39 RTS
|
0704 *
|
0704 *
|
0705 END START
|
0705 END START
|
Program + Init Data = 940 bytes
|
Program + Init Data = 940 bytes
|
Error count = 0
|
Error count = 0
|
|
|