home *** CD-ROM | disk | FTP | other *** search
/ ArachnoPhobia 34 / ArachnoPhobia_34_2005-04-16_Spiders-Crew_ROLE.d64 / 38mmcdrv.s < prev    next >
Text File  |  2023-02-26  |  9KB  |  406 lines

  1. ;    c64 mmc iNTERFACE v1.38 
  2.  
  3. ;    tESTPROGRAM READS sECTOR AFTER sECTOR WHEN YOU PRESS sPACE kEY
  4.  
  5. ;    FROM YOUR fat16 FORMATED mmc cARD
  6.  
  7. ;    a RED bOARDER SHOWS YOU AN eRROR WITH cARD OR rEADER 
  8.  
  9. ;
  10.  
  11. ;
  12.  
  13. ;    cOPYRIGHT (c) 2005 mARC sCHWARZBURG
  14.  
  15. ;
  16.  
  17. ;    tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  18.  
  19. ;    IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  20.  
  21. ;    THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
  22.  
  23. ;    (AT YOUR OPTION) ANY LATER VERSION.
  24.  
  25. ;
  26.  
  27. ;    tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  28.  
  29. ;    BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  30.  
  31. ;    merchantability OR fitness for a particular purpose.  sEE THE
  32.  
  33. ;    gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  34.  
  35. ;
  36.  
  37. ;    yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  38.  
  39. ;    ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
  40.  
  41. ;    fOUNDATION, iNC., 59 tEMPLE pLACE, sUITE 330, bOSTON, ma  02111-1307  usa
  42.  
  43. ;
  44.  
  45. ;    mmc lOWlEVEL dRIVER v1.37 (c64asm source)
  46.  
  47. ;    (c) 2004 mARC sCHWARZBURG wIEN 
  48.  
  49. ;    cONTACT ME : ROBTHECAT@FREENET.DE
  50.  
  51. ;    
  52.  
  53. ;
  54.  
  55. ; tEST SYSTEM
  56.  
  57.  
  58. ; 3.2 nEUES spi iNTERFACE, INPUT SCHIEBT NICHT RICHTIG
  59.  
  60. ; 3.3 port dEBUGGER AUF $4000 EINGERICHTET
  61.  
  62. ; SOME GLOBALS
  63.  
  64. ; 3.4 rCKWERT WIEDER AUSGEWWRTET
  65.  
  66. ; 3.5 bROWSE SOME bLOCKS (512  bYTE), eRRORPRINT AT cmd
  67.  
  68. ; 3.6 sECTOREN PASSEN NICHT, pROTOCOL FEHLER
  69.  
  70. ; kONZEPT ZUM lOADER DES cmd UND spi mODIFICATIONS  !!
  71.  
  72. ; 3.7 sTIMMT JETZT WENN MAN SICHS RICHTIG AUSRECCHNET WO EIN sEKTOR BEGINNT
  73.  
  74. ; 3.8 oPTIMIZED FOR sPEED, ALLE sLEEPS RAUS !
  75.  
  76. ;
  77.  
  78. ; dIESES sYSTEM IST NOCH nicht sPEEDoPTIMIERT !!!
  79.  
  80. ; wER zEIT HAT KANN DIE pORT wRITES oPTIMIEREN 
  81.  
  82. ; iCH GEHE JEDE pEGEL{$e4}NDERUNG ALS JSR STORE AN DIE hARDWARE WEITER !!
  83.  
  84. ; ALSO:
  85.  
  86. ;LDA OUT         
  87.  
  88. ;AND #$FD
  89.  
  90. ;               STA OUT
  91.  
  92. ;JSR STORE
  93.  
  94. ; mETHODE sTORE:
  95.  
  96. ; {CBM--}BERNEHME wERT IM aKKUMULATOR UND iNVERTIERE ALLE bITS (WEGEN DEM tREIBERBAUSTEIN, DER nEGIERT ALLES !)
  97.  
  98. ; sCHREIBE WERT NACH $DD01 !!
  99.  
  100. ;
  101.  
  102. ; gEHT ALS:
  103.  
  104. ;
  105.  
  106. ; LDA PORT
  107.  
  108. ; ORA #$02
  109.  
  110. ; STA PORT
  111.  
  112.  
  113.  
  114.  
  115. SETNAM = $FFBD
  116.  
  117. SETLFS = $FFBA
  118.  
  119. OPEN   = $FFC0
  120.  
  121. CLOSE  = $FFC3
  122.  
  123. CHKIN  = $FFC6
  124.  
  125. CHRIN  = $FFCF
  126.  
  127. BSOUT  = $FFD2
  128.  
  129. CLRCH  = $FFCC
  130.  
  131. PORTD  = $DD03
  132.  
  133. PORT   = $DD01
  134.  
  135. OUT    = $02
  136.  
  137. MMCMDRESET = $40
  138.  
  139. MMCMDINIT  = $41
  140.  
  141. WAIT=5
  142.  
  143. * = $C000
  144.  
  145. JMP MAIN
  146.  
  147. ;
  148.  
  149. ;    yOU cAN USE THIS pROGRAM AT YOUR OWN rISK OF DAMAGING YOUR dATA,hARDWARE,
  150.  
  151. ;    sOFTWARE, bRAIN OR WHATEVER !
  152.  
  153. ;    i{$e1}M NOT RESPONSIBLE FOR THIS.
  154.  
  155. ;    iF YOU WANT TO DO SOMETHING WITH THAT WORK, I.E COMPILE IT, YOU *HAVE TO* LET THE cOPYRIGHT 
  156.  
  157. ;    AND MY nAME INSIDE YOUR sOURCE *AND bINARY* fILES.
  158.  
  159.  
  160.  
  161. .TEXT "mmc/sd cARD iNTERFACE v1.38"
  162.  
  163. .TEXT "(c) mARC sCHWARZBURG/vIENNA mAILTO: ROBTHECAT@FREENET.DE"
  164.  
  165. ;O PB0 = /CS
  166.  
  167. ;O PB1 DATA
  168.  
  169. ;O PB2 CLK
  170.  
  171. ;I PB3 READ
  172.  
  173. ;
  174.  
  175. ; XXXX0---
  176.  
  177. ; lADEN WIR MAL LOS
  178.  
  179. ;
  180.  
  181. INIT            LDA #7
  182.  
  183. STA PORTD
  184.  
  185. LDA #0
  186.  
  187. LDA #%0000001
  188.  
  189. STA OUT
  190.  
  191. JSR STORE
  192.  
  193. RTS
  194.  
  195.  
  196.  
  197. ; STORE BYTE INVERTED TO PORT
  198.  
  199.  
  200.  
  201. STORE           EOR #$07 ; iNVERTIERE ALLE bITS, WEGEN tREIBERIC
  202.  
  203. STA PORT
  204.  
  205. ; DEBUG
  206.  
  207. ;JSR DEBUGGER
  208.  
  209. RTS
  210.  
  211.  
  212.  
  213. ; READ bYTE AND INVERTS IT 
  214.  
  215.  
  216.  
  217. READ            LDA PORT
  218.  
  219. EOR #$FF
  220.  
  221. LSR
  222.  
  223. LSR
  224.  
  225. LSR
  226.  
  227. AND #$01
  228.  
  229. RTS
  230.  
  231.  
  232.  
  233. ; sLEEPLOOP IF YOUR WIRES TO MMC ARE TO LONG !
  234.  
  235. SLEEP           TXA
  236.  
  237. PHA
  238.  
  239. LDX #WAIT
  240.  
  241. SLEEP1          DEX
  242.  
  243. BNE SLEEP1
  244.  
  245. PLA
  246.  
  247. TAX
  248.  
  249. RTS
  250.  
  251.  
  252.  
  253. ;------------------ spi ----------------------------
  254.  
  255. SPI             STA $03 ; BUFFER OUPUT REGISTER
  256.  
  257. LDA#0
  258.  
  259. STA $FA ; BUFFER INPUT REGISTER
  260.  
  261.  
  262. LDX #0
  263.  
  264. SPI2            ;
  265.  
  266. LDA OUT         ; CLK =0 FB    1011
  267.  
  268. AND #$FB                 
  269.  
  270. STA OUT                  
  271.  
  272. JSR STORE                
  273.  
  274. ;           
  275.  
  276. ; bIT 7 TO OUTPUT
  277.  
  278. CLC
  279.  
  280. ASL $03
  281.  
  282. BCS SPI3
  283.  
  284. LDA OUT         ; dATA = 0
  285.  
  286. AND #$FD
  287.  
  288. SPI4            STA OUT
  289.  
  290. JSR STORE
  291.  
  292.  
  293. ;
  294.  
  295. CLC
  296.  
  297. ASL $FA         ; sHIFT INPUT LEFT
  298.  
  299. LDA OUT         ; CLK = 1
  300.  
  301. ORA #$04
  302.  
  303. STA OUT
  304.  
  305. JSR STORE       
  306.  
  307. ;
  308.  
  309. ;
  310.  
  311. ; LESEN
  312.  
  313. JSR READ        ; rEAD DATAIN pIN TO BIT0
  314.  
  315. ORA $FA         ; CONNECT IT
  316.  
  317. STA $FA
  318.  
  319. ; oNE BIT OUT, ONE BIT IN, SAME TIME
  320.  
  321. INX
  322.  
  323. CPX #08
  324.  
  325. BNE SPI2
  326.  
  327. ; 3.6
  328.  
  329. ; AT THE eND SEND dATA = h !!
  330.  
  331. LDA OUT         ; dATA = 1
  332.  
  333. ORA #$02
  334.  
  335. STA OUT
  336.  
  337. JSR STORE
  338.  
  339. ;
  340.  
  341. LDA $FA
  342.  
  343. RTS
  344.  
  345.  
  346.  
  347.  
  348.  
  349. ;
  350.  
  351. SPI3            LDA OUT         ; dATA = 1
  352.  
  353. ORA #$02
  354.  
  355. JMP SPI4
  356.  
  357.  
  358.  
  359.  
  360.  
  361. ; -------------------- cOMMAND -----------------
  362.  
  363. CMD             ; 3.6 cs = h
  364.  
  365. LDA OUT
  366.  
  367. ORA #01
  368.  
  369. STA OUT
  370.  
  371. JSR STORE
  372.  
  373. ;
  374.  
  375. ; 3.6- sEND 8  cLOCKS
  376.  
  377. LDA #$FF
  378.  
  379. JSR SPI
  380.  
  381. ; cs = l
  382.  
  383. LDA OUT
  384.  
  385. AND #$FE
  386.  
  387. STA OUT
  388.  
  389. JSR STORE
  390.  
  391. ;
  392.  
  393. ;
  394.  
  395. ; COMMAND
  396.  
  397. LDA $0502
  398.  
  399. JSR SPI
  400.  
  401. ; 32BIT ADDRESS
  402.  
  403. LDA $0503
  404.  
  405. JSR SPI
  406.  
  407. LDA $0504
  408.  
  409. JSR SPI
  410.  
  411. LDA $0505
  412.  
  413. JSR SPI
  414.  
  415. LDA $0506
  416.  
  417. JSR SPI
  418.  
  419. ; cHECKSUM nEEDED
  420.  
  421. LDA $0507
  422.  
  423. JSR SPI
  424.  
  425. ; rESPONSE hi
  426.  
  427. ; 3.6 READ WHILE INPUT = FF
  428.  
  429. CMD1            LDA #$FF
  430.  
  431. JSR SPI
  432.  
  433. CMP #$FF
  434.  
  435. BEQ CMD1
  436.  
  437. ;LDA #$FF
  438.  
  439. ;JSR SPI
  440.  
  441. NOP
  442.  
  443. ;LESE R{$fc}CKGABEWERT
  444.  
  445. RTS
  446.  
  447. ; ------------------- mmc iNIT --------------
  448.  
  449. MMCINIT         LDA OUT         ; cs = 1
  450.  
  451. ORA #$01
  452.  
  453. STA OUT
  454.  
  455. JSR STORE
  456.  
  457. ; sTART mmc IN spi mODE 
  458.  
  459. LDY #$00
  460.  
  461. MMCINIT1        LDA #$FF
  462.  
  463. JSR SPI
  464.  
  465. INY
  466.  
  467. CPY #12
  468.  
  469. BNE MMCINIT1
  470.  
  471. LDA OUT         ; cs = 0
  472.  
  473. AND #$FE
  474.  
  475. STA OUT
  476.  
  477. JSR STORE
  478.  
  479.  
  480.  
  481. ; cmd 0 = rESET
  482.  
  483. LDA #MMCMDRESET
  484.  
  485. STA $0502
  486.  
  487. LDA #0
  488.  
  489. STA $0503
  490.  
  491. STA $0504
  492.  
  493. STA $0505
  494.  
  495. STA $0506
  496.  
  497. LDA #$95
  498.  
  499. STA $0507
  500.  
  501. JSR CMD           
  502.  
  503. STA $D021       ; sHOW ME IN BORDER  
  504.  
  505. ; ---- cARD READY ??
  506.  
  507. CMP #$01
  508.  
  509. BNE fEHLER      ; nO cARD = <>1
  510.  
  511. ;
  512.  
  513. LDA #MMCMDINIT   ; lOOP WHILE NOT READY
  514.  
  515. STA $0502       ;  sEND init TO mmc cARD
  516.  
  517. LDA #$FF
  518.  
  519. STA $0507       ; dUMMY cHECKSUM
  520.  
  521. MMCINIT2        JSR CMD
  522.  
  523. STA $D021       ;  sHOW ME IN BORDER  
  524.  
  525. CMP #$00
  526.  
  527. BNE MMCINIT2
  528.  
  529. ; 3.6 cs = h
  530.  
  531. LDA OUT
  532.  
  533. ORA #$01
  534.  
  535. STA OUT
  536.  
  537. JSR STORE
  538.  
  539. ;
  540.  
  541. RTS
  542.  
  543. ;
  544.  
  545. fEHLER          LDA #02
  546.  
  547. STA $D020
  548.  
  549. LDA #<ERROR2
  550.  
  551. LDY #>ERROR2
  552.  
  553. JSR $AB1E
  554.  
  555. RTS
  556.  
  557.  
  558.  
  559. ERROR2           .BYTE $0D
  560.  
  561. .TEXT "nO cARD FOUND, INSERT AGAIN."
  562.  
  563. ;.TEXT "nkEINE kARTE VORHANDEN - bITTE NOCHMAL REINSTECKEN." ;GERMAN
  564.  
  565. .BYTE 0
  566.  
  567.  
  568.  
  569. ; cOMMAND eRRPR : ZB. oUT OF aDRESS, WRONG pARAMETER, INTERFACE NOT SYNCHRON.
  570.  
  571. fEHLER2         PHA
  572.  
  573. LDA #02
  574.  
  575. STA $D021
  576.  
  577. LDA #<ERROR
  578.  
  579. LDY #>ERROR
  580.  
  581. JSR $AB1E
  582.  
  583. PLA
  584.  
  585. PHA
  586.  
  587. LSR
  588.  
  589. LSR
  590.  
  591. LSR
  592.  
  593. LSR
  594.  
  595. TAX
  596.  
  597. LDA HEXCODE,X
  598.  
  599. JSR $FFD2
  600.  
  601. PLA
  602.  
  603. AND #$0F
  604.  
  605. TAX
  606.  
  607. LDA HEXCODE,X
  608.  
  609. JSR $FFD2
  610.  
  611. LDA #$0D
  612.  
  613. JSR $FFD2
  614.  
  615. ;
  616.  
  617. RTS
  618.  
  619. HEXCODE         .TEXT "0123456789ABCDEF"                
  620.  
  621. ERROR           .BYTE $0D
  622.  
  623. .TEXT "CMD-ERROR: "
  624.  
  625. ;.TEXT "kOMMANDO FEHLGESCHLAGEN - fEHLER: " ; GERMAN
  626.  
  627. .BYTE 0
  628.  
  629.  
  630.  
  631.    
  632.  
  633. ; ------------------------------------
  634.  
  635.  
  636.  
  637. MAIN            JSR INIT
  638.  
  639. JSR MMCINIT
  640.  
  641. ;
  642.  
  643. ; lESE MAL 512 BYTES NACH 0600
  644.  
  645. ; wIE FUNKTIONIERTS ??
  646.  
  647. ; aLS eRSTERS WANDELST dU dEINE ADRESSE UM
  648.  
  649. ; cOMMAND 51, hh,hl,lh,ll,ff
  650.  
  651. ; DIE VIER bYTES hh,hl,lh,ll STELLEN DIE 32 bIT aDRESSE DA
  652.  
  653. ; dAS SIND aDRESSEN UND keine sECTOREN ODER GAR cLUSTER !!
  654.  
  655. ; eIN rEADsECTOR = IMMER 512 bYTE D.H DIE vARIABLE ll = IMMER
  656.  
  657. ; lEER, DIE vARIABLE lh = GERADER wERT (0,2,4,6,8)
  658.  
  659. ; vARIABLE hl GEHT VVON 0-255
  660.  
  661. ; vARIABLE hh GEHT VON 0-1 BEI MEINER 32 mb tESTKARTE
  662.  
  663. ;  wEIL MEHR GIBTS NICHT -> ERROR 20 (WRONG aDRESS)
  664.  
  665. ;
  666.  
  667. ; UM BEISPIELSWEISE ALLE sEKTOREN ZU ZEIGEN,
  668.  
  669. ; LADE 0,0,0,0 IN DEN cmd51
  670.  
  671. ; INC lh
  672.  
  673. ; INC lh
  674.  
  675. ;BNE WEITER
  676.  
  677. ; INC hl
  678.  
  679. ; BNE WEITER
  680.  
  681. ; INC hh
  682.  
  683. ; JMP rEADsECTOR
  684.  
  685. ;
  686.  
  687. ; IT MEANS:
  688.  
  689. ; yOU HAVE TO CALCULATE THE aDDRESS FROM AN SECTOR VIEW
  690.  
  691. ; rEMEMBER: aDDRESS = sECTORNUMBER * 512
  692.  
  693. ; tHIS IS A 32 bIT vALUE (hh,hl,lh,ll)
  694.  
  695. ;
  696.  
  697. LDA #$51
  698.  
  699. STA $0502       ; cOMMAND
  700.  
  701. LDA #$00        ; sECTOR hi h
  702.  
  703. STA $0503
  704.  
  705. LDA #$00        ; sECTOR hi l
  706.  
  707. STA $0504
  708.  
  709. LDA #$50        ; sECTOR lo h vALUES ONLY even !!
  710.  
  711. STA $0505
  712.  
  713. LDA #$00        ; sECTOR lo l ALWAYS 00
  714.  
  715. STA $0506
  716.  
  717. LDA #$FF        ; dUMMY crc
  718.  
  719. STA $0507
  720.  
  721. NEXTBLOCK       JSR CMD ; sECTOR rEAD cOMMAND
  722.  
  723. ;
  724.  
  725. CMP #0
  726.  
  727. BNE fEHLER2
  728.  
  729.  
  730.  
  731. MAIN2           LDA #$FF
  732.  
  733. JSR SPI
  734.  
  735. CMP #$FE
  736.  
  737. BNE MAIN2       ; WAIT TILL  ok ($fe)
  738.  
  739. LDY #0
  740.  
  741. MAIN3           LDA #$FF
  742.  
  743. JSR SPI
  744.  
  745. STA $0600,Y
  746.  
  747. INY
  748.  
  749. BNE MAIN3
  750.  
  751.  
  752.  
  753. MAIN4           LDA #$FF
  754.  
  755. JSR SPI
  756.  
  757. STA $0700,Y
  758.  
  759. INY
  760.  
  761. BNE MAIN4
  762.  
  763. ;               2 BYTE DONT CARE
  764.  
  765. LDA #$FF
  766.  
  767. JSR SPI
  768.  
  769. LDA #$FF
  770.  
  771. JSR SPI
  772.  
  773. ; GIVE A SPARE OF 8 CYCLES BETWEEN cOMMANDS
  774.  
  775. LDA #$FF
  776.  
  777. JSR SPI
  778.  
  779. ;
  780.  
  781. KEY             LDA $DC01
  782.  
  783. CMP #$EF
  784.  
  785. BNE KEY
  786.  
  787. INC $0505 ; sECTOR +1
  788.  
  789. INC $0505
  790.  
  791. BNE MAIN5
  792.  
  793. INC $0504
  794.  
  795. BNE MAIN5
  796.  
  797. INC $0503
  798.  
  799. MAIN5           JMP NEXTBLOCK
  800.  
  801. RTS
  802.  
  803.  
  804.  
  805. ; -------------------------------------------------------
  806.  
  807.