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

Subversion Repositories System09

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 46 to Rev 45
    Reverse comparison

Rev 46 → Rev 45

/branches/mkfiles_rev1/src/boot/bootcf8.s19
0,0 → 1,7
S123C000200B000000000000C00000000010CEC0FFFCC005FDC300108EC4008D3581022745
S123C02010811626F68D2BB7C0088D26B7C00920EA8D1FB7C00A8D1AB7C00B8D151F895DC8
S123C04027D9BEC00A34148D093514A7805A26F520C9108CC400260F8EC300EC84270B8D93
S123C06027269D108EC304A6A0396E9FC0087FC00C4FC6015AF7E043B7E044F6C00CF7E0D0
S123C08045C601F7E0425F398DEA8620B7E0478D185F8D24B6E040A7805A26F65F8D19B601
S123C0A0E0405A26F88D025F39B6E047858026F9B6E047854027F239B6E047850827F93905
S9030000FC
/branches/mkfiles_rev1/src/boot/bootcf8.txt
0,0 → 1,194
*******************************************************
*
* 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
DRVNUM 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_SECCNT EQU CF_BASE+2
CF_SECNUM EQU CF_BASE+3
CF_CYLLO EQU CF_BASE+4
CF_CYLHI 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
*
* RESTORE DISK DRIVER (SEEK TRACK 00)
*
RESTR1 CLR DRVNUM
CLRA ; Track 0
LDB #$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 DECB
STB CF_SECNUM
STA CF_CYLLO
LDB DRVNUM
STB CF_CYLHI
LDB #$01
STB CF_SECCNT
CLRB
WARMD1 RTS
*
* READ SECTORS FROM CF
*
*
READ 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
*
* 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
*
END
/branches/mkfiles_rev1/src/boot/bootcf8.lst
0,0 → 1,198
Assembler release DWC_2.0 version 2.11
May 6, 2004 (c) Motorola (free ware)
0001 *******************************************************
0002 *
0003 * Bootstrap FLEX Loader
0004 *
0005 * SBUG1.8 loads the bootstap loader at $C000
0006 * however the Flex adaption manual has the
0007 * bootstrap loader residing at $C100
0008 *
0009 ******************************************************
0010 *
0011 * Equates
0012 *
0013 C0FF STACK EQU $C0FF
0014 C300 SCTBUF EQU $C300
0015 *
0016 * Start of Utility
0017 *
0018 C000 ORG $C000
0019 C000 20 0B BOOT BRA LOAD0
0020 C002 00 00 00 FCB 0,0,0
0021 C005 00 TRK FCB 0 File start track
0022 C006 00 SCT FCB 0 File start sector
0023 C007 00 DNS FCB 0 Density Flag (not used)
0024 C008 C0 00 TADR FDB $C000 Transfer address
0025 C00A 00 00 LADR FDB 0 Load Address
0026 C00C 00 DRVNUM FCB 0 Drive number 0
0027 *
0028 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack
0029 C011 FC C0 05 LDD TRK Set up start track and sector
0030 C014 FD C3 00 STD SCTBUF
0031 C017 10 8E C4 00 LDY #SCTBUF+256
0032 *
0033 * Perform actual file load
0034 *
0035 C01B 8D 35 LOAD1 BSR GETCH Get acharcater
0036 C01D 81 02 CMPA #$02 Data record hearder ?
0037 C01F 27 10 BEQ LOAD2 Skip, is so
0038 C021 81 16 CMPA #$16 Xfr address hearder ?
0039 C023 26 F6 BNE LOAD1 Loop if neither
0040 *
0041 * Get transfer address
0042 *
0043 C025 8D 2B BSR GETCH
0044 C027 B7 C0 08 STA TADR
0045 C02A 8D 26 BSR GETCH
0046 C02C B7 C0 09 STA TADR+1
0047 C02F 20 EA BRA LOAD1
0048 *
0049 * Load data record
0050 *
0051 C031 8D 1F LOAD2 BSR GETCH Get load address
0052 C033 B7 C0 0A STA LADR
0053 C036 8D 1A BSR GETCH
0054 C038 B7 C0 0B STA LADR+1
0055 C03B 8D 15 BSR GETCH Get Bytes count
0056 C03D 1F 89 TFR A,B
0057 C03F 5D TSTB
0058 C040 27 D9 BEQ LOAD1 Loop if count = 0
0059 C042 BE C0 0A LDX LADR Get load address
0060 C045 34 14 LOAD3 PSHS B,X
0061 C047 8D 09 BSR GETCH Get data character
0062 C049 35 14 PULS B,X
0063 C04B A7 80 STA ,X+ Store at load address
0064 C04D 5A DECB
0065 C04E 26 F5 BNE LOAD3 Loop until count = 0
0066 C050 20 C9 BRA LOAD1
0067 *
0068 * Get Character routine
0069 * Reads a sector if needed
0070 *
0071 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
0072 C056 26 0F BNE GETCH4 Go read Character if not
0073 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
0074 C05B EC 84 LDD 0,X Get forward Link
0075 C05D 27 0B BEQ GO if zero, file is loaded
0076 C05F 8D 27 BSR READ Read next sector
0077 C061 26 9D BNE BOOT start over if error
0078 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link
0079 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character
0080 C069 39 RTS
0081 *
0082 * File is loaded, Jump to it
0083 *
0084 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address
0085
0086 *
0087 ** FLEX 9 COMPACT FLASH DISK DRIVERS
0088 *
0089 * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
0090 * WITH I/O MAPPED AT $XE000
0091 * AND ROM MAPPED AT $XF000
0092 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
0093 * THE FIRST 64K IS USED BY FLEX,
0094 * THE SECOND 192K MAY BE USED AS A RAM DISK
0095 *
0096 *
0097 0010 IMASK EQU $10 IRQ MASK CC
0098 0040 FMASK EQU $40 FIRQ MASK CC
0099 FFF0 DATREG EQU $FFF0 DAT REGISTERS
0100 *
0101 E040 CF_BASE EQU $E040
0102 E040 CF_DATA EQU CF_BASE+0
0103 E041 CF_ERROR EQU CF_BASE+1 ; read error
0104 E041 CF_FEATURE EQU CF_BASE+1 ; write feature
0105 E042 CF_SECCNT EQU CF_BASE+2
0106 E043 CF_SECNUM EQU CF_BASE+3
0107 E044 CF_CYLLO EQU CF_BASE+4
0108 E045 CF_CYLHI EQU CF_BASE+5
0109 E046 CF_HEAD EQU CF_BASE+6
0110 E047 CF_STATUS EQU CF_BASE+7 ; read status
0111 E047 CF_COMAND EQU CF_BASE+7 ; write command
0112 *
0113 * Command Equates
0114 *
0115 0020 CMDREAD EQU $20 ; Read Single sector
0116 0030 CMDWRITE EQU $30 ; Write Single sector
0117 00EF CMDFEATURE EQU $EF
0118 0001 FEAT8BIT EQU $01 ; enable 8 bit transfers
0119 00E0 HEADLBA EQU $E0
0120 *
0121 * Status bit equates
0122 *
0123 0080 BSY EQU $80
0124 0040 DRDY EQU $40
0125 0008 DRQ EQU $08
0126 0001 ERR EQU $01
0127 *
0128 * RESTORE DISK DRIVER (SEEK TRACK 00)
0129 *
0130 C06E 7F C0 0C RESTR1 CLR DRVNUM
0131 C071 4F CLRA ; Track 0
0132 C072 C6 01 LDB #$01 ; Sector 1
0133 *
0134 * Seek track and sector
0135 * A holds track number (0 - ??)
0136 * B holds sector number (1 - ??)
0137 * Sector numbers starts from 1
0138 * subtract 1 to start from sector 0 on CF
0139 *
0140 C074 5A SEEKTS DECB
0141 C075 F7 E0 43 STB CF_SECNUM
0142 C078 B7 E0 44 STA CF_CYLLO
0143 C07B F6 C0 0C LDB DRVNUM
0144 C07E F7 E0 45 STB CF_CYLHI
0145 C081 C6 01 LDB #$01
0146 C083 F7 E0 42 STB CF_SECCNT
0147 C086 5F CLRB
0148 C087 39 WARMD1 RTS
0149 *
0150 * READ SECTORS FROM CF
0151 *
0152 *
0153 C088 8D EA READ BSR SEEKTS
0154 C08A 86 20 LDA #CMDREAD ; IDE READ MULTIPLE
0155 C08C B7 E0 47 STA CF_COMAND
0156 C08F 8D 18 BSR WAITRDY
0157 *
0158 * READ LOOP
0159 *
0160 C091 5F CLRB
0161 C092 8D 24 RDLP1 BSR WAITDRQ
0162 C094 B6 E0 40 LDA CF_DATA
0163 C097 A7 80 STA ,X+
0164 C099 5A DECB
0165 C09A 26 F6 BNE RDLP1
0166 *
0167 C09C 5F CLRB
0168 C09D 8D 19 RDLP2 BSR WAITDRQ
0169 C09F B6 E0 40 LDA CF_DATA
0170 C0A2 5A DECB
0171 C0A3 26 F8 BNE RDLP2
0172 *
0173 C0A5 8D 02 BSR WAITRDY
0174 C0A7 5F CLRB
0175 C0A8 39 RTS
0176 *
0177 * WAIT UNTIL READY
0178 *
0179 C0A9 B6 E0 47 WAITRDY LDA CF_STATUS
0180 C0AC 85 80 BITA #BSY
0181 C0AE 26 F9 BNE WAITRDY
0182 C0B0 B6 E0 47 LDA CF_STATUS
0183 C0B3 85 40 BITA #DRDY
0184 C0B5 27 F2 BEQ WAITRDY
0185 C0B7 39 RTS
0186 *
0187 * WAIT FOR DATA REQUEST
0188 *
0189 C0B8 B6 E0 47 WAITDRQ LDA CF_STATUS
0190 C0BB 85 08 BITA #DRQ
0191 C0BD 27 F9 BEQ WAITDRQ
0192 C0BF 39 RTS
0193 *
0194 END
Program + Init Data = 192 bytes
Error count = 0
/branches/mkfiles_rev1/src/boot/bootcf8.sh
1,0 → 1,198
../../Tools/as09/as09.exe cf8boot.asm -l > cf8boot.lst
../../Tools/as09/as09.exe cf8boot.txt -l > cf8boot.lst

powered by: WebSVN 2.1.0

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