diff --git a/drv/sdc.fs b/drv/sdc.fs index eb46d65..c2ce869 100644 --- a/drv/sdc.fs +++ b/drv/sdc.fs @@ -156,10 +156,7 @@ 0 ; -: _err - _desel - ABORT" SDC error" -; +: _err _desel ABORT" SDerr" ; ( dstaddr blkno -- ) : _sdc@ @@ -194,3 +191,36 @@ 1+ BLK( 512 + SWAP _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! +; diff --git a/emul/hw/rc2014/sdc.c b/emul/hw/rc2014/sdc.c index be1c7fc..ed39939 100644 --- a/emul/hw/rc2014/sdc.c +++ b/emul/hw/rc2014/sdc.c @@ -183,7 +183,6 @@ void sdc_spi_wr(SDC *sdc, uint8_t val) return; } if (cmd == 24) { - fprintf(stderr, "cmd24\n"); if (sdc->fp) { fseek(sdc->fp, arg2*512, SEEK_SET); }