Работает. теперь надо в дос перенести функцию рестора экрана

This commit is contained in:
Tolik 2024-10-23 03:02:08 +10:00
parent bab76bd4b2
commit 6548d0a49f
2 changed files with 162 additions and 53 deletions

@ -1 +1 @@
Subproject commit c7bcbd096d4674064766dc9f61121f4843ddd635 Subproject commit 4e4294ea21fab73299b8e389979c38d801f861b0

View File

@ -13,9 +13,23 @@ program_start EQU NEW_CODE_START
stack_point EQU #C000 stack_point EQU #C000
.size EQU 128 .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 GAME_NEED_MEM_PAGES EQU #C6
PAGES_BUFFER EQU #BE00 PAGES_BUFFER EQU #BE00
.size EQU #100 .size EQU #100
;---------------------------------------
EXE_ORG #8000 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 > . .mem_pg+1: LD A,5 ;822f 3e 05 > .
OUT (SLOT1),A ;8231 d3 a2 . . OUT (SLOT1),A ;8231 d3 a2 . .
; ;
HARD_RESET: DI ;8233 f3 . HARD_RESET: LD A,ACEX.Config_PG.Sp2000
LD A,ACEX.Config_PG.Sp2000
LD BC,BIOS.RST_CONF.CUSTOM LD BC,BIOS.RST_CONF.CUSTOM
RST ToBIOS RST ToBIOS
; ;
DI
CALL PREPARE_TO_EXIT_NEW CALL PREPARE_TO_EXIT_NEW
; ;
.loop_exit: LD BC,Dss.Exit .loop_exit: LD BC,Dss.Exit
@ -510,7 +524,7 @@ RESTORE_IM1_DSS:
LD A,#C3 ;8387 3e 00 > . LD A,#C3 ;8387 3e 00 > .
LD (#38),A ;8389 32 38 00 2 8 . LD (#38),A ;8389 32 38 00 2 8 .
LD HL,#003B ;838c 21 00 00 ! . . 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 . RET ;8392 c9 .
l8393h: CALL sub_837fh ;8393 cd 7f 83 . . . l8393h: CALL sub_837fh ;8393 cd 7f 83 . . .
@ -4265,9 +4279,9 @@ CURRENT_PAGE:
GET_MEM_AND_PAGES: GET_MEM_AND_PAGES:
LD (CURRENT_MEM_USED),A ;a1b7 32 b4 a1 2 . . 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 LD B,A ;a1bc 47 G
RST ToBIOS ;a1bd cf . RST ToDSS ;a1bd cf .
JP C,l83a1h ;a1be da a1 83 . . . JP C,l83a1h ;a1be da a1 83 . . .
; ;
LD (CURRENT_MEM_BLOCK_ID),A ;a1c1 32 af a2 2 . . 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 . . . JP C,l83a1h ;a1ca da a1 83 . . .
RET ;a1cd c9 . 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 : . . 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 . JP C,SetUp_RESET_EXIT ;a1d4 da 63 83 . c .
RET ;a1d7 c9 . RET ;a1d7 c9 .
@ -4338,12 +4352,12 @@ sub_a208h:
la216h: la216h:
XOR A ;a216 af . XOR A ;a216 af .
INC A ;a217 3c < 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 . RST ToBIOS ;a21b cf .
RET ;a21c c9 . RET ;a21c c9 .
LD DE,00100h ;a21d 11 00 01 . . . LD DE,00100h ;a21d 11 00 01 . . .
la220h: 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 ! . . LD HL,PALETTE_1 ;a223 21 83 a2 ! . .
XOR A ;a226 af . XOR A ;a226 af .
PUSH DE ;a227 d5 . PUSH DE ;a227 d5 .
@ -6113,37 +6127,46 @@ lad3eh:
RET ;ae1b c9 . RET ;ae1b c9 .
; ;
DZ 'Cash.dat' ;ae1c DZ 'Cash.dat' ;ae1c
; [ ] FIX 19/10/2024
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NEW CODE ; 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 LD C,Dss.PChars
RST ToDSS RST ToDSS
; ;
LD C,Dss.Cursor LD C,Dss.Version
RST ToDSS 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 LD C,Dss.GetVMod
RST ToDSS RST ToDSS
JR C,.no_vmode JR C,.no_vmode
CP #80 CP #80
JR NC,.no_vmode CALL C,SAVE_TXT_SCREEN
; ;
LD (PREPARE_TO_EXIT_NEW.current_vmode),A .no_vmode: CALL SAVE_PAL
LD A,B
LD (PREPARE_TO_EXIT_NEW.current_screen),A
; ;
LD A,Dss.SetVMod.grf320x256 LD A,GAME_NEED_MEM_PAGES
LD B,Dss.SetVMod CALL GET_MEM_AND_PAGES
RST ToDSS CALL GENERATE_PALETTE
.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 .
IN A,(SLOT1) IN A,(SLOT1)
LD (l8205h.mem_pg),A LD (l8205h.mem_pg),A
; ;
@ -6254,8 +6277,8 @@ NEW_CODE_START: LD HL,LOADER_STRINGS.Info
CALL SETUP_RESET_HANDLER CALL SETUP_RESET_HANDLER
; ;
LD A,(PAGES_BUFFER) LD A,(PAGES_BUFFER)
LD C,BIOS.FreeMem LD C,Dss.FreeMem
RST ToBIOS RST ToDSS
; restore HOLD port ; restore HOLD port
LD D,CMOS_CELL.ScreenPosition LD D,CMOS_CELL.ScreenPosition
LD C,BIOS.CMOS_RD LD C,BIOS.CMOS_RD
@ -6284,8 +6307,7 @@ CAD_RESET_HANDLER:
; ;
; ;
SETUP_RESET_HANDLER_NEW: SETUP_RESET_HANDLER_NEW:; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨
; “áâ ­ ¢«¨¢ ¥¬ ª«îç¨
PUSH HL PUSH HL
LD HL,Spec_Page.flag_R LD HL,Spec_Page.flag_R
LD (HL),"R" LD (HL),"R"
@ -6311,25 +6333,112 @@ PREPARE_TO_EXIT_NEW: CALL RESTORE_IM1_DSS
RST ToBIOS RST ToBIOS
; ;
LD A,(.current_screen) LD A,(.current_screen)
XOR 1 LD E,A
LD B,A LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
LD A,Dss.SetVMod.grf640x256 RST ToBIOS
LD C,Dss.SetVMod ;
CALL RESTORE_PAL
;
LD BC,Dss.Lib_Sub.RestoreFont
RST ToDSS 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_vmode+1: LD A,Dss.SetVMod.txt80x32
.current_screen+2: LD BC,Dss.SetVMod.Screen_0 .current_screen+2: LD BC,Dss.SetVMod.Screen_0
RST ToDSS RST ToDSS
; ;
.cursor+1: LD DE,0 .cursor+1: LD DE,0
LD C,Dss.Locate 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: LOADER_STRINGS:
.Info: DB "\r\nThunder in the Deep v1.10 fixed. Copyright (C) 2003 Deviants.\r\n" .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" 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!!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;