diff --git a/Shared_Includes b/Shared_Includes index 93ab939..1535d92 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 93ab93917db326a86a0ffecc02a62f6f6ef7a938 +Subproject commit 1535d92eeecb8aa730ae7fe6eb82e9d32a4acb4d diff --git a/src/bios/BIOS.asm b/src/bios/BIOS.asm index 7a30f22..47a6533 100644 --- a/src/bios/BIOS.asm +++ b/src/bios/BIOS.asm @@ -137,7 +137,9 @@ OUTEND ;--------------------------------------- ; - EXPORT ROM_NUMBER ; !FIXIT part1, part2 для Flasher + ;EXPORT ROM_NUMBER ; !FIXIT part1, part2 для Flasher + EXPORT BOARD_INFO.number + EXPORT BOARD_INFO.type EXPORT BoardID.start EXPORT BoardID.end EXPORT FN_CRIPT.cnf diff --git a/src/bios/BUILD.a80 b/src/bios/BUILD.a80 index ec5991d..14c423a 100644 --- a/src/bios/BUILD.a80 +++ b/src/bios/BUILD.a80 @@ -43,8 +43,6 @@ Set_Block 'ROM free space: ', #4000 ; ;PAGE 1 -; INCBIN 'Build/Bin/LOGO_PAL.BIN' -; INCBIN 'Build/Bin/LOGO_DAT.BIN' INCBIN 'Build/Bin/LOGO.BIN' Set_Block 'LOGO free space: ', #8000 ; @@ -76,7 +74,6 @@ ;PAGE 9-11 (#09, #0A, #0B) Recovery image part 2 INCBIN IMG_RECOVERY,#C000,#C000 DISPLAY "ROM Disk recovery part2, pages 9..11: 2x4000..3x0000" - Set_Block 'Empty space: ', #30000 ; ;PAGE 12-15 (#0C, #0D, #0E, #0F) diff --git a/src/bios/exp/DCP.ASM b/src/bios/exp/DCP.ASM index 3682526..4552b6f 100644 --- a/src/bios/exp/DCP.ASM +++ b/src/bios/exp/DCP.ASM @@ -12,14 +12,13 @@ ; CCED/AAAAAAAAA ; NN1OW116517210 ; FF2SR54 3 -;DCP_DATA: 108 -; ....0..11.1110 -; WORD %00000001101110 ; - адрес -; WORD %00001001101111 ; - маска - 0 изменяемые биты, 1 неизменяемые -; BYTE ACEX.Border_FE ; - порт +; 108 +;DCP_DATA: ....0..11.1110 +; WORD %00000001101110 ; - b13..12 cnf, b11 pent512, b10 dos, b9 r/w, b8..0 адрес +; WORD %00001001101111 ; - маска - 0 изменяемые биты, 1 неизменяемые +; BYTE ACEX.Border_FE ; - порт + -; DCP END MARKER -; DW 0,0,0 ;-----------------------------------------------------------------------; ; ; @@ -135,30 +134,6 @@ DB ACEX.CMOS_DATA.WRITE ; ;---------HDD[v] -/* -Write: -.Data EQU #0150 ; cnf 20 ; HDW_DAT W170 ; #1F0 Data register -.Features EQU #0151 ; cnf 21 ; HDW_ERR W171 ; #1F1 Features register -.Counter EQU #0152 ; cnf 22 ; HDW_CNT P_S_CNT W172 ; #1F2 Counter register -.Sector EQU #0153 ; cnf 23 ; HDW_SEC P_S_NUM W173 ; #1F3 Sector register -.CylinderLow EQU #0154 ; cnf 24 ; HDW_CLL P_C_LOW W174 ; #1F4 Cylinder Low register -.CylinderHigh EQU #0155 ; cnf 25 ; HDW_CLH P_C_HIG W175 ; #1F5 Cylinder High register -.DeviceHead EQU #4152 ; cnf 26 ; HDW_DRV P_HD_CS ; #1F6 Device/Head register -.Command EQU #4153 ; cnf 27 ; HDW_COM P_CMD ; #1F7 Command register -.DeviceControl EQU #4154 ; cnf 28 ; ; #3F6 Device Control register - -Read: -.Data EQU #0050 ; cnf 20 ; HDR_DAT P_DATS R170 ; #1F0 Data register -.Error EQU #0051 ; cnf 21 ; HDR_ERR P_ERR R171 ; #1F1 Error register -.Counter EQU #0052 ; cnf 22 ; HDR_CNT R172 ; #1F2 Counter register -.Sector EQU #0053 ; cnf 23 ; HDR_SEC R173 ; #1F3 Sector register -.CylinderLow EQU #0054 ; cnf 24 ; HDR_CLL R174 ; #1F4 Cylinder Low register -.CylinderHigh EQU #0055 ; cnf 25 ; HDR_CLH R175 ; #1F5 Cylinder High register -.Control EQU #4052 ; cnf 26 ; HDR_DRV R176 ; #1F6 Device/Head register -.Status EQU #4053 ; cnf 27 ; HDR_CTL P_HDST R177 ; #1F7 Status (Control) register -.AltStatus EQU #4054 ; cnf 28 ; ; #3F6 Alternate Status register -.DrvAddress EQU #4055 ; cnf 29 ; ; #3F7 -*/ DW %00'000'0'0100'0000 DW %11'000'0'0110'1111 DB ACEX.IDE_DATA_1F0 @@ -465,7 +440,7 @@ Read: DW %11'010'0'0110'1010 DW %11'010'0'0110'1111 DB ACEX.SLOT3 -; DCP END MARKER + ; DCP END MARKER DW 0,0,0 ;-----------------------------------------------------------------------; ; diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 211311d..697b8c6 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -15,9 +15,12 @@ EXP_START: JP GLOBAL_RESET ;--------------------------------------- -ROM_NUMBER: -.part1: DW MotherBoardID -.part2: DB 0 +;ROM_NUMBER: +;.part1: DW MotherBoardID +;.part2: DB 0 +BOARD_INFO: +.number: DW MotherBoardID +.type: DB MotherBoardType ;--------------------------------------- ;--------------------------------------- @@ -305,20 +308,19 @@ NO_RESTART: OUT (Z84.SIO.Ch_A.Ctrl),A LD A,#62 OUT (Z84.SIO.Ch_A.Ctrl),A - + ; LD A,#CF ; BITS I/O OUT (Z84.PIO.Port_A.Command),A XOR A OUT (Z84.PIO.Port_A.Command),A OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros - ; -инициализация системных портов Z84C15- LD BC,#FF*256 + Z84.SYS.Control XOR A ; Z84.REG.WaitState_Ctrl OUT (C),A ; Z84.SYS.Control INC C ; Z84.REG.WaitState_MemBound OUT (C),A ; Z84.SYS.Data ; set 0 Waits - + ; DEC C LD A,3 ; Z84.REG.Misc_Ctrl OUT (C),A ; Z84.SYS.Control @@ -745,7 +747,7 @@ POST_5_OK: ; SBC HL,BC ;JR Z,set_config ;!TODO активация метки IX:IY из лоадера ;LD IX,ACEX.Config_ID.Sp97_2 - LD HL,ACEX.Config_ID.Sp2000 + LD HL,ACEX.Config_ID.Sp2000 set_config: LD (SYS_PAGE.CONFIG_BYTE),HL ; сохранить номер прошивки ;LD (SYS_PAGE.CONFIG_BYTE),IX ; сохранить номер прошивки @@ -767,14 +769,14 @@ set_config: OUT (RGMOD),A OUT (SLOT3),A OUT (SLOT0),A - LD A,5 + LD A,5 ; !HARDCODE page 5 OUT (SLOT1),A - LD A,2 + LD A,2 ; !HARDCODE page 2 OUT (SLOT2),A ;********************************* ; Don't use stack (SP) before this point if it`s normal booting!!! - LD SP,#BFFE ; Начало использования стека!!! + LD SP,#C000 ; Начало использования стека!!! PUSH HL ; сохранить номер прошивки CALL PORTS_INIT ; инициализировать порты @@ -782,20 +784,7 @@ set_config: OUT (BorderColor),A CALL EMM.CheckColdInit ; инициализация памяти POP HL ; конфигурация - JR Reset_Handler.start -; ************************************* -; Считаем, что вход в SETUP всегда !!! -; ************************************* - -; LD A,H -; CP #FF -; JR NZ,NO_SETUP_1 -; LD A,L - - -; JR NZ,NO_SETUP_2 - -;[---------------------------------------------------------------------] +; JR Reset_Handler.start MODULE Reset_Handler start: DI @@ -908,7 +897,7 @@ init_rom_address EQU #8200 ;!HARDCODE LD BC,RAM_BIOS_PROG.Length LDIR */ -No_Need_To_Load_ZXROMS: +;No_Need_To_Load_ZXROMS: POP AF OUT (SLOT3),A ;-------------------------------------------------------------------------------------------------------------------; diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index 73ba255..a9b460c 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -256,8 +256,7 @@ FN_HDD_READ_NEXT: RET C CALL NEXT_ADD_SEC JR FN_HDD_READ.L1 - - + ; ; HL - BUFER, A - PAGE FN_HDD_READ: AND A @@ -488,7 +487,7 @@ FN_HDD_TEST_IDE: ; Не должна портить регистр E!!! TEST_HDD_DRV: ; EXP_HDD.ASM variant - LD HL,#01FE ; ????? + LD HL,#01FE LD BC,IDE.Write.Counter OUT (C),L IF IDE_Optimization @@ -496,36 +495,36 @@ TEST_HDD_DRV: OUT (C),H ; IDE.Write.Sector ; DEC C - INC B - IN A,(C) ; ????? IDE.Write.Counter+#100 + DEC B + IN A,(C) ; IDE.Read.Counter CP L RET NZ INC C ELSE LD BC,IDE.Write.Sector OUT (C),H - LD BC,IDE.Write.Counter+#100 + LD BC,IDE.Read.Counter IN A,(C) CP L RET NZ - LD BC,IDE.Write.Sector+#100 + LD BC,IDE.Read.Sector ENDIF - IN A,(C) ; ????? IDE.Write.Sector+#100 + IN A,(C) ; IDE.Read.Sector CP H RET ; TEST_HDD_DRV: ; ; EXTENDED.ASM variant -; LD HL,#00FF ;????? +; LD HL,#00FF ; LD BC,IDE.Write.CylinderLow ; OUT (C),L ; IF IDE_Optimization ; INC C -; OUT (C),H ; IDE.Write.CylinderHigh +; OUT (C),H ; IDE.Write.CylinderHigh ; INC B ; DEC C -; IN A,(C) ; ????? Тут регистр BC = #0254 - что за порт такой и что оттуда прочитается? +; IN A,(C) ; Тут регистр BC = #0254 - .CylinderLow ; CP L ; RET NZ ; INC C @@ -533,14 +532,14 @@ TEST_HDD_DRV: ; ELSE ; LD BC,IDE.Write.CylinderHigh ; OUT (C),H -; LD BC,#0254 ;???!!!! +; LD BC,#0254 ; IN A,(C) ; CP L ; RET NZ -; LD BC,#0255 ;???!!!! +; LD BC,#0255 ; ENDIF -; IN A,(C) ; ????? Тут регистр BC = #0255 - что за порт такой и что оттуда прочитается? +; IN A,(C) ; Тут регистр BC = #0255 - .CylinderHigh ; CP H ; RET @@ -628,7 +627,7 @@ FN_HDD_INIT: LD A,IDE.ATA.IdentifyDevice ;!FIXIT переделать OUT (C),A WAIT_HDD - BIT IDE.ControlBit.DataRequest,A + AND IDE.ControlByte.DataRequest ;JR NZ,.L2 SCF RET Z @@ -704,22 +703,21 @@ HD_WAIT: PUSH BC PUSH AF LD DE,0 -HD_WAIT1: - LD BC,IDE.Read.Status +.loop: LD BC,IDE.Read.Status IN A,(C) AND IDE.ControlByte.Busy - JR Z,HD_W_EXIT + JR Z,.EXIT DEC DE LD A,D OR E - JR NZ,HD_WAIT1 + JR NZ,.loop POP AF POP BC POP DE SCF RET -HD_W_EXIT: - POP AF + ; +.EXIT: POP AF POP BC POP DE AND A diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index 8b66404..c3d54ea 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -768,7 +768,7 @@ LP_BEG_P: LP_INI_P: EX AF,AF' EXX - LP_OPEN_PG + LP_OPEN_PG LD A,(WIN_ID_0.USER.MODE) CP #C0 JR NC,LP_INI_NO_ZG ; открытие бордера... @@ -1221,12 +1221,12 @@ LP_MODE_LINE3: ; LD A,#50 OUT (SLOT3),A LD A,L ; вертикальное положение - CP 80H + CP #80 JR NC,LP_EXIT_MODE3 LP_MODE_RECURSE3: LD A,D ; горизонтальное положение - AND 7FH + AND #7F SUB 80 JR C,LP_MODE_LL3 SUB 48 @@ -1238,7 +1238,7 @@ LP_MODE_RECURSE3: LD A,E ; восстановить RRA - AND 3FH + AND #3F SUB C JR NC,LP_EXIT_MODE3 NEG @@ -1248,7 +1248,7 @@ LP_MODE_RECURSE3: LP_MODE_LL3: NEG RRA - AND 3FH + AND #3F CP C JR NC,LP_MODE_LR3 LD C,A diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index 68aa86a..8668e4f 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -1,10 +1,10 @@ ;===================[ Функции распределения памяти ]===================; -; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM +; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM ;!TEST все SLOT2 на SLOT1 ; ;----------------------------------------------------------------------; -; Определение объема памяти. -; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM +; Определение объема памяти. +; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM EMM.GetMemSize: IN A,(SLOT1) LD B,A @@ -32,7 +32,7 @@ EMM.GetMemSize: ; ;----------------------------------------------------------------------; -; Инициализация распределения памяти. +; Инициализация распределения памяти. EMM.InitMem: PUSH BC PUSH HL @@ -42,7 +42,7 @@ EMM.InitMem: LD C,A LD A,SYS_PAGE OUT (SLOT3),A - LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 ; Адрес FAT ОЗУ. + LD HL,SYS_PAGE.RAMD_FAT ; Адрес RAM FAT в ОЗУ. ; обнуляем таблицу XOR A .loopFree: @@ -50,7 +50,7 @@ EMM.InitMem: INC L JR NZ,.loopFree ; резервируем спец.страницы и страницы ZX - LD B,RESERVED_PAGES.Blocks + LD B,RESERVED_PAGES.Blocks LD DE,RESERVED_PAGES ; таблица занятых системных страниц .loop: LD A,(DE) CP #FF @@ -63,10 +63,10 @@ EMM.InitMem: CP #FF JR NZ,.loopBlk .exitLoop: - INC DE - DJNZ .loop - LD L,A - LD (HL),A + INC DE + DJNZ .loop + LD L,A + LD (HL),A ; Инициализация ключей RAM-Disks XOR A LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 @@ -89,27 +89,27 @@ EMM.InitMem: RET ;---------------------------------------------------------------------[] RESERVED_PAGES: - ; [x] Block #1 - можно освободить по ID 1 + ; [x] Block #1 - можно освободить по ID 1 DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; for Spectrum ;!FIXIT страницы 16..31 не зарезервированы, но используются в Pentagon 512 - ; + ; ; эмулятор ПЗУ ;!FIXIT ROM-Emulator сделать динамические страницы DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION DB #FF ; End of the block ; ; - ;; Block #2 - нельзя освобождать - DB 0,2,5 ; for Spectrum and BIOS starting + ;; Block #2 - нельзя освобождать + DB 0,2,5 ; for Spectrum and BIOS starting DB DCP_PAGE ; Ports map DB Spec_Page ; Page for Spectrum mode - ; Screen pages + ; Screen pages DB #50,#51,#52,#53,#54,#55,#56,#57 - DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F - ; + DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F + ; ;DB MODE_PAGE ; ????? - DB CBL.BUFFER_PAGE ; Page for CBL audio - DB SYS_PAGE ; Page for system (BIOS) variables - DB #FF ; End of the block + DB CBL.BUFFER_PAGE ; Page for CBL audio + DB SYS_PAGE ; Page for system (BIOS) variables + DB #FF ; End of the block ; .Blocks EQU 2 ;----------------------------------------------------------------------; @@ -119,10 +119,10 @@ RESERVED_PAGES: ; ;----------------------------------------------------------------------; -; Получить блок памяти N bytes, -; Вход: B - число необходимых блоков -; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки -; CF - признак ошибки +; Получить блок памяти N bytes, +; Вход: B - число необходимых блоков +; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки +; CF - признак ошибки ;EMM_FN2M: EMM.GetMem: ;PUSH DE @@ -141,7 +141,7 @@ EMM.GetMem: JR NZ,.loop DJNZ .loop - ; Место есть ! + ; Место есть ! LD B,C ; Восстановить нужный объем диска LD C,#FF ; МЕТКА КОНЦА RAM-Disk LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 @@ -155,7 +155,7 @@ EMM.GetMem: LD C,L DJNZ .loop2 - ; L - указатель цепочки. + ; L - указатель цепочки. EX AF,AF' OUT (SLOT3),A LD A,L @@ -179,10 +179,10 @@ EMM.GetMem: ; ;----------------------------------------------------------------------; -; Получить блок памяти N bytes, для RAM-Disk A -; Вход: B - число необходимых блоков, A - RAM-Disk -; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки -; CF - признак ошибки +; Получить блок памяти N bytes, для RAM-Disk A +; Вход: B - число необходимых блоков, A - RAM-Disk +; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки +; CF - признак ошибки ;EMM.GetMem: EMM.GetMemRMD: PUSH AF @@ -194,7 +194,7 @@ EMM.GetMemRMD: CALL BLK_TO_RAMD RET NC .error2: - LD L,2 ; RAM-Disk занят ;!TODO перечислить все варианты ошибок и их номера как для ДСС + LD L,2 ; RAM-Disk занят ;!TODO перечислить все варианты ошибок и их номера как для ДСС LD A,L RET .error1: @@ -208,8 +208,8 @@ EMM.GetMemRMD: ;----------------------------------------------------------------------; -; Освободить блок памяти ключа K -; Вход: A - КЛЮЧ RAM-Disk +; Освободить блок памяти ключа K +; Вход: A - КЛЮЧ RAM-Disk EMM.FreeMemRMD: CALL GET_RAMD_ST RET C @@ -227,8 +227,8 @@ EMM.FreeMemRMD: LD A,C ;JR EMM.FreeMem ;------[ -; Освободить блок памяти -; Вход: A - НАЧАЛО ЦЕПОЧКИ +; Освободить блок памяти +; Вход: A - НАЧАЛО ЦЕПОЧКИ ; НЕ ПОРТИТЬ DE!!! ;EMM_FN3M: EMM.FreeMem: @@ -274,19 +274,19 @@ EMM_FN3M_ERR: ; WARNING!!! не трогать DE ;----------------------------------------------------------------------; -; Получить страницу N ключа K -; Вход: A - КЛЮЧ RAM-Disk, B - номер страницы -; Выход: A - страница +; Получить страницу N ключа K +; Вход: A - КЛЮЧ RAM-Disk, B - номер страницы +; Выход: A - страница EMM.GetMemPageRMD: CALL GET_RAMD_ST RET C SCF RET Z ;JR EMM.GetMemPage -;------[ -; Получить страницу N блока K -; Вход: A - блок, B - номер страницы -; Выход: A - страница, IF CF - A=0 - нет блока, A=FF - END +;------[ +; Получить страницу N блока K +; Вход: A - блок, B - номер страницы +; Выход: A - страница, IF CF - A=0 - нет блока, A=FF - END ;EMM_FN4M: EMM.GetMemPage: LD L,A @@ -327,9 +327,9 @@ EMM_F4M_END: ; ;----------------------------------------------------------------------; -; Получить следующую страницу по FAT -; Вход: A - страница ОЗУ -; Выход: A - следующая страница ОЗУ +; Получить следующую страницу по FAT +; Вход: A - страница ОЗУ +; Выход: A - следующая страница ОЗУ ;EMM_FN5: EMM.GetMemPageNext: LD L,A @@ -357,9 +357,9 @@ EMM.GetMemPageNext: ; ;----------------------------------------------------------------------; -; Получить список страниц блока в HL -; Вход: A - блок, HL - адрес буфера - 256 байт. -; Выход: HL - адрес блока, B - длина блока в страницах ОЗУ +; Получить список страниц блока в HL +; Вход: A - блок, HL - адрес буфера - 256 байт. +; Выход: HL - адрес блока, B - длина блока в страницах ОЗУ ;EMM_FN5M: EMM.GetMemBlkPages: PUSH DE @@ -433,17 +433,17 @@ EMM.GetMemBlkPages: ; ;----------------------------------------------------------------------; !FIXIT SAFE_RGADR ;RAMD_R_W: -; ╔════════════════════════════════════════════════╗ -; ║ RD/WR SECTOR ║\ -; ║ HL - BUFER ║\ -; ║ DE - ABS sector в 256b блоках ║\ -; ║ B - число данных в 256b блоках ║\ -; ║ A - block RAM ║\ -; ║ A' - команда чтение/запись/чтение ROM Disk ║\ -; ║ 0 - read, 255 - write, 70 - read ROM DISK ║\ -; ║ ** NOT USED TR-DOS VARS ** ║\ -; ╚════════════════════════════════════════════════╝\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +; ╔════════════════════════════════════════════════╗ +; ║ RD/WR SECTOR ║\ +; ║ HL - BUFER ║\ +; ║ DE - ABS sector в 256b блоках ║\ +; ║ B - число данных в 256b блоках ║\ +; ║ A - block RAM ║\ +; ║ A' - команда чтение/запись/чтение ROM Disk ║\ +; ║ 0 - read, 255 - write, 70 - read ROM DISK ║\ +; ║ ** NOT USED TR-DOS VARS ** ║\ +; ╚════════════════════════════════════════════════╝\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BLK_RD_WR: AND A SCF @@ -453,42 +453,42 @@ BLK_RD_WR: INC B DEC B RET Z - ; - ; сохраняем состояние прерываний - LD C,A - LD A,R - PUSH AF + ; + ; сохраняем состояние прерываний + LD C,A + LD A,R + PUSH AF ; сохраняем PORT_Y IN A,(PORT_Y) PUSH AF LD A,#C0 OUT (PORT_Y),A ; - LD A,C - DI - CALL .start - EX AF,AF' - ; восстанавливаем PORT_Y + LD A,C + DI + CALL .start + EX AF,AF' + ; восстанавливаем PORT_Y POP AF OUT (PORT_Y),A ; восстанавливаем состояние прерываний - POP AF - JP PO,.noInterrupts - EI + POP AF + JP PO,.noInterrupts + EI .noInterrupts: EX AF,AF' RET - ; - + ; + .start: EX AF,AF' - AND A ; 0 - read + AND A ; 0 - read JR Z,.reset_Z - CP #FF ; write + CP #FF ; write JR Z,.keep_Z - CP 5 ; old read + CP 5 ; old read JR Z,.reset_Z - CP 6 ; old write + CP 6 ; old write JR Z,.keep_Z CP #46 @@ -499,19 +499,19 @@ BLK_RD_WR: RET .reset_Z: - INC A ; set Z for WRITE + INC A ; set Z for WRITE .keep_Z: EX AF,AF' - ; + ; PUSH HL PUSH BC LD C,SLOT1 IN B,(C) - LD H,A + LD H,A LD A,SYS_PAGE OUT (SLOT1),A - LD A,H + LD A,H LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,A @@ -562,7 +562,7 @@ BLK_RD_WR: RES 7,D SET 6,D -.BLK_CONT1: ; DE - RamDisk, HL - data +.BLK_CONT1: ; DE - RamDisk, HL - data EX AF,AF' JR Z,.NO_EX_RW1 ; WRITE EX DE,HL ; for READ @@ -574,7 +574,7 @@ BLK_RD_WR: DUP 16 LDI EDUP - + DEC A JR NZ,.BLK_LL1 @@ -582,7 +582,7 @@ BLK_RD_WR: JR Z,.NO_EX_RW2 ; WRITE EX DE,HL ; for READ .NO_EX_RW2: - EX AF,AF' ; DEC C прокрутился 256 раз и вернулся + EX AF,AF' ; DEC C прокрутился 256 раз и вернулся INC B ; B уже уменьшился на 1, DEC B JP Z,.BLK_EXIT_1 @@ -628,7 +628,7 @@ BLK_RD_WR: .BLK_EXIT_1: LD A,D - DEC A + DEC A RLCA LD A,C JR C,.BLK_EXIT_2 @@ -645,19 +645,19 @@ BLK_RD_WR: ; ;----------------------------------------------------------------------; - ;**************************************** - ;!!!!! READ_ROM_PAGE_X чтение последних - ; 256 байтов ПЗУ в служебную страницу зачем-то - ; READ_ROM_PAGE_X: - ; LD DE,0 - ; LD BC,#100 ; один сектор - ; PUSH DE - ; PUSH BC - ; LD HL,#3F00 - ; LD DE,#FF00 - ; LD A,#1F ; last page ROM - ; JR ROM_DISK.loopRead - ;**************************************** + ;**************************************** + ;!!!!! READ_ROM_PAGE_X чтение последних + ; 256 байтов ПЗУ в служебную страницу зачем-то + ; READ_ROM_PAGE_X: + ; LD DE,0 + ; LD BC,#100 ; один сектор + ; PUSH DE + ; PUSH BC + ; LD HL,#3F00 + ; LD DE,#FF00 + ; LD A,#1F ; last page ROM + ; JR ROM_DISK.loopRead + ;**************************************** ; Чтение с ROM-Disk ; HL - адрес, куда читать @@ -665,10 +665,10 @@ BLK_RD_WR: ; B - число секторов ; A' - размер сектора (1 - 256b, 2 - 512 b) ROM_DISK: - ; сохраняем состояние прерываний - ;LD A,R + ; сохраняем состояние прерываний + ;LD A,R EX AF,AF' - LD C,0 ; счетчик + LD C,0 ; счетчик DEC A JR Z,.loop ;JR Z,.start @@ -682,18 +682,18 @@ ROM_DISK: LD A,B ADD A,A LD B,A - ;!!!!! + ;!!!!! RET C - DI - CALL .loop -; ; восстанавливаем состояние прерываний + DI + CALL .loop +; ; восстанавливаем состояние прерываний ; EX AF,AF' -; JP PO,.noInterrupts -; EI +; JP PO,.noInterrupts +; EI ; .noInterrupts: ; EX AF,AF' -; ; +; ; RET C AND A RR D @@ -702,39 +702,39 @@ ROM_DISK: RET ; .start: -; DI -; CALL .loop -; ; восстанавливаем состояние прерываний +; DI +; CALL .loop +; ; восстанавливаем состояние прерываний ; EX AF,AF' -; JP PO,.noInterrupts2 -; EI +; JP PO,.noInterrupts2 +; EI ; .noInterrupts2: ; EX AF,AF' -; ; -; RET +; ; +; RET -.loop: PUSH DE ; номер сектора +.loop: PUSH DE ; номер сектора PUSH BC LD A,E AND #3F ; ADRESS in ROM-Page - PUSH AF ; сохранить адрес + PUSH AF ; сохранить адрес - EX DE,HL ; DE - адрес буфера + EX DE,HL ; DE - адрес буфера ADD HL,HL - ADD HL,HL ; H - номер банки + ADD HL,HL ; H - номер банки LD A,(ROM_DISK.Pages.Number) INC H CP H LD L,H - LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages! - LD A,(HL) ; PAGE-ROM + LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages! + LD A,(HL) ; PAGE-ROM - POP HL ; восстановить адрес в ROM-Page - LD L,0 ; если далеко захотели - выход с ошибкой - JR C,.errorExit ; ROM-Disk-end + POP HL ; восстановить адрес в ROM-Page + LD L,0 ; если далеко захотели - выход с ошибкой + JR C,.errorExit ; ROM-Disk-end ; DE - буфер ; HL - адрес в ROM ; B - число секторов @@ -757,37 +757,37 @@ ROM_DISK: ; DE - next address ; HL - ROM address .readNext: - POP BC ; число секторов + POP BC ; число секторов - INC C ; счетчик считанных секторов - DEC B ; сектора кончились? + INC C ; счетчик считанных секторов + DEC B ; сектора кончились? - JR Z,.normExit - BIT 6,H ; чтение не закончено + JR Z,.normExit + BIT 6,H ; чтение не закончено - PUSH BC ; сохранить счетчики - JR Z,.loopRead ; читать дальше - POP BC + PUSH BC ; сохранить счетчики + JR Z,.loopRead ; читать дальше + POP BC - POP HL ; номер сектора + POP HL ; номер сектора - LD A,B - LD B,0 - ADD HL,BC - LD B,A ; вычислить след.сектор + LD A,B + LD B,0 + ADD HL,BC + LD B,A ; вычислить след.сектор - EX DE,HL ; теперь HL - адрес, DE сектор, B - сколько еще читать + EX DE,HL ; теперь HL - адрес, DE сектор, B - сколько еще читать - JP .loop ; начать все снова! + JP .loop ; начать все снова! ; чтение закончено .normExit: POP HL ; сектор, откуда велось чтение ADD HL,BC ; по возврату: HL - след.адрес - EX DE,HL ; DE - след.сектор + EX DE,HL ; DE - след.сектор AND A RET ; ошибка -.errorExit: ; !TODO сделать, чтоб на выходе показывалось количество прочитанных секторов +.errorExit: ; !TODO сделать, чтоб на выходе показывалось количество прочитанных секторов POP BC POP DE SCF @@ -814,8 +814,8 @@ ROM_DISK: ; ;----------------------------------------------------------------------; -; вход: DE - ram_disk trk_sec, A - RAM-Disk -; выход: HL - адрес, A - page +; вход: DE - ram_disk trk_sec, A - RAM-Disk +; выход: HL - адрес, A - page RAMD_CALC_PAGE: CP 16 CCF @@ -843,32 +843,32 @@ RAMD_CALC_PAGE: ; ;----------------------------------------------------------------------; -; Вход: -; A - RAM Disk ID -; Выход: -; A - Number (0..15) +; Вход: +; A - RAM Disk ID +; Выход: +; A - Number (0..15) GET_RAMD_NUM: - EX AF,AF' - IN A,(SLOT1) - EX AF,AF' - LD BC,SYS_PAGE * 256 + SLOT1 - OUT (C),B + EX AF,AF' + IN A,(SLOT1) + EX AF,AF' + LD BC,SYS_PAGE * 256 + SLOT1 + OUT (C),B - LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000 - LD BC,SYS_PAGE.RAMD_KEYS.NUM - CPIR + LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000 + LD BC,SYS_PAGE.RAMD_KEYS.NUM + CPIR - EX AF,AF' - OUT (SLOT1),A - EX AF,AF' + EX AF,AF' + OUT (SLOT1),A + EX AF,AF' - SCF - RET PE + SCF + RET PE - DEC L - LD A,L - SUB low SYS_PAGE.RAMD_KEYS - RET + DEC L + LD A,L + SUB low SYS_PAGE.RAMD_KEYS + RET ;----------------------------------------------------------------------; ; @@ -876,12 +876,12 @@ GET_RAMD_NUM: ; ;----------------------------------------------------------------------; ; [x] 04/11/2023 -; Вход: -; B = 0: swap to Sp +; Вход: +; B = 0: swap to Sp ; B = #FF: swap to ZX ; B = #FE: no swap, only get info -; Выход: -; A - current RAM Drives set +; Выход: +; A - current RAM Drives set SWAP_RAM_DRIVES: IN A,(SLOT3) EX AF,AF' @@ -928,7 +928,7 @@ SWAP_RAM_DRIVES: ; ;----------------------------------------------------------------------; -; на выходе при А = 0 должен быть установлен флаг Z +; на выходе при А = 0 должен быть установлен флаг Z ; не убивает DE и BC GET_RAMD_ST: CP SYS_PAGE.RAMD_KEYS.NUM @@ -959,7 +959,7 @@ GET_RAMD_ST: ; ;----------------------------------------------------------------------; -; RAM-Disk A, BLK - B +; RAM-Disk A, BLK - B BLK_TO_RAMD: CP SYS_PAGE.RAMD_KEYS.NUM CCF diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index 4b6e078..4f02b82 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -391,39 +391,36 @@ REINIT: DEC B ; ;[x] -.Restart: - DI - LD A,0 - LD BC,#1FFD - OUT (C),A - LD B,#7F - OUT (C),A - LD A,#40 - OUT (SLOT3),A - LD A,5 - OUT (SLOT1),A - LD A,2 - OUT (SLOT3),A - LD A,0 - OUT (SLOT0),A - OUT (RGADR),A - OUT (RGMOD),A - JP 0 ;Restart +.Restart: DI + XOR A + LD BC,#1FFD + OUT (C),A + LD B,#7F + OUT (C),A + OUT (RGADR),A + OUT (RGMOD),A + OUT (SLOT0),A + LD A,5 + OUT (SLOT1),A + LD A,2 + OUT (SLOT2),A + LD A,DCP_PAGE + OUT (SLOT3),A + JP 0 ;Restart ; ; -.SoftReset: - DI - LD A,#10 - LD BC,#1FFD - OUT (C),A ; 8-я страница !! - - LD A,RESET_PAGE - OUT (SLOT3),A - LD A,CNF_PORT.TURBO.OFF - OUT (SYS_PORT.ROM),A -.loop2: LD (#C000),A ; Soft RESET !!! - JR .loop2 +.SoftReset: DI + LD A,#10 + LD BC,#1FFD + OUT (C),A ; 8-я страница !! + ; + LD A,RESET_PAGE + OUT (SLOT3),A + LD A,CNF_PORT.TURBO.OFF + OUT (SYS_PORT.ROM),A +.loop2: LD (#C000),A ; Soft RESET !!! + JR .loop2 ; ;----------------------------------------------------------------------; ; diff --git a/src/bios/exp/FUNC_SYS.ASM b/src/bios/exp/FUNC_SYS.ASM index d7ecba1..048d26c 100644 --- a/src/bios/exp/FUNC_SYS.ASM +++ b/src/bios/exp/FUNC_SYS.ASM @@ -63,8 +63,8 @@ FN_CRIPT: ; BoardID_start old address #312A ; BoardID_end old address #312D .board_id: - LD HL,(ROM_NUMBER.part1) ;rdlow-ok - LD A,(ROM_NUMBER.part2) ;rdlow-ok + LD HL,(BOARD_INFO.number) ;rdlow-ok + LD A,(BOARD_INFO.type) ;rdlow-ok LD BC,(BoardID.start) ;rdlow-ok LD DE,(BoardID.end) ;rdlow-ok AND A diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index bf57cd8..ac308ed 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -811,7 +811,7 @@ RESCREEN: ;R06 ; LD E,A ; LD A,DCP_PAGE ; OUT (SLOT3),A - ; LD A,(#C400) ;c400 for first cfg 50176 ; !TODO можно переделать на вызов функции биоса + ; LD A,(#C400) ;c400 for first cfg 50176 ; LD D,A ; LD A,ACEX.HOLD ; LD (#C400),A @@ -1142,30 +1142,64 @@ PIDNUM: LD HL,memBUFFER.ID CALL PRINTZ RET -PIDBOARD: - CALL FN_CRIPT.board_id +PIDBOARD: CALL FN_CRIPT.board_id + ; + IF MotherBoardType > 0 + PUSH AF + ENDIF + PUSH DE + PUSH HL + PUSH BC + LD A,B + CALL PRNHEX + LD A,'-' + CALL PRINT_CHAR + POP BC + LD A,C + CALL PRNHEX + LD A,'-' + CALL PRINT_CHAR + POP HL + CALL IZPRINT + POP DE + PUSH DE + LD A,D + CALL PRNHEX + POP DE + LD A,E + IF MotherBoardType == 0 + JP PRNHEX + ELSE + CALL PRNHEX + LD A,' ' + CALL PRINT_CHAR + POP AF + ; type 0 - Classic + RET Z + ; type 1 - DX + LD HL,.ver_DX + DEC A + JP Z,PRINTZ + ; type 2 - DP + LD HL,.ver_DP + DEC A + JP Z,PRINTZ + ; type 3 - Max + LD HL,.ver_Max + DEC A + JP Z,PRINTZ + ; type 4 - test + LD HL,.Test + DEC A + JP Z,PRINTZ + RET + ; +.ver_DX: DZ "DX" +.ver_DP: DZ "DP" +.ver_Max: DZ "Max" +.Test DZ "0123456789A" + ENDIF - PUSH DE - PUSH HL - PUSH BC - LD A,B - CALL PRNHEX - LD A,'-' - CALL PRINT_CHAR - POP BC - LD A,C - CALL PRNHEX - LD A,'-' - CALL PRINT_CHAR - POP HL - CALL IZPRINT - POP DE - PUSH DE - LD A,D - CALL PRNHEX - POP DE - LD A,E - JP PRNHEX CNF_VER_PRINT: LD HL,memBUFFER.ID diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index 522133d..3e0ee1f 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -259,7 +259,7 @@ SHOW_LOGO: LD IX,win_descriptor.tab320x256 SAFE_PORTY DI - LD A,1 + LD A,SYS_PORT.PAGE0 OUT (SYS_PORT.ON),A OUT (ROM.SLOT0),A @@ -283,21 +283,12 @@ SHOW_LOGO: LD IX,win_descriptor.tab320x256 SAFE_PORTY DI - LD A,1 + LD A,SYS_PORT.PAGE0 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 diff --git a/src/bios/shared/VERSION.inc b/src/bios/shared/VERSION.inc index ac1fed3..1fda053 100644 --- a/src/bios/shared/VERSION.inc +++ b/src/bios/shared/VERSION.inc @@ -14,6 +14,7 @@ BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD DEFINE BoardID_start #5283 DEFINE BoardID_end #47E8 DEFINE MotherBoardID #0000 + DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max ;======================================= ;============[For ROM part]============= ;!FIXIT вы не понимаете, это другое))