Subversion Repositories pentevo

Rev

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

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