LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Fri Mar 14 16:52:54 CET 2008
    Subject: [cvs-checkins] MODIFIED: System09 ...
    Top
    Date: 00/08/03 14:16:52

    Added: System09/src/upld upld_cf8.lst upld_cf8.s19 upld_cf8.sh
    upld_cf8.txt upld_ide.lst upld_ide.s19 upld_ide.txt
    Log:
    Updated software - XSA-3S1000 now runs FLEX on an IDE drive or CF card.


    Revision Changes Path
    1.1 System09/src/upld/upld_cf8.lst

    http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_cf8.lst?rev=1.1&content-type=text/x-cvsweb-markup

    Index: upld_cf8.lst
    ===================================================================
    Assembler release DWC_2.0 version 2.11
    May 6, 2004 (c) Motorola (free ware)
    0001 *
    0002 ** FLEX 9 DISK DRIVERS
    0003 *
    0004 * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD
    0005 * WITH I/O MAPPED AT $XE000
    0006 * AND ROM MAPPED AT $XF000
    0007 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM
    0008 * THE FIRST 64K IS USED BY FLEX,
    0009 * THE SECOND 128K IS USED AS A ROM DISK
    0010 * THE REMAINING RAM IS USED FOR A RAM DISK
    0011 *
    0012 *
    0013 0001 CFLAG EQU $01 CARRY FLAG
    0014 0002 VFLAG EQU $02 OVERFLOW FLAG
    0015 0004 ZFLAG EQU $04 ZERO FLAG
    0016 0008 NFLAG EQU $08 NEGATIVE FLAG
    0017 0010 IFLAG EQU $10 IRQ MASK CC
    0018 0020 HFLAG EQU $20 HALF CARRY
    0019 0040 FFLAG EQU $40 FIRQ MASK CC
    0020 0080 EFLAG EQU $80 ENTIRE FLAG
    0021 *
    0022 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS
    0023 *
    0024 * Serial Port
    0025 *
    0026 E000 ACIAS EQU $E000
    0027 E000 ACIAC1 EQU ACIAS
    0028 E001 ACIAD1 EQU ACIAS+1
    0029 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)
    0030 *
    0031 * XMODEM Control characters
    0032 *
    0033 0001 SOH EQU $01
    0034 0004 EOT EQU $04
    0035 0006 ACK EQU $06
    0036 0015 NAK EQU $15
    0037 0018 CAN EQU $18
    0038 *
    0039 * Some dummy Constants
    0040 *
    0041 0030 RMAXTRK EQU 48
    0042 000E RMAXSEC EQU 14
    0043 0292 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
    0044 *
    0045 * Start
    0046 *
    0047 0100 ORG $0100
    0048 0100 17 02 C3 START LBSR UXSUB
    0049 0103 6E 9F F8 00 JMP [$F800] Jump to monitor on Completion.
    0050 *
    0051 *
    0052 * RAM SPACE
    0053 *
    0054 0107 00 DRVNUM FCB 0
    0055 0108 00 TRACK FCB 0
    0056 0109 00 SECTOR FCB 0
    0057 010A 00 CHKSUM FCB 0
    0058 010B 00 BLKNUM FCB 0 Xmodem block number
    0059 010C 00 BYTCNT FCB 0 Xmodem byte count
    0060 010D 00 00 XSTATE FDB 0 Xmodem State Vector
    0061 010F 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer
    0062 0112 00 MAXTRK FCB 0
    0063 0113 00 MAXSEC FCB 0
    0064 0200 ORG $0200
    0065 *
    0066 * SECTOR BUFFER
    0067 *
    0068 0200 BUFFER RMB 256
    0069 *
    0070 * ACIA INPUT TEST
    0071 *
    0072 0300 B6 E0 00 INTEST LDA ACIAC1
    0073 0303 85 01 BITA #$01
    0074 0305 39 RTS
    0075 *
    0076 * RESET ACIA
    0077 *
    0078 0306 86 03 ACIRST LDA #$03 master reset
    0079 0308 B7 E0 00 STA ACIAC1
    0080 030B 86 11 LDA #$11
    0081 030D B7 E0 00 STA ACIAC1
    0082 0310 39 RTS
    0083 *
    0084 * ACIA INPUT
    0085 *
    0086 0311 86 10 INTER LDA #16 0087 0313 B7 01 0F STA DELCNT+0 0088 0316 7F 01 10 CLR DELCNT+1 0089 0319 7F 01 11 CLR DELCNT+2 0090 031C B6 E0 00 INTER0 LDA ACIAC1 0091 031F 85 01 BITA #$01 0092 0321 26 08 BNE INTER1 0093 0323 85 78 BITA #$78 0094 0325 27 0A BEQ INTER2 0095 0327 8D DD BSR ACIRST 0096 0329 20 E6 BRA INTER 0097 * 0098 032B B6 E0 01 INTER1 LDA ACIAD1 0099 032E 1C FD ANDCC #$FF-VFLAG 0100 0330 39 RTS 0101 * 0102 0331 7A 01 11 INTER2 DEC DELCNT+2 0103 0334 26 E6 BNE INTER0 0104 0336 7A 01 10 DEC DELCNT+1 0105 0339 26 E1 BNE INTER0 0106 033B 7A 01 0F DEC DELCNT+0 0107 033E 26 DC BNE INTER0 0108 0340 4F CLRA 0109 0341 1A 02 ORCC #VFLAG 0110 0343 39 RTS 0111 * 0112 * ACIA OUTPUT 0113 * 0114 0344 34 02 OUTTER PSHS A 0115 * 0116 0346 B6 E0 00 OUTTE1 LDA ACIAC1 0117 0349 85 02 BITA #$02 0118 034B 26 08 BNE OUTTE2 0119 034D 85 78 BITA #$78 0120 034F 27 F5 BEQ OUTTE1 0121 0351 8D B3 BSR ACIRST 0122 0353 20 F1 BRA OUTTE1 0123 * 0124 0355 35 02 OUTTE2 PULS A 0125 0357 B7 E0 01 STA ACIAD1 0126 035A 39 RTS 0127 * 0128 * Print Data 0129 * 0130 035B 8D E7 PDATA0 BSR OUTTER 0131 035D A6 80 PDATA1 LDA ,X+ 0132 035F 81 04 CMPA #$04 0133 0361 26 F8 BNE PDATA0 0134 0363 39 RTS 0135 * 0136 ** 'UX' Xmodem ROM Disk upload 0137 * 0138 0364 0D 0A UXMES0 FCB $0D,$0A 0139 0366 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' 20 52 4F 4D 20 44 69 73 6B 20 55 70 6C 6F 61 64 0140 037C 04 FCB 4 0141 037D 0D 0A UXMES1 FCB $0D,$0A 0142 037F 55 70 6C 6F 61 64 FCC 'Upload Complete' 20 43 6F 6D 70 6C 65 74 65 0143 038E 04 FCB 4 0144 038F 0D 0A UXMES2 FCB $0D,$0A 0145 0391 55 70 6C 6F 61 64 FCC 'Upload Error' 20 45 72 72 6F 72 0146 039D 04 FCB 4 0147 039E 0D 0A UXMSG3 FCB $0D,$0A 0148 03A0 44 72 69 76 65 20 FCC 'Drive Number :' 4E 75 6D 62 65 72 20 3A 0149 03AE 04 FCB 4 0150 03AF 0D 0A UXMSG4 FCB $0D,$0A 0151 03B1 41 72 65 20 59 6F FCC 'Are You Sure ? (Y/N)' 75 20 53 75 72 65 20 3F 20 28 59 2F 4E 29 0152 03C5 04 FCB 4 0153 * 0154 * Print Banner 0155 * 0156 03C6 8E 03 64 UXSUB LDX #UXMES0 0157 03C9 17 FF 91 LBSR PDATA1 0158 * 0159 * Prompt for Disk drive number (0 to 3) 0160 * 0161 03CC 8E 03 9E LDX #UXMSG3 0162 03CF 17 FF 8B LBSR PDATA1 0163 03D2 17 FF 3C UXSUB1 LBSR INTER 0164 03D5 29 FB BVS UXSUB1 0165 03D7 17 FF 6A LBSR OUTTER 0166 03DA 81 30 CMPA #'0 0167 03DC 10 25 01 2E LBLO UXEXIT 0168 03E0 81 33 CMPA #'3 0169 03E2 10 22 01 28 LBHI UXEXIT 0170 03E6 80 30 SUBA #'0 0171 03E8 B7 01 07 STA DRVNUM 0172 * 0173 * Report selected drive 0174 * 0175 03EB 8E 03 9E LDX #UXMSG3 0176 03EE 17 FF 6C LBSR PDATA1 0177 03F1 B6 01 07 LDA DRVNUM 0178 03F4 8B 30 ADDA #'0 0179 03F6 17 FF 4B LBSR OUTTER 0180 * 0181 * Ask for confirmation (Y/N) 0182 * 0183 03F9 8E 03 AF LDX #UXMSG4 0184 03FC 17 FF 5E LBSR PDATA1 0185 03FF 17 FF 0F UXSUB2 LBSR INTER 0186 0402 29 FB BVS UXSUB2 0187 0404 17 FF 3D LBSR OUTTER 0188 0407 84 5F ANDA #$5F 0189 0409 81 4E CMPA #'N 0190 040B 10 27 00 FF LBEQ UXEXIT 0191 040F 81 59 CMPA #'Y 0192 0411 26 B3 BNE UXSUB 0193 * 0194 * We have confirmation ... now load the disk image 0195 * 0196 0413 17 01 B1 LBSR INITDR 0197 0416 CE 05 37 LDU #XSTST 0198 0419 FF 01 0D STU XSTATE 0199 041C 86 01 LDA #1 0200 041E B7 01 0B STA BLKNUM 0201 * 0202 * Sector1 0203 * 0204 0421 8E 02 00 LDX #BUFFER 0205 * 0206 0424 4F CLRA TRACK 0 0207 0425 C6 01 LDB #$01 SECTOR 1 0208 0427 B7 01 08 STA TRACK 0209 042A F7 01 09 STB SECTOR 0210 * 0211 042D 17 00 EA LBSR XREAD 0212 0430 10 25 00 E0 LBCS UXERR 0213 0434 17 01 87 LBSR XACK 0214 0437 17 00 E0 LBSR XREAD 0215 043A 10 25 00 D6 LBCS UXERR 0216 * 0217 043E 8E 02 00 LDX #BUFFER 0218 0441 B6 01 08 LDA TRACK 0219 0444 F6 01 09 LDB SECTOR 0220 0447 17 01 C5 LBSR WRITSC 0221 044A 17 01 71 LBSR XACK 0222 * 0223 * Sector 2 0224 * 0225 044D 8E 02 00 LDX #BUFFER 0226 * 0227 0450 B6 01 08 LDA TRACK 0228 0453 F6 01 09 LDB SECTOR 0229 0456 5C INCB 0230 0457 B7 01 08 STA TRACK 0231 045A F7 01 09 STB SECTOR 0232 * 0233 045D 17 00 BA LBSR XREAD 0234 0460 10 25 00 B0 LBCS UXERR 0235 0464 17 01 57 LBSR XACK 0236 0467 17 00 B0 LBSR XREAD 0237 046A 10 25 00 A6 LBCS UXERR 0238 * 0239 046E 8E 02 00 LDX #BUFFER 0240 0471 B6 01 08 LDA TRACK 0241 0474 F6 01 09 LDB SECTOR 0242 0477 17 01 95 LBSR WRITSC 0243 * 0244 047A 17 01 41 LBSR XACK 0245 * 0246 * Sector 3 - SIR 0247 * 0248 047D 8E 02 00 LDX #BUFFER 0249 * 0250 0480 B6 01 08 LDA TRACK 0251 0483 F6 01 09 LDB SECTOR 0252 0486 5C INCB 0253 0487 B7 01 08 STA TRACK 0254 048A F7 01 09 STB SECTOR 0255 * 0256 048D 17 00 8A LBSR XREAD 0257 0490 10 25 00 80 LBCS UXERR 0258 0494 17 01 27 LBSR XACK 0259 0497 17 00 80 LBSR XREAD 0260 049A 10 25 00 76 LBCS UXERR 0261 * 0262 049E 8E 02 00 LDX #BUFFER 0263 04A1 A6 88 26 LDA 38,X 0264 04A4 4C INCA 0265 04A5 B7 01 12 STA MAXTRK 0266 04A8 E6 88 27 LDB 39,X 0267 04AB 5C INCB 0268 04AC F7 01 13 STB MAXSEC 0269 04AF B6 01 08 LDA TRACK 0270 04B2 F6 01 09 LDB SECTOR 0271 04B5 17 01 57 LBSR WRITSC 0272 * 0273 04B8 17 01 03 LBSR XACK 0274 * 0275 * Sector 4 to Last Track & Sector 0276 * 0277 * 0278 04BB B6 01 08 LDA TRACK 0279 04BE F6 01 09 LDB SECTOR 0280 04C1 5C INCB 0281 * 0282 04C2 8E 02 00 UXLOOP LDX #BUFFER 0283 04C5 B7 01 08 STA TRACK 0284 04C8 F7 01 09 STB SECTOR 0285 * 0286 04CB 17 00 4C LBSR XREAD 0287 04CE 10 25 00 42 LBCS UXERR 0288 04D2 17 00 E9 LBSR XACK 0289 04D5 17 00 42 LBSR XREAD 0290 04D8 10 25 00 38 LBCS UXERR 0291 * 0292 04DC 8E 02 00 LDX #BUFFER 0293 04DF B6 01 08 LDA TRACK 0294 04E2 F6 01 09 LDB SECTOR 0295 04E5 17 01 27 LBSR WRITSC 0296 04E8 17 00 D3 LBSR XACK 0297 * 0298 04EB B6 01 08 LDA TRACK 0299 04EE F6 01 09 LDB SECTOR 0300 04F1 5C INCB 0301 04F2 F1 01 13 CMPB MAXSEC 0302 04F5 26 CB BNE UXLOOP 0303 04F7 C6 01 LDB #1 0304 04F9 4C INCA 0305 04FA B1 01 12 CMPA MAXTRK 0306 04FD 26 C3 BNE UXLOOP 0307 * 0308 * 0309 * Write Boot sector 0310 * 0311 04FF 8E C0 00 LDX #$C000 0312 0502 4F CLRA TRACK 0 0313 0503 C6 01 LDB #$01 SECTOR 1 0314 0505 B7 01 08 STA TRACK 0315 0508 F7 01 09 STB SECTOR 0316 050B 17 01 01 LBSR WRITSC 0317 * 0318 050E 8E 03 7D UXEXIT LDX #UXMES1 0319 0511 7E 03 5D JMP PDATA1 0320 * 0321 0514 8E 03 8F UXERR LDX #UXMES2 0322 0517 16 FE 43 LBRA PDATA1 0323 * 0324 * Get a Byte using XModem protocol 0325 * Carry clear => no errors 0326 * Carry set => errors 0327 * 0328 051A 34 40 XREAD PSHS U 0329 051C FE 01 0D LDU XSTATE 0330 * 0331 051F 17 FD EF XBYTE0 LBSR INTER 0332 0522 28 0A BVC XBYTE1 0333 0524 86 15 LDA #NAK 0334 0526 17 FE 1B LBSR OUTTER 0335 0529 CE 05 37 LDU #XSTST 0336 052C 20 F1 BRA XBYTE0 0337 * 0338 052E AD C4 XBYTE1 JSR ,U 0339 0530 26 ED BNE XBYTE0 0340 0532 FF 01 0D STU XSTATE 0341 0535 35 C0 PULS U,PC 0342 * 0343 * START - LOOK FOR SOH (START OF HEADER) = $01 0344 * 0345 0537 81 01 XSTST CMPA #SOH 0346 0539 26 06 BNE XSTST1 0347 053B CE 05 57 LDU #XSTBL 0348 053E 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0349 0540 39 RTS 0350 * 0351 0541 81 04 XSTST1 CMPA #EOT 0352 0543 26 08 BNE XSTST2 0353 0545 86 06 LDA #ACK 0354 0547 17 FD FA LBSR OUTTER 0355 054A 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit 0356 054C 39 RTS 0357 * 0358 054D 81 18 XSTST2 CMPA #CAN 0359 054F 26 03 BNE XSTST3 0360 0551 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit 0361 0553 39 RTS 0362 * 0363 0554 1C FA XSTST3 ANDCC #$FF-CFLAG-ZFLAG 0364 0556 39 RTS 0365 * 0366 * Got SOH 0367 * Now get block number 0368 * 0369 0557 B1 01 0B XSTBL CMPA BLKNUM 0370 055A 26 06 BNE XSTBLE 0371 055C CE 05 6D LDU #XSTCOM 0372 055F 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0373 0561 39 RTS 0374 * 0375 * Error in block number 0376 * 0377 0562 86 15 XSTBLE LDA #NAK 0378 0564 17 FD DD LBSR OUTTER 0379 0567 CE 05 37 LDU #XSTST 0380 056A 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0381 056C 39 RTS 0382 * 0383 * Get complement of block number 0384 * 0385 056D 43 XSTCOM COMA 0386 056E B1 01 0B CMPA BLKNUM 0387 0571 26 EF BNE XSTBLE 0388 0573 7F 01 0A CLR CHKSUM 0389 0576 86 80 LDA #128 0390 0578 B7 01 0C STA BYTCNT 0391 057B CE 05 81 LDU #XSTDA 0392 057E 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0393 0580 39 RTS 0394 * 0395 * Get data bytes 0396 * 0397 0581 34 02 XSTDA PSHS A 0398 0583 BB 01 0A ADDA CHKSUM 0399 0586 B7 01 0A STA CHKSUM 0400 0589 35 02 PULS A 0401 058B 7A 01 0C DEC BYTCNT 0402 058E 26 03 BNE XSTDA1 0403 0590 CE 05 98 LDU #XSTCK 0404 0593 A7 80 XSTDA1 STA ,X+ 0405 0595 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0406 0597 39 RTS 0407 * 0408 * Byte count reached zero 0409 * Check checksum byte 0410 * 0411 0598 B1 01 0A XSTCK CMPA CHKSUM 0412 059B 26 0B BNE XSTCK1 retry if wrong checksum 0413 * 0414 * Checksum OK ... 0415 * increment block number 0416 * Don't send ACK until data written to CF 0417 * 0418 059D 7C 01 0B INC BLKNUM 0419 05A0 CE 05 37 LDU #XSTST 0420 05A3 1C FE ANDCC #$FF-CFLAG No abort 0421 05A5 1A 04 ORCC #ZFLAG Valid data (exit) 0422 05A7 39 RTS 0423 * 0424 * Checksum Error detected ... 0425 * Reset Sector counter in ACCB to last 128 byte boundary 0426 * and send NAK 0427 * 0428 05A8 34 04 XSTCK1 PSHS B 0429 05AA 1F 10 TFR X,D 0430 05AC 5A DECB 0431 05AD C4 80 ANDB #128 0432 05AF 1F 01 TFR D,X 0433 05B1 35 04 PULS B 0434 05B3 86 15 LDA #NAK 0435 05B5 17 FD 8C XSTCK2 LBSR OUTTER 0436 05B8 CE 05 37 LDU #XSTST 0437 05BB 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0438 05BD 39 RTS 0439 * 0440 * Acknowledge Data Received 0441 * 0442 05BE 34 02 XACK PSHS A 0443 05C0 86 06 LDA #ACK 0444 05C2 17 FD 7F LBSR OUTTER 0445 05C5 35 82 PULS A,PC 0446 * 0447 * 0448 ** FLEX 9 COMPACT FLASH DISK DRIVERS 0449 * 0450 * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300 0451 * WITH I/O MAPPED AT $XE000 0452 * AND ROM MAPPED AT $XF000 0453 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM 0454 * THE FIRST 64K IS USED BY FLEX, 0455 * THE SECOND 192K MAY BE USED AS A RAM DISK 0456 * 0457 * 0458 0010 IMASK EQU $10 IRQ MASK CC 0459 0040 FMASK EQU $40 FIRQ MASK CC 0460 FFF0 DATREG EQU $FFF0 DAT REGISTERS 0461 * 0462 E040 CF_BASE EQU $E040 0463 E040 CF_DATA EQU CF_BASE+0 0464 E041 CF_ERROR EQU CF_BASE+1 ; read error 0465 E041 CF_FEATURE EQU CF_BASE+1 ; write feature 0466 E042 CF_SCNT EQU CF_BASE+2 0467 E043 CF_SNUM EQU CF_BASE+3 0468 E044 CF_CLO EQU CF_BASE+4 0469 E045 CF_CHI EQU CF_BASE+5 0470 E046 CF_HEAD EQU CF_BASE+6 0471 E047 CF_STATUS EQU CF_BASE+7 ; read status 0472 E047 CF_COMAND EQU CF_BASE+7 ; write command 0473 * 0474 * Command Equates 0475 * 0476 0020 CMDREAD EQU $20 ; Read Single sector 0477 0030 CMDWRITE EQU $30 ; Write Single sector 0478 00EF CMDFEATURE EQU $EF 0479 0001 FEAT8BIT EQU $01 ; enable 8 bit transfers 0480 00E0 HEADLBA EQU $E0 0481 * 0482 * Status bit equates 0483 * 0484 0080 BSY EQU $80 0485 0040 DRDY EQU $40 0486 0008 DRQ EQU $08 0487 0001 ERR EQU $01 0488 * 0489 * 0490 * INITIALIZE CF CARD FOR 8 BIT LBA MODE 0491 * 0492 05C7 8D 7A INITDR BSR WAITRDY 0493 05C9 86 E0 LDA #HEADLBA 0494 05CB B7 E0 46 STA CF_HEAD 0495 05CE 86 01 LDA #FEAT8BIT 0496 05D0 B7 E0 41 STA CF_FEATURE 0497 05D3 86 EF LDA #CMDFEATURE 0498 05D5 B7 E0 47 STA CF_COMAND 0499 05D8 20 69 BRA WAITRDY 0500 * 0501 * Seek track and sector 0502 * A holds track number (0 - ??) 0503 * B holds sector number (1 - ??) 0504 * Sector numbers starts from 1 0505 * subtract 1 to start from sector 0 on CF 0506 * 0507 05DA 5A SEEKTS DECB 0508 05DB F7 E0 43 STB CF_SNUM 0509 05DE B7 E0 44 STA CF_CLO 0510 05E1 F6 01 07 LDB DRVNUM 0511 05E4 F7 E0 45 STB CF_CHI 0512 05E7 C6 01 LDB #$01 0513 05E9 F7 E0 42 STB CF_SCNT 0514 05EC 5F CLRB 0515 05ED 39 RTS 0516 * 0517 * READ SECTORS FROM CF 0518 * 0519 * 0520 05EE 8D EA READSC BSR SEEKTS 0521 05F0 86 20 LDA #CMDREAD ; IDE READ MULTIPLE 0522 05F2 B7 E0 47 STA CF_COMAND 0523 05F5 8D 4C BSR WAITRDY 0524 * 0525 * READ LOOP 0526 * 0527 05F7 5F CLRB 0528 05F8 8D 58 RDLP1 BSR WAITDRQ 0529 05FA B6 E0 40 LDA CF_DATA 0530 05FD A7 80 STA ,X+ 0531 05FF 5A DECB 0532 0600 26 F6 BNE RDLP1 0533 * 0534 0602 5F CLRB 0535 0603 8D 4D RDLP2 BSR WAITDRQ 0536 0605 B6 E0 40 LDA CF_DATA 0537 0608 5A DECB 0538 0609 26 F8 BNE RDLP2 0539 * 0540 060B 8D 36 BSR WAITRDY 0541 060D 5F CLRB 0542 060E 39 RTS 0543 * 0544 * WRITE SECTOR TO CF 0545 * 0546 060F 8D C9 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR 0547 0611 86 30 LDA #CMDWRITE ; IDE WRITE MULTIPLE 0548 0613 B7 E0 47 STA CF_COMAND 0549 0616 8D 2B BSR WAITRDY 0550 * 0551 * WRITE LOOP 0552 * 0553 0618 5F CLRB 0554 0619 8D 37 WRTLP1 BSR WAITDRQ 0555 061B A6 80 LDA ,X+ 0556 061D B7 E0 40 STA CF_DATA 0557 0620 5A DECB 0558 0621 26 F6 BNE WRTLP1 0559 * 0560 0623 5F CLRB 0561 0624 8D 2C WRTLP2 BSR WAITDRQ 0562 0626 4F CLRA 0563 0627 B7 E0 40 STA CF_DATA 0564 062A 5A DECB 0565 062B 26 F7 BNE WRTLP2 0566 * 0567 062D 8D 14 BSR WAITRDY 0568 062F 5F CLRB 0569 0630 39 RTS 0570 * 0571 * CHECK FOR BUSY 0572 * Doubles as VERIFY 0573 * 0574 0631 5F BUSY CLRB Never busy 0575 0632 39 RTS 0576 * 0577 * DRIVE SELECT DISK DRIVER 0578 * 0579 0633 A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB 0580 0635 81 03 CMPA #3 0581 0637 23 01 BLS DRVS2 IF > 3, SET IT TO 0 0582 0639 4F CLRA 0583 063A B7 01 07 DRVS2 STA DRVNUM 0584 063D 5F CLRB ; SET Z, CLEAR C 0585 063E 39 RTS 0586 * 0587 * CHECK DRIVE READY DISK DRIVER 0588 * 0589 063F A6 03 CHKDRV LDA 3,X 0590 0641 5F CLRB ; CLEAR C, SET Z 0591 0642 39 RTS 0592 * 0593 * WAIT UNTIL READY 0594 * 0595 0643 B6 E0 47 WAITRDY LDA CF_STATUS 0596 0646 85 80 BITA #BSY 0597 0648 26 F9 BNE WAITRDY 0598 064A B6 E0 47 LDA CF_STATUS 0599 064D 85 40 BITA #DRDY 0600 064F 27 F2 BEQ WAITRDY 0601 0651 39 RTS 0602 * 0603 * WAIT FOR DATA REQUEST 0604 * 0605 0652 B6 E0 47 WAITDRQ LDA CF_STATUS 0606 0655 85 08 BITA #DRQ 0607 0657 27 F9 BEQ WAITDRQ 0608 0659 39 RTS 0609 * 0610 ******************************************************* 0611 * 0612 * Bootstrap FLEX Loader 0613 * 0614 * SBUG1.8 loads the bootstap loader at $C000 0615 * however the Flex adaption manual has the 0616 * bootstrap loader residing at $C100 0617 * 0618 ****************************************************** 0619 * 0620 * Equates 0621 * 0622 C0FF STACK EQU $C0FF 0623 C300 SCTBUF EQU $C300 0624 * 0625 * Start of Utility 0626 * 0627 C000 ORG $C000 0628 C000 20 0B BOOT BRA LOAD0 0629 C002 00 00 00 FCB 0,0,0 0630 C005 00 TRK FCB 0 File start track 0631 C006 00 SCT FCB 0 File start sector 0632 C007 00 DNS FCB 0 Density Flag (not used) 0633 C008 C0 00 TADR FDB $C000 Transfer address 0634 C00A 00 00 LADR FDB 0 Load Address 0635 C00C 00 DRNUM FCB 0 Drive number 0 0636 * 0637 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack 0638 C011 FC C0 05 LDD TRK Set up start track and sector 0639 C014 FD C3 00 STD SCTBUF 0640 C017 10 8E C4 00 LDY #SCTBUF+256 0641 * 0642 * Perform actual file load 0643 * 0644 C01B 8D 35 LOAD1 BSR GETCH Get acharcater 0645 C01D 81 02 CMPA #$02 Data record hearder ? 0646 C01F 27 10 BEQ LOAD2 Skip, is so 0647 C021 81 16 CMPA #$16 Xfr address hearder ? 0648 C023 26 F6 BNE LOAD1 Loop if neither 0649 * 0650 * Get transfer address 0651 * 0652 C025 8D 2B BSR GETCH 0653 C027 B7 C0 08 STA TADR 0654 C02A 8D 26 BSR GETCH 0655 C02C B7 C0 09 STA TADR+1 0656 C02F 20 EA BRA LOAD1 0657 * 0658 * Load data record 0659 * 0660 C031 8D 1F LOAD2 BSR GETCH Get load address 0661 C033 B7 C0 0A STA LADR 0662 C036 8D 1A BSR GETCH 0663 C038 B7 C0 0B STA LADR+1 0664 C03B 8D 15 BSR GETCH Get Bytes count 0665 C03D 1F 89 TFR A,B 0666 C03F 5D TSTB 0667 C040 27 D9 BEQ LOAD1 Loop if count = 0 0668 C042 BE C0 0A LDX LADR Get load address 0669 C045 34 14 LOAD3 PSHS B,X 0670 C047 8D 09 BSR GETCH Get data character 0671 C049 35 14 PULS B,X 0672 C04B A7 80 STA ,X+ Store at load address 0673 C04D 5A DECB 0674 C04E 26 F5 BNE LOAD3 Loop until count = 0 0675 C050 20 C9 BRA LOAD1 0676 * 0677 * Get Character routine 0678 * Reads a sector if needed 0679 * 0680 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ? 0681 C056 26 0F BNE GETCH4 Go read Character if not 0682 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer 0683 C05B EC 84 LDD 0,X Get forward Link 0684 C05D 27 0B BEQ GO if zero, file is loaded 0685 C05F 8D 21 BSR READ Read next sector 0686 C061 26 9D BNE BOOT start over if error 0687 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link 0688 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character 0689 C069 39 RTS 0690 * 0691 * File is loaded, Jump to it 0692 * 0693 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address 0694 0695 * 0696 ** FLEX 9 COMPACT FLASH DISK DRIVERS 0697 * 0698 * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300 0699 * WITH I/O MAPPED AT $XE000 0700 * AND ROM MAPPED AT $XF000 0701 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM 0702 * THE FIRST 64K IS USED BY FLEX, 0703 * THE SECOND 192K MAY BE USED AS A RAM DISK 0704 * 0705 * 0706 *IMASK EQU $10 IRQ MASK CC 0707 *FMASK EQU $40 FIRQ MASK CC 0708 *DATREG EQU $FFF0 DAT REGISTERS 0709 * 0710 *CF_BASE EQU $E040 0711 *CF_DATA EQU CF_BASE+0 0712 *CF_ERROR EQU CF_BASE+1 ; read error 0713 *CF_FEATURE EQU CF_BASE+1 ; write feature 0714 *CF_SCNT EQU CF_BASE+2 0715 *CF_SNUM EQU CF_BASE+3 0716 *CF_CLO EQU CF_BASE+4 0717 *CF_CHI EQU CF_BASE+5 0718 *CF_HEAD EQU CF_BASE+6 0719 *CF_STATUS EQU CF_BASE+7 ; read status 0720 *CF_COMAND EQU CF_BASE+7 ; write command 0721 * 0722 * Command Equates 0723 * 0724 *CMDREAD EQU $20 ; Read Single sector 0725 *CMDWRITE EQU $30 ; Write Single sector 0726 *CMDFEATURE EQU $EF 0727 *FEAT8BIT EQU $01 ; enable 8 bit transfers 0728 *HEADLBA EQU $E0 0729 * 0730 * Status bit equates 0731 * 0732 *BSY EQU $80 0733 *DRDY EQU $40 0734 *DRQ EQU $08 0735 *ERR EQU $01 0736 * 0737 * Seek track and sector 0738 * A holds track number (0 - ??) 0739 * B holds sector number (1 - ??) 0740 * Sector numbers starts from 1 0741 * subtract 1 to start from sector 0 on CF 0742 * 0743 C06E 5A SEEK DECB 0744 C06F F7 E0 43 STB CF_SNUM 0745 C072 B7 E0 44 STA CF_CLO 0746 C075 F6 C0 0C LDB DRNUM 0747 C078 F7 E0 45 STB CF_CHI 0748 C07B C6 01 LDB #$01 0749 C07D F7 E0 42 STB CF_SCNT 0750 C080 5F CLRB 0751 C081 39 RTS 0752 * 0753 * READ SECTORS FROM CF 0754 * 0755 * 0756 C082 8D EA READ BSR SEEK 0757 C084 86 20 LDA #CMDREAD ; IDE READ MULTIPLE 0758 C086 B7 E0 47 STA CF_COMAND 0759 C089 8D 18 BSR WTRDY 0760 * 0761 * READ LOOP 0762 * 0763 C08B 5F CLRB 0764 C08C 8D 24 READ1 BSR WTDRQ 0765 C08E B6 E0 40 LDA CF_DATA 0766 C091 A7 80 STA ,X+ 0767 C093 5A DECB 0768 C094 26 F6 BNE READ1 0769 * 0770 C096 5F CLRB 0771 C097 8D 19 READ2 BSR WTDRQ 0772 C099 B6 E0 40 LDA CF_DATA 0773 C09C 5A DECB 0774 C09D 26 F8 BNE READ2 0775 * 0776 C09F 8D 02 BSR WTRDY 0777 C0A1 5F CLRB 0778 C0A2 39 RTS 0779 * 0780 * WAIT UNTIL READY 0781 * 0782 C0A3 B6 E0 47 WTRDY LDA CF_STATUS 0783 C0A6 85 80 BITA #BSY 0784 C0A8 26 F9 BNE WTRDY 0785 C0AA B6 E0 47 LDA CF_STATUS 0786 C0AD 85 40 BITA #DRDY 0787 C0AF 27 F2 BEQ WTRDY 0788 C0B1 39 RTS 0789 * 0790 * WAIT FOR DATA REQUEST 0791 * 0792 C0B2 B6 E0 47 WTDRQ LDA CF_STATUS 0793 C0B5 85 08 BITA #DRQ 0794 C0B7 27 F9 BEQ WTDRQ 0795 C0B9 39 RTS 0796 * 0797 END START Program + Init Data = 1064 bytes Error count = 0 1.1 System09/src/upld/upld_cf8.s19 http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_cf8.s19?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_cf8.s19 =================================================================== S11701001702C36E9FF8000000000000000000000000000006 S1230300B6E0008501398603B7E0008611B7E000398610B7010F7F01107F0111B6E0008564 S12303200126088578270A8DDD20E6B6E0011CFD397A011126E67A011026E17A010F26DC4D S12303404F1A02393402B6E00085022608857827F58DB320F13502B7E001398DE7A68081E7 S12303600426F8390D0A586D6F64656D20524F4D204469736B2055706C6F6164040D0A55EF S1230380706C6F616420436F6D706C657465040D0A55706C6F6164204572726F72040D0A2B S12303A04472697665204E756D626572203A040D0A41726520596F752053757265203F208E S12303C028592F4E29048E036417FF918E039E17FF8B17FF3C29FB17FF6A81301025012E77 S12303E08133102201288030B701078E039E17FF6CB601078B3017FF4B8E03AF17FF5E1725 S1230400FF0F29FB17FF3D845F814E102700FF815926B31701B1CE0537FF010D8601B70199 S12304200B8E02004FC601B70108F701091700EA102500E01701871700E0102500D68E02FF S123044000B60108F601091701C51701718E0200B60108F601095CB70108F701091700BA36 S1230460102500B01701571700B0102500A68E0200B60108F601091701951701418E02009D S1230480B60108F601095CB70108F7010917008A10250080170127170080102500768E0215 S12304A000A688264CB70112E688275CF70113B60108F60109170157170103B60108F601D3 S12304C0095C8E0200B70108F7010917004C102500421700E9170042102500388E0200B67C S12304E00108F601091701271700D3B60108F601095CF1011326CBC6014CB1011226C38E67 S1230500C0004FC601B70108F701091701018E037D7E035D8E038F16FE433440FE010D172D S1230520FDEF280A861517FE1BCE053720F1ADC426EDFF010D35C081012606CE05571CFA3F S12305403981042608860617FDFA1A0539811826031A05391CFA39B1010B2606CE056D1C0B S1230560FA39861517FDDDCE05371CFA3943B1010B26EF7F010A8680B7010CCE05811CFA8C S1230580393402BB010AB7010A35027A010C2603CE0598A7801CFA39B1010A260B7C010B23 S12305A0CE05371CFE1A043934041F105AC4801F013504861517FD8CCE05371CFA39340294 S12305C0860617FD7F35828D7A86E0B7E0468601B7E04186EFB7E04720695AF7E043B7E0B1 S12305E044F60107F7E045C601F7E0425F398DEA8620B7E0478D4C5F8D58B6E040A7805AB2 S123060026F65F8D4DB6E0405A26F88D365F398DC98630B7E0478D2B5F8D37A680B7E04016 S12306205A26F65F8D2C4FB7E0405A26F78D145F395F39A603810323014FB701075F39A61D S11D0640035F39B6E047858026F9B6E047854027F239B6E047850827F93949 S123C000200B000000000000C00000000010CEC0FFFCC005FDC300108EC4008D3581022745 S123C02010811626F68D2BB7C0088D26B7C00920EA8D1FB7C00A8D1AB7C00B8D151F895DC8 S123C04027D9BEC00A34148D093514A7805A26F520C9108CC400260F8EC300EC84270B8D93 S123C06021269D108EC304A6A0396E9FC0085AF7E043B7E044F6C00CF7E045C601F7E04212 S123C0805F398DEA8620B7E0478D185F8D24B6E040A7805A26F65F8D19B6E0405A26F88D01 S11DC0A0025F39B6E047858026F9B6E047854027F239B6E047850827F93930 S9030000FC 1.1 System09/src/upld/upld_cf8.sh http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_cf8.sh?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_cf8.sh =================================================================== ../../Tools/as09/as09.exe cf8load.txt -l > cf8load.lst 1.1 System09/src/upld/upld_cf8.txt http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_cf8.txt?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_cf8.txt =================================================================== * ** FLEX 9 DISK DRIVERS * * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD * WITH I/O MAPPED AT $XE000 * AND ROM MAPPED AT $XF000 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM * THE FIRST 64K IS USED BY FLEX, * THE SECOND 128K IS USED AS A ROM DISK * THE REMAINING RAM IS USED FOR A RAM DISK * * CFLAG EQU $01 CARRY FLAG VFLAG EQU $02 OVERFLOW FLAG ZFLAG EQU $04 ZERO FLAG NFLAG EQU $08 NEGATIVE FLAG IFLAG EQU $10 IRQ MASK CC HFLAG EQU $20 HALF CARRY FFLAG EQU $40 FIRQ MASK CC EFLAG EQU $80 ENTIRE FLAG * MAPPAG EQU $00 PAGE $0000 DAT ADDRESS * * Serial Port * ACIAS EQU $E000 ACIAC1 EQU ACIAS ACIAD1 EQU ACIAS+1 DELCON EQU 1250 Delay (Processor clock in MHz * 50) * * XMODEM Control characters * SOH EQU $01 EOT EQU $04 ACK EQU $06 NAK EQU $15 CAN EQU $18 * * Some dummy Constants * RMAXTRK EQU 48 RMAXSEC EQU 14 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC * * Start * ORG $0100 START LBSR UXSUB JMP [$F800] Jump to monitor on Completion. * * * RAM SPACE * DRVNUM FCB 0 TRACK FCB 0 SECTOR FCB 0 CHKSUM FCB 0 BLKNUM FCB 0 Xmodem block number BYTCNT FCB 0 Xmodem byte count XSTATE FDB 0 Xmodem State Vector DELCNT FCB $00,$00,$00 Xmodem Poll timer MAXTRK FCB 0 MAXSEC FCB 0 ORG $0200 * * SECTOR BUFFER * BUFFER RMB 256 * * ACIA INPUT TEST * INTEST LDA ACIAC1 BITA #$01 RTS * * RESET ACIA * ACIRST LDA #$03 master reset STA ACIAC1 LDA #$11 STA ACIAC1 RTS * * ACIA INPUT * INTER LDA #16 STA DELCNT+0 CLR DELCNT+1 CLR DELCNT+2 INTER0 LDA ACIAC1 BITA #$01 BNE INTER1 BITA #$78 BEQ INTER2 BSR ACIRST BRA INTER * INTER1 LDA ACIAD1 ANDCC #$FF-VFLAG RTS * INTER2 DEC DELCNT+2 BNE INTER0 DEC DELCNT+1 BNE INTER0 DEC DELCNT+0 BNE INTER0 CLRA ORCC #VFLAG RTS * * ACIA OUTPUT * OUTTER PSHS A * OUTTE1 LDA ACIAC1 BITA #$02 BNE OUTTE2 BITA #$78 BEQ OUTTE1 BSR ACIRST BRA OUTTE1 * OUTTE2 PULS A STA ACIAD1 RTS * * Print Data * PDATA0 BSR OUTTER PDATA1 LDA ,X+ CMPA #$04 BNE PDATA0 RTS * ** 'UX' Xmodem ROM Disk upload * UXMES0 FCB $0D,$0A FCC 'Xmodem ROM Disk Upload' FCB 4 UXMES1 FCB $0D,$0A FCC 'Upload Complete' FCB 4 UXMES2 FCB $0D,$0A FCC 'Upload Error' FCB 4 UXMSG3 FCB $0D,$0A FCC 'Drive Number :' FCB 4 UXMSG4 FCB $0D,$0A FCC 'Are You Sure ? (Y/N)' FCB 4 * * Print Banner * UXSUB LDX #UXMES0 LBSR PDATA1 * * Prompt for Disk drive number (0 to 3) * LDX #UXMSG3 LBSR PDATA1 UXSUB1 LBSR INTER BVS UXSUB1 LBSR OUTTER CMPA #'0 LBLO UXEXIT CMPA #'3 LBHI UXEXIT SUBA #'0 STA DRVNUM * * Report selected drive * LDX #UXMSG3 LBSR PDATA1 LDA DRVNUM ADDA #'0 LBSR OUTTER * * Ask for confirmation (Y/N) * LDX #UXMSG4 LBSR PDATA1 UXSUB2 LBSR INTER BVS UXSUB2 LBSR OUTTER ANDA #$5F CMPA #'N LBEQ UXEXIT CMPA #'Y BNE UXSUB * * We have confirmation ... now load the disk image * LBSR INITDR LDU #XSTST STU XSTATE LDA #1 STA BLKNUM * * Sector1 * LDX #BUFFER * CLRA TRACK 0 LDB #$01 SECTOR 1 STA TRACK STB SECTOR * LBSR XREAD LBCS UXERR LBSR XACK LBSR XREAD LBCS UXERR * LDX #BUFFER LDA TRACK LDB SECTOR LBSR WRITSC LBSR XACK * * Sector 2 * LDX #BUFFER * LDA TRACK LDB SECTOR INCB STA TRACK STB SECTOR * LBSR XREAD LBCS UXERR LBSR XACK LBSR XREAD LBCS UXERR * LDX #BUFFER LDA TRACK LDB SECTOR LBSR WRITSC * LBSR XACK * * Sector 3 - SIR * LDX #BUFFER * LDA TRACK LDB SECTOR INCB STA TRACK STB SECTOR * LBSR XREAD LBCS UXERR LBSR XACK LBSR XREAD LBCS UXERR * LDX #BUFFER LDA 38,X INCA STA MAXTRK LDB 39,X INCB STB MAXSEC LDA TRACK LDB SECTOR LBSR WRITSC * LBSR XACK * * Sector 4 to Last Track & Sector * * LDA TRACK LDB SECTOR INCB * UXLOOP LDX #BUFFER STA TRACK STB SECTOR * LBSR XREAD LBCS UXERR LBSR XACK LBSR XREAD LBCS UXERR * LDX #BUFFER LDA TRACK LDB SECTOR LBSR WRITSC LBSR XACK * LDA TRACK LDB SECTOR INCB CMPB MAXSEC BNE UXLOOP LDB #1 INCA CMPA MAXTRK BNE UXLOOP * * * Write Boot sector * LDX #$C000 CLRA TRACK 0 LDB #$01 SECTOR 1 STA TRACK STB SECTOR LBSR WRITSC * UXEXIT LDX #UXMES1 JMP PDATA1 * UXERR LDX #UXMES2 LBRA PDATA1 * * Get a Byte using XModem protocol * Carry clear => no errors * Carry set => errors * XREAD PSHS U LDU XSTATE * XBYTE0 LBSR INTER BVC XBYTE1 LDA #NAK LBSR OUTTER LDU #XSTST BRA XBYTE0 * XBYTE1 JSR ,U BNE XBYTE0 STU XSTATE PULS U,PC * * START - LOOK FOR SOH (START OF HEADER) = $01 * XSTST CMPA #SOH BNE XSTST1 LDU #XSTBL ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) RTS * XSTST1 CMPA #EOT BNE XSTST2 LDA #ACK LBSR OUTTER ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit RTS * XSTST2 CMPA #CAN BNE XSTST3 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit RTS * XSTST3 ANDCC #$FF-CFLAG-ZFLAG RTS * * Got SOH * Now get block number * XSTBL CMPA BLKNUM BNE XSTBLE LDU #XSTCOM ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) RTS * * Error in block number * XSTBLE LDA #NAK LBSR OUTTER LDU #XSTST ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) RTS * * Get complement of block number * XSTCOM COMA CMPA BLKNUM BNE XSTBLE CLR CHKSUM LDA #128 STA BYTCNT LDU #XSTDA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) RTS * * Get data bytes * XSTDA PSHS A ADDA CHKSUM STA CHKSUM PULS A DEC BYTCNT BNE XSTDA1 LDU #XSTCK XSTDA1 STA ,X+ ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) RTS * * Byte count reached zero * Check checksum byte * XSTCK CMPA CHKSUM BNE XSTCK1 retry if wrong checksum * * Checksum OK ... * increment block number * Don't send ACK until data written to CF * INC BLKNUM LDU #XSTST ANDCC #$FF-CFLAG No abort ORCC #ZFLAG Valid data (exit) RTS * * Checksum Error detected ... * Reset Sector counter in ACCB to last 128 byte boundary * and send NAK * XSTCK1 PSHS B TFR X,D DECB ANDB #128 TFR D,X PULS B LDA #NAK XSTCK2 LBSR OUTTER LDU #XSTST ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) RTS * * Acknowledge Data Received * XACK PSHS A LDA #ACK LBSR OUTTER PULS A,PC * * ** FLEX 9 COMPACT FLASH DISK DRIVERS * * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300 * WITH I/O MAPPED AT $XE000 * AND ROM MAPPED AT $XF000 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM * THE FIRST 64K IS USED BY FLEX, * THE SECOND 192K MAY BE USED AS A RAM DISK * * IMASK EQU $10 IRQ MASK CC FMASK EQU $40 FIRQ MASK CC DATREG EQU $FFF0 DAT REGISTERS * CF_BASE EQU $E040 CF_DATA EQU CF_BASE+0 CF_ERROR EQU CF_BASE+1 ; read error CF_FEATURE EQU CF_BASE+1 ; write feature CF_SCNT EQU CF_BASE+2 CF_SNUM EQU CF_BASE+3 CF_CLO EQU CF_BASE+4 CF_CHI EQU CF_BASE+5 CF_HEAD EQU CF_BASE+6 CF_STATUS EQU CF_BASE+7 ; read status CF_COMAND EQU CF_BASE+7 ; write command * * Command Equates * CMDREAD EQU $20 ; Read Single sector CMDWRITE EQU $30 ; Write Single sector CMDFEATURE EQU $EF FEAT8BIT EQU $01 ; enable 8 bit transfers HEADLBA EQU $E0 * * Status bit equates * BSY EQU $80 DRDY EQU $40 DRQ EQU $08 ERR EQU $01 * * * INITIALIZE CF CARD FOR 8 BIT LBA MODE * INITDR BSR WAITRDY LDA #HEADLBA STA CF_HEAD LDA #FEAT8BIT STA CF_FEATURE LDA #CMDFEATURE STA CF_COMAND BRA WAITRDY * * Seek track and sector * A holds track number (0 - ??) * B holds sector number (1 - ??) * Sector numbers starts from 1 * subtract 1 to start from sector 0 on CF * SEEKTS DECB STB CF_SNUM STA CF_CLO LDB DRVNUM STB CF_CHI LDB #$01 STB CF_SCNT CLRB RTS * * READ SECTORS FROM CF * * READSC BSR SEEKTS LDA #CMDREAD ; IDE READ MULTIPLE STA CF_COMAND BSR WAITRDY * * READ LOOP * CLRB RDLP1 BSR WAITDRQ LDA CF_DATA STA ,X+ DECB BNE RDLP1 * CLRB RDLP2 BSR WAITDRQ LDA CF_DATA DECB BNE RDLP2 * BSR WAITRDY CLRB RTS * * WRITE SECTOR TO CF * WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR LDA #CMDWRITE ; IDE WRITE MULTIPLE STA CF_COMAND BSR WAITRDY * * WRITE LOOP * CLRB WRTLP1 BSR WAITDRQ LDA ,X+ STA CF_DATA DECB BNE WRTLP1 * CLRB WRTLP2 BSR WAITDRQ CLRA STA CF_DATA DECB BNE WRTLP2 * BSR WAITRDY CLRB RTS * * CHECK FOR BUSY * Doubles as VERIFY * BUSY CLRB Never busy RTS * * DRIVE SELECT DISK DRIVER * DRVSEL LDA 3,X GET DRIVE # FROM FCB CMPA #3 BLS DRVS2 IF > 3, SET IT TO 0 CLRA DRVS2 STA DRVNUM CLRB ; SET Z, CLEAR C RTS * * CHECK DRIVE READY DISK DRIVER * CHKDRV LDA 3,X CLRB ; CLEAR C, SET Z RTS * * WAIT UNTIL READY * WAITRDY LDA CF_STATUS BITA #BSY BNE WAITRDY LDA CF_STATUS BITA #DRDY BEQ WAITRDY RTS * * WAIT FOR DATA REQUEST * WAITDRQ LDA CF_STATUS BITA #DRQ BEQ WAITDRQ RTS * ******************************************************* * * Bootstrap FLEX Loader * * SBUG1.8 loads the bootstap loader at $C000 * however the Flex adaption manual has the * bootstrap loader residing at $C100 * ****************************************************** * * Equates * STACK EQU $C0FF SCTBUF EQU $C300 * * Start of Utility * ORG $C000 BOOT BRA LOAD0 FCB 0,0,0 TRK FCB 0 File start track SCT FCB 0 File start sector DNS FCB 0 Density Flag (not used) TADR FDB $C000 Transfer address LADR FDB 0 Load Address DRNUM FCB 0 Drive number 0 * LOAD0 LDS #STACK Set up stack LDD TRK Set up start track and sector STD SCTBUF LDY #SCTBUF+256 * * Perform actual file load * LOAD1 BSR GETCH Get acharcater CMPA #$02 Data record hearder ? BEQ LOAD2 Skip, is so CMPA #$16 Xfr address hearder ? BNE LOAD1 Loop if neither * * Get transfer address * BSR GETCH STA TADR BSR GETCH STA TADR+1 BRA LOAD1 * * Load data record * LOAD2 BSR GETCH Get load address STA LADR BSR GETCH STA LADR+1 BSR GETCH Get Bytes count TFR A,B TSTB BEQ LOAD1 Loop if count = 0 LDX LADR Get load address LOAD3 PSHS B,X BSR GETCH Get data character PULS B,X STA ,X+ Store at load address DECB BNE LOAD3 Loop until count = 0 BRA LOAD1 * * Get Character routine * Reads a sector if needed * GETCH CMPY #SCTBUF+256 out of data ? BNE GETCH4 Go read Character if not GETCH2 LDX #SCTBUF Point to buffer LDD 0,X Get forward Link BEQ GO if zero, file is loaded BSR READ Read next sector BNE BOOT start over if error LDY #SCTBUF+4 Point past link GETCH4 LDA ,Y+ Else, get a character RTS * * File is loaded, Jump to it * GO JMP [TADR] Jump to transfer address * ** FLEX 9 COMPACT FLASH DISK DRIVERS * * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300 * WITH I/O MAPPED AT $XE000 * AND ROM MAPPED AT $XF000 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM * THE FIRST 64K IS USED BY FLEX, * THE SECOND 192K MAY BE USED AS A RAM DISK * * *IMASK EQU $10 IRQ MASK CC *FMASK EQU $40 FIRQ MASK CC *DATREG EQU $FFF0 DAT REGISTERS * *CF_BASE EQU $E040 *CF_DATA EQU CF_BASE+0 *CF_ERROR EQU CF_BASE+1 ; read error *CF_FEATURE EQU CF_BASE+1 ; write feature *CF_SCNT EQU CF_BASE+2 *CF_SNUM EQU CF_BASE+3 *CF_CLO EQU CF_BASE+4 *CF_CHI EQU CF_BASE+5 *CF_HEAD EQU CF_BASE+6 *CF_STATUS EQU CF_BASE+7 ; read status *CF_COMAND EQU CF_BASE+7 ; write command * * Command Equates * *CMDREAD EQU $20 ; Read Single sector *CMDWRITE EQU $30 ; Write Single sector *CMDFEATURE EQU $EF *FEAT8BIT EQU $01 ; enable 8 bit transfers *HEADLBA EQU $E0 * * Status bit equates * *BSY EQU $80 *DRDY EQU $40 *DRQ EQU $08 *ERR EQU $01 * * Seek track and sector * A holds track number (0 - ??) * B holds sector number (1 - ??) * Sector numbers starts from 1 * subtract 1 to start from sector 0 on CF * SEEK DECB STB CF_SNUM STA CF_CLO LDB DRNUM STB CF_CHI LDB #$01 STB CF_SCNT CLRB RTS * * READ SECTORS FROM CF * * READ BSR SEEK LDA #CMDREAD ; IDE READ MULTIPLE STA CF_COMAND BSR WTRDY * * READ LOOP * CLRB READ1 BSR WTDRQ LDA CF_DATA STA ,X+ DECB BNE READ1 * CLRB READ2 BSR WTDRQ LDA CF_DATA DECB BNE READ2 * BSR WTRDY CLRB RTS * * WAIT UNTIL READY * WTRDY LDA CF_STATUS BITA #BSY BNE WTRDY LDA CF_STATUS BITA #DRDY BEQ WTRDY RTS * * WAIT FOR DATA REQUEST * WTDRQ LDA CF_STATUS BITA #DRQ BEQ WTDRQ RTS * END START 1.1 System09/src/upld/upld_ide.lst http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_ide.lst?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_ide.lst =================================================================== Assembler release DWC_2.0 version 2.11 May 6, 2004 (c) Motorola (free ware) 0001 * 0002 ** FLEX 9 DISK DRIVERS 0003 * 0004 * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD 0005 * WITH I/O MAPPED AT $XE000 0006 * AND ROM MAPPED AT $XF000 0007 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM 0008 * THE FIRST 64K IS USED BY FLEX, 0009 * THE SECOND 128K IS USED AS A ROM DISK 0010 * THE REMAINING RAM IS USED FOR A RAM DISK 0011 * 0012 * 0013 0001 CFLAG EQU $01 CARRY FLAG 0014 0002 VFLAG EQU $02 OVERFLOW FLAG 0015 0004 ZFLAG EQU $04 ZERO FLAG 0016 0008 NFLAG EQU $08 NEGATIVE FLAG 0017 0010 IFLAG EQU $10 IRQ MASK CC 0018 0020 HFLAG EQU $20 HALF CARRY 0019 0040 FFLAG EQU $40 FIRQ MASK CC 0020 0080 EFLAG EQU $80 ENTIRE FLAG 0021 * 0022 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS 0023 * 0024 * Serial Port 0025 * 0026 E000 ACIAS EQU $E000 0027 E000 ACIAC1 EQU ACIAS 0028 E001 ACIAD1 EQU ACIAS+1 0029 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50) 0030 * 0031 * XMODEM Control characters 0032 * 0033 0001 SOH EQU $01 0034 0004 EOT EQU $04 0035 0006 ACK EQU $06 0036 0015 NAK EQU $15 0037 0018 CAN EQU $18 0038 * 0039 * Some dummy Constants 0040 * 0041 0040 RMAXTRK EQU 64 0042 00FF RMAXSEC EQU 255 0043 3EC1 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC 0044 * 0045 * Start 0046 * 0047 0100 ORG $0100 0048 0100 17 03 30 START LBSR UXSUB 0049 0103 6E 9F F8 00 JMP [$F800] Jump to monitor on Completion. 0050 * 0051 * 0052 * RAM SPACE 0053 * 0054 0107 00 DRVNUM FCB 0 0055 0108 00 TRACK FCB 0 0056 0109 00 SECTOR FCB 0 0057 010A 00 CHKSUM FCB 0 0058 010B 00 BLKNUM FCB 0 Xmodem block number 0059 010C 00 BYTCNT FCB 0 Xmodem byte count 0060 010D 00 00 XSTATE FDB 0 Xmodem State Vector 0061 010F 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer 0062 0112 00 MAXTRK FCB 0 0063 0113 00 MAXSEC FCB 0 0064 0200 ORG $0200 0065 * 0066 * SECTOR BUFFER 0067 * 0068 0200 BUFFER RMB 256 0069 * 0070 * 0071 * recieve char from remote drive. 0072 * timeout if no response for approx 1s. 0073 * Entry: no parameters 0074 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. 0075 * 0076 0300 34 30 RCHAR PSHS X,Y 0077 * 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). 0080 0309 B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char 0081 030C 47 ASRA 0082 030D 25 0A BCS RCHAR3 get character 0083 030F 31 3F LEAY -1,Y else, continue to count delay 0084 0311 26 F6 BNE RCHAR2 0085 0313 30 1F LEAX -1,X 0086 0315 26 EE BNE RCHAR1 0087 0317 35 B0 PULS X,Y,PC return with error if timed out 0088 * 0089 0319 B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set) 0090 031C 35 B0 PULS X,Y,PC 0091 * 0092 * 0093 * transmit char to remote drive. 0094 * timeout if no response for approx 1s. (allows for use of hardware flow control) 0095 * Entry: (A) = char to transmit 0096 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. 0097 * 0098 031E 34 30 SCHAR PSHS X,Y 0099 0320 34 02 PSHS A 0100 * 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). 0103 0329 B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO 0104 032C 47 ASRA 0105 032D 47 ASRA 0106 032E 25 0C BCS SCHAR3 send character 0107 0330 31 3F LEAY -1,Y else, continue to count delay 0108 0332 26 F5 BNE SCHAR2 0109 0334 30 1F LEAX -1,X 0110 0336 26 ED BNE SCHAR1 0111 0338 35 02 PULS A 0112 033A 35 B0 PULS X,Y,PC return with error if timed out 0113 * 0114 033C 35 02 SCHAR3 PULS A 0115 033E B7 E0 01 STA ACIAD1 send data (carry bit still set) 0116 0341 35 B0 PULS X,Y,PC 0117 * 0118 * Read a byte from the serial port 0119 * 0120 0343 34 04 LRBYTE PSHS B 0121 0345 8D 0E BSR LRHEX Get hex digit. 0122 0347 48 ASLA 0123 0348 48 ASLA Shift to msb. 0124 0349 48 ASLA 0125 034A 48 ASLA 0126 034B 1F 89 TFR A,B Save in B. 0127 034D 8D 06 BSR LRHEX Get next digit. 0128 034F 34 04 PSHS B 0129 0351 AB E0 ADDA 0,S+ Add together bytes. 0130 0353 35 84 PULS B,PC 0131 * 0132 0355 BD 03 7E LRHEX JSR INTER 0133 0358 29 FB BVS LRHEX 0134 035A 80 30 SUBA #$30 Remove ascii bias. 0135 035C 2B F7 BMI LRHEX 0136 035E 81 09 CMPA #$09 Number? 0137 0360 2F 0A BLE LRHEX1 Yes. 0138 0362 81 11 CMPA #$11 Keep testing. 0139 0364 2B EF BMI LRHEX 0140 0366 81 16 CMPA #$16 0141 0368 2E EB BGT LRHEX 0142 036A 80 07 SUBA #$07 0143 036C 39 LRHEX1 RTS 0144 * 0145 * ACIA INPUT TEST 0146 * 0147 036D B6 E0 00 INTEST LDA ACIAC1 0148 0370 85 01 BITA #$01 0149 0372 39 RTS 0150 * 0151 * RESET ACIA 0152 * 0153 0373 86 03 ACIRST LDA #$03 master reset 0154 0375 B7 E0 00 STA ACIAC1 0155 0378 86 11 LDA #$11 0156 037A B7 E0 00 STA ACIAC1 0157 037D 39 RTS 0158 * 0159 * ACIA INPUT 0160 * 0161 037E 86 10 INTER LDA #16 0162 0380 B7 01 0F STA DELCNT+0 0163 0383 7F 01 10 CLR DELCNT+1 0164 0386 7F 01 11 CLR DELCNT+2 0165 0389 B6 E0 00 INTER0 LDA ACIAC1 0166 038C 85 01 BITA #$01 0167 038E 26 08 BNE INTER1 0168 0390 85 78 BITA #$78 0169 0392 27 0A BEQ INTER2 0170 0394 8D DD BSR ACIRST 0171 0396 20 E6 BRA INTER 0172 * 0173 0398 B6 E0 01 INTER1 LDA ACIAD1 0174 039B 1C FD ANDCC #$FF-VFLAG 0175 039D 39 RTS 0176 * 0177 039E 7A 01 11 INTER2 DEC DELCNT+2 0178 03A1 26 E6 BNE INTER0 0179 03A3 7A 01 10 DEC DELCNT+1 0180 03A6 26 E1 BNE INTER0 0181 03A8 7A 01 0F DEC DELCNT+0 0182 03AB 26 DC BNE INTER0 0183 03AD 4F CLRA 0184 03AE 1A 02 ORCC #VFLAG 0185 03B0 39 RTS 0186 * 0187 * ACIA OUTPUT 0188 * 0189 03B1 34 02 OUTTER PSHS A 0190 * 0191 03B3 B6 E0 00 OUTTE1 LDA ACIAC1 0192 03B6 85 02 BITA #$02 0193 03B8 26 08 BNE OUTTE2 0194 03BA 85 78 BITA #$78 0195 03BC 27 F5 BEQ OUTTE1 0196 03BE 8D B3 BSR ACIRST 0197 03C0 20 F1 BRA OUTTE1 0198 * 0199 03C2 35 02 OUTTE2 PULS A 0200 03C4 B7 E0 01 STA ACIAD1 0201 03C7 39 RTS 0202 * 0203 * Print Data 0204 * 0205 03C8 8D E7 PDATA0 BSR OUTTER 0206 03CA A6 80 PDATA1 LDA ,X+ 0207 03CC 81 04 CMPA #$04 0208 03CE 26 F8 BNE PDATA0 0209 03D0 39 RTS 0210 * 0211 * 0212 ** 'UX' Xmodem ROM Disk upload 0213 * 0214 03D1 0D 0A UXMES0 FCB $0D,$0A 0215 03D3 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' 20 52 4F 4D 20 44 69 73 6B 20 55 70 6C 6F 61 64 0216 03E9 04 FCB 4 0217 03EA 0D 0A UXMES1 FCB $0D,$0A 0218 03EC 55 70 6C 6F 61 64 FCC 'Upload Complete' 20 43 6F 6D 70 6C 65 74 65 0219 03FB 04 FCB 4 0220 03FC 0D 0A UXMES2 FCB $0D,$0A 0221 03FE 55 70 6C 6F 61 64 FCC 'Upload Error' 20 45 72 72 6F 72 0222 040A 04 FCB 4 0223 040B 0D 0A UXMSG3 FCB $0D,$0A 0224 040D 44 72 69 76 65 20 FCC 'Drive Number :' 4E 75 6D 62 65 72 20 3A 0225 041B 04 FCB 4 0226 041C 0D 0A UXMSG4 FCB $0D,$0A 0227 041E 41 72 65 20 59 6F FCC 'Are You Sure ? (Y/N)' 75 20 53 75 72 65 20 3F 20 28 59 2F 4E 29 0228 0432 04 FCB 4 0229 * 0230 * Print Banner 0231 * 0232 0433 8E 03 D1 UXSUB LDX #UXMES0 0233 0436 17 FF 91 LBSR PDATA1 0234 * 0235 * Prompt for Disk drive number (0 to 3) 0236 * 0237 0439 8E 04 0B LDX #UXMSG3 0238 043C 17 FF 8B LBSR PDATA1 0239 043F 17 FF 3C UXSUB1 LBSR INTER 0240 0442 29 FB BVS UXSUB1 0241 0444 17 FF 6A LBSR OUTTER 0242 0447 81 30 CMPA #'0 0243 0449 10 25 01 2E LBLO UXEXIT 0244 044D 81 33 CMPA #'3 0245 044F 10 22 01 28 LBHI UXEXIT 0246 0453 80 30 SUBA #'0 0247 0455 B7 01 07 STA DRVNUM 0248 * 0249 * Report selected drive 0250 * 0251 0458 8E 04 0B LDX #UXMSG3 0252 045B 17 FF 6C LBSR PDATA1 0253 045E B6 01 07 LDA DRVNUM 0254 0461 8B 30 ADDA #'0 0255 0463 17 FF 4B LBSR OUTTER 0256 * 0257 * Ask for confirmation (Y/N) 0258 * 0259 0466 8E 04 1C LDX #UXMSG4 0260 0469 17 FF 5E LBSR PDATA1 0261 046C 17 FF 0F UXSUB2 LBSR INTER 0262 046F 29 FB BVS UXSUB2 0263 0471 17 FF 3D LBSR OUTTER 0264 0474 84 5F ANDA #$5F 0265 0476 81 4E CMPA #'N 0266 0478 10 27 00 FF LBEQ UXEXIT 0267 047C 81 59 CMPA #'Y 0268 047E 26 B3 BNE UXSUB 0269 * 0270 * We have confirmation ... now load the disk image 0271 * 0272 0480 17 01 B1 LBSR INITDR 0273 0483 CE 05 A4 LDU #XSTST 0274 0486 FF 01 0D STU XSTATE 0275 0489 86 01 LDA #1 0276 048B B7 01 0B STA BLKNUM 0277 * 0278 * Sector1 0279 * 0280 048E 8E 02 00 LDX #BUFFER 0281 * 0282 0491 4F CLRA TRACK 0 0283 0492 C6 01 LDB #$01 SECTOR 1 0284 0494 B7 01 08 STA TRACK 0285 0497 F7 01 09 STB SECTOR 0286 * 0287 049A 17 00 EA LBSR XREAD 0288 049D 10 25 00 E0 LBCS UXERR 0289 04A1 17 01 87 LBSR XACK 0290 04A4 17 00 E0 LBSR XREAD 0291 04A7 10 25 00 D6 LBCS UXERR 0292 * 0293 04AB 8E 02 00 LDX #BUFFER 0294 04AE B6 01 08 LDA TRACK 0295 04B1 F6 01 09 LDB SECTOR 0296 04B4 17 01 D1 LBSR WRITSC 0297 04B7 17 01 71 LBSR XACK 0298 * 0299 * Sector 2 0300 * 0301 04BA 8E 02 00 LDX #BUFFER 0302 * 0303 04BD B6 01 08 LDA TRACK 0304 04C0 F6 01 09 LDB SECTOR 0305 04C3 5C INCB 0306 04C4 B7 01 08 STA TRACK 0307 04C7 F7 01 09 STB SECTOR 0308 * 0309 04CA 17 00 BA LBSR XREAD 0310 04CD 10 25 00 B0 LBCS UXERR 0311 04D1 17 01 57 LBSR XACK 0312 04D4 17 00 B0 LBSR XREAD 0313 04D7 10 25 00 A6 LBCS UXERR 0314 * 0315 04DB 8E 02 00 LDX #BUFFER 0316 04DE B6 01 08 LDA TRACK 0317 04E1 F6 01 09 LDB SECTOR 0318 04E4 17 01 A1 LBSR WRITSC 0319 * 0320 04E7 17 01 41 LBSR XACK 0321 * 0322 * Sector 3 - SIR 0323 * 0324 04EA 8E 02 00 LDX #BUFFER 0325 * 0326 04ED B6 01 08 LDA TRACK 0327 04F0 F6 01 09 LDB SECTOR 0328 04F3 5C INCB 0329 04F4 B7 01 08 STA TRACK 0330 04F7 F7 01 09 STB SECTOR 0331 * 0332 04FA 17 00 8A LBSR XREAD 0333 04FD 10 25 00 80 LBCS UXERR 0334 0501 17 01 27 LBSR XACK 0335 0504 17 00 80 LBSR XREAD 0336 0507 10 25 00 76 LBCS UXERR 0337 * 0338 050B 8E 02 00 LDX #BUFFER 0339 050E A6 88 26 LDA 38,X 0340 0511 4C INCA 0341 0512 B7 01 12 STA MAXTRK 0342 0515 E6 88 27 LDB 39,X 0343 0518 5C INCB 0344 0519 F7 01 13 STB MAXSEC 0345 051C B6 01 08 LDA TRACK 0346 051F F6 01 09 LDB SECTOR 0347 0522 17 01 63 LBSR WRITSC 0348 * 0349 0525 17 01 03 LBSR XACK 0350 * 0351 * Sector 4 to Last Track & Sector 0352 * 0353 * 0354 0528 B6 01 08 LDA TRACK 0355 052B F6 01 09 LDB SECTOR 0356 052E 5C INCB 0357 * 0358 052F 8E 02 00 UXLOOP LDX #BUFFER 0359 0532 B7 01 08 STA TRACK 0360 0535 F7 01 09 STB SECTOR 0361 * 0362 0538 17 00 4C LBSR XREAD 0363 053B 10 25 00 42 LBCS UXERR 0364 053F 17 00 E9 LBSR XACK 0365 0542 17 00 42 LBSR XREAD 0366 0545 10 25 00 38 LBCS UXERR 0367 * 0368 0549 8E 02 00 LDX #BUFFER 0369 054C B6 01 08 LDA TRACK 0370 054F F6 01 09 LDB SECTOR 0371 0552 17 01 33 LBSR WRITSC 0372 0555 17 00 D3 LBSR XACK 0373 * 0374 0558 B6 01 08 LDA TRACK 0375 055B F6 01 09 LDB SECTOR 0376 055E 5C INCB 0377 055F F1 01 13 CMPB MAXSEC 0378 0562 26 CB BNE UXLOOP 0379 0564 C6 01 LDB #1 0380 0566 4C INCA 0381 0567 B1 01 12 CMPA MAXTRK 0382 056A 26 C3 BNE UXLOOP 0383 * 0384 * 0385 * Write Boot sector 0386 * 0387 056C 8E C0 00 LDX #$C000 0388 056F 4F CLRA TRACK 0 0389 0570 C6 01 LDB #$01 SECTOR 1 0390 0572 B7 01 08 STA TRACK 0391 0575 F7 01 09 STB SECTOR 0392 0578 17 01 0D LBSR WRITSC 0393 * 0394 057B 8E 03 EA UXEXIT LDX #UXMES1 0395 057E 7E 03 CA JMP PDATA1 0396 * 0397 0581 8E 03 FC UXERR LDX #UXMES2 0398 0584 16 FE 43 LBRA PDATA1 0399 * 0400 * Get a Byte using XModem protocol 0401 * Carry clear => no errors 0402 * Carry set => errors 0403 * 0404 0587 34 40 XREAD PSHS U 0405 0589 FE 01 0D LDU XSTATE 0406 * 0407 058C 17 FD EF XBYTE0 LBSR INTER 0408 058F 28 0A BVC XBYTE1 0409 0591 86 15 LDA #NAK 0410 0593 17 FE 1B LBSR OUTTER 0411 0596 CE 05 A4 LDU #XSTST 0412 0599 20 F1 BRA XBYTE0 0413 * 0414 059B AD C4 XBYTE1 JSR ,U 0415 059D 26 ED BNE XBYTE0 0416 059F FF 01 0D STU XSTATE 0417 05A2 35 C0 PULS U,PC 0418 * 0419 * START - LOOK FOR SOH (START OF HEADER) = $01 0420 * 0421 05A4 81 01 XSTST CMPA #SOH 0422 05A6 26 06 BNE XSTST1 0423 05A8 CE 05 C4 LDU #XSTBL 0424 05AB 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0425 05AD 39 RTS 0426 * 0427 05AE 81 04 XSTST1 CMPA #EOT 0428 05B0 26 08 BNE XSTST2 0429 05B2 86 06 LDA #ACK 0430 05B4 17 FD FA LBSR OUTTER 0431 05B7 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit 0432 05B9 39 RTS 0433 * 0434 05BA 81 18 XSTST2 CMPA #CAN 0435 05BC 26 03 BNE XSTST3 0436 05BE 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit 0437 05C0 39 RTS 0438 * 0439 05C1 1C FA XSTST3 ANDCC #$FF-CFLAG-ZFLAG 0440 05C3 39 RTS 0441 * 0442 * Got SOH 0443 * Now get block number 0444 * 0445 05C4 B1 01 0B XSTBL CMPA BLKNUM 0446 05C7 26 06 BNE XSTBLE 0447 05C9 CE 05 DA LDU #XSTCOM 0448 05CC 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0449 05CE 39 RTS 0450 * 0451 * Error in block number 0452 * 0453 05CF 86 15 XSTBLE LDA #NAK 0454 05D1 17 FD DD LBSR OUTTER 0455 05D4 CE 05 A4 LDU #XSTST 0456 05D7 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0457 05D9 39 RTS 0458 * 0459 * Get complement of block number 0460 * 0461 05DA 43 XSTCOM COMA 0462 05DB B1 01 0B CMPA BLKNUM 0463 05DE 26 EF BNE XSTBLE 0464 05E0 7F 01 0A CLR CHKSUM 0465 05E3 86 80 LDA #128 0466 05E5 B7 01 0C STA BYTCNT 0467 05E8 CE 05 EE LDU #XSTDA 0468 05EB 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) 0469 05ED 39 RTS 0470 * 0471 * Get data bytes 0472 * 0473 05EE 34 02 XSTDA PSHS A 0474 05F0 BB 01 0A ADDA CHKSUM 0475 05F3 B7 01 0A STA CHKSUM 0476 05F6 35 02 PULS A 0477 05F8 7A 01 0C DEC BYTCNT 0478 05FB 26 03 BNE XSTDA1 0479 05FD CE 06 05 LDU #XSTCK 0480 0600 A7 80 XSTDA1 STA ,X+ 0481 0602 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0482 0604 39 RTS 0483 * 0484 * Byte count reached zero 0485 * Check checksum byte 0486 * 0487 0605 B1 01 0A XSTCK CMPA CHKSUM 0488 0608 26 0B BNE XSTCK1 retry if wrong checksum 0489 * 0490 * Checksum OK ... 0491 * increment block number 0492 * Don't send ACK until data written to CF 0493 * 0494 060A 7C 01 0B INC BLKNUM 0495 060D CE 05 A4 LDU #XSTST 0496 0610 1C FE ANDCC #$FF-CFLAG No abort 0497 0612 1A 04 ORCC #ZFLAG Valid data (exit) 0498 0614 39 RTS 0499 * 0500 * Checksum Error detected ... 0501 * Reset Sector counter in ACCB to last 128 byte boundary 0502 * and send NAK 0503 * 0504 0615 34 04 XSTCK1 PSHS B 0505 0617 1F 10 TFR X,D 0506 0619 5A DECB 0507 061A C4 80 ANDB #128 0508 061C 1F 01 TFR D,X 0509 061E 35 04 PULS B 0510 0620 86 15 LDA #NAK 0511 0622 17 FD 8C XSTCK2 LBSR OUTTER 0512 0625 CE 05 A4 LDU #XSTST 0513 0628 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) 0514 062A 39 RTS 0515 * 0516 * Acknowledge Data Received 0517 * 0518 062B 34 02 XACK PSHS A 0519 062D 86 06 LDA #ACK 0520 062F 17 FD 7F LBSR OUTTER 0521 0632 35 82 PULS A,PC 0522 * 0523 * 0524 ** FLEX 9 IDE DISK DRIVERS 0525 * 0526 * FOR SYS09BUG 1.2 ON THE XSA-3S1000 0527 * WITH I/O MAPPED AT $XE000 0528 * AND ROM MAPPED AT $XF000 0529 * 0530 * 0531 0010 IMASK EQU $10 IRQ MASK CC 0532 0040 FMASK EQU $40 FIRQ MASK CC 0533 * 0534 E100 CF_BASE EQU $E100 0535 E100 CF_DATA EQU CF_BASE+0 0536 E102 CF_ERROR EQU CF_BASE+2 ; read error 0537 E102 CF_FEATURE EQU CF_BASE+2 ; write feature 0538 E104 CF_SCNT EQU CF_BASE+4 0539 E106 CF_SNUM EQU CF_BASE+6 0540 E108 CF_CLO EQU CF_BASE+8 0541 E10A CF_CHI EQU CF_BASE+10 0542 E10C CF_HEAD EQU CF_BASE+12 0543 E10E CF_STATUS EQU CF_BASE+14 ; read status 0544 E10E CF_COMAND EQU CF_BASE+14 ; write command 0545 E11E CF_AUX EQU CF_BASE+30 0546 * 0547 * Command Equates 0548 * 0549 0020 CMDREAD EQU $20 ; Read Single sector 0550 0030 CMDWRITE EQU $30 ; Write Single sector 0551 0006 AUXRESET EQU $06 0552 0002 AUXRSTREL EQU $02 0553 00E0 HEADLBA EQU $E0 0554 * 0555 * Status bit equates 0556 * 0557 0080 BSY EQU $80 0558 0040 DRDY EQU $40 0559 0008 DRQ EQU $08 0560 0001 ERR EQU $01 0561 * 0562 * 0563 * INITIALIZE CF CARD FOR 8 BIT LBA MODE 0564 * 0565 0634 CC 00 06 INITDR LDD #AUXRESET 0566 0637 FD E1 1E STD CF_AUX 0567 063A CC 00 02 LDD #AUXRSTREL 0568 063D FD E1 1E STD CF_AUX 0569 0640 CC 00 E0 LDD #HEADLBA 0570 0643 FD E1 0C STD CF_HEAD 0571 0646 20 74 BRA WAITRDY 0572 * 0573 * RESTORE DISK DRIVER (SEEK TRACK 00) 0574 * 0575 0648 8D 62 RESTR1 BSR DRVSEL 0576 064A 4F CLRA ; Track 0 0577 064B C6 01 LDB #$01 ; Sector 1 0578 * 0579 * Seek track and sector 0580 * A holds track number (0 - ??) 0581 * B holds sector number (1 - ??) 0582 * Sector numbers starts from 1 0583 * subtract 1 to start from sector 0 on CF 0584 * 0585 064D 34 02 SEEKTS PSHS A 0586 064F 4F CLRA 0587 0650 5A DECB 0588 0651 FD E1 06 STD CF_SNUM 0589 0654 E6 E4 LDB ,S 0590 0656 FD E1 08 STD CF_CLO 0591 0659 F6 01 07 LDB DRVNUM 0592 065C FD E1 0A STD CF_CHI 0593 065F C6 01 LDB #$01 0594 0661 FD E1 04 STD CF_SCNT 0595 0664 5F CLRB 0596 0665 35 82 PULS A,PC 0597 * 0598 * READ SECTORS FROM CF 0599 * 0600 * 0601 0667 8D E4 READSC BSR SEEKTS 0602 0669 CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE 0603 066C FD E1 0E STD CF_COMAND 0604 066F 8D 4B BSR WAITRDY 0605 * 0606 * READ LOOP 0607 * 0608 0671 34 20 PSHS Y 0609 0673 10 8E 01 00 LDY #256 0610 0677 8D 52 RDLP1 BSR WAITDRQ 0611 0679 FC E1 00 LDD CF_DATA 0612 067C E7 80 STB ,X+ 0613 067E 31 3F LEAY -1,Y 0614 0680 26 F5 BNE RDLP1 0615 0682 35 20 PULS Y 0616 * 0617 0684 8D 36 BSR WAITRDY 0618 0686 5F CLRB 0619 0687 39 RTS 0620 * 0621 * WRITE SECTOR TO CF 0622 * 0623 0688 8D C3 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR 0624 068A CC 00 30 LDD #CMDWRITE ; IDE WRITE MULTIPLE 0625 068D FD E1 0E STD CF_COMAND 0626 0690 8D 2A BSR WAITRDY 0627 * 0628 * WRITE LOOP 0629 * 0630 0692 34 20 PSHS Y 0631 0694 10 8E 01 00 LDY #256 0632 0698 4F CLRA 0633 0699 8D 30 WRTLP1 BSR WAITDRQ 0634 069B E6 80 LDB ,X+ 0635 069D FD E1 00 STD CF_DATA 0636 06A0 31 3F LEAY -1,Y 0637 06A2 26 F5 BNE WRTLP1 0638 06A4 35 20 PULS Y 0639 * 0640 06A6 8D 14 BSR WAITRDY 0641 06A8 5F CLRB 0642 06A9 39 RTS 0643 * 0644 * CHECK FOR BUSY 0645 * Doubles as VERIFY 0646 * 0647 06AA 5F BUSY CLRB Never busy 0648 06AB 39 RTS 0649 * 0650 * DRIVE SELECT DISK DRIVER 0651 * 0652 06AC A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB 0653 06AE 81 03 CMPA #3 0654 06B0 23 01 BLS DRVS2 IF > 3, SET IT TO 0 0655 06B2 4F CLRA 0656 06B3 B7 01 07 DRVS2 STA DRVNUM 0657 06B6 5F CLRB ; SET Z, CLEAR C 0658 06B7 39 RTS 0659 * 0660 * CHECK DRIVE READY DISK DRIVER 0661 * 0662 06B8 A6 03 CHKDRV LDA 3,X 0663 06BA 5F CLRB ; CLEAR C, SET Z 0664 06BB 39 RTS 0665 * 0666 * WAIT UNTIL READY 0667 * 0668 06BC FC E1 0E WAITRDY LDD CF_STATUS 0669 06BF C5 80 BITB #BSY 0670 06C1 26 F9 BNE WAITRDY 0671 06C3 FC E1 0E LDD CF_STATUS 0672 06C6 C5 40 BITB #DRDY 0673 06C8 27 F2 BEQ WAITRDY 0674 06CA 39 RTS 0675 * 0676 * WAIT FOR DATA REQUEST 0677 * 0678 06CB FC E1 0E WAITDRQ LDD CF_STATUS 0679 06CE C5 08 BITB #DRQ 0680 06D0 27 F9 BEQ WAITDRQ 0681 06D2 39 RTS 0682 * 0683 ******************************************************* 0684 * 0685 * Bootstrap FLEX Loader 0686 * 0687 * SBUG1.8 loads the bootstap loader at $C000 0688 * however the Flex adaption manual has the 0689 * bootstrap loader residing at $C100 0690 * 0691 ****************************************************** 0692 * 0693 * Equates 0694 * 0695 C0FF STACK EQU $C0FF 0696 C300 SCTBUF EQU $C300 0697 * 0698 * Start of Utility 0699 * 0700 C000 ORG $C000 0701 C000 20 0B BOOT BRA LOAD0 0702 C002 00 00 00 FCB 0,0,0 0703 C005 00 TRK FCB 0 File start track 0704 C006 00 SCT FCB 0 File start sector 0705 C007 00 DNS FCB 0 Density Flag (not used) 0706 C008 C0 00 TADR FDB $C000 Transfer address 0707 C00A 00 00 LADR FDB 0 Load Address 0708 C00C 00 DRNUM FCB 0 Drive number 0 0709 * 0710 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack 0711 C011 FC C0 05 LDD TRK Set up start track and sector 0712 C014 FD C3 00 STD SCTBUF 0713 C017 10 8E C4 00 LDY #SCTBUF+256 0714 * 0715 * Perform actual file load 0716 * 0717 C01B 8D 35 LOAD1 BSR GETCH Get acharcater 0718 C01D 81 02 CMPA #$02 Data record hearder ? 0719 C01F 27 10 BEQ LOAD2 Skip, is so 0720 C021 81 16 CMPA #$16 Xfr address hearder ? 0721 C023 26 F6 BNE LOAD1 Loop if neither 0722 * 0723 * Get transfer address 0724 * 0725 C025 8D 2B BSR GETCH 0726 C027 B7 C0 08 STA TADR 0727 C02A 8D 26 BSR GETCH 0728 C02C B7 C0 09 STA TADR+1 0729 C02F 20 EA BRA LOAD1 0730 * 0731 * Load data record 0732 * 0733 C031 8D 1F LOAD2 BSR GETCH Get load address 0734 C033 B7 C0 0A STA LADR 0735 C036 8D 1A BSR GETCH 0736 C038 B7 C0 0B STA LADR+1 0737 C03B 8D 15 BSR GETCH Get Bytes count 0738 C03D 1F 89 TFR A,B 0739 C03F 5D TSTB 0740 C040 27 D9 BEQ LOAD1 Loop if count = 0 0741 C042 BE C0 0A LDX LADR Get load address 0742 C045 34 14 LOAD3 PSHS B,X 0743 C047 8D 09 BSR GETCH Get data character 0744 C049 35 14 PULS B,X 0745 C04B A7 80 STA ,X+ Store at load address 0746 C04D 5A DECB 0747 C04E 26 F5 BNE LOAD3 Loop until count = 0 0748 C050 20 C9 BRA LOAD1 0749 * 0750 * Get Character routine 0751 * Reads a sector if needed 0752 * 0753 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ? 0754 C056 26 0F BNE GETCH4 Go read Character if not 0755 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer 0756 C05B EC 84 LDD 0,X Get forward Link 0757 C05D 27 0B BEQ GO if zero, file is loaded 0758 C05F 8D 27 BSR READ Read next sector 0759 C061 26 9D BNE BOOT start over if error 0760 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link 0761 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character 0762 C069 39 RTS 0763 * 0764 * File is loaded, Jump to it 0765 * 0766 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address 0767 0768 * 0769 ** FLEX 9 IDE DISK DRIVERS 0770 * 0771 * FOR SYS09BUG 1.2 ON THE XSA-3S1000 0772 * WITH I/O MAPPED AT $XE000 0773 * AND ROM MAPPED AT $XF000 0774 * 0775 *IMASK EQU $10 IRQ MASK CC 0776 *FMASK EQU $40 FIRQ MASK CC 0777 * 0778 *CF_BASE EQU $E100 0779 *CF_DATA EQU CF_BASE+0 0780 *CF_ERROR EQU CF_BASE+2 ; read error 0781 *CF_FEATURE EQU CF_BASE+2 ; write feature 0782 *CF_SCNT EQU CF_BASE+4 0783 *CF_SNUM EQU CF_BASE+6 0784 *CF_CLO EQU CF_BASE+8 0785 *CF_CHI EQU CF_BASE+10 0786 *CF_HEAD EQU CF_BASE+12 0787 *CF_STATUS EQU CF_BASE+14 ; read status 0788 *CF_COMAND EQU CF_BASE+14 ; write command 0789 *CF_AUX EQU CF_BASE+30 0790 * 0791 * Command Equates 0792 * 0793 *CMDREAD EQU $20 ; Read Single sector 0794 *CMDWRITE EQU $30 ; Write Single sector 0795 *HEADLBA EQU $E0 0796 *AUXRESET EQU $06 0797 *AUXRSTREL EQU $02 0798 * 0799 * Status bit equates 0800 * 0801 *BSY EQU $80 0802 *DRDY EQU $40 0803 *DRQ EQU $08 0804 *ERR EQU $01 0805 * 0806 * Seek track and sector 0807 * A holds track number (0 - ??) 0808 * B holds sector number (1 - ??) 0809 * Sector numbers starts from 1 0810 * subtract 1 to start from sector 0 on CF 0811 * 0812 C06E 34 02 SEEK PSHS A 0813 C070 4F CLRA 0814 C071 5A DECB 0815 C072 FD E1 06 STD CF_SNUM 0816 C075 E6 E4 LDB ,S 0817 C077 FD E1 08 STD CF_CLO 0818 C07A F6 C0 0C LDB DRNUM 0819 C07D FD E1 0A STD CF_CHI 0820 C080 C6 01 LDB #$01 0821 C082 FD E1 04 STD CF_SCNT 0822 C085 5F CLRB 0823 C086 35 82 PULS A,PC 0824 * 0825 * READ SECTORS FROM CF 0826 * 0827 * 0828 C088 8D E4 READ BSR SEEK 0829 C08A CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE 0830 C08D FD E1 0E STD CF_COMAND 0831 C090 8D 17 BSR WTRDY 0832 * 0833 * READ LOOP 0834 * 0835 C092 34 20 PSHS Y 0836 C094 10 8E 01 00 LDY #256 0837 C098 8D 1E READ1 BSR WTDRQ 0838 C09A FC E1 00 LDD CF_DATA 0839 C09D E7 80 STB ,X+ 0840 C09F 31 3F LEAY -1,Y 0841 C0A1 26 F5 BNE READ1 0842 C0A3 35 20 PULS Y 0843 * 0844 C0A5 8D 02 BSR WTRDY 0845 C0A7 5F CLRB 0846 C0A8 39 RTS 0847 * 0848 * WAIT UNTIL READY 0849 * 0850 C0A9 FC E1 0E WTRDY LDD CF_STATUS 0851 C0AC C5 80 BITB #BSY 0852 C0AE 26 F9 BNE WTRDY 0853 C0B0 FC E1 0E LDD CF_STATUS 0854 C0B3 C5 40 BITB #DRDY 0855 C0B5 27 F2 BEQ WTRDY 0856 C0B7 39 RTS 0857 * 0858 * WAIT FOR DATA REQUEST 0859 * 0860 C0B8 FC E1 0E WTDRQ LDD CF_STATUS 0861 C0BB C5 08 BITB #DRQ 0862 C0BD 27 F9 BEQ WTDRQ 0863 C0BF 39 RTS 0864 * 0865 END START Program + Init Data = 1191 bytes Error count = 0 1.1 System09/src/upld/upld_ide.s19 http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_ide.s19?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_ide.s19 =================================================================== S11701001703306E9FF8000000000000000000000000000098 S123030034308E03E8108E04E2B6E00047250A313F26F6301F26EE35B0B6E00135B03430B8 S123032034028E03E8108E04E2B6E0004747250C313F26F5301F26ED350235B03502B7E05A S12303400135B034048D0E484848481F898D063404ABE03584BD037E29FB80302BF781094B S12303602F0A81112BEF81162EEB800739B6E0008501398603B7E0008611B7E000398610B2 S1230380B7010F7F01107F0111B6E000850126088578270A8DDD20E6B6E0011CFD397A0125 S12303A01126E67A011026E17A010F26DC4F1A02393402B6E00085022608857827F58DB380 S12303C020F13502B7E001398DE7A680810426F8390D0A586D6F64656D20524F4D2044692E S12303E0736B2055706C6F6164040D0A55706C6F616420436F6D706C657465040D0A5570DD S12304006C6F6164204572726F72040D0A4472697665204E756D626572203A040D0A417248 S12304206520596F752053757265203F2028592F4E29048E03D117FF918E040B17FF8B172F S1230440FF3C29FB17FF6A81301025012E8133102201288030B701078E040B17FF6CB60150 S1230460078B3017FF4B8E041C17FF5E17FF0F29FB17FF3D845F814E102700FF815926B3FC S12304801701B1CE05A4FF010D8601B7010B8E02004FC601B70108F701091700EA10250024 S12304A0E01701871700E0102500D68E0200B60108F601091701D11701718E0200B60108A7 S12304C0F601095CB70108F701091700BA102500B01701571700B0102500A68E0200B601ED S12304E008F601091701A11701418E0200B60108F601095CB70108F7010917008A1025009C S123050080170127170080102500768E0200A688264CB70112E688275CF70113B60108F62B S12305200109170163170103B60108F601095C8E0200B70108F7010917004C1025004217BA S123054000E9170042102500388E0200B60108F601091701331700D3B60108F601095CF158 S1230560011326CBC6014CB1011226C38EC0004FC601B70108F7010917010D8E03EA7E036C S1230580CA8E03FC16FE433440FE010D17FDEF280A861517FE1BCE05A420F1ADC426EDFF1E S12305A0010D35C081012606CE05C41CFA3981042608860617FDFA1A0539811826031A051A S12305C0391CFA39B1010B2606CE05DA1CFA39861517FDDDCE05A41CFA3943B1010B26EF43 S12305E07F010A8680B7010CCE05EE1CFA393402BB010AB7010A35027A010C2603CE060515 S1230600A7801CFA39B1010A260B7C010BCE05A41CFE1A043934041F105AC4801F013504A5 S1230620861517FD8CCE05A41CFA393402860617FD7F3582CC0006FDE11ECC0002FDE11E11 S1230640CC00E0FDE10C20748D624FC60134024F5AFDE106E6E4FDE108F60107FDE10AC648 S123066001FDE1045F35828DE4CC0020FDE10E8D4B3420108E01008D52FCE100E780313FD6 S123068026F535208D365F398DC3CC0030FDE10E8D2A3420108E01004F8D30E680FDE10059 S12306A0313F26F535208D145F395F39A603810323014FB701075F39A6035F39FCE10EC59D S11606C08026F9FCE10EC54027F239FCE10EC50827F93931 S123C000200B000000000000C00000000010CEC0FFFCC005FDC300108EC4008D3581022745 S123C02010811626F68D2BB7C0088D26B7C00920EA8D1FB7C00A8D1AB7C00B8D151F895DC8 S123C04027D9BEC00A34148D093514A7805A26F520C9108CC400260F8EC300EC84270B8D93 S123C06027269D108EC304A6A0396E9FC00834024F5AFDE106E6E4FDE108F6C00CFDE10AFC S123C080C601FDE1045F35828DE4CC0020FDE10E8D173420108E01008D1EFCE100E78031DD S123C0A03F26F535208D025F39FCE10EC58026F9FCE10EC54027F239FCE10EC50827F93904 S9030000FC 1.1 System09/src/upld/upld_ide.txt http://www.opencores.org/cvsweb.shtml/System09/src/upld/upld_ide.txt?rev=1.1&content-type=text/x-cvsweb-markup Index: upld_ide.txt =================================================================== * ** FLEX 9 DISK DRIVERS * * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD * WITH I/O MAPPED AT $XE000 * AND ROM MAPPED AT $XF000 * THE DIGILENT SPART