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

Subversion Repositories System09

[/] [System09/] [trunk/] [src/] [boot/] [bootcf8.asm] - Diff between revs 59 and 66

Only display areas with differences | Details | Blame | View Log

Rev 59 Rev 66
*******************************************************
*******************************************************
*
*
* Bootstrap FLEX Loader
* Bootstrap FLEX Loader
*
*
* SBUG1.8 loads the bootstap loader at $C000
* SBUG1.8 loads the bootstap loader at $C000
* however the Flex adaption manual has the
* however the Flex adaption manual has the
* bootstrap loader residing at $C100
* bootstrap loader residing at $C100
*
*
******************************************************
******************************************************
*
*
* Equates
* Equates
*
*
STACK   EQU $C0FF
STACK   EQU $C0FF
SCTBUF  EQU $C300
SCTBUF  EQU $C300
*
*
* Start of Utility
* Start of Utility
*
*
        ORG $C000
        ORG $C000
BOOT    BRA LOAD0
BOOT    BRA LOAD0
        FCB 0,0,0
        FCB 0,0,0
TRK     FCB 0        File start track
TRK     FCB 0        File start track
SCT     FCB 0        File start sector
SCT     FCB 0        File start sector
DNS     FCB 0        Density Flag (not used)
DNS     FCB 0        Density Flag (not used)
TADR    FDB $C000    Transfer address
TADR    FDB $C000    Transfer address
LADR    FDB 0        Load Address
LADR    FDB 0        Load Address
DRVNUM  FCB 0        Drive number 0
DRVNUM  FCB 0        Drive number 0
*
*
LOAD0   LDS  #STACK   Set up stack
LOAD0   LDS  #STACK   Set up stack
        LDD  TRK      Set up start track and sector
        LDD  TRK      Set up start track and sector
        STD  SCTBUF
        STD  SCTBUF
        LDY  #SCTBUF+256
        LDY  #SCTBUF+256
*
*
* Perform actual file load
* Perform actual file load
*
*
LOAD1   BSR GETCH    Get acharcater
LOAD1   BSR GETCH    Get acharcater
        CMPA #$02    Data record hearder ?
        CMPA #$02    Data record hearder ?
        BEQ  LOAD2   Skip, is so
        BEQ  LOAD2   Skip, is so
        CMPA #$16    Xfr address hearder ?
        CMPA #$16    Xfr address hearder ?
        BNE LOAD1    Loop if neither
        BNE LOAD1    Loop if neither
*
*
* Get transfer address
* Get transfer address
*
*
        BSR  GETCH
        BSR  GETCH
        STA  TADR
        STA  TADR
        BSR  GETCH
        BSR  GETCH
        STA  TADR+1
        STA  TADR+1
        BRA  LOAD1
        BRA  LOAD1
*
*
* Load data record
* Load data record
*
*
LOAD2  BSR  GETCH  Get load address
LOAD2  BSR  GETCH  Get load address
       STA  LADR
       STA  LADR
       BSR  GETCH
       BSR  GETCH
       STA  LADR+1
       STA  LADR+1
       BSR  GETCH  Get Bytes count
       BSR  GETCH  Get Bytes count
       TFR  A,B
       TFR  A,B
       TSTB
       TSTB
       BEQ  LOAD1 Loop if count = 0
       BEQ  LOAD1 Loop if count = 0
       LDX  LADR  Get load address
       LDX  LADR  Get load address
LOAD3  PSHS B,X
LOAD3  PSHS B,X
       BSR  GETCH  Get data character
       BSR  GETCH  Get data character
       PULS B,X
       PULS B,X
       STA  ,X+    Store at load address
       STA  ,X+    Store at load address
       DECB
       DECB
       BNE  LOAD3  Loop until count = 0
       BNE  LOAD3  Loop until count = 0
       BRA  LOAD1
       BRA  LOAD1
*
*
* Get Character routine
* Get Character routine
* Reads a sector if needed
* Reads a sector if needed
*
*
GETCH  CMPY #SCTBUF+256 out of data ?
GETCH  CMPY #SCTBUF+256 out of data ?
       BNE  GETCH4      Go read Character if not
       BNE  GETCH4      Go read Character if not
GETCH2 LDX  #SCTBUF     Point to buffer
GETCH2 LDX  #SCTBUF     Point to buffer
       LDD  0,X         Get forward Link
       LDD  0,X         Get forward Link
       BEQ  GO          if zero, file is loaded
       BEQ  GO          if zero, file is loaded
       BSR  READ        Read next sector
       BSR  READ        Read next sector
       BNE  BOOT        start over if error
       BNE  BOOT        start over if error
       LDY  #SCTBUF+4   Point past link
       LDY  #SCTBUF+4   Point past link
GETCH4 LDA  ,Y+         Else, get a character
GETCH4 LDA  ,Y+         Else, get a character
       RTS
       RTS
