annotate 3rdparty/drivers/mmc/mmcdrv.asm @ 2632:9356ea0bf67a

Added for Robert Gault
author Boisy Pitre <boisy.pitre@nuance.com>
date Sun, 26 Feb 2012 22:42:43 -0600
parents aa2a7c7dd3ec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1511
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
1 ********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
2 * MMCDRV Color Computer MultiMedia Card Driver
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
3 * Version 2.0.1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
4 * Copyright (C) 2003 Jim Hathaway III KG4KNB@hat3.net
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
5 ********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
7 ************************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
8 * Updates:
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
9 * 06/16/03 - Copied code from version 321 driver and changed for asm
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
10 * Did this to see if there is some other issue with ASM
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
11 * cross assembly of this module. Still having problems when
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
12 * trying to write any file to a MMC formatted with the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
13 * newer driver driver. This driver seems to work with ASM
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
14 * there must be a bug with the other modified version
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
15 * 06/17/03 - Moved from 001b version to 100 after testing showed no
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
16 * issues.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
17 * Worked on making code similar to other code. Need to test
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
18 * this code as is to see if it will still work.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
19 * Made EXTREME changes to the code. Will need mucho debugo
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
20 * 06/18/03 - More time working through.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
21 * 06/19/03 - Fixed a bug in the read code that did not set PD.BUF correctly
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
22 * Y was being loaded with V.PORT before PD.BUF,y was calculated
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
23 * Write sector routine was missing Y=V.Port setup as well as
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
24 * MDN,u setup before calling GREAD.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
25 * LSN0PROC - missing RTS, also moved clearing of the LSN0 flag
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
26 * to the LSN0PROC subroutine and removed it from the READ
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
27 * subroutine. Found and fixed several bugs today. Including
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
28 * the problem last night with an iniz causing the driver to
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
29 * loop and access the card.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
30 * 06/24/03 - Found a bug in the error return routines, comb should have
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
31 * been done BEFORE the error number is loaded. Was causing
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
32 * a read error 244 to be returned as error 011
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
33 * 06/29/03 - Found final bug causing problems in nlevel2. IF an error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
34 * was returned from the chkrs routine the delay was not called
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
35 * before exit, then the calling routine went back and sent the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
36 * command again and stepped on the spi transfer. After all
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
37 * bytes are written or read at slow speed the delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
38 * MUST be called!
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
39 *************************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
40
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
41 NUMDRIVE equ 2 Max. # of device descriptors for this driver
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
42 CMDREAD equ $51 Command to read a single block
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
43 CMDWRITE equ $58 Command to write a sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
44 MMCCSB equ $80 MMC control register slow clock bit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
45 MMCCRO equ 1 MMC control register offset from data port
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
46 DLYAMT equ $28 Standard delay amount used in DLYSTART
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
47 CRDPULS equ $A Number of times to loop for card init
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
48
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
49 nam MMCDRV
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
50 ttl MMC device driver for CoCo
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
51
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
52 ifp1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
53 use defsfile
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
54 endc
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
55
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
56 tylg set Drivr+Objct
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
57 atrv set ReEnt+rev
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
58 rev set $02
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
59 edition equ 2
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
60
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
61 mod eom,name,tylg,atrv,start,size
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
62
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
63 org 0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
64 rmb DRVBEG+(DRVMEM*NUMDRIVE)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
65
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
66 * Start of driver-specific statics
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
67 LSN0 rmb 1 Byte flag to indicate LSN0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
68 MDN rmb 1 MMC Drive Number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
69 SECT2WR rmb 1 Determines the sector to write
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
70 OS9SECT rmb 2 Temp storage for OS9 sector address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
71 SECTPNT rmb 2 Temp storage for Sector Buffer pointer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
72 BUFFER1 rmb 256 Sector buffer location for write cmds
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
73 RCMDBLK rmb 6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
74 WCMDBLK rmb 6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
75
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
76 size equ .
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
77
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
78 fcb $FF mode byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
79
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
80 name fcs /MMCDRV/ module name
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
81 fcb edition module edition
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
82
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
83
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
84 * Start point
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
85 start lbra INIT
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
86 lbra READ
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
87 lbra WRITE
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
88 lbra GETSTA
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
89 lbra SETSTA
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
90 lbra TERM
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
91 * End start
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
92
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
93 ********************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
94 * Command bytes storage area
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
95 ********************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
96 CMD0 fcb $40,0,0,0,0,$95
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
97 CMD1 fcb $41,0,0,0,0,$95
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
98 CMD13 fcb $4D,0,0,0,0,$95
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
99 CMD171 fcb $50,0,0,1,0,$95
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
100 CMD172 fcb $50,0,0,2,0,$95
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
101
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
102 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
103 * LSN0PROC - Process drive table when LSN0 is loaded.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
104 * Called from READ
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
105 * Added pshs, puls y to preserve y holding the address of the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
106 * MMC 6/19/03 JMH
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
107 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
108 LSN0PROC pshs y Save y for return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
109 ldb MDN,u Get drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
110 decb Make drive 1 = 0, drive 2 = 1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
111 lda #DRVMEM # bytes to copy from LSN0 to drive table
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
112 mul Compute drive table location
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
113 leay DRVBEG,u Point to start of drive tables
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
114 leay d,y
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
115 ldx SECTPNT,u We need to get the sector buffer to use
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
116 lda #DD.SIZ Get drive table size
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
117 RDCL1 ldb ,x+ From copy
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
118 stb ,y+ To Copy
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
119 deca Loop for entire path descriptor
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
120 bne RDCL1 Loop till done
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
121 clr LSN0,u Set LSN0 false 0=f 1=t
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
122 puls y,pc Restore/return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
123
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
124 * End LSN0PROC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
125
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
126 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
127 * Send a command string to the MMC (6 bytes) with delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
128 * Can be called as SNDCS for sending command and checking status
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
129 * or just chkrs can be called to see if the card returns the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
130 * correct response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
131 * Entry: X=Pointer to command string to send
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
132 * Y=MMC Command data port
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
133 * A=Used for loop and not preserved
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
134 *
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
135 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
136 SNDCS pshs d,x Save regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
137 ldb #6 Number of command bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
138 SNDCLS lda ,x+ Get command byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
139 sta ,y Send command byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
140 lbsr DLYSTRT Call our delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
141 decb Are we done?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
142 bne SNDCLS Keep looping until complete
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
143 puls d,x Restore regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
144
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
145 CHKRS pshs d
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
146 clrb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
147 CHKRSL1 lbsr DLYSTRT Call our delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
148 cmpa ,y Check for response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
149 beq CHKRSG Response is good, exit without error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
150 decb Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
151 bne CHKRSL1 Done yet?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
152
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
153 CHKRSB lbsr DLYSTRT Call our delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
154 comb Set error state
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
155 puls d,pc Cleanup/Return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
156 CHKRSG lbsr DLYSTRT Call our delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
157 clrb Set no error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
158 puls d,pc Restore / Return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
159
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
160 *********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
161 * Delay Routine - For use during initialization to slow down the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
162 * read and write commands to the MMC because we must use a speed of
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
163 * less than 400k for the clock until CMD1 is issued (per MMC specs.)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
164 *********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
165 DLYSTRT pshs b Save b register for return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
166 ldb #DLYAMT Standard delay amount
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
167 DLYLP1 decb Start of delay loop
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
168 bne DLYLP1 End of delay loop
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
169 puls b,pc Get value of b register back
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
170 * End delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
171
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
172 *******************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
173 * INIT - Standard OS9 init function. Enable all MMCs if present and
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
174 * request sector buffer block. Also set drive tables values.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
175 ********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
176 INIT ldy V.PORT,u Get MMC base port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
177 lda #NUMDRIVE Number of cards to init
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
178
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
179 INITL1 sta MDN,u Get card number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
180 lbsr INITCRD Try and init card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
181 deca
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
182 bne INITL1 Keep looping
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
183
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
184 lda #CMDREAD Setup bytes for each command area
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
185 sta RCMDBLK,u Save them to each area
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
186 lda #CMDWRITE
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
187 sta WCMDBLK,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
188 ldd #$0095 Final two cmd bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
189 std RCMDBLK+4,u Save last two cmd bytes for read
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
190 std WCMDBLK+4,u Save last two cmd bytes for write
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
191
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
192 clr LSN0,u Set LSN0 false 0=f 1=t
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
193
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
194 leax DRVBEG,u Point to start of drive tables
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
195 ldb #NUMDRIVE Number of drives supported
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
196 stb V.NDRV,u Store the number of drives
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
197 lda #$ff
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
198 INITL2 sta DD.TOT,x DD.TOT MSB to bogus value
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
199 sta V.TRAK,x Init current track # to bogus value
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
200 leax DRVMEM,x Get next drive table location
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
201 decb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
202 bne INITL2 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
203
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
204 clr MMCCRO,y Deselect any cards in use
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
205
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
206 GETSTA
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
207 SETSTA
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
208 TERM
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
209 clrb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
210 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
211
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
212 ********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
213 * WRITE SECTOR
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
214 * Must read in correct sector then write out
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
215 * a 512 byte sector. MMCs only support 512 byte sectors
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
216 * for write.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
217 ********************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
218 WRITE stb RCMDBLK+1,u Save LSN for read command
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
219 stx RCMDBLK+2,u Save LSN for read command
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
220
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
221 stb WCMDBLK+1,u Save LSN for write command
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
222 stx WCMDBLK+2,u Save LSN for write command
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
223
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
224 ldx PD.BUF,y Get real sector address for later
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
225 stx OS9SECT,u Save os9 sector address for later
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
226
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
227 lda WCMDBLK+3,u Adjust WLSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
228 anda #$FE Mask bit 0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
229 sta WCMDBLK+3,u Adjust WLSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
230
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
231 lda RCMDBLK+3,u Get lowest LSN byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
232 anda #1 Mask bits 7-1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
233 sta SECT2WR,u Save it for later
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
234 beq WRROWE Go RO WE 1=(RE,WO) 0=(RO,WE)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
235
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
236 WRREWO ldd RCMDBLK+2,u Get upper LSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
237 subd #1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
238 std RCMDBLK+2,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
239 ldb RCMDBLK+1,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
240 sbcb #0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
241 stb RCMDBLK+1,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
242
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
243 bra WRGO
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
244
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
245 WRROWE ldd RCMDBLK+2,u Get upper LSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
246 addd #1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
247 std RCMDBLK+2,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
248 ldb RCMDBLK+1,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
249 adcb #0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
250 stb RCMDBLK+1,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
251
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
252 WRGO leax BUFFER1,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
253 stx SECTPNT,u Save sector buffer for read
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
254
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
255 lda PD.DRV,y Get drive # requested
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
256 inca
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
257 sta MDN,u Save requested drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
258
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
259 ldy V.PORT,u Get MMC base port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
260
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
261 lbsr GREAD Go get buffered sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
262 lbcs EWRITE Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
263
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
264 WRGO1 leax CMD172,pcr Get command to change sector to 512 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
265 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
266 lbsr SNDCF Go send the command (cmd17-2)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
267 lbcs ENOTRDY Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
268
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
269 leax WCMDBLK,u Get address of write command block
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
270 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
271 lbsr SNDCF Send this command without delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
272 lbcs ENOTRDY Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
273
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
274 lda #254 Start of data sector byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
275 sta ,y Save start of sector byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
276
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
277 WRGO2 tst SECT2WR,u 1=(RE,WO) 0=(RO,WE)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
278 bne WRREWO1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
279
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
280 WRROWE1 ldx OS9SECT,u Get real sector buffer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
281 bsr WRSEC Go write 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
282 leax BUFFER1,u Get buffered sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
283 bra WRDC1 Data send complete
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
284
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
285 WRREWO1 leax BUFFER1,u Get buffered sector buffer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
286 bsr WRSEC Go write 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
287 ldx OS9SECT,u Get real sector buffer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
288 WRDC1 bsr WRSEC Go write 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
289
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
290 * dropped the code to send two crc bytes - the routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
291 * that reads the card to see if the $E5 response is given
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
292 * also sends data, so no separate crc code is needed
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
293
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
294 lda #$E5 Response - Data accepted tolken
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
295 lbsr CHKRF Check for correct response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
296 lbcs EWRITE Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
297
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
298 lda #$FF Response - Card complete with write
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
299 lbsr CHKRF Check for correct response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
300 lbcs EWRITE Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
301
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
302 leax CMD13,pcr Get check status command
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
303 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
304 lbsr SNDCF Go send the command (cmd13)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
305 lbcs EWRITE Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
306 lbsr CHKRF Check for correct response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
307 lbcs EWRITE Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
308
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
309 leax CMD171,pcr Get command to change sector to 256
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
310 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
311 lbsr SNDCF Go send the command (cmd17-1)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
312 lbcs ENOTRDY Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
313
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
314 lbsr WREXIT Clean exit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
315
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
316 * End of write sector routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
317
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
318 ********************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
319 * WRSEC - Write a single 256 byte sector to the MMC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
320 * Entry: Y=MMC data port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
321 * X=Sector location to copy from
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
322 ********************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
323 IFNE SMALLC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
324 WRSEC clrb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
325 WRLP1 lda ,x+ Get data byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
326 sta ,y Store data byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
327 decb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
328 bne WRLP1 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
329 rts Return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
330
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
331 ELSE
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
332
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
333 WRSEC leax 15,x
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
334 lda #8 Number of loops to run
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
335 pshs a Used for loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
336 WRBLK1 ldd -15,x Get 2 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
337 sta ,y Save byte 1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
338 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
339 stb ,y Save byte 2
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
340 ldd -13,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
341 sta ,y Save byte 3
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
342 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
343 stb ,y Save byte 4
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
344 ldd -11,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
345 sta ,y Save byte 5
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
346 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
347 stb ,y Save byte 6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
348 ldd -9,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
349 sta ,y Save byte 7
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
350 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
351 stb ,y Save byte 8
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
352 ldd -7,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
353 sta ,y Save byte 9
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
354 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
355 stb ,y Save byte 10
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
356 ldd -5,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
357 sta ,y Save byte 11
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
358 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
359 stb ,y Save byte 12
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
360 ldd -3,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
361 sta ,y Save byte 13
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
362 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
363 stb ,y Save byte 14
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
364 ldd -1,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
365 sta ,y Save byte 15
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
366 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
367 stb ,y Save byte 16
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
368 ldd 1,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
369 sta ,y Save byte 17
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
370 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
371 stb ,y Save byte 18
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
372 ldd 3,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
373 sta ,y Save byte 19
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
374 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
375 stb ,y Save byte 20
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
376 ldd 5,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
377 sta ,y Save byte 21
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
378 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
379 stb ,y Save byte 22
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
380 ldd 7,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
381 sta ,y Save byte 23
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
382 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
383 stb ,y Save byte 24
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
384 ldd 9,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
385 sta ,y Save byte 25
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
386 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
387 stb ,y Save byte 26
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
388 ldd 11,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
389 sta ,y Save byte 27
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
390 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
391 stb ,y Save byte 28
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
392 ldd 13,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
393 sta ,y Save byte 29
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
394 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
395 stb ,y Save byte 30
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
396 ldd 15,x Get 2 more bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
397 sta ,y Save byte 31
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
398 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
399 stb ,y Save byte 32
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
400 leax 32,x Add 32 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
401 dec ,s Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
402 bne WRBLK1 Loop back and do it again
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
403 puls a,pc Clean stack, return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
404
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
405 ENDC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
406
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
407 * End of WRSEC subroutine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
408
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
409 *************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
410 * INITCRD : Init a single card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
411 * Entry: Y=MMC data port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
412 * MDN,u = card number (1..X)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
413 * Registers preserved
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
414 *************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
415 INITCRD pshs d,x
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
416
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
417 lda #MMCCSB Change MMC clock to slow speed
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
418 sta MMCCRO,y Write slow speed bit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
419 lda #CRDPULS Clock pulses needed to init cards
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
420
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
421 * Per MMC spec - before any commands are sent to the card 80 clock
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
422 * pulses must be sent at a speed of less than 400k. After init
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
423 * is complete we will use the full speed of 3.56 Mhz. This is the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
424 * clock speed of the serial shift. 8 cycles at 3.56 Mhz are required
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
425 * to complete the SPI transfer.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
426
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
427 ICLKPL1 tst ,y Send 8 clock pulses to card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
428 lbsr DLYSTRT Call our delay routine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
429 deca Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
430 bne ICLKPL1 Loop until all clocks done
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
431
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
432 lda MDN,u Get card number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
433 ora #MMCCSB Select slow clock bit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
434 sta MMCCRO,y Write to MMC control register slow speed
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
435
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
436 leax CMD0,pcr x = cmd0 address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
437 lda #$01 Response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
438 lbsr SNDCS Go send the command w/ delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
439 lbcs INITCE1 This card is not ready exit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
440
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
441 ldb #20 Number of times to send CMD1 before error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
442 INCMD1L leax CMD1,pcr Load address into x for cmd1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
443 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
444 lbsr SNDCS Go send the command (cmd1)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
445 bcc INC1C We got our response, continue
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
446 decb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
447 bne INCMD1L Keep trying to get a response of 0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
448 lbcs INITCE1 This card is not ready exit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
449
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
450 INC1C lda MDN,u Get card number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
451 sta MMCCRO,y Write to MMC control register full speed
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
452
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
453 leax CMD171,pcr Get command to change sector to 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
454 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
455 lbsr SNDCF Go send the command (cmd17-1) w/o delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
456 bcs INITCE1 Error changing to 256 byte sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
457
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
458 clrb No error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
459 puls d,x,pc Clean exit
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
460
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
461 INITCE1 comb Error, we could not init card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
462 puls d,x,pc
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
463
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
464 * End of INITCRD
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
465
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
466
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
467 *****************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
468 * READ - Read a single 256 byte sector. Uses GREAD to get the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
469 * sector into memory
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
470 *****************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
471 READ stb RCMDBLK+1,u Save LSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
472 stx RCMDBLK+2,u Save LSN
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
473
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
474 leax 0,x Check for LSN0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
475 bne RDS1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
476 tstb Check for LSN0
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
477 bne RDS1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
478 inc LSN0,u Set LSN0 Flag
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
479
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
480 RDS1 lda PD.DRV,y Get drive # requested
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
481 inca Set drive number correctly
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
482 sta MDN,u Save drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
483
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
484 ldx PD.BUF,y Get physical sector buffer pointer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
485 stx SECTPNT,u Store the sector buffer location
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
486
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
487 ldy V.PORT,u Get MMC base port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
488
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
489 bsr GREAD Get our sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
490 lbcs EREAD Exit with read error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
491
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
492 tst LSN0,u Is this LSN0?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
493 beq RDEX1 Complete - return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
494
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
495 lbsr LSN0PROC Process LSN0 information
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
496
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
497 WREXIT
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
498 RDEX1 clrb Set no errors
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
499 clr MMCCRO,y Deselect any cards in use
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
500 rts Read complete with no errors
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
501
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
502 * End of READ
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
503
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
504 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
505 * Send a command string to the MMC (6 bytes) w/o delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
506 * Can be called as SNDCF for sending command and checking status
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
507 * or just CHKRF can be called to see if the card returns the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
508 * correct response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
509 * Entry: X = Pointer to command string to send
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
510 * Y = MMC Command data port
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
511 * A = Used for loop and not preserved
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
512 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
513 SNDCF
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
514 IFNE SMALLC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
515
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
516 pshs d,x Save regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
517 ldb #$06 Loop amount
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
518 SNDCFL1 lda ,x+ Get command byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
519 sta ,y Save byte to card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
520 decb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
521 bne SNDCFL1 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
522 puls d,x Restore regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
523
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
524 ELSE
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
525
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
526 pshs d Save regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
527 ldd ,x Get command bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
528 sta ,y Save byte 1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
529 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
530 stb ,y Save byte 2
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
531 ldd 2,x Get command bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
532 sta ,y Save byte 3
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
533 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
534 stb ,y Save byte 4
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
535 ldd 4,x Get command bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
536 sta ,y Save byte 5
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
537 nop Delay to complete SPI transfer
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
538 stb ,y Save byte 6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
539 puls d Restore regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
540
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
541 ENDC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
542
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
543 * Try to quickly get a response from the MMC. 128 loops
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
544 * is only a guess as to how long an average command response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
545 * might be. After the 128 loops it is obvious that the card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
546 * may need more time to process the command (such as a write)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
547 * command. At that point we sleep for 1 tick to give the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
548 * card time to complete the request. Then try another 255 times
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
549 * to get the response before we return an error.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
550 * 6-24-03 JMH - Found something interesting in NLevel2 V030102
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
551 * testing last night. The MMC would not initialize aparently
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
552 * based on the LED pattern being displayed. Level2 OS9 is able
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
553 * to use this driver without problems. As I think about it more
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
554 * it might be the fact that in 6309 mode the CPU is able to
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
555 * execute instructions faster and so it is stepping on the
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
556 * spi shift.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
557 * 6-24-03 JMH - Moved pshs x lower into subroutine to save
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
558 * some time if a sleep is not needed then there is no reason
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
559 * to pshs x and puls x.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
560
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
561 CHKRF pshs d Save regs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
562 clrb Number of loops
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
563
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
564 CHKRFL1 cmpa ,y
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
565 beq CHKRFG Got our response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
566 cmpa ,y
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
567 beq CHKRFG Got our response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
568 decb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
569 bne CHKRFL1 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
570
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
571 * This sleep should only occur when writing to the card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
572 pshs x Save x for later
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
573 ldx #1 Sleep for remainder of this tick
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
574 os9 F$Sleep Wait for card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
575 puls x Restore
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
576
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
577 clrb Number of loops = 256
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
578 CHKRFL2 cmpa ,y
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
579 beq CHKRFG Got our response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
580 decb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
581 bne CHKRFL2 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
582
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
583 CHKRFB comb Set error state
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
584 puls d,pc Cleanup/Return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
585 CHKRFG clrb Set no error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
586 puls d,pc Cleanup/Return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
587
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
588 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
589 * GREAD - New generic read subroutine. Requires:
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
590 * MDN,u = drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
591 * RCMDBLK,u LSN (RCMDBLK+1,RCMDBLK+2,RCMDBLK+3)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
592 * SECTPNT,u = location to copy sector to
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
593 * Y = V.port,u (MMC base port address)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
594 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
595 GREAD
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
596 lda MDN,u
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
597 sta MMCCRO,y Select MMC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
598
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
599 lda ,y Burn a byte - bug fix
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
600
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
601 lda #$FF Expected card response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
602 bsr CHKRF Go check for response byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
603 bcc RDN1 Is card ready? If yes continue
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
604
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
605 lbsr INITCRD Try and initialize the card requested
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
606 lbcs ENOTRDY Not ready - no card found in slot
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
607
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
608 lda MDN,u Get drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
609 sta MMCCRO,y Write to MMC control register
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
610
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
611 RDN1 leax RCMDBLK,u Read command block
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
612 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
613 bsr SNDCF Send this command without delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
614 bcc RDN2 If command did not generate err continue
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
615
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
616 lbsr INITCRD Try and initialize the card requested
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
617 lbcs ENOTRDY Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
618
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
619 lda MDN,u Get drive number again
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
620 sta MMCCRO,y Set card selected at full speed
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
621
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
622 leax RCMDBLK,u Read command block
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
623 lda #$00 Expected response - cmd accepted
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
624 bsr SNDCF Send this command without delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
625 lbcs ENOTRDY Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
626
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
627 RDN2 lda #$FE Expected response start of sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
628 bsr CHKRF Check for response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
629 lbcs EREAD Read Error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
630
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
631 ldx SECTPNT,u We need to get the sector buffer to use
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
632 bsr RDSEC Go read the sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
633
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
634 clrb Set no errors
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
635 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
636
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
637 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
638 * RDSEC - Read a single 256 byte sector from the MMC + 2 CRC bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
639 * Entry: Y=MMC data port address
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
640 * X=Sector location to copy to
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
641 ***************************************************************
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
642 IFNE SMALLC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
643 RDSEC pshs x Save x
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
644 clrb Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
645 RDLP1 lda ,y Get data byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
646 sta ,x+ Store data byte
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
647 decb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
648 bne RDLP1 Keep looping?
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
649 * ldd ,y Get CRC bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
650 * lda ,y Get CRC bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
651 puls x,pc Restore/return
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
652
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
653 ELSE
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
654
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
655 * Using a 5 bit offset only adds 1 cycle to each of the STD instructs.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
656 * incrementing the X index register each time by ++ adds 3 instructions
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
657 * so this saves 2 cycles for every 2 bytes transfered. 2 cycles * 16
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
658 * STD instructions = 32 saved cycles per loop or 256 cycles per sector
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
659 * read. This loop uses about 1900 cycles to complete. A simple lda
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
660 * sta single byte move loop takes about 3900 cycles to complete. This
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
661 * is a more than 50% increase in speed for this loop (this is where
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
662 * the driver uses the most CPU time). 6309 users note! a TFM will not
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
663 * work because you need AT LEAST 4 coco (regardless of the CoCo's actual
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
664 * speed) cycles between data port access for the SPI cycle to complete.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
665 * If a write or read occurs during the four cycles
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
666 * after a byte is read/wrote to the SPI data port then the data
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
667 * transfer will be corrupted.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
668
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
669 RDSEC leax 15,x Move to the middle of the 32 byte block
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
670 lda #8 Number of loops to run
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
671 pshs a Used for loop
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
672 RDLP1 ldd ,y Load byte 1
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
673 ldb ,y Load byte 2
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
674 std -15,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
675 ldd ,y Load byte 3
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
676 ldb ,y Load byte 4
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
677 std -13,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
678 ldd ,y Load byte 5
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
679 ldb ,y Load byte 6
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
680 std -11,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
681 ldd ,y Load byte 7
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
682 ldb ,y Load byte 8
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
683 std -9,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
684 ldd ,y Load byte 9
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
685 ldb ,y Load byte 10
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
686 std -7,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
687 ldd ,y Load byte 11
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
688 ldb ,y Load byte 12
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
689 std -5,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
690 ldd ,y Load byte 13
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
691 ldb ,y Load byte 14
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
692 std -3,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
693 ldd ,y Load byte 15
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
694 ldb ,y Load byte 16
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
695 std -1,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
696 ldd ,y Load byte 17
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
697 ldb ,y Load byte 18
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
698 std 1,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
699 ldd ,y Load byte 19
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
700 ldb ,y Load byte 20
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
701 std 3,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
702 ldd ,y Load byte 21
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
703 ldb ,y Load byte 22
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
704 std 5,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
705 ldd ,y Load byte 23
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
706 ldb ,y Load byte 24
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
707 std 7,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
708 ldd ,y Load byte 25
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
709 ldb ,y Load byte 26
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
710 std 9,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
711 ldd ,y Load byte 27
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
712 ldb ,y Load byte 28
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
713 std 11,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
714 ldd ,y Load byte 29
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
715 ldb ,y Load byte 30
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
716 std 13,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
717 ldd ,y Load byte 31
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
718 ldb ,y Load byte 32
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
719 std 15,x Store two bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
720 leax 32,x Add 32 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
721 dec ,s Loop counter
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
722 bne RDLP1 Loop back and do it again
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
723
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
724 * Eliminated the code to pull two CRC bytes from the card.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
725 * The routine that checks for the correct response will
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
726 * extract these two bytes from the MMC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
727
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
728 * ldd ,y Get 1 byte of CRC data from card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
729 * ldb ,y Get 1 byte of CRC data from card
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
730
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
731 puls a,pc
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
732
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
733 ENDC
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
734
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
735 * End of RDSEC subroutine
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
736
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
737 ENOTRDY bsr ERREXIT
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
738 comb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
739 ldb #E$NotRdy Not ready
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
740 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
741
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
742 EWRITE bsr ERREXIT
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
743 comb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
744 ldb #E$Write Write error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
745 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
746
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
747 EREAD bsr ERREXIT
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
748 comb
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
749 ldb #E$Read Read error
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
750 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
751
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
752 * Added to handle things that need to occur if an error occurs
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
753 * 1. Select the card (may already be selected)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
754 * 2. Send command to change sector size back to 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
755 * 3. Clear the LSN0 flag (may already be cleared)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
756 * 4. Deselect all cards.
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
757
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
758 ERREXIT lda MDN,u Get drive number
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
759 sta MMCCRO,y Select card (in case not selected)
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
760 leax CMD171,pcr Get command to change sector to 256 bytes
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
761 lda #$00 Expected response
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
762 lbsr SNDCF Go send the command (cmd17-1) w/o delay
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
763
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
764 clr lsn0,u Clear LSN0 flag if set
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
765 clr MMCCRO,y Deselect any cards
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
766 rts
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
767
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
768 emod
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
769 eom equ *
aa2a7c7dd3ec Added from Jim Hathaway
boisy
parents:
diff changeset
770 end