DriverMMC $NOTES $ # ]MM=1 - memory mapped mode MM=0 - user port mode WE=1 - writes enabled WE=0 - writes disabled MMC  by Martin Mather  2005 (: 2 7 <*KEY0*BE|M F: P WE%=0 Z MM%=0 d: n MMC=&FE18 x: VIA=&FE60 IORB=VIA DDRB=VIA+2 SR=VIA+&A ACR=VIA+&B PCR=VIA+&C : bout=&70 bin=&71 : cmd% 20  mem% 512  code% 200 :  MM% DTA : " clkpol%=0 , align%=0 6ass @: Juv T MMCINIT ^: h TfB r: | act$="R"  WE%=0 tZA % "(R)ead / (W)rite Sector ",act$  "Sector number ",sec% :  act$="W" djA : rdsec(sec%,mem%) dump(mem%)  D|A :  sec%<400 D|A  "From hex address ",F$ F%=("&"+F$) wrsec(sec%,F%)  D|A : & 0 : <>17 D|A D N: X: b MMC(C%,A%,K%) l: v Send command to MMC  ?cmd%=C%  cmd%!1=A%  cmd%?5=K%  w(&FF) w(cmd%?0) w(cmd%?4) w(cmd%?3) w(cmd%?2) w(cmd%?1) w(cmd%?5)  w(&FF) R%=rw(&FF) " "MMC: ";~C%,~A%,~K%,"= ";~R% :  =R% :  : * MMCINIT 4: > 80 clocks H I=0 9 R w(&FF) \ f: p CMD0 zX%=MMC(&40,0,&95)  X%=1 dTC  "CMD 0 FAILED!"  X%=&FF DHC : align%=(align%+1) 8 ass  DHC :  CMD1 X%=MMC(&41,0,&FF)  X%=0 TPD  "CMD 1 FAILED!"  dTC :  READ CARD ID X%=MMC(&4A,0,&FF) $ X%=0 DLD . "CID FAILED!" 8 tRD B: L "CID: "; V I=0 19 `X%=rw(&FF) j ;~X%;" "; t ~ :  : :  uv :  Set up VIA  ?DDRB=7  ?IORB=0  ?ACR=0  ?SR=0 :   : :  rdsec(S%,D%) (: 2 Read 512 byte sector S% to < address D% F: PX%=MMC(&51,S%*512,&FF) Z X%=0 tLE d "READ ERROR!" n TbF x:  wait for data token X%=rw(&FF)  X%<>&FE tLE :  read data  X%=0 511 D%?X%=rw(&FF)  :  read (ignore) CRC  w(&FF)  w(&FF) :  1 extra for safety  w(&FF) : " ,: 6: @ wrsec(S%,D%) J: T Write sector S% with ^ data at D% h: rX%=MMC(&58,S%*512,&FF) | X%=0 tdF  "WRITE ERROR 1!"  DXG :  w(&FF)  w(&FF)  w(&FE) :  X%=0 511  w(D%?X%)  :  w(&FF)  w(&FF) : X%=rw(&FF) &1F  X%=5 TzG & "WRITE ERROR 2!" 0: :X%=rw(&FF) D X%<>&FF TzG N: X b: l: v send byte to MMC :  w(A%):R%=rw(A%): :  rw(A%)  MM% ?MMC=A%:=?MMC  rwmmc:=?bin : :  ass :  o%=0 3 3  P%=code% :  [OPT o%  .rwmmc \ send/rec byte  \ MSB first *: 4 STA bout >] H x=7 0 -1 R [OPT o% \ ROL bout fLDA #clkpol% p ROL A z STA IORB ]  clkpol%=1 [OPT o%: #1:]  clkpol%=0 [OPT o%:A #2:]  [OPT o%  STA IORB ]  x<>align% drH  [OPT o%  LDA SR  STA bin ]  x  [OPT o% RTS ]  o% $ "SIZE=";P%-code% .: 8 B: L: V dump(D%) `S%=8 j X%=0 511 S% t x(X%,4); ~ L$=""  Y%=0 S%-1 B%=D%?(X%+Y%)  ;" ";x(B%,2); . B%>=&20 B%<127 L$=L$+(B%) L$=L$+"."   ;" ";L$   : :  x(N%,Z%) ="0000"+~N%,Z%)