URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
[/] [System09/] [trunk/] [src/] [boot/] [bootcf8.asm] - Rev 89
Go to most recent revision | Compare with Previous | Blame | View Log
********************************************************* 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 $C0FFSCTBUF EQU $C300** Start of Utility*ORG $C000BOOT BRA LOAD0FCB 0,0,0TRK FCB 0 File start trackSCT FCB 0 File start sectorDNS FCB 0 Density Flag (not used)TADR FDB $C000 Transfer addressLADR FDB 0 Load AddressDRVNUM FCB 0 Drive number 0*LOAD0 LDS #STACK Set up stackLDD TRK Set up start track and sectorSTD SCTBUFLDY #SCTBUF+256** Perform actual file load*LOAD1 BSR GETCH Get acharcaterCMPA #$02 Data record hearder ?BEQ LOAD2 Skip, is soCMPA #$16 Xfr address hearder ?BNE LOAD1 Loop if neither** Get transfer address*BSR GETCHSTA TADRBSR GETCHSTA TADR+1BRA LOAD1** Load data record*LOAD2 BSR GETCH Get load addressSTA LADRBSR GETCHSTA LADR+1BSR GETCH Get Bytes countTFR A,BTSTBBEQ LOAD1 Loop if count = 0LDX LADR Get load addressLOAD3 PSHS B,XBSR GETCH Get data characterPULS B,XSTA ,X+ Store at load addressDECBBNE LOAD3 Loop until count = 0BRA LOAD1** Get Character routine* Reads a sector if needed*GETCH CMPY #SCTBUF+256 out of data ?BNE GETCH4 Go read Character if notGETCH2 LDX #SCTBUF Point to bufferLDD 0,X Get forward LinkBEQ GO if zero, file is loadedBSR READ Read next sectorBNE BOOT start over if errorLDY #SCTBUF+4 Point past linkGETCH4 LDA ,Y+ Else, get a characterRTS** 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 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 $01** RESTORE DISK DRIVER (SEEK TRACK 00)*RESTR1 CLR DRVNUMCLRA ; 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**READ 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** 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
