; LAST UPDATE: 13.02.2025 savelij
 
 
 
                TITLE "extend.a80"
 
 
 
;[ИНФА ДЛЯ СОЗДАНИЯ 9 СЕКТОРА НОВОГО ДИСКА]
 
DSKINFO         DB 0                    ;+0XE1-НОМЕР ПЕРВОГО СВОБОДНОГО СЕКТОРА
 
                DB 1                    ;+0XE2-НОМЕР ПЕРВОГО СВОБОДНОГО ТРЕКА
 
                DB 0X16                 ;+0XE3-ТИП ДИСКЕТЫ
 
                DB 0                    ;+0XE4-КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕТЕ
 
SECFREE         DW 2544                 ;+0XE5-КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
 
                DB 0X10                 ;+0XE7-ИДЕНТИФИКАЦИОННЫЙ КОД TRDOS
 
                DW 0                    ;+0XE8-2 БАЙТА 0
 
                DB 9 DUP ' '            ;+0XEA-9 БАЙТ 0X20
 
                DB 0                    ;+0XF3-1 БАЙТ 0
 
                DB 0                    ;+0XF4-КОЛИЧЕСТВО УДАЛЕННЫХ ФАЙЛОВ
 
                DB "RAMDISKO"           ;+0XF5-ИМЯ ДИСКЕТЫ
 
DSK_END
 
 
 
;[ОБРАБОТЧИК ВЫЗОВА RST 8]
 
DOS2RST8        EX (SP),HL                      ;HL
 
                PUSH AF                         ;AF
 
                PUSH BC                         ;BC
 
                LD A,R
 
                JP PE,DOS2RST8_01
 
                LD A,R
 
DOS2RST8_01     DI
 
                PUSH AF                         ;RF
 
                PUSH HL                         ;ADR_RET
 
                PUSH DE                         ;DE
 
                IN A,(PEVO_CONF)
 
                LD L,A
 
                OR 1
 
                OUT (PEVO_CONF),A
 
                LD BC,RD_1WINA0
 
                IN A,(C)
 
                AND 0X3E
 
                LD BC,RD_1WINA0
 
                IN H,(C)
 
                RES 0,H
 
                LD B,HIGH (RD_DOS7FFD)
 
                IN E,(C)
 
                RES 4,E
 
                DEC B
 
                IN D,(C)
 
                LD BC,WIN_A0
 
                OUT (C),A
 
                LD B,HIGH (WIN_P0)
 
                XOR A
 
                JP ADR_SEL_ROM
 
 
 
EDOS2RST8       LD BC,DOS_NOEMUL
 
                LD A,(BC)
 
                AND 0X3E
 
                CP E
 
                JR Z,EDOS2RST02
 
                INC BC
 
EDOS2RST02      LD A,(BC)
 
                LD BC,WIN_A0
 
                CALL WR_BYTE_RET
 
                LD A,L
 
                OUT (PEVO_CONF),A
 
                POP DE
 
                POP HL
 
                POP AF
 
                JP PO,EDOS2RST01
 
                EI
 
EDOS2RST01      POP BC
 
                POP AF
 
                EX (SP),HL
 
                RET
 
 
 
;ABCDEFGHIJKLMNOPQRSTUVWXYZ
 
EXTEND_COM      
 
                BBW "CD",CD
 
                BBW "CLRCMOS",CLRCMOS
 
                BBW "DIR",DIR
 
                BBW "DRIVE",DRIVE
 
                BBW "HELP",HELP
 
                BBW "MOUNT",MOUNT
 
                BBW "UMOUNT",UMOUNT
 
                BBW "VER",PRT_VERS
 
                BBW "VIRT",SET_VIRT
 
                BBW "ROM",VIEW_ROM
 
                DB 0
 
 
 
VIEW_ROM        LD HL,ROM_VER
 
                JP PRT_ROMVER
 
 
 
;[ОБРАБОТЧИК РАСШИРЕННЫХ КОМАНД]
 
