From 0188b1dfce88a905beffdd49026d32656829a30e Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 4 Jul 2025 23:23:48 +1000 Subject: [PATCH] =?UTF-8?q?LP=5FPR=5FLINE=5FDIR=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B0=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D0=B8=20TRAY=5FFN=20-=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3=20?= =?UTF-8?q?=D1=81=20=D0=B8=D0=B7=D0=B2=D0=BB=D0=B5=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 301 +----------------------- src/bios/exp/FUNC_5x.asm | 3 +- src/bios/exp/FUNC_LOW_PRINT.ASM | 11 +- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes src/doc/changes.txt | 83 ++++--- 5 files changed, 61 insertions(+), 337 deletions(-) diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index 53a606c..c24c2a5 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -343,64 +343,8 @@ ATAPI_5x_LONG_WRITE: SCF ;write EX AF,AF' JR ATAPI_BEGIN_RW - ; - ; SAFE_PORTY_2 - ; PUSH BC - ; PUSH IX - ; PUSH HL - ; ; - ; CALL RW_ATAPI_SECTORs - ; ; - ; JP ATA_5x_LONG_READ.shared +;[]================================================================[#53] -;[]================================================================[#57] -;Function: Detect Disk -; A - Disk -;Return: CF=0 - A=Drive type -; B=MediaParameters byte ; [ ] media change -; CF=1 - drive not present, A=#02 -; ATAPI_5x_DETECT: LD C,IDE.Device.ATAPI -; AND %1011'1111 -; .shared: LD D,A -; LD E,C -; PUSH DE -; CALL DRV_DETECT -; POP DE -; RET C -; ; -; PUSH AF -; LD C,SLOT3 -; IN B,(C) -; LD A,SYS_PAGE -; OUT (C),A -; INC HL ;!HARDCODE HDD_INIT_TABLE -; INC HL -; INC HL -; LD A,(HL) -; OUT (C),B -; LD B,A -; AND %0000'0011 ;[ ] media change переделать логику тут и в ДСС? ; !FIXIT -; JR NZ,.error -; ; -; .exit: POP AF -; RET -; ; -; .error: AND %0000'0010 -; JR NZ,.UnitAttention -; ; -; LD A,D -; LD C,E -; CALL SELECT_DRIVE -; CALL ATAPI_CHECK_MEDIA_CHANGED -; JR NC,.exit -; POP BC -; RET -; ; -; .UnitAttention: POP AF -; LD A,BIOS.Error.ATAPI.UnitAttention -; SCF -; RET -;[]================================================================[#57] ;[]================================================================[#57] ;Function: Detect Disk ; A - Disk @@ -469,20 +413,6 @@ ATAPI_CHECK_MEDIA_CHANGED: ;----------------------------------------------------------------------; -;----------------------------------------------------------------------; -; ATAPI_CHECK_ERROR: -; CALL ATAPI_GET_ERROR_REG -; ;CP BIOS.Error.ATAPI.NoSence -; ;JP Z,ATAPI_MEDIA_ERROR -; CP BIOS.Error.ATAPI.NotReady -; JP Z,ATAPI_MEDIA_ERROR -; CP BIOS.Error.ATAPI.UnitAttention -; JP Z,ATAPI_MEDIA_ERROR -; ; -; SCF -; RET -;----------------------------------------------------------------------; - ;----------------------------------------------------------------------; ; HL - указатель на пакетную команду (первый или второй слот) @@ -501,15 +431,15 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE DEC A JR Z,EXEC_PACKET_COMMAND.start LD HL,ATAPI_CMD_PACKET.OPEN - ;JR EXEC_PACKET_COMMAND + JR EXEC_PACKET_COMMAND.start ; INPUT: HL - AP packet (12bytes) ; DE - address for/with data if needed ; A' - начальная страница для R/W Long ; ; RETURN: CF - ERROR -; ;!FIXIT номера неправильные -; !TODO CD ERRORS to INCLUDES +; !FIXIT номера неправильные +; !TODO CD ERRORS to INCLUDES ; #01 - RECOVERED ERROR ; #02 - NOT READY ; #03 - MEDIUM ERROR @@ -520,10 +450,6 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE ; #0B - ABORTED COMMAND ; #80 - TIME OUT EXEC_PACKET_COMMAND: -; .error_APLOOP: LD A,BIOS.Error.ATAPI.UnitAttention -; RET - ;CALL ATAPI_GET_ERROR_REG - .error_ex: EX DE,HL .error: CP #FF .error_fail: SCF @@ -685,7 +611,6 @@ EXEC_PACKET_COMMAND: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ATAPI_IdlePasses: - ;CALL ATAPI_WAITPRT.wait_NZ LD B,_ZIP_WAITS_ DJNZ $ CALL ATAPI_CHECK_DRV @@ -757,18 +682,6 @@ ATAPI_CHECK_DRV: SCF RET ; -; .zeroWait: ;LD B,2 -; LD HL,#800 -; .loop: LD A,high IDE.Read.Status -; IN A,(low IDE.Read.Status) -; AND A -; RET NZ -; DEC HL -; LD A,H -; OR L -; JR NZ,.loop -; ;DJNZ .loop -; RET ATAPI_PREPARE_RW: LD BC,IDE.Read.ByteCountLow @@ -790,30 +703,6 @@ ATAPI_PREPARE_RW: LD BC,IDE.Read.Data SCF RET - - -; .AddrOverflow: EX DE,HL -; AND A -; SBC HL,DE -; EX DE,HL -; RET - -; -; !TODO холостое чтение -; .error_buffer: AND A -; SBC HL,DE -;.NULL: -;.RD_N_CD: IN A,(C) -; DEC B -; IN A,(C) -; DEC B -; DEC DE -; DEC DE -; LD A,D -; OR E -; JR NZ,.RD_N_CD -; ; DE = 0 -; JR .AP_LOOP ;----------------------------------------------------------------------; @@ -855,145 +744,14 @@ ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0 LD A,H OR L JR NZ,.LOOP - ; - ; LD A,high IDE.Read.Status - ; IN A,(low IDE.Read.Status) - ; CP #FF - ; SCF - ; RET Z - ; - ; 1 392 512 256 DJNZ .LOOP ; - ; LD A,high IDE.Read.Status - ; IN A,(low IDE.Read.Status) - ; INC A ;CP #FF - ; SCF - ; RET Z - ; LD A,BIOS.Error.Busy SCF RET - ; -; .wait_NZ: LD B,2 ; 50 - задержка определённая тестами на IOMEGA ZIP Drive -; .NZ_loop: LD A,high IDE.Read.Status -; IN A,(low IDE.Read.Status) -; LD C,A -; AND A -; CALL NZ,PutHexNumb -; ;INC A -; ;RET NZ -; ;AND IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.CheckCondition -; ;INC A -; ;AND A -; ;RET NZ -; DJNZ .NZ_loop -; RET ;----------------------------------------------------------------------; -;----------------------------------------------------------------------; -;Процедура преобразования 8битовых чисел в шестнадц. текст -;На вход: -; HL - адрес буфера -; А - байт -;На выход: -; DE - два байта шестнадцатеричного текста -; PutHexNumb: PUSH IX -; PUSH IY -; PUSH AF -; EX AF,AF' -; PUSH AF -; EX AF,AF' -; PUSH DE -; PUSH HL -; PUSH BC -; LD A,C -; EXX -; PUSH DE -; PUSH HL -; PUSH BC -; ; -; PUSH AF -; RRCA -; RRCA -; RRCA -; RRCA -; AND #0F -; ADD A,#90 -; DAA -; ADC A,#40 -; DAA -; LD E,A -; POP AF -; AND #0F -; ADD A,#90 -; DAA -; ADC A,#40 -; DAA -; LD D,A -; ; -; LD HL," " -; PUSH HL -; PUSH DE -; LD L,0 -; ADD HL,SP -; ; -; SCF -; LD B,COLORS.CGA.INK.LGRAY + COLORS.CGA.PAPER.BLACK -; EX AF,AF' -; AND A -; LD A,B -; CALL LP_PR_LINE_DIR.START -; POP HL -; POP HL -; ; -; POP BC -; POP HL -; POP DE -; EXX -; POP BC -; POP HL -; POP DE -; POP AF -; EX AF,AF' -; POP AF -; POP IY -; POP IX -; RET - ; -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -; D - MASK, E - PATTERN -; !!! некоторые функции надеются, что на выходе всегда ZF -; не должна трогать рег. C -; ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0 -; .Custom: -; .LOOP: LD A,high IDE.Read.Status -; IN A,(low IDE.Read.Status) -; CP #FF -; JR Z,.error -; ; -; AND D -; CP E -; RET Z -; JR .LOOP -; ; -; ; LD A,high IDE.Read.Status -; ; IN A,(low IDE.Read.Status) -; ; INC A ;CP #FF -; ; SCF -; ; RET Z -; ; ; -; ; LD A,BIOS.Error.Busy -; ; RET -; ; -; .error: SCF -; RET -;----------------------------------------------------------------------; - ;----------------------------------------------------------------------; ; DE - buffer ATAPI_READ_CAPACITY_DATA: @@ -1036,13 +794,6 @@ ATAPI_READ_CAPACITY_DATA: ;----------------------------------------------------------------------; -;----------------------------------------------------------------------; -; ATAPI_TEST: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY -; LD DE,0 ; маркер того, что не нужно читать с устройства в ОЗУ -; JP EXEC_PACKET_COMMAND -;----------------------------------------------------------------------; - - ;----------------------------------------------------------------------; ATAPI_MEDIA_ERROR: PUSH IX @@ -1078,27 +829,6 @@ ATAPI_MEDIA_ERROR: LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A ; CALL GET_ATAPI_CAPACITY -; LD DE,SYS_PAGE.TMP_BUFFER -; CALL ATAPI_READ_CAPACITY_DATA -; ; -; LD HL,#FFFF -; LD C,BIOS.Error.ATAPI.MediumError -; JR C,.No_Media -; ; -; LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high -; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H -; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L -; LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low -; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H -; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L -; LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size -; ; -; LD C,BIOS.Error.ATAPI.UnitAttention -; .No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size -; LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L -; JR NC,.exit -; SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) - ; .exit: POP AF POP HL POP IX @@ -1184,7 +914,6 @@ ATAPI_CMD_PACKET: DB #00 ; .WRITE: DB #2E,#00 ; write and verify - ;DB #2A,#00 ; write DB #00,#00,#00,#00 ; sector dword DB #00 DB #00,#01,#00,#00 ; counter dword @@ -1198,24 +927,12 @@ ATAPI_CMD_PACKET: DB MAX_DATA_PACKET_FOR_REQUEST_SENSE DB #00,#00,#00,#00,#00,#00,#00 ; - ATAPI_PACKET: .SECTOR EQU 2 .COUNTER EQU 7 //////////////////////////////////////////////////////////////////////// -; -; E - Second * 10 -; PAUSE LD HL,#0000 -; PAUSE1 DEC L -; JR NZ,PAUSE1 -; DEC H -; JR NZ,PAUSE1 -; DEC E -; JR NZ,PAUSE1 -; RET -; -/* -Если ловится ошибка media changed, то биос должен выставлять в HDD_INIT_TABLE.MediaParameters = 3 -и затирать FF SectorSize. -Дос после получения такой ошибки должен вызывать BIOS.DRV_DETECT и если всё ОК, то ReScanDRV -*/ \ No newline at end of file + + +; Если ловится ошибка media changed, то биос должен выставлять в HDD_INIT_TABLE.MediaParameters = 3 +; и затирать FF SectorSize. +; Дос после получения такой ошибки должен вызывать BIOS.DRV_DETECT и если всё ОК, то ReScanDRV \ No newline at end of file diff --git a/src/bios/exp/FUNC_5x.asm b/src/bios/exp/FUNC_5x.asm index c43c2e5..7ce5449 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/src/bios/exp/FUNC_5x.asm @@ -33,8 +33,7 @@ DRV_LIST: OUT (SLOT3),A ; !TODO сделать структурой XOR A LD (IX+0),#04 ; DB 0 ;LEN ;!HARDCODE - ;LD (IX+1),A ; DB 0 ;FDD COUNT - LD (IX+1),#02 ; DB 0 ;FDD COUNT + LD (IX+1),#02 ; DB 0 ;FDD COUNT LD (IX+2),A ; DB 0 ;HDD COUNT LD (IX+3),A ; DB 0 ;CDROM COUNT ; ; BLOCK 13,0 ;RESERVED ;!TODO сделать RAMDRIVE тут? diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index c0c0467..4f3aa1b 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -1656,6 +1656,7 @@ LP_PR_LINE_DIR: JP LP_END_P ;;;;;;;;;;;;;;;;; ; A - атрибуты выводимого символа если CF' +; A' - если !=0 то без скролла ; CF - XY-mode ; DE - место символа в окне, если CF=1 ; HL - адрес с выводимой строкой @@ -1674,10 +1675,11 @@ LP_PR_LINE_DIR: LD C,A CALL LP_BEG_P CALL C,LP_SET_CUR ; mode for DE - POP AF ; attr-mode LD A,B ; далее рег B свободен, можно задействовать LD (SYS_PAGE.SYS_WORK2),A ; цвет консоли + POP AF ; attr-mode, scroll on/off + LD B,A ; scroll on/off EXX RL C ; C' - attr-mode. выводить атрибут .loop: LD A,D @@ -1840,6 +1842,13 @@ LP_NEXT_HL_DIR: LD A,SYS_PAGE .end_line: LD A,L SUB 4 ;!HARDCODE длина одного описателя квадратика LD L,A + ; игнорим скрролл или нет? + EXX + LD A,B + EXX + AND A + RET NZ ; ZF=0 игнор скролла + ; PUSH HL DEC L PUSH BC diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 3df68d9f2041b40b83c5170370f04417d3b00493..08b917564de81e60a28f2316d0efd842bfd901b1 100644 GIT binary patch delta 10835 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 diff --git a/src/doc/changes.txt b/src/doc/changes.txt index 6f62241..851f7c5 100644 --- a/src/doc/changes.txt +++ b/src/doc/changes.txt @@ -1,49 +1,48 @@ TODO: -- пункт в сетапе "сохранять страницы спектрума при перезагрузке" -- перед инициализацией страниц спектрума и страницы 41 проверять, не заняты ли они рамдиском -- чистить буфер клавы не втупую, а какими-нибудь командами для этих всяких SIO/PIO, если есть --+ ! в Setup добавить пункт настройки времени и даты +-? пункт в сетапе "сохранять страницы спектрума при перезагрузке" +- чистить буфер клавы не втупую, а какими-нибудь командами для этих всяких SIO/PIO, если есть + Done: + немного доработана система перехвата ресета для устранения некоторых глюков и на будущее -+ в сетап работает сохранение настроек HDD "Setup" после первого удачного автодетекта -+ Сделан универсальный загрузчик битстрима для 1k30 и 1k50 -+ Активирован второй канал IDE -+ Нумерация устройств IDE переделана с последовательной на физическую -+ Выбор загрузочного IDE изменён с последовательного на физический -+ Добавлена возможность установки IDE со второго канала в качестве основного и альтернативного загрузочного диска -+ Убрано залипание клавиш при ресете по Ctrl+Alt+Del -+ При некорректных значениях даты и времени в CMOS данные заменяются на дефолтные значения, выводится сообщение об ошибке -+ В Setup добавлен выбор режима развёртки (--------/Scorpion/Pentagon/Spectrum) -+ В Setup добавлен выбор вертикальной синхронизации (--------/312 50Гц/320 49Гц) -+ Добавлена загрузка системы с RAM Disk -+ Исправлен баг со стеком в BLK_TO_RAMD и ещё несколько багов в процедурах чтения с РАМ-ДИСКА -+ Добавлена загрузка RECOVERY с ROM-Disk в ПЗУ -+ При холодном старте устанавливается инт пентагона (а не скорпиона), если в CMOS не задано иное -+ Функция БИОС FN_SINC (#F2) при удачном завершении не сбрасывала флаг CF на выходе - исправлено -+ Новая функция GET_RAMD_NUM -+ Добавленые дополнительные опции в функцию БИОС FN_SINC (#F2), bit7 регистра A теперь отвечает за переключение старого/нового - варианта работы функции (для сохранения совместимости со старыми программами) -+ Новое лого при старте, разрешение изменено с 256х64 16 цветов на 128х72 256 цветов -+ Изменена процедура вывода логотипа, логотип перенесён в другую страницу ПЗУ -+ Смена языка, развёртки и инта происходит в Setup сразу -+ Изменены некоторые надписи и поправлена структура SETUP -+ Доделана функция FN_RESET -+ Доделана функция DCP_CONFIG - функция управления дешифратором портов -+ Убрано задвоение функций 4х -+ Функции 5х перенесены из 0 в 8 страницу ПЗУ -+ Изменена функция инициализации DCP, освободилось около 4,5 кб -+ Теперь зарезервированные под режим спектрума страницы можно легко освободить, номер блока - 1 -+ Добавлены образы ПЗУ ZX-Sprinter для запуска режима спектрума без загрузки DSS -+ Страница BIOS совместима с адаптированными образами ПЗУ спектрума. Теперь отдельные страницы оригинальных SP_EXP и SP_EXP2 - не требуются. -+ Исправлен баг в режиме спектрума. При выборе Clear RAM в меню и последующим выходом в ДОС по CAD зависало, - потому что вызывалась процедура FullInit для очистки памяти. Теперь вместе с очисткой памяти сбрасывается перехват ресета -+ Поправлены буферы, оптимизированы некоторые процедуры, освобождено ббольше 1,5 кб ОЗУ для работы BIOS во время старта -+ Найдено несколько древних мелких огрехов copy/paste, при работе было незаметно, но приятно, что нашлись -+ Поправлен маловероятный, но возможный глюк с переполнением стека при входе-выходе из SETUP -+ Постепенный рефакторинг кода))) -+ Всего и не вспомнить уже... ++ в сетап работает сохранение настроек HDD "Setup" после первого удачного автодетекта ++ Сделан универсальный загрузчик битстрима для 1k30 и 1k50 ++ Активирован второй канал IDE ++ Нумерация устройств IDE переделана с последовательной на физическую ++ Выбор загрузочного IDE изменён с последовательного на физический ++ Добавлена возможность установки IDE со второго канала в качестве основного и альтернативного загрузочного диска ++ Убрано залипание клавиш при ресете по Ctrl+Alt+Del ++ При некорректных значениях даты и времени в CMOS данные заменяются на дефолтные значения, выводится сообщение об ошибке ++ В Setup добавлен выбор режима развёртки (--------/Scorpion/Pentagon/Spectrum) ++ В Setup добавлен выбор вертикальной синхронизации (--------/312 50Гц/320 49Гц) ++ Добавлена загрузка системы с RAM Disk ++ Исправлен баг со стеком в BLK_TO_RAMD и ещё несколько багов в процедурах чтения с РАМ-ДИСКА ++ Добавлена загрузка RECOVERY с ROM-Disk в ПЗУ ++ При холодном старте устанавливается инт пентагона (а не скорпиона), если в CMOS не задано иное ++ Функция БИОС FN_SINC (#F2) при удачном завершении не сбрасывала флаг CF на выходе - исправлено ++ Новая функция GET_RAMD_NUM ++ Добавленые дополнительные опции в функцию БИОС FN_SINC (#F2), bit7 регистра A теперь отвечает за переключение старого/нового + варианта работы функции (для сохранения совместимости со старыми программами) ++ Новое лого при старте, разрешение изменено с 256х64 16 цветов на 128х72 256 цветов ++ Изменена процедура вывода логотипа, логотип перенесён в другую страницу ПЗУ ++ Смена языка, развёртки и инта происходит в Setup сразу ++ Изменены некоторые надписи и поправлена структура SETUP ++ Доделана функция FN_RESET ++ Доделана функция DCP_CONFIG - функция управления дешифратором портов ++ Убрано задвоение функций 4х ++ Функции 5х перенесены из 0 в 8 страницу ПЗУ ++ Изменена функция инициализации DCP, освободилось около 4,5 кб ++ Теперь зарезервированные под режим спектрума страницы можно легко освободить, номер блока - 1 ++ Добавлены образы ПЗУ ZX-Sprinter для запуска режима спектрума без загрузки DSS ++ Страница BIOS совместима с адаптированными образами ПЗУ спектрума. Теперь отдельные страницы оригинальных SP_EXP и SP_EXP2 + не требуются. ++ Исправлен баг в режиме спектрума. При выборе Clear RAM в меню и последующим выходом в ДОС по CAD зависало, + потому что вызывалась процедура FullInit для очистки памяти. Теперь вместе с очисткой памяти сбрасывается перехват ресета ++ Поправлены буферы, оптимизированы некоторые процедуры, освобождено ббольше 1,5 кб ОЗУ для работы BIOS во время старта ++ Найдено несколько древних мелких огрехов copy/paste, при работе было незаметно, но приятно, что нашлись ++ Поправлен маловероятный, но возможный глюк с переполнением стека при входе-выходе из SETUP ++ Постепенный рефакторинг кода))) ++ Всего и не вспомнить уже... ==================================================================================================================================================================================================================== Новое описание функции БИОС FN_SINC (#F2)