diff --git a/Crazy BIOS/BUILD.a80 b/Crazy BIOS/BUILD.a80 index 0917a1d..0875bcb 100644 --- a/Crazy BIOS/BUILD.a80 +++ b/Crazy BIOS/BUILD.a80 @@ -1,6 +1,7 @@ - INCLUDE 'shared/defines.inc' + INCLUDE 'shared/defines.inc' + INCLUDE 'Crazy BIOS/shared/CompMacro.asm' - DEFINE IMG_RECOVERY 'crazy bios/shared/cb_sys.img' + DEFINE IMG_RECOVERY 'crazy bios/shared/cb_boot.img' ; ;[--------------------------------------------------------------------------] MACRO Set_Block text, blk_addr @@ -11,9 +12,13 @@ ;[--------------------------------------------------------------------------] ORG 0 DISPLAY '[ Building CB_IMG file ]' - OUTPUT 'Build/CB_BIOS.RAW' + OUTPUT 'Build/CB_BIOS.IMG' ;[--------------------------------------------------------------------------] +; Zero Sector + SET_IMG_LABEL + BLOCK 512 - $,#FF ; + ORG 0 ;PAGE #46 BIOS INCBIN 'Build/Bin/EXP.BIN' Set_Block 'EXP free space: ', #4000 @@ -30,7 +35,12 @@ ;PAGE #4B LOGO INCBIN 'Build/Bin/LOGO.BIN' - Set_Block 'LOGO free space: ', #14000 + Set_Block 'LOGO free space: ', #14000 +;DEBUG + IF DEBUG + INCLUDE './crazy/debug.asm' + Set_Block 'LOGO free space: ', #14200 + ENDIF ;[--------------------------------------------------------------------------] OUTEND DISPLAY '[_____________Building CB_IMG file done!_____________]' diff --git a/Crazy BIOS/exp/EXP.asm b/Crazy BIOS/exp/EXP.asm index ee840cd..085d7aa 100644 --- a/Crazy BIOS/exp/EXP.asm +++ b/Crazy BIOS/exp/EXP.asm @@ -2,11 +2,26 @@ ; ;************************************************************* ; -; EXPANSION VER 3.00 (C) Peters Plus Ltd. -; EXPANSION VER 3.1 (C) Sprinter Team +; EXPANSION VER 3.00 (C) Peters Plus Ltd. +; EXPANSION VER > 3.04 (C) Sprinter Team ; ;************************************************************* +; DEBUG + MACRO FLASH_LIGHT + LD E,8 + LD A,SYS_PORT.TURBO.OFF +.big_loop: LD BC,0 + OUT (CNF_PORT.vBIOS),A +.loop: DEC BC + INC B + DJNZ .loop + XOR 1 + DEC E + JR NZ,.big_loop + ENDM + + ;*************************************** ;*********** BEGIN EXPANSION *********** ;*************************************** @@ -35,7 +50,7 @@ BOARD_INFO: EXP_FNS_2_RET: PUSH AF LD A,vROM.BIOS - OUT (CNF_PORT.vBIOS),A + OUT (CNF_PORT.vZX_ROM),A POP AF JR RST_18_1 ;======================================= @@ -109,21 +124,13 @@ TABLE_X: ; ;======================================= -RESTARTS EQU #FFE0 -GLOBAL_RESET: - DI - IM 1 - LD HL,RESTARTS - LD DE,RESTARTS_PROG - LD B,RESTARTS_PROG.Size -.compare: - LD A,(DE) - CP (HL) - JR NZ,NO_RESTART - INC HL - INC DE - DJNZ .compare - JP RESTARTS +;RESTARTS EQU #FFE0 +; GLOBAL_RESET: +; DI +; ; +; FLASH_LIGHT +; ; +; JR NO_RESTART ;======================================= _mInfoBLOCK #66-$,0 NMI_Point: @@ -142,7 +149,6 @@ NMI_Point: ; IN B,(C) ; CALL SET_ROM_PAGES+#C000 ; JP NO_SUMX_EQ - ;********************************** ;BEEP: @@ -209,7 +215,9 @@ BoardID: ; ;-----[перехват RESET не состоялся]----- -NO_RESTART: +GLOBAL_RESET: + DI + IM 1 ; стек ещё не используем!!! LD SP,IX ; сохранить значение переданное загрузчиком конфы (если старт после ресета) ; инициализация внутренних портов Z84C15 для POST-Tester-а @@ -534,6 +542,8 @@ POST_5_OK: ; ********************************** ENDMODULE + ;FLASH_LIGHT + MODULE SET_CONFIG_ID IN A,(SLOT3) @@ -544,6 +554,7 @@ POST_5_OK: LD A,SYS_PAGE OUT (SLOT3),A + ;-------------[Save IX:IY]-------------- ; Don't use IY before this point if it`s normal booting!!! LD IX,0 @@ -1001,23 +1012,6 @@ RES128_PROG: LEN_RES128 EQU $-RES128_PROG ;-----------------------------------------------------------------------; -;-------------------------------[ #FFE0 ]-------------------------------; -; программа, которая будучи размещенной в #40 странице, -; с адреса RESTARTS, перехватывает RESET -RESTARTS_PROG: ; !TODO LDConf перехват ресета на любой конфе после hardreset - LD HL,RESTARTS - LD B,16 -.loop: - LD (HL),0 - INC HL - DJNZ .loop - NOP - NOP -.Size EQU $-RESTARTS_PROG - ; LD A,1 - ; OUT (SLOT3),A -;-----------------------------------------------------------------------; - ;----------------------------[Setup Starter]----------------------------; MODULE Setup_Starter ; программа, размещаемая по адресу #C000 @@ -1359,11 +1353,11 @@ kbd_loop2: _mInfoALIGN 256,#FF ; BLOCK #3F00-$,#FF ROM_DISK.Pages.Number: - BYTE ROM_DISK.Pages.Size ; число страниц + DB ROM_DISK.Pages.Size ; число страниц ; у страниц выставлен bit4 для корректной подстановки ;(подробнее в sp2000.inc - Порт управления страницами ПЗУ) ROM_DISK.Pages: ; страницы ROM-Disk - ABYTE #10 #05,#06,#07,#09,#0A,#0B ; 98304 bytes + DB 0,#10 ; значения для 7FFD соответствуют страницам #48,#49 out (#24),1 : 1ffd = 0. .Size EQU $-ROM_DISK.Pages ;-----------------------------------------------------------------------; ;#######################################################################; diff --git a/Crazy BIOS/rom/SETUP/MAIN.asm b/Crazy BIOS/rom/SETUP/MAIN.asm index 3bedb02..711c6d4 100644 --- a/Crazy BIOS/rom/SETUP/MAIN.asm +++ b/Crazy BIOS/rom/SETUP/MAIN.asm @@ -667,12 +667,13 @@ INFO_MESSAGE: CALL TSETUP ;!TODO может пихнуть её на прерывания? CALL CONFIGURE_IDE_DRIVES.START - CALL CTRLKEY - LD A,B - ; [x] 05/07/2024 - BIT X_CTRL,A - LD BC,#FFFF ; маркер для PrepareToBOOT, чтоб грузил Recovery - JR NZ,RECOVERY_BOOT + ; CALL CTRLKEY + ; LD A,B + ; ; [x] 05/07/2024 + ; BIT X_CTRL,A + ; LD BC,#FFFF ; маркер для PrepareToBOOT, чтоб грузил Recovery + ; JR NZ,RECOVERY_BOOT + JR RECOVERY_BOOT ; BIT X_ALT,A JR NZ,ALT_BOOT @@ -689,16 +690,16 @@ RECOVERY_BOOT: ; CALL INT_ON ALT_BOOT: - LD A,msgStrings.bootAltDrv - LD E,COLORS.CGA.INC.LGREEN - CALL POSTMSC + ; LD A,msgStrings.bootAltDrv + ; LD E,COLORS.CGA.INC.LGREEN + ; CALL POSTMSC - LD BC,CMOS_CELL.BootDrives.Mask.AltSysDisk ;#7010 - CALL PrepareToBOOT - LD A,msgStrings.bootFail - LD E,COLORS.CGA.INC.LRED - CALL C,POSTMSC - CALL ScreenPOS.CRLF + ; LD BC,CMOS_CELL.BootDrives.Mask.AltSysDisk ;#7010 + ; CALL PrepareToBOOT + ; LD A,msgStrings.bootFail + ; LD E,COLORS.CGA.INC.LRED + ; CALL C,POSTMSC + ; CALL ScreenPOS.CRLF ;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D @@ -864,11 +865,6 @@ RESCREEN: ;R06 RECOVERYstart: LD A,msgStrings.bootRecovery CALL POSTMSG - ; - - ; Выбор рамдиска для рекавери - _mRECOVERYrdChooseTYPE RECOVERYrdChooseTYPE - ; прибиваем последний рамдиск, если занят .killRAMdisk: LD A,SYS_PAGE.RAMD_KEYS.NUM-1 LD (.RDkey),A @@ -876,6 +872,7 @@ RECOVERYstart: JR NC,.setRAMdisk JR Z,.setRAMdisk RET ; непонятная ошибка - выходим + ; .setRAMdisk: LD A,(.RDkey) LD B,ROM_DISK.Pages.Size CALL EMM.GetMemRMD @@ -883,15 +880,69 @@ RECOVERYstart: DEC A JR Z,.FreeMem ; ошибка - недостаточно памяти, вызываем очистку памяти RET ; непонятная ошибка - выходим + ; .FreeMem: CALL EMM.FullInit JR .killRAMdisk ; ; Вход: A - RAM block ID -.IMGread: - ; Вариант копирования ROM -> RAM disk - _mRECOVERYmountTYPE RECOVERYmountTYPE -; +.IMGread: LD HL,TEMP + CALL EMM.GetMemBlkPages ; кидаем в буфер номера страниц RAM disk + + IN A,(SLOT3) + LD (.slot3save),A + ; + LD HL,ROM_DISK.Pages.Number + LD B,0 + LD C,(HL) + INC C + LD DE,TEMP+ROM_DISK.Pages.Size + LDIR ; кидаем дальше в буфер номера страниц ROM disk + ; + LD A,CNF_PORT.EXTENSION + OUT (CNF_PORT.vZX_ROM),A + LD BC,#1FFD + DEC A + OUT (C),A + ; + LD IY,TEMP+ROM_DISK.Pages.Size ; ROM_DISK.Pages.Number + LD IX,TEMP + LD B,(IY+0) + + LD A,R + PUSH AF + DI + ; +.loopIMGtoRAM: PUSH BC + INC IY + LD A,(IY+0) + LD BC,#7FFD + OUT (C),A + LD A,(IX+0) + OUT (SLOT3),A + INC IX + + LD HL,0 + LD DE,#C000 + LD BC,#4000 + LDIR + + POP BC + DJNZ .loopIMGtoRAM + ; + XOR A + LD BC,#7FFD + OUT (C),A + OUT (CNF_PORT.vBIOS),A + LD B,#1F + LD A,2 + OUT (C),A +.slot3save+*: LD A,0 + OUT (SLOT3),A + POP AF + JP PO,.noInterrupts + EI +.noInterrupts: ; ;Exit from "ROM Disk to RAM disk" procedure .RDkey+*: LD A,0 OR DRIVE_CODES.SPRINTER.RAM @@ -908,121 +959,122 @@ PrepareToBOOT: ;CALL INT_ON CALL INT_OFF ; тут не должно быть испорчено значение BC ; [x] 05/07/2024 - INC BC - LD A,B - OR C - JP Z,RECOVERYstart - DEC BC + ; INC BC + ; LD A,B + ; OR C + ; JP Z,RECOVERYstart + ; DEC BC ; - CALL G_VALUE - LD B,DRIVE_CODES.SPRINTER.FDD + ; CALL G_VALUE + ; LD B,DRIVE_CODES.SPRINTER.FDD ; FDD - OR A - JR Z,FDSTART ; FDD A: - INC B - DEC A - JR Z,FDSTART ; FDD B: - ; IDE - LD B,DRIVE_CODES.SPRINTER.HDD - DEC A - JR Z,HDSTART - INC B ;LD B,#81 - DEC A - JR Z,HDSTART - INC B ;LD B,#82 - DEC A - JR Z,HDSTART - INC B ;LD B,#83 - DEC A - JR Z,HDSTART - ; RAM - DEC A - JR Z,RDSTART - ; ROM - DEC A - JP Z,RECOVERYstart - ; Error - SCF - RET + ; OR A + ; JR Z,FDSTART ; FDD A: + ; INC B + ; DEC A + ; JR Z,FDSTART ; FDD B: + ; ; IDE + ; LD B,DRIVE_CODES.SPRINTER.HDD + ; DEC A + ; JR Z,HDSTART + ; INC B ;LD B,#81 + ; DEC A + ; JR Z,HDSTART + ; INC B ;LD B,#82 + ; DEC A + ; JR Z,HDSTART + ; INC B ;LD B,#83 + ; DEC A + ; JR Z,HDSTART + ; ; RAM + ; DEC A + ; JR Z,RDSTART + ; ; ROM + ; DEC A + ; JP Z,RECOVERYstart + ; ; Error + ; SCF + ; RET + JP RECOVERYstart -FDSTART: - PUSH BC - PUSH BC - LD A,msgStrings.bootFdd - CALL POSTMSG - POP AF - CALL FDD_5x_RESET - POP BC - RET C - JP OS_LOAD -;!TODO -CDSTART: - PUSH BC - LD A,msgStrings.bootCd - CALL POSTMSG - POP AF - PUSH AF - CALL PRINT_CHANEL - ; - POP BC - SET 6,B - SCF - RET +; FDSTART: +; PUSH BC +; PUSH BC +; LD A,msgStrings.bootFdd +; CALL POSTMSG +; POP AF +; CALL FDD_5x_RESET +; POP BC +; RET C +; JP OS_LOAD +; ;!TODO +; CDSTART: +; PUSH BC +; LD A,msgStrings.bootCd +; CALL POSTMSG +; POP AF +; PUSH AF +; CALL PRINT_CHANEL +; ; +; POP BC +; SET 6,B +; SCF +; RET -RDSTART: - LD A,msgStrings.bootRamDrv - CALL POSTMSG - LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - тип драйва RAM-DRV, 0 - номер драйва -.loop: PUSH BC - CALL OS_LOAD - POP BC - INC B - LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; максимальный номер рамдиска - SUB B - JR NC,.loop - RET +; RDSTART: +; LD A,msgStrings.bootRamDrv +; CALL POSTMSG +; LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - тип драйва RAM-DRV, 0 - номер драйва +; .loop: PUSH BC +; CALL OS_LOAD +; POP BC +; INC B +; LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; максимальный номер рамдиска +; SUB B +; JR NC,.loop +; RET -HDSTART: - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - ; - AND #03 ;R02 %00000011 - LD IY,IDE.INIT_TBL_IDE0 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE1 - CP 1 ;R02 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE2 ;R02 - CP 2 ;R02 - JR Z,.next - ; - LD IY,IDE.INIT_TBL_IDE3 ;R02 - ; -.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - CP IDE.Device.CDROM - JP Z,CDSTART - PUSH AF - PUSH BC - LD A,msgStrings.bootHdd - CALL POSTMSG - POP AF - PUSH AF - CALL PRINT_CHANEL +; HDSTART: +; IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,B +; ; +; AND #03 ;R02 %00000011 +; LD IY,IDE.INIT_TBL_IDE0 +; JR Z,.next +; ; +; LD IY,IDE.INIT_TBL_IDE1 +; CP 1 ;R02 +; JR Z,.next +; ; +; LD IY,IDE.INIT_TBL_IDE2 ;R02 +; CP 2 ;R02 +; JR Z,.next +; ; +; LD IY,IDE.INIT_TBL_IDE3 ;R02 +; ; +; .next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) +; EX AF,AF' +; OUT (SLOT3),A +; EX AF,AF' +; CP IDE.Device.CDROM +; JP Z,CDSTART +; PUSH AF +; PUSH BC +; LD A,msgStrings.bootHdd +; CALL POSTMSG +; POP AF +; PUSH AF +; CALL PRINT_CHANEL - POP BC - POP AF - CP #FF - SCF - RET Z +; POP BC +; POP AF +; CP #FF +; SCF +; RET Z OS_LOAD: LD HL,#0000 LD IX,#0001 diff --git a/Crazy BIOS/shared/CompMacro.asm b/Crazy BIOS/shared/CompMacro.asm index c6f4e49..f0b3ead 100644 --- a/Crazy BIOS/shared/CompMacro.asm +++ b/Crazy BIOS/shared/CompMacro.asm @@ -1,26 +1,29 @@ ; MACRO ShowInfo text, in_disp -/* - DISPLAY ' ' - DISPLAY '[*] ', text - IF in_disp - DISPLAY 'ROM:' - DISPLAY ' ORG: ',/H, $$$ - DISPLAY ' PAGE: ',/H, $$$$ - DISPLAY 'MEM:' - DISPLAY ' DISP: ',/H, $ - DISPLAY ' PAGE: ',/H, $$ - ELSE - DISPLAY 'ROM:' - DISPLAY ' ORG: ',/H, $ - DISPLAY ' PAGE: ',/H, $$ - ENDIF - DISPLAY '[X]' - DISPLAY ' ' -*/ + ; DISPLAY ' ' + ; DISPLAY '[*] ', text + ; IF in_disp + ; DISPLAY 'ROM:' + ; DISPLAY ' ORG: ',/H, $$$ + ; DISPLAY ' PAGE: ',/H, $$$$ + ; DISPLAY 'MEM:' + ; DISPLAY ' DISP: ',/H, $ + ; DISPLAY ' PAGE: ',/H, $$ + ; ELSE + ; DISPLAY 'ROM:' + ; DISPLAY ' ORG: ',/H, $ + ; DISPLAY ' PAGE: ',/H, $$ + ; ENDIF + ; DISPLAY '[X]' + ; DISPLAY ' ' ENDM ; + MACRO SET_IMG_LABEL +.Crazy_IMG_Label: DB "Crazy Blaster Image" + ENDM + + ; ; Вход: ширина спрайта, высота, координата X, координата Y, адрес спрайта в памяти MACRO EasterTable width, height, Xcoord, Ycoord, addr @@ -32,123 +35,6 @@ ENDM ; -; - MACRO _mRECOVERYrdChooseTYPE vers - IF vers = 1 - ; если RECOVERY не подразумевает 90% безопасность пользовательских рамдисков - ; то выбираем этот вариант, он шустрее, под RECOVERY всегда выбирается RAM Disk 15 - ; - - ELSEIF vers = 2 - - ; Ищем свободный рамдиск - LD B,SYS_PAGE.RAMD_KEYS.NUM -.getRDidLoop: LD A,B - DEC A - LD (RECOVERYstart.RDkey),A - PUSH BC - LD B,ROM_DISK.Pages.Size - CALL EMM.GetMemRMD - POP BC - JR NC,RECOVERYstart.IMGread ; свободный рамдиск найден, выходим из цикла - DEC A - JR Z,RECOVERYstart.FreeMem ; ошибка - недостаточно памяти, вызываем очистку памяти - DJNZ .getRDidLoop - ; - - ELSE - ASSERT 0, Invalid 'RECOVERYrdChooseTYPE' variant - RECOVERYrdChooseTYPE - ENDIF - ENDM -; - MACRO _mRECOVERYmountTYPE vers - IF vers = 1 ; Более быстрый, но захардкоженный вариант - - LD HL,TEMP - CALL EMM.GetMemBlkPages ; кидаем в буфер номера страниц RAM disk - - IN A,(SLOT3) - LD (.slot3save),A - - LD HL,ROM_DISK.Pages.Number - LD B,0 - LD C,(HL) - INC C - LD DE,TEMP+ROM_DISK.Pages.Size - LDIR ; кидаем дальше в буфер номера страниц ROM disk - - LD IY,TEMP+ROM_DISK.Pages.Size ; ROM_DISK.Pages.Number - LD IX,TEMP - LD B,(IY+0) - - LD A,R - PUSH AF - DI -.loopIMGtoRAM: PUSH BC - INC IY - LD A,(IY+0) - OUT (ROM.SLOT0),A - LD A,(IX+0) - OUT (SLOT3),A - INC IX - - LD HL,0 - LD DE,#C000 - LD BC,#4000 - LDIR - - POP BC - DJNZ .loopIMGtoRAM -.slot3save+*: LD A,0 - OUT (SLOT3),A - XOR A - OUT (ROM.SLOT0),A - OUT (CNF_PORT.vBIOS),A - POP AF - JP PO,.noInterrupts - EI -.noInterrupts: - ; - - ELSEIF vers = 2 ; менее быстрый, но более правильный вариант через функции биоса - - LD (.ramdskID),A - LD DE,0 ; номер сектора - LD B,(ROM_DISK.Pages.Size * #4000)/512 ; счётчик - кол-ва секторов по 512 кб -.loop: - ;read rom disk - PUSH BC - LD A,1 ;размер сектора 256 - EX AF,AF' - LD A,#46 ;чтение из ROM-Disk - EX AF,AF' - LD HL,TEMP ;адрес буфера данных - LD B,2 ;число секторов - CALL BLK_RD_WR - - ;write to ram disk - PUSH DE ;номер сектора - DEC DE - DEC DE - -.ramdskID+*: LD A,0 ;идентификатор блока - EX AF,AF' - LD A,#FF ;запись в RAM-Disk - EX AF,AF' - LD HL,TEMP ;адрес буфера данных - LD B,2 ;число секторов - CALL BLK_RD_WR - - POP DE ;номер сектора - POP BC - DJNZ .loop - ; - - ELSE - ASSERT 0, Invalid 'RECOVERYmountTYPE' variant - RECOVERYmountTYPE - ENDIF - ENDM -; ; MACRO RST_to_BIOS diff --git a/Crazy BIOS/shared/DEFINES.INC b/Crazy BIOS/shared/DEFINES.INC index d384019..042582d 100644 --- a/Crazy BIOS/shared/DEFINES.INC +++ b/Crazy BIOS/shared/DEFINES.INC @@ -1,6 +1,7 @@ ;=======================[All shared EQUs]=======================; BETA_BUILD EQU 6 ; добавляет строку и сообщение о тестовой сборке на стартовом экране ;======================[All shared defines]=====================; + DEFINE DEBUG 0 ; DEFINE SP2000_Loader_Flag #0107 ; DEFINE IDE_Optimization 1 ; слегка оптимизирует некоторые процедуры работы с HDD DEFINE NeedSafePort_Y 1 ; если 0, то в режиме без акселя некоторые процедуры могут засрать экран @@ -15,7 +16,6 @@ BETA_BUILD EQU 6 ; ;----------------------------[ TEST ]---------------------------; DEFINE HDDwriteProtect 0 ; старая фишка для функций 5x DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" - DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY грузится в диск 15, 2 - ищется свободный рамдиск, если нет, то в 15-ый DEFINE FDD_NormalCount 0 ; !TODO DEFINE UnusedSettingsFeatures 0 ; ;===============================================================; \ No newline at end of file diff --git a/Crazy BIOS/shared/cb_boot.IMG b/Crazy BIOS/shared/cb_boot.IMG new file mode 100755 index 0000000..e1abbc1 Binary files /dev/null and b/Crazy BIOS/shared/cb_boot.IMG differ diff --git a/Crazy Estex DSS/BOOT/DSSBOOT.ASM b/Crazy Estex DSS/BOOT/DSSBOOT.ASM index 54c0231..b53604e 100644 --- a/Crazy Estex DSS/BOOT/DSSBOOT.ASM +++ b/Crazy Estex DSS/BOOT/DSSBOOT.ASM @@ -80,7 +80,7 @@ FAIL: CALL MESSAGE ; MESSAGE: ;R01 Start XOR A - OUT (SYS_PORT.ON),A + OUT (CNF_PORT.vBIOS),A .loop: LD A,(HL) ;R01 INC HL OR A @@ -211,7 +211,7 @@ CONTINUE: LD HL,0 .no_big_core: ; RUN_CORE: DI XOR A - OUT (SYS_PORT.OFF),A + OUT (CNF_PORT.vZX_ROM),A ; LD A,#10 LD BC,#7FFD @@ -236,7 +236,7 @@ RUN_CORE: DI CALL MESSAGE ; XOR A - OUT (SYS_PORT.OFF),A + OUT (CNF_PORT.vZX_ROM),A ; LD A,(DRIVE) LD BC,Dss.BootDSK.Set diff --git a/Crazy Estex DSS/DSS/DRV-MAIN.ASM b/Crazy Estex DSS/DSS/DRV-MAIN.ASM index 9a1091a..ecf6463 100644 --- a/Crazy Estex DSS/DSS/DRV-MAIN.ASM +++ b/Crazy Estex DSS/DSS/DRV-MAIN.ASM @@ -43,8 +43,8 @@ RST_00: ; <[BIOS API]> BLOCK 8-$,#C7 ; #C7 - "RST 0" opcode A0008: PUSH AF - LD A,SYS_PORT.PAGE8 - OUT (SYS_PORT.ON),A + LD A,CNF_PORT.BIOS + OUT (CNF_PORT.vBIOS),A POP AF RET //////////////////////////////////////////////////////////////////////// @@ -232,11 +232,11 @@ INITDVC_RET_DRIVE: AND A RET - INCLUDE 'dss/Drivers/media/shared-drv.asm' - INCLUDE 'dss/Drivers/media/ide-drv.asm' - INCLUDE 'dss/Drivers/media/fdd-drv.asm' - INCLUDE 'dss/Drivers/media/ram_disk-drv.asm' - INCLUDE "dss/Drivers/input/MOUSE.ASM" + INCLUDE 'crazy estex dss/dss/Drivers/media/shared-drv.asm' + INCLUDE 'crazy estex dss/dss/Drivers/media/ide-drv.asm' + INCLUDE 'crazy estex dss/dss/Drivers/media/fdd-drv.asm' + INCLUDE 'crazy estex dss/dss/Drivers/media/ram_disk-drv.asm' + INCLUDE "crazy estex dss/dss/Drivers/input/MOUSE.ASM" /////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\; ; ;------------------------[shared-drv.asm table]------------------------; diff --git a/Crazy Estex DSS/DSS/DSS-MAIN.ASM b/Crazy Estex DSS/DSS/DSS-MAIN.ASM index 6b2f37a..c28b3ba 100644 --- a/Crazy Estex DSS/DSS/DSS-MAIN.ASM +++ b/Crazy Estex DSS/DSS/DSS-MAIN.ASM @@ -72,8 +72,8 @@ RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12 ; <[BIOS API]> ; _mInfoBLOCK 8-$,#FF ; RST_0x08: PUSH AF ; - LD A,SYS_PORT.PAGE8; - OUT (SYS_PORT.ON),A ; + LD A,CNF_PORT.BIOS ; + OUT (CNF_PORT.vBIOS),A ; POP AF ; RET ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; diff --git a/Crazy Estex DSS/DSS/VERSION.INC b/Crazy Estex DSS/DSS/VERSION.INC index 984fa6c..20c467b 100644 --- a/Crazy Estex DSS/DSS/VERSION.INC +++ b/Crazy Estex DSS/DSS/VERSION.INC @@ -10,7 +10,7 @@ if sj.get_define("INCREASE_BUILD") > "0" then dss_build = increase_build("./DSS/build.txt") else - dss_build = get_build("./DSS/build.txt") + dss_build = get_build("./crazy estex dss/DSS/build.txt") end if dss_build > 999 then diff --git a/Crazy Updater/constants/BIOS_EXP.inc b/Crazy Updater/constants/BIOS_EXP.inc index df5bc29..5422f3b 100644 --- a/Crazy Updater/constants/BIOS_EXP.inc +++ b/Crazy Updater/constants/BIOS_EXP.inc @@ -8,6 +8,6 @@ EXP_ID.VER: EQU 0x00000003 EXP_ID.MOD: EQU 0x00000006 CNF_ID.VER: EQU 0x00000000 CNF_ID.MOD: EQU 0x00000000 -msgStrings.str_ACEX_MODEL: EQU 0x0000244B -msgRusStrings.str_ACEX_MODEL: EQU 0x00002E5B +msgStrings.str_ACEX_MODEL: EQU 0x0000234B +msgRusStrings.str_ACEX_MODEL: EQU 0x00002D5B BETA_BUILD: EQU 0x00000006 diff --git a/Crazy/ACEX_RAM.ASM b/Crazy/ACEX_RAM.ASM index e81bf36..41fa1b5 100644 --- a/Crazy/ACEX_RAM.ASM +++ b/Crazy/ACEX_RAM.ASM @@ -1,5 +1,6 @@ ;███████ инициализация системных портов Z84C15 ████████████████; DI + IM 1 LD BC,#FF*256 + Z84.SYS.Control XOR A ; Z84.REG.WaitState_Ctrl OUT (C),A ; Z84.SYS.Control @@ -14,7 +15,8 @@ LD A,1 ; enable CS0, disable CS1 OUT (C),A ; Z84.SYS.Data ;███████ инициализация DCP ████████████████████████████████████; - LD HL,ADD_PORTS.Code + ;LD HL,ADD_PORTS.Code + LD HL,INIT_PORTS DCP_INIT: LD C,XL LD B,XH LD E,YL @@ -111,15 +113,22 @@ ADD_PORTS: ; DB #E4 ; внешний #4004 .Data.Size EQU $ - .Data ; -.Code: LD HL,ADD_PORTS.Data - LD DE,#C480 - LD BC,ADD_PORTS.Data.Size - LDIR +.Code: ;LD DE,#C480 + ; LD HL,ADD_PORTS.Data + ; LD BC,ADD_PORTS.Data.Size + ; LDIR + ; + ;███████ Инициализация портов █████████████████████████████████; + ;LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET + CNF_PORT.CNF_512 + ;OUT (SYS_PORT.ROM),A +INIT_PORTS: LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + OUT (SYS_PORT.ROM),A ;███████ Инициализация страниц ████████████████████████████████; INIT_SLOTS: LD BC,#1FFD LD A,1 OUT (C),A LD B,#7F + ; LD A,#11 OUT (C),A ; XOR A @@ -127,11 +136,8 @@ INIT_SLOTS: LD BC,#1FFD OUT (SLOT1),A LD A,2 OUT (SLOT2),A - LD A,SYS_PAGE + LD A,DCP_PAGE OUT (SLOT3),A - ;███████ Инициализация портов █████████████████████████████████; - LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (SYS_PORT.ROM),A ;███████ Инициализация стека ██████████████████████████████████; LD SP,#4000 ;███████ Переброс оставшегося кода в RAM ██████████████████████; @@ -149,18 +155,41 @@ INIT_SLOTS: LD BC,#1FFD ; ТУТ МЫ УЖЕ В ОЗУ В ТОМ ЖЕ КОДЕ И АДРЕСЕ ; страницы 0,1,2,#FE ;███████ Инициализация страниц vROM ███████████████████████████; -vROM_MAP: LD BC,#4000 - LD HL,RESERVED_PAGES.BIOS + LD HL,#C900 ; Opcodes RET : NOP + LD A,H + LD (DOS_OFF),A + LD (DOS_ON),HL +vROM_MAP: LD HL,RESERVED_PAGES.BIOS + LD DE,ADD_PORTS.Data LD A,RESERVED_PAGES.Size -.loop: LD E,(HL) - OUT (C),E - INC C +.loop: EX AF,AF' + LD A,(HL) + LD B,A + LD A,(DE) + CALL SET_PORTS INC HL + INC DE + EX AF,AF' DEC A JR NZ,.loop + ; + LD A,SYS_PAGE + OUT (SLOT3),A +; ;███████ Инициализация страниц vROM ███████████████████████████; +; vROM_MAP: LD BC,#4000 +; LD HL,RESERVED_PAGES.BIOS +; LD A,RESERVED_PAGES.Size +; .loop: LD E,(HL) +; OUT (C),E +; INC C +; INC HL +; DEC A +; JR NZ,.loop ;██████████████████████████████████████████████████████████████; ;███████ Рабочий код ██████████████████████████████████████████; ;██████████████████████████████████████████████████████████████; + LD A,SYS_PAGE + OUT (SLOT3),A ; адрес процедуры ошибки LD HL,ERROR PUSH HL @@ -170,16 +199,15 @@ vROM_MAP: LD BC,#4000 ;██████ Установка страниц для загрузки данных █████████████████; CALL Init_Mem ;██████ Загрузка ██████████████████████████████████████████████; - ; дополнительные функции -CHECK_IMG: ;LD A,(RESERVED_PAGES.SYS_FN) ; страница буфера, если адрес в окне #C000 (BLOCK_ID) - LD B,1 ; число читаемых секторов + ; проверка ID диска с BIOS (дополнительные функции) +CHECK_IMG: LD B,1 ; число читаемых секторов LD HL,#8000 ; адрес буфера данных LD IX,0 ; абсолютный номер сектора старшая часть LD DE,0 ; абсолютный номер сектора младшая часть PUSH HL CALL FN_HDD_READ POP HL - ;██████ ██████████████████████████████████████████████; + ; сравнение метки LD DE,CHECKING_LABEL LD B,CHECKING_LABEL.Size .loop: LD A,(DE) @@ -194,6 +222,17 @@ LOAD_DATA: LD A,(RESERVED_PAGES.BIOS) LD B,RESERVED_PAGES.Size * #4000 / 512 LD DE,1 CALL FN_HDD_READ_NEXT + RET C + ; + IF DEBUG + LD A,#41 + LD HL,#C000 + LD B,1 + LD D,L + LD E,B + CALL FN_HDD_READ_NEXT + RET C + ENDIF XOR A OUT (SLOT1),A JP .IN_RAM + #4000 @@ -202,11 +241,13 @@ LOAD_DATA: LD A,(RESERVED_PAGES.BIOS) XOR A OUT (C),A ; - XOR A ;CNF_PORT.BIOS + ; A = CNF_PORT.BIOS OUT (CNF_PORT.vBIOS),A - LD A,#40 + LD A,DCP_PAGE OUT (SLOT3),A ; + LD IX,ACEX.Config_ID.Sp2000 + LD IY,SP2000_Loader_Flag RST 0 ;JP BEGIN_CB_IMG ;██████████████████████████████████████████████████████████████; @@ -499,14 +540,46 @@ TEST_HDD_DRV: ;LD HL,#01FE ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ERROR: ;░░░░░░░ Мигание лампочкой турбы ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +.loop: CALL FLASH_LIGHT + JR .loop + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +FLASH_LIGHT: PUSH AF + PUSH DE + PUSH BC + LD E,6 LD A,SYS_PORT.TURBO.OFF .big_loop: LD BC,0 - OUT (SYS_PORT.ROM),A + OUT (SYS_PORT.RAM),A .loop: DEC BC INC B DJNZ .loop XOR 1 - JR .big_loop + DEC E + JR NZ,.big_loop + ; + POP AF + POP DE + POP BC + RET + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +; in: A - внутренний порт, B - значение для записи во внутренний порт +; out: B - старое значение внутреннего порта; Перед выходом восстанавливается конфа прописанная в CONFIG_DE. +SET_PORTS: + CALL DOS_ON + ; + LD (#C400),A ; установить внутренний порт + LD A,B + LD BC,0 + ; Запись порта + OUT (C),A ; установить новое значение порта + ; +.End: XOR A + LD (#C400),A ; вернуть порт + JP DOS_OFF ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; @@ -518,6 +591,9 @@ RESERVED_PAGES: ; DB #49 ; Recovery_2 Acex port: #E7 DB #4B ; LOGO Acex port: #E4 .Size EQU $-RESERVED_PAGES.BIOS + IF DEBUG + DB #41 + ENDIF DB #FF ; End of the block .Blocks EQU 1 @@ -534,135 +610,56 @@ END_CB EQU $ ;██████████████████████████████████████████████████████████████; ;███████ Таблица DCP ██████████████████████████████████████████; DCP_DATA: DW %00'000'0'0100'0000 - DW %11'000'0'0110'1111 - DB ACEX.IDE_DATA_1F0 - DW %01'000'0'0100'0000 - DW %11'010'0'0110'1111 - DB ACEX.IDE_DATA_1F0 - DW %10'000'0'0100'0000 - DW %11'010'0'0110'1111 - DB ACEX.IDE_DATA_1F0 - DW %11'000'0'0100'0000 DW %11'000'0'0110'1111 DB ACEX.IDE_DATA_1F0 ; DW %00'000'0'0100'0001 - DW %00'010'1'1110'1111 - DB ACEX.IDE_ERROR_1F1 - DW %00'010'0'0100'0001 - DW %11'010'1'1110'1111 - DB ACEX.IDE_ERROR_1F1 - DW %11'010'0'0100'0001 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_ERROR_1F1 ; DW %00'000'0'0100'0010 - DW %00'010'1'1110'1111 - DB ACEX.IDE_COUNTER_1F2 - DW %00'010'0'0100'0010 - DW %11'010'1'1110'1111 - DB ACEX.IDE_COUNTER_1F2 - DW %11'010'0'0100'0010 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_COUNTER_1F2 ; DW %00'000'0'0100'0011 - DW %00'010'1'1110'1111 - DB ACEX.IDE_SECTOR_1F3 - DW %00'010'0'0100'0011 - DW %11'010'1'1110'1111 - DB ACEX.IDE_SECTOR_1F3 - DW %11'010'0'0100'0011 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_SECTOR_1F3 ; DW %00'000'0'0100'0100 - DW %00'010'1'1110'1111 - DB ACEX.IDE_CYLINDER_L_1F4 - DW %00'010'0'0100'0100 - DW %11'010'1'1110'1111 - DB ACEX.IDE_CYLINDER_L_1F4 - DW %11'010'0'0100'0100 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_CYLINDER_L_1F4 ; DW %00'000'0'0100'0101 - DW %00'010'1'1110'1111 - DB ACEX.IDE_CYLINDER_H_1F5 - DW %00'010'0'0100'0101 - DW %11'010'1'1110'1111 - DB ACEX.IDE_CYLINDER_H_1F5 - DW %11'010'0'0100'0101 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_CYLINDER_H_1F5 ; DW %00'000'0'1100'0010 - DW %00'010'1'1110'1111 - DB ACEX.IDE_DEVICE_HEAD_1F6 - DW %00'010'0'1100'0010 - DW %11'010'1'1110'1111 - DB ACEX.IDE_DEVICE_HEAD_1F6 - DW %11'010'0'1100'0010 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_DEVICE_HEAD_1F6 ; DW %00'000'0'1100'0011 - DW %00'010'1'1110'1111 - DB ACEX.IDE_STATUS_CMD_1F7 - DW %00'010'0'1100'0011 - DW %11'010'1'1110'1111 - DB ACEX.IDE_STATUS_CMD_1F7 - DW %11'010'0'1100'0011 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_STATUS_CMD_1F7 ; DW %00'000'0'1100'0100 - DW %00'010'1'1110'1111 - DB ACEX.IDE_CONTROL_3F6 - DW %00'010'0'1100'0100 - DW %11'010'1'1110'1111 - DB ACEX.IDE_CONTROL_3F6 - DW %11'010'0'1100'0100 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_CONTROL_3F6 ; DW %00'000'0'1100'0101 - DW %00'010'1'1110'1111 - DB ACEX.IDE_STATUS_3F7 - DW %00'010'0'1100'0101 - DW %11'010'1'1110'1111 - DB ACEX.IDE_STATUS_3F7 - DW %11'010'0'1100'0101 - DW %11'010'1'1110'1111 + DW %00'000'1'1110'1111 DB ACEX.IDE_STATUS_3F7 ; DW %00'000'0'0010'1100 DW %11'001'1'1111'1111 DB ACEX.IDE_CHANEL_1 - DW %11'000'0'0010'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_1 ; DW %00'000'0'0011'1100 DW %11'001'1'1111'1111 DB ACEX.IDE_CHANEL_2 - DW %11'000'0'0011'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_2 - ; - DW %00'000'0'1010'1100 - DW %11'001'1'1111'1111 - DB ACEX.RESET - DW %11'000'0'1010'1100 - DW %11'001'1'1111'1111 - DB ACEX.RESET ; DW %00'000'0'0110'1101 DW %10'000'1'1111'1111 DB ACEX.Scorp_1FFD - DW %11'000'0'0110'1101 - DW %11'000'1'1111'1111 - DB ACEX.Scorp_1FFD ; DW %00'000'0'1110'1101 DW %00'100'1'1110'1111 @@ -670,62 +667,29 @@ DCP_DATA: DW %00'000'0'0100'0000 DW %00'100'0'1110'1101 DW %11'110'1'1110'1111 DB ACEX.Pent_7FFD - DW %11'100'0'1110'1101 - DW %11'100'1'1110'1111 - DB ACEX.Pent_7FFD - DW %10'000'0'0110'1101 - DW %11'100'1'1110'1111 - DB ACEX.Pent_7FFD ; DW %00'000'0'0101'0110 DW %11'001'1'1111'1111 DB ACEX.ALL_MODE - DW %11'000'0'0101'0110 - DW %11'001'1'1111'1111 - DB ACEX.ALL_MODE ; DW %00'000'0'0010'0100 DW %00'000'0'0010'1111 DB ACEX.CNF_PORT ; DW %00'000'0'0000'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT0 - DW %00'010'0'0000'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT0 - DW %11'010'0'0000'1010 - DW %11'010'0'0110'1111 + DW %00'000'0'0110'1111 DB ACEX.SLOT0 ; DW %00'000'0'0010'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT1 - DW %00'010'0'0010'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT1 - DW %11'010'0'0010'1010 - DW %11'010'0'0110'1111 + DW %00'000'0'0110'1111 DB ACEX.SLOT1 ; DW %00'000'0'0100'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT2 - DW %00'010'0'0100'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT2 - DW %11'010'0'0100'1010 - DW %11'010'0'0110'1111 + DW %00'000'0'0110'1111 DB ACEX.SLOT2 ; DW %00'000'0'0110'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT3 - DW %00'010'0'0110'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT3 - DW %11'010'0'0110'1010 - DW %11'010'0'0110'1111 + DW %00'000'0'0110'1111 DB ACEX.SLOT3 ; DCP END MARKER DW 0,0,0 diff --git a/Crazy/BUILD_BIOS.a80 b/Crazy/BUILD_ACEX_BIOS.a80 similarity index 100% rename from Crazy/BUILD_BIOS.a80 rename to Crazy/BUILD_ACEX_BIOS.a80 diff --git a/Crazy/debug.asm b/Crazy/debug.asm new file mode 100644 index 0000000..3ffe628 --- /dev/null +++ b/Crazy/debug.asm @@ -0,0 +1,18 @@ + INCLUDE 'Shared_Includes/constants/SP2000.inc' + ORG 0 +.start: LD E,8 + LD A,SYS_PORT.TURBO.OFF +.big_loop: LD BC,0 + OUT (CNF_PORT.vZX_ROM),A +.loop: DEC BC + INC B + DJNZ .loop + XOR 1 + DEC E + JR NZ,.big_loop + ; + LD BC,0 +.loop2: DEC BC + INC B + DJNZ .loop2 + JR .start \ No newline at end of file diff --git a/CrazyBlaster.asm b/CrazyBlaster.asm index 110742c..89691f3 100644 --- a/CrazyBlaster.asm +++ b/CrazyBlaster.asm @@ -1,7 +1,7 @@ - - INCLUDE 'Shared_Includes/constants/SP2000.inc' INCLUDE 'Build/updater.inc' + INCLUDE 'Crazy BIOS/shared/CompMacro.asm' + INCLUDE 'Crazy BIOS/shared/DEFINES.INC' ;INCLUDE 'Shared_Includes/structures/FileSystem.inc' ;INCLUDE 'Shared_Includes/macroses/macros.z80' ;INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc' @@ -17,9 +17,8 @@ DEFINE image_size_in_sectors flasher_size_in_sectors + bios_size_in_sectros DEFINE TYPE_OF_ACEX 3 ; 3 - 1K30, 5 - 1K50 - MACRO SET_IMG_LABEL -.Crazy_IMG_Label: DB "Crazy Blaster Image" - ENDM +DOS_OFF EQU #4000 +DOS_ON EQU #3D13 ;██████████████████████████████████████████████████████████████████████; ;█████████████████████[ FIRST SECTION - CONF ROM ]█████████████████████; @@ -34,7 +33,7 @@ END_FIRST_SECTION EQU $ ;██████████████████████████████████████████████████████████████████████; - +/* ;██████████████████████████████████████████████████████████████████████; ;██████████████████[ SECOND SECTION - IMAGE ON DRIVE ]█████████████████; ;██████████████████████████████████████████████████████████████████████; @@ -51,4 +50,5 @@ END_SECOND_SECTION EQU $ ; DISPLAY "IMG size = ",/A,END_SECOND_SECTION - BEGIN_CB_IMG OUTEND -;██████████████████████████████████████████████████████████████████████; \ No newline at end of file +;██████████████████████████████████████████████████████████████████████; +*/ \ No newline at end of file