?login_element?

Subversion Repositories NedoOS

Rev

Rev 356 | Rev 1039 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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