Subversion Repositories pentevo

Rev

Rev 585 | Rev 680 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 09.12.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.                 PEC_OFF 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 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.                 LD A,ACMD_41
  97.                 OUT (C),A
  98.                 NOP
  99.                 OUT (C),H
  100.                 NOP
  101.                 OUT (C),L
  102.                 NOP
  103.                 OUT (C),L
  104.                 NOP
  105.                 OUT (C),L
  106.                 LD A,0XFF
  107.                 OUT (C),A
  108.                 CALL IN_OOUT
  109.                 AND A
  110.                 JR NZ,ZAW006
  111. ZAW004          LD A,CMD_59
  112.                 CALL OUT_COM
  113.                 CALL IN_OOUT
  114.                 AND A
  115.                 JR NZ,ZAW004
  116. ZAW005          LD HL,CMD16
  117.                 CALL OUTCOM
  118.                 CALL IN_OOUT
  119.                 AND A
  120.                 JR NZ,ZAW005
  121. CS_HIGH         PUSH AF
  122.                 LD A,3
  123.                 OUT (P_CONF),A
  124.                 XOR A
  125.                 OUT (P_DATA),A
  126.                 POP AF
  127.                 RET
  128.  
  129. ZAW003          CALL SD__OFF
  130.                 INC A
  131.                 RET
  132.  
  133. SD__OFF         XOR A
  134.                 OUT (P_CONF),A
  135.                 OUT (P_DATA),A
  136.                 RET
  137.  
  138. CS__LOW         PUSH AF
  139.                 LD A,1
  140.                 OUT (P_CONF),A
  141.                 POP AF
  142.                 RET
  143.  
  144. OUTCOM          CALL CS__LOW
  145.                 PUSH BC
  146.                 LD BC,0X0600+P_DATA
  147.                 OTIR
  148.                 POP BC
  149.                 RET
  150.  
  151. OUT_COM         PUSH BC
  152.                 CALL CS__LOW
  153.                 LD BC,P_DATA
  154.                 OUT (C),A
  155.                 XOR A
  156.                 OUT (C),A
  157.                 NOP
  158.                 OUT (C),A
  159.                 NOP
  160.                 OUT (C),A
  161.                 NOP
  162.                 OUT (C),A
  163.                 DEC A
  164.                 OUT (C),A
  165.                 POP BC
  166.                 RET
  167.  
  168. SD_CMP          LD A,CMD_58
  169.                 LD BC,P_DATA
  170.                 CALL OUT_COM
  171.                 CALL IN_OOUT
  172.                 IN H,(C)
  173.                 NOP
  174.                 IN H,(C)
  175.                 NOP
  176.                 IN H,(C)
  177.                 NOP
  178.                 IN H,(C)
  179.                 RET
  180.  
  181. SECM200         PUSH HL
  182.                 PUSH DE
  183.                 PUSH BC
  184.                 PUSH AF
  185.                 PUSH BC
  186.                 LD A,CMD_58
  187.                 LD BC,P_DATA
  188.                 CALL OUT_COM
  189.                 CALL IN_OOUT
  190.                 IN A,(C)
  191.                 NOP
  192.                 IN H,(C)
  193.                 NOP
  194.                 IN H,(C)
  195.                 NOP
  196.                 IN H,(C)
  197.                 INC A
  198.                 JP Z,SD_CARD_LOST
  199.                 DEC A
  200.                 BIT 6,A
  201.                 POP HL
  202.                 JR NZ,SECN200
  203.                 EX DE,HL
  204.                 ADD HL,HL
  205.                 EX DE,HL
  206.                 ADC HL,HL
  207.                 LD H,L
  208.                 LD L,D
  209.                 LD D,E
  210.                 LD E,0
  211. SECN200         POP AF
  212.                 LD BC,P_DATA
  213.                 OUT (C),A
  214.                 NOP
  215.                 OUT (C),H
  216.                 NOP
  217.                 OUT (C),L
  218.                 NOP
  219.                 OUT (C),D
  220.                 NOP
  221.                 OUT (C),E
  222.                 LD A,0XFF
  223.                 OUT (C),A
  224.                 POP BC
  225.                 POP DE
  226.                 POP HL
  227.                 RET
  228.  
  229. IN_OOUT         PUSH DE
  230.                 LD DE,0X30FF
  231. IN_WAIT         IN A,(P_DATA)
  232.                 CP E
  233.                 JR NZ,IN_EXIT
  234. IN_NEXT         DEC D
  235.                 JR NZ,IN_WAIT
  236. IN_EXIT         POP DE
  237.                 RET
  238.  
  239. CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95                ;GO_IDLE_STATE
  240. CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87                ;SEND_IF_COND
  241. CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF                ;SET_BLOCKEN
  242.  
  243. RD_SECT         PUSH BC
  244.                 LD A,IYL
  245.                 BIT 1,A
  246.                 JR NZ,RD_SECT3                  ;ЕСЛИ ДЛЯ ВНЕШНЕЙ
  247.                 AND A
  248.                 JR NZ,RD_SECT2
  249. RD_SECT3        LD A,(R_7FFD)
  250.                 LD BC,(B0_CPU2)
  251.                 JR Z,RD_SECT1
  252.                 LD BC,(B1_CPU2)
  253. RD_SECT1        PEC_ON SHADOW_BF
  254.                 LD A,B
  255.                 OR 0X37
  256.                 LD B,A
  257.                 LD A,C
  258.                 LD C,LOW (WIN_A0)
  259.                 OUT (C),A
  260.                 PEC_OFF SHADOW_BF
  261. RD_SECT2        LD BC,P_DATA
  262.                 INIR
  263.                 NOP
  264.                 INIR
  265.                 NOP
  266.                 IN A,(C)
  267.                 NOP
  268.                 IN A,(C)
  269.                 PEC_ON SHADOW_BF
  270.                 LD BC,WIN_P2
  271.                 XOR A
  272.                 OUT (C),A
  273.                 PEC_OFF SHADOW_BF
  274.                 POP BC
  275.                 RET
  276.  
  277. WR_SECT         PUSH BC
  278.                 LD BC,P_DATA
  279.                 OUT (C),A
  280.                 OTIR
  281.                 NOP
  282.                 OTIR
  283.                 LD A,0XFF
  284.                 OUT (C),A
  285.                 NOP
  286.                 OUT (C),A
  287.                 POP BC
  288.                 RET
  289.  
  290. RDMULTI         EX AF,AF'
  291.                 LD A,CMD_18
  292.                 CALL SECM200
  293.                 EX AF,AF'
  294. RDMULT1         EX AF,AF'
  295.                 CALL IN_OOUT
  296.                 CP 0XFE
  297.                 JR NZ,$-5
  298.                 CALL RD_SECT
  299.                 EX AF,AF'
  300.                 DEC A
  301.                 JR NZ,RDMULT1
  302.                 LD A,CMD_12
  303.                 CALL OUT_COM
  304.                 CALL IN_OOUT
  305.                 INC A
  306.                 JR NZ,$-4
  307.                 JP CS_HIGH
  308.  
  309. WRMULTI         EX AF,AF'
  310.                 LD A,CMD_25
  311.                 CALL SECM200
  312.                 CALL IN_OOUT
  313.                 INC A
  314.                 JR NZ,$-4
  315.                 EX AF,AF'
  316. WRMULT1         EX AF,AF'
  317.                 LD A,0XFC
  318.                 CALL WR_SECT
  319.                 CALL IN_OOUT
  320.                 INC A
  321.                 JR NZ,$-4
  322.                 EX AF,AF'
  323.                 DEC A
  324.                 JR NZ,WRMULT1
  325.                 LD C,P_DATA
  326.                 LD A,0XFD
  327.                 OUT (C),A
  328.                 CALL IN_OOUT
  329.                 INC A
  330.                 JR NZ,$-4
  331.                 JP CS_HIGH
  332.