Subversion Repositories pentevo

Rev

Rev 680 | Go to most recent revision | 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.                 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       
  250. ;               LD A,(R_7FFD)
  251.                 READ_7FFD
  252.                 LD BC,(B0_CPU2)
  253.                 JR Z,RD_SECT1
  254.                 LD BC,(B1_CPU2)
  255. RD_SECT1        PEC_ON M_SHADOW_BF
  256.                 LD A,B
  257.                 OR 0X37
  258.                 LD B,A
  259.                 LD A,C
  260.                 LD C,LOW (WIN_A0)
  261.                 OUT (C),A
  262.                 PEC_OFF M_SHADOW_BF
  263. RD_SECT2        LD BC,P_DATA
  264.                 INIR
  265.                 NOP
  266.                 INIR
  267.                 NOP
  268.                 IN A,(C)
  269.                 NOP
  270.                 IN A,(C)
  271.                 PEC_ON M_SHADOW_BF
  272.                 LD BC,WIN_P6
  273.                 XOR A
  274.                 OUT (C),A
  275.                 PEC_OFF M_SHADOW_BF
  276.                 POP BC
  277.                 RET
  278.  
  279. WR_SECT         PUSH BC
  280.                 LD BC,P_DATA
  281.                 OUT (C),A
  282.                 OTIR
  283.                 NOP
  284.                 OTIR
  285.                 LD A,0XFF
  286.                 OUT (C),A
  287.                 NOP
  288.                 OUT (C),A
  289.                 POP BC
  290.                 RET
  291.  
  292. RDMULTI         EX AF,AF'
  293.                 LD A,CMD_18
  294.                 CALL SECM200
  295.                 EX AF,AF'
  296. RDMULT1         EX AF,AF'
  297.                 CALL IN_OOUT
  298.                 CP 0XFE
  299.                 JR NZ,$-5
  300.                 CALL RD_SECT
  301.                 EX AF,AF'
  302.                 DEC A
  303.                 JR NZ,RDMULT1
  304.                 LD A,CMD_12
  305.                 CALL OUT_COM
  306.                 CALL IN_OOUT
  307.                 INC A
  308.                 JR NZ,$-4
  309.                 JP CS_HIGH
  310.  
  311. WRMULTI         EX AF,AF'
  312.                 LD A,CMD_25
  313.                 CALL SECM200
  314.                 CALL IN_OOUT
  315.                 INC A
  316.                 JR NZ,$-4
  317.                 EX AF,AF'
  318. WRMULT1         EX AF,AF'
  319.                 LD A,0XFC
  320.                 CALL WR_SECT
  321.                 CALL IN_OOUT
  322.                 INC A
  323.                 JR NZ,$-4
  324.                 EX AF,AF'
  325.                 DEC A
  326.                 JR NZ,WRMULT1
  327.                 LD C,P_DATA
  328.                 LD A,0XFD
  329.                 OUT (C),A
  330.                 CALL IN_OOUT
  331.                 INC A
  332.                 JR NZ,$-4
  333.                 JP CS_HIGH
  334.