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: 26.05.2012 savelij
  3.  
  4. ;АДРЕС ЦИКЛА ОБЩЕНИЯ СО СПЕКОМ
  5. COMINT_         EQU 0X026E
  6.  
  7. ;АДРЕС УСТАНОВЩИКА ДРАЙВЕРА НА NeoGS
  8. SETUPSD         EQU 0X5B00
  9.  
  10. ;ДРАЙВЕР SD-CARD ДЛЯ NGS
  11.  
  12. ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ:
  13. ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ
  14. ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА
  15. ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ)
  16. ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ
  17.  
  18. ;ОШИБКИ ВЫДАВАЕМЫЕ НА ВЫХОДЕ:
  19. ;A=0-ИНИЦИАЛИЗАЦИЯ ПРОШЛА УСПЕШНО
  20. ;A=1-КАРТА НЕ НАЙДЕНА ИЛИ НЕ ОТВЕТИЛА
  21.  
  22. COMSDG          EX AF,AF'
  23.                 LD A,IYL
  24.                 AND A
  25.                 LD A,(NEXTBYTERST8)
  26.                 JR Z,COMSDG1
  27.                 EX (SP),HL
  28.                 LD A,(HL)
  29.                 INC HL
  30.                 EX (SP),HL
  31. COMSDG1         ADD A,A
  32.                 PUSH HL
  33.                 LD HL,RET4SDG
  34.                 EX (SP),HL
  35.                 PUSH HL
  36.                 LD HL,NGSSDT
  37.                 ADD A,L
  38.                 LD L,A
  39.                 ADC A,H
  40.                 SUB L
  41.                 LD H,A
  42.                 LD A,(HL)
  43.                 INC HL
  44.                 LD H,(HL)
  45.                 LD L,A
  46.                 EX AF,AF'
  47.                 EX (SP),HL
  48.                 RET
  49.  
  50. RET4SDG         PUSH AF
  51.                 LD A,IYL
  52.                 AND A
  53.                 JR NZ,RET4SDG1
  54.                 LD (RREG_L),HL
  55.                 EX (SP),HL
  56.                 LD (RREG_F),HL
  57.                 EX (SP),HL
  58. RET4SDG1        POP AF
  59.                 RET
  60.  
  61.  
  62. NGSSDT          DW GSDINIT      ;ИНИТ SD КАРТЫ
  63.                 DW GSDOFF       ;ОТКЛЮЧЕНИЕ SD КАРТЫ
  64.                 DW SDRDMUL      ;ЧИТАТЬ "A" СЕКТОРОВ
  65.                 DW SDWRMUL      ;ПИСАТЬ "A" СЕКТОРОВ
  66.  
  67. ;ЗАПИСЬ "A" СЕКТОРОВ
  68. SDWRMUL         EX AF,AF'
  69.                 LD A,Dev_write
  70.                 CALL COMM2SD
  71.                 EX AF,AF'
  72.                 PUSH DE
  73.                 PUSH BC
  74.                 LD BC,GSDAT
  75. SDWRSN1         EX AF,AF'
  76.                 OUT (GSCOM),A
  77.                 CALL WC_
  78.                 LD DE,0X0200
  79. SDWRSN2         OUTI
  80.                 CALL WD_
  81.                 DEC DE
  82.                 LD A,D
  83.                 OR E
  84.                 JR NZ,SDWRSN2
  85.                 EX AF,AF'
  86.                 DEC A
  87.                 JR NZ,SDWRSN1
  88.                 CALL WN_
  89.                 IN A,(C)
  90.                 CP 0X77
  91.                 JR NZ,$-4
  92.                 POP BC
  93.                 POP DE
  94.                 XOR A
  95.                 RET
  96.  
  97. ;ЧТЕНИЕ "A" СЕКТОРОВ
  98. SDRDMUL         EX AF,AF'
  99.                 LD A,Dev_read
  100.                 CALL COMM2SD
  101.                 EX AF,AF'
  102.                 PUSH DE
  103.                 PUSH BC
  104.                 LD D,A
  105.                 LD A,IYL
  106.                 AND A
  107.                 JR NZ,SDRDSN5
  108.                 LD A,(R_7FFD)
  109.                 AND 0X10
  110.                 LD BC,(B0_CPU2)
  111.                 JR Z,SDRDSN4
  112.                 LD BC,(B1_CPU2)
  113. SDRDSN4         LD A,C
  114.                 LD C,LOW (WIN_A0)
  115.                 OUT (C),A
  116. SDRDSN5         LD A,D
  117.                 LD BC,GSDAT
  118. SDRDSN1         EX AF,AF'
  119.                 OUT (GSCOM),A
  120.                 IN A,(GSCOM)
  121.                 RRA
  122.                 JR C,$-3
  123.                 LD DE,0X0200
  124. SDRDSN2         IN A,(GSCOM)
  125.                 RLA
  126.                 JR NC,$-3
  127.                 INI
  128.                 DEC DE
  129.                 LD A,D
  130.                 OR E
  131.                 JR NZ,SDRDSN2
  132.                 EX AF,AF'
  133.                 DEC A
  134.                 JR NZ,SDRDSN1
  135.                 IN A,(GSCOM)
  136.                 RLA
  137.                 JR NC,$-3
  138.                 IN A,(C)
  139.                 CP 0X77
  140.                 JR NZ,$-4
  141.                 LD BC,WIN_P2
  142.                 XOR A
  143.                 OUT (C),A
  144.                 POP BC
  145.                 POP DE
  146.                 XOR A
  147.                 RET
  148.  
  149. ;ОТКЛЮЧЕНИЕ ВЫБОРА КАРТОЧКИ
  150. GSDOFF          LD A,1
  151.                 JR GSDINIT+1
  152.  
  153. ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ
  154. GSDINIT         XOR A
  155.                 CALL COMM2SD
  156.                 CALL WN_
  157.                 IN A,(GSDAT)
  158.                 CP 0X77
  159.                 JR NZ,SD_NO
  160.                 XOR A
  161.                 RET
  162.  
  163. SD_NO           LD A,1
  164.                 RET
  165.  
  166. ;ПЕРЕДАТЧИК КОМАНД/ПАРАМЕТРОВ В ДРАЙВЕР НА NeoGS
  167. COMM2SD         OUT (GSDAT),A           ;УШЛА КОМАНДА ДРАЙВЕРУ
  168.                 LD A,0X1E
  169.                 OUT (GSCOM),A
  170.                 CALL WC_                ;УШЛА КОМАНДА ПРОШИВКЕ
  171.                 LD A,B
  172.                 OUT (GSDAT),A
  173.                 CALL WD_                ;УШЛИ БИТЫ 31-24 ПАРАМЕТРОВ
  174.                 LD A,C
  175.                 OUT (GSDAT),A
  176.                 CALL WD_                ;УШЛИ БИТЫ 23-16 ПАРАМЕТРОВ
  177.                 LD A,D
  178.                 OUT (GSDAT),A
  179.                 CALL WD_                ;УШЛИ БИТЫ 15-8 ПАРАМЕТРОВ
  180.                 LD A,E
  181.                 OUT (GSDAT),A
  182.                 CALL WD_                ;УШЛИ БИТЫ 7-0 ПАРАМЕТРОВ
  183.                 EX AF,AF'
  184.                 OUT (GSDAT),A
  185.                 EX AF,AF'
  186.                 DUPL 9,0
  187.                 RET                     ;УШЛО КОЛ-ВО СЕКТОРОВ
  188.  
  189. ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ
  190. WD_             IN A,(GSCOM)
  191.                 RLA
  192.                 JR C,$-3
  193.                 RET
  194.  
  195. ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ
  196. WN_             IN A,(GSCOM)
  197.                 RLA
  198.                 JR NC,$-3
  199.                 RET
  200.  
  201. ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ
  202. WC_             IN A,(GSCOM)
  203.                 RRA
  204.                 JR C,$-3
  205.                 RET
  206.  
  207. ;УСТАНОВЩИК ДРАЙВЕРА НА NeoGS
  208. INSTSDD         LD A,0X80
  209.                 OUT (GSCTR),A                   ;ПОЛНЫЙ СБРОС NEOGS
  210.                 EI
  211.                 HALT
  212.                 HALT
  213.                 HALT
  214.                 DI
  215.                 LD A,0XF3
  216.                 OUT (GSCOM),A
  217.                 LD B,0X20
  218. ISDD1           EI
  219.                 HALT
  220.                 DI
  221.                 DEC B
  222.                 JR Z,SD_NO
  223.                 IN A,(GSCOM)
  224.                 RRA
  225.                 JR C,ISDD1
  226.                 LD BC,GSDAT
  227.                 IN A,(C)
  228.                 LD DE,0X0300
  229.                 LD HL,SETUPSD
  230.                 OUT (C),E
  231.                 LD A,0X14
  232.                 OUT (GSCOM),A
  233.                 CALL WC_
  234.                 OUT (C),D
  235.                 CALL WD_
  236.                 OUT (C),L
  237.                 CALL WD_
  238.                 OUT (C),H
  239.                 CALL WD_
  240.                 LD HL,UKLAD1
  241. ISDD3           OUTI
  242.                 CALL WD_
  243.                 DEC DE
  244.                 LD A,D
  245.                 OR E
  246.                 JR NZ,ISDD3
  247.                 LD HL,SETUPSD
  248.                 OUT (C),L
  249.                 LD A,0X13
  250.                 OUT (GSCOM),A
  251.                 CALL WC_
  252.                 OUT (C),H
  253.                 EI
  254.                 HALT
  255.                 HALT
  256.                 DI
  257.                 LD B,3
  258.                 IN A,(GSDAT)
  259.                 DEC B
  260.                 JP Z,SD_NO
  261.                 CP 0X77
  262.                 JP NZ,SD_NO
  263.                 XOR A
  264.                 RET
  265.  
  266. UKLAD1  ;ОТКУДА КОД НА НГС ЗАКИДЫВАТЬ
  267.  
  268.                 PHASE SETUPSD
  269.  
  270. ;САМ УСТАНОВЩИК ДРАЙВЕРА ДЛЯ NeoGS
  271.                 DI
  272.                 LD A,0X9C
  273.                 OUT (SCTRL),A           ;КОНФИГУРАТОР NeoGS
  274.                 CALL AVTODET
  275.                 AND A
  276.                 LD A,0X77               ;0X77-NeoGS НАЙДЕН
  277.                 JR Z,$+4
  278.                 LD A,0XCC               ;0XCC-НАЙДЕН OLDGS
  279.                 OUT (ZXDATWR),A
  280.                 OUT (CLRCBIT),A
  281.                 JP NZ,COMINT_
  282.                 DI
  283.                 IN A,(GSCFG0)
  284.                 RES B_RAMRO,A
  285.                 OUT (GSCFG0),A
  286.                 LD HL,0X1D00
  287.                 LD (0X0300+(0X1E*2)),HL
  288.                 LD DE,UKLAD2
  289.                 LD BC,GSDDRVE-GSDDRV
  290.                 EX DE,HL
  291.                 LDIR
  292.                 IN A,(GSCFG0)
  293.                 SET B_RAMRO,A
  294.                 OUT (GSCFG0),A
  295.                 JP COMINT_
  296.  
  297. ;ПРОВЕРКА ЧТО ЭТО NeoGS И ВКЛЮЧЕНИЕ ЧАСТОТЫ 24MHz
  298. AVTODET         IN A,(GSCFG0)
  299.                 AND 0XCF
  300.                 OUT (GSCFG0),A          ;ОБРАТНАЯ ЗАПИСЬ В ПОРТ СО СБРОШЕННЫМИ
  301.                                         ;БИТАМИ 5-4 ВКЛЮЧАЕТ ЧАСТОТУ ПРОЦЕССОРА
  302.                                         ;РАВНЫМ 24 МГц
  303.                 LD D,A
  304.                 IN A,(GSCFG0)
  305.                 CP D
  306.                 LD A,0
  307.                 RET Z
  308.                 DEC A
  309.                 RET
  310.  
  311. UKLAD2  ;ОТКУДА КОД ПЕРЕКИДЫВАТЬ
  312.  
  313.                 DEPHASE
  314.  
  315.                 PHASE 0X1D00
  316.  
  317. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С
  318. GSDDRV          DI
  319.                 IN A,(ZXDATRD)          ;ПРИЕМ КОМАНДЫ ДРАЙВЕРА
  320.                 OUT (CLRCBIT),A         ;СБРОС COMANDBIT
  321.                 LD HL,COMINT_
  322.                 PUSH HL
  323.                 ADD A,A
  324.                 LD E,A
  325.                 LD D,0
  326.                 LD HL,TABLSDG
  327.                 ADD HL,DE
  328.                 LD E,(HL)
  329.                 INC HL
  330.                 LD D,(HL)
  331.                 EX DE,HL
  332.                 CALL WDY
  333.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 31-24 ПАРАМЕТРА
  334.                 LD B,A
  335.                 CALL WDY
  336.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 23-16 ПАРАМЕТРА
  337.                 LD C,A
  338.                 CALL WDY
  339.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 15-8 ПАРАМЕТРА
  340.                 LD D,A
  341.                 CALL WDY
  342.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 7-0 ПАРАМЕТРА
  343.                 LD E,A
  344.                 CALL WDY
  345.                 IN A,(ZXDATRD)          ;ПРИЕМ КОЛ-ВО СЕКТОРОВ
  346.                 JP (HL)
  347.  
  348. TABLSDG         DW SDINITG              ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A
  349.                                         ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ
  350.                 DW SDOFFG               ;1 просто снятие выбора SD карты
  351.                 DW RDMULG               ;2 ЧИТАТЬ "A" СЕКТОРОВ
  352.                 DW WRMULG               ;3 ПИСАТЬ "A" СЕКТОРОВ
  353.  
  354. ZAW003G         CALL CSHIGHG
  355.                 LD A,0XEE
  356.                 JP OUTSTAT
  357.  
  358. SDINITG         CALL CSHIGHG
  359.                 LD BC,SD_SEND
  360.                 LD DE,0X20FF
  361.                 OUT (C),E
  362.                 DEC D
  363.                 JR NZ,$-3
  364.                 LD BC,SD_RSTR
  365.                 XOR A
  366.                 EX AF,AF'
  367. ZAW001G         LD HL,CMD00G
  368.                 CALL OUTCOMG
  369.                 CALL INOOUTG
  370.                 EX AF,AF'
  371.                 DEC A
  372.                 JR Z,ZAW003G
  373.                 EX AF,AF'
  374.                 DEC A
  375.                 JR NZ,ZAW001G
  376.                 LD HL,CMD08G
  377.                 CALL OUTCOMG
  378.                 CALL INOOUTG
  379.                 IN H,(C)
  380.                 NOP
  381.                 IN H,(C)
  382.                 NOP
  383.                 IN H,(C)
  384.                 NOP
  385.                 IN H,(C)
  386.                 LD HL,0
  387.                 BIT 2,A
  388.                 JR NZ,ZAW006G
  389.                 LD H,0X40
  390. ZAW006G         LD A,CMD_55
  391.                 CALL OUT_COG
  392.                 CALL INOOUTG
  393.                 LD BC,SD_SEND
  394.                 LD A,ACMD_41
  395.                 OUT (C),A
  396.                 NOP
  397.                 OUT (C),H
  398.                 NOP
  399.                 OUT (C),L
  400.                 NOP
  401.                 OUT (C),L
  402.                 NOP
  403.                 OUT (C),L
  404.                 LD A,0XFF
  405.                 OUT (C),A
  406.                 CALL INOOUTG
  407.                 AND A
  408.                 JR NZ,ZAW006G
  409. ZAW004G         LD A,CMD_59
  410.                 CALL OUT_COG
  411.                 CALL INOOUTG
  412.                 AND A
  413.                 JR NZ,ZAW004G
  414. ZAW005G         LD HL,CMD16G
  415.                 CALL OUTCOMG
  416.                 CALL INOOUTG
  417.                 AND A
  418.                 JR NZ,ZAW005G
  419.  
  420. SDOFFG          JP OK_WORK
  421.  
  422. CSHIGHG         PUSH AF
  423.                 LD A,M_SDNCS+M_SNCLR    ;0X81
  424.                 OUT (SCTRL),A
  425.                 POP AF
  426.                 RET
  427.  
  428. CSLOWG          PUSH AF
  429.                 LD A,M_SDNCS            ;1
  430.                 OUT (SCTRL),A
  431.                 POP AF
  432.                 RET
  433.  
  434. OUTCOMG         CALL CSLOWG
  435.                 PUSH BC
  436.                 LD BC,0X0600+SD_SEND
  437.                 OTIR
  438.                 POP BC
  439.                 RET
  440.  
  441. OUT_COG         PUSH BC
  442.                 CALL CSLOWG
  443.                 LD BC,SD_SEND
  444.                 OUT (C),A
  445.                 XOR A
  446.                 OUT (C),A
  447.                 NOP
  448.                 OUT (C),A
  449.                 NOP
  450.                 OUT (C),A
  451.                 NOP
  452.                 OUT (C),A
  453.                 DEC A
  454.                 OUT (C),A
  455.                 POP BC
  456.                 RET
  457.  
  458. SECM20G         PUSH HL
  459.                 PUSH DE
  460.                 PUSH BC
  461.                 PUSH AF
  462.                 PUSH BC
  463.                 LD A,CMD_58
  464.                 LD BC,SD_RSTR
  465.                 CALL OUT_COG
  466.                 CALL INOOUTG
  467.                 IN A,(C)
  468.                 NOP
  469.                 IN H,(C)
  470.                 NOP
  471.                 IN H,(C)
  472.                 NOP
  473.                 IN H,(C)
  474.                 BIT 6,A
  475.                 POP HL
  476.                 JR NZ,SECN20G
  477.                 EX DE,HL
  478.                 ADD HL,HL
  479.                 EX DE,HL
  480.                 ADC HL,HL
  481.                 LD H,L
  482.                 LD L,D
  483.                 LD D,E
  484.                 LD E,0
  485. SECN20G         POP AF
  486.                 LD BC,SD_SEND
  487.                 OUT (C),A
  488.                 NOP
  489.                 OUT (C),H
  490.                 NOP
  491.                 OUT (C),L
  492.                 NOP
  493.                 OUT (C),D
  494.                 NOP
  495.                 OUT (C),E
  496.                 LD A,0XFF
  497.                 OUT (C),A
  498.                 POP BC
  499.                 POP DE
  500.                 POP HL
  501.                 RET
  502.  
  503. INOOUTG         PUSH DE
  504.                 LD DE,0X20FF
  505. INWAITG         IN A,(SD_RSTR)
  506.                 CP E
  507.                 JR NZ,INEXITG
  508.                 DEC D
  509.                 JR NZ,INWAITG
  510. INEXITG         POP DE
  511.                 RET
  512.  
  513. CMD00G          DB 0X40,0X00,0X00,0X00,0X00,0X95        ;GO_IDLE_STATE
  514. CMD08G          DB 0X48,0X00,0X00,0X01,0XAA,0X87        ;SEND_IF_COND
  515. CMD16G          DB 0X50,0X00,0X00,0X02,0X00,0XFF        ;SET_BLOCKEN
  516.  
  517. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА НА СПЕК
  518. RDSECTG         IN A,(ZXSTAT)
  519.                 RRA
  520.                 JR NC,$-3
  521.                 OUT (CLRCBIT),A
  522.                 LD BC,SD_RSTR
  523.                 LD HL,0X0200
  524.                 IN A,(C)
  525.                 DEC HL
  526.                 OUT (ZXDATWR),A
  527.                 CALL WDN
  528.                 LD A,H
  529.                 OR L
  530.                 JR NZ,$-10
  531.                 IN A,(C)
  532.                 NOP
  533.                 IN A,(C)
  534.                 RET
  535.  
  536. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА В SD КАРТУ
  537. WRSECTG         LD BC,SD_SEND
  538.                 OUT (C),A
  539.                 IN A,(ZXSTAT)
  540.                 RRA
  541.                 JR NC,$-3
  542.                 OUT (CLRCBIT),A
  543.                 LD HL,0X0200
  544.                 CALL WDY
  545.                 IN A,(ZXDATRD)
  546.                 DEC HL
  547.                 OUT (C),A
  548.                 LD A,H
  549.                 OR L
  550.                 JR NZ,$-10
  551.                 LD A,0XFF
  552.                 OUT (C),A
  553.                 NOP
  554.                 OUT (C),A
  555.                 RET
  556.  
  557. ;ЗАПИСЬ "A" СЕКТОРОВ
  558. WRMULG          EX AF,AF'
  559.                 LD A,CMD_25
  560.                 CALL SECM20G
  561.                 CALL INOOUTG
  562.                 INC A
  563.                 JR NZ,$-4
  564.                 EX AF,AF'
  565. WRMULG1         EX AF,AF'
  566.                 LD A,0XFC
  567.                 CALL WRSECTG
  568.                 CALL INOOUTG
  569.                 INC A
  570.                 JR NZ,$-4
  571.                 EX AF,AF'
  572.                 DEC A
  573.                 JR NZ,WRMULG1
  574.                 LD C,SD_SEND
  575.                 LD A,0XFD
  576.                 OUT (C),A
  577.                 CALL INOOUTG
  578.                 INC A
  579.                 JR NZ,$-4
  580.                 JR OK_WORK
  581.  
  582. ;ЗАГРУЗКА "A" СЕКТОРОВ
  583. RDMULG          EX AF,AF'
  584.                 LD A,CMD_18
  585.                 CALL SECM20G
  586.                 EX AF,AF'
  587. RDMULG1         EX AF,AF'
  588.                 CALL INOOUTG
  589.                 CP 0XFE
  590.                 JR NZ,$-5
  591.                 CALL RDSECTG
  592.                 EX AF,AF'
  593.                 DEC A
  594.                 JR NZ,RDMULG1
  595.                 LD A,CMD_12
  596.                 CALL OUT_COG
  597.                 CALL INOOUTG
  598.                 INC A
  599.                 JR NZ,$-4
  600.  
  601. OK_WORK         CALL CSHIGHG
  602.                 LD A,0X77
  603.  
  604. OUTSTAT         OUT (ZXDATWR),A
  605.  
  606. ;ОЖИДАНИЕ КОГДА СПЕК ЗАБЕРЕТ БАЙТ ДАННЫХ
  607. WDN             IN A,(ZXSTAT)
  608.                 RLA
  609.                 JR C,$-3
  610.                 RET
  611.  
  612. ;ОЖИДАНИЕ КОГДА СПЕК ДАСТ БАЙТ ДАННЫХ
  613. WDY             IN A,(ZXSTAT)
  614.                 RLA
  615.                 JR NC,$-3
  616.                 RET
  617. GSDDRVE
  618.                 DEPHASE
  619.