Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 16.05.2012 savelij
  3.  
  4. ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ:
  5. ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ
  6. ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА
  7. ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ)
  8. ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ
  9.  
  10. ;ОШИБКИ ВЫДАВАЕМЫЕ НА ВЫХОДЕ:
  11. ;A=0-ИНИЦИАЛИЗАЦИЯ ПРОШЛА УСПЕШНО
  12. ;A=1-КАРТА НЕ НАЙДЕНА ИЛИ НЕ ОТВЕТИЛА
  13.  
  14. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С SD
  15. COMSDZ          EX AF,AF'
  16.                 LD A,IYL
  17.                 AND A
  18.                 LD A,(NEXTBYTERST8)
  19.                 JR Z,COMSDZ1
  20.                 EX (SP),HL
  21.                 LD A,(HL)
  22.                 INC HL
  23.                 EX (SP),HL
  24. COMSDZ1         ADD A,A
  25.                 PUSH HL
  26.                 LD HL,RET4SDZ
  27.                 EX (SP),HL
  28.                 PUSH HL
  29.                 LD HL,TABLSDZ
  30.                 ADD A,L
  31.                 LD L,A
  32.                 ADC A,H
  33.                 SUB L
  34.                 LD H,A
  35.                 XOR A
  36.                 OUT (PEVO_CONF),A
  37.                 LD A,(HL)
  38.                 INC HL
  39.                 LD H,(HL)
  40.                 LD L,A
  41.                 EX AF,AF'
  42.                 EX (SP),HL
  43.                 RET
  44.  
  45. RET4SDZ         PUSH AF
  46.                 LD A,IYL
  47.                 AND A
  48.                 JR NZ,RET4SD1
  49.                 LD (RREG_L),HL
  50.                 EX (SP),HL
  51.                 LD (RREG_F),HL
  52.                 EX (SP),HL
  53. RET4SD1         LD A,1
  54.                 OUT (PEVO_CONF),A
  55.                 POP AF
  56.                 RET
  57.  
  58. TABLSDZ         DW SD_INIT                      ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A
  59.                                                 ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ
  60.                 DW SD_CMP                       ;1 ПРОСТО ВЫРУБАЕТ ПИТАНИЕ КАРТЫ
  61.                 DW RDMULTI                      ;2 ЧТЕНИЕ СЕКТОРОВ, КОЛ-ВО В "A"
  62.                 DW WRMULTI                      ;3 ЗАПИСЬ СЕКТОРОВ
  63.  
  64. SD_INIT         CALL CS_HIGH
  65.                 LD BC,P_DATA
  66.                 LD DE,0X10FF
  67.                 OUT (C),E
  68.                 DEC D
  69.                 JR NZ,$-3
  70.                 XOR A
  71.                 EX AF,AF'
  72. ZAW001          LD HL,CMD00
  73.                 CALL OUTCOM
  74.                 CALL IN_OOUT
  75.                 EX AF,AF'
  76.                 DEC A
  77.                 JR Z,ZAW003
  78.                 EX AF,AF'
  79.                 DEC A
  80.                 JR NZ,ZAW001
  81.                 LD HL,CMD08
  82.                 CALL OUTCOM
  83.                 CALL IN_OOUT
  84.                 IN H,(C)
  85.                 NOP
  86.                 IN H,(C)
  87.                 NOP
  88.                 IN H,(C)
  89.                 NOP
  90.                 IN H,(C)
  91.                 LD HL,0
  92.                 BIT 2,A
  93.                 JR NZ,ZAW006
  94.                 LD H,0X40
  95. ZAW006          LD A,CMD_55
  96.                 CALL OUT_COM
  97.                 CALL IN_OOUT
  98.                 LD A,ACMD_41
  99.                 OUT (C),A
  100.                 NOP
  101.                 OUT (C),H
  102.                 NOP
  103.                 OUT (C),L
  104.                 NOP
  105.                 OUT (C),L
  106.                 NOP
  107.                 OUT (C),L
  108.                 LD A,0XFF
  109.                 OUT (C),A
  110.                 CALL IN_OOUT
  111.                 AND A
  112.                 JR NZ,ZAW006
  113. ZAW004          LD A,CMD_59
  114.                 CALL OUT_COM
  115.                 CALL IN_OOUT
  116.                 AND A
  117.                 JR NZ,ZAW004
  118. ZAW005          LD HL,CMD16
  119.                 CALL OUTCOM
  120.                 CALL IN_OOUT
  121.                 AND A
  122.                 JR NZ,ZAW005
  123.  
  124. CS_HIGH         PUSH AF
  125.                 LD A,3
  126.                 OUT (P_CONF),A
  127.                 XOR A
  128.                 OUT (P_DATA),A
  129.                 POP AF
  130.                 RET
  131.  
  132. ZAW003          CALL SD__OFF
  133.                 INC A
  134.                 RET
  135.  
  136. SD_CMP          LD A,CMD_58
  137.                 LD BC,P_DATA
  138.                 CALL OUT_COM
  139.                 CALL IN_OOUT
  140.                 LD L,A
  141.                 IN H,(C)
  142.                 NOP
  143.                 IN H,(C)
  144.                 NOP
  145.                 IN H,(C)
  146.                 NOP
  147.                 IN H,(C)
  148.                 INC L
  149.                 RET
  150.  
  151. SD__OFF         XOR A
  152.                 OUT (P_CONF),A
  153.                 OUT (P_DATA),A
  154.                 RET
  155.  
  156. CS__LOW         PUSH AF
  157.                 LD A,1
  158.                 OUT (P_CONF),A
  159.                 POP AF
  160.                 RET
  161.  
  162. OUTCOM          CALL CS__LOW
  163.                 PUSH BC
  164.                 LD BC,0X0600+P_DATA
  165.                 OTIR
  166.                 POP BC
  167.                 RET
  168.  
  169. OUT_COM         PUSH BC
  170.                 CALL CS__LOW
  171.                 LD BC,P_DATA
  172.                 OUT (C),A
  173.                 XOR A
  174.                 OUT (C),A
  175.                 NOP
  176.                 OUT (C),A
  177.                 NOP
  178.                 OUT (C),A
  179.                 NOP
  180.                 OUT (C),A
  181.                 DEC A
  182.                 OUT (C),A
  183.                 POP BC
  184.                 RET
  185.  
  186. SECM200         PUSH HL
  187.                 PUSH DE
  188.                 PUSH BC
  189.                 PUSH AF
  190.                 PUSH BC
  191.  
  192. ;----
  193. ;ЗАПАСНОЙ ВАРИАНТ С CMD09
  194. ;               LD A,CMD_09
  195. ;               CALL OUT_COM
  196. ;               CALL IN_OOUT
  197. ;               CP 0XFE
  198. ;               JR NZ,$-5
  199. ;               LD BC,P_DATA
  200. ;               IN A,(C)
  201. ;               LD L,0X12
  202. ;               IN H,(C)
  203. ;               DEC L
  204. ;               JR NZ,$-3
  205.  
  206. ;ОСНОВНОЙ ВАРИАНТ С CMD58
  207.                 LD A,CMD_58
  208.                 LD BC,P_DATA
  209.                 CALL OUT_COM
  210.                 CALL IN_OOUT
  211.                 IN A,(C)
  212.                 NOP
  213.                 IN H,(C)
  214.                 NOP
  215.                 IN H,(C)
  216.                 NOP
  217.                 IN H,(C)
  218. ;----
  219.                 BIT 6,A
  220.                 POP HL
  221.                 JR NZ,SECN200
  222.                 EX DE,HL
  223.                 ADD HL,HL
  224.                 EX DE,HL
  225.                 ADC HL,HL
  226.                 LD H,L
  227.                 LD L,D
  228.                 LD D,E
  229.                 LD E,0
  230. SECN200         POP AF
  231.                 LD BC,P_DATA
  232.                 OUT (C),A
  233.                 NOP
  234.                 OUT (C),H
  235.                 NOP
  236.                 OUT (C),L
  237.                 NOP
  238.                 OUT (C),D
  239.                 NOP
  240.                 OUT (C),E
  241.                 LD A,0XFF
  242.                 OUT (C),A
  243.                 POP BC
  244.                 POP DE
  245.                 POP HL
  246.                 RET
  247.  
  248. IN_OOUT         PUSH DE
  249.                 LD DE,0X20FF
  250. IN_WAIT         IN A,(P_DATA)
  251.                 CP E
  252.                 JR NZ,IN_EXIT
  253. IN_NEXT         DEC D
  254.                 JR NZ,IN_WAIT
  255. IN_EXIT         POP DE
  256.                 RET
  257.  
  258. CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95                ;GO_IDLE_STATE
  259. CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87                ;SEND_IF_COND
  260. CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF                ;SET_BLOCKEN
  261.  
  262. RD_SECT         PUSH BC
  263.                 LD A,IYL
  264.                 BIT 1,A
  265.                 JR NZ,RD_SECT3
  266.                 AND A
  267.                 JR NZ,RD_SECT2
  268. RD_SECT3        LD A,(R_7FFD)
  269.                 LD BC,(B0_CPU2)
  270.                 JR Z,RD_SECT1
  271.                 LD BC,(B1_CPU2)
  272. RD_SECT1        LD A,1
  273.                 OUT (PEVO_CONF),A
  274.                 LD A,B
  275.                 OR 0X3F
  276.                 LD B,A
  277.                 LD A,C
  278.                 LD C,LOW (WIN_A0)
  279.                 OUT (C),A
  280.                 XOR A
  281.                 OUT (PEVO_CONF),A
  282. RD_SECT2        LD BC,P_DATA
  283.                 INIR
  284.                 NOP
  285.                 INIR
  286.                 NOP
  287.                 IN A,(C)
  288.                 NOP
  289.                 IN A,(C)
  290.                 LD A,1
  291.                 OUT (PEVO_CONF),A
  292.                 LD BC,WIN_P2
  293.                 XOR A
  294.                 OUT (C),A
  295.                 OUT (PEVO_CONF),A
  296.                 POP BC
  297.                 RET
  298.  
  299. WR_SECT         PUSH BC
  300.                 LD BC,P_DATA
  301.                 OUT (C),A
  302.                 OTIR
  303.                 NOP
  304.                 OTIR
  305.                 LD A,0XFF
  306.                 OUT (C),A
  307.                 NOP
  308.                 OUT (C),A
  309.                 POP BC
  310.                 RET
  311.  
  312. RDMULTI         EX AF,AF'
  313.                 LD A,CMD_18
  314.                 CALL SECM200
  315.                 EX AF,AF'
  316. RDMULT1         EX AF,AF'
  317.                 CALL IN_OOUT
  318.                 CP 0XFE
  319.                 JR NZ,$-5
  320.                 CALL RD_SECT
  321.                 EX AF,AF'
  322.                 DEC A
  323.                 JR NZ,RDMULT1
  324.                 LD A,CMD_12
  325.                 CALL OUT_COM
  326.                 CALL IN_OOUT
  327.                 INC A
  328.                 JR NZ,$-4
  329.                 JP CS_HIGH
  330.  
  331. WRMULTI         EX AF,AF'
  332.                 LD A,CMD_25
  333.                 CALL SECM200
  334.                 CALL IN_OOUT
  335.                 INC A
  336.                 JR NZ,$-4
  337.                 EX AF,AF'
  338. WRMULT1         EX AF,AF'
  339.                 LD A,0XFC
  340.                 CALL WR_SECT
  341.                 CALL IN_OOUT
  342.                 INC A
  343.                 JR NZ,$-4
  344.                 EX AF,AF'
  345.                 DEC A
  346.                 JR NZ,WRMULT1
  347.                 LD C,P_DATA
  348.                 LD A,0XFD
  349.                 OUT (C),A
  350.                 CALL IN_OOUT
  351.                 INC A
  352.                 JR NZ,$-4
  353.                 JP CS_HIGH
  354.