END_EXT_COM     INC DE
 
                LD A,(DE)
 
                CP ":"
 
                DEC DE
 
                JP NZ,SINTAX_ERROR
 
                LD A,(DE)
 
                AND 0DFH
 
                SUB "A"
 
                JP C,SINTAX_ERROR
 
                CP 4
 
                JR NC,SELFATDRV
 
                LD (TRD_5CF6),A                 ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
 
                LD (TRD_5D19),A                 ; ДИСКОВОД ПО УМОЛЧАНИЮ
 
                LD B,A
 
                LD A,(TRD_5D16)                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                AND 7CH
 
                OR B
 
                LD (TRD_5D16),A                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                LD HL,ERR_OK
 
                PUSH HL
 
SET_CURRVIRT    LD H,CMOS.VIRT_REAL_DRIVE
 
                CALL READCMOS
 
                AND %00000011
 
                LD L,A
 
                LD A,B
 
                RLCA
 
                RLCA
 
                OR L
 
                LD L,A
 
                RST8D _CMOS_RW,_WRITE_CMOS
 
;               RST8D _MOUNTER,_GET_VIRT_BITS
 
;               RST30 _SET_VIRT_BITS
 
                RRCA
 
                RRCA
 
                AND 3
 
                OR 0X3C
 
                RST30 _OUT_FF
 
                RET
 
 
 
SELFATDRV       SUB 4
 
                PUSH AF
 
                RST8D _COM_DEV,_DEVFIND
 
                RST8D _COM_DEV,_KOL_VOL
 
                POP AF
 
                CP E
 
                JP NC,SINTAX_ERROR
 
                RST8D _COM_DEV,_SET_VOL
 
                JP ERR_OK
 
 
 
COM_DOT         CALL EXIT_IF_SINTAX
 
                LD HL,EXTEND_COM
 
NEXT_CMP_COM    LD A,1
 
                LD (TRD_5CEF),A
 
                LD DE,(TRD_5D11)
 
                INC DE
 
                LD A,(HL)
 
                INC HL
 
                AND A
 
                JP Z,END_EXT_COM
 
                LD B,A
 
LOC_C34         LD A,(DE)
 
                AND 0DFH
 
                CP (HL)
 
                JR NZ,PROPUSK
 
                INC DE
 
                INC HL
 
                DJNZ LOC_C34
 
                LD A,(DE)
 
                CP 0DH
 
                JR Z,NO_PARAM
 
                CP " "
 
                JR Z,GET_PARAM
 
                JR LOC_C58
 
 
 
PROPUSK         INC HL
 
                DJNZ PROPUSK
 
LOC_C58         INC HL
 
                INC HL
 
                JR NEXT_CMP_COM
 
 
 
GET_PARAM       INC DE
 
NO_PARAM        LD A,(HL)
 
                INC HL
 
                LD H,(HL)
 
                LD L,A
 
                PUSH HL
 
                LD HL,END_COMAND
 
                EX (SP),HL
 
                JP (HL)
 
 
 
;[ВЫВОД ИМЕНИ ВИРТУАЛЬНОГО ДИСКА ЕСЛИ НЕ УКАЗАНО ИМЯ ДЛЯ ИЗМЕНЕНИЯ]
 
PRT_NUM_VIRT    LD HL,TXT4VIRTDRV
 
                LD B,ETXT4VIRTDRV-TXT4VIRTDRV-1
 
                CALL PRT_B_HL_
 
                LD A," "
 
                RST 0X10
 
                LD H,CMOS.VIRT_REAL_DRIVE
 
                CALL READCMOS
 
                AND 3
 
                ADD A,"A"
 
                RST 0X10
 
                LD A,0X0D
 
                RST 0X10
 
                RET
 
 
 
;[УСТАНОВКА ВИРТУАЛЬНОГО ДИСКА]
 
SET_VIRT        LD A,(DE)
 
                CP 0X0D
 
                JR Z,PRT_NUM_VIRT
 
                LD C,A
 
                INC DE
 
                LD A,(DE)
 
                CP ":"
 
                JP NZ,SINTAX_ERROR
 
                LD A,C
 
                CALL NUMDSK2BYTE                ;ПОЛУЧИЛИ НОВЫЙ НОМЕР ДИСКОВОДА УКАЗАННЫЙ В КОМАНДНОЙ СТРОКЕ
 
                LD D,A                          ;СОХРАНИЛИ ВРЕМЕННО СДВИНУТЫЙ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
 
                LD H,CMOS.VIRT_REAL_DRIVE
 
                CALL READCMOS
 
                AND %11111100                   ;СБРОС СТАРОГО НОМЕРА ВИРТУАЛЬНОГО ДИСКОВОДА
 
                OR D                            ;ДОБАВИЛИ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
 
                LD L,A
 
                RST8D _CMOS_RW,_WRITE_CMOS
 
