?login_element?

Subversion Repositories NedoOS

Rev

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