URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
[/] [System09/] [trunk/] [src/] [Flex9/] [f9-dkcf8.asm] - Rev 99
Go to most recent revision | Compare with Previous | Blame | View Log
*** 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 CCFMASK EQU $40 FIRQ MASK CCDATREG EQU $FFF0 DAT REGISTERS*CF_BASE EQU $E040CF_DATA EQU CF_BASE+0CF_ERROR EQU CF_BASE+1 ; read errorCF_FEATURE EQU CF_BASE+1 ; write featureCF_SECCNT EQU CF_BASE+2CF_SECNUM EQU CF_BASE+3CF_CYLLO EQU CF_BASE+4CF_CYLHI EQU CF_BASE+5CF_HEAD EQU CF_BASE+6CF_STATUS EQU CF_BASE+7 ; read statusCF_COMAND EQU CF_BASE+7 ; write command** Command Equates*CMDREAD EQU $20 ; Read Single sectorCMDWRITE EQU $30 ; Write Single sectorCMDFEATURE EQU $EFFEAT8BIT EQU $01 ; enable 8 bit transfersHEADLBA EQU $E0** Status bit equates*BSY EQU $80DRDY EQU $40DRQ EQU $08ERR EQU $01ORG $DE00** DISK DRIVER JUMP TABLE*READ JMP READSCWRITE JMP WRITSCVERIFY JMP BUSYRESTOR JMP RESTR1DRIVE JMP DRVSELDRVRDY JMP CHKDRVQUICK JMP CHKDRVCOLDDR JMP INITDRWARMDR JMP WARMD1SEEK JMP SEEKTS** RAM SPACE*DRVNUM FCB 0*** INITIALIZE CF CARD FOR 8 BIT LBA MODE*INITDR BSR WAITRDYLDA #HEADLBASTA CF_HEADLDA #FEAT8BITSTA CF_FEATURELDA #CMDFEATURESTA CF_COMANDBRA WAITRDY** RESTORE DISK DRIVER (SEEK TRACK 00)*RESTR1 BSR DRVSELCLRA ; Track 0LDB #$01 ; Sector 1** 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 DECBSTB CF_SECNUMSTA CF_CYLLOLDB DRVNUMSTB CF_CYLHILDB #$01STB CF_SECCNTCLRBWARMD1 RTS** READ SECTORS FROM CF**READSC BSR SEEKTSLDA #CMDREAD ; IDE READ MULTIPLESTA CF_COMANDBSR WAITRDY** READ LOOP*CLRBRDLP1 BSR WAITDRQLDA CF_DATASTA ,X+DECBBNE RDLP1*CLRBRDLP2 BSR WAITDRQLDA CF_DATADECBBNE RDLP2*BSR WAITRDYCLRBRTS** WRITE SECTOR TO CF*WRITSC BSR SEEKTS ; SEEK TRACK & SECTORLDA #CMDWRITE; IDE WRITE MULTIPLESTA CF_COMANDBSR WAITRDY** WRITE LOOP*CLRBWRTLP1 BSR WAITDRQLDA ,X+STA CF_DATADECBBNE WRTLP1*CLRBWRTLP2 BSR WAITDRQCLRASTA CF_DATADECBBNE WRTLP2*BSR WAITRDYCLRBRTS** CHECK FOR BUSY* Doubles as VERIFY*BUSY CLRB Never busyRTS** DRIVE SELECT DISK DRIVER*DRVSEL LDA 3,X GET DRIVE # FROM FCBCMPA #3BLS DRVS2 IF > 3, SET IT TO 0CLRADRVS2 STA DRVNUMCLRB ; SET Z, CLEAR CRTS** CHECK DRIVE READY DISK DRIVER*CHKDRV LDA 3,XCLRB ; CLEAR C, SET ZRTS** WAIT UNTIL READY*WAITRDY LDA CF_STATUSBITA #BSYBNE WAITRDYLDA CF_STATUSBITA #DRDYBEQ WAITRDYRTS** WAIT FOR DATA REQUEST*WAITDRQ LDA CF_STATUSBITA #DRQBEQ WAITDRQRTS*END
Go to most recent revision | Compare with Previous | Blame | View Log