;               AND 3
 
;               RST8D _MOUNTER,_MOUNT_RAMDISK
 
                RET
 
 
 
;[ПЕЧАТЬ ВЕРСИИ ДОСА И ДАТЫ КОМПИЛЯЦИИ]
 
PRT_VERS        LD HL,0X3FF8
 
                LD B,6
 
                CALL PRT_B_HL_
 
                LD A," "
 
                RST 0X10
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
                PUSH BC
 
                LD HL,ZASTAVKA_VER
 
                LD B,9
 
                CALL PRT_B_HL_
 
                LD A," "
 
                RST 0X10
 
                POP BC
 
                LD A,C
 
                AND 0X1F                        ;НУЖНЫ 5 БИТ-ЧИСЛО МЕСЯЦА
 
                CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ДАТЫ
 
                SRL B
 
                RR C                            ;СДВИНУЛИ ДЛЯ ЦЕЛОСТНОСТИ НОМЕРА МЕСЯЦА
 
                LD A,"."
 
                RST 0X10
 
                LD A,C                          ;ВЗЯЛИ БИТЫ МЕСЯЦА
 
                RRCA
 
                RRCA
 
                RRCA
 
                RRCA                            ;СДВИНУЛИ В МЛАДШИЕ БИТЫ
 
                AND 0X0F                        ;НАМ НУЖНЫ ТОЛЬКО 4 БИТА МЕСЯЦА
 
                CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА МЕСЯЦА
 
                LD A,"."
 
                RST 0X10
 
                LD A,B                          ;ВЗЯЛИ НОМЕР ГОДА
 
                AND 0X3F                        ;НУЖНЫ ТОЛЬКО 6 БИТ
 
                CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ГОДА
 
                BIT 6,B                         ;ЕСЛИ БИТ 6 (СДВИНУТЫЙ БИТ 7) УСТАНОВЛЕН
 
                RET Z
 
                LD HL,TXT_BETA
 
PRT_ROMVER      RST 0X18
 
                LD A,0X0D
 
                RST 0X10
 
                RET
 
 
 
;[ПЕЧАТЬ B=КОЛИЧЕСТВО СИМВОЛОВ ИЗ HL=АДРЕС ТЕКСТА ДЛЯ ВЫВОДА]
 
PRT_B_HL_       LD A,(HL)
 
                INC HL
 
                RST 0X10
 
                DJNZ PRT_B_HL_
 
                RET
 
 
 
TXT_BETA        DC " beta"
 
 
 
;[ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ]
 
A2TXT           LD L,A
 
                LD H,0
 
                LD DE,10
 
                XOR A
 
                DEC A
 
                INC A
 
                SBC HL,DE
 
                JR NC,$-3
 
                ADD HL,DE
 
                ADD A,"0"
 
                RST 0X10
 
                LD A,L
 
                ADD A,"0"
 
                RST 0X10
 
                RET
 
 
 
DRIVES          DC "Drives: "
 
EDRIVES
 
 
 
DRIVE           RST8D _COM_DEV,_DEVFIND
 
                JP C,FAT_NOT_FOUND
 
                RST8D _COM_DEV,_KOL_VOL
 
                LD A,"D"
 
                ADD A,E
 
                PUSH AF
 
                LD HL,DRIVES
 
                RST 0X18
 
                LD A,"E"
 
                RST 0X10
 
                LD A,"-"
 
                RST 0X10
 
                POP AF
 
                RST 0X10
 
                RET
 
 
 
TXT_DIR         DC "<DIR> "
 
TXT_FATERR      DC "FAT not found"
 
 
 
;[КОМАНДА DIR]
 
DIR             LD B,0
 
                LD A,(DE)
 
                INC DE
 
                CP "/"
 
                JR NZ,DIR06
 
                LD A,(DE)
 
                AND 0XDF
 
                CP "L"
 
                JR NZ,DIR06
 
                LD B,A
 
