diff --git a/Shared_Includes b/Shared_Includes index c135d9b..d1ce639 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit c135d9b6038fcabca6cef3234d876f93d5865dee +Subproject commit d1ce63928bdbb44e48b311f9d4a0005c2f44fcd4 diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index e7432e7..6bfe769 100644 Binary files a/src/ZX_ROMS/new/SP_TRDOS.bin and b/src/ZX_ROMS/new/SP_TRDOS.bin differ diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 55a6b30..b1c74c4 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -704,9 +704,9 @@ POST_5_OK: LD IX,0 XOR A ADD IX,SP ; восстановить значение переданное загрузчиком конфы (если старт после ресета) +; В этом месте у нас IX:IY из Loader.asm +; Дотащили до сюда метку от лоадера, пока не используется ;!TEST 31/12/23 подстраховка от утечки памяти - LD R,A - ; LD D,YH LD E,YL EX DE,HL @@ -717,18 +717,15 @@ POST_5_OK: LD D,XH LD E,XL EX DE,HL - LD DE,SP2000_ConfID + LD DE,ACEX.Config_ID.Sp2000 SBC HL,DE JR NZ,.no_conf_reload ; LD A,#80 - LD R,A .no_conf_reload: + LD R,A ; -; -; В этом месте у нас IX:IY из Loader.asm -; -; Дотащили до сюда метку от лоадера, пока не используется + ; !TODO number from loader ; LD A,YL ; LD L,A @@ -738,11 +735,8 @@ POST_5_OK: ; AND A ; если равно - прошла перезагрузка ; SBC HL,BC ;JR Z,set_config ;!TODO активация метки IX:IY из лоадера - - ;!TEST - ;LD IX,#FFFD ; LD IX,#FFFD ; !!!!! Sprinter-2 вынести референсом тут и в loader.asm - LD HL,#FEFF ; LD IX,#FEFF ; !!!!! Sprinter-2 вынести референсом тут и в loader.asm - ; + ;LD IX,ACEX.Config_ID.Sp97_2 + LD HL,ACEX.Config_ID.Sp2000 set_config: LD (SYS_PAGE.CONFIG_BYTE),HL ; сохранить номер прошивки ;LD (SYS_PAGE.CONFIG_BYTE),IX ; сохранить номер прошивки @@ -796,7 +790,8 @@ set_config: ;[---------------------------------------------------------------------] MODULE Reset_Handler -start: IN A,(SLOT3) +start: DI + IN A,(SLOT3) PUSH AF ;----[перехват soft reset #EE port]----- Check_EE_Port: @@ -810,10 +805,8 @@ Check_EE_Port: LD A,B AND A JR Z,Check_Spec_Page - - DI + ; OUT (SLOT3),A ; Set restart page - .After_Hard_Rst: LD HL,(Spec_Page.RET_addr) ; prog address LD A,(Spec_Page.page_0) ; PAGE0 @@ -824,68 +817,82 @@ Check_EE_Port: OUT (SLOT2),A LD A,(Spec_Page.page_3) ; PAGE3 OUT (SLOT3),A - JP (HL) + LD A,(Spec_Page.Reload_Version) + CP #FF + JR NZ,.ver_2 + JP (HL) + ; +.ver_2: EXX + LD HL,(Spec_Page.Stack_Point) + LD SP,HL + EXX + AND A + LD A,#FF + LD (Spec_Page.Reload_Version),A + JR NZ,ver_2_sys_port_on + PUSH HL + JP EXP_FNS_2_RET +ver_2_sys_port_on: + JP (HL) ; ;--[перехват soft/hard reset #41 page]-- Check_Spec_Page: - LD A,Spec_Page - OUT (SLOT3),A - LD A,(Spec_Page.flag_Z) - CP 'Z' - JR NZ,No_Reset_handlers - LD A,(Spec_Page.flag_X) - CP 'X' - JR NZ,No_Reset_handlers - - LD A,(#FFF7) - CP 'R' - ;JR NZ,Spec_Page_handler_OK - JR NZ,Spec_Page_handler_Next ;!TEST 31/12/23 подстраховка от утечки памяти - LD A,(#FFF8) - CP 'S' - ;JR NZ,Spec_Page_handler_OK - JR NZ,Spec_Page_handler_Next ;!TEST 31/12/23 подстраховка от утечки памяти - LD A,(#FFF9) - CP 'T' - ;JR NZ,Spec_Page_handler_OK - JR NZ,Spec_Page_handler_Next ;!TEST 31/12/23 подстраховка от утечки памяти - - XOR A - LD (#FFF7),A - - JR Check_EE_Port.After_Hard_Rst + LD A,Spec_Page + OUT (SLOT3),A + ; Check for hardreset flag + LD A,(Spec_Page.flag_R) + CP 'R' + JR NZ,No_Reset_handlers + LD A,(Spec_Page.flag_S) + CP 'S' + JR NZ,No_Reset_handlers + LD A,(Spec_Page.flag_T) + CP 'T' + JR NZ,No_Reset_handlers ; - ;!TEST 31/12/23 подстраховка от утечки памяти -Spec_Page_handler_Next: - LD A,R - AND #80 - JR Z,Spec_Page_handler_OK XOR A - LD R,A + LD (Spec_Page.flag_R),A + JR Check_EE_Port.After_Hard_Rst + ; + ;--------------------------------------- No_Reset_handlers: + ; Check ZX ROMS Loaded + LD A,(Spec_Page.flag_Z) + CP 'Z' + JR NZ,.Load_ZXROMS + LD A,(Spec_Page.flag_X) + CP 'X' + JR NZ,.Load_ZXROMS + ;!TEST 31/12/23 подстраховка от утечки памяти + LD A,R + AND #80 + JR Z,No_Need_To_Load_ZXROMS +.Load_ZXROMS: + XOR A + LD R,A + ; + ; Load ZX ROM's init_rom_address EQU #8200 ;!HARDCODE - - ld hl,init_zx_roms - ld de,init_rom_address - ld bc,init_zx_roms.length + ld hl,init_zx_roms + ld de,init_rom_address + ld bc,init_zx_roms.length ldir - - call init_rom_address - - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),C + ; + call init_rom_address + ; + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),C LDIR ; забить FF-ами - ; ставим метку если прогрузили ПЗУ спектрума - DEC DE - LD A,'X' - LD (DE),A - DEC DE - LD A,'Z' - LD (DE),A + DEC DE ; Spec_Page.flag_X + LD A,'X' + LD (DE),A + DEC DE ; Spec_Page.flag_Z + LD A,'Z' + LD (DE),A ;!FIXIT сделать выбор грузить да/нет ПЗУ спектрума при старте, [-------] ; если нет - то воткнуть этот код: @@ -899,11 +906,11 @@ init_rom_address EQU #8200 ;!HARDCO ; LD BC,RAM_BIOS_PROG.Length ; LDIR ;--------------------------------------- - -Spec_Page_handler_OK: +;--------------------------------------- +No_Need_To_Load_ZXROMS: POP AF OUT (SLOT3),A - + ; ENDMODULE ;[---------------------------------------------------------------------] ; @@ -1218,7 +1225,7 @@ init_zx_roms: RET ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 -.SET_ROM: +;.SET_ROM: ;LD C,BIOS.SET_PORTS ;JP ToBIOS_3D13 ; diff --git a/src/bios/exp/FLEX.asm b/src/bios/exp/FLEX.asm index 6986b01..fe193b2 100644 --- a/src/bios/exp/FLEX.asm +++ b/src/bios/exp/FLEX.asm @@ -580,10 +580,10 @@ FN_SYNC: CALL CMOS_RD AND CMOS.Cell.ScreenSET.Mask.Int ; в регистре A значение ScreenSET - jr nz,.skiptest + JR NZ,.skiptest - CALL Test_CONFIG_ALL - jp (IX) ; default int (non CMOS) + CALL Test_CONFIG_ALL + JP (IX) ; default int (non CMOS) .skiptest: cp #10 diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index e4b7412..9e592c0 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -178,8 +178,8 @@ FN_HDD_READ_BPB: CALL HD_WAIT RET C CALL HD_BPB_PREP - RET C - JR HD_RD_L1 + JR NC,HD_RD_L1 + RET ; FOR LBA ONLY - NEXT_READ @@ -204,9 +204,7 @@ FN_HDD_READ: DEC B RET Z CALL HD_WAIT - RET C - - CALL HD_PREPARE + CALL NC,HD_PREPARE RET C HD_RD_L1: EXX @@ -222,7 +220,6 @@ HD_RD_L1: LD A,IDE.ATA.ReadSectorsWithRetry OUT (C),A HD_RD_L2: - WAIT_HDD BIT IDE.ControlBit.DataRequest,A @@ -450,7 +447,7 @@ HD_C0_L3: WAIT_HDD LD BC,IDE.Write.Command - LD A,IDE.ATA.IdentifyDevice + LD A,IDE.ATA.IdentifyDevice ;!FIXIT переделать OUT (C),A WAIT_HDD @@ -535,7 +532,7 @@ HD_WAIT: HD_WAIT1: LD BC,IDE.Read.Status IN A,(C) - BIT IDE.ControlBit.Busy,A + AND IDE.ControlByte.Busy JR Z,HD_W_EXIT DEC DE LD A,D @@ -577,29 +574,27 @@ HD_CALC_SECS: IN A,(C) BIT 6,A JR NZ,HDD_LBA -; POP BC ;!!!!! посмотреть +; POP BC */ ;EXP_HDD.ASM Version -HDD_LBA: - POP BC - LD L,E - LD E,D - LD D,XL - LD A,XH - AND #0F - LD H,A - RET - HD_CALC_SECS: - PUSH BC + ;PUSH BC LD BC,IDE.Read.Control IN A,(C) - BIT 6,A - JR NZ,HDD_LBA - POP BC ; снимаем значение для корректного ret - ; - LD A,XH + AND %0100'0000 + ;POP BC + JR Z,.CHS + ; LBA + LD L,E + LD E,D + LD D,XL + LD A,XH + AND #0F ; ограничение на ~127 гигов + LD H,A + RET + ; CHS +.CHS: LD A,XH AND A SCF RET NZ ; ошибка, слишком большой HDD @@ -644,19 +639,17 @@ HD_CALC_SECS: LD C,A ;LD BC,(MS_BPB+S_P_T) ; ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ XOR A -HD_CALC_LOOP2: - SBC HL,BC +.LOOP: SBC HL,BC INC A - JR NC,HD_CALC_LOOP2 - + JR NC,.LOOP + ; DEC A ; A - головка ADD HL,BC ; L - сектор INC L LD H,A ; HL - HEAD,SEC - + ; LD A,(SYS_PAGE.COPY_SLOT3) OUT (SLOT3),A - AND A RET diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index ca6e007..03d72f0 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -1,14 +1,15 @@ ; DISPLAY "Service" ; !FIXIT тут можно, походу, дохрена убрать -; страницы с конфой для Sp97, для совместимости с древними прогами -PG_SP1 equ #EC -PG_SP2 equ #EE -PG_AY equ #EA -; +; ; страницы с конфой для Sp97, для совместимости с древними прогами +; PG_SP1 equ #EC +; PG_SP2 equ #EE +; PG_AY equ #EA +; ; -;!TODO замутить заливку конфы, рестарт, перехват ресета силами BIOS -PG_Sp2000 EQU #FE +; ;!TODO замутить заливку конфы, рестарт, перехват ресета силами BIOS +; PG_Sp2000 EQU #FE +; PG_Sp2000_REINIT EQU #FD ; RST_CONF: ;--[] ZX Spectrum @@ -24,7 +25,7 @@ RST_CONF: OUT (C),A ; ACC_OFF ;LD A,PG_AY - LD DE,#FFFC + LD DE,ACEX.Config_ID.Sp97_AY JR .INT_PLD ;--[] @@ -41,7 +42,7 @@ RST_CONF: OUT (C),A ; ACC_OFF ;LD A,PG_SP1 - LD DE,#FFFE ;!HARDCODE + LD DE,ACEX.Config_ID.Sp97_1 JR .INT_PLD ;--[] @@ -52,10 +53,22 @@ RST_CONF: OR 1 ; ACC_ON OUT (C),A ;LD A,PG_SP2 - LD DE,#FFFD ;!HARDCODE + LD DE,ACEX.Config_ID.Sp97_2 JR .INT_PLD ;--[] + +;--[] +.SP2000: + LD BC,Port_All_Mode + IN A,(C) + OR 1 ; ACC_ON + OUT (C),A + LD DE,ACEX.Config_ID.Sp2000 + JR .INT_PLD +;--[] + + ;--[] .CUSTOM: CP #80 @@ -98,20 +111,21 @@ RST_CONF: .CHOOSE_CNF: ;!TEST - CP PG_Sp2000 - ;LD DE,SP2000_ConfID - JR Z,.INIT_ACEX + CP ACEX.Config_PG.Sp2000 + JR Z,.INIT_ACEX + CP ACEX.Config_PG.Sp2000_SetUp + JR Z,.SP2000 ; ; only for old FLEX10K soft compatible - CP PG_SP1 - LD DE,#FFFE ;!HARDCODE + CP ACEX.Config_PG.Sp97_1 + LD DE,ACEX.Config_ID.Sp97_1 JR Z,.INT_PLD - CP PG_SP2 - LD DE,#FFFD + CP ACEX.Config_PG.Sp97_2 + LD DE,ACEX.Config_ID.Sp97_2 JR Z,.INT_PLD - CP PG_AY - LD DE,#FFFC + CP ACEX.Config_PG.Sp97_AY + LD DE,ACEX.Config_ID.Sp97_AY JR Z,.INT_PLD SCF RET @@ -137,30 +151,37 @@ RST_CONF: ; достаём адрес возврата в вызывающую функцию и сохраняем в Spec_Page POP DE LD HL,RST_18_1.exit - AND A + XOR A SBC HL,DE JR NZ,1F ; NZ - если вызов был по RST #18 POP DE ; если вызов был в ОЗУ по RST 8 + INC A 1: LD (Spec_Page.RET_addr),DE + ; A=0 - SYS_PORT.ON + ; A=1 - SYS_PORT.OFF + LD (Spec_Page.Reload_Version),A + LD HL,0 + ADD HL,SP + LD (Spec_Page.Stack_Point),HL ; проверяем размер блока с конфой и получаем страницы конфы - PUSH BC + ;PUSH BC LD HL,Spec_Page.bitstream_pages LD A,B CALL EMM.GetMemBlkPages LD A,B - POP BC - LD B,A + ;POP BC + ;LD B,A JR C,.INIT_ACEX.ERROR CP 4+1 ;!HARDCODE количество страниц в кэш для бистрима плюс одна JR NC,.INIT_ACEX.ERROR - PUSH BC + ;PUSH BC ; закидываем в Spec_Page прогу для заливки конфы LD HL,.INIT_ACEX.PROGRAM LD DE,Spec_Page.init_acex LD BC,.INIT_ACEX.PROGRAM.Size LDIR ; - POP BC + ;POP BC ; B = size of ram block in pages CALL Spec_Page.init_acex ; @@ -185,37 +206,80 @@ RST_CONF: RET ; .INIT_ACEX.PROGRAM: + DISPLAY " !!! !!! .INIT_ACEX.PROGRAM !!! !!!" DISP Spec_Page.init_acex - ; B = size of ram block in pages - ; - IN A,(FastRAM.ON) - XOR A - EXX - LD HL,Spec_Page.bitstream_pages - LD BC,SLOT2 - EXX -.load_loop: - EXX - OUTI - EXX - PUSH BC - OUT (FastRAM.SLOT0),A - LD HL,0 - LD DE,#8000 - LD BC,#4000 - LDIR - ; - INC A - POP BC - DJNZ .load_loop + IN A,(FastRAM.ON) + EXX + ; + LD A,(Spec_Page.bitstream_pages) + OUT (SLOT1),A ; страница с данными файла + ; + XOR A + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 0 + ; + LD HL,#5000 ; перекидывание данных в страницу КЭШ = 0 + LD DE,#1000 + LD BC,#3000 + LDIR + ; + LD A,(Spec_Page.bitstream_pages+1) + CP #FF + JR Z,.INIT_ACEX.PROGRAM.SET_KEYS + OUT (SLOT1),A ; следующая страница с данными файла + LD A,1 + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 1 + ; + LD H,D ; LD HL,#4000 + LD D,E ; LD DE,#0000 + LD B,H ; LD BC,#4000 + LDIR + ; + LD A,(Spec_Page.bitstream_pages+2) + CP #FF + JR Z,.INIT_ACEX.PROGRAM.SET_KEYS + OUT (SLOT1),A ; следующая страница с данными файла + LD A,2 + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 2 ; следующая страница с данными файла + ; + EX DE,HL ; LD HL,#4000 + LD D,E ; LD DE,#0000 + LD B,H ; LD BC,#4000 + LDIR + ; + LD A,(Spec_Page.bitstream_pages+3) + CP #FF + JR Z,.INIT_ACEX.PROGRAM.SET_KEYS + OUT (SLOT1),A ; следующая страница с данными файла + LD A,3 + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 1 + ; + LD H,D ; LD HL,#4000 + LD D,E ; LD DE,#0000 + LD BC,#3EDF ; !HARDCODE оставшийся размер битстрима + LDIR + ; +.INIT_ACEX.PROGRAM.SET_KEYS: + LD A,3 + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 3 + ; + LD HL,.INIT_ACEX.Reload_String ; флаг перезагрузки из КЭШ-а + LD DE,ACEX.LOADER.String_Address-#C000 + LD BC,#10 + LDIR - ; ... .... - ; acex loading and flags - ; ... .... - XOR A - OUT (FastRAM.SLOT0),A - IN A,(FastRAM.OFF) - RET + LD HL,#FFFF ; залить конфу только при первой перезагрузке + ;LD HL,ACEX.LOADER.Reload_Flag ; заливать конфу при каждой перезагрузке + LD (ACEX.LOADER.Reload_Flag_Address-#C000),HL + ; +.INIT_ACEX.PROGRAM.END: + XOR A + OUT (FastRAM.SLOT0),A + IN A,(FastRAM.OFF) + RET + ; +.INIT_ACEX.Reload_String: + DB ACEX.RELOAD_STRING + ; ENT .INIT_ACEX.PROGRAM.Size EQU $-.INIT_ACEX.PROGRAM ; diff --git a/src/bios/exp/FUNK_FOR_TRDOS.ASM b/src/bios/exp/FUNK_FOR_TRDOS.ASM index ac9b096..bb305be 100644 --- a/src/bios/exp/FUNK_FOR_TRDOS.ASM +++ b/src/bios/exp/FUNK_FOR_TRDOS.ASM @@ -1,4 +1,5 @@ -; +;!TODO исправить SLOT2 на SLOT3 и затестить +;!TODO добавить описание DISK_REDIR: PUSH HL LD HL,SYS_PAGE.DISK_TYPE-#4000 @@ -18,27 +19,32 @@ DISK_REDIR: RET ; -; +;!TODO исправить SLOT2 на SLOT3 и затестить +;!TODO добавить описание SET_DISK_TYPE: - PUSH HL - LD HL,SYS_PAGE.DISK_TYPE-#4000 - IN A,(SLOT2) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,(ZX_VARS.OPER_DISK) - AND 3 - ADD A,L - LD L,A - LD (HL),E - LD L,(HL) - EX AF,AF' - OUT (SLOT2),A - LD A,L - POP HL + PUSH HL + LD HL,SYS_PAGE.DISK_TYPE-#4000 + IN A,(SLOT2) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT2),A + LD A,(ZX_VARS.OPER_DISK) + AND 3 + ADD A,L + LD L,A + LD (HL),E + ; + ;LD L,(HL) + LD L,E + ; + EX AF,AF' + OUT (SLOT2),A + LD A,L + POP HL RET ; +;!TODO исправить SLOT2 на SLOT3 и затестить ; Disk A, DRV - B FDD_TO_DRV: CP 4 @@ -66,7 +72,7 @@ FDD_TO_DRV: RET ; -; +;!TODO исправить SLOT2 на SLOT3 и затестить ; RAM-Disk A, DRV - B RAMD_TO_DRV: CP SYS_PAGE.RAMD_KEYS.NUM @@ -77,10 +83,10 @@ RAMD_TO_DRV: CP 4 CCF RET C - + ; LD HL,SYS_PAGE.DISK_TYPE-#4000 LD L,B - + ; IN A,(SLOT2) LD B,A LD A,SYS_PAGE @@ -94,30 +100,30 @@ RAMD_TO_DRV: RET ; -; +;!TODO исправить SLOT2 на SLOT3 и затестить ; HDD A, DRV - B HDD_TO_DRV: - AND 0FH - LD C,A - LD A,B - CP 4 + AND #0F + LD C,A + LD A,B + CP 4 CCF - RET C - - LD HL,SYS_PAGE.DISK_TYPE-#4000 - LD L,B - - IN A,(SLOT2) - LD B,A - LD A,SYS_PAGE - OUT (SLOT2),A - LD A,C - ADD A,40H - LD (HL),A - LD A,B - OUT (SLOT2),A - - AND A + RET C + ; + LD HL,SYS_PAGE.DISK_TYPE-#4000 + LD L,B + ; + IN A,(SLOT2) + LD B,A + LD A,SYS_PAGE + OUT (SLOT2),A + LD A,C + ADD A,#40 + LD (HL),A + LD A,B + OUT (SLOT2),A + ; + AND A RET ; diff --git a/src/bios/loader/loader.asm b/src/bios/loader/loader.asm index 138c4b6..1fb7745 100644 --- a/src/bios/loader/loader.asm +++ b/src/bios/loader/loader.asm @@ -101,10 +101,9 @@ .ONES_CONFIG: LD IY,SP2000_Loader_Flag - ;!TEST - ;LD IX,#FFFD - LD IX,SP2000_ConfID ;!!!!! подумать))) - ; + ;LD IX,#FFFD + LD IX,ACEX.Config_ID.Sp2000 + .LOOP1: LD A,(HL) @@ -142,7 +141,7 @@ INC HL JR .LOOP1 -.STRING: DB "ACEX_30K_LOADING" +.STRING: DB ACEX.RELOAD_STRING .Conf_header: include 'src/bios/Loader/bitstream_header.inc' .Conf_header.length EQU $-.Conf_header @@ -152,7 +151,7 @@ ; Это, скорее всего, рудимент, тот самый байт описателя конфы, ; который ищет загрузчик для Sp97 по старому адресу #C090. ; Воткнул его в конце загрузчика, может потом пригодится. -.DEF_SYM: DW SP2000_ConfID +.DEF_SYM: DW ACEX.Config_ID.Sp2000 ;------------------------------[Loader end] DEFINE Altera_Chip altera_chip diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 085a14c..22001cf 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -3,7 +3,6 @@ DEFINE DEBUG 1 ; добавляет строку и сообщение о тестовой сборке на стартовом экране DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 - DEFINE SP2000_ConfID #FEFF ; DEFINE IDE_Optimization 1 ; слегка оптимизирует некоторые процедуры работы с HDD DEFINE NeedSafePort_Y 1 ; !!!!! если 0, то в режиме sp-спектрума некоторые процедуры могут засрать экран DEFINE Pashalki 0 ;