Subversion Repositories pentevo

Rev

Rev 890 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 06.02.2025 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
  53.         PEC_ON M_SHADOW_BF
  54.                 POP AF
  55.                 RET
  56.  
  57. TABLSDZ         DW SD_INIT                      ; 0 параметров не требует, на выходе 'A'
  58.                                                 ; смотри выше первые 2 значения
  59.                 DW SD_CMP                       ; 1 проверка наличия SD карты
  60.                 DW RDMULTI                      ; 2 чтение секторов, кол-во в 'A'
  61.                 DW WRMULTI                      ; 3 запись секторов, кол-во в 'A'
  62.  
  63. SD_INIT         CALL CS_HIGH
  64.                 LD BC,P_DATA
  65.                 LD DE,0x10FF
  66.                 OUT (C),E
  67.                 DEC D
  68.                 JR NZ,$-3
  69.                 XOR A
  70.                 EX AF,AF'
  71. ZAW001          LD HL,CMD00
  72.                 CALL OUTCOM
  73.                 CALL IN_OOUT
  74.                 EX AF,AF'
  75.                 DEC A
  76.                 JR Z,ZAW003
  77.                 EX AF,AF'
  78.                 DEC A
  79.                 JR NZ,ZAW001
  80.                 LD HL,CMD08
  81.                 CALL OUTCOM
  82.                 CALL IN_OOUT
  83.                 IN H,(C)
  84.                 NOP
  85.                 IN H,(C)
  86.                 NOP
  87.                 IN H,(C)
  88.                 NOP
  89.                 IN H,(C)
  90.                 LD HL,0
  91.                 BIT 2,A
  92.                 JR NZ,ZAW006
  93.                 LD H,0x40
  94. ZAW006          LD A,CMD_55
  95.                 CALL OUT_COM
  96.                 CALL IN_OOUT
  97.                 in (c) ;in f,(c)
  98.                 in (c) ;in f,(c)
  99.                 LD A,ACMD_41
  100.                 OUT (C),A
  101.                 NOP
  102.                 OUT (C),H
  103.                 NOP
  104.                 OUT (C),L
  105.                 NOP
  106.                 OUT (C),L
  107.                 NOP
  108.                 OUT (C),L
  109.                 LD A,0xFF
  110.                 OUT (C),A
  111.                 CALL IN_OOUT
  112.                 AND A
  113.                 JR NZ,ZAW006
  114. ZAW004          LD A,CMD_59
  115.                 CALL OUT_COM
  116.                 CALL IN_OOUT
  117.                 AND A
  118.                 JR NZ,ZAW004
  119. ZAW005          LD HL,CMD16
  120.                 CALL OUTCOM
  121.                 CALL IN_OOUT
  122.                 AND A
  123.                 JR NZ,ZAW005
  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__OFF         XOR A
  137.                 OUT (P_CONF),A
  138.                 OUT (P_DATA),A
  139.                 RET
  140.  
  141. CS__LOW         PUSH AF
  142.                 LD A,1
  143.                 OUT (P_CONF),A
  144.                 POP AF
  145.                 RET
  146.  
  147. OUTCOM          CALL CS__LOW
  148.                 PUSH BC
  149.                 LD BC,0x0600+P_DATA
  150.                 OTIR
  151.                 POP BC
  152.                 RET
  153.  
  154. OUT_COM         PUSH BC
  155.                 CALL CS__LOW
  156.                 LD BC,P_DATA
  157.                 in (c) ;in f,(c)
  158.                 in (c) ;in f,(c)
  159.                 OUT (C),A
  160.                 XOR A
  161.                 OUT (C),A
  162.                 NOP
  163.                 OUT (C),A
  164.                 NOP
  165.                 OUT (C),A
  166.                 NOP
  167.                 OUT (C),A
  168.                 DEC A
  169.                 OUT (C),A
  170.                 POP BC
  171.                 RET
  172.  
  173. SD_CMP          LD A,CMD_58
  174.                 LD BC,P_DATA
  175.                 CALL OUT_COM
  176.                 CALL IN_OOUT
  177.                 IN H,(C)
  178.                 NOP
  179.                 IN H,(C)
  180.                 NOP
  181.                 IN H,(C)
  182.                 NOP
  183.                 IN H,(C)
  184.                 RET
  185.  
  186. SECM200         PUSH HL
  187.                 PUSH DE
  188.                 PUSH BC
  189.                 PUSH AF
  190.                 PUSH BC
  191.                 LD A,CMD_58
  192.                 LD BC,P_DATA
  193.                 CALL OUT_COM
  194.                 CALL IN_OOUT
  195.                 IN A,(C)
  196.                 NOP
  197.                 IN H,(C)
  198.                 NOP
  199.                 IN H,(C)
  200.                 NOP
  201.                 IN H,(C)
  202.                 INC A
  203.                 JP Z,SD_CARD_LOST
  204.                 DEC A
  205.                 BIT 6,A
  206.                 POP HL
  207.                 JR NZ,SECN200
  208.                 EX DE,HL
  209.                 ADD HL,HL
  210.                 EX DE,HL
  211.                 ADC HL,HL
  212.                 LD H,L
  213.                 LD L,D
  214.                 LD D,E
  215.                 LD E,0
  216. SECN200         POP AF
  217.                 in (c) ;in f,(c)
  218.                 in (c) ;in f,(c)
  219.                 LD BC,P_DATA
  220.                 OUT (C),A
  221.                 NOP
  222.                 OUT (C),H
  223.                 NOP
  224.                 OUT (C),L
  225.                 NOP
  226.                 OUT (C),D
  227.                 NOP
  228.                 OUT (C),E
  229.                 LD A,0xFF
  230.                 OUT (C),A
  231.                 POP BC
  232.                 POP DE
  233.                 POP HL
  234.                 RET
  235.  
  236. IN_OOUT         PUSH DE
  237.                 LD DE,0x30FF
  238. IN_WAIT         IN A,(P_DATA)
  239.                 CP E
  240.                 JR NZ,IN_EXIT
  241. IN_NEXT         DEC D
  242.                 JR NZ,IN_WAIT
  243. IN_EXIT         POP DE
  244.                 RET
  245.  
  246. CMD00           DB 0x40,0x00,0x00,0x00,0x00,0x95                ;GO_IDLE_STATE
  247. CMD08           DB 0x48,0x00,0x00,0x01,0xAA,0x87                ;SEND_IF_COND
  248. CMD16           DB 0x50,0x00,0x00,0x02,0x00,0xFF                ;SET_BLOCKEN
  249.  
  250. RD_SECT         PUSH BC
  251.                 LD A,IYL
  252.                 BIT 1,A
  253.                 JR NZ,RD_SECT3                  ;ЕСЛИ ДЛЯ ВНЕШНЕЙ
  254.                 AND A
  255.                 JR NZ,RD_SECT2
  256. RD_SECT3       
  257.         READ_7FFD
  258.                 LD BC,(B0_CPU2)
  259.                 JR Z,RD_SECT1
  260.                 LD BC,(B1_CPU2)
  261. RD_SECT1
  262.         PEC_ON M_SHADOW_BF
  263.                 LD A,B
  264.                 OR 0x37
  265.                 LD B,A
  266.                 LD A,C
  267.                 LD C,LOW (WIN_A0)
  268.                 OUT (C),A
  269.         PEC_OFF M_SHADOW_BF
  270. RD_SECT2        LD BC,P_DATA
  271.                 INIR
  272.                 NOP
  273.                 INIR
  274.                 NOP
  275.                 IN A,(C)
  276.                 NOP
  277.                 IN A,(C)
  278.         PEC_ON M_SHADOW_BF
  279.                 LD BC,WIN_P2
  280.                 XOR A
  281.                 OUT (C),A
  282.         PEC_OFF M_SHADOW_BF
  283.                 POP BC
  284.                 RET
  285.  
  286. WR_SECT         PUSH BC
  287.                 LD BC,P_DATA
  288.                 OUT (C),A
  289.                 OTIR
  290.                 NOP
  291.                 OTIR
  292.                 LD A,0xFF
  293.                 OUT (C),A
  294.                 NOP
  295.                 OUT (C),A
  296.                 POP BC
  297.                 RET
  298.  
  299. RDMULTI         EX AF,AF'
  300.                 LD A,CMD_18
  301.                 CALL SECM200
  302.                 EX AF,AF'
  303. RDMULT1         EX AF,AF'
  304.                 CALL IN_OOUT
  305.                 CP 0xFE
  306.                 JR NZ,$-5
  307.                 CALL RD_SECT
  308.                 EX AF,AF'
  309.                 DEC A
  310.                 JR NZ,RDMULT1
  311.                 LD A,CMD_12
  312.                 CALL OUT_COM
  313.                 CALL IN_OOUT
  314.                 INC A
  315.                 JR NZ,$-4
  316.                 JP CS_HIGH
  317.  
  318. WRMULTI         EX AF,AF'
  319.                 LD A,CMD_25
  320.                 CALL SECM200
  321.                 CALL IN_OOUT
  322.                 INC A
  323.                 JR NZ,$-4
  324.                 EX AF,AF'
  325. WRMULT1         EX AF,AF'
  326.                 LD A,0xFC
  327.                 CALL WR_SECT
  328.                 CALL IN_OOUT
  329.                 INC A
  330.                 JR NZ,$-4
  331.                 EX AF,AF'
  332.                 DEC A
  333.                 JR NZ,WRMULT1
  334.                 LD C,P_DATA
  335.                 LD A,0xFD
  336.                 OUT (C),A
  337.                 CALL IN_OOUT
  338.                 INC A
  339.                 JR NZ,$-4
  340.                 JP CS_HIGH
  341.