DIR06           RST8D _COM_DEV,_DEVFIND
 
                JR NC,DIR061
 
FAT_NOT_FOUND   CALL OPEN_CHAN_0
 
                LD HL,TXT_FATERR                ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
 
                RST 0X18
 
                RET
 
 
 
DIR061          PUSH IX
 
                LD IXL,B
 
                CALL CLEAR_SCREEN
 
                CALL OPEN_CHAN_2
 
                LD A,2
 
                RST8D _COM_FAT,_POS_FILES
 
DIR05           LD E,0X17
 
DIR01           PUSH DE
 
                PUSH BC
 
                LD HL,TRD_5D25
 
                RST8D _COM_FAT,_READ_DIR
 
                LD DE,0X0B
 
                ADD HL,DE
 
                LD A,(HL)
 
                SBC HL,DE
 
                AND 0X10
 
                JR Z,DIR04
 
                PUSH HL
 
                LD HL,TXT_DIR
 
                RST 0X18
 
                POP HL
 
DIR04           LD A,IXL
 
                AND A
 
                JR Z,DIR08
 
                PUSH HL
 
                RST8D _COM_FAT,_GET_LONGNAME
 
                POP HL
 
DIR03           LD A,(HL)
 
                AND A
 
                JR Z,DIR02
 
                INC HL
 
                RST 0X10
 
                JR DIR03
 
 
 
DIR08           LD B,8
 
DIR081          LD A,(HL)
 
                CP " "
 
                JR Z,DIR082
 
                RST 0X10
 
                INC HL
 
                DJNZ DIR081
 
DIR082          LD A,B
 
                AND A
 
                JR Z,DIR085
 
DIR086          LD A,(HL)
 
                CP " "
 
                JR NZ,DIR085
 
                INC HL
 
                DJNZ DIR086
 
DIR085          LD A,(HL)
 
                CP " "
 
                JR Z,DIR084
 
                LD A,"."
 
                RST 0X10
 
DIR084          LD B,3
 
DIR083          LD A,(HL)
 
                CP " "
 
                JR Z,DIR02
 
                RST 0X10
 
                INC HL
 
                DJNZ DIR083
 
DIR02           LD A,0X0D
 
                RST 0X10
 
                LD A,4
 
                LD B,1
 
                RST8D _COM_FAT,_POS_FILES
 
                POP HL
 
                AND A
 
                SBC HL,BC
 
                POP DE
 
                JR Z,DIR07
 
                DEC E
 
                JR NZ,DIR01
 
                JR DIR05
 
 
 
DIR07           POP IX
 
                RET
 
 
 
;[КОМАНДА CD]
 
CD              PUSH DE
 
                RST8D _COM_DEV,_DEVFIND
 
                POP HL
 
                RST8D _COM_FAT,_FIND_NAME
 
                JP C,SINTAX_ERROR
 
                RST8D _COM_FAT,_ENTER_DIR
 
                RET
 
 
 
NOMER_DRV       RST8D _COM_DEV,_DEVFIND
 
                CCF
 
                RET NC                          ;НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
 
                RST8D _COM_DEV,_KOL_VOL
 
                CALL CREATE_BUF
 
                LD HL,TRD_5D25
 
                RST8D _COM_FAT,_GET_PATH
 
                CALL PRINT2ZERO
 
                CALL DEL_BUF
 
                SCF
 
                RET
 
 
 
;[КОМАНДА MOUNT]
 
MOUNT           PUSH DE
 
                RST8D _COM_DEV,_DEVFIND
 
                EX DE,HL
 
                POP HL
 
                JP C,FAT_NOT_FOUND
 
                PUSH HL
 
                RST8D _COM_FAT,_FIND_NAME
 
                JP C,SINTAX_ERROR
 
                POP DE
 
                LD B,0X0C
 
MOUNT02         LD A,(DE)
 
                CP "!"
 
                JR C,MOUNT01
 
                INC DE
 
                DJNZ MOUNT02
 
