diff --git a/Shared_Includes b/Shared_Includes index c7bcbd0..4e4294e 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit c7bcbd096d4674064766dc9f61121f4843ddd635 +Subproject commit 4e4294ea21fab73299b8e389979c38d801f861b0 diff --git a/game_loader_dasm.a80 b/game_loader_dasm.a80 index fa7b6b3..3bc7082 100644 --- a/game_loader_dasm.a80 +++ b/game_loader_dasm.a80 @@ -13,9 +13,23 @@ program_start EQU NEW_CODE_START stack_point EQU #C000 .size EQU 128 ;--------------------------------------- +NEW_BUFFERS: ; For Zero page +.Palette: EQU #C000 +.Palette.Size EQU 1024*8 +.TXT_Screen EQU .Palette + .Palette.Size +.TXT_Screen.Size EQU 80*32*2 + +DSS_MIN_VERS: +.vers EQU 1 +.modf EQU 70 +.build EQU 999 + GAME_NEED_MEM_PAGES EQU #C6 -PAGES_BUFFER EQU #BE00 -.size EQU #100 +PAGES_BUFFER EQU #BE00 +.size EQU #100 +;--------------------------------------- + + EXE_ORG #8000 @@ -224,11 +238,11 @@ l8205h: LD A,GAME_NEED_MEM_PAGES ;8205 3e c6 > . .mem_pg+1: LD A,5 ;822f 3e 05 > . OUT (SLOT1),A ;8231 d3 a2 . . ; -HARD_RESET: DI ;8233 f3 . - LD A,ACEX.Config_PG.Sp2000 +HARD_RESET: LD A,ACEX.Config_PG.Sp2000 LD BC,BIOS.RST_CONF.CUSTOM RST ToBIOS ; + DI CALL PREPARE_TO_EXIT_NEW ; .loop_exit: LD BC,Dss.Exit @@ -510,7 +524,7 @@ RESTORE_IM1_DSS: LD A,#C3 ;8387 3e 00 > . LD (#38),A ;8389 32 38 00 2 8 . LD HL,#003B ;838c 21 00 00 ! . . - LD (#39),A ;838f 32 39 00 2 9 . + LD (#39),HL ;838f 32 39 00 2 9 . RET ;8392 c9 . l8393h: CALL sub_837fh ;8393 cd 7f 83 . . . @@ -4265,9 +4279,9 @@ CURRENT_PAGE: GET_MEM_AND_PAGES: LD (CURRENT_MEM_USED),A ;a1b7 32 b4 a1 2 . . - LD C,BIOS.GetMem ;a1ba 0e c2 . . + LD C,Dss.GetMem ;a1ba 0e c2 . . LD B,A ;a1bc 47 G - RST ToBIOS ;a1bd cf . + RST ToDSS ;a1bd cf . JP C,l83a1h ;a1be da a1 83 . . . ; LD (CURRENT_MEM_BLOCK_ID),A ;a1c1 32 af a2 2 . . @@ -4277,9 +4291,9 @@ GET_MEM_AND_PAGES: JP C,l83a1h ;a1ca da a1 83 . . . RET ;a1cd c9 . -FREE_MEM_: LD C,BIOS.FreeMem ;a1ce 0e c3 . . +FREE_MEM_: LD C,Dss.FreeMem ;a1ce 0e c3 . . LD A,(CURRENT_MEM_BLOCK_ID) ;a1d0 3a af a2 : . . - RST ToBIOS ;a1d3 cf . + RST ToDSS ;a1d3 cf . JP C,SetUp_RESET_EXIT ;a1d4 da 63 83 . c . RET ;a1d7 c9 . @@ -4338,12 +4352,12 @@ sub_a208h: la216h: XOR A ;a216 af . INC A ;a217 3c < - LD BC,0ffa4h ;a218 01 a4 ff . . . + LD BC,256*#FF + BIOS.PIC_SET_PAL ;a218 01 a4 ff . . . RST ToBIOS ;a21b cf . RET ;a21c c9 . LD DE,00100h ;a21d 11 00 01 . . . la220h: - LD BC,0ffa4h ;a220 01 a4 ff . . . + LD BC,256*#FF + BIOS.PIC_SET_PAL ;a220 01 a4 ff . . . LD HL,PALETTE_1 ;a223 21 83 a2 ! . . XOR A ;a226 af . PUSH DE ;a227 d5 . @@ -6113,37 +6127,46 @@ lad3eh: RET ;ae1b c9 . ; DZ 'Cash.dat' ;ae1c + + +; [ ] FIX 19/10/2024 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; NEW CODE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; [ ] FIX 19/10/2024 -NEW_CODE_START: LD HL,LOADER_STRINGS.Info +;*********************************************************************** +ERROR_OLD_DSS: LD HL,LOADER_STRINGS.OldDSS + LD C,Dss.PChars + RST ToDSS + JP GOTO_ERROR_EXIT +;*********************************************************************** + +NEW_CODE_START: DI + LD HL,LOADER_STRINGS.Info LD C,Dss.PChars RST ToDSS ; - LD C,Dss.Cursor + LD C,Dss.Version RST ToDSS - LD (PREPARE_TO_EXIT_NEW.cursor),DE ; - + SCF + LD HL,256*DSS_MIN_VERS.vers + DSS_MIN_VERS.modf + SBC HL,DE + JR NC,ERROR_OLD_DSS + LD HL,DSS_MIN_VERS.build + SBC HL,BC + JR NC,ERROR_OLD_DSS + ; LD C,Dss.GetVMod RST ToDSS JR C,.no_vmode CP #80 - JR NC,.no_vmode + CALL C,SAVE_TXT_SCREEN ; - LD (PREPARE_TO_EXIT_NEW.current_vmode),A - LD A,B - LD (PREPARE_TO_EXIT_NEW.current_screen),A +.no_vmode: CALL SAVE_PAL ; - LD A,Dss.SetVMod.grf320x256 - LD B,Dss.SetVMod - RST ToDSS -.no_vmode: ; - LD A,GAME_NEED_MEM_PAGES ;8205 3e c6 > . - CALL GET_MEM_AND_PAGES ;8207 cd b7 a1 . . . - CALL GENERATE_PALETTE ;820a cd 26 93 . & . - DI ;820d f3 . + LD A,GAME_NEED_MEM_PAGES + CALL GET_MEM_AND_PAGES + CALL GENERATE_PALETTE IN A,(SLOT1) LD (l8205h.mem_pg),A ; @@ -6254,8 +6277,8 @@ NEW_CODE_START: LD HL,LOADER_STRINGS.Info CALL SETUP_RESET_HANDLER ; LD A,(PAGES_BUFFER) - LD C,BIOS.FreeMem - RST ToBIOS + LD C,Dss.FreeMem + RST ToDSS ; restore HOLD port LD D,CMOS_CELL.ScreenPosition LD C,BIOS.CMOS_RD @@ -6284,21 +6307,20 @@ CAD_RESET_HANDLER: ; ; -SETUP_RESET_HANDLER_NEW: - ; Устанавливаем ключи - PUSH HL - LD HL,Spec_Page.flag_R - LD (HL),"R" - INC HL - LD (HL),"S" - INC HL - LD (HL),"T" - POP HL - ; - LD A,#FF - LD (Spec_Page.Reload_Version),A - ; - RET +SETUP_RESET_HANDLER_NEW:; Устанавливаем ключи + PUSH HL + LD HL,Spec_Page.flag_R + LD (HL),"R" + INC HL + LD (HL),"S" + INC HL + LD (HL),"T" + POP HL + ; + LD A,#FF + LD (Spec_Page.Reload_Version),A + ; + RET ; PREPARE_TO_EXIT_NEW: CALL RESTORE_IM1_DSS ; @@ -6311,25 +6333,112 @@ PREPARE_TO_EXIT_NEW: CALL RESTORE_IM1_DSS RST ToBIOS ; LD A,(.current_screen) - XOR 1 - LD B,A - LD A,Dss.SetVMod.grf640x256 - LD C,Dss.SetVMod + LD E,A + LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default + RST ToBIOS + ; + CALL RESTORE_PAL + ; + LD BC,Dss.Lib_Sub.RestoreFont RST ToDSS - ; + ; + LD A,(.current_vmode) + CP Dss.SetVMod.txt80x32 + 1 + RET NC + ; + ; + ; LD A,(.current_screen) + ; XOR 1 + ; LD B,A + ; LD A,Dss.SetVMod.grf640x256 + ; LD C,Dss.SetVMod + ; RST ToDSS + ; .current_vmode+1: LD A,Dss.SetVMod.txt80x32 .current_screen+2: LD BC,Dss.SetVMod.Screen_0 RST ToDSS ; .cursor+1: LD DE,0 LD C,Dss.Locate - JP ToDSS + RST ToDSS + LD C,Dss.WinRest + JR TXT_Screen_Copy_Restore ; +;*********************************************************************** +SAVE_PAL: IN A,(SLOT0) + EX AF,AF' + XOR A ; ZERO_PAGE + OUT (SLOT0),A + ; + OUT (PORT_Y),A + LD A,#50 + OUT (SLOT3),A + ; + LD DE,NEW_BUFFERS.Palette - #C000 +.loop: LD HL,#C3E0 + LD BC,#20 + LDIR + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + JR NZ,.loop + ; + EX AF,AF' + OUT (SLOT0),A + RET +;*********************************************************************** +RESTORE_PAL: IN A,(SLOT0) + EX AF,AF' + XOR A ; ZERO_PAGE + OUT (SLOT0),A + ; + LD A,#50 + OUT (SLOT3),A + XOR A + OUT (PORT_Y),A + ; + LD HL,NEW_BUFFERS.Palette - #C000 +.loop: LD DE,#C3E0 + LD BC,#20 + LDIR + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + JR NZ,.loop + ; + EX AF,AF' + OUT (SLOT0),A + RET +;*********************************************************************** +SAVE_TXT_SCREEN: + LD (PREPARE_TO_EXIT_NEW.current_vmode),A + LD A,B + LD (PREPARE_TO_EXIT_NEW.current_screen),A + ; + LD C,Dss.Cursor + RST ToDSS + LD (PREPARE_TO_EXIT_NEW.cursor),DE + ; + LD C,Dss.WinCopy +;;;;;;;;; +TXT_Screen_Copy_Restore: + LD A,(PREPARE_TO_EXIT_NEW.current_vmode) + SUB 2 + LD DE,0 + LD HL,#2050 + JR NZ,.next + LD L,#28 +.next: ; + LD B,ZERO_PAGE ; страница буфера + LD IX,NEW_BUFFERS.TXT_Screen + JP ToDSS +;*********************************************************************** LOADER_STRINGS: .Info: DB "\r\nThunder in the Deep v1.10 fixed. Copyright (C) 2003 Deviants.\r\n" DZ "Bug fixes by Tolik_Trek@Sprinter_Team in 2024.\r\n\r\n" +.OldDSS: DZ "To run this version of TITD you need DSS v1.70.999 or higher." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - BLOCK (stack_point - stack_point.size - 1)-$,0 + ASSERT (stack_point - stack_point.size - 1)>$, TOO MANY CODE!!! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \ No newline at end of file