Subversion Repositories pentevo

Rev

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

  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.                 RST8D _MOUNTER,_MOUNT_RAMDISK
  215.                 RET
  216.  
  217. ;[ПЕЧАТЬ ВЕРСИИ ДОСА И ДАТЫ КОМПИЛЯЦИИ]
  218. PRT_VERS        LD HL,0X3FF8
  219.                 LD B,6
  220.                 CALL PRT_B_HL_
  221.                 LD A," "
  222.                 RST 0X10
  223.                 LD C,(HL)
  224.                 INC HL
  225.                 LD B,(HL)
  226.                 PUSH BC
  227.                 LD HL,ZASTAVKA_VER
  228.                 LD B,9
  229.                 CALL PRT_B_HL_
  230.                 LD A," "
  231.                 RST 0X10
  232.                 POP BC
  233.                 LD A,C
  234.                 AND 0X1F                        ;НУЖНЫ 5 БИТ-ЧИСЛО МЕСЯЦА
  235.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ДАТЫ
  236.                 SRL B
  237.                 RR C                            ;СДВИНУЛИ ДЛЯ ЦЕЛОСТНОСТИ НОМЕРА МЕСЯЦА
  238.                 LD A,"."
  239.                 RST 0X10
  240.                 LD A,C                          ;ВЗЯЛИ БИТЫ МЕСЯЦА
  241.                 RRCA
  242.                 RRCA
  243.                 RRCA
  244.                 RRCA                            ;СДВИНУЛИ В МЛАДШИЕ БИТЫ
  245.                 AND 0X0F                        ;НАМ НУЖНЫ ТОЛЬКО 4 БИТА МЕСЯЦА
  246.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА МЕСЯЦА
  247.                 LD A,"."
  248.                 RST 0X10
  249.                 LD A,B                          ;ВЗЯЛИ НОМЕР ГОДА
  250.                 AND 0X3F                        ;НУЖНЫ ТОЛЬКО 6 БИТ
  251.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ГОДА
  252.                 BIT 6,B                         ;ЕСЛИ БИТ 6 (СДВИНУТЫЙ БИТ 7) УСТАНОВЛЕН
  253.                 RET Z
  254.                 LD HL,TXT_BETA
  255. PRT_ROMVER      RST 0X18
  256.                 LD A,0X0D
  257.                 RST 0X10
  258.                 RET
  259.  
  260. ;[ПЕЧАТЬ B=КОЛИЧЕСТВО СИМВОЛОВ ИЗ HL=АДРЕС ТЕКСТА ДЛЯ ВЫВОДА]
  261. PRT_B_HL_       LD A,(HL)
  262.                 INC HL
  263.                 RST 0X10
  264.                 DJNZ PRT_B_HL_
  265.                 RET
  266.  
  267. TXT_BETA        DC " beta"
  268.  
  269. ;[ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ]
  270. A2TXT           LD L,A
  271.                 LD H,0
  272.                 LD DE,10
  273.                 XOR A
  274.                 DEC A
  275.                 INC A
  276.                 SBC HL,DE
  277.                 JR NC,$-3
  278.                 ADD HL,DE
  279.                 ADD A,"0"
  280.                 RST 0X10
  281.                 LD A,L
  282.                 ADD A,"0"
  283.                 RST 0X10
  284.                 RET
  285.  
  286. DRIVES          DC "Drives: "
  287. EDRIVES
  288.  
  289. DRIVE           RST8D _COM_DEV,_DEVFIND
  290.                 JP C,FAT_NOT_FOUND
  291.                 RST8D _COM_DEV,_KOL_VOL
  292.                 LD A,"D"
  293.                 ADD A,E
  294.                 PUSH AF
  295.                 LD HL,DRIVES
  296.                 RST 0X18
  297.                 LD A,"E"
  298.                 RST 0X10
  299.                 LD A,"-"
  300.                 RST 0X10
  301.                 POP AF
  302.                 RST 0X10
  303.                 RET
  304.  
  305. TXT_DIR         DC "<DIR> "
  306. TXT_FATERR      DC "FAT not found"
  307.  
  308. ;[КОМАНДА DIR]
  309. DIR             LD B,0
  310.                 LD A,(DE)
  311.                 INC DE
  312.                 CP "/"
  313.                 JR NZ,DIR06
  314.                 LD A,(DE)
  315.                 AND 0XDF
  316.                 CP "L"
  317.                 JR NZ,DIR06
  318.                 LD B,A
  319. DIR06           RST8D _COM_DEV,_DEVFIND
  320.                 JR NC,DIR061
  321. FAT_NOT_FOUND   CALL OPEN_CHAN_0
  322.                 LD HL,TXT_FATERR                ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  323.                 RST 0X18
  324.                 RET
  325.  
  326. DIR061          PUSH IX
  327.                 LD IXL,B
  328.                 CALL CLEAR_SCREEN
  329.                 CALL OPEN_CHAN_2
  330.                 LD A,2
  331.                 RST8D _COM_FAT,_POS_FILES
  332. DIR05           LD E,0X17
  333. DIR01           PUSH DE
  334.                 PUSH BC
  335.                 LD HL,TRD_5D25
  336.                 RST8D _COM_FAT,_READ_DIR
  337.                 LD DE,0X0B
  338.                 ADD HL,DE
  339.                 LD A,(HL)
  340.                 SBC HL,DE
  341.                 AND 0X10
  342.                 JR Z,DIR04
  343.                 PUSH HL
  344.                 LD HL,TXT_DIR
  345.                 RST 0X18
  346.                 POP HL
  347. DIR04           LD A,IXL
  348.                 AND A
  349.                 JR Z,DIR08
  350.                 PUSH HL
  351.                 RST8D _COM_FAT,_GET_LONGNAME
  352.                 POP HL
  353. DIR03           LD A,(HL)
  354.                 AND A
  355.                 JR Z,DIR02
  356.                 INC HL
  357.                 RST 0X10
  358.                 JR DIR03
  359.  
  360. DIR08           LD B,8
  361. DIR081          LD A,(HL)
  362.                 CP " "
  363.                 JR Z,DIR082
  364.                 RST 0X10
  365.                 INC HL
  366.                 DJNZ DIR081
  367. DIR082          LD A,B
  368.                 AND A
  369.                 JR Z,DIR085
  370. DIR086          LD A,(HL)
  371.                 CP " "
  372.                 JR NZ,DIR085
  373.                 INC HL
  374.                 DJNZ DIR086
  375. DIR085          LD A,(HL)
  376.                 CP " "
  377.                 JR Z,DIR084
  378.                 LD A,"."
  379.                 RST 0X10
  380. DIR084          LD B,3
  381. DIR083          LD A,(HL)
  382.                 CP " "
  383.                 JR Z,DIR02
  384.                 RST 0X10
  385.                 INC HL
  386.                 DJNZ DIR083
  387. DIR02           LD A,0X0D
  388.                 RST 0X10
  389.                 LD A,4
  390.                 LD B,1
  391.                 RST8D _COM_FAT,_POS_FILES
  392.                 POP HL
  393.                 AND A
  394.                 SBC HL,BC
  395.                 POP DE
  396.                 JR Z,DIR07
  397.                 DEC E
  398.                 JR NZ,DIR01
  399.                 JR DIR05
  400.  
  401. DIR07           POP IX
  402.                 RET
  403.  
  404. ;[КОМАНДА CD]
  405. CD              PUSH DE
  406.                 RST8D _COM_DEV,_DEVFIND
  407.                 POP HL
  408.                 RST8D _COM_FAT,_FIND_NAME
  409.                 JP C,SINTAX_ERROR
  410.                 RST8D _COM_FAT,_ENTER_DIR
  411.                 RET
  412.  
  413. NOMER_DRV       RST8D _COM_DEV,_DEVFIND
  414.                 CCF
  415.                 RET NC                          ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  416.                 RST8D _COM_DEV,_KOL_VOL
  417.                 CALL CREATE_BUF
  418.                 LD HL,TRD_5D25
  419.                 RST8D _COM_FAT,_GET_PATH
  420.                 CALL PRINT2ZERO
  421.                 CALL DEL_BUF
  422.                 SCF
  423.                 RET
  424.  
  425. ;[КОМАНДА MOUNT]
  426. MOUNT           PUSH DE
  427.                 RST8D _COM_DEV,_DEVFIND
  428.                 EX DE,HL
  429.                 POP HL
  430.                 JP C,FAT_NOT_FOUND
  431.                 PUSH HL
  432.                 RST8D _COM_FAT,_FIND_NAME
  433.                 JP C,SINTAX_ERROR
  434.                 POP DE
  435.                 LD B,0X0C
  436. MOUNT02         LD A,(DE)
  437.                 CP "!"
  438.                 JR C,MOUNT01
  439.                 INC DE
  440.                 DJNZ MOUNT02
  441. MOUNT01         LD A,(DE)
  442.                 CP 0X0D
  443.                 JP Z,SINTAX_ERROR
  444.                 CP " "
  445.                 JP NZ,SINTAX_ERROR
  446.                 INC DE
  447.                 LD A,(DE)
  448.                 CP "A"
  449.                 JP C,SINTAX_ERROR
  450.                 AND 0XDF
  451.                 CP "E"
  452.                 JP NC,SINTAX_ERROR
  453.                 SUB "A"
  454.                 LD C,A
  455.                 INC DE
  456.                 LD A,(DE)
  457.                 CP ":"
  458.                 JP NZ,SINTAX_ERROR
  459.                 LD A,C
  460.                 RST8D _MOUNTER,_OPEN_MOUNT
  461.                 RET
  462.  
  463. ;[КОМАНДА UMOUNT]
  464. UMOUNT          LD A,(DE)
  465.                 INC DE
  466.                 AND 0XDF
  467.                 LD B,A
  468.                 LD A,(DE)
  469.                 INC DE
  470.                 CP ":"
  471.                 JP NZ,SINTAX_ERROR
  472.                 LD A,B
  473.                 CP "A"
  474.                 JP C,SINTAX_ERROR
  475.                 CP "E"
  476.                 JP NC,SINTAX_ERROR
  477.                 SUB "A"
  478.                 RST8D _MOUNTER,_CLOSEMOUNT
  479.                 RET
  480.  
  481. ;[КОМАНДА ОЧИСТКИ CMOS]
  482. CLRCMOS         RST8D _CMOS_RW,_CLEAR_CMOS
  483.                 RET
  484.  
  485. ;[КОМАНДЫ ВЫВОДА НА ЭКРАН СПИСКА РАСШИРЕННЫХ КОМАНД]
  486. HELP            CALL CLEAR_SCREEN
  487.                 CALL OPEN_CHAN_2
  488.                 LD HL,EXTEND_COM
  489. HELP4           LD C,3
  490. HELP2           LD A,(HL)
  491.                 AND A
  492.                 RET Z
  493.                 INC HL
  494.                 LD B,A
  495.                 PUSH BC
  496.                 LD A,"."
  497.                 RST 0X10
  498. HELP1           LD A,(HL)
  499.                 INC HL
  500.                 RST 0X10
  501.                 DJNZ HELP1
  502.                 INC HL
  503.                 INC HL
  504.                 POP BC
  505.                 LD A,9
  506.                 SUB B
  507.                 LD B,A
  508. HELP3           LD A," "
  509.                 RST 0X10
  510.                 DJNZ HELP3
  511.                 DEC C
  512.                 JR NZ,HELP2
  513.                 LD A,0X0D
  514.                 RST 0X10
  515.                 JR HELP4
  516.  
  517.         IF EMU
  518. READ_BYTE_HL    PUSH BC
  519.                 PUSH HL
  520.                 LD A,(NUM_ALT_PAGE)
  521.                 PUSH AF
  522.                 LD A,ROM_BAS48|0X80
  523.                 LD BC,WIN_A0
  524.                 CALL WR_BYTE_RET
  525.                 LD L,(HL)
  526.                 POP AF
  527.                 CALL WR_BYTE_RET
  528.                 LD A,L
  529.                 CP 0X0D
  530.                 POP HL
  531.                 POP BC
  532.                 RET
  533.  
  534. ;[АЛЬТЕРНАТИВНОЕ КОПИРОВАНИЕ СЕКТОРА ДЛЯ РАМДИСКА]
  535. SV_LD_RAMDISK   PUSH HL
  536.                 CALL CP_TYPEDRIVE
  537.                 POP HL
  538.                 JP NZ,WR_NUM_TRACK              ;ПРИ НЕ СОВПАДЕНИИ РАБОТА ПРОДОЛЖАЕТСЯ С РЕАЛЬНОЙ ДИСКЕТОЙ
  539.                 POP HL                          ;ИНАЧЕ РАБОТАЕМ С РАМДИСКОМ
  540.                 POP HL
  541.                 POP BC
  542.                 XOR A
  543.                 OR B
  544.                 RET Z
  545.                 DI
  546.                 PUSH IX                         ;СОХРАНИЛИ ДЛЯ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ
  547.                 LD IX,(TRD_5CCE)                ;ЧТЕНИЕ ИЛИ ЗАПИСЬ? 00-ЧТЕНИЕ, FF-ЗАПИСЬ, СОХРАНИЛИ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
  548. SVLDRAM1        PUSH BC
  549.                 PUSH HL
  550.                 LD DE,(TRD_5CF4)
  551.                 CALL COM_04
  552.                 LD A,E
  553.                 CALL COM_03
  554.                 INC A
  555.                 RST30 _OUT_5F
  556.                 LD A,D
  557.                 PUSH HL
  558.                 CALL COM_02
  559.                 POP HL
  560.                 RST30 _WR_RD_SECT               ;ЧТЕНИЕ/ЗАПИСЬ СЕКТОРА
  561.                 LD A,0X10
  562.                 LD HL,TRD_5CF4
  563.                 INC (HL)                        ;УВЕЛИЧЕНИЕ НОМЕРА СЕКТОРА
  564.                 CP (HL)
  565.                 JR NZ,SVLDRAM2
  566.                 LD (HL),0                       ;ЕСЛИ ВЫХОД ЗА ПРЕДЕЛЫ ТРЕКА, ТО СЕКТОР =0
  567.                 INC HL
  568.                 INC (HL)                        ;И УВЕЛИЧИВАЕМ НОМЕР ТРЕКА
  569. SVLDRAM2        POP HL
  570.                 POP BC
  571.                 INC H                           ;УВЕЛИЧИЛИ АДРЕС КОПИРОВАНИЯ НА 256 БАЙТ
  572.                 DJNZ SVLDRAM1
  573.                 POP IX                          ;ПОПОЛЬЗОВАЛИСЬ И ВОССТАНОВИЛИ
  574.                 EI
  575.                 RET
  576.  
  577. ;[ЧТЕНИЕ/ЗАПИСЬ СЕКТОРА ПРИМОНТИРОВАННОГО ОБРАЗА]
  578. WR_RD_SEC_M     PUSH IX
  579.                 LD (TEMP_SP),SP
  580.                 LD HL,(DOS_STEK)
  581.                 LD DE,SAVED_RAM
  582.                 LD BC,0X10
  583.                 LDIR
  584.                 LD SP,HL
  585.                 LD A,(PORT_3F)                  ;ВЗЯЛИ НОМЕР ТРЕКА
  586.                 ADD A,A                         ;СТОРОН 2
  587.                 LD D,A
  588.                 LD A,(WR_FF)
  589.                 AND 0X10                        ;ПРОВЕРКА КАКАЯ СТОРОНА ДИСКА
  590.                 JR NZ,WRRDSECM1
  591.                 INC D                           ;ДЛЯ СТОРОНЫ 1
  592. WRRDSECM1       LD A,(PORT_5F)                  ;ВЗЯЛИ НОМЕР СЕКТОРА
  593.                 LD E,A                          ;D-ТРЕК, E-СЕКТОР
  594.                 LD HL,(REG_L)                   ;HL=АДРЕС ЧТЕНИЯ/ЗАПИСИ
  595.                 LD A,(WR_FF)
  596.                 AND 3
  597.                 LD C,A                          ;НОМЕР ДИСКОВОДА
  598.                 LD A,IXL
  599.                 AND A                           ;BIT 7=0-ЧТЕНИЕ
  600.                 JR Z,WRRDSECM2
  601.                 LD A,0X80                       ;BIT 7=1-ЗАПИСЬ
  602. WRRDSECM2       OR C
  603.                 LD IXL,A                        ;A=НОМЕР ДИСКОВОДА+БИТ ЧТЕНИЯ/ЗАПИСИ
  604.                 LD A,(TEK_ROMPAGE)
  605.                 AND 0X3E
  606.                 LD IXH,A
  607.                 LD BC,WIN_A0
  608.                 OUT (C),A
  609.                 LD A,IXL
  610.                 RST8D _MOUNTER,_RDWR_MOUNT
  611.                 LD BC,WIN_A0
  612.                 LD A,IXH
  613.                 OUT (C),A
  614.                 LD B,HIGH (WIN_P0)
  615.                 LD A,RAM_EVODOS
  616.                 OUT (C),A
  617.                 LD (REG_L),HL                   ;ОБНОВИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
  618.                 LD HL,SAVED_RAM
  619.                 LD DE,(DOS_STEK)
  620.                 LD BC,0X10
  621.                 LDIR
  622.                 LD SP,(TEMP_SP)
  623.                 POP IX
  624.                 RET
  625.         ENDIF
  626.  
  627. ;[ЧТЕНИЕ CMOS]
  628. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  629. ;          L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ
  630. READCMOS        PUSH BC
  631.                 LD BC,CMOSD_SET_ADR
  632.                 OUT (C),H
  633.                 LD B,HIGH (CMOSD_RD_WR)
  634.                 IN L,(C)
  635.                 POP BC
  636.                 LD A,L
  637.                 AND A
  638.                 RET
  639.  
  640. ;[ЗАПИСЬ CMOS]
  641. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  642. ;          L-ЧТО ТУДА ЗАПИСАТЬ
  643. WRITECMOS       RST8D _CMOS_RW,_WRITE_CMOS
  644.                 RET
  645.