MOUNT01         LD A,(DE)
 
                CP 0X0D
 
                JP Z,SINTAX_ERROR
 
                CP " "
 
                JP NZ,SINTAX_ERROR
 
                INC DE
 
                LD A,(DE)
 
                CP "A"
 
                JP C,SINTAX_ERROR
 
                AND 0XDF
 
                CP "E"
 
                JP NC,SINTAX_ERROR
 
                SUB "A"
 
                LD C,A
 
                INC DE
 
                LD A,(DE)
 
                CP ":"
 
                JP NZ,SINTAX_ERROR
 
                LD A,C
 
                RST8D _MOUNTER,_OPEN_MOUNT
 
                RET
 
 
 
;[КОМАНДА UMOUNT]
 
UMOUNT          LD A,(DE)
 
                INC DE
 
                AND 0XDF
 
                LD B,A
 
                LD A,(DE)
 
                INC DE
 
                CP ":"
 
                JP NZ,SINTAX_ERROR
 
                LD A,B
 
                CP "A"
 
                JP C,SINTAX_ERROR
 
                CP "E"
 
                JP NC,SINTAX_ERROR
 
                SUB "A"
 
                RST8D _MOUNTER,_CLOSEMOUNT
 
                RET
 
 
 
;[КОМАНДА ОЧИСТКИ CMOS]
 
CLRCMOS         RST8D _CMOS_RW,_CLEAR_CMOS
 
                RET
 
 
 
;[КОМАНДЫ ВЫВОДА НА ЭКРАН СПИСКА РАСШИРЕННЫХ КОМАНД]
 
HELP            CALL CLEAR_SCREEN
 
                CALL OPEN_CHAN_2
 
                LD HL,EXTEND_COM
 
HELP4           LD C,3
 
HELP2           LD A,(HL)
 
                AND A
 
                RET Z
 
                INC HL
 
                LD B,A
 
                PUSH BC
 
                LD A,"."
 
                RST 0X10
 
HELP1           LD A,(HL)
 
                INC HL
 
                RST 0X10
 
                DJNZ HELP1
 
                INC HL
 
                INC HL
 
                POP BC
 
                LD A,9
 
                SUB B
 
                LD B,A
 
HELP3           LD A," "
 
                RST 0X10
 
                DJNZ HELP3
 
                DEC C
 
                JR NZ,HELP2
 
                LD A,0X0D
 
                RST 0X10
 
                JR HELP4
 
 
 
        IF EMU
 
READ_BYTE_HL    PUSH BC
 
                PUSH HL
 
                LD A,(NUM_ALT_PAGE)
 
                PUSH AF
 
                LD A,ROM_BAS48|0X80
 
                LD BC,WIN_A0
 
                CALL WR_BYTE_RET
 
                LD L,(HL)
 
                POP AF
 
                CALL WR_BYTE_RET
 
                LD A,L
 
                CP 0X0D
 
                POP HL
 
                POP BC
 
                RET
 
 
 
;[АЛЬТЕРНАТИВНОЕ КОПИРОВАНИЕ СЕКТОРА ДЛЯ РАМДИСКА]
 
SV_LD_RAMDISK   PUSH HL
 
                CALL CP_TYPEDRIVE
 
                POP HL
 
                JP NZ,WR_NUM_TRACK              ;ПРИ НЕ СОВПАДЕНИИ РАБОТА ПРОДОЛЖАЕТСЯ С РЕАЛЬНОЙ ДИСКЕТОЙ
 
                POP HL                          ;ИНАЧЕ РАБОТАЕМ С РАМДИСКОМ
 
                POP HL
 
                POP BC
 
                XOR A
 
                OR B
 
                RET Z
 
                DI
 
                PUSH IX                         ;СОХРАНИЛИ ДЛЯ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ
 
                LD IX,(TRD_5CCE)                ;ЧТЕНИЕ ИЛИ ЗАПИСЬ? 00-ЧТЕНИЕ, FF-ЗАПИСЬ, СОХРАНИЛИ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
 