*
*
* File is loaded, Jump to it
* File is loaded, Jump to it
*
*
GO     JMP  [TADR]      Jump to transfer address
GO     JMP  [TADR]      Jump to transfer address
*
*
** FLEX 9 COMPACT FLASH DISK DRIVERS
** FLEX 9 COMPACT FLASH DISK DRIVERS
*
*
* FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
* FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
* WITH I/O MAPPED AT $XE000
* WITH I/O MAPPED AT $XE000
* AND ROM MAPPED AT $XF000
* AND ROM MAPPED AT $XF000
* THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
* THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
* THE FIRST 64K IS USED BY FLEX,
* THE FIRST 64K IS USED BY FLEX,
* THE SECOND 192K MAY BE USED AS A RAM DISK
* THE SECOND 192K MAY BE USED AS A RAM DISK
*
*
*
*
IMASK  EQU $10     IRQ MASK CC
IMASK  EQU $10     IRQ MASK CC
FMASK  EQU $40     FIRQ MASK CC
FMASK  EQU $40     FIRQ MASK CC
DATREG EQU $FFF0   DAT REGISTERS
DATREG EQU $FFF0   DAT REGISTERS
*
*
CF_BASE    EQU $E040
CF_BASE    EQU $E040
CF_DATA    EQU CF_BASE+0
CF_DATA    EQU CF_BASE+0
CF_ERROR   EQU CF_BASE+1 ; read error
CF_ERROR   EQU CF_BASE+1 ; read error
CF_FEATURE EQU CF_BASE+1 ; write feature
CF_FEATURE EQU CF_BASE+1 ; write feature
CF_SECCNT  EQU CF_BASE+2
CF_SECCNT  EQU CF_BASE+2
CF_SECNUM  EQU CF_BASE+3
CF_SECNUM  EQU CF_BASE+3
CF_CYLLO   EQU CF_BASE+4
CF_CYLLO   EQU CF_BASE+4
CF_CYLHI   EQU CF_BASE+5
CF_CYLHI   EQU CF_BASE+5
CF_HEAD    EQU CF_BASE+6
CF_HEAD    EQU CF_BASE+6
CF_STATUS  EQU CF_BASE+7 ; read status
CF_STATUS  EQU CF_BASE+7 ; read status
CF_COMAND  EQU CF_BASE+7 ; write command
CF_COMAND  EQU CF_BASE+7 ; write command
*
*
* Command Equates
* Command Equates
*
*
CMDREAD    EQU $20 ; Read Single sector
CMDREAD    EQU $20 ; Read Single sector
CMDWRITE   EQU $30 ; Write Single sector
CMDWRITE   EQU $30 ; Write Single sector
CMDFEATURE EQU $EF
CMDFEATURE EQU $EF
FEAT8BIT   EQU $01 ; enable 8 bit transfers
FEAT8BIT   EQU $01 ; enable 8 bit transfers
HEADLBA    EQU $E0
HEADLBA    EQU $E0
*
*
* Status bit equates
* Status bit equates
*
*
BSY        EQU $80
BSY        EQU $80
DRDY       EQU $40
DRDY       EQU $40
DRQ        EQU $08
DRQ        EQU $08
ERR        EQU $01
ERR        EQU $01
*
*
* RESTORE DISK DRIVER (SEEK TRACK 00)
* RESTORE DISK DRIVER (SEEK TRACK 00)
*
*
RESTR1 CLR  DRVNUM
RESTR1 CLR  DRVNUM
       CLRA           ; Track 0
       CLRA           ; Track 0
       LDB  #$01     ; Sector 1
       LDB  #$01     ; Sector 1
*
*
* Seek track and sector
* Seek track and sector
* A holds track number (0 - ??)
* A holds track number (0 - ??)
* B holds sector number (1 - ??)
* B holds sector number (1 - ??)
* Sector numbers starts from 1
* Sector numbers starts from 1
* subtract 1 to start from sector 0 on CF
* subtract 1 to start from sector 0 on CF
*
*
SEEKTS DECB
SEEKTS DECB
       STB  CF_SECNUM
       STB  CF_SECNUM
       STA  CF_CYLLO
       STA  CF_CYLLO
       LDB  DRVNUM
       LDB  DRVNUM
       STB  CF_CYLHI
       STB  CF_CYLHI
       LDB  #$01
       LDB  #$01
       STB  CF_SECCNT
       STB  CF_SECCNT
       CLRB
       CLRB
WARMD1 RTS
WARMD1 RTS
*
*
* READ SECTORS FROM CF
* READ SECTORS FROM CF
*
*
*
*
READ   BSR  SEEKTS
READ   BSR  SEEKTS
       LDA  #CMDREAD ; IDE READ MULTIPLE
       LDA  #CMDREAD ; IDE READ MULTIPLE
       STA  CF_COMAND
       STA  CF_COMAND
       BSR  WAITRDY
       BSR  WAITRDY
*
*
* READ LOOP
* READ LOOP
*
*
       CLRB
       CLRB
RDLP1  BSR  WAITDRQ
RDLP1  BSR  WAITDRQ
       LDA  CF_DATA
       LDA  CF_DATA
       STA  ,X+
       STA  ,X+
       DECB
       DECB
       BNE  RDLP1
       BNE  RDLP1
*
*
       CLRB
       CLRB
RDLP2  BSR  WAITDRQ
RDLP2  BSR  WAITDRQ
       LDA  CF_DATA
       LDA  CF_DATA
       DECB
       DECB
       BNE  RDLP2
       BNE  RDLP2
*
*
       BSR  WAITRDY
       BSR  WAITRDY
       CLRB
       CLRB
       RTS
       RTS
*
*
* WAIT UNTIL READY
* WAIT UNTIL READY
*
*
WAITRDY LDA  CF_STATUS
WAITRDY LDA  CF_STATUS
        BITA #BSY
        BITA #BSY
        BNE  WAITRDY
        BNE  WAITRDY
        LDA  CF_STATUS
        LDA  CF_STATUS
        BITA #DRDY
        BITA #DRDY
        BEQ  WAITRDY
        BEQ  WAITRDY
        RTS
        RTS
*
*
* WAIT FOR DATA REQUEST
* WAIT FOR DATA REQUEST
*
*
WAITDRQ LDA  CF_STATUS
WAITDRQ LDA  CF_STATUS
        BITA #DRQ
        BITA #DRQ
        BEQ  WAITDRQ
        BEQ  WAITDRQ
        RTS
        RTS
*
*
        END
        END
 
 

powered by: WebSVN 2.1.0

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