Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 17.07.2014 savelij
  3.  
  4. ;ИНФА ДЛЯ СОЗДАНИЯ 9 СЕКТОРА НОВОГО ДИСКА
  5. DSKINFO         DB 0                    ;+0XE1-НОМЕР ПЕРВОГО СВОБОДНОГО СЕКТОРА
  6.                 DB 1                    ;+0XE2-НОМЕР ПЕРВОГО СВОБОДНОГО ТРЕКА
  7.                 DB 0X16                 ;+0XE3-ТИП ДИСКЕТЫ
  8.                 DB 0                    ;+0XE4-КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕТЕ
  9. SECFREE         DW 2544                 ;+0XE5-КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  10.                 DB 0X10                 ;+0XE7-ИДЕНТИФИКАЦИОННЫЙ КОД TRDOS
  11.                 DW 0                    ;+0XE8-2 БАЙТА 0
  12.                 DUPL 9," "              ;+0XEA-9 БАЙТ 0X20
  13.                 DB 0                    ;+0XF3-1 БАЙТ 0
  14.                 DB 0                    ;+0XF4-КОЛИЧЕСТВО УДАЛЕННЫХ ФАЙЛОВ
  15.                 DB "RAMDISKO"           ;+0XF5-ИМЯ ДИСКЕТЫ
  16. DSK_END
  17.  
  18. SET_RWPORT0     PUSH BC
  19.                 PUSH AF
  20.                 LD BC,CMOSD_SET_ADR
  21.                 LD A,VIRT_REAL_DRIVE
  22.                 OUT (C),A
  23.                 LD B,HIGH (CMOSD_RD_WR)
  24.                 IN A,(C)
  25.                 AND 0X0F
  26.                 LD C,A
  27.                 IN A,(RW_PORT0)
  28.                 AND 0XF0
  29.                 OR C
  30.                 OUT (RW_PORT0),A
  31.                 POP AF
  32.                 POP BC
  33.                 RET
  34.  
  35. DOS2RST8        EX (SP),HL                      ;HL
  36.                 PUSH AF                         ;AF
  37.                 PUSH BC                         ;BC
  38.                 LD A,R
  39.                 JP PE,DOS2RST8_01
  40.                 LD A,R
  41. DOS2RST8_01     DI
  42.                 PUSH AF                         ;RF
  43.                 PUSH HL                         ;ADR_RET
  44.                 PUSH DE                         ;DE
  45.                 IN A,(PEVO_CONF)
  46.                 LD L,A
  47.                 OR 1
  48.                 OUT (PEVO_CONF),A
  49.                 LD BC,RD_1WINA0
  50.                 IN A,(C)
  51.                 AND 0X3E
  52.                 LD BC,RD_1WINA0
  53.                 IN H,(C)
  54.                 RES 0,H
  55.                 LD B,HIGH (RD_DOS7FFD)
  56.                 IN E,(C)
  57.                 RES 4,E
  58.                 DEC B
  59.                 IN D,(C)
  60.                 LD BC,WIN_A0
  61.                 OUT (C),A
  62.                 LD B,HIGH (WIN_P0)
  63.                 XOR A
  64.                 JP ADR_SEL_ROM
  65.  
  66. EDOS2RST8       LD BC,DOS_NOEMUL
  67.                 LD A,(BC)
  68.                 AND 0X3E
  69.                 CP E
  70.                 JR Z,EDOS2RST02
  71.                 INC BC
  72. EDOS2RST02      LD A,(BC)
  73.                 LD BC,WIN_A0
  74.                 CALL WR_BYTE_RET
  75.                 LD A,L
  76.                 OUT (PEVO_CONF),A
  77.                 POP DE
  78.                 POP HL
  79.                 POP AF
  80.                 JP PO,EDOS2RST01
  81.                 EI
  82. EDOS2RST01      POP BC
  83.                 POP AF
  84.                 EX (SP),HL
  85.                 RET
  86.  
  87. CMP_SPECSYM     LD HL,(TRD_5CD9)
  88.                 LD A,(HL)
  89.                 CP "."
  90.                 JP NZ,FIND_KEYWORD
  91.                 POP HL
  92.                 RET
  93.  
  94. ;ABCDEFGHIJKLMNOPQRSTUVWXYZ
  95. EXTEND_COM     
  96.                 DB 2,"CD"
  97.                 DW CD
  98.                 DB 7,"CLRCMOS"
  99.                 DW CLRCMOS
  100.                 DB 3,"DIR"
  101.                 DW DIR
  102.                 DB 5,"DRIVE"
  103.                 DW DRIVE
  104.                 DB 4,"HELP"
  105.                 DW HELP
  106.                 DB 5,"MOUNT"
  107.                 DW MOUNT
  108.                 DB 6,"UMOUNT"
  109.                 DW UMOUNT
  110.                 DB 3,"VER"
  111.                 DW PRT_VERS
  112.                 DB 4,"VIRT"
  113.                 DW SET_VIRT
  114.                 DB 0
  115.  
  116. END_EXT_COM     INC DE
  117.                 LD A,(DE)
  118.                 CP ":"
  119.                 DEC DE
  120.                 JP NZ,SINTAX_ERROR
  121.                 LD A,(DE)
  122.                 AND 0DFH
  123.                 SUB "A"
  124.                 JP C,SINTAX_ERROR
  125.                 CP 4
  126.                 JR NC,SELFATDRV
  127.                 LD (TRD_5CF6),A                 ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  128.                 LD (TRD_5D19),A                 ; ДИСКОВОД ПО УМОЛЧАНИЮ
  129.                 LD B,A
  130.                 LD A,(TRD_5D16)                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  131.                 AND 7CH
  132.                 OR B
  133.                 LD (TRD_5D16),A                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  134.                 RST 0X30
  135.                 DB _OUT_FF
  136.                 JP ERR_OK
  137.  
  138. SELFATDRV       SUB 4
  139.                 PUSH AF
  140.                 RST 8
  141.                 DB _COM_DEV
  142.                 DB _DEVFIND
  143.                 RST 8
  144.                 DB _COM_DEV
  145.                 DB _KOL_VOL
  146.                 POP AF
  147.                 CP E
  148.                 JP NC,SINTAX_ERROR
  149.                 RST 8
  150.                 DB _COM_DEV
  151.                 DB _SET_VOL
  152.                 JP ERR_OK
  153.  
  154. COM_DOT         CALL EXIT_IF_SINTAX
  155.                 LD HL,EXTEND_COM
  156. NEXT_CMP_COM    LD A,1
  157.                 LD (TRD_5CEF),A
  158.                 LD DE,(TRD_5D11)
  159.                 INC DE
  160.                 LD A,(HL)
  161.                 INC HL
  162.                 AND A
  163.                 JP Z,END_EXT_COM
  164.                 LD B,A
  165. LOC_C34         LD A,(DE)
  166.                 AND 0DFH
  167.                 CP (HL)
  168.                 JR NZ,PROPUSK
  169.                 INC DE
  170.                 INC HL
  171.                 DJNZ LOC_C34
  172.                 LD A,(DE)
  173.                 CP 0DH
  174.                 JR Z,NO_PARAM
  175.                 CP " "
  176.                 JR Z,GET_PARAM
  177.                 JR LOC_C58
  178.  
  179. PROPUSK         INC HL
  180.                 DJNZ PROPUSK
  181. LOC_C58         INC HL
  182.                 INC HL
  183.                 JR NEXT_CMP_COM
  184.  
  185. GET_PARAM       INC DE
  186. NO_PARAM        LD A,(HL)
  187.                 INC HL
  188.                 LD H,(HL)
  189.                 LD L,A
  190.                 PUSH HL
  191.                 LD HL,END_COMAND
  192.                 EX (SP),HL
  193.                 JP (HL)
  194.  
  195. ;ВЫВОД ИМЕНИ ВИРТУАЛЬНОГО ДИСКА ЕСЛИ НЕ УКАЗАНО ИМЯ ДЛЯ ИЗМЕНЕНИЯ
  196. PRT_NUM_VIRT    LD HL,TXT4VIRTDRV
  197.                 LD B,ETXT4VIRTDRV-TXT4VIRTDRV-1
  198.                 CALL PRT_B_HL_
  199.                 LD A," "
  200.                 RST 0X10
  201.                 LD H,VIRT_REAL_DRIVE
  202.                 CALL READCMOS
  203.                 AND 3
  204.                 ADD A,"A"
  205.                 RST 0X10
  206.                 LD A,0X0D
  207.                 RST 0X10
  208.                 RET
  209.  
  210. ;УСТАНОВКА ВИРТУАЛЬНОГО ДИСКА
  211. SET_VIRT        LD A,(DE)
  212.                 CP 0X0D
  213.                 JR Z,PRT_NUM_VIRT
  214.                 LD C,A
  215.                 INC DE
  216.                 LD A,(DE)
  217.                 CP ":"
  218.                 JP NZ,SINTAX_ERROR
  219.                 LD A,C
  220.                 CALL NUMDSK2BYTE                ;ПОЛУЧИЛИ НОВЫЙ НОМЕР ДИСКОВОДА УКАЗАННЫЙ В КОМАНДНОЙ СТРОКЕ
  221.                 LD D,A                          ;СОХРАНИЛИ ВРЕМЕННО СДВИНУТЫЙ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
  222.                 IN A,(RW_PORT0)
  223.                 AND %11111100
  224.                 OR D
  225.                 OUT (RW_PORT0),A
  226.                 LD H,VIRT_REAL_DRIVE
  227.                 CALL READCMOS
  228.                 AND %11111100                   ;СБРОС СТАРОГО НОМЕРА ВИРТУАЛЬНОГО ДИСКОВОДА
  229.                 OR D                            ;ДОБАВИЛИ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
  230.                 LD L,A
  231.                 RST 8
  232.                 DB _CMOS_RW
  233.                 DB _WRITE_CMOS
  234.                 RET
  235.  
  236. ;ПЕЧАТЬ ВЕРСИИ ДОСА И ДАТЫ КОМПИЛЯЦИИ
  237. PRT_VERS        LD HL,0X3FF8
  238.                 LD B,6
  239.                 CALL PRT_B_HL_
  240.                 LD A," "
  241.                 RST 0X10
  242.                 LD C,(HL)
  243.                 INC HL
  244.                 LD B,(HL)
  245.                 PUSH BC
  246.                 LD HL,ZASTAVKA_VER
  247.                 LD B,9
  248.                 CALL PRT_B_HL_
  249.                 LD A," "
  250.                 RST 0X10
  251.                 POP BC
  252.                 LD A,C
  253.                 AND 0X1F                        ;НУЖНЫ 5 БИТ-ЧИСЛО МЕСЯЦА
  254.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ДАТЫ
  255.                 SRL B
  256.                 RR C                            ;СДВИНУЛИ ДЛЯ ЦЕЛОСТНОСТИ НОМЕРА МЕСЯЦА
  257.                 LD A,"."
  258.                 RST 0X10
  259.                 LD A,C                          ;ВЗЯЛИ БИТЫ МЕСЯЦА
  260.                 RRCA
  261.                 RRCA
  262.                 RRCA
  263.                 RRCA                            ;СДВИНУЛИ В МЛАДШИЕ БИТЫ
  264.                 AND 0X0F                        ;НАМ НУЖНЫ ТОЛЬКО 4 БИТА МЕСЯЦА
  265.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА МЕСЯЦА
  266.                 LD A,"."
  267.                 RST 0X10
  268.                 LD A,B                          ;ВЗЯЛИ НОМЕР ГОДА
  269.                 AND 0X3F                        ;НУЖНЫ ТОЛЬКО 6 БИТ
  270.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ГОДА
  271.                 BIT 6,B                         ;ЕСЛИ БИТ 6 (СДВИНУТЫЙ БИТ 7) УСТАНОВЛЕН
  272.                 RET Z
  273.                 LD HL,TXT_BETA
  274.                 RST 0X18
  275.                 LD A,0X0D
  276.                 RST 0X10
  277.                 RET
  278.  
  279. ;ПЕЧАТЬ B=КОЛИЧЕСТВО СИМВОЛОВ ИЗ HL=АДРЕС ТЕКСТА ДЛЯ ВЫВОДА
  280. PRT_B_HL_       LD A,(HL)
  281.                 INC HL
  282.                 RST 0X10
  283.                 DJNZ PRT_B_HL_
  284.                 RET
  285.  
  286. TXT_BETA        DC " beta"
  287.  
  288. ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
  289. A2TXT           LD L,A
  290.                 LD H,0
  291.                 LD DE,10
  292.                 XOR A
  293.                 DEC A
  294.                 INC A
  295.                 SBC HL,DE
  296.                 JR NC,$-3
  297.                 ADD HL,DE
  298.                 ADD A,"0"
  299.                 RST 0X10
  300.                 LD A,L
  301.                 ADD A,"0"
  302.                 RST 0X10
  303.                 RET
  304.  
  305. DRIVES          DC "Drives: "
  306. EDRIVES
  307.  
  308. DRIVE           RST 8
  309.                 DB _COM_DEV
  310.                 DB _DEVFIND
  311.                 JP C,FAT_NOT_FOUND
  312.                 RST 8
  313.                 DB _COM_DEV
  314.                 DB _KOL_VOL
  315.                 LD A,"D"
  316.                 ADD A,E
  317.                 PUSH AF
  318.                 LD HL,DRIVES
  319.                 RST 0X18
  320.                 LD A,"E"
  321.                 RST 0X10
  322.                 LD A,"-"
  323.                 RST 0X10
  324.                 POP AF
  325.                 RST 0X10
  326.                 RET
  327.  
  328. TXT_DIR         DC "<DIR> "
  329. TXT_FATERR      DC "FAT not found"
  330.  
  331. DIR             LD B,0
  332.                 LD A,(DE)
  333.                 INC DE
  334.                 CP "/"
  335.                 JR NZ,DIR06
  336.                 LD A,(DE)
  337.                 AND 0XDF
  338.                 CP "L"
  339.                 JR NZ,DIR06
  340.                 LD B,A
  341. DIR06           RST 8
  342.                 DB _COM_DEV
  343.                 DB _DEVFIND
  344.                 JR NC,DIR061
  345. FAT_NOT_FOUND   CALL OPEN_CHAN_0
  346.                 LD HL,TXT_FATERR                ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  347.                 RST 0X18
  348.                 RET
  349.  
  350. DIR061          PUSH IX
  351.                 LD IXL,B
  352.                 CALL CLEAR_SCREEN
  353.                 CALL OPEN_CHAN_2
  354.                 LD A,2
  355.                 RST 8
  356.                 DB _COM_FAT
  357.                 DB _POS_FILES
  358. DIR05           LD E,0X17
  359. DIR01           PUSH DE
  360.                 PUSH BC
  361.                 LD HL,TRD_5D25
  362.                 RST 8
  363.                 DB _COM_FAT
  364.                 DB _READ_DIR
  365.                 LD DE,0X0B
  366.                 ADD HL,DE
  367.                 LD A,(HL)
  368.                 SBC HL,DE
  369.                 AND 0X10
  370.                 JR Z,DIR04
  371.                 PUSH HL
  372.                 LD HL,TXT_DIR
  373.                 RST 0X18
  374.                 POP HL
  375. DIR04           LD A,IXL
  376.                 AND A
  377.                 JR Z,DIR08
  378.                 PUSH HL
  379.                 RST 8
  380.                 DB _COM_FAT
  381.                 DB _GET_LONGNAME
  382.                 POP HL
  383. DIR03           LD A,(HL)
  384.                 AND A
  385.                 JR Z,DIR02
  386.                 INC HL
  387.                 RST 0X10
  388.                 JR DIR03
  389.  
  390. DIR08           LD B,8
  391. DIR081          LD A,(HL)
  392.                 CP " "
  393.                 JR Z,DIR082
  394.                 RST 0X10
  395.                 INC HL
  396.                 DJNZ DIR081
  397. DIR082          LD A,B
  398.                 AND A
  399.                 JR Z,DIR085
  400. DIR086          LD A,(HL)
  401.                 CP " "
  402.                 JR NZ,DIR085
  403.                 INC HL
  404.                 DJNZ DIR086
  405. DIR085          LD A,(HL)
  406.                 CP " "
  407.                 JR Z,DIR084
  408.                 LD A,"."
  409.                 RST 0X10
  410. DIR084          LD B,3
  411. DIR083          LD A,(HL)
  412.                 CP " "
  413.                 JR Z,DIR02
  414.                 RST 0X10
  415.                 INC HL
  416.                 DJNZ DIR083
  417. DIR02           LD A,0X0D
  418.                 RST 0X10
  419.                 LD A,4
  420.                 LD B,1
  421.                 RST 8
  422.                 DB _COM_FAT
  423.                 DB _POS_FILES
  424.                 POP HL
  425.                 AND A
  426.                 SBC HL,BC
  427.                 POP DE
  428.                 JR Z,DIR07
  429.                 DEC E
  430.                 JR NZ,DIR01
  431.                 JR DIR05
  432.  
  433. DIR07           POP IX
  434.                 RET
  435.  
  436. CD              PUSH DE
  437.                 RST 8
  438.                 DB _COM_DEV
  439.                 DB _DEVFIND
  440.                 POP HL
  441.                 RST 8
  442.                 DB _COM_FAT
  443.                 DB _FIND_NAME
  444.                 JP C,SINTAX_ERROR
  445.                 RST 8
  446.                 DB _COM_FAT
  447.                 DB _ENTER_DIR
  448.                 RET
  449.  
  450. NOMER_DRV       RST 8
  451.                 DB _COM_DEV
  452.                 DB _DEVFIND
  453.                 CCF
  454.                 RET NC                          ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  455.                 RST 8
  456.                 DB _COM_DEV
  457.                 DB _KOL_VOL
  458.                 CALL CREATE_BUF
  459.                 LD HL,TRD_5D25
  460.                 RST 8
  461.                 DB _COM_FAT
  462.                 DB _GET_PATH
  463.                 CALL PRINT2ZERO
  464.                 CALL DEL_BUF
  465.                 SCF
  466.                 RET
  467.  
  468. MOUNT           PUSH DE
  469.                 RST 8
  470.                 DB _COM_DEV
  471.                 DB _DEVFIND
  472.                 EX DE,HL
  473.                 POP HL
  474.                 JP C,FAT_NOT_FOUND
  475.                 PUSH HL
  476.                 RST 8
  477.                 DB _COM_FAT
  478.                 DB _FIND_NAME
  479.                 JP C,SINTAX_ERROR
  480.                 POP DE
  481.                 LD B,0X0C
  482. MOUNT02         LD A,(DE)
  483.                 CP "!"
  484.                 JR C,MOUNT01
  485.                 INC DE
  486.                 DJNZ MOUNT02
  487. MOUNT01         LD A,(DE)
  488.                 CP 0X0D
  489.                 JP Z,SINTAX_ERROR
  490.                 CP " "
  491.                 JP NZ,SINTAX_ERROR
  492.                 INC DE
  493.                 LD A,(DE)
  494.                 CP "A"
  495.                 JP C,SINTAX_ERROR
  496.                 AND 0XDF
  497.                 CP "E"
  498.                 JP NC,SINTAX_ERROR
  499.                 SUB "A"
  500.                 LD C,A
  501.                 INC DE
  502.                 LD A,(DE)
  503.                 CP ":"
  504.                 JP NZ,SINTAX_ERROR
  505.                 LD A,C
  506.                 RST 8
  507.                 DB _MOUNTER
  508.                 DB _OPEN_MOUNT
  509.                 RET
  510.  
  511. WR_RD_SEC_M     PUSH IX
  512.                 LD (TEMP_SP),SP
  513.                 LD HL,(DOS_STEK)
  514.                 LD DE,SAVED_RAM
  515.                 LD BC,0X10
  516.                 LDIR
  517.                 LD SP,HL
  518.                 IN A,(RW_PORT1)                 ;ВЗЯЛИ НОМЕР ТРЕКА
  519.                 ADD A,A                         ;СТОРОН 2
  520.                 LD D,A
  521.                 LD A,(WR_FF)
  522.                 AND 0X10                        ;ПРОВЕРКА КАКАЯ СТОРОНА ДИСКА
  523.                 JR NZ,WRRDSECM1
  524.                 INC D                           ;ДЛЯ СТОРОНЫ 1
  525. WRRDSECM1       IN A,(RW_PORT2)                 ;ВЗЯЛИ НОМЕР СЕКТОРА
  526.                 LD E,A                          ;D-ТРЕК, E-СЕКТОР
  527.                 LD HL,(REG_L)                   ;HL=АДРЕС ЧТЕНИЯ/ЗАПИСИ
  528.                 LD A,(WR_FF)
  529.                 AND 3
  530.                 LD C,A                          ;НОМЕР ДИСКОВОДА
  531.                 LD A,IXL
  532.                 AND A                           ;BIT 7=0-ЧТЕНИЕ
  533.                 JR Z,WRRDSECM2
  534.                 LD A,0X80                       ;BIT 7=1-ЗАПИСЬ
  535. WRRDSECM2       OR C
  536.                 LD IXL,A                        ;A=НОМЕР ДИСКОВОДА+БИТ ЧТЕНИЯ/ЗАПИСИ
  537.                 LD A,(TEK_ROMPAGE)
  538.                 AND 0X3E
  539.                 LD IXH,A
  540.                 LD BC,WIN_A0
  541.                 OUT (C),A
  542.                 LD A,IXL
  543.                 RST 8
  544.                 DB _MOUNTER
  545.                 DB _RDWR_MOUNT
  546.                 LD BC,WIN_A0
  547.                 LD A,IXH
  548.                 OUT (C),A
  549.                 LD B,HIGH (WIN_P0)
  550.                 LD A,PAGE_EVODOS
  551.                 OUT (C),A
  552.                 LD (REG_L),HL                   ;ОБНОВИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
  553.                 LD HL,SAVED_RAM
  554.                 LD DE,(DOS_STEK)
  555.                 LD BC,0X10
  556.                 LDIR
  557.                 LD SP,(TEMP_SP)
  558.                 POP IX
  559.                 RET
  560.  
  561. UMOUNT          LD A,(DE)
  562.                 INC DE
  563.                 AND 0XDF
  564.                 LD B,A
  565.                 LD A,(DE)
  566.                 INC DE
  567.                 CP ":"
  568.                 JP NZ,SINTAX_ERROR
  569.                 LD A,B
  570.                 CP "A"
  571.                 JP C,SINTAX_ERROR
  572.                 CP "E"
  573.                 JP NC,SINTAX_ERROR
  574.                 SUB "A"
  575.                 RST 8
  576.                 DB _MOUNTER
  577.                 DB _CLOSEMOUNT
  578.                 RET
  579.  
  580. CLRCMOS         RST 8
  581.                 DB _CMOS_RW
  582.                 DB _CLEAR_CMOS
  583.                 RET
  584.  
  585. HELP            CALL CLEAR_SCREEN
  586.                 CALL OPEN_CHAN_2
  587.                 LD HL,EXTEND_COM
  588. HELP4           LD C,3
  589. HELP2           LD A,(HL)
  590.                 AND A
  591.                 RET Z
  592.                 INC HL
  593.                 LD B,A
  594.                 PUSH BC
  595.                 LD A,"."
  596.                 RST 0X10
  597. HELP1           LD A,(HL)
  598.                 INC HL
  599.                 RST 0X10
  600.                 DJNZ HELP1
  601.                 INC HL
  602.                 INC HL
  603.                 POP BC
  604.                 LD A,9
  605.                 SUB B
  606.                 LD B,A
  607. HELP3           LD A," "
  608.                 RST 0X10
  609.                 DJNZ HELP3
  610.                 DEC C
  611.                 JR NZ,HELP2
  612.                 LD A,0X0D
  613.                 RST 0X10
  614.                 JR HELP4
  615.  
  616. BUGFIX_3EBF     PUSH AF
  617.                 PUSH HL
  618.                 CALL GET_TIME_HEAD
  619.                 LD B,A
  620.                 POP HL
  621.                 POP AF
  622.                 JP HEAD_POSITION
  623.  
  624. READ_BYTE_HL_   PUSH BC
  625.                 PUSH HL
  626.                 LD A,(LOC_2A53_)
  627.                 CP 0X0C
  628.                 LD BC,WIN_A0+0X100
  629.                 LD HL,DOS_NOEMUL
  630.                 CALL NZ,WRPORT_RET
  631.                 LD C,A
  632.                 EX (SP),HL
  633.                 LD A,(HL)
  634.                 EX (SP),HL
  635.                 PUSH AF
  636.                 LD A,C
  637.                 CP 0X0C
  638.                 JR Z,RBHL1
  639.                 LD BC,WIN_A0+0X100
  640.                 LD HL,DOS_EMUL
  641.                 CALL WRPORT_RET
  642. RBHL1           POP AF
  643.                 POP HL
  644.                 POP BC
  645.                 RET
  646.  
  647. ;АЛЬТЕРНАТИВНОЕ КОПИРОВАНИЕ СЕКТОРА ДЛЯ РАМДИСКА
  648. SV_LD_RAMDISK   PUSH HL
  649.                 CALL CP_TYPEDRIVE
  650.                 POP HL
  651.                 JP NZ,WR_NUM_TRACK              ;ПРИ НЕ СОВПАДЕНИИ РАБОТА ПРОДОЛЖАЕТСЯ С РЕАЛЬНОЙ ДИСКЕТОЙ
  652.                 POP HL                          ;ИНАЧЕ РАБОТАЕМ С РАМДИСКОМ
  653.                 POP HL
  654.                 POP BC
  655.                 XOR A
  656.                 OR B
  657.                 RET Z
  658.                 DI
  659.                 PUSH IX                         ;СОХРАНИЛИ ДЛЯ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ
  660.                 LD IX,(TRD_5CCE)                ;ЧТЕНИЕ ИЛИ ЗАПИСЬ? 00-ЧТЕНИЕ, FF-ЗАПИСЬ, СОХРАНИЛИ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
  661. SVLDRAM1        PUSH BC
  662.                 PUSH HL
  663.                 LD DE,(TRD_5CF4)
  664.                 CALL COM_04
  665.                 LD A,E
  666.                 CALL COM_03
  667.                 INC A
  668.                 OUT (RW_PORT2),A        ;OUT (0X5F),A
  669.                 LD A,D
  670.                 PUSH HL
  671.                 CALL COM_02
  672.                 POP HL
  673.                 RST 0X30
  674.                 DB _WR_RD_SECT
  675.                 LD A,0X10
  676.                 LD HL,TRD_5CF4
  677.                 INC (HL)                        ;УВЕЛИЧЕНИЕ НОМЕРА СЕКТОРА
  678.                 CP (HL)
  679.                 JR NZ,SVLDRAM2
  680.                 LD (HL),0                       ;ЕСЛИ ВЫХОД ЗА ПРЕДЕЛЫ ТРЕКА, ТО СЕКТОР =0
  681.                 INC HL
  682.                 INC (HL)                        ;И УВЕЛИЧИВАЕМ НОМЕР ТРЕКА
  683. SVLDRAM2        POP HL
  684.                 POP BC
  685.                 INC H                           ;УВЕЛИЧИЛИ АДРЕС КОПИРОВАНИЯ НА 256 БАЙТ
  686.                 DJNZ SVLDRAM1
  687.                 POP IX                          ;ПОПОЛЬЗОВАЛИСЬ И ВОССТАНОВИЛИ
  688.                 EI
  689.                 RET
  690.  
  691. DISK_NONE       PUSH HL
  692.                 PUSH BC
  693.                 LD BC,WIN_A1
  694.                 LD A,0X40
  695.                 OUT (C),A
  696.                 LD B,HIGH (WIN_P1)
  697.                 LD A,PAGE_RAMDISK
  698.                 OUT (C),A
  699.                 LD HL,CPU1+0XFFF
  700.                 LD A,(HL)
  701.                 DEC H
  702.                 CP "R"
  703.                 SCF
  704.                 JR NZ,DISK_NONE1
  705.                 LD A,(HL)
  706.                 CP "D"
  707.                 SCF
  708.                 JR NZ,DISK_NONE1
  709.                 XOR A
  710. DISK_NONE1      POP BC
  711.                 POP HL
  712.                 RET
  713.  
  714. ;ВОЗВРАТ В ОКНА CPU1 И CPU2 УСТАНОВЛЕННЫХ СТРАНИЦ
  715. WRITE_CONF      LD BC,(BB_CPU1)
  716.                 LD A,C
  717.                 LD C,LOW (WIN_A0)
  718.                 OUT (C),A
  719.                 LD BC,(BB_CPU2)
  720.                 LD A,C
  721.                 LD C,LOW (WIN_A0)
  722.                 OUT (C),A
  723.                 RET
  724.