From c8b5e323a535492067f1b27e168d69a9051cd5ed Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 23 Mar 2024 04:04:37 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/bios/exp/EXP.asm | 122 +++++++++++++++++------------------ src/bios/rom/SETUP/MAIN.asm | 13 ++-- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 4 files changed, 68 insertions(+), 69 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 42dfec0..68681fb 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 42dfec072030351eb386205ead32983bbc1c4909 +Subproject commit 68681fbc50da463f1debae860e6db64603886d39 diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index d3d0aad..b2c41a3 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -71,8 +71,7 @@ RST_30: ;======================================= BLOCK #38-$,0 ; INTERUPT Point -RST38: - IF TEST_INT +RST38: IF TEST_INT ;INT: PUSH BC PUSH AF @@ -966,78 +965,71 @@ PORTS_INIT: DEC A ;!FIXIT может убрать цикл ожидания и запулить 0 в ису после инита клавы? JR NZ,.isa_reset OUT (C),A - -; Инициализация последовательного порта клавиатуры +; Инициализация последовательного порта клавиатуры + ; reg 0 XOR A ;LD A,0 OUT (Z84.SIO.Ch_A.Ctrl),A - - INC A ;LD A,1 + ; reg 4 + LD A,4 OUT (Z84.SIO.Ch_A.Ctrl),A - DEC A ;LD A,0 ; #18 включение прерываний + ;INC A ;LD A,5 OUT (Z84.SIO.Ch_A.Ctrl),A - + ; reg 3 LD A,3 OUT (Z84.SIO.Ch_A.Ctrl),A LD A,#C1 OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,4 - OUT (Z84.SIO.Ch_A.Ctrl),A - -; ????? 5/7 паритет? -; LD A,5 - LD A,7 - OUT (Z84.SIO.Ch_A.Ctrl),A - + ; reg 5 LD A,5 OUT (Z84.SIO.Ch_A.Ctrl),A LD A,#62 ;60, 61 OUT (Z84.SIO.Ch_A.Ctrl),A - + ; reg 1 + LD A,1 + OUT (Z84.SIO.Ch_A.Ctrl),A + DEC A ;LD A,0 ; #18 включение прерываний + OUT (Z84.SIO.Ch_A.Ctrl),A ; Инициализация мыши -.mouse: XOR A ;LD A,0 - OUT (Z84.SIO.Ch_B.Ctrl),A - - INC A ;LD A,1 - OUT (Z84.SIO.Ch_B.Ctrl),A - DEC A ;LD A,0 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,3 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#41 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,4 - OUT (Z84.SIO.Ch_B.Ctrl),A - //LD A,#44 - LD A,#47 - OUT (Z84.SIO.Ch_B.Ctrl),A - - LD A,5 - OUT (Z84.SIO.Ch_B.Ctrl),A - LD A,#E0 - OUT (Z84.SIO.Ch_B.Ctrl),A - -; Инициализация таймера мыши +.mouse: ; Инициализация таймера мыши LD A,#55 OUT (Z84.CTC.Ch_0),A LD A,#2D OUT (Z84.CTC.Ch_0),A - -; Инициализация параллельного порта 1 (принтер) -; для POST-Tester-а -; LD A,#CF ; BITS I/O -; OUT (Z84.PIO.Port_A.Command),A -; XOR A -; OUT (Z84.PIO.Port_A.Command),A ; ALL - out -; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros - -; для printer-a + ; reg 0 + XOR A ;LD A,0 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 4 + LD A,4 + OUT (Z84.SIO.Ch_B.Ctrl),A + ;LD A,#45 + LD A,#40 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 3 + LD A,3 + OUT (Z84.SIO.Ch_B.Ctrl),A + LD A,#41 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 5 + LD A,5 + OUT (Z84.SIO.Ch_B.Ctrl),A + LD A,#E0 + OUT (Z84.SIO.Ch_B.Ctrl),A + ; reg 1 + LD A,1 + OUT (Z84.SIO.Ch_B.Ctrl),A + DEC A ;LD A,0 + OUT (Z84.SIO.Ch_B.Ctrl),A +; Инициализация параллельного порта 1 (принтер) + ; для POST-Tester-а + LD A,#CF ; BITS I/O + OUT (Z84.PIO.Port_A.Command),A + XOR A + OUT (Z84.PIO.Port_A.Command),A ; ALL - out + OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros + ; для printer-a LD A,#0F ; OUT OUT (Z84.PIO.Port_A.Command),A OUT (Z84.PIO.Port_A.Command),A - ; Инициализация параллельного порта 2 (INT/DMA ISA) LD BC,Z84.PIO.Port_B.Command ;только через регистр BC, иначе Альтера перехватит LD A,#CF ; BITS I/O @@ -1046,7 +1038,6 @@ PORTS_INIT: OUT (C),A LD A,#C0 OUT (Z84.PIO.Port_B.Data),A - ; "Заглушение" ковокса XOR A OUT (CBL.SYS_PORT),A @@ -1055,11 +1046,10 @@ PORTS_INIT: .CBL_MUTE: OUT (C),A DJNZ .CBL_MUTE - ; Сброс контроллера дисковода +; Сброс контроллера дисковода ; Включить доступ к контроллеру диска (третья конфа) LD A,CNF_PORT.CNF_3 + ROM.BIOS OUT (SYS_PORT.ROM),A - OUT (FDC_93.DrvCTRL),A push hl pop hl @@ -1073,22 +1063,30 @@ PORTS_INIT: LD A,CNF_PORT.CNF_0 + ROM.BIOS OUT (SYS_PORT.ROM),A ; set HDD1/not-HDD2 - LD A,IDE.Chanel.Primary ;!HARDCODE сделать через метку + LD A,IDE.Chanel.Primary OUT (IDE.Chanel.Set),A - LD BC,#7FFD LD A,#10 OUT (C),A ; BASIC_48 mode LD B,#1F LD A,01 OUT (C),A ; RAM-0 mode !!! - ;Clearing the keyboard buffer + ; + CALL .clean_kbd_buf + JR .clean_mouse_buf +;Clearing the keyboard buffer .clean_kbd_buf: IN A,(Z84.SIO.Ch_A.Ctrl) - AND 1 - RET Z + RRCA + RET NC IN A,(Z84.SIO.Ch_A.Data) JR .clean_kbd_buf +.clean_mouse_buf: + IN A,(Z84.SIO.Ch_B.Ctrl) + RRCA + RET NC + IN A,(Z84.SIO.Ch_B.Data) + JR .clean_kbd_buf ;--------------------------------------- ;-----------------------------------------------------------------------; diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index d2814c9..358a655 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -491,7 +491,7 @@ START: ;LD A,#1C ;CALL READCMS ;PUSH AF - ;LD A,#1B ;!TODO CMOS + ;LD A,CMOS_CELL.HardwareConfiguration ;CALL READCMS ;POP DE ;LD E,A @@ -503,9 +503,9 @@ START: LD A,SYS_PAGE OUT (C),A -; LD (#C13A),DE CONFIG_DE +; LD (SYS_PAGE.CONFIG_DE),DE - LD HL,SYS_PAGE.INT_ADRESS ;EXTENDED INTERRUPT + LD HL,SYS_PAGE.INT_ADRESS ;EXTENDED INTERRUPT XOR A LD (HL),A INC L @@ -891,10 +891,11 @@ RECOVERYstart: PrepareToBOOT: - CALL INT_ON - HALT ; без него не срабатывает зажимание шифта при старте доса для отмены старта system.exe - CALL INT_OFF + ;CALL INT_ON + HALT CALL PORTS_INIT.clean_kbd_buf ;Clearing the keyboard buffer + CALL PORTS_INIT.clean_mouse_buf ;Clearing the mouse buffer + CALL INT_OFF ; тут не должно быть испорчено значение BC CALL G_VALUE LD B,0 diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 095f337fe5416a53447623ae8fb165dedecc51ff..f5332a9dfcabc04f8afc4c87e16b5f1a160a7901 100755 GIT binary patch delta 10705 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 delta 10534 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 C;2s75