From 1af84f585b167da6ca617faf1ec34861b09893f1 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 23 Jun 2024 02:34:22 +1000 Subject: [PATCH] bug fixes --- Shared_Includes | 2 +- src/bios/exp/EXP.asm | 2 +- src/bios/exp/FUNC_LOW_PRINT.ASM | 6 +- src/bios/rom/SETUP/MAIN.asm | 62 +++--- src/bios/rom/SETUP/SETTINGS.asm | 2 +- src/bios/rom/SETUP/VIDEO_IO.asm | 323 +++++++++++++++----------------- src/bios/rom/SETUP/messages.z80 | 34 ++-- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 8 files changed, 211 insertions(+), 220 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 399bf41..1cb8eb1 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 399bf41c5cbd12d2866204ee3ff1cc357a3d3a99 +Subproject commit 1cb8eb13fb8e8b20bba324a5ab9f4e18d6bf8b3c diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index fe1669c..80525f3 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -400,7 +400,7 @@ EXTINT: OR A RET .JPHL: JP (HL) -.stackDepth EQU 32 ; расстояние от конца процедуры до вершины стека. +.stackDepth EQU 64 ; расстояние от конца процедуры до вершины стека. .switchProcedure.size EQU $-.switchProcedure ENDIF ;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index 0e26bd7..9237f7a 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -64,8 +64,10 @@ ;============================================================= MACRO TEST_40 ;[x] включил 31/10/23, чисто на Хэллоууууииин -; - + EX AF,AF' + JR C,.LLL + INC D ; режим 40 +.LLL: EX AF,AF' ; ENDM diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index d1dfb54..1ff9acf 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -600,7 +600,7 @@ ERRSUM+1: CHEKOK: ;CALL ScreenPOS.GET_CUR CALL LP_GET_PLACE PUSH DE - CALL LOGOTYP + CALL LOGOTYPE LD DE,#0000 ;CALL ScreenPOS.LOCAT @@ -706,13 +706,13 @@ ABOOT: LD A,msgStrings.bootAltDrv ;EI CALL INT_ON AGAKEY: CALL WAITKEY - LD HL,#4F00 ; DEL - go to settings + LD HL,#4F00 ; DEL - go to settings ;AND A SBC HL,DE - JR Z,CSETUP - CP #1B ; ESC - go to zx spectrum mode + JR Z,ENTER_SETUP + CP #1B ; ESC - go to zx spectrum mode JP Z,EXIT_SETUP - CP #0D ; ENTER - restart + CP #0D ; ENTER - restart JP NZ,AGAKEY XOR A JP Start_again @@ -720,17 +720,18 @@ AGAKEY: CALL WAITKEY TSETUP: CALL SCANKEY RET Z - LD HL,#4F00 + LD HL,#4F00 ; DEL - go to settings AND A SBC HL,DE - JR Z,CSETUP + JR Z,ENTER_SETUP LD HL,#011B AND A SBC HL,DE JR NZ,TSETUP POP HL ; убираем лишнее JP EXIT_SETUP -CSETUP: XOR A +ENTER_SETUP: + XOR A LD (ITEM_Restore),A CALL SETTINGS XOR A @@ -783,28 +784,29 @@ writeDateTimeToCmos: ;!FIXIT CALL CMOS_WR RET -RESCREEN: -;R06 - LD A,#1F ;!HARDCODE READ SCREEN POSITION - CALL READCMS - PUSH AF - IN A,(SLOT3) - LD E,A - LD A,DCP_PAGE - OUT (SLOT3),A - LD A,(#C400) ;c400 for first cfg 50176 ; !TODO можно переделать на вызов функции биоса - LD D,A - LD A,#CB - LD (#C400),A - POP AF - LD BC,0 - OUT (C),A - LD A,D - LD (#C400),A - LD A,E - OUT (SLOT3),a -;R06 - RET +RESCREEN: ;R06 + LD A,CMOS_CELL.ScreenPosition + CALL READCMS + LD B,A + LD A,ACEX.HOLD + JP SET_PORTS + ; PUSH AF + ; IN A,(SLOT3) + ; LD E,A + ; LD A,DCP_PAGE + ; OUT (SLOT3),A + ; LD A,(#C400) ;c400 for first cfg 50176 ; !TODO можно переделать на вызов функции биоса + ; LD D,A + ; LD A,ACEX.HOLD + ; LD (#C400),A + ; POP AF + ; LD BC,0 + ; OUT (C),A + ; LD A,D + ; LD (#C400),A + ; LD A,E + ; OUT (SLOT3),a + ; RET ; ;R07 ; CMOSINIT: diff --git a/src/bios/rom/SETUP/SETTINGS.asm b/src/bios/rom/SETUP/SETTINGS.asm index cbd99fe..b7f90f7 100644 --- a/src/bios/rom/SETUP/SETTINGS.asm +++ b/src/bios/rom/SETUP/SETTINGS.asm @@ -38,7 +38,7 @@ SETTINGS: LD DE,#0602 LD BC,#134C - CALL PBORDER + CALL PBORDER ;!FIXIT CALL setFRAME.single diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index 2f2d0a8..d5326da 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -155,177 +155,163 @@ TLINEH: ; E - X ; B - CY ; C - CX -PBORDER: - PUSH BC - LD A,C - DEC A - LD (.BSHI),A - DEC A - LD (.BHOR),A - LD (.BHOR2),A - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.UpLeft) - LD H,E - CALL PRSYM - LD A,(ElementsBuffer.HorizontalLine) -.BHOR+1: - LD B,1 +PBORDER: PUSH BC + LD A,C + DEC A + LD (.BSHI),A + DEC A + LD (.BHOR),A + LD (.BHOR2),A + CALL LP_SET_PLACE + LD A,(ElementsBuffer.UpLeft) + LD H,E + CALL PRSYM + LD A,(ElementsBuffer.HorizontalLine) +.BHOR+1: LD B,1 + CALL LP_PRINT_SYM - ;CALL PRSYMB - CALL LP_PRINT_SYM + LD A,(ElementsBuffer.UpRight) + CALL PRSYM + POP BC + DEC B + DEC B + INC D + LD E,H +.loop: PUSH BC + CALL LP_SET_PLACE + LD A,(ElementsBuffer.VerticalLine) + CALL PRSYM + LD A,H +.BSHI+1: ADD A,#00 + LD E,A + CALL LP_SET_PLACE + LD A,(ElementsBuffer.VerticalLine) + CALL PRSYM + POP BC + LD E,H + INC D + DJNZ .loop - LD A,(ElementsBuffer.UpRight) - CALL PRSYM - POP BC - DEC B - DEC B - INC D - LD E,H + CALL LP_SET_PLACE + LD A,(ElementsBuffer.DownLeft) + CALL PRSYM + LD A,(ElementsBuffer.HorizontalLine) +.BHOR2+1: LD B,1 + CALL LP_PRINT_SYM + LD A,(ElementsBuffer.DownRight) + CALL PRSYM + RET -.loop: PUSH BC - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.VerticalLine) - CALL PRSYM - LD A,H -.BSHI+1: - ADD A,#00 - LD E,A - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.VerticalLine) - CALL PRSYM - POP BC - LD E,H - INC D - DJNZ .loop - - ;CALL ScreenPOS.LOCAT - CALL LP_SET_PLACE - LD A,(ElementsBuffer.DownLeft) - CALL PRSYM - LD A,(ElementsBuffer.HorizontalLine) -.BHOR2+1: - LD B,1 - - ;CALL PRSYMB - CALL LP_PRINT_SYM - - LD A,(ElementsBuffer.DownRight) - CALL PRSYM - RET - -PRSYM: ;LD BC,1*256 + BIOS.LP_PRINT_SYM - ;JP_to_BIOS - LD B,1 +PRSYM: LD B,1 JP LP_PRINT_SYM -; PRSYMB: LD C,BIOS.LP_PRINT_SYM -; JP_to_BIOS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +//////////////////// LOGO \\\\\\\\\\\\\\\\\\\\ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LOGOTYPE: CALL SHOW_LOGO + LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay + CALL G_VALUE + OR A + JR Z,.EASYDLY ; Delay average + DEC A + JR Z,.SKIPDLY ; Delay disabled + ; Delay enabled + LD B,LOGO_DELAY_NORM +.loop EI + push bc + HALT + CALL go_setup + pop bc + DJNZ .loop + ; Delay average +.SKIPDLY: LD B,LOGO_DELAY_MAX +.MMA: PUSH BC + EI + HALT + DI + CALL FADE + POP BC + DJNZ .MMA + ; ; +.ERASE_LOGO: LD IX,win_descriptor.tab80x32 + LD HL,#0000 + LD E,1 + ; + EI + HALT + DI + CALL WIN_OPEN + ; + LD DE,0 + LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE + LD B,7 + JP LP_CLS_WIN + ; Delay disabled +.EASYDLY: LD B,LOGO_DELAY_MIN +.loop2: EI + HALT + DJNZ .loop2 + DI + JR .ERASE_LOGO +; ; ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -LOGOTYP: - CALL LOGOX - LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay - CALL G_VALUE - OR A - JR Z,EASYDLY ;MIN (DISABLE) - DEC A - JR Z,SKIPDLY ;NORMAL - - LD B,LOGO_DELAY_NORM -.loop EI - push bc - HALT - call go_setup - pop bc - DJNZ .loop -SKIPDLY: - LD B,LOGO_DELAY_MAX -.MMA: PUSH BC - EI - HALT - DI - CALL FADE - POP BC - DJNZ .MMA - -NOWLOGO: - LD IX,win_descriptor.tab80x32 - LD HL,#0000 - LD E,1 - - EI - HALT - DI - CALL WIN_OPEN - - LD DE,0 - LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE - LD B,7 - JP LP_CLS_WIN - -EASYDLY: - LD B,LOGO_DELAY_MIN -.loop: EI - HALT - DJNZ .loop - DI - JR NOWLOGO - -LOGOX: LD IX,win_descriptor.tab320x256 - LD HL,#0000 - LD E,1 - CALL WIN_OPEN +SHOW_LOGO: LD IX,win_descriptor.tab320x256 + LD HL,#0000 + LD E,1 + CALL WIN_OPEN SAFE_PORTY - DI - LD A,1 - OUT (SYS_PORT.ON),A - OUT (ROM.SLOT0),A + DI + LD A,1 + OUT (SYS_PORT.ON),A + OUT (ROM.SLOT0),A - LD HL,MAIN_LOGO.Pallete - LD DE,memBUFFER.Shared - LD BC,MAIN_LOGO.Pallete.length - LDIR + LD HL,MAIN_LOGO.Pallete + LD DE,memBUFFER.Shared + LD BC,MAIN_LOGO.Pallete.length + LDIR - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ON),A - EI + XOR A + OUT (ROM.SLOT0),A + OUT (SYS_PORT.ON),A + EI - LD HL,memBUFFER.Shared - ; A = 0 - LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS - LD E,A - LD B,def_pal_mask - CALL PIC_SET_PAL + LD HL,memBUFFER.Shared + ; A = 0 + LD D,A ; SET DESKTOP PALETTE & CURSOR COLORS + LD E,A + LD B,def_pal_mask + CALL PIC_SET_PAL SAFE_PORTY - DI - LD A,1 - OUT (SYS_PORT.ON),A - ;LD A,1 - OUT (ROM.SLOT0),A + DI + LD A,1 + OUT (SYS_PORT.ON),A + ;LD A,1 + OUT (ROM.SLOT0),A - LD HL,MAIN_LOGO.Raster ; начало картинки в банке ПЗУ -; CALL DECODE - CALL LOGO_TO_SCREEN - ; - ;--------------[Пасхалка]--------------[] - IF Pashalki - _PASHALKI_CODE - ENDIF - ;--------------------------------------[] - ; - XOR A - OUT (SYS_PORT.ON),A - OUT (ROM.SLOT0),A - EI - RET + LD HL,MAIN_LOGO.Raster ; начало картинки в банке ПЗУ + ; CALL DECODE + CALL LOGO_TO_SCREEN + ; + ;--------------[Пасхалка]--------------[] + IF Pashalki + _PASHALKI_CODE + ENDIF + ;--------------------------------------[] + ; + XOR A + OUT (SYS_PORT.ON),A + OUT (ROM.SLOT0),A + EI + RET +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; win_descriptor: .tab80x32 Window_UserVars{ @@ -351,19 +337,20 @@ win_descriptor: ; MACRO _mFADE - LD HL,memBUFFER.Shared - ; A = 0 - LD B,A -.loop: - DUP 3 - CP (HL) - JR Z,1F - DEC (HL) -1: INC HL - EDUP - INC HL - DJNZ .loop + LD HL,memBUFFER.Shared + ; A = 0 + LD B,A +.loop: DUP 3 + CP (HL) + JR Z,1F + DEC (HL) +1: INC HL + EDUP + INC HL + DJNZ .loop ENDM + + FADE: XOR A _mFADE _mFADE @@ -378,7 +365,7 @@ FADE: XOR A SAFE_PORTY -go_setup: ; !FIXIT переделать на TSETUP +go_setup: ; !FIXIT переделать на TSETUP CALL SCANKEY RET Z @@ -394,7 +381,7 @@ go_setup: ; !FIXIT LD HL,#0000 LD E,1 CALL WIN_OPEN - JP CSETUP + JP ENTER_SETUP .to_EXIT_SETUP: LD HL,(RET_TO_EXP_ADDR) diff --git a/src/bios/rom/SETUP/messages.z80 b/src/bios/rom/SETUP/messages.z80 index 0a27ed0..4accc0a 100644 --- a/src/bios/rom/SETUP/messages.z80 +++ b/src/bios/rom/SETUP/messages.z80 @@ -546,17 +546,17 @@ msgStrings: _mSetStr bootOk, tmp_Counter : DZ ' OK' _mSetStr afterBootFail, tmp_Counter : DZ 'PRESS TO REBOOT, TO ENTER SETUP OR TO ZX-MODE . . .' ; - _mSetStr parLang, tmp_Counter : DZ 'Language (Язык) : ' + _mSetStr parLang, tmp_Counter : DZ 'Language (язык) : ' _mSetStr valLangEng, tmp_Counter : DZ 'English ' _mSetStr valLangRus, tmp_Counter : DZ 'Русский ' - _mSetStr parMemTest, tmp_Counter : DZ 'Memory Test : ' + _mSetStr parMemTest, tmp_Counter : DZ 'Memory test : ' _mSetStr valDisabled, tmp_Counter : DZ 'Disabled' _mSetStr valEnabled, tmp_Counter : DZ 'Enabled ' _mSetStr parSaveRAMdrvs, tmp_Counter : DZ 'Save RAM-disks : ' _mSetStr parUpdBios, tmp_Counter : DZ 'Update BIOS : ' - _mSetStr parStartDelay, tmp_Counter : DZ 'Start Delay : ' - _mSetStr valNormal, tmp_Counter : DZ 'Normal ' - _mSetStr parTypRate, tmp_Counter : DZ 'Typematic Rate (Chars/Sec) : ' + _mSetStr parStartDelay, tmp_Counter : DZ 'Start delay : ' + _mSetStr valNormal, tmp_Counter : DZ 'Average ' + _mSetStr parTypRate, tmp_Counter : DZ 'Typematic rate (chars/sec) : ' _mSetStr val_6, tmp_Counter : DZ '6 ' _mSetStr val_8, tmp_Counter : DZ '8 ' _mSetStr val_10, tmp_Counter : DZ '10' @@ -565,13 +565,13 @@ msgStrings: _mSetStr val_20, tmp_Counter : DZ '20' _mSetStr val_24, tmp_Counter : DZ '24' _mSetStr val_30, tmp_Counter : DZ '30' - _mSetStr parTypDelay, tmp_Counter : DZ 'Typematic Delay (Msec) : ' + _mSetStr parTypDelay, tmp_Counter : DZ 'Typematic delay (Msec) : ' _mSetStr val_250, tmp_Counter : DZ '250 ' _mSetStr val_500, tmp_Counter : DZ '500 ' _mSetStr val_750, tmp_Counter : DZ '750 ' _mSetStr val_1000, tmp_Counter : DZ '1000' _mSetStr parRebootMsg, tmp_Counter : DZ 'Reboot message : ' - _mSetStr parSysDsk, tmp_Counter : DZ 'System Disk : ' + _mSetStr parSysDsk, tmp_Counter : DZ 'System disk : ' _mSetStr val1stFDD, tmp_Counter : DZ '1-st FDD' _mSetStr val2ndFDD, tmp_Counter : DZ '2-nd FDD' _mSetStr val1stIDE, tmp_Counter : DZ '1-st IDE' @@ -580,13 +580,13 @@ msgStrings: _mSetStr val4thIDE, tmp_Counter : DZ '4-th IDE' _mSetStr valRamDsk, tmp_Counter : DZ 'RAM-DISK' _mSetStr valRecovery, tmp_Counter : DZ 'RECOVERY' - _mSetStr parAltSysDsk, tmp_Counter : DZ 'Alt. System Disk : ' - _mSetStr parFddFirst, tmp_Counter : DZ 'FDD First : ' + _mSetStr parAltSysDsk, tmp_Counter : DZ 'Alt. system disk : ' + _mSetStr parFddFirst, tmp_Counter : DZ 'FDD first : ' _mSetStr valAuto, tmp_Counter : DZ 'Auto ' ; _mSetStr val720, tmp_Counter : DZ '720K ' ; _mSetStr val1440, tmp_Counter : DZ '1.44M ' _mSetStr valDash6, tmp_Counter : DZ '------' - _mSetStr parFddSecond, tmp_Counter : DZ 'FDD Second : ' + _mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : ' _mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' _mSetStr valSetup, tmp_Counter : DZ 'Setup ' _mSetStr valCdRom, tmp_Counter : DZ 'CD-ROM' @@ -594,9 +594,9 @@ msgStrings: _mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' _mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' IF HDDwriteProtect - _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD Write protect : ' + _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : ' ENDIF - _mSetStr parScreenY, tmp_Counter : DZ 'Y-Screen position : ' + _mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : ' _mSetStr valMinus7, tmp_Counter : DZ '-7' _mSetStr valMinus6, tmp_Counter : DZ '-6' _mSetStr valMinus5, tmp_Counter : DZ '-5' @@ -612,7 +612,7 @@ msgStrings: _mSetStr valPlus5, tmp_Counter : DZ '+5' _mSetStr valPlus6, tmp_Counter : DZ '+6' _mSetStr valPlus7, tmp_Counter : DZ '+7' - _mSetStr parScreenX, tmp_Counter : DZ 'X-Screen position : ' + _mSetStr parScreenX, tmp_Counter : DZ 'X-screen position : ' _mSetStr parFrameInt, tmp_Counter : DZ 'Frame interrupt : ' _mSetStr valDash8, tmp_Counter : DZ '--------' _mSetStr valScorpion, tmp_Counter : DZ 'Scorpion' @@ -621,7 +621,7 @@ msgStrings: _mSetStr parVSync, tmp_Counter : DZ 'V-synchronization : ' _mSetStr val312_50, tmp_Counter : DZ '312/50Hz' _mSetStr val320_49, tmp_Counter : DZ '320/49Hz' - _mSetStr parQuickStartROM, tmp_Counter : DZ 'Quick ROM Start : ' + _mSetStr parQuickStartROM, tmp_Counter : DZ 'Quick ROM start : ' _mSetStr parTrDosA, tmp_Counter : DZ 'TR DOS A:> : ' _mSetStr valDefault, tmp_Counter : DZ 'Default' _mSetStr valFDD, tmp_Counter : DZ 'FDD ' ; ????? подумать какие варианты возможны @@ -630,7 +630,7 @@ msgStrings: _mSetStr parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' _mSetStr parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' IF NEW_FEATURE - _mSetStr parSetTime, tmp_Counter : DZ 'Date and Time setup : ' + _mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : ' _mSetStr valFolder, tmp_Counter : DB 16,'ENTER',17,0 ENDIF IF BETA_BUILD @@ -696,7 +696,7 @@ msgRusStrings: _mSetStrRus bootOk, tmp_Counter : DZ ' OK' _mSetStrRus afterBootFail, tmp_Counter : DZ 'НАЖМИТЕ ДЛЯ ПЕРЕЗАГРУЗКИ, ДЛЯ НАСТРОЕК ИЛИ ДЛЯ ZX-MODE . . .' ; - _mSetStrRus parLang, tmp_Counter : DZ 'Язык (Language) : ' + _mSetStrRus parLang, tmp_Counter : DZ 'Язык (language) : ' _mSetStrRus valLangEng, tmp_Counter : DZ 'English ' _mSetStrRus valLangRus, tmp_Counter : DZ 'Русский ' _mSetStrRus parMemTest, tmp_Counter : DZ 'Тестирование памяти : ' @@ -705,7 +705,7 @@ msgRusStrings: _mSetStrRus parSaveRAMdrvs, tmp_Counter : DZ 'Сохранение RAM-дисков : ' _mSetStrRus parUpdBios, tmp_Counter : DZ 'Обновление BIOS : ' _mSetStrRus parStartDelay, tmp_Counter : DZ 'Начальное ожидание : ' - _mSetStrRus valNormal, tmp_Counter : DZ 'Обычное ' + _mSetStrRus valNormal, tmp_Counter : DZ 'Среднее ' _mSetStrRus parTypRate, tmp_Counter : DZ 'Скорость автоповтора : ' _mSetStrRus val_6, tmp_Counter : DZ '6 ' _mSetStrRus val_8, tmp_Counter : DZ '8 ' diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index e984337ef3ea8da4094ad1b08d3143b3c9e2cbe2..eed9d4b7da428f3d6622cac9b32d10e5b6002f4a 100755 GIT binary patch delta 6501 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

