Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 16.02.2025 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.         READ_7FFD
  111.                 AND 0x10
  112.                 LD BC,(B0_CPU2)
  113.                 JR Z,SDRDSN4
  114.                 LD BC,(B1_CPU2)
  115. SDRDSN4         LD A,0x37
  116.                 OR B
  117.                 LD B,A
  118.                 LD A,C
  119.                 LD C,LOW (WIN_A0)
  120.                 OUT (C),A
  121. SDRDSN5         LD A,D
  122.                 LD BC,GSDAT
  123. SDRDSN1         EX AF,AF'
  124.                 OUT (GSCOM),A
  125. .L1             IN A,(GSCOM)
  126.                 RRA
  127.                 JR C,.L1
  128.                 LD DE,0x0200                    ; продолжаем если все в порядке
  129. .L2             IN A,(GSCOM)
  130.                 RLA
  131.                 JR NC,.L2
  132.                 INI
  133.                 DEC DE
  134.                 LD A,D
  135.                 OR E
  136.                 JR NZ,.L2
  137.                 EX AF,AF'
  138.                 DEC A
  139.                 JR NZ,SDRDSN1
  140. .L3             IN A,(GSCOM)
  141.                 RLA
  142.                 JR NC,.L3
  143.                 IN A,(GSDAT)
  144.                 CP 0x99                         ; карта потерялась по время чтения/записи
  145.                 JP Z,SD_CARD_LOST
  146.                 LD BC,WIN_P2
  147.                 XOR A
  148.                 OUT (C),A
  149.                 POP BC
  150.                 POP DE
  151.                 RET
  152.  
  153. ; проверка наличия карточки
  154. GSDCMP          LD H,CMOS.BYTE_01
  155.         ROMCALL READCMOS,ROM_RST82
  156.                 LD A,L
  157.                 AND CMOS_EC.M_SD_NGS_ONOFF      ; проверка разрешения доступа к SD карте NEOGS
  158.                 JR Z,SD_NO                      ; выход если доступ к карточке запрещен
  159.                 LD A,(DEVMAN_VARS.FLAGS_DRV)
  160.                 AND B_INST_SDG
  161.                 JR Z,SD_NO                      ; выход если драйвер не установлен
  162.                 XOR A
  163.                 OUT (GSDAT),A
  164.                 LD A,0x1D
  165.                 OUT (GSCOM),A
  166. .L1             IN A,(GSCOM)
  167.                 RRA
  168.                 JR C,.L1
  169.                 IN A,(GSDAT)
  170.                 LD D,A
  171.                 AND 0x0F
  172.                 LD E,A
  173.                 LD A,D
  174.                 AND 0xF0
  175.                 RRCA
  176.                 RRCA
  177.                 RRCA
  178.                 RRCA
  179.                 CP E
  180.                 LD A,1
  181.                 JR NZ,GSDINIT1
  182.                 CALL INSTSDD
  183.  
  184. ; инициализация карточки
  185. GSDINIT         XOR A
  186. GSDINIT1        CALL COMM2SD
  187.                 CALL WN_
  188. GSDINIT2        IN A,(GSDAT)
  189. GSDINIT3        CP 0x99                         ; карта потерялась по время чтения/записи
  190.                 JP Z,SD_CARD_LOST
  191.                 CP 0x77
  192.                 JR NZ,SD_NO
  193.                 XOR A
  194.                 RET
  195.  
  196. SD_NO           LD A,1
  197.                 RET
  198.  
  199. ; передатчик команд/параметров в драйвер на NeoGS
  200. COMM2SD         OUT (GSDAT),A           ; ушла команда драйверу
  201.                 LD A,0x1E
  202.                 OUT (GSCOM),A
  203.                 CALL WC_                ; ушла команда прошивке
  204.                 LD A,B
  205.                 OUT (GSDAT),A
  206.                 CALL WD_                ; ушли биты 31-24 параметров
  207.                 LD A,C
  208.                 OUT (GSDAT),A
  209.                 CALL WD_                ; ушли биты 23-16 параметров
  210.                 LD A,D
  211.                 OUT (GSDAT),A
  212.                 CALL WD_                ; ушли биты 15-8 параметров
  213.                 LD A,E
  214.                 OUT (GSDAT),A
  215.                 CALL WD_                ; ушли биты 7-0 параметров
  216.                 EX AF,AF'
  217.                 OUT (GSDAT),A
  218.                 EX AF,AF'
  219.                 DUPL 9,0
  220.                 RET                     ; ушло кол-во секторов
  221.  
  222. ; ожидание когда NeoGS байт заберет
  223. WD_             IN A,(GSCOM)
  224.                 RLA
  225.                 JR C,WD_
  226.                 RET
  227.  
  228. ; ожидание когда NeoGS даст байт
  229. WN_             IN A,(GSCOM)
  230.                 RLA
  231.                 JR NC,WN_
  232.                 RET
  233.  
  234. ; ожидание когда NeoGS команду заберет
  235. WC_             IN A,(GSCOM)
  236.                 RRA
  237.                 JR C,WC_
  238.                 RET
  239.  
  240. ; установщик драйвера на NeoGS
  241. INSTSDD         LD A,0x80
  242.                 OUT (GSCTR),A                   ; полный сброс NEOGS
  243.                 EI
  244.                 HALT
  245.                 EI
  246.                 HALT
  247.                 EI
  248.                 HALT
  249.                 DI
  250.                 LD A,0xF3
  251.                 OUT (GSCOM),A
  252.                 LD B,0x30
  253. ISDD1           EI
  254.                 HALT
  255.                 DI
  256.                 DEC B
  257.                 JR Z,SD_NO
  258.                 IN A,(GSCOM)
  259.                 RRA
  260.                 JR C,ISDD1
  261.                 LD BC,GSDAT
  262.                 IN A,(C)
  263.                 LD DE,0x0300
  264.                 LD HL,SETUPSD
  265.                 OUT (C),E
  266.                 LD A,0x14
  267.                 OUT (GSCOM),A
  268.                 CALL WC_
  269.                 OUT (C),D
  270.                 CALL WD_
  271.                 OUT (C),L
  272.                 CALL WD_
  273.                 OUT (C),H
  274.                 CALL WD_
  275.                 LD HL,UKLAD1
  276. ISDD3           OUTI
  277.                 CALL WD_
  278.                 DEC DE
  279.                 LD A,D
  280.                 OR E
  281.                 JR NZ,ISDD3
  282.                 LD HL,SETUPSD
  283.                 OUT (C),L
  284.                 LD A,0x13
  285.                 OUT (GSCOM),A
  286.                 CALL WC_
  287.                 OUT (C),H
  288.                 EI
  289.                 HALT
  290.                 EI
  291.                 HALT
  292.                 DI
  293.                 LD B,3
  294.                 IN A,(GSDAT)
  295.                 DEC B
  296.                 JP Z,SD_NO
  297.                 CP 0x77
  298.                 JP NZ,SD_NO
  299.                 XOR A
  300.                 RET
  301.  
  302. UKLAD1  ; откуда код на нгс закидывать
  303.  
  304.                 PHASE SETUPSD
  305.  
  306. ; сам установщик драйвера для NeoGS
  307.                 DI
  308.                 LD A,0x9C
  309.                 OUT (SCTRL),A           ; конфигуратор NeoGS
  310.                 CALL AVTODET
  311.                 AND A
  312.                 LD A,0x77               ; 0x77-NeoGS найден
  313.                 JR Z,.L1
  314.                 LD A,0xCC               ; 0xCC-найден OLDGS
  315. .L1             OUT (ZXDATWR),A
  316.                 OUT (CLRCBIT),A
  317.                 JP NZ,COMINT_
  318.                 DI
  319.                 IN A,(GSCFG0)
  320.                 RES B_RAMRO,A
  321.                 OUT (GSCFG0),A
  322.                 LD HL,0x1D00
  323.                 LD (0x0300+(0x1E*2)),HL
  324.                 LD DE,UKLAD2
  325.                 LD BC,GSDDRVE-GSDDRV
  326.                 EX DE,HL
  327.                 LDIR
  328.                 IN A,(GSCFG0)
  329.                 SET B_RAMRO,A
  330.                 OUT (GSCFG0),A
  331.                 JP COMINT_
  332.  
  333. ; проверка что это NeoGS и включение частоты 24MHz
  334. AVTODET         IN A,(GSCFG0)
  335.                 AND 0xCF
  336.                 OUT (GSCFG0),A          ; обратная запись в порт со сброшенными
  337.                                         ; битами 5-4 включает частоту процессора
  338.                                         ; равным 24 МГц
  339.                 LD D,A
  340.                 IN A,(GSCFG0)
  341.                 CP D
  342.                 LD A,0
  343.                 RET Z
  344.                 DEC A
  345.                 RET
  346.  
  347. UKLAD2  ; откуда код перекидывать
  348.  
  349.                 DEPHASE
  350.  
  351.                 PHASE 0x1D00
  352.  
  353. ; общая точка входа для работы с SD картой
  354. GSDDRV          DI
  355.                 IN A,(ZXDATRD)          ; прием команды драйвера
  356.                 OUT (CLRCBIT),A         ; сброс COMANDBIT
  357.                 LD HL,COMINT_
  358.                 PUSH HL
  359.                 PUSH IY
  360.                 LD IYH,0x77
  361.                 ADD A,A
  362.                 LD E,A
  363.                 LD D,0
  364.                 LD HL,TABLSDG
  365.                 ADD HL,DE
  366.                 LD E,(HL)
  367.                 INC HL
  368.                 LD D,(HL)
  369.                 EX DE,HL
  370.                 CALL WDY
  371.                 IN A,(ZXDATRD)          ; прием битов 31-24 параметра
  372.                 LD B,A
  373.                 CALL WDY
  374.                 IN A,(ZXDATRD)          ; прием битов 23-16 параметра
  375.                 LD C,A
  376.                 CALL WDY
  377.                 IN A,(ZXDATRD)          ; прием битов 15-8 параметра
  378.                 LD D,A
  379.                 CALL WDY
  380.                 IN A,(ZXDATRD)          ; прием битов 7-0 параметра
  381.                 LD E,A
  382.                 CALL WDY
  383.                 IN A,(ZXDATRD)          ; прием кол-во секторов
  384.                 JP (HL)
  385.  
  386. TABLSDG         DW SDINITG              ; 0 параметров не требует, на выходе 'A'
  387.                                         ; смотри выше первые 2 значения
  388.                 DW SDCMPG               ; 1 проверка наличия SD карты
  389.                 DW RDMULG               ; 2 читать 'A' секторов
  390.                 DW WRMULG               ; 3 писать 'A' секторов
  391.  
  392. SDCMPG          LD A,CMD_58
  393.                 LD BC,SD_RSTR
  394.                 CALL OUT_COG
  395.                 CALL INOOUTG
  396.                 IN A,(C)
  397.                 NOP
  398.                 IN H,(C)
  399.                 NOP
  400.                 IN H,(C)
  401.                 NOP
  402.                 IN H,(C)
  403.                 INC A
  404.                 JP NZ,OK_WORK
  405.                 LD IYH,0x88                     ; карта не прошла проверку на наличие
  406.                 JP OK_WORK
  407.  
  408. ZAW003G         LD IYH,0xEE                     ; карта необнаружена
  409.                 JP OK_WORK
  410.  
  411. SDINITG         CALL CSHIGHG
  412.                 LD BC,SD_SEND
  413.                 LD DE,0x20FF
  414. .L1             OUT (C),E
  415.                 DEC D
  416.                 JR NZ,.L1
  417.                 LD BC,SD_RSTR
  418.                 XOR A
  419.                 EX AF,AF'
  420. ZAW001G         LD HL,CMD00G
  421.                 CALL OUTCOMG
  422.                 CALL INOOUTG
  423.                 EX AF,AF'
  424.                 DEC A
  425.                 JR Z,ZAW003G
  426.                 EX AF,AF'
  427.                 DEC A
  428.                 JR NZ,ZAW001G
  429.                 LD HL,CMD08G
  430.                 CALL OUTCOMG
  431.                 CALL INOOUTG
  432.                 IN H,(C)
  433.                 NOP
  434.                 IN H,(C)
  435.                 NOP
  436.                 IN H,(C)
  437.                 NOP
  438.                 IN H,(C)
  439.                 LD HL,0
  440.                 BIT 2,A
  441.                 JR NZ,ZAW006G
  442.                 LD H,0x40
  443. ZAW006G         LD A,CMD_55
  444.                 CALL OUT_COG
  445.                 CALL INOOUTG
  446.                 LD BC,SD_SEND
  447.                 LD A,ACMD_41
  448.                 OUT (C),A
  449.                 NOP
  450.                 OUT (C),H
  451.                 NOP
  452.                 OUT (C),L
  453.                 NOP
  454.                 OUT (C),L
  455.                 NOP
  456.                 OUT (C),L
  457.                 LD A,0xFF
  458.                 OUT (C),A
  459.                 CALL INOOUTG
  460.                 AND A
  461.                 JR NZ,ZAW006G
  462. ZAW004G         LD A,CMD_59
  463.                 CALL OUT_COG
  464.                 CALL INOOUTG
  465.                 AND A
  466.                 JR NZ,ZAW004G
  467. ZAW005G         LD HL,CMD16G
  468.                 CALL OUTCOMG
  469.                 CALL INOOUTG
  470.                 AND A
  471.                 JR NZ,ZAW005G
  472.                 JP OK_WORK
  473.  
  474. CSHIGHG         PUSH AF
  475.                 LD A,M_SDNCS+M_SNCLR    ; 0x81
  476.                 OUT (SCTRL),A
  477.                 POP AF
  478.                 RET
  479.  
  480. CSLOWG          PUSH AF
  481.                 LD A,M_SDNCS            ; 1
  482.                 OUT (SCTRL),A
  483.                 POP AF
  484.                 RET
  485.  
  486. OUTCOMG         CALL CSLOWG
  487.                 PUSH BC
  488.                 LD BC,0x0600+SD_SEND
  489.                 OTIR
  490.                 POP BC
  491.                 RET
  492.  
  493. OUT_COG         PUSH BC
  494.                 CALL CSLOWG
  495.                 LD BC,SD_SEND
  496.                 OUT (C),A
  497.                 XOR A
  498.                 OUT (C),A
  499.                 NOP
  500.                 OUT (C),A
  501.                 NOP
  502.                 OUT (C),A
  503.                 NOP
  504.                 OUT (C),A
  505.                 DEC A
  506.                 OUT (C),A
  507.                 POP BC
  508.                 RET
  509.  
  510. SECM20G         PUSH HL
  511.                 PUSH DE
  512.                 PUSH BC
  513.                 PUSH AF
  514.                 PUSH BC
  515.                 LD A,CMD_58
  516.                 LD BC,SD_RSTR
  517.                 CALL OUT_COG
  518.                 CALL INOOUTG
  519.                 IN A,(C)
  520.                 NOP
  521.                 IN H,(C)
  522.                 NOP
  523.                 IN H,(C)
  524.                 NOP
  525.                 IN H,(C)
  526.                 INC A
  527.                 JR NZ,SECN20G1
  528.                 LD IYH,0x99                     ; карта потерялась
  529. SECN20G1        DEC A
  530.                 BIT 6,A
  531.                 POP HL
  532.                 JR NZ,SECN20G
  533.                 EX DE,HL
  534.                 ADD HL,HL
  535.                 EX DE,HL
  536.                 ADC HL,HL
  537.                 LD H,L
  538.                 LD L,D
  539.                 LD D,E
  540.                 LD E,0
  541. SECN20G         POP AF
  542.                 LD BC,SD_SEND
  543.                 OUT (C),A
  544.                 NOP
  545.                 OUT (C),H
  546.                 NOP
  547.                 OUT (C),L
  548.                 NOP
  549.                 OUT (C),D
  550.                 NOP
  551.                 OUT (C),E
  552.                 LD A,0xFF
  553.                 OUT (C),A
  554.                 POP BC
  555.                 POP DE
  556.                 POP HL
  557.                 RET
  558.  
  559. INOOUTG         PUSH DE
  560.                 LD DE,0x80FF
  561. INWAITG         IN A,(SD_RSTR)
  562.                 CP E
  563.                 JR NZ,INEXITG
  564.                 DEC D
  565.                 JR NZ,INWAITG
  566. INEXITG         POP DE
  567.                 RET
  568.  
  569. CMD00G          DB 0x40,0x00,0x00,0x00,0x00,0x95        ; GO_IDLE_STATE
  570. CMD08G          DB 0x48,0x00,0x00,0x01,0xAA,0x87        ; SEND_IF_COND
  571. CMD16G          DB 0x50,0x00,0x00,0x02,0x00,0xFF        ; SET_BLOCKEN
  572.  
  573. ; передача одного сектора в SD карту
  574. WRSECTG         LD BC,SD_SEND
  575.                 OUT (SD_SEND),A
  576. .L1             IN A,(ZXSTAT)
  577.                 RRA
  578.                 JR NC,.L1
  579.                 OUT (CLRCBIT),A
  580.                 LD HL,0x0200
  581. WRSECTG1        CALL WDY
  582.                 IN A,(ZXDATRD)
  583.                 DEC HL
  584.                 OUT (C),A
  585.                 LD A,H
  586.                 OR L
  587.                 JR NZ,WRSECTG1
  588.                 LD A,0xFF
  589.                 OUT (C),A
  590.                 NOP
  591.                 OUT (C),A
  592.                 RET
  593.  
  594. ; передача одного сектора на спек
  595. RDSECTG         IN A,(ZXSTAT)
  596.                 RRA
  597.                 JR NC,RDSECTG
  598.                 OUT (CLRCBIT),A
  599.                 LD BC,SD_RSTR
  600.                 LD HL,0x0200
  601. RDSECTG1        IN A,(C)
  602.                 DEC HL
  603.                 OUT (ZXDATWR),A
  604.                 CALL WDN
  605.                 LD A,H
  606.                 OR L
  607.                 JR NZ,RDSECTG1
  608.                 IN A,(C)
  609.                 NOP
  610.                 IN A,(C)
  611.                 RET
  612.  
  613. ; запись 'A' секторов
  614. WRMULG          EX AF,AF'
  615.                 LD A,CMD_25
  616.                 CALL SECM20G
  617.                 LD A,IYH
  618.                 CP 0x99
  619.                 JR Z,ERR_WR_LOST
  620. WRMULG3         CALL INOOUTG
  621.                 INC A
  622.                 JR NZ,WRMULG3
  623.                 EX AF,AF'
  624. WRMULG1         EX AF,AF'
  625.                 LD A,0xFC
  626.                 CALL WRSECTG
  627. WRMULG2         CALL INOOUTG
  628.                 INC A
  629.                 JR NZ,WRMULG2
  630.                 EX AF,AF'
  631.                 DEC A
  632.                 JR NZ,WRMULG1
  633.                 LD C,SD_SEND
  634.                 LD A,0xFD
  635.                 OUT (C),A
  636. .L1             CALL INOOUTG
  637.                 INC A
  638.                 JR NZ,.L1
  639.                 JR OK_WORK
  640.  
  641. ERR_WR_LOST     LD BC,SD_SEND
  642.                 OUT (SD_SEND),A
  643. .L1             IN A,(ZXSTAT)
  644.                 RRA
  645.                 JR NC,.L1
  646.                 OUT (CLRCBIT),A
  647.                 LD HL,0x0200
  648. ERRWRLOST1      CALL WDY
  649.                 IN A,(ZXDATRD)
  650.                 DEC HL
  651.                 LD A,H
  652.                 OR L
  653.                 JR NZ,ERRWRLOST1
  654.                 JP OK_WORK
  655.  
  656. ERR_RD_LOST     IN A,(ZXSTAT)
  657.                 RRA
  658.                 JR NC,ERR_RD_LOST
  659.                 OUT (CLRCBIT),A
  660.                 LD BC,SD_RSTR
  661.                 LD HL,0x0200
  662. ERRRDLOST1      XOR A
  663.                 OUT (ZXDATWR),A
  664.                 CALL WDN
  665.                 DEC HL
  666.                 LD A,H
  667.                 OR L
  668.                 JR NZ,ERRRDLOST1
  669.                 JP OK_WORK
  670.  
  671. ; загрузка 'A' секторов
  672. RDMULG          EX AF,AF'
  673.                 LD A,CMD_18
  674.                 CALL SECM20G
  675.                 LD A,IYH
  676.                 CP 0x99
  677.                 JR Z,ERR_RD_LOST
  678.                 EX AF,AF'
  679. RDMULG1         EX AF,AF'
  680. .L1             CALL INOOUTG
  681.                 CP 0xFE
  682.                 JR NZ,.L1
  683. RDMULG5         CALL RDSECTG
  684.                 EX AF,AF'
  685.                 DEC A
  686.                 JR NZ,RDMULG1
  687.                 LD A,CMD_12
  688.                 CALL OUT_COG
  689. RDMULG3         CALL INOOUTG
  690.                 INC A
  691.                 JR NZ,RDMULG3
  692. OK_WORK         CALL CSHIGHG
  693.                 LD A,IYH
  694.                 POP IY
  695. OUTSTAT         OUT (ZXDATWR),A
  696. ; ожидание когда спек заберет байт данных
  697. WDN             IN A,(ZXSTAT)
  698.                 RLA
  699.                 JR C,WDN
  700.                 RET
  701.  
  702. ; ожидание когда спек даст байт данных
  703. WDY             IN A,(ZXSTAT)
  704.                 RLA
  705.                 JR NC,WDY
  706.                 RET
  707. GSDDRVE
  708.                 DEPHASE
  709.