1 |
22 |
dilbert57 |
Assembler release DWC_2.0 version 2.11
|
2 |
|
|
May 6, 2004 (c) Motorola (free ware)
|
3 |
|
|
0001 *******************************************************
|
4 |
|
|
0002 *
|
5 |
|
|
0003 * Bootstrap FLEX Loader
|
6 |
|
|
0004 *
|
7 |
|
|
0005 * SBUG1.8 loads the bootstap loader at $C000
|
8 |
|
|
0006 * however the Flex adaption manual has the
|
9 |
|
|
0007 * bootstrap loader residing at $C100
|
10 |
|
|
0008 *
|
11 |
|
|
0009 ******************************************************
|
12 |
|
|
0010 *
|
13 |
|
|
0011 * Equates
|
14 |
|
|
0012 *
|
15 |
|
|
0013 C0FF STACK EQU $C0FF
|
16 |
|
|
0014 C300 SCTBUF EQU $C300
|
17 |
|
|
0015 *
|
18 |
|
|
0016 * Start of Utility
|
19 |
|
|
0017 *
|
20 |
|
|
0018 C000 ORG $C000
|
21 |
|
|
0019 C000 20 0B BOOT BRA LOAD0
|
22 |
|
|
0020 C002 00 00 00 FCB 0,0,0
|
23 |
|
|
0021 C005 00 TRK FCB 0 File start track
|
24 |
|
|
0022 C006 00 SCT FCB 0 File start sector
|
25 |
|
|
0023 C007 00 DNS FCB 0 Density Flag (not used)
|
26 |
|
|
0024 C008 C0 00 TADR FDB $C000 Transfer address
|
27 |
|
|
0025 C00A 00 00 LADR FDB 0 Load Address
|
28 |
|
|
0026 C00C 00 DRVNUM FCB 0 Drive number 0
|
29 |
|
|
0027 *
|
30 |
|
|
0028 C00D 10 CE C0 FF LOAD0 LDS #STACK Set up stack
|
31 |
|
|
0029 C011 FC C0 05 LDD TRK Set up start track and sector
|
32 |
|
|
0030 C014 FD C3 00 STD SCTBUF
|
33 |
|
|
0031 C017 10 8E C4 00 LDY #SCTBUF+256
|
34 |
|
|
0032 *
|
35 |
|
|
0033 * Perform actual file load
|
36 |
|
|
0034 *
|
37 |
|
|
0035 C01B 8D 35 LOAD1 BSR GETCH Get acharcater
|
38 |
|
|
0036 C01D 81 02 CMPA #$02 Data record hearder ?
|
39 |
|
|
0037 C01F 27 10 BEQ LOAD2 Skip, is so
|
40 |
|
|
0038 C021 81 16 CMPA #$16 Xfr address hearder ?
|
41 |
|
|
0039 C023 26 F6 BNE LOAD1 Loop if neither
|
42 |
|
|
0040 *
|
43 |
|
|
0041 * Get transfer address
|
44 |
|
|
0042 *
|
45 |
|
|
0043 C025 8D 2B BSR GETCH
|
46 |
|
|
0044 C027 B7 C0 08 STA TADR
|
47 |
|
|
0045 C02A 8D 26 BSR GETCH
|
48 |
|
|
0046 C02C B7 C0 09 STA TADR+1
|
49 |
|
|
0047 C02F 20 EA BRA LOAD1
|
50 |
|
|
0048 *
|
51 |
|
|
0049 * Load data record
|
52 |
|
|
0050 *
|
53 |
|
|
0051 C031 8D 1F LOAD2 BSR GETCH Get load address
|
54 |
|
|
0052 C033 B7 C0 0A STA LADR
|
55 |
|
|
0053 C036 8D 1A BSR GETCH
|
56 |
|
|
0054 C038 B7 C0 0B STA LADR+1
|
57 |
|
|
0055 C03B 8D 15 BSR GETCH Get Bytes count
|
58 |
|
|
0056 C03D 1F 89 TFR A,B
|
59 |
|
|
0057 C03F 5D TSTB
|
60 |
|
|
0058 C040 27 D9 BEQ LOAD1 Loop if count = 0
|
61 |
|
|
0059 C042 BE C0 0A LDX LADR Get load address
|
62 |
|
|
0060 C045 34 14 LOAD3 PSHS B,X
|
63 |
|
|
0061 C047 8D 09 BSR GETCH Get data character
|
64 |
|
|
0062 C049 35 14 PULS B,X
|
65 |
|
|
0063 C04B A7 80 STA ,X+ Store at load address
|
66 |
|
|
0064 C04D 5A DECB
|
67 |
|
|
0065 C04E 26 F5 BNE LOAD3 Loop until count = 0
|
68 |
|
|
0066 C050 20 C9 BRA LOAD1
|
69 |
|
|
0067 *
|
70 |
|
|
0068 * Get Character routine
|
71 |
|
|
0069 * Reads a sector if needed
|
72 |
|
|
0070 *
|
73 |
|
|
0071 C052 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
|
74 |
|
|
0072 C056 26 0F BNE GETCH4 Go read Character if not
|
75 |
|
|
0073 C058 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
|
76 |
|
|
0074 C05B EC 84 LDD 0,X Get forward Link
|
77 |
|
|
0075 C05D 27 0B BEQ GO if zero, file is loaded
|
78 |
|
|
0076 C05F 8D 27 BSR READ Read next sector
|
79 |
|
|
0077 C061 26 9D BNE BOOT start over if error
|
80 |
|
|
0078 C063 10 8E C3 04 LDY #SCTBUF+4 Point past link
|
81 |
|
|
0079 C067 A6 A0 GETCH4 LDA ,Y+ Else, get a character
|
82 |
|
|
0080 C069 39 RTS
|
83 |
|
|
0081 *
|
84 |
|
|
0082 * File is loaded, Jump to it
|
85 |
|
|
0083 *
|
86 |
|
|
0084 C06A 6E 9F C0 08 GO JMP [TADR] Jump to transfer address
|
87 |
|
|
0085
|
88 |
|
|
0086 *
|
89 |
|
|
0087 ** FLEX 9 COMPACT FLASH DISK DRIVERS
|
90 |
|
|
0088 *
|
91 |
|
|
0089 * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
|
92 |
|
|
0090 * WITH I/O MAPPED AT $XE000
|
93 |
|
|
0091 * AND ROM MAPPED AT $XF000
|
94 |
|
|
0092 * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
|
95 |
|
|
0093 * THE FIRST 64K IS USED BY FLEX,
|
96 |
|
|
0094 * THE SECOND 192K MAY BE USED AS A RAM DISK
|
97 |
|
|
0095 *
|
98 |
|
|
0096 *
|
99 |
|
|
0097 0010 IMASK EQU $10 IRQ MASK CC
|
100 |
|
|
0098 0040 FMASK EQU $40 FIRQ MASK CC
|
101 |
|
|
0099 FFF0 DATREG EQU $FFF0 DAT REGISTERS
|
102 |
|
|
0100 *
|
103 |
|
|
0101 E040 CF_BASE EQU $E040
|
104 |
|
|
0102 E040 CF_DATA EQU CF_BASE+0
|
105 |
|
|
0103 E041 CF_ERROR EQU CF_BASE+1 ; read error
|
106 |
|
|
0104 E041 CF_FEATURE EQU CF_BASE+1 ; write feature
|
107 |
|
|
0105 E042 CF_SECCNT EQU CF_BASE+2
|
108 |
|
|
0106 E043 CF_SECNUM EQU CF_BASE+3
|
109 |
|
|
0107 E044 CF_CYLLO EQU CF_BASE+4
|
110 |
|
|
0108 E045 CF_CYLHI EQU CF_BASE+5
|
111 |
|
|
0109 E046 CF_HEAD EQU CF_BASE+6
|
112 |
|
|
0110 E047 CF_STATUS EQU CF_BASE+7 ; read status
|
113 |
|
|
0111 E047 CF_COMAND EQU CF_BASE+7 ; write command
|
114 |
|
|
0112 *
|
115 |
|
|
0113 * Command Equates
|
116 |
|
|
0114 *
|
117 |
|
|
0115 0020 CMDREAD EQU $20 ; Read Single sector
|
118 |
|
|
0116 0030 CMDWRITE EQU $30 ; Write Single sector
|
119 |
|
|
0117 00EF CMDFEATURE EQU $EF
|
120 |
|
|
0118 0001 FEAT8BIT EQU $01 ; enable 8 bit transfers
|
121 |
|
|
0119 00E0 HEADLBA EQU $E0
|
122 |
|
|
0120 *
|
123 |
|
|
0121 * Status bit equates
|
124 |
|
|
0122 *
|
125 |
|
|
0123 0080 BSY EQU $80
|
126 |
|
|
0124 0040 DRDY EQU $40
|
127 |
|
|
0125 0008 DRQ EQU $08
|
128 |
|
|
0126 0001 ERR EQU $01
|
129 |
|
|
0127 *
|
130 |
|
|
0128 * RESTORE DISK DRIVER (SEEK TRACK 00)
|
131 |
|
|
0129 *
|
132 |
|
|
0130 C06E 7F C0 0C RESTR1 CLR DRVNUM
|
133 |
|
|
0131 C071 4F CLRA ; Track 0
|
134 |
|
|
0132 C072 C6 01 LDB #$01 ; Sector 1
|
135 |
|
|
0133 *
|
136 |
|
|
0134 * Seek track and sector
|
137 |
|
|
0135 * A holds track number (0 - ??)
|
138 |
|
|
0136 * B holds sector number (1 - ??)
|
139 |
|
|
0137 * Sector numbers starts from 1
|
140 |
|
|
0138 * subtract 1 to start from sector 0 on CF
|
141 |
|
|
0139 *
|
142 |
|
|
0140 C074 5A SEEKTS DECB
|
143 |
|
|
0141 C075 F7 E0 43 STB CF_SECNUM
|
144 |
|
|
0142 C078 B7 E0 44 STA CF_CYLLO
|
145 |
|
|
0143 C07B F6 C0 0C LDB DRVNUM
|
146 |
|
|
0144 C07E F7 E0 45 STB CF_CYLHI
|
147 |
|
|
0145 C081 C6 01 LDB #$01
|
148 |
|
|
0146 C083 F7 E0 42 STB CF_SECCNT
|
149 |
|
|
0147 C086 5F CLRB
|
150 |
|
|
0148 C087 39 WARMD1 RTS
|
151 |
|
|
0149 *
|
152 |
|
|
0150 * READ SECTORS FROM CF
|
153 |
|
|
0151 *
|
154 |
|
|
0152 *
|
155 |
|
|
0153 C088 8D EA READ BSR SEEKTS
|
156 |
|
|
0154 C08A 86 20 LDA #CMDREAD ; IDE READ MULTIPLE
|
157 |
|
|
0155 C08C B7 E0 47 STA CF_COMAND
|
158 |
|
|
0156 C08F 8D 18 BSR WAITRDY
|
159 |
|
|
0157 *
|
160 |
|
|
0158 * READ LOOP
|
161 |
|
|
0159 *
|
162 |
|
|
0160 C091 5F CLRB
|
163 |
|
|
0161 C092 8D 24 RDLP1 BSR WAITDRQ
|
164 |
|
|
0162 C094 B6 E0 40 LDA CF_DATA
|
165 |
|
|
0163 C097 A7 80 STA ,X+
|
166 |
|
|
0164 C099 5A DECB
|
167 |
|
|
0165 C09A 26 F6 BNE RDLP1
|
168 |
|
|
0166 *
|
169 |
|
|
0167 C09C 5F CLRB
|
170 |
|
|
0168 C09D 8D 19 RDLP2 BSR WAITDRQ
|
171 |
|
|
0169 C09F B6 E0 40 LDA CF_DATA
|
172 |
|
|
0170 C0A2 5A DECB
|
173 |
|
|
0171 C0A3 26 F8 BNE RDLP2
|
174 |
|
|
0172 *
|
175 |
|
|
0173 C0A5 8D 02 BSR WAITRDY
|
176 |
|
|
0174 C0A7 5F CLRB
|
177 |
|
|
0175 C0A8 39 RTS
|
178 |
|
|
0176 *
|
179 |
|
|
0177 * WAIT UNTIL READY
|
180 |
|
|
0178 *
|
181 |
|
|
0179 C0A9 B6 E0 47 WAITRDY LDA CF_STATUS
|
182 |
|
|
0180 C0AC 85 80 BITA #BSY
|
183 |
|
|
0181 C0AE 26 F9 BNE WAITRDY
|
184 |
|
|
0182 C0B0 B6 E0 47 LDA CF_STATUS
|
185 |
|
|
0183 C0B3 85 40 BITA #DRDY
|
186 |
|
|
0184 C0B5 27 F2 BEQ WAITRDY
|
187 |
|
|
0185 C0B7 39 RTS
|
188 |
|
|
0186 *
|
189 |
|
|
0187 * WAIT FOR DATA REQUEST
|
190 |
|
|
0188 *
|
191 |
|
|
0189 C0B8 B6 E0 47 WAITDRQ LDA CF_STATUS
|
192 |
|
|
0190 C0BB 85 08 BITA #DRQ
|
193 |
|
|
0191 C0BD 27 F9 BEQ WAITDRQ
|
194 |
|
|
0192 C0BF 39 RTS
|
195 |
|
|
0193 *
|
196 |
|
|
0194 END
|
197 |
|
|
Program + Init Data = 192 bytes
|
198 |
|
|
Error count = 0
|