diff --git a/game_loader_dasm.a80 b/game_loader_dasm.a80 index d6e277f..b03f84f 100644 --- a/game_loader_dasm.a80 +++ b/game_loader_dasm.a80 @@ -18,6 +18,7 @@ NEW_BUFFERS: ; For Zero page .Palette.Size EQU 1024*8 .TXT_Screen EQU .Palette + .Palette.Size .TXT_Screen.Size EQU 80*32*2 +.TMP EQU #D000 DSS_MIN_VERS: .vers EQU 1 @@ -5502,7 +5503,7 @@ la921h: RET ;a94e c9 . OPEN_PAK_FILE: LD C,Dss.Open ;a94f 0e 11 . . -.name+1: LD HL,PAK_FILE_NAME ;a951 21 85 a9 ! . . + LD HL,PAK_FILE_NAME ;a951 21 85 a9 ! . . LD A,Dss.Open.R ;a954 3e 01 > . RST ToDSS ;a956 d7 . JP C,ERROR_EXIT ;a957 da 85 aa . . . @@ -5510,7 +5511,7 @@ OPEN_PAK_FILE: LD C,Dss.Open ;a94f 0e 11 . . LD (PAK_FILE_FM),A ;a95a 32 80 aa 2 . . CALL CHECK_ZERO_FILE_SIZE ;a95d cd 6b aa . k . JP Z,ERROR_EXIT ;a960 ca 85 aa . . . - LD (PAK_FILE_FM.Size_HL),HL ;a963 22 81 aa " . . +.nxt: LD (PAK_FILE_FM.Size_HL),HL ;a963 22 81 aa " . . LD (PAK_FILE_FM.Size_IX),IX ;a966 dd 22 83 aa . " . . ; LD BC,Dss.Move_FP.FrStart ;a96a 01 15 00 . . . @@ -6137,10 +6138,14 @@ lad3eh: ; NEW CODE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;*********************************************************************** -ERROR_OLD_DSS: LD HL,LOADER_STRINGS.OldDSS - LD C,Dss.PChars +NEW_ERROR_EXIT: +.OLD_DSS: LD HL,LOADER_STRINGS.OldDSS +.print: LD C,Dss.PChars RST ToDSS JP GOTO_ERROR_EXIT + ; +.NO_ACX: LD HL,STRING_SPECIAL_no_acx + JR .print ;*********************************************************************** NEW_CODE_START: DI @@ -6153,93 +6158,23 @@ NEW_CODE_START: DI SCF LD HL,256*DSS_MIN_VERS.vers + DSS_MIN_VERS.modf SBC HL,DE - JR NC,ERROR_OLD_DSS + JR NC,NEW_ERROR_EXIT.OLD_DSS LD HL,DSS_MIN_VERS.build SBC HL,BC - JR NC,ERROR_OLD_DSS - ; - CALL FULL_SAVE_TXT_SCREEN + JR NC,NEW_ERROR_EXIT.OLD_DSS ; LD A,GAME_NEED_MEM_PAGES CALL GET_MEM_AND_PAGES + CALL GET_BITSTREAM + JR C,NEW_ERROR_EXIT.NO_ACX + ; + CALL FULL_SAVE_TXT_SCREEN CALL GENERATE_PALETTE IN A,(SLOT1) LD (l8205h.mem_pg),A ; - LD HL,TITD_ACX.NAME - LD BC,BIOS.FN_CRIPT.AcexAndBitstream - RST ToBIOS - ; - LD HL,TITD_ACX.NAME - LD BC,5 - PUSH BC - XOR A - CPIR - JP PO,SetUp_RESET_EXIT - ; - DEC HL - EX DE,HL - LD HL,TITD_ACX.TYPE - POP BC - LDIR - ; HL = TITD_ACX.NAME - LD (OPEN_PAK_FILE.name),HL - CALL OPEN_PAK_FILE ; patched - ; - XOR A - LD HL,(PAK_FILE_FM.Size_HL) - LD DE,(PAK_FILE_FM.Size_IX) - ; -.loop: EX AF,AF' - LD A,H - OR L - OR D - OR E - JR Z,.exit2Loop - EX AF,AF' - ; - PUSH HL - PUSH DE - PUSH AF - ; - CALL SET_PAGE_SLOT3 - LD A,(PAK_FILE_FM) - LD HL,#C000 - LD DE,#4000 - LD C,Dss.Read - RST ToDSS - JP C,ERROR_EXIT - ; - POP AF - POP DE - POP HL - INC A - CP GAME_NEED_MEM_PAGES - JP NC,ERROR_EXIT - ; - CCF - LD BC,#4000 - EX DE,HL - SBC HL,BC - EX DE,HL - JR Z,.loop - LD B,C - SBC HL,BC - JR NC,.loop -.exitLoop: ; выход, если размер конфы не кратен размеру страницы - EX DE,HL -.loop2: LD (HL),#FF - INC HL - BIT 7,H - JR NZ,.loop2 -.exit2Loop: ; выход, если размер конфы кратен размеру страницы - LD C,Dss.Close - LD A,(PAK_FILE_FM) - RST ToDSS - JP C,ERROR_EXIT - ; - LD HL,PAK_FILE_NAME - LD (OPEN_PAK_FILE.name),HL + ;LD HL,PAK_FILE_NAME + ;LD (OPEN_PAK_FILE.name),HL CALL OPEN_PAK_FILE ; костыль на пропуск конфы в PAK файле LD A,(PAK_FILE_FM) @@ -6305,24 +6240,93 @@ CAD_RESET_HANDLER: ; OUT (SYS_PORT.ROM),A LD BC,BIOS.REINIT.HARD_RESET JP ToBIOS_18 -; + ; ; -; 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 -; ; +GET_BITSTREAM: LD HL,TITD_ACX.NAME + LD BC,BIOS.FN_CRIPT.AcexAndBitstream + RST ToBIOS + ; + LD HL,TITD_ACX.NAME + LD BC,5 + PUSH BC + XOR A + CPIR + SCF + RET PO + ; + DEC HL + ;LD (HL)," " + EX DE,HL + LD HL,TITD_ACX.TYPE + POP BC + LDIR + ; HL = TITD_ACX.NAME + LD C,Dss.Open + LD A,Dss.Open.R + RST ToDSS + RET C + ; + LD (PAK_FILE_FM),A + CALL CHECK_ZERO_FILE_SIZE + SCF + RET Z + CALL OPEN_PAK_FILE.nxt + XOR A + LD HL,(PAK_FILE_FM.Size_HL) + LD DE,(PAK_FILE_FM.Size_IX) + ; +.loop: EX AF,AF' + LD A,H + OR L + OR D + OR E + JR Z,.exit2Loop + EX AF,AF' + ; + PUSH HL + PUSH DE + PUSH AF + ; + CALL SET_PAGE_SLOT3 + LD A,(PAK_FILE_FM) + LD HL,#C000 + LD DE,#4000 + LD C,Dss.Read + RST ToDSS + RET C + ; + POP AF + POP DE + POP HL + INC A + CP GAME_NEED_MEM_PAGES + CCF + RET C + ; + SCF + LD BC,#4000 + EX DE,HL + SBC HL,BC + EX DE,HL + JR Z,.loop + LD B,C + SBC HL,BC + JR NC,.loop +.exitLoop: ; выход, если размер конфы не кратен размеру страницы + EX DE,HL +.loop2: LD (HL),#FF + INC HL + BIT 7,H + JR NZ,.loop2 +.exit2Loop: ; выход, если размер конфы кратен размеру страницы + LD C,Dss.Close + LD A,(PAK_FILE_FM) + JP ToDSS + ; +STRING_SPECIAL_no_acx: ;83a4 + DZ "\r\n[Thunder In The Deep Special Message] : Error with ACX file for your chip!\r\n" + ; PREPARE_TO_EXIT_NEW: CALL RESTORE_IM1_DSS JR FULL_RESTORE_SCREEN ;***********************************************************************