Subversion Repositories pentevo

Rev

Rev 553 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 09.02.2010 savelij
  3.  
  4. ;Входные параметры общие:
  5. ;HL-адрес загрузки в память
  6. ;BCDE-32-х битный номер сектора
  7. ;A-количество блоков (блок=512 байт)
  8. ;только для многоблочной записи/чтении
  9.  
  10. ;Ошибки выдаваемые на выходе:
  11. ;A=0-инициализация прошла успешно
  12. ;A=1-карта не найдена или не ответила
  13.  
  14. Sd_init         EQU 0
  15. Sd__off         EQU 1
  16. Rdsingl         EQU 2
  17. Rdmulti         EQU 3
  18.  
  19. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С SD
  20. COMSDZ          EX AF,AF'
  21.                 LD A,IYL
  22.                 AND A
  23.                 LD A,(NEXTBYTERST8)
  24.                 JR Z,COMSDZ1
  25.                 EX (SP),HL
  26.                 LD A,(HL)
  27.                 INC HL
  28.                 EX (SP),HL
  29. COMSDZ1         ADD A,A
  30.                 PUSH HL
  31.                 LD HL,RET4SDZ
  32.                 EX (SP),HL
  33.                 PUSH HL
  34.                 LD HL,TABLSDZ
  35.                 ADD A,L
  36.                 LD L,A
  37.                 ADC A,H
  38.                 SUB L
  39.                 LD H,A
  40.                 XOR A
  41.                 OUT (PEVO_CONF),A
  42.                 LD A,(HL)
  43.                 INC HL
  44.                 LD H,(HL)
  45.                 LD L,A
  46.                 EX AF,AF'
  47.                 EX (SP),HL
  48.                 RET
  49.  
  50. RET4SDZ         PUSH AF
  51.                 LD A,IYL
  52.                 AND A
  53.                 JR NZ,RET4SD1
  54.                 LD (REG_L),HL
  55.                 EX (SP),HL
  56.                 LD (REG_F),HL
  57.                 EX (SP),HL
  58. RET4SD1         LD A,1
  59.                 OUT (PEVO_CONF),A
  60.                 POP AF
  61.                 RET
  62.  
  63. TABLSDZ         DW SD_INIT                      ;0 параметров не требует, на выходе A
  64.                                                 ;смотри выше первые 2 значения
  65.                 DW SD__OFF                      ;1 просто вырубает питание карты
  66.                 DW RDSINGL                      ;2 чтение одного сектора
  67.                 DW RDMULTI                      ;3 чтение секторов, кол-во в "A"
  68.  
  69. SD_INIT         CALL CS_HIGH
  70.                 LD BC,P_DATA
  71.                 LD DE,0X10FF
  72.                 OUT (C),E
  73.                 DEC D
  74.                 JR NZ,$-3
  75.                 XOR A
  76.                 EX AF,AF'
  77. ZAW001          LD HL,CMD00
  78.                 CALL OUTCOM
  79.                 CALL IN_OOUT
  80.                 EX AF,AF'
  81.                 DEC A
  82.                 JR Z,ZAW003
  83.                 EX AF,AF'
  84.                 DEC A
  85.                 JR NZ,ZAW001
  86.                 LD HL,CMD08
  87.                 CALL OUTCOM
  88.                 CALL IN_OOUT
  89.                 IN H,(C)
  90.                 NOP
  91.                 IN H,(C)
  92.                 NOP
  93.                 IN H,(C)
  94.                 NOP
  95.                 IN H,(C)
  96.                 LD HL,0
  97.                 BIT 2,A
  98.                 JR NZ,ZAW006
  99.                 LD H,0X40
  100. ZAW006          LD A,CMD_55
  101.                 CALL OUT_COM
  102.                 CALL IN_OOUT
  103.                 LD A,ACMD_41
  104.                 OUT (C),A
  105.                 NOP
  106.                 OUT (C),H
  107.                 NOP
  108.                 OUT (C),L
  109.                 NOP
  110.                 OUT (C),L
  111.                 NOP
  112.                 OUT (C),L
  113.                 LD A,0XFF
  114.                 OUT (C),A
  115.                 CALL IN_OOUT
  116.                 AND A
  117.                 JR NZ,ZAW006
  118. ZAW004          LD A,CMD_59
  119.                 CALL OUT_COM
  120.                 CALL IN_OOUT
  121.                 AND A
  122.                 JR NZ,ZAW004
  123. ZAW005          LD HL,CMD16
  124.                 CALL OUTCOM
  125.                 CALL IN_OOUT
  126.                 AND A
  127.                 JR NZ,ZAW005
  128.  
  129. CS_HIGH         PUSH AF
  130.                 LD A,3
  131.                 OUT (P_CONF),A
  132.                 XOR A
  133.                 OUT (P_DATA),A
  134.                 POP AF
  135.                 RET
  136.  
  137. ZAW003          CALL SD__OFF
  138.                 INC A
  139.                 RET
  140.  
  141. SD__OFF         XOR A
  142.                 OUT (P_CONF),A
  143.                 OUT (P_DATA),A
  144.                 RET
  145.  
  146. CS__LOW         PUSH AF
  147.                 LD A,1
  148.                 OUT (P_CONF),A
  149.                 POP AF
  150.                 RET
  151.  
  152. OUTCOM          CALL CS__LOW
  153.                 PUSH BC
  154.                 LD BC,0X0600+P_DATA
  155.                 OTIR
  156.                 POP BC
  157.                 RET
  158.  
  159. OUT_COM         PUSH BC
  160.                 CALL CS__LOW
  161.                 LD BC,P_DATA
  162.                 OUT (C),A
  163.                 XOR A
  164.                 OUT (C),A
  165.                 NOP
  166.                 OUT (C),A
  167.                 NOP
  168.                 OUT (C),A
  169.                 NOP
  170.                 OUT (C),A
  171.                 DEC A
  172.                 OUT (C),A
  173.                 POP BC
  174.                 RET
  175.  
  176. SECM200         PUSH HL
  177.                 PUSH DE
  178.                 PUSH BC
  179.                 PUSH AF
  180.                 PUSH BC
  181.  
  182. ;----
  183. ;ЗАПАСНОЙ ВАРИАНТ С CMD09
  184. ;               LD A,CMD_09
  185. ;               CALL OUT_COM
  186. ;               CALL IN_OOUT
  187. ;               CP 0XFE
  188. ;               JR NZ,$-5
  189. ;               LD BC,P_DATA
  190. ;               IN A,(C)
  191. ;               LD L,0X12
  192. ;               IN H,(C)
  193. ;               DEC L
  194. ;               JR NZ,$-3
  195.  
  196. ;ОСНОВНОЙ ВАРИАНТ С CMD58
  197.                 LD A,CMD_58
  198.                 LD BC,P_DATA
  199.                 CALL OUT_COM
  200.                 CALL IN_OOUT
  201.                 IN A,(C)
  202.                 NOP
  203.                 IN H,(C)
  204.                 NOP
  205.                 IN H,(C)
  206.                 NOP
  207.                 IN H,(C)
  208. ;----
  209.                 BIT 6,A
  210.                 POP HL
  211.                 JR NZ,SECN200
  212.                 EX DE,HL
  213.                 ADD HL,HL
  214.                 EX DE,HL
  215.                 ADC HL,HL
  216.                 LD H,L
  217.                 LD L,D
  218.                 LD D,E
  219.                 LD E,0
  220. SECN200         POP AF
  221.                 LD BC,P_DATA
  222.                 OUT (C),A
  223.                 NOP
  224.                 OUT (C),H
  225.                 NOP
  226.                 OUT (C),L
  227.                 NOP
  228.                 OUT (C),D
  229.                 NOP
  230.                 OUT (C),E
  231.                 LD A,0XFF
  232.                 OUT (C),A
  233.                 POP BC
  234.                 POP DE
  235.                 POP HL
  236.                 RET
  237.  
  238. IN_OOUT         PUSH DE
  239.                 LD DE,0X10FF
  240. IN_WAIT         IN A,(P_DATA)
  241.                 CP E
  242.                 JR NZ,IN_EXIT
  243. IN_NEXT         DEC D
  244.                 JR NZ,IN_WAIT
  245. IN_EXIT         POP DE
  246.                 RET
  247.  
  248. CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95                ;GO_IDLE_STATE
  249. CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87                ;SEND_IF_COND
  250. CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF                ;SET_BLOCKEN
  251.  
  252. RD_SECT         PUSH BC
  253.                 LD BC,P_DATA
  254.                 INIR
  255.                 NOP
  256.                 INIR
  257.                 NOP
  258.                 IN A,(C)
  259.                 NOP
  260.                 IN A,(C)
  261.                 POP BC
  262.                 RET
  263.  
  264. RDMULTI         EX AF,AF'
  265.                 LD A,CMD_18
  266.                 CALL SECM200
  267.                 EX AF,AF'
  268. RDMULT1         EX AF,AF'
  269.                 CALL IN_OOUT
  270.                 CP 0XFE
  271.                 JR NZ,$-5
  272.                 CALL RD_SECT
  273.                 EX AF,AF'
  274.                 DEC A
  275.                 JR NZ,RDMULT1
  276.                 LD A,CMD_12
  277.                 CALL OUT_COM
  278.                 CALL IN_OOUT
  279.                 INC A
  280.                 JR NZ,$-4
  281.                 JP CS_HIGH
  282.  
  283. RDSINGL         LD A,CMD_17
  284.                 CALL SECM200
  285.                 CALL IN_OOUT
  286.                 CP 0XFE
  287.                 JR NZ,$-5
  288.                 CALL RD_SECT
  289.                 CALL IN_OOUT
  290.                 INC A
  291.                 JR NZ,$-4
  292.                 JP CS_HIGH
  293.