BB@ZpnY ztXz26gsDt@qgCXDC?Bj-G@6ZAG3l_VyF^QeVD@)~8A>jAo(RVYsy0EC)k0-VRM!ft z%cj+sQP~x&jH+c|lw#b>6#_7V4r%ZL=t!Nfl!3B5)eI5b$T(UU74~m5+A7-?Iibls zFAoB;$frdsz|GZkYDf(Mi79`#;O1z(+c)vi+r$pzaL@$^Xtw>%Z3q`zwVED1X zXX&*5S&1q|BJAOt9VRzq({eEeDJ*C#wY^f7lLe*fnf@~Bl`^Sq1(QX*QZ@wHtzaZ3 z-m8GBo!V{(f|Ku5IQCnUmnPn+pn9zY6c)R!mM(_cV=R8ZI_yDjMTgY{+by} z17P1H)>PTeS$8S#&sn8TH_JHoSuOPpl-_gejW81`Z+X^i1>Okrmoswd^5Y7;&kFFG z4Hft&?^Hky{%suUa!U&+d?Q0Ch0bgV{z*Bpf=QL&XF%P4tK__qfg=37a_T9!Rcd?2 z8i>hjMi=Jz(S<021Y%N$@QVr)v5MJu1e5jYkfEP2GZvbm8kntdN>TgTa=nGQT(0l2 z{FSp`fQIFs8GCkqi38&|;Zu3VOxnB4J~QB@BMVDpJ3&0!z5*024Ee;H`=f zjSSJuPzSBV8iut1Z(=2Lm*hMQ!rbp!EsGf9W=85<2iA5nqHZIjWc`lcUOCa_YXPYe z+)D8~IL%RnC?OXS1X%_3Ce)f$E*oCJn z=uFkj@>Of4=4~KtJM8N^yR_Qrl!xqDQYS%5%_XFaPGjD!<}{FSFG%2_ij|t6ij_L} z-V3>{kdxXDXOP6-AihDX(hOXrjU5i_3<_LHzFF9|9y8-7)Mhw9}V58_EUgagmhNeR)b~>y^ z*k2WdnnGx+oQeW02?x1dYfSF7Rbn(45`FTJ=>b#Ug-eHb79NF3s?3WPGF_G7ZLfSn z`+Ykf3pwO;`FbiChiDNdDkbM)CY5B!4!lBHB$}zk(o`6LAHduBD1TL#Y2kWGMlK(P|^uldw#^7=x=uF&2nZxAagl zpQzjoS7<;Mg?qGm?DIlRM44B|PzuQqi^w*Yl{6shB1ZX=K*_McD#;lvM_DrW)!O2s zx+>8qDz~EAKk?Hcxh4X6Vsj8Ke@fSx!FX`JD^;ehclX|KA$MzUE_^QJfpVZ(Lt`=6F>+vORK#3~%ziF~BBV)J2Gi0tgtmZz-i?fspWOH91G{ zE(#SIf zzQ4@FzqZ;3@dNjdiTm;scNgqCaxb(NB_m7~wq{07&2Qb1mjfkohE@d_>;Dzkz2W-IUzwqPezD|Mw3Pez4I9xzT=_-} z&!VN~7i%IhUrC0LMF-@@otGQBXHjTzcW)%p;NjWGqJQQ1jSXoPG?%jpHyol-&GR~Z zp70orzeA(Nr8=Wtc#Lb>^k&ITwVL&C?Go47(%>>>o?}IAGL60-_wvL?7Gapn+PnxZ zfNh&^rwT1+CwJlFmo$M>_$m6_{+*WRERNsN77HSuFTcBT=HTBC`!;u^r)j5#3;yXu g_He@WsRey;_{^c+dFW@uZSO2ZfAk+5-lo(44clP&fdBvi delta 5561 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