Subversion Repositories pentevo

Rev

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

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