drv/sdc: Implement SDC!
This has been tested in the RC2014 emulator. I could edit blocks with the Block Editor and they would correctly be written to SDC.
This commit is contained in:
parent
47a7133b8b
commit
a70366aa43
38
drv/sdc.fs
38
drv/sdc.fs
@ -156,10 +156,7 @@
|
|||||||
0
|
0
|
||||||
;
|
;
|
||||||
|
|
||||||
: _err
|
: _err _desel ABORT" SDerr" ;
|
||||||
_desel
|
|
||||||
ABORT" SDC error"
|
|
||||||
;
|
|
||||||
|
|
||||||
( dstaddr blkno -- )
|
( dstaddr blkno -- )
|
||||||
: _sdc@
|
: _sdc@
|
||||||
@ -194,3 +191,36 @@
|
|||||||
1+ BLK( 512 + SWAP
|
1+ BLK( 512 + SWAP
|
||||||
_sdc@
|
_sdc@
|
||||||
;
|
;
|
||||||
|
|
||||||
|
( srcaddr blkno -- )
|
||||||
|
: _sdc!
|
||||||
|
_sel
|
||||||
|
0x58 ( CMD24 )
|
||||||
|
0 ROT ( a cmd 0 blkno )
|
||||||
|
_cmd
|
||||||
|
IF _err THEN
|
||||||
|
_idle DROP
|
||||||
|
0xfe _sdcSR DROP
|
||||||
|
0 SWAP ( crc a )
|
||||||
|
512 0 DO ( crc a )
|
||||||
|
C@+ ( crc a+1 n )
|
||||||
|
ROT OVER ( a n crc n )
|
||||||
|
_crc16 ( a n crc )
|
||||||
|
SWAP ( a crc n )
|
||||||
|
_sdcSR DROP ( a crc )
|
||||||
|
SWAP ( crc a )
|
||||||
|
LOOP
|
||||||
|
DROP ( crc )
|
||||||
|
256 /MOD ( lsb msb )
|
||||||
|
_sdcSR DROP ( lsb )
|
||||||
|
_sdcSR DROP
|
||||||
|
_wait DROP
|
||||||
|
_desel
|
||||||
|
;
|
||||||
|
|
||||||
|
: SDC!
|
||||||
|
2 * DUP BLK( SWAP ( b a b )
|
||||||
|
_sdc!
|
||||||
|
1+ BLK( 512 + SWAP
|
||||||
|
_sdc!
|
||||||
|
;
|
||||||
|
@ -183,7 +183,6 @@ void sdc_spi_wr(SDC *sdc, uint8_t val)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cmd == 24) {
|
if (cmd == 24) {
|
||||||
fprintf(stderr, "cmd24\n");
|
|
||||||
if (sdc->fp) {
|
if (sdc->fp) {
|
||||||
fseek(sdc->fp, arg2*512, SEEK_SET);
|
fseek(sdc->fp, arg2*512, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user