Subversion Repositories pentevo

Rev

Rev 889 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 01.12.2014 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.                 PEC_OFF M_SHADOW_BF
  36.                 LD A,(HL)
  37.                 INC HL
  38.                 LD H,(HL)
  39.                 LD L,A
  40.                 EX AF,AF'
  41.                 EX (SP),HL
  42.                 RET
  43.  
  44. RET4SDZ         PUSH AF
  45.                 LD A,IYL
  46.                 AND A
  47.                 JR NZ,RET4SD1
  48.                 LD (RREG_L),HL
  49.                 EX (SP),HL
  50.                 LD (RREG_F),HL
  51.                 EX (SP),HL
  52. RET4SD1         PEC_ON M_SHADOW_BF
  53.                 POP AF
  54.                 RET
  55.  
  56. TABLSDZ         DW SD_INIT                      ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A
  57.                                                 ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ
  58.                 DW SD_CMP                       ;1 ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ
  59.                 DW RDMULTI                      ;2 ЧТЕНИЕ СЕКТОРОВ, КОЛ-ВО В "A"
  60.                 DW WRMULTI                      ;3 ЗАПИСЬ СЕКТОРОВ
  61.  
  62. SD_INIT         CALL CS_HIGH
  63.                 LD BC,P_DATA
  64.                 LD DE,0X10FF
  65.                 OUT (C),E
  66.                 DEC D
  67.                 JR NZ,$-3
  68.                 XOR A
  69.                 EX AF,AF'
  70. ZAW001          LD HL,CMD00
  71.                 CALL OUTCOM
  72.                 CALL IN_OOUT
  73.                 EX AF,AF'
  74.                 DEC A
  75.                 JR Z,ZAW003
  76.                 EX AF,AF'
  77.                 DEC A
  78.                 JR NZ,ZAW001
  79.                 LD HL,CMD08
  80.                 CALL OUTCOM
  81.                 CALL IN_OOUT
  82.                 IN H,(C)
  83.                 NOP
  84.                 IN H,(C)
  85.                 NOP
  86.                 IN H,(C)
  87.                 NOP
  88.                 IN H,(C)
  89.                 LD HL,0
  90.                 BIT 2,A
  91.                 JR NZ,ZAW006
  92.                 LD H,0X40
  93. ZAW006          LD A,CMD_55
  94.                 CALL OUT_COM
  95.                 CALL IN_OOUT
  96.                 in (c) ;in f,(c)
  97.                 in (c) ;in f,(c)
  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. CS_HIGH         PUSH AF
  124.                 LD A,3
  125.                 OUT (P_CONF),A
  126.                 XOR A
  127.                 OUT (P_DATA),A
  128.                 POP AF
  129.                 RET
  130.  
  131. ZAW003          CALL SD__OFF
  132.                 INC A
  133.                 RET
  134.  
  135. SD__OFF         XOR A
  136.                 OUT (P_CONF),A
  137.                 OUT (P_DATA),A
  138.                 RET
  139.  
  140. CS__LOW         PUSH AF
  141.                 LD A,1
  142.                 OUT (P_CONF),A
  143.                 POP AF
  144.                 RET
  145.  
  146. OUTCOM          CALL CS__LOW
  147.                 PUSH BC
  148.                 LD BC,0X0600+P_DATA
  149.                 OTIR
  150.                 POP BC
  151.                 RET
  152.  
  153. OUT_COM         PUSH BC
  154.                 CALL CS__LOW
  155.                 LD BC,P_DATA
  156.                 in (c) ;in f,(c)
  157.                 in (c) ;in f,(c)
  158.                 OUT (C),A
  159.                 XOR A
  160.                 OUT (C),A
  161.                 NOP
  162.                 OUT (C),A
  163.                 NOP
  164.                 OUT (C),A
  165.                 NOP
  166.                 OUT (C),A
  167.                 DEC A
  168.                 OUT (C),A
  169.                 POP BC
  170.                 RET
  171.  
  172. SD_CMP          LD A,CMD_58
  173.                 LD BC,P_DATA
  174.                 CALL OUT_COM
  175.                 CALL IN_OOUT
  176.                 IN H,(C)
  177.                 NOP
  178.                 IN H,(C)
  179.                 NOP
  180.                 IN H,(C)
  181.                 NOP
  182.                 IN H,(C)
  183.                 RET
  184.  
  185. SECM200         PUSH HL
  186.                 PUSH DE
  187.                 PUSH BC
  188.                 PUSH AF
  189.                 PUSH BC
  190.                 LD A,CMD_58
  191.                 LD BC,P_DATA
  192.                 CALL OUT_COM
  193.                 CALL IN_OOUT
  194.                 IN A,(C)
  195.                 NOP
  196.                 IN H,(C)
  197.                 NOP
  198.                 IN H,(C)
  199.                 NOP
  200.                 IN H,(C)
  201.                 INC A
  202.                 JP Z,SD_CARD_LOST
  203.                 DEC A
  204.                 BIT 6,A
  205.                 POP HL
  206.                 JR NZ,SECN200
  207.                 EX DE,HL
  208.                 ADD HL,HL
  209.                 EX DE,HL
  210.                 ADC HL,HL
  211.                 LD H,L
  212.                 LD L,D
  213.                 LD D,E
  214.                 LD E,0
  215. SECN200         POP AF
  216.                 in (c) ;in f,(c)
  217.                 in (c) ;in f,(c)
  218.                 LD BC,P_DATA
  219.                 OUT (C),A
  220.                 NOP
  221.                 OUT (C),H
  222.                 NOP
  223.                 OUT (C),L
  224.                 NOP
  225.                 OUT (C),D
  226.                 NOP
  227.                 OUT (C),E
  228.                 LD A,0XFF
  229.                 OUT (C),A
  230.                 POP BC
  231.                 POP DE
  232.                 POP HL
  233.                 RET
  234.  
  235. IN_OOUT         PUSH DE
  236.                 LD DE,0X30FF
  237. IN_WAIT         IN A,(P_DATA)
  238.                 CP E
  239.                 JR NZ,IN_EXIT
  240. IN_NEXT         DEC D
  241.                 JR NZ,IN_WAIT
  242. IN_EXIT         POP DE
  243.                 RET
  244.  
  245. CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95                ;GO_IDLE_STATE
  246. CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87                ;SEND_IF_COND
  247. CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF                ;SET_BLOCKEN
  248.  
  249. RD_SECT         PUSH BC
  250.                 LD A,IYL
  251.                 BIT 1,A
  252.                 JR NZ,RD_SECT3                  ;ЕСЛИ ДЛЯ ВНЕШНЕЙ
  253.                 AND A
  254.                 JR NZ,RD_SECT2
  255. RD_SECT3       
  256. ;               LD A,(R_7FFD)
  257.                 READ_7FFD
  258.                 LD BC,(B0_CPU2)
  259.                 JR Z,RD_SECT1
  260.                 LD BC,(B1_CPU2)
  261. RD_SECT1        PEC_ON M_SHADOW_BF
  262.                 LD A,B
  263.                 OR 0X37
  264.                 LD B,A
  265.                 LD A,C
  266.                 LD C,LOW (WIN_A0)
  267.                 OUT (C),A
  268.                 PEC_OFF M_SHADOW_BF
  269. RD_SECT2        LD BC,P_DATA
  270.                 INIR
  271.                 NOP
  272.                 INIR
  273.                 NOP
  274.                 IN A,(C)
  275.                 NOP
  276.                 IN A,(C)
  277.                 PEC_ON M_SHADOW_BF
  278.                 LD BC,WIN_P6
  279.                 XOR A
  280.                 OUT (C),A
  281.                 PEC_OFF M_SHADOW_BF
  282.                 POP BC
  283.                 RET
  284.  
  285. WR_SECT         PUSH BC
  286.                 LD BC,P_DATA
  287.                 OUT (C),A
  288.                 OTIR
  289.                 NOP
  290.                 OTIR
  291.                 LD A,0XFF
  292.                 OUT (C),A
  293.                 NOP
  294.                 OUT (C),A
  295.                 POP BC
  296.                 RET
  297.  
  298. RDMULTI         EX AF,AF'
  299.                 LD A,CMD_18
  300.                 CALL SECM200
  301.                 EX AF,AF'
  302. RDMULT1         EX AF,AF'
  303.                 CALL IN_OOUT
  304.                 CP 0XFE
  305.                 JR NZ,$-5
  306.                 CALL RD_SECT
  307.                 EX AF,AF'
  308.                 DEC A
  309.                 JR NZ,RDMULT1
  310.                 LD A,CMD_12
  311.                 CALL OUT_COM
  312.                 CALL IN_OOUT
  313.                 INC A
  314.                 JR NZ,$-4
  315.                 JP CS_HIGH
  316.  
  317. WRMULTI         EX AF,AF'
  318.                 LD A,CMD_25
  319.                 CALL SECM200
  320.                 CALL IN_OOUT
  321.                 INC A
  322.                 JR NZ,$-4
  323.                 EX AF,AF'
  324. WRMULT1         EX AF,AF'
  325.                 LD A,0XFC
  326.                 CALL WR_SECT
  327.                 CALL IN_OOUT
  328.                 INC A
  329.                 JR NZ,$-4
  330.                 EX AF,AF'
  331.                 DEC A
  332.                 JR NZ,WRMULT1
  333.                 LD C,P_DATA
  334.                 LD A,0XFD
  335.                 OUT (C),A
  336.                 CALL IN_OOUT
  337.                 INC A
  338.                 JR NZ,$-4
  339.                 JP CS_HIGH
  340.