SVLDRAM1        PUSH BC
 
                PUSH HL
 
                LD DE,(TRD_5CF4)
 
                CALL COM_04
 
                LD A,E
 
                CALL COM_03
 
                INC A
 
                RST30 _OUT_5F
 
                LD A,D
 
                PUSH HL
 
                CALL COM_02
 
                POP HL
 
                RST30 _WR_RD_SECT               ;ЧТЕНИЕ/ЗАПИСЬ СЕКТОРА
 
                LD A,0X10
 
                LD HL,TRD_5CF4
 
                INC (HL)                        ;УВЕЛИЧЕНИЕ НОМЕРА СЕКТОРА
 
                CP (HL)
 
                JR NZ,SVLDRAM2
 
                LD (HL),0                       ;ЕСЛИ ВЫХОД ЗА ПРЕДЕЛЫ ТРЕКА, ТО СЕКТОР =0
 
                INC HL
 
                INC (HL)                        ;И УВЕЛИЧИВАЕМ НОМЕР ТРЕКА
 
SVLDRAM2        POP HL
 
                POP BC
 
                INC H                           ;УВЕЛИЧИЛИ АДРЕС КОПИРОВАНИЯ НА 256 БАЙТ
 
                DJNZ SVLDRAM1
 
                POP IX                          ;ПОПОЛЬЗОВАЛИСЬ И ВОССТАНОВИЛИ
 
                EI
 
                RET
 
 
 
;[ЧТЕНИЕ/ЗАПИСЬ СЕКТОРА ПРИМОНТИРОВАННОГО ОБРАЗА]
 
WR_RD_SEC_M     PUSH IX
 
                LD (TEMP_SP),SP
 
                LD HL,(DOS_STEK)
 
                LD DE,SAVED_RAM
 
                LD BC,0X10
 
                LDIR
 
                LD SP,HL
 
                LD A,(PORT_3F)                  ;ВЗЯЛИ НОМЕР ТРЕКА
 
                ADD A,A                         ;СТОРОН 2
 
                LD D,A
 
                LD A,(WR_FF)
 
                AND 0X10                        ;ПРОВЕРКА КАКАЯ СТОРОНА ДИСКА
 
                JR NZ,WRRDSECM1
 
                INC D                           ;ДЛЯ СТОРОНЫ 1
 
WRRDSECM1       LD A,(PORT_5F)                  ;ВЗЯЛИ НОМЕР СЕКТОРА
 
                LD E,A                          ;D-ТРЕК, E-СЕКТОР
 
                LD HL,(REG_L)                   ;HL=АДРЕС ЧТЕНИЯ/ЗАПИСИ
 
                LD A,(WR_FF)
 
                AND 3
 
                LD C,A                          ;НОМЕР ДИСКОВОДА
 
                LD A,IXL
 
                AND A                           ;BIT 7=0-ЧТЕНИЕ
 
                JR Z,WRRDSECM2
 
                LD A,0X80                       ;BIT 7=1-ЗАПИСЬ
 
WRRDSECM2       OR C
 
                LD IXL,A                        ;A=НОМЕР ДИСКОВОДА+БИТ ЧТЕНИЯ/ЗАПИСИ
 
                LD A,(TEK_ROMPAGE)
 
                AND 0X3E
 
                LD IXH,A
 
                LD BC,WIN_A0
 
                OUT (C),A
 
                LD A,IXL
 
                RST8D _MOUNTER,_RDWR_MOUNT
 
                LD BC,WIN_A0
 
                LD A,IXH
 
                OUT (C),A
 
                LD B,HIGH (WIN_P0)
 
                LD A,RAM_EVODOS
 
                OUT (C),A
 
                LD (REG_L),HL                   ;ОБНОВИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
 
                LD HL,SAVED_RAM
 
                LD DE,(DOS_STEK)
 
                LD BC,0X10
 
                LDIR
 
                LD SP,(TEMP_SP)
 
                POP IX
 
                RET
 
        ENDIF
 
 
 
;[ЧТЕНИЕ CMOS]
 
;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
 
;          L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ
 
READCMOS        PUSH BC
 
                LD BC,CMOSD_SET_ADR
 
                OUT (C),H
 
                LD B,HIGH (CMOSD_RD_WR)
 
                IN L,(C)
 
                POP BC
 
                LD A,L
 
                AND A
 
                RET
 
 
 
;[ЗАПИСЬ CMOS]
 
;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
 
;          L-ЧТО ТУДА ЗАПИСАТЬ
 
WRITECMOS       RST8D _CMOS_RW,_WRITE_CMOS
 
                RET