Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 30.06.2019 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. NGSSDT          DW GSDINIT      ;ИНИТ SD КАРТЫ
  62.                 DW GSDCMP       ;ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ
  63.                 DW SDRDMUL      ;ЧИТАТЬ "A" СЕКТОРОВ
  64.                 DW SDWRMUL      ;ПИСАТЬ "A" СЕКТОРОВ
  65.  
  66. ;ЗАПИСЬ "A" СЕКТОРОВ
  67. SDWRMUL         EX AF,AF'
  68.                 LD A,_DEV_WRITE
  69.                 CALL COMM2SD
  70.                 EX AF,AF'
  71.                 PUSH DE
  72.                 PUSH BC
  73.                 LD BC,GSDAT
  74. SDWRSN1         EX AF,AF'
  75.                 OUT (GSCOM),A
  76.                 CALL WC_
  77.                 LD DE,0X0200
  78. SDWRSN2         OUTI
  79.                 CALL WD_
  80.                 DEC DE
  81.                 LD A,D
  82.                 OR E
  83.                 JR NZ,SDWRSN2
  84.                 EX AF,AF'
  85.                 DEC A
  86.                 JR NZ,SDWRSN1
  87.                 CALL WN_
  88.                 IN A,(GSDAT)
  89.                 CP 0X99                         ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  90.                 JP Z,SD_CARD_LOST
  91.                 POP BC
  92.                 POP DE
  93.                 XOR A
  94.                 RET
  95.  
  96. ;ЧТЕНИЕ "A" СЕКТОРОВ
  97. SDRDMUL         EX AF,AF'
  98.                 LD A,_DEV_READ
  99.                 CALL COMM2SD
  100.                 EX AF,AF'
  101.                 PUSH DE
  102.                 PUSH BC
  103.                 LD D,A
  104.                 LD A,IYL
  105.                 BIT 1,A
  106.                 JR NZ,SDRDSN3
  107.                 AND A
  108.                 JR NZ,SDRDSN5
  109. SDRDSN3        
  110. ;               LD A,(R_7FFD)
  111.                 READ_7FFD
  112.                 AND 0X10
  113.                 LD BC,(B0_CPU2)
  114.                 JR Z,SDRDSN4
  115.                 LD BC,(B1_CPU2)
  116. SDRDSN4         LD A,0X37
  117.                 OR B
  118.                 LD B,A
  119.                 LD A,C
  120.                 LD C,LOW (WIN_A0)
  121.                 OUT (C),A
  122. SDRDSN5         LD A,D
  123.                 LD BC,GSDAT
  124. SDRDSN1         EX AF,AF'
  125.                 OUT (GSCOM),A
  126.                 IN A,(GSCOM)
  127.                 RRA
  128.                 JR C,$-3
  129.                 LD DE,0X0200                    ;ПРОДОЛЖАЕМ ЕСЛИ ВСЕ В ПОРЯДКЕ
  130. SDRDSN2         IN A,(GSCOM)
  131.                 RLA
  132.                 JR NC,$-3
  133.                 INI
  134.                 DEC DE
  135.                 LD A,D
  136.                 OR E
  137.                 JR NZ,SDRDSN2
  138.                 EX AF,AF'
  139.                 DEC A
  140.                 JR NZ,SDRDSN1
  141.                 IN A,(GSCOM)
  142.                 RLA
  143.                 JR NC,$-3
  144.                 IN A,(GSDAT)
  145.                 CP 0X99                         ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  146.                 JP Z,SD_CARD_LOST
  147.                 LD BC,WIN_P6
  148.                 XOR A
  149.                 OUT (C),A
  150.                 POP BC
  151.                 POP DE
  152.                 RET
  153.  
  154. ;ПРОВЕРКА НАЛИЧИЯ КАРТОЧКИ
  155. GSDCMP          LD H,CMOS_BYTE_01
  156.                 ROMCALL READCMOS,ROM_RST82
  157.                 LD A,L
  158.                 AND M_ACCESSSDG                 ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  159.                 JR Z,SD_NO                      ;ВЫХОД ЕСЛИ ДОСТУП К КАРТОЧКЕ ЗАПРЕЩЕН
  160.                 LD A,(FLAGS_DRV)
  161.                 AND B_INST_SDG
  162.                 JR Z,SD_NO                      ;ВЫХОД ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
  163.                 XOR A
  164.                 OUT (GSDAT),A
  165.                 LD A,0X1D
  166.                 OUT (GSCOM),A
  167.                 IN A,(GSCOM)
  168.                 RRA
  169.                 JR C,$-3
  170.                 IN A,(GSDAT)
  171.                 LD D,A
  172.                 AND 0X0F
  173.                 LD E,A
  174.                 LD A,D
  175.                 AND 0XF0
  176.                 RRCA
  177.                 RRCA
  178.                 RRCA
  179.                 RRCA
  180.                 CP E
  181.                 LD A,1
  182.                 JR NZ,GSDINIT1
  183.                 CALL INSTSDD
  184.  
  185. ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ
  186. GSDINIT         XOR A
  187. GSDINIT1        CALL COMM2SD
  188.                 CALL WN_
  189. GSDINIT2        IN A,(GSDAT)
  190. GSDINIT3        CP 0X99                         ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  191.                 JP Z,SD_CARD_LOST
  192.                 CP 0X77
  193.                 JR NZ,SD_NO
  194.                 XOR A
  195.                 RET
  196.  
  197. SD_NO           LD A,1
  198.                 RET
  199.  
  200. ;ПЕРЕДАТЧИК КОМАНД/ПАРАМЕТРОВ В ДРАЙВЕР НА NeoGS
  201. COMM2SD         OUT (GSDAT),A           ;УШЛА КОМАНДА ДРАЙВЕРУ
  202.                 LD A,0X1E
  203.                 OUT (GSCOM),A
  204.                 CALL WC_                ;УШЛА КОМАНДА ПРОШИВКЕ
  205.                 LD A,B
  206.                 OUT (GSDAT),A
  207.                 CALL WD_                ;УШЛИ БИТЫ 31-24 ПАРАМЕТРОВ
  208.                 LD A,C
  209.                 OUT (GSDAT),A
  210.                 CALL WD_                ;УШЛИ БИТЫ 23-16 ПАРАМЕТРОВ
  211.                 LD A,D
  212.                 OUT (GSDAT),A
  213.                 CALL WD_                ;УШЛИ БИТЫ 15-8 ПАРАМЕТРОВ
  214.                 LD A,E
  215.                 OUT (GSDAT),A
  216.                 CALL WD_                ;УШЛИ БИТЫ 7-0 ПАРАМЕТРОВ
  217.                 EX AF,AF'
  218.                 OUT (GSDAT),A
  219.                 EX AF,AF'
  220.                 DUPL 9,0
  221.                 RET                     ;УШЛО КОЛ-ВО СЕКТОРОВ
  222.  
  223. ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ
  224. WD_             IN A,(GSCOM)
  225.                 RLA
  226.                 JR C,$-3
  227.                 RET
  228.  
  229. ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ
  230. WN_             IN A,(GSCOM)
  231.                 RLA
  232.                 JR NC,$-3
  233.                 RET
  234.  
  235. ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ
  236. WC_             IN A,(GSCOM)
  237.                 RRA
  238.                 JR C,$-3
  239.                 RET
  240.  
  241. ;УСТАНОВЩИК ДРАЙВЕРА НА NeoGS
  242. INSTSDD         LD A,0X80
  243.                 OUT (GSCTR),A                   ;ПОЛНЫЙ СБРОС NEOGS
  244.                 EI
  245.                 HALT
  246.                 EI
  247.                 HALT
  248.                 EI
  249.                 HALT
  250.                 DI
  251.                 LD A,0XF3
  252.                 OUT (GSCOM),A
  253.                 LD B,0X30
  254. ISDD1           EI
  255.                 HALT
  256.                 DI
  257.                 DEC B
  258.                 JR Z,SD_NO
  259.                 IN A,(GSCOM)
  260.                 RRA
  261.                 JR C,ISDD1
  262.                 LD BC,GSDAT
  263.                 IN A,(C)
  264.                 LD DE,0X0300
  265.                 LD HL,SETUPSD
  266.                 OUT (C),E
  267.                 LD A,0X14
  268.                 OUT (GSCOM),A
  269.                 CALL WC_
  270.                 OUT (C),D
  271.                 CALL WD_
  272.                 OUT (C),L
  273.                 CALL WD_
  274.                 OUT (C),H
  275.                 CALL WD_
  276.                 LD HL,UKLAD1
  277. ISDD3           OUTI
  278.                 CALL WD_
  279.                 DEC DE
  280.                 LD A,D
  281.                 OR E
  282.                 JR NZ,ISDD3
  283.                 LD HL,SETUPSD
  284.                 OUT (C),L
  285.                 LD A,0X13
  286.                 OUT (GSCOM),A
  287.                 CALL WC_
  288.                 OUT (C),H
  289.                 EI
  290.                 HALT
  291.                 EI
  292.                 HALT
  293.                 DI
  294.                 LD B,3
  295.                 IN A,(GSDAT)
  296.                 DEC B
  297.                 JP Z,SD_NO
  298.                 CP 0X77
  299.                 JP NZ,SD_NO
  300.                 XOR A
  301.                 RET
  302.  
  303. UKLAD1  ;ОТКУДА КОД НА НГС ЗАКИДЫВАТЬ
  304.  
  305.                 PHASE SETUPSD
  306.  
  307. ;САМ УСТАНОВЩИК ДРАЙВЕРА ДЛЯ NeoGS
  308.                 DI
  309.                 LD A,0X9C
  310.                 OUT (SCTRL),A           ;КОНФИГУРАТОР NeoGS
  311.                 CALL AVTODET
  312.                 AND A
  313.                 LD A,0X77               ;0X77-NeoGS НАЙДЕН
  314.                 JR Z,$+4
  315.                 LD A,0XCC               ;0XCC-НАЙДЕН OLDGS
  316.                 OUT (ZXDATWR),A
  317.                 OUT (CLRCBIT),A
  318.                 JP NZ,COMINT_
  319.                 DI
  320.                 IN A,(GSCFG0)
  321.                 RES B_RAMRO,A
  322.                 OUT (GSCFG0),A
  323.                 LD HL,0X1D00
  324.                 LD (0X0300+(0X1E*2)),HL
  325.                 LD DE,UKLAD2
  326.                 LD BC,GSDDRVE-GSDDRV
  327.                 EX DE,HL
  328.                 LDIR
  329.                 IN A,(GSCFG0)
  330.                 SET B_RAMRO,A
  331.                 OUT (GSCFG0),A
  332.                 JP COMINT_
  333.  
  334. ;ПРОВЕРКА ЧТО ЭТО NeoGS И ВКЛЮЧЕНИЕ ЧАСТОТЫ 24MHz
  335. AVTODET         IN A,(GSCFG0)
  336.                 AND 0XCF
  337.                 OUT (GSCFG0),A          ;ОБРАТНАЯ ЗАПИСЬ В ПОРТ СО СБРОШЕННЫМИ
  338.                                         ;БИТАМИ 5-4 ВКЛЮЧАЕТ ЧАСТОТУ ПРОЦЕССОРА
  339.                                         ;РАВНЫМ 24 МГц
  340.                 LD D,A
  341.                 IN A,(GSCFG0)
  342.                 CP D
  343.                 LD A,0
  344.                 RET Z
  345.                 DEC A
  346.                 RET
  347.  
  348. UKLAD2  ;ОТКУДА КОД ПЕРЕКИДЫВАТЬ
  349.  
  350.                 DEPHASE
  351.  
  352.                 PHASE 0X1D00
  353.  
  354. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С SD КАРТОЙ
  355. GSDDRV          DI
  356.                 IN A,(ZXDATRD)          ;ПРИЕМ КОМАНДЫ ДРАЙВЕРА
  357.                 OUT (CLRCBIT),A         ;СБРОС COMANDBIT
  358.                 LD HL,COMINT_
  359.                 PUSH HL
  360.                 PUSH IY
  361.                 LD IYH,0X77
  362.                 ADD A,A
  363.                 LD E,A
  364.                 LD D,0
  365.                 LD HL,TABLSDG
  366.                 ADD HL,DE
  367.                 LD E,(HL)
  368.                 INC HL
  369.                 LD D,(HL)
  370.                 EX DE,HL
  371.                 CALL WDY
  372.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 31-24 ПАРАМЕТРА
  373.                 LD B,A
  374.                 CALL WDY
  375.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 23-16 ПАРАМЕТРА
  376.                 LD C,A
  377.                 CALL WDY
  378.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 15-8 ПАРАМЕТРА
  379.                 LD D,A
  380.                 CALL WDY
  381.                 IN A,(ZXDATRD)          ;ПРИЕМ БИТОВ 7-0 ПАРАМЕТРА
  382.                 LD E,A
  383.                 CALL WDY
  384.                 IN A,(ZXDATRD)          ;ПРИЕМ КОЛ-ВО СЕКТОРОВ
  385.                 JP (HL)
  386.  
  387. TABLSDG         DW SDINITG              ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A
  388.                                         ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ
  389.                 DW SDCMPG               ;1 ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ
  390.                 DW RDMULG               ;2 ЧИТАТЬ "A" СЕКТОРОВ
  391.                 DW WRMULG               ;3 ПИСАТЬ "A" СЕКТОРОВ
  392.  
  393. SDCMPG          LD A,CMD_58
  394.                 LD BC,SD_RSTR
  395.                 CALL OUT_COG
  396.                 CALL INOOUTG
  397.                 IN A,(C)
  398.                 NOP
  399.                 IN H,(C)
  400.                 NOP
  401.                 IN H,(C)
  402.                 NOP
  403.                 IN H,(C)
  404.                 INC A
  405.                 JP NZ,OK_WORK
  406.                 LD IYH,0X88                     ;КАРТА НЕ ПРОШЛА ПРОВЕРКУ НА НАЛИЧИЕ
  407.                 JP OK_WORK
  408.  
  409. ZAW003G         LD IYH,0XEE                     ;КАРТА НЕОБНАРУЖЕНА
  410.                 JP OK_WORK
  411.  
  412. SDINITG         CALL CSHIGHG
  413.                 LD BC,SD_SEND
  414.                 LD DE,0X20FF
  415.                 OUT (C),E
  416.                 DEC D
  417.                 JR NZ,$-3
  418.                 LD BC,SD_RSTR
  419.                 XOR A
  420.                 EX AF,AF'
  421. ZAW001G         LD HL,CMD00G
  422.                 CALL OUTCOMG
  423.                 CALL INOOUTG
  424.                 EX AF,AF'
  425.                 DEC A
  426.                 JR Z,ZAW003G
  427.                 EX AF,AF'
  428.                 DEC A
  429.                 JR NZ,ZAW001G
  430.                 LD HL,CMD08G
  431.                 CALL OUTCOMG
  432.                 CALL INOOUTG
  433.                 IN H,(C)
  434.                 NOP
  435.                 IN H,(C)
  436.                 NOP
  437.                 IN H,(C)
  438.                 NOP
  439.                 IN H,(C)
  440.                 LD HL,0
  441.                 BIT 2,A
  442.                 JR NZ,ZAW006G
  443.                 LD H,0X40
  444. ZAW006G         LD A,CMD_55
  445.                 CALL OUT_COG
  446.                 CALL INOOUTG
  447.                 LD BC,SD_SEND
  448.                 LD A,ACMD_41
  449.                 OUT (C),A
  450.                 NOP
  451.                 OUT (C),H
  452.                 NOP
  453.                 OUT (C),L
  454.                 NOP
  455.                 OUT (C),L
  456.                 NOP
  457.                 OUT (C),L
  458.                 LD A,0XFF
  459.                 OUT (C),A
  460.                 CALL INOOUTG
  461.                 AND A
  462.                 JR NZ,ZAW006G
  463. ZAW004G         LD A,CMD_59
  464.                 CALL OUT_COG
  465.                 CALL INOOUTG
  466.                 AND A
  467.                 JR NZ,ZAW004G
  468. ZAW005G         LD HL,CMD16G
  469.                 CALL OUTCOMG
  470.                 CALL INOOUTG
  471.                 AND A
  472.                 JR NZ,ZAW005G
  473.                 JP OK_WORK
  474.  
  475. CSHIGHG         PUSH AF
  476.                 LD A,M_SDNCS+M_SNCLR    ;0X81
  477.                 OUT (SCTRL),A
  478.                 POP AF
  479.                 RET
  480.  
  481. CSLOWG          PUSH AF
  482.                 LD A,M_SDNCS            ;1
  483.                 OUT (SCTRL),A
  484.                 POP AF
  485.                 RET
  486.  
  487. OUTCOMG         CALL CSLOWG
  488.                 PUSH BC
  489.                 LD BC,0X0600+SD_SEND
  490.                 OTIR
  491.                 POP BC
  492.                 RET
  493.  
  494. OUT_COG         PUSH BC
  495.                 CALL CSLOWG
  496.                 LD BC,SD_SEND
  497.                 OUT (C),A
  498.                 XOR A
  499.                 OUT (C),A
  500.                 NOP
  501.                 OUT (C),A
  502.                 NOP
  503.                 OUT (C),A
  504.                 NOP
  505.                 OUT (C),A
  506.                 DEC A
  507.                 OUT (C),A
  508.                 POP BC
  509.                 RET
  510.  
  511. SECM20G         PUSH HL
  512.                 PUSH DE
  513.                 PUSH BC
  514.                 PUSH AF
  515.                 PUSH BC
  516.                 LD A,CMD_58
  517.                 LD BC,SD_RSTR
  518.                 CALL OUT_COG
  519.                 CALL INOOUTG
  520.                 IN A,(C)
  521.                 NOP
  522.                 IN H,(C)
  523.                 NOP
  524.                 IN H,(C)
  525.                 NOP
  526.                 IN H,(C)
  527.                 INC A
  528.                 JR NZ,SECN20G1
  529.                 LD IYH,0X99                     ;КАРТА ПОТЕРЯЛАСЬ
  530. SECN20G1        DEC A
  531.                 BIT 6,A
  532.                 POP HL
  533.                 JR NZ,SECN20G
  534.                 EX DE,HL
  535.                 ADD HL,HL
  536.                 EX DE,HL
  537.                 ADC HL,HL
  538.                 LD H,L
  539.                 LD L,D
  540.                 LD D,E
  541.                 LD E,0
  542. SECN20G         POP AF
  543.                 LD BC,SD_SEND
  544.                 OUT (C),A
  545.                 NOP
  546.                 OUT (C),H
  547.                 NOP
  548.                 OUT (C),L
  549.                 NOP
  550.                 OUT (C),D
  551.                 NOP
  552.                 OUT (C),E
  553.                 LD A,0XFF
  554.                 OUT (C),A
  555.                 POP BC
  556.                 POP DE
  557.                 POP HL
  558.                 RET
  559.  
  560. INOOUTG         PUSH DE
  561.                 LD DE,0X80FF
  562. INWAITG         IN A,(SD_RSTR)
  563.                 CP E
  564.                 JR NZ,INEXITG
  565.                 DEC D
  566.                 JR NZ,INWAITG
  567. INEXITG         POP DE
  568.                 RET
  569.  
  570. CMD00G          DB 0X40,0X00,0X00,0X00,0X00,0X95        ;GO_IDLE_STATE
  571. CMD08G          DB 0X48,0X00,0X00,0X01,0XAA,0X87        ;SEND_IF_COND
  572. CMD16G          DB 0X50,0X00,0X00,0X02,0X00,0XFF        ;SET_BLOCKEN
  573.  
  574. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА В SD КАРТУ
  575. WRSECTG         LD BC,SD_SEND
  576.                 OUT (SD_SEND),A
  577.                 IN A,(ZXSTAT)
  578.                 RRA
  579.                 JR NC,$-3
  580.                 OUT (CLRCBIT),A
  581.                 LD HL,0X0200
  582. WRSECTG1        CALL WDY
  583.                 IN A,(ZXDATRD)
  584.                 DEC HL
  585.                 OUT (C),A
  586.                 LD A,H
  587.                 OR L
  588.                 JR NZ,WRSECTG1
  589.                 LD A,0XFF
  590.                 OUT (C),A
  591.                 NOP
  592.                 OUT (C),A
  593.                 RET
  594.  
  595. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА НА СПЕК
  596. RDSECTG         IN A,(ZXSTAT)
  597.                 RRA
  598.                 JR NC,$-3
  599.                 OUT (CLRCBIT),A
  600.                 LD BC,SD_RSTR
  601.                 LD HL,0X0200
  602. RDSECTG1        IN A,(C)
  603.                 DEC HL
  604.                 OUT (ZXDATWR),A
  605.                 CALL WDN
  606.                 LD A,H
  607.                 OR L
  608.                 JR NZ,RDSECTG1
  609.                 IN A,(C)
  610.                 NOP
  611.                 IN A,(C)
  612.                 RET
  613.  
  614. ;ЗАПИСЬ "A" СЕКТОРОВ
  615. WRMULG          EX AF,AF'
  616.                 LD A,CMD_25
  617.                 CALL SECM20G
  618.                 LD A,IYH
  619.                 CP 0X99
  620.                 JR Z,ERR_WR_LOST
  621. WRMULG3         CALL INOOUTG
  622.                 INC A
  623.                 JR NZ,WRMULG3
  624.                 EX AF,AF'
  625. WRMULG1         EX AF,AF'
  626.                 LD A,0XFC
  627.                 CALL WRSECTG
  628. WRMULG2         CALL INOOUTG
  629.                 INC A
  630.                 JR NZ,WRMULG2
  631.                 EX AF,AF'
  632.                 DEC A
  633.                 JR NZ,WRMULG1
  634.                 LD C,SD_SEND
  635.                 LD A,0XFD
  636.                 OUT (C),A
  637.                 CALL INOOUTG
  638.                 INC A
  639.                 JR NZ,$-4
  640.                 JR OK_WORK
  641.  
  642. ERR_WR_LOST     LD BC,SD_SEND
  643.                 OUT (SD_SEND),A
  644.                 IN A,(ZXSTAT)
  645.                 RRA
  646.                 JR NC,$-3
  647.                 OUT (CLRCBIT),A
  648.                 LD HL,0X0200
  649. ERRWRLOST1      CALL WDY
  650.                 IN A,(ZXDATRD)
  651.                 DEC HL
  652.                 LD A,H
  653.                 OR L
  654.                 JR NZ,ERRWRLOST1
  655.                 JP OK_WORK
  656.  
  657. ERR_RD_LOST     IN A,(ZXSTAT)
  658.                 RRA
  659.                 JR NC,$-3
  660.                 OUT (CLRCBIT),A
  661.                 LD BC,SD_RSTR
  662.                 LD HL,0X0200
  663. ERRRDLOST1      XOR A
  664.                 OUT (ZXDATWR),A
  665.                 CALL WDN
  666.                 DEC HL
  667.                 LD A,H
  668.                 OR L
  669.                 JR NZ,ERRRDLOST1
  670.                 JP OK_WORK
  671.  
  672. ;ЗАГРУЗКА "A" СЕКТОРОВ
  673. RDMULG          EX AF,AF'
  674.                 LD A,CMD_18
  675.                 CALL SECM20G
  676.                 LD A,IYH
  677.                 CP 0X99
  678.                 JR Z,ERR_RD_LOST
  679.                 EX AF,AF'
  680. RDMULG1         EX AF,AF'
  681.                 CALL INOOUTG
  682.                 CP 0XFE
  683.                 JR NZ,$-5
  684. RDMULG5         CALL RDSECTG
  685.                 EX AF,AF'
  686.                 DEC A
  687.                 JR NZ,RDMULG1
  688.                 LD A,CMD_12
  689.                 CALL OUT_COG
  690. RDMULG3         CALL INOOUTG
  691.                 INC A
  692.                 JR NZ,RDMULG3
  693.  
  694. OK_WORK         CALL CSHIGHG
  695.                 LD A,IYH
  696.                 POP IY
  697.  
  698. OUTSTAT         OUT (ZXDATWR),A
  699.  
  700. ;ОЖИДАНИЕ КОГДА СПЕК ЗАБЕРЕТ БАЙТ ДАННЫХ
  701. WDN             IN A,(ZXSTAT)
  702.                 RLA
  703.                 JR C,$-3
  704.                 RET
  705.  
  706. ;ОЖИДАНИЕ КОГДА СПЕК ДАСТ БАЙТ ДАННЫХ
  707. WDY             IN A,(ZXSTAT)
  708.                 RLA
  709.                 JR NC,$-3
  710.                 RET
  711. GSDDRVE
  712.                 DEPHASE
  713.