Mercurial > hg > Members > kono > nitros9-code
annotate level1/modules/llcoco3fpga.asm @ 3139:96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
From Gary Becker.
Add llcoco3fpga.asm to level1/modules
author | Bill Pierce <merlinious999@gmail.com> |
---|---|
date | Sat, 04 Feb 2017 11:06:18 +0100 |
parents | |
children | c505ae3120c4 |
rev | line source |
---|---|
3139
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
1 ******************************************************************* |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
2 * llsd - Low-level SDHC/SD/MMC driver |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
3 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
4 * This driver talks to the SD card interface on the DE1 utilizing the CoCo3FPGA |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
5 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
6 * $FF64 (Control Register Write) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
7 * Bit 7 : SD Enable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
8 * Bit 6 : Enable Interrupt |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
9 * Bits 5-1 : not used |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
10 * Bit 0 : SPI Device Select #1 (DE1 SD Card) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
11 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
12 * $FF64 (Status Register Read) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
13 * Bit 7 : IRQ Active |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
14 * Bits 6-2 : not used |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
15 * Bit 1 : SD Card Locked (Write Protect) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
16 * Bit 0 : SD Installed |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
17 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
18 * $FF65 (Data Register R/W) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
19 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
20 * Edt/Rev YYYY/MM/DD Modified by |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
21 * Comment |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
22 * ------------------------------------------------------------------ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
23 * 1 2012/06/16 Gary Becker |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
24 * Rewritten to work with 8 bit SPI on CoCo3FPGA |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
25 * 2 2015/06/06 Gary Becker |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
26 * Removed any code to enable multiple slots (single slot only) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
27 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
28 *Level EQU 2 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
29 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
30 NAM llcoco3fpga |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
31 TTL Low-level SDHC/SD/MMC driver |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
32 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
33 USE defsfile |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
34 USE rbsuper.d |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
35 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
36 tylg SET Sbrtn+Objct |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
37 atrv SET ReEnt+rev |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
38 rev SET 0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
39 edition SET 4 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
40 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
41 MOD eom,name,tylg,atrv,start,0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
42 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
43 ORG V.LLMem |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
44 * Low-level driver static memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
45 SEC_CNT RMB 1 Number of sectors to transfer |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
46 SEC_LOC RMB 2 Where they are or where they go |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
47 SEC_ADD RMB 3 LSN of sector |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
48 SDVersion RMB 1 0 = Byte Addressable SD |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
49 * !0 = Sector Addressable SD |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
50 CMDStorage RMB 1 Command storage area for read/write CMDs |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
51 SD_SEC_ADD RMB 4 Four bytes because some devices are byte addressable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
52 CMDCRC RMB 1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
53 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
54 ************************************** |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
55 * Command bytes storage area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
56 ************************************** |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
57 CMD0 fcb $40,$00,$00,$00,$00,$95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
58 *CMD1 fcb $41,$00,$00,$00,$00,$95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
59 CMD8 fcb $48,$00,$00,$01,$AA,$87 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
60 *CMD13 fcb $4D,$00,$00,$00,$00,$95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
61 CMD16 fcb $50,$00,$00,$02,$00,$FF was 95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
62 ACMD41V1 fcb $69,$00,$00,$00,$00,$FF was 95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
63 ACMD41V2 fcb $69,$40,$00,$00,$00,$FF was 95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
64 CMD55 fcb $77,$00,$00,$00,$00,$FF was 95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
65 CMD58 fcb $7A,$00,$00,$00,$00,$FF was 95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
66 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
67 * Read/Write commands |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
68 CMDRead EQU $5100 Command to read a single block |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
69 CMDWrite EQU $5800 Command to write a sector |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
70 CMDEnd EQU $00FF Every command ends with $95 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
71 * SPI Address Equates |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
72 * SPI Control Register |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
73 SPICTRL EQU 0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
74 SLOT_SEL_0 EQU 1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
75 SPI_IRQ_EN EQU $40 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
76 SPI_EN EQU $80 Sets SPI enable and IRQ enable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
77 * SPI Status Register |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
78 SPISTAT EQU 0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
79 CARD_DET_0 EQU 1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
80 CARD_LOCK_0 EQU 2 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
81 IRQ_SLOT_0 EQU $80 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
82 * SPI Transmit / Receive Register |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
83 SPIDAT EQU 1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
84 * Test 8 bit LED display |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
85 SPITRACE EQU $FF66 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
86 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
87 name FCS /llcoco3fpga/ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
88 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
89 start lbra ll_init |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
90 bra ll_read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
91 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
92 lbra ll_write |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
93 lbra ll_getstat |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
94 lbra ll_setstat |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
95 lbra ll_term |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
96 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
97 EREAD |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
98 ldd #$0000+E$Read A=Disable SPI Interface, but not CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
99 * B=Read Error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
100 lbra RETERR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
101 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
102 * ll_read - Low level read routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
103 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
104 * Entry: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
105 * Registers: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
106 * Y = address of path descriptor |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
107 * U = address of device memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
108 * Static Variables of interest: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
109 * V.PhysSect = starting physical sector to read from |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
110 * V.SectCnt = number of physical sectors to read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
111 * V.SectSize = physical sector size (0=256,1=512,2=1024,3=2048) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
112 * V.CchPSpot = address where physical sector(s) will go |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
113 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
114 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
115 * All registers may be modified |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
116 * Static variables may NOT be modified |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
117 * Initialization errors are not flagged as an error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
118 * SDCards are hot pluggable and card might be plugged in later |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
119 ll_read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
120 * Setup read command |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
121 orcc #IntMasks disable interrupts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
122 ldx V.Port-UOFFSET,u Get address of hardware |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
123 lda V.SectCnt,u Get number of sectors to read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
124 sta SEC_CNT,u Save it to our usable storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
125 ldd V.CchPSpot,u get the location to copy the sector into |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
126 std SEC_LOC,u Save it into our usable storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
127 ldd V.PhysSect,u Copy Sector Adrress into our storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
128 std SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
129 lda V.PhysSect+2,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
130 sta SEC_ADD+2,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
131 lda SPISTAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
132 lsra |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
133 bcc EREAD No card installed, so no reads |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
134 lphr lda SEC_CNT,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
135 ldd #CMDRead |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
136 std CMDStorage,u Read command and clear MSB of address |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
137 ldd #CMDEnd |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
138 std SD_SEC_ADD+3,u Clear LSB of address and CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
139 rd_loop lda #(SPI_EN+SLOT_SEL_0) but not IRQ enable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
140 bsr LSNMap0 Setup the appropriate LSN value for the card, build command, |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
141 * setup SPI to access the card, and sends command |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
142 bcs EREAD If we timed out, branch with error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
143 bne EREAD If the R1 was not 0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
144 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
145 ldy SEC_LOC,u Get the sector buffer address |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
146 ldb #$00 256 loops of 2 reads of 1 bytes is 512 bytes |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
147 lprd lda SPIDAT,x Send FF (receive a byte) until we get FE |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
148 cmpa #$FE Do we need more cycles?????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
149 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
150 bne lprd |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
151 * Read the 512 Byte sector |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
152 * we need a minumum of 4 CPU cycles to read in the 8 bits |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
153 RDSectorLoop lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
154 sta ,y+ ? cycles ????????????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
155 nop might be too much ??????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
156 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
157 sta ,y+ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
158 decb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
159 bne RDSectorLoop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
160 * Get the last two bytes of the sector (CRC bytes) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
161 lda SPIDAT,x Send 2x FF to get the CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
162 sty SEC_LOC,u Save out buffer pointer |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
163 * nop Might be too many cycles ????????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
164 lda SPIDAT,x We ignore the CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
165 dec SEC_CNT,u decrement # of hw sectors to read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
166 beq finird if zero, we are finished |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
167 *Increment sector number by 1 for sector addressable or $200 for byte addressable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
168 incsec inc SEC_ADD+2,u add one to 3 byte LSN |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
169 bne lphr if we are at 0 then we need to add |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
170 inc SEC_ADD+1,u the carry to the next byte |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
171 bne lphr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
172 inc SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
173 bra lphr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
174 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
175 * No errors, exit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
176 finird |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
177 ldd #$0000 Disable SPI and exit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
178 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
179 andcc #^(IntMasks+Carry) Renable Interrupts and clear carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
180 rts return |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
181 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
182 ************** |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
183 * LSNMap |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
184 * Take physical LSN and convert into SDHC/SD/MMC LSN |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
185 * SD/MMC uses a 32 bit byte mapping for the LSN, so we must shift the logical LSN up one bit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
186 * and then clear the 4th byte to build the correct LSN string |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
187 * SDHC uses a 32 bit 512 byte sector mapping for the LSN.So there is no need to shift the LSN |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
188 * we can just write it as is and clear out the upper LSN byte, because we only get 3 bytes from coco for LSN |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
189 * does not preserve Reg A |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
190 ************** |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
191 LSNMap0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
192 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
193 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
194 lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
195 lda SDVersion,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
196 bne secadd GoTo Sector Address type |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
197 *Save the sector number into the command |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
198 ldd SEC_ADD+1,u bytes 1 and 2 (middle and LSB) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
199 aslb Byte address needs to be shifter one more bit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
200 rola |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
201 std SD_SEC_ADD+1,u and stored in the first 3 bytes of a 4 byte address |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
202 lda SEC_ADD,u MSB |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
203 rola |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
204 sta SD_SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
205 bra merge |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
206 secadd |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
207 ldd SEC_ADD+1,u Save the sector number into our storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
208 std SD_SEC_ADD+2,u Store in the last three bytes of the 4 byte address |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
209 lda SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
210 sta SD_SEC_ADD+1,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
211 merge lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
212 LSNMap1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
213 leay CMDStorage,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
214 * Fall through to cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
215 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
216 * cmdsend - Sends a 6 byte command |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
217 * Entry: X = HW addr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
218 * Y = Address of first byte of command sequence |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
219 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
220 * Registers preserved: all but A/B/X |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
221 cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
222 lda ,y |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
223 sta $FF66 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
224 ldb #6 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
225 cslp lda ,y+ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
226 sta SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
227 decb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
228 bne cslp |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
229 * If finished, fall through to GETR1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
230 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
231 * Entry: X = HW addr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
232 * Exit: A = R1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
233 * CC.C = 0 OK |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
234 * CC.C = 1 ERROR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
235 * Registers preserved: all but A/B |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
236 GetR1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
237 andcc #^Carry Clear Carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
238 ldb #$00 Probably too much |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
239 lpgtr1 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
240 bpl finigtr1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
241 decb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
242 bne lpgtr1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
243 comb set carry for error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
244 finigtr1 rts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
245 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
246 * ll_write - Low level write routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
247 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
248 * Entry: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
249 * Registers: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
250 * Y = address of path descrip |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
251 * U = address of device memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
252 * Static Variables of interest: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
253 * V.PhysSect = starting physical sector to write to |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
254 * V.SectCnt = number of physical sectors to write |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
255 * V.SectSize = physical sector size (0=256,1=512,2=1024,3=2048) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
256 * V.CchPSpot = address of data to write to device |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
257 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
258 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
259 * All registers may be modified |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
260 * Static variables may NOT be modified |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
261 ll_write |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
262 orcc #IntMasks disable interrupts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
263 ldx V.Port-UOFFSET,u Get address of hardware |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
264 lda V.SectCnt,u Get number of sectors to write` |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
265 sta SEC_CNT,u Save it to our usable storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
266 ldd V.CchPSpot,u get the location to of the sector send |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
267 std SEC_LOC,u Save it into our usable storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
268 ldd V.PhysSect,u Copy Sector Adrress into our storage |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
269 std SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
270 lda V.PhysSect+2,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
271 sta SEC_ADD+2,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
272 lda SPISTAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
273 lsra |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
274 lbcc EWRITE No card installed, so no writes |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
275 lsra |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
276 lbcs EWP Write Protected, then exit with WP error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
277 * The big read sector loop comes to here |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
278 lphw ldd #CMDWrite |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
279 std CMDStorage,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
280 ldd #CMDEnd |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
281 std SD_SEC_ADD+3,u LSB of address and CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
282 wr_loop lda #(SPI_EN+SLOT_SEL_0) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
283 bsr LSNMap0 Setup the appropriate LSN value for the card, build command, |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
284 * setup SPI to access the card, and sends command |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
285 bcs EWRITE |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
286 bne EWRITE |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
287 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
288 lda SPIDAT,x 2 bytes >= 1 byte after R1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
289 nop Might not be enough ????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
290 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
291 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
292 ldd #$FE00 Start of sector byte and clear counter |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
293 ldy SEC_LOC,u get the location of the sectors(s) to write |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
294 sta SPIDAT,x Mark the start of the sector |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
295 nop Too much ??????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
296 * Write the 512 Byte sector |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
297 WRSectorLoop lda ,y+ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
298 sta SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
299 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
300 lda ,y+ |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
301 sta SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
302 decb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
303 bne WRSectorLoop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
304 lda SPIDAT,x send two FFs as CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
305 sty SEC_LOC,u Save out buffer pointer |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
306 nop Might not be enough ??????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
307 stb SPIDAT,x Second FF (send 0 to check) |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
308 cmpa #$E5 Response - Data accepted token |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
309 beq fnd0 First byte? if not, check four more bytes. |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
310 * Make sure the response was accepted |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
311 lda SPIDAT,x This should be the data we got back during the write of the last CRC |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
312 * nop But we do send another ff so we can get the E5 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
313 cmpa #$E5 Response - Data accepted token |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
314 beq fnd0 First byte? if not, check three more bytes. |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
315 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
316 cmpa #$E5 Response - Data accepted token if this is not it, then we have an issue |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
317 beq fnd0 First byte? if not, check two more bytes. |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
318 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
319 cmpa #$E5 Response - Data accepted token if this is not it, then we have an issue |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
320 beq fnd0 First byte? if not, check one more byte. |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
321 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
322 cmpa #$E5 Response - Data accepted token if this is not it, then we have an issue |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
323 bne EWRITE Write error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
324 * Check to see if the write is complete |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
325 fnd0 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
326 beq lpwr2 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
327 bra fnd0 Ths beq and bra could be a bne, but I want the extra cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
328 lpwr2 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
329 cmpa #$FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
330 beq wfin |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
331 bra lpwr2 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
332 wfin ldb #10 Lets send 16 more FF just in case |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
333 finlp lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
334 decb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
335 bne finlp |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
336 dec SEC_CNT,u decrement # of hw sectors to read |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
337 beq finiwr if zero, we are finished |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
338 inc SEC_ADD+2,u add one to 3 byte LSN |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
339 bne lphw if we are at 0 then we need to add |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
340 inc SEC_ADD+1,u the carry to the next byte |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
341 lbne lphw |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
342 inc SEC_ADD,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
343 lbra lphw |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
344 * No errors, exit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
345 finiwr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
346 ldd #$0000 Diable SPI and exit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
347 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
348 andcc #^(IntMasks+Carry) Renable Interrupts and clear carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
349 rts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
350 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
351 * Error handlers |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
352 EWRITE |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
353 ldd #$0000+E$Write A=Enable SPI Interface, but not CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
354 * B=Write Error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
355 bra RETERR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
356 EWP |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
357 ldd #$0000+E$WP A=Enable SPI Interface, but not CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
358 * B=Write Protect Error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
359 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
360 RETERR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
361 sta SPICTRL,x Set the hardware |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
362 andcc #^IntMasks Enable interrupts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
363 coma Set Carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
364 rts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
365 NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
366 ldd #$0000+E$NotRdy Turn off controller and turn on IRQ and flag not ready error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
367 bra RETERR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
368 * ll_init - Low level init routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
369 * Entry: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
370 * Y = address of device descriptor |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
371 * U = address of low level device memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
372 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
373 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
374 * CC = carry set on error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
375 * B = error code |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
376 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
377 * Note: This routine is called ONCE: for the first device |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
378 * IT IS NOT CALLED PER DEVICE! |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
379 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
380 ll_init |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
381 orcc #IntMasks disable interrupts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
382 lda $FFD9 Speed up |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
383 ldx V.PORT-UOFFSET,u load x with the hw address for the IRQ routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
384 lda SPISTAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
385 lsra |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
386 bcc NOTRDY If there is no card, nothing to do |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
387 * Enable SPI |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
388 ldd #SPI_EN*256+$10 Enable SPI Interface, but not CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
389 * 16*8 cycles is >= 74 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
390 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
391 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
392 *send at least 74 clock cycles with no SS, 12*8 = 96 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
393 lpff lda SPIDAT,x Send FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
394 decb 2 cycles, need 4 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
395 * nop 2 cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
396 bne lpff 3 Cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
397 *Initialize card 0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
398 CRD0 lda #SPI_EN+SLOT_SEL_0 Enable SPI and lower CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
399 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
400 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
401 * sdinit - initializes SD Cards, if installed |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
402 sdinit |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
403 * Send CMD0 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
404 lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
405 nop ????????? enough |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
406 leay CMD0,pcr Might need more cycles ??????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
407 lda SPIDAT,x Send 1 more FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
408 lbsr cmdsend Also does a GETR1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
409 bcs NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
410 anda #$7E Idle is ok |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
411 bne NOTRDY but nothing else |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
412 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
413 * Send CMD8 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
414 lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
415 nop ?????? enough |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
416 leay CMD8,pcr Might need more cycles ?????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
417 lda SPIDAT,x Sens 1 more FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
418 lbsr cmdsend Also does an GETR1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
419 bcs SDV1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
420 anda #$7E |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
421 bne SDV1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
422 lda SPIDAT,x Byte 1 of R3/R7, through it away |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
423 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
424 nop might need more ???????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
425 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
426 lda SPIDAT,x Byte 2 of R3/R7, throught it away |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
427 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
428 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
429 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
430 lda SPIDAT,x Byte 3 of R3/R7, should be 1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
431 cmpa #$01 2 cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
432 bne NOTRDY 2 cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
433 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
434 lda SPIDAT,x Byte 4 of R3/R7, should be $AA |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
435 cmpa #$AA 2 cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
436 bne NOTRDY 2 cycles |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
437 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
438 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
439 * Send ACMD41 by first CMD55 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
440 loop41V2 lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
441 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
442 leay CMD55,pcr might need more ?????? |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
443 lda SPIDAT,x Send 1 FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
444 lbsr cmdsend Also does an GETR1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
445 bcs NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
446 anda #$7E Idle is ok |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
447 bne NOTRDY but nothing else |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
448 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
449 * Then send ACMD41 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
450 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
451 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
452 leay ACMD41V2,pcr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
453 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
454 lbsr cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
455 bcs NOTRDY No response |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
456 beq Send58 If 0 then CMD58 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
457 cmpa #$01 if 1 then try again |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
458 beq loop41V2 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
459 lbra NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
460 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
461 * Send CMD58 to V2 card |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
462 Send58 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
463 nop ?????? ENOUGH |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
464 leay CMD58,pcr Read OCR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
465 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
466 lbsr cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
467 lbcs NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
468 lda SPIDAT,x Byte 1 of OCR |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
469 anda #$40 CCS bit 1= sector 0= byte |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
470 sta SDVersion,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
471 lda SPIDAT,x Byte 2 of R3/R7, through it away |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
472 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
473 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
474 lda SPIDAT,x Byte 3 of R3/R7, through it away |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
475 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
476 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
477 lda SPIDAT,x Byte 4 of R3/R7, through it away |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
478 lda SDVersion,u 0 = byte addressable, !0 = block addressable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
479 bne FININIT |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
480 bra Send16 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
481 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
482 * Send ACMD41 by first CMD55 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
483 SDV1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
484 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
485 loop41V1 lda SPIDAT,x Get extra bytes in case we got a bad R7 previously |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
486 nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
487 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
488 * nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
489 clr SDVersion,u Byte addressable |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
490 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
491 * nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
492 leay CMD55,pcr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
493 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
494 lbsr cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
495 lbcs NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
496 anda #$7E Idle is ok |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
497 lbne NOTRDY but nothing else |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
498 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
499 * Then send ACMD41 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
500 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
501 * nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
502 leay ACMD41V1,pcr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
503 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
504 lbsr cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
505 lbcs NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
506 beq Send16 If 0 then CMD16 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
507 cmpa #$01 if 1 then try again |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
508 beq loop41V1 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
509 lbra NOTRDY |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
510 * Send CMD16 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
511 Send16 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
512 * nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
513 leay CMD16,pcr |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
514 lda SPIDAT,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
515 lbsr cmdsend |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
516 lbne NOTRDY but nothing else |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
517 * Finish INIT |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
518 FININIT |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
519 lda SPIDAT,x Send last FF |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
520 * nop |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
521 * lda SDVersion,u |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
522 * sta $ff66 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
523 * lda #SPI_EN+SPI_IRQ_EN Turn on SPI and Interrupt and turn off CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
524 lda #SPI_EN Turn on SPI and turn off CS |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
525 sta SPICTRL,x |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
526 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
527 *Finished with initialization |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
528 *Use the stat routine to return |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
529 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
530 * ll_getstat - Low level GetStat routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
531 * ll_setstat - Low level SetStat routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
532 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
533 * Entry: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
534 * Y = address of path descriptor |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
535 * U = address of device memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
536 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
537 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
538 * CC = carry set on error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
539 * B = error code |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
540 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
541 ll_getstat |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
542 ll_setstat |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
543 andcc #^Carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
544 clrb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
545 rts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
546 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
547 * ll_term - Low level term routine |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
548 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
549 * Entry: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
550 * Y = address of device descriptor |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
551 * U = address of device memory area |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
552 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
553 * Exit: |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
554 * CC = carry set on error |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
555 * B = error code |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
556 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
557 * Note: This routine is called ONCE: for the last device |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
558 * IT IS NOT CALLED PER DEVICE! |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
559 * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
560 ll_term |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
561 clrb |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
562 andcc #^Carry |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
563 rts |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
564 |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
565 EMOD |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
566 eom EQU * |
96cb9d947e0b
New low-level driver for CoCo3FPGA SD card interface
Bill Pierce <merlinious999@gmail.com>
parents:
diff
changeset
|
567 END |