From 4f2a1ad7a752fe0070111b45d9e3aac98e1cda40 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 1 Sep 2023 23:21:09 +1000 Subject: [PATCH 01/16] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 95c15f4..d83a663 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 95c15f46dcd79b9ea7f60eca0011152305fbc366 +Subproject commit d83a6638743aa3cb68a6adf85402fabb54c61c34 From 55053c05ec102c88cabc828836561977e390835a Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 31 Oct 2023 02:08:01 +1000 Subject: [PATCH 02/16] ... --- D2_FRAM.asm | 92 ++++++++++++------------- DOOM2.asm | 174 +++++++++++++++++++++++++++++++----------------- Shared_Includes | 2 +- 3 files changed, 160 insertions(+), 108 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index 8a83e4a..1222b0d 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -788,7 +788,7 @@ MAP_LOOP_2: LD BC,#0100 OUT (C),C ; МАСШТАБ 1:1 - IF NORM_ACC +; IF NORM_ACC LD B,16 LD A,184 @@ -814,55 +814,55 @@ MAP_LOOP_1: DJNZ MAP_LOOP_1 - ELSE +; ELSE - LD B,16 - LD A,184 +; LD B,16 +; LD A,184 -MAP_LOOP_1: +; MAP_LOOP_1: - ACC_SetBlockSize - LD C,#40 - ACC_CopyBlock - LD C,(HL) - ACC_Off +; ACC_SetBlockSize +; LD C,#40 +; ACC_CopyBlock +; LD C,(HL) +; ACC_Off - OUT (RGADR),A - ACC_CopyBlock - LD (DE),A - ACC_Off - INC A - LD L,64 - ACC_CopyBlock - LD C,(HL) - ACC_Off - OUT (RGADR),A - ACC_CopyBlock - LD (DE),A - ACC_Off - INC A - LD L,64*2 - ACC_CopyBlock - LD C,(HL) - ACC_Off - OUT (RGADR),A - ACC_CopyBlock - LD (DE),A - ACC_Off - INC A - LD L,64*3 - ACC_CopyBlock - LD C,(HL) - ACC_Off - OUT (RGADR),A - ACC_CopyBlock - LD (DE),A - ACC_Off - INC A - INC H - LD L,0 - DJNZ MAP_LOOP_1 - ENDIF +; OUT (RGADR),A +; ACC_CopyBlock +; LD (DE),A +; ACC_Off +; INC A +; LD L,64 +; ACC_CopyBlock +; LD C,(HL) +; ACC_Off +; OUT (RGADR),A +; ACC_CopyBlock +; LD (DE),A +; ACC_Off +; INC A +; LD L,64*2 +; ACC_CopyBlock +; LD C,(HL) +; ACC_Off +; OUT (RGADR),A +; ACC_CopyBlock +; LD (DE),A +; ACC_Off +; INC A +; LD L,64*3 +; ACC_CopyBlock +; LD C,(HL) +; ACC_Off +; OUT (RGADR),A +; ACC_CopyBlock +; LD (DE),A +; ACC_Off +; INC A +; INC H +; LD L,0 +; DJNZ MAP_LOOP_1 +; ENDIF LD BC,240 EX DE,HL diff --git a/DOOM2.asm b/DOOM2.asm index b025c17..b364b3a 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -8,38 +8,38 @@ ; ;---------------------------[Defines section]--------------------------- - IFNDEF HARDWARE : IFNDEF ZXMAK2 : IFNDEF MAME : DEFINE HARDWARE 1 : ENDIF : ENDIF : ENDIF +; IFNDEF HARDWARE : IFNDEF ZXMAK2 : IFNDEF MAME : DEFINE HARDWARE 1 : ENDIF : ENDIF : ENDIF - IFDEF HARDWARE - DEFINE NORM_ACC 1 - DEFINE NORM_syncPORT 1 - DEFINE NORM_FastRAM 1 - ENDIF - IFDEF ZXMAK2 - DEFINE NORM_ACC 0 - DEFINE NORM_syncPORT 0 - DEFINE NORM_FastRAM 0 - ENDIF - IFDEF MAME - DEFINE NORM_ACC 1 - DEFINE NORM_syncPORT 0 - DEFINE NORM_FastRAM 1 - ENDIF +; IFDEF HARDWARE +; DEFINE NORM_ACC 1 +; DEFINE NORM_syncPORT 1 +; DEFINE NORM_FastRAM 1 +; ENDIF +; IFDEF ZXMAK2 +; DEFINE NORM_ACC 0 +; DEFINE NORM_syncPORT 0 +; DEFINE NORM_FastRAM 0 +; ENDIF +; IFDEF MAME +; DEFINE NORM_ACC 1 +; DEFINE NORM_syncPORT 0 +; DEFINE NORM_FastRAM 1 +; ENDIF IFNDEF YesSound : DEFINE YesSound 0 : ENDIF DEFINE EXE_HEADER 1 ; DEFINE NEED_LOADER 1 - IFDEF HARDWARE - DISPLAY "[]------[ Compilation target: Sprinter 2000 ]------[]" - ENDIF - IFDEF ZXMAK2 - DISPLAY "[]------[ Compilation target: emulator ZXMAK2 ]------[]" - ENDIF - IFDEF MAME - DISPLAY "[]------[ Compilation target: emulator MAME ]------[]" - ENDIF +; IFDEF HARDWARE +; DISPLAY "[]------[ Compilation target: Sprinter 2000 ]------[]" +; ENDIF +; IFDEF ZXMAK2 +; DISPLAY "[]------[ Compilation target: emulator ZXMAK2 ]------[]" +; ENDIF +; IFDEF MAME +; DISPLAY "[]------[ Compilation target: emulator MAME ]------[]" +; ENDIF ;----------------------------------------------------------------------- ; @@ -207,12 +207,12 @@ Loader_length EQU 0 EXX ; - IFN NORM_syncPORT - DI - LD A, +(high im_handler_emulator) - LD I,A -; IM 2 - пока не включаем, процедура прерывания прыгает в кэш, а он не вставлен и не прогружен - ENDIF +; IFN NORM_syncPORT +; DI +; LD A, +(high im_handler_emulator) +; LD I,A +; ; IM 2 - пока не включаем, процедура прерывания прыгает в кэш, а он не вставлен и не прогружен +; ENDIF CALL MAIN @@ -245,12 +245,12 @@ SP_SAVE1: ;-----------[EXIT Procedure]------------; Сделать!!! RETURN_POINT: ; точка возврата - полный сброс DI - LD A,10h - LD BC,1FFDh + LD A,#10 + LD BC,#1FFD OUT (C),A - LD A,0A0h ; Reset page. Работает ли?!!!!!!!!! + LD A,RESET_PAGE OUT (SLOT3),A - LD (0C000h),HL + LD (#C000),HL HALT_L: DI HALT @@ -341,7 +341,59 @@ MemPatch_SPSave2 EQU $+1 POP AF OUT (SLOT3),A RET -;--------------------------------------- + + +;----------------------------------------------------------------------; +; FOR ZX-ROM in SLOT0 +; _2L_PRIKOL: +; LD A,7 +; OUT (BorderColor),A +; XOR A +; OUT (RGADR),A + +; LD A,2 +; LD HL,#4000 +; LD B,27 +; CALL .pause_loop + +; LD A,0 +; LD HL#4000 +; LD B,27 +; CALL .pause_loop + +; CALL #0D6B ; CLS +; LD HL,.TXT_SP +; CALL PRINT_LOOP +; RET + +; .pause_loop: +; LD (HL),A +; INC L +; PUSH DE +; POP DE +; JR NZ,.pause_loop +; INC H +; DJNZ .pause_loop +; ; +; LD HL,#8000 +; .loop: PUSH HL +; POP HL +; DEC HL +; LD A,H +; OR L +; JR NZ,.loop +; RET + +; .PRINT_LOOP: +; LD A,(HL) +; INC HL +; CP #FF +; RET Z +; RST #10 +; JR .PRINT_LOOP + +; .TXT_SP: DB #7F," 1982 Sinclair Research Ltd.",#FF +;----------------------------------------------------------------------; ; FLAG: DB 0 @@ -526,9 +578,9 @@ MemPatch_D2_FRAM_page equ $-1 ld (MemPatch_DOOM2_SndPage),a ENDIF - IFN NORM_syncPORT - IM 2 ; вот теперь можно включать - ENDIF +; IFN NORM_syncPORT +; IM 2 ; вот теперь можно включать +; ENDIF POP AF OUT (SLOT3),A @@ -726,7 +778,7 @@ DM_LOOP: CALL CLEAR_Z_BUFER LOOP_SCR: - IF NORM_syncPORT +; IF NORM_syncPORT IN A,(SCR_SyncPort) BIT 5,A JR NZ,CONT_WORK @@ -739,10 +791,10 @@ LOOP_SCR: JR LOOP_SCR - ELSE - EI - HALT - ENDIF +; ELSE +; EI +; HALT +; ENDIF CONT_WORK: CALL SCR_SWITCH @@ -771,7 +823,7 @@ SET_1: PAUSE_INT: CALL SOUND1 - IF NORM_syncPORT +; IF NORM_syncPORT IN A,(SCR_SyncPort) BIT 5,A JR NZ,PAUSE_INT @@ -782,11 +834,11 @@ PAUSE_INT1: BIT 5,A RET NZ JR PAUSE_INT1 - ELSE - EI - HALT - ret - ENDIF +; ELSE +; EI +; HALT +; ret +; ENDIF PAUSE_SNDC: JP SOUND @@ -1843,19 +1895,19 @@ NAME9: DB "_ENI511CCBL " ; - IFN NORM_syncPORT +; IFN NORM_syncPORT -im_handler_emul_proc_address: - di - push af - call KBD_INT - pop af - reti +; im_handler_emul_proc_address: +; di +; push af +; call KBD_INT +; pop af +; reti - BLOCK +(#FF - low $) -im_handler_emulator: - dw im_handler_emul_proc_address - ENDIF +; BLOCK +(#FF - low $) +; im_handler_emulator: +; dw im_handler_emul_proc_address +; ENDIF ; OUTEND ; конец файла doom2.exe ; diff --git a/Shared_Includes b/Shared_Includes index d83a663..a15861c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit d83a6638743aa3cb68a6adf85402fabb54c61c34 +Subproject commit a15861c07cab60eaf09c28226d0c7761b4fd8235 From 84f6958d37f6b3ec3745dea864937248152c1142 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 2 Feb 2024 01:17:36 +1000 Subject: [PATCH 03/16] =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD?= =?UTF-8?q?=D0=BA=D0=B0=D0=B8=20=D0=BD=D0=B0=20=D0=B7=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B5=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C?= =?UTF-8?q?=20=D0=BD=D0=BE=D1=80=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- D2_FRAM.asm | 215 ++++++++++++++++++++++++------------------------ DOOM2.asm | 155 ++++++++++++++++++++-------------- Shared_Includes | 2 +- 3 files changed, 202 insertions(+), 170 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index 1222b0d..c3c23dc 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -61,7 +61,7 @@ SKY_LOOP_1: XOR A - OUT (RGADR),A + OUT (PORT_Y),A ACC_CopyScreenBlock LD (DE),A ACC_Off @@ -69,14 +69,14 @@ SKY_LOOP_1: INC DE INC DE - OUT (RGADR),A + OUT (PORT_Y),A ACC_CopyScreenBlock LD (DE),A ACC_Off DEC DE - OUT (RGADR),A + OUT (PORT_Y),A ACC_CopyScreenBlock LD (DE),A ACC_Off @@ -84,7 +84,7 @@ SKY_LOOP_1: INC DE INC DE - OUT (RGADR),A + OUT (PORT_Y),A ACC_CopyScreenBlock LD (DE),A ACC_Off @@ -98,11 +98,11 @@ SKY_LOOP_1: RES 7,H SET 6,H - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF LD A,(SKY_1) LD B,A @@ -118,20 +118,21 @@ NO_NEXT_SKY: DEC C JR NZ,SKY_LOOP_1 - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF ; EXX -SCREEN_1 EQU $+1 - LD DE,#C040 ; начало экрана - LD C,0 ;!!!!!!!!!!!!!!!!!!!!!!!!!! +SCREEN_1+1: + LD DE,#C040 ; начало экрана + LD C,0 ;!!!!!!!!!!!!!!!!!!!!!!!!!! EXX ; - LD HL,0 ; начальный угол * 32 -ANGLE_M EQU $-2 +ANGLE_M+1: + LD HL,0 ; начальный угол * 32 + ; LD A,H RLCA @@ -148,11 +149,11 @@ ANGLE_M EQU $-2 TRACE_NEXT_: ; EXX - LD HL,(PLACE_L) ; текущее положение в таблице - INC HL - LD A,(HL) - LD (PLACE_L1),A - LD (PLACE_L2),A + LD HL,(PLACE_L) ; текущее положение в таблице + INC HL + LD A,(HL) + LD (PLACE_L1),A + LD (PLACE_L2),A EXX ; PLACE_L EQU $+1 @@ -166,7 +167,7 @@ TRACE_LOOP: LD A,#50 OUT (SLOT3),A XOR A - OUT (RGADR),A + OUT (PORT_Y),A REPT 16 LD E,(HL) ; первый и далее следующий кубик @@ -183,7 +184,7 @@ PURE_LINE: LD A,#80 ; пустая стенка ACC_Off ; LD (DE),A ; LINE-Z-bufer - OUT (RGADR),A + OUT (PORT_Y),A LD A,(COLOR_LO) @@ -259,7 +260,7 @@ PLACE_L2 EQU $-1 ; <64 точки, на весь экран XOR A - OUT (RGADR),A ; с самого начала + OUT (PORT_Y),A ; с самого начала ACC_SetBlockSize LD (DE),A ; 256 байт И LINE-Z-bufer!!!! @@ -281,7 +282,7 @@ HIGH_1: LD (DE),A ; число точек потолка и пола! & LINE-Z-bufer ACC_Off NEG ; получить положение начала пола - OUT (RGADR),A + OUT (PORT_Y),A LD L,A LD A,#58 @@ -305,10 +306,10 @@ COLOR_LO EQU $-1 LD A,L NEG - OUT (RGADR),A + OUT (PORT_Y),A LD A,L -; IN A,(RGADR) +; IN A,(PORT_Y) ADD A,A ; NEG ; выводимый размер стенки ; стенка в акселераторе! @@ -346,11 +347,11 @@ CONT_PAGE EQU $-1 ; CALL SOUND ; играть музыку на ковоксбластере!!! - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF INC H BIT 7,H @@ -401,7 +402,7 @@ TRACE_RET_SLOT1 EQU $-1 ; OUT (SLOT1),A LD A,0 - OUT (RGADR),A + OUT (PORT_Y),A RET ; ;*************************************** @@ -463,9 +464,8 @@ NO_CORN1: ; ;*************************************** ; -SET_PICTURE: ; A - относительный номер страницы - +SET_PICTURE: LD C,SLOT1 IN B,(C) PUSH BC @@ -476,11 +476,11 @@ SET_PICTURE: LD A,#50 OUT (C),A - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF ; ld bc,#0100 ; масштабирование - 1 OUT (C),B @@ -491,7 +491,8 @@ SET_PICTURE: ACC_SetBlockSize LD A,0 ; по 256 байт ACC_Off - OUT (RGADR),A + inc a ;!FIXIT костыль, иначе со счётчиком акселя что-то не так + OUT (PORT_Y),A POP AF @@ -522,11 +523,11 @@ LOOP_PG: POP BC - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF DJNZ PIC_LOOP @@ -725,7 +726,7 @@ W_OUT_L: LD A,#44 SUB H - OUT (RGADR),A + OUT (PORT_Y),A ; ;------[оптимизировать?]---------------- OUT (C),C ; МАСШТАБ 1:1, начинать с 0 @@ -805,7 +806,7 @@ MAP_LOOP_1: INC H REPT 4 - OUT (RGADR),A + OUT (PORT_Y),A ACC_CopyBlock LD (DE),A ACC_Off @@ -827,7 +828,7 @@ MAP_LOOP_1: ; LD C,(HL) ; ACC_Off -; OUT (RGADR),A +; OUT (PORT_Y),A ; ACC_CopyBlock ; LD (DE),A ; ACC_Off @@ -836,7 +837,7 @@ MAP_LOOP_1: ; ACC_CopyBlock ; LD C,(HL) ; ACC_Off -; OUT (RGADR),A +; OUT (PORT_Y),A ; ACC_CopyBlock ; LD (DE),A ; ACC_Off @@ -845,7 +846,7 @@ MAP_LOOP_1: ; ACC_CopyBlock ; LD C,(HL) ; ACC_Off -; OUT (RGADR),A +; OUT (PORT_Y),A ; ACC_CopyBlock ; LD (DE),A ; ACC_Off @@ -854,7 +855,7 @@ MAP_LOOP_1: ; ACC_CopyBlock ; LD C,(HL) ; ACC_Off -; OUT (RGADR),A +; OUT (PORT_Y),A ; ACC_CopyBlock ; LD (DE),A ; ACC_Off @@ -874,7 +875,7 @@ MAP_LOOP_1: JR Z,MAP_LOOP_2 LD A,0 - OUT (RGADR),A + OUT (PORT_Y),A POP AF POP HL @@ -906,7 +907,7 @@ WALL: LD (SLOT3_RET1),A IN A,(SLOT1) LD (SLOT1_RET1),A - IN A,(RGADR) + IN A,(PORT_Y) LD (RGADR_RET1),A LD A,#58 OUT (SLOT3),A @@ -992,7 +993,7 @@ NO_DEL4: WOLL_LOOP: XOR A - OUT (RGADR),A + OUT (PORT_Y),A LD A,D CP #C3 @@ -1043,7 +1044,7 @@ NO_Z_A1: JR Z,NO_Z_A XOR A NO_Z_A: - OUT (RGADR),A ; задать порт Y + OUT (PORT_Y),A ; задать порт Y ACC_CopyScreenBlock LD (DE),A ; вывести линию @@ -1052,11 +1053,11 @@ NO_Z_A: LD A,E AND #0F - IF YesSound - CALL Z,SOUND - ; ELSE - ; CALL Z,YesSoundZero - ENDIF + IF YesSound + CALL Z,SOUND + ; ELSE + ; CALL Z,YesSoundZero + ENDIF NO_WRITE_LINE: @@ -1077,7 +1078,7 @@ NO_WRITE_ALL: ; RGADR_RET1 EQU $+1 LD A,0 - OUT (RGADR),A + OUT (PORT_Y),A SLOT3_RET1 EQU $+1 LD A,0 OUT (SLOT3),A @@ -1172,11 +1173,11 @@ MAP_L4: POP HL PUSH HL - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + IF YesSound + CALL SOUND + ; ELSE + ; CALL YesSoundZero + ENDIF LD C,16 @@ -1204,9 +1205,9 @@ MAP_L6: POP HL PUSH HL - IF YesSound - CALL SOUND - ENDIF + IF YesSound + CALL SOUND + ENDIF LD C,16 @@ -1307,7 +1308,7 @@ CONT_MOVE: ;COV_ADR: DB 0 ;SND_P: DB #FF SND_A: DW #C000 - IF YesSound + IF YesSound SND_STOP: ; остановить музыку PUSH AF @@ -1361,29 +1362,27 @@ SND_INIT: LD E,A JR SND_INIT1 - ENDIF + ENDIF SOUND: - IF !YesSound - ; PUSH AF - ; CALL KBD_INT - ; POP AF - RET - ENDIF + IF !YesSound + ; PUSH AF + ; CALL KBD_INT + ; POP AF + RET + ENDIF ; - IF YesSound -MemPatch_SoundOnOff EQU $ - NOP ; сюда вставляется команда RET для отключения звука и NOP для включения + IF YesSound +MemPatch_SoundOnOff: + NOP ; сюда вставляется команда RET для отключения звука и NOP для включения PUSH AF PUSH HL SND_MORE: - CALL KBD_INT - IN A,(#FE) ; - XOR 0 ; covox адрес -COV_ADR EQU $-1 +COV_ADR+1: + XOR 0 ; covox адрес ; AND #80 JP NZ,NO_LD_SND @@ -1401,8 +1400,8 @@ COV_ADR EQU $-1 IN A,(SLOT3) LD E,A -MemPatch_D2_FRAM_SndPage EQU $+1 - LD A,0 +MemPatch_D2_FRAM_SndPage+1: + LD A,0 OUT (SLOT3),A L_DDX: @@ -1426,7 +1425,6 @@ L_DDX: JP NZ,NO_SNDP SND_INIT1: - PUSH IX PUSH AF EX AF,AF' @@ -1473,11 +1471,11 @@ SND_INIT1: ;_------[Чтение секторов с диска]------- NO_NEW_COUNT: LD HL,-SND_READ_SECTORS*512 ; буфер для данных - LD A,0 ; страница буфера, если адрес в окне #C000 - LD DE,(SND_S1) ; абсолютный номер сектора Младшая часть - LD IX,(SND_S2) ; абсолютный номер сектора Старшая часть + LD A,0 ; страница буфера, если адрес в окне #C000 + LD DE,(SND_S1) ; абсолютный номер сектора Младшая часть + LD IX,(SND_S2) ; абсолютный номер сектора Старшая часть LD B,SND_READ_SECTORS ; число читаемых секторов - LD C,BIOS.HDD_READ ; функция чтения + LD C,BIOS.HDD_READ ; функция чтения CALL HDD_FN ;--------------------------------------- @@ -1582,7 +1580,7 @@ CLEAR_Z_BUFER: OUT (SLOT3),A LD A,0 - OUT (RGADR),A + OUT (PORT_Y),A LD DE,(SCREEN_1) ACC_SetBlockSize @@ -2058,22 +2056,22 @@ SAVE_P2: DW 0 SAVE_RGA2: DB 0 SAVE_PIC: - IN A,(RGMOD) + IN A,(SCREEN_SWITCH) AND 1 - LD HL,0C040H + LD HL,#C040 JR NZ,SET_1X - LD HL,0C180H + LD HL,#C180 SET_1X: LD IX,TABLE_PIC LD A,(IX) AND A RET Z - LD DE,08436h + LD DE,#8436 SAVE_PIC_X: LD (SAVE_HL),HL ; Pic line - IN A,(RGADR) + IN A,(PORT_Y) LD (SAVE_RGA2),A LD C,SLOT2 @@ -2084,10 +2082,10 @@ SAVE_PIC_X: LD (SAVE_P2),BC LD A,#50 - OUT (C),A ; Screen + OUT (C),A ; Screen LD A,#FF - OUT (RGADR),A ; Line 1 + OUT (PORT_Y),A ; Line 1 LD A,(IX) OUT (SLOT2),A @@ -2097,7 +2095,6 @@ NEXT_SV_LN: LD B,160 LOOP_SV_PIC: - LD A,(HL) LD (DE),A INC HL @@ -2116,16 +2113,16 @@ LOOP_SV_PIC: INC IX LD A,(IX) OUT (SLOT2),A ; next page - LD DE,8000h + LD DE,#8000 NO_NEXT_PAGE: DJNZ LOOP_SV_PIC ; CALL SOUND - IN A,(RGADR) + IN A,(PORT_Y) DEC A - OUT (RGADR),A - CP 0FFh + OUT (PORT_Y),A + CP #FF JR NZ,NEXT_SV_LN LD BC,(SAVE_P2) @@ -2133,7 +2130,7 @@ NO_NEXT_PAGE: LD BC,(SAVE_P1) OUT (C),B LD A,(SAVE_RGA2) - OUT (RGADR),A + OUT (PORT_Y),A RET diff --git a/DOOM2.asm b/DOOM2.asm index b364b3a..e2c663b 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -94,8 +94,8 @@ BEGIN: DI LD (CMD_Line),IX ; сохранить указатель на параметры запуска - LD HL,#8080 -CMD_Line: EQU $-2 +CMD_Line+1: + LD HL,#8080 /* ; Доделать???!!!! LD C,(HL) @@ -133,8 +133,7 @@ Loader_length EQU 0 ; ;-----------[заглушить звук]------------ LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? -1: - CALL CLEAR_COVOX_X +1: CALL CLEAR_COVOX_X DEC A CP #80 JR NZ,1B @@ -175,31 +174,37 @@ Loader_length EQU 0 CALL SET_PAL - IN A,(SLOT3) - EX AF,AF' - LD A,DCP_PAGE - OUT (SLOT3),A - LD A,ACEX.SCALE - ;----[открыть порты масштабирования]---- + LD A,1 + LD HL, %0000'0100'0000'0000 + LD DE, %1111'1110'0110'1111 + LD BC,ACEX.SCALE*256 + BIOS.DCP_CONFIG + RST ToBIOS + + ; IN A,(SLOT3) + ; EX AF,AF' + ; LD A,DCP_PAGE + ; OUT (SLOT3),A + ; LD A,ACEX.SCALE + ; ; один внутренний порт масштабирования ; маппится на несколько диаппазонов ; внешних портов -; Маска 1110 0000 1110 0111 +; Маска - LD (#C400),A ; порт #0000 Dos off - LD (#C410),A ; порт #2000 Dos off - LD (#C480),A ; порт #4000 Dos off - LD (#C490),A ; порт #6000 Dos off - LD (#C500),A ; порт #8000 Dos off - LD (#C510),A ; порт #A000 Dos off - LD (#C580),A ; порт #C000 Dos off - LD (#C590),A ; порт #E000 Dos off + ; LD (#C400),A ; порт #0000 Dos off + ; LD (#C410),A ; порт #2000 Dos off + ; LD (#C480),A ; порт #4000 Dos off + ; LD (#C490),A ; порт #6000 Dos off + ; LD (#C500),A ; порт #8000 Dos off + ; LD (#C510),A ; порт #A000 Dos off + ; LD (#C580),A ; порт #C000 Dos off + ; LD (#C590),A ; порт #E000 Dos off + + ; EX AF,AF' + ; OUT (SLOT3),A ;--------------------------------------- - - EX AF,AF' - OUT (SLOT3),A EXX LD BC,#100 ; масштаб 1:1 LD D,0 @@ -213,14 +218,23 @@ Loader_length EQU 0 ; LD I,A ; ; IM 2 - пока не включаем, процедура прерывания прыгает в кэш, а он не вставлен и не прогружен ; ENDIF - CALL MAIN +;------------------------------------------------------------------------ +; E)eeeeee X) xx I)iiii T)tttttt +; E) X) xx I) T) +; E)eeeee X)xx I) T) +; E) X)xx I) T) +; E) X) xx I) T) +; E)eeeeee X) xx I)iiii T) + + +;------------------------------------------------------------------------ + ;----[LP_OPEN_S]------------------------ ; Открытие стандартных окон - - LD HL,5104H + LD HL,#5104 LD E,0 ; win_flag - флаги окна: ; bit 0 определяет страницу режима, которая будет ; открыта после исполнения функции @@ -280,8 +294,8 @@ SET_PAL: IN A,(SLOT3) PUSH AF - LD A,#FF -MemPatch_PalitrePage equ $-1 +MemPatch_PalitrePage+1: + LD A,#FF OUT (SLOT3),A LD HL,#C000 @@ -316,9 +330,9 @@ CLEAR_GRAF_SCR: OUT (SLOT3),A LD A,0 - OUT (RGADR),A + OUT (PORT_Y),A - LD SP,#C040+640 + LD SP,#C040 + 640 LD B,640/4 ;!!!!!!!!!!![оптимизировать]!!!!!!!!!!!! @@ -336,8 +350,8 @@ LOOP_CLS: DJNZ LOOP_CLS ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -MemPatch_SPSave2 EQU $+1 - LD SP,0 +MemPatch_SPSave2+1: + LD SP,0 POP AF OUT (SLOT3),A RET @@ -349,7 +363,7 @@ MemPatch_SPSave2 EQU $+1 ; LD A,7 ; OUT (BorderColor),A ; XOR A -; OUT (RGADR),A +; OUT (PORT_Y),A ; LD A,2 ; LD HL,#4000 @@ -427,12 +441,13 @@ CLEAR_SP_PAL: LOOP_PAL_ALL: PUSH BC - LD BC,RGADR + LD BC,PORT_Y LOOP_PAL_C: OUT (C),B ; -PAL_RESES_ADR+1: LD HL,#C3F0 +PAL_RESES_ADR+1: + LD HL,#C3F0 ; LD D,16 @@ -478,10 +493,10 @@ MAIN: CALL INIT_TABLE RET C - IN A,(RGADR) + IN A,(PORT_Y) LD (SAVE_RGA),A LD A,#C0 - OUT (RGADR),A + OUT (PORT_Y),A CALL RECALC_MAP ;----!!!!!!!!!!!!!!!!!!!!!!!!!---------- @@ -490,7 +505,7 @@ MAIN: LD A,(SAVE_RGA) - OUT (RGADR),A + OUT (PORT_Y),A ret c ; нужно ли???!!! @@ -527,16 +542,40 @@ MAIN: LD B,9 ; графическое окно 1, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS +/* + LD A,Dss.SetVMod.grf320x256 + LD BC,Dss.SetVMod.Screen_0 + RST ToDSS + LD A,Dss.SetVMod.grf320x256 + LD BC,Dss.SetVMod.Screen_1 + RST ToDSS +;графическое окно 0 +PIC_320X256_1: + DB 40,32,0,0,32,0,08,0 + DB 40,32,0,0,96,0,48,0 + + DB 40,32,0,0,32,0,00,0 ;4 + DB 40,32,0,0,96,0,40,0 ;6 + +;графическое окно 1 +PIC_320X256_2: + +; 320x256. графическое, 0-й экран +TAB_320x256_0 + +; 320x256. графическое, 1-й экран +TAB_320x256_1 +*/ ;--------------------------------------- LD A,1 - OUT (RGMOD),A + OUT (SCREEN_SWITCH),A ;----[переброс части кода в FastRAM]---- IN A,(SLOT3) PUSH AF - LD A,#FF -MemPatch_D2_FRAM_page equ $-1 +MemPatch_D2_FRAM_page+1: + LD A,#FF OUT (SLOT3),A IF YesSound @@ -685,11 +724,11 @@ PAUS_START: JR PAUS_START HELP_: CALL FIRE_X - LD HL,300H + LD HL,#0300 LD (X_SPEED),HL - LD HL,382H + LD HL,#0382 LD (Y_SPEED),HL - LD HL,500H + LD HL,#0500 LD (A_SPEED),HL JR DM_LOOP @@ -808,10 +847,10 @@ CONT_WORK: JP DM_LOOP SCR_SWITCH: - IN A,(RGMOD) + IN A,(SCREEN_SWITCH) AND 1 XOR 1 - OUT (RGMOD),A + OUT (SCREEN_SWITCH),A LD DE,#C040 JR Z,SET_1 @@ -993,7 +1032,6 @@ SND_C1: DW 1720H ; SND_C2: DW 0 SET_SND_FILE: - IFN YesSound ret ENDIF @@ -1019,10 +1057,7 @@ SET_SND_FILE: RET SWITCH_SND: -; - LD DE,NAME1 -NAME_S EQU $-2 -; +NAME_S+1: LD DE,NAME1 CALL SET_SND_FILE JR C,SWITCH_X @@ -1046,7 +1081,6 @@ FILE_DATA: DW 0 ; текущий номер сектора в кластере ; OPEN_FILE: ; DE - name -; CALL FIND_FILE RET C @@ -1092,12 +1126,13 @@ SECT_X: LD DE,(MSD_DATS+8) ADD IX,DE LD DE,(MSD_DATS+10) - ADC HL,DE ; HL:IX - номер первого сектора файла + ADC HL,DE ; HL:IX - номер первого сектора файла AND A RET ; -FIND_FILE: ;DE - name - 11 символов +;DE - name - 11 символов +FIND_FILE: ; LD C,SLOT3 IN B,(C) @@ -1122,20 +1157,20 @@ NAME_LOOP: POP DE LD A,L - AND 0E0H + AND #E0 LD L,A POP BC OUT (C),B AND A - RET ; HL - данные файла в странице 6 + RET ; HL - данные файла в странице 6 NEXT_NAME: POP DE LD A,L - AND 0E0H + AND #E0 LD L,A - LD BC,020H + LD BC,#20 ADD HL,BC LD A,(HL) AND A @@ -1163,7 +1198,7 @@ MemPatch_DOOM2_SndPage EQU $+1 LD A,0 OUT (SLOT3),A - IN A,(RGADR) + IN A,(PORT_Y) PUSH AF EX AF,AF' @@ -1171,7 +1206,7 @@ MemPatch_DOOM2_SndPage EQU $+1 DI POP AF - OUT (RGADR),A + OUT (PORT_Y),A POP AF OUT (SLOT3),A POP AF @@ -1385,7 +1420,7 @@ NEXT_HL_FFING: ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; тут выравнивание на 0 в младшем ; бите адреса -TABLE_MAIN: DS 37 ; буфер под станицы файла resurses.res +1 +TABLE_MAIN: DS 37 ; буфер под страницы файла resurses.res +1 TABLE_PIC: DS 6 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/Shared_Includes b/Shared_Includes index a15861c..b5606d6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit a15861c07cab60eaf09c28226d0c7761b4fd8235 +Subproject commit b5606d6db7c0eecf2e3b3da53040af2432a40569 From 804a9c49093db968a952b2980e69b4b47735191e Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 4 Feb 2024 03:39:25 +1000 Subject: [PATCH 04/16] ... --- D2_FRAM.asm | 146 ++++++-------- DOOM2.asm | 518 +++++++++++++----------------------------------- Music_4x.asm | 431 ++++++++++++++++++++++++++++++++++++++++ Shared_Includes | 2 +- 4 files changed, 638 insertions(+), 459 deletions(-) create mode 100644 Music_4x.asm diff --git a/D2_FRAM.asm b/D2_FRAM.asm index c3c23dc..9851071 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -149,15 +149,15 @@ ANGLE_M+1: TRACE_NEXT_: ; EXX - LD HL,(PLACE_L) ; текущее положение в таблице + LD HL,(PLACE_L) ; текущее положение в таблице INC HL LD A,(HL) LD (PLACE_L1),A LD (PLACE_L2),A EXX ; -PLACE_L EQU $+1 - LD A,(TABLE_TRACE+10) ; тонкое положение - положение в квадрате +PLACE_L+1: + LD A,(TABLE_TRACE+10) ; тонкое положение - положение в квадрате ; OUT (SLOT1),A LD (CONT_PAGE),A @@ -173,7 +173,7 @@ TRACE_LOOP: LD E,(HL) ; первый и далее следующий кубик LD A,(DE) ; есть или нет? AND A - JR NZ,TRACE_CONT ; если есть, рисовать!! + JR NZ,TRACE_CONT ; если есть, рисовать!! INC L ENDR @@ -204,8 +204,7 @@ TRACE_CONT: ; EXX EX AF,AF' ;номер стенки -PLACE_L1 EQU $+1 - LD A,5 +PLACE_L1+1: LD A,5 OUT (SLOT1),A ; следующее положение в таблице ; LD C,0 @@ -232,9 +231,7 @@ PLACE_L1 EQU $+1 LD A,(HL) ; взять немасштабированно! ACC_Off ; стенка в ОЗУ акселератора! - LD A,5 -PLACE_L2 EQU $-1 - +PLACE_L2+1: LD A,5 OUT (SLOT1),A ; следующее положение EXX ; @@ -291,8 +288,7 @@ HIGH_1: ; LD A,#06 ; цвет пола ; LD A,#5F ; цвет пола серый ; LD A,#CF ; цвет пола синий - LD A,#2F ; цвет пола темнокрасный -COLOR_LO EQU $-1 +COLOR_LO+1: LD A,#2F ; цвет пола темнокрасный ; ACC_FillScreenOneByte LD (DE),A ; рисовать пол @@ -314,7 +310,7 @@ COLOR_LO EQU $-1 ; NEG ; выводимый размер стенки ; стенка в акселераторе! ACC_SetBlockSize - LD (DE),A + LD (DE),A ;!!!!! прикольно ACC_CopyScreenBlock LD (DE),A ; положить стенку! ACC_Off @@ -334,8 +330,7 @@ NEXT_ANGLE: NO_TEST: ; - LD A,0 -CONT_PAGE EQU $-1 +CONT_PAGE+1: LD A,0 ; OUT (SLOT1),A @@ -360,8 +355,7 @@ CONT_PAGE EQU $-1 PUSH HL PUSH BC ; - LD A,#0F -CORNER_1 EQU $-1 +CORNER_1+1: LD A,#0F ; AND #0F RRCA @@ -392,13 +386,11 @@ CORNER_1 EQU $-1 TRACE_END: ; - LD A,0 -TRACE_RET_SLOT3 EQU $-1 +TRACE_RET_SLOT3+1: LD A,0 ; - OUT (SLOT3),A + OUT (SLOT3),A ; - LD A,5 -TRACE_RET_SLOT1 EQU $-1 +TRACE_RET_SLOT1+1: LD A,5 ; OUT (SLOT1),A LD A,0 @@ -483,7 +475,7 @@ SET_PICTURE: ENDIF ; ld bc,#0100 ; масштабирование - 1 - OUT (C),B + OUT (C),C LD DE,(SCREEN_1) LD B,5 ; 5 СТРАНИЦ @@ -491,7 +483,6 @@ SET_PICTURE: ACC_SetBlockSize LD A,0 ; по 256 байт ACC_Off - inc a ;!FIXIT костыль, иначе со счётчиком акселя что-то не так OUT (PORT_Y),A POP AF @@ -704,8 +695,8 @@ WEAPON_OUT: LD A,#58 OUT (SLOT3),A -WEAPON_SWITCH EQU $+1 - LD HL,#4500 ; положение спрайта оружия в странице +WEAPON_SWITCH+1: + LD HL,#4500 ; положение спрайта оружия в странице ; LD DE,(SCREEN_1) LD A,E @@ -723,7 +714,6 @@ WEAPON_SWITCH EQU $+1 LD BC,#100 W_OUT_L: - LD A,#44 SUB H OUT (PORT_Y),A @@ -874,7 +864,7 @@ MAP_LOOP_1: CP #50 JR Z,MAP_LOOP_2 - LD A,0 + XOR A OUT (PORT_Y),A POP AF @@ -890,47 +880,43 @@ MAP_LOOP_1: ;*************************************** ; -WALL: ; IX+0 - страница стенки ; IX+1,2 - адрес стенки в странице ; IX+3 - положение по вертикали - задает масштаб ; IX+4,5 - положение по горизонтали - ; IX+6,7 - reserved ; IX+8,9 - X-add-parameter (коэфициент масштабирования по Y) ; IX+10 - реальная ширина стенки ??? ; IX+11 - реальная высота стенки ??? - - - IN A,(SLOT3) - LD (SLOT3_RET1),A +WALL: IN A,(SLOT3) + LD (WALL_SLOT3_RET),A IN A,(SLOT1) - LD (SLOT1_RET1),A + LD (WALL_SLOT1_RET),A IN A,(PORT_Y) - LD (RGADR_RET1),A + LD (WALL_PORT_Y_RET),A LD A,#58 OUT (SLOT3),A - LD A,(IX+0) ; страница стенки + LD A,(IX+0) ; страница стенки OUT (SLOT1),A EXX - LD C,0 ; порт масштаба + LD C,0 ; порт масштаба - LD H,TABLE_X/256 ; таблица высот и коэфициентов масштабирования - LD L,(IX+3) ; положение по Y / определяет высоту - LD A,(HL) ; масштаб - LOW + LD H,TABLE_X/256 ; таблица высот и коэфициентов масштабирования + LD L,(IX+3) ; положение по Y / определяет высоту + LD A,(HL) ; масштаб - LOW AND 3 LD (X_ADD),A INC H - LD A,(HL) ; масштаб - HIGH + LD A,(HL) ; масштаб - HIGH LD (X_ADD2),A DEC H LD A,L ADD A,A - NEG ; ширина по горизонтали + NEG ; ширина по горизонтали BIT 0,(IX+M_VAR3) JR Z,NO_DEL2 @@ -946,13 +932,13 @@ NO_DEL2: NO_DEL4: EXX - LD B,A ; реальная ширина стенки??? -; LD B,(IX+10) ; ширина стенки + LD B,A ; реальная ширина стенки??? +; LD B,(IX+10) ; ширина стенки - LD C,0 ; X-start-LOW + LD C,0 ; X-start-LOW ; LD HL,(SCREEN_1) - LD E,(IX+4) ; - адрес по горизонтали + LD E,(IX+4) ; - адрес по горизонтали LD D,(IX+5) ; ADD HL,DE @@ -961,15 +947,15 @@ NO_DEL4: ; BIT 7,D ; JR Z,WALL_NO_SCF ; SCF -; EX AF,AF' ; спрятать в AF - параметр счетчика и флаг -; ; CF - стенка не дошла до края -; ; в A сколько линий до начала экрана +; EX AF,AF' ; спрятать в AF - параметр счетчика и флаг +; ; CF - стенка не дошла до края +; ; в A сколько линий до начала экрана ;WALL_NO_SCF: ; ; LD HL,140h ; AND A ; SBC HL,DE -; LD A,L ; в A - сколько линий осталось до конца экрана?? +; LD A,L ; в A - сколько линий осталось до конца экрана?? LD HL,(SCREEN_1) ADD HL,DE @@ -977,7 +963,7 @@ NO_DEL4: ; LD A,(IX+3) LD A,B RRA - AND #7F ; разделили на 2 + AND #7F ; разделили на 2 LD E,A ; SUB 128 ; LD E,A @@ -1064,11 +1050,11 @@ NO_WRITE_LINE: INC DE ; новое значение X LD A,C -X_ADD2 equ $+1 - ADD A,0 ; X-add-parameter 2 +X_ADD2+1: + ADD A,0 ; X-add-parameter 2 LD C,A -X_ADD equ $+1 - LD A,0 ; X-add-parameter +X_ADD+1: + LD A,0 ; X-add-parameter ADC A,H LD H,A ; следующая линия WOLL @@ -1076,14 +1062,14 @@ X_ADD equ $+1 NO_WRITE_ALL: ; -RGADR_RET1 EQU $+1 - LD A,0 +WALL_PORT_Y_RET+1: + LD A,0 OUT (PORT_Y),A -SLOT3_RET1 EQU $+1 - LD A,0 +WALL_SLOT3_RET+1: + LD A,0 OUT (SLOT3),A -SLOT1_RET1 EQU $+1 - LD A,5 +WALL_SLOT1_RET+1: + LD A,5 OUT (SLOT3),A RET @@ -1321,7 +1307,7 @@ SND_OUT_S: DJNZ SND_OUT_S LD A,#C9 ; забить возврат в программу играния музыки - LD (MemPatch_SoundOnOff),A + LD (SoundOnOff),A POP BC POP AF @@ -1332,7 +1318,7 @@ SND_CONTINUE: ; PUSH BC LD A,0 ; забить NOP в программу играния музыки - LD (MemPatch_SoundOnOff),A + LD (SoundOnOff),A POP BC POP AF @@ -1355,7 +1341,7 @@ SND_INIT: ; LD (SND_P),A LD A,0 - LD (MemPatch_SoundOnOff),A + LD (SoundOnOff),A LD B,0 IN A,(SLOT3) @@ -1373,7 +1359,7 @@ SOUND: ENDIF ; IF YesSound -MemPatch_SoundOnOff: +SoundOnOff: NOP ; сюда вставляется команда RET для отключения звука и NOP для включения PUSH AF PUSH HL @@ -1400,7 +1386,7 @@ COV_ADR+1: IN A,(SLOT3) LD E,A -MemPatch_D2_FRAM_SndPage+1: +D2_FRAM_SndPage+1: LD A,0 OUT (SLOT3),A @@ -1471,7 +1457,7 @@ SND_INIT1: ;_------[Чтение секторов с диска]------- NO_NEW_COUNT: LD HL,-SND_READ_SECTORS*512 ; буфер для данных - LD A,0 ; страница буфера, если адрес в окне #C000 + LD A,(D2_FRAM_SndPage) ;!FIXIT ; страница буфера, если адрес в окне #C000 LD DE,(SND_S1) ; абсолютный номер сектора Младшая часть LD IX,(SND_S2) ; абсолютный номер сектора Старшая часть LD B,SND_READ_SECTORS ; число читаемых секторов @@ -1508,7 +1494,6 @@ NO_NEW_COUNT: LD (SND_A),HL NO_SNDP: - LD A,B CPL LD (COV_ADR),A @@ -1527,22 +1512,22 @@ NO_LD_SND: POP HL POP AF RET - ENDIF + ENDIF ; - IF !YesSound + IF !YesSound YesSoundZero: - PUSH AF - PUSH HL - CALL KBD_INT - POP HL - POP AF - RET - ENDIF + PUSH AF + PUSH HL + CALL KBD_INT + POP HL + POP AF + RET + ENDIF EFFECTS: - IF !YesSound - RET - ENDIF + IF !YesSound + RET + ENDIF LD DE,(EFF_) LD A,D CP #C0 @@ -1569,7 +1554,6 @@ EFF_LOOP: LD (EFF_),DE EX AF,AF' OUT (SLOT2),A - RET ;*************************************** diff --git a/DOOM2.asm b/DOOM2.asm index e2c663b..18278a2 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -12,21 +12,18 @@ ; IFDEF HARDWARE ; DEFINE NORM_ACC 1 -; DEFINE NORM_syncPORT 1 ; DEFINE NORM_FastRAM 1 ; ENDIF ; IFDEF ZXMAK2 ; DEFINE NORM_ACC 0 -; DEFINE NORM_syncPORT 0 ; DEFINE NORM_FastRAM 0 ; ENDIF ; IFDEF MAME ; DEFINE NORM_ACC 1 -; DEFINE NORM_syncPORT 0 ; DEFINE NORM_FastRAM 1 ; ENDIF - IFNDEF YesSound : DEFINE YesSound 0 : ENDIF + IFNDEF YesSound : DEFINE YesSound 1 : ENDIF DEFINE EXE_HEADER 1 ; DEFINE NEED_LOADER 1 @@ -90,8 +87,7 @@ TABLE_W EQU #2000 ; тек ORG org_addr - CLP_Buffer ENDIF -BEGIN: - DI +BEGIN: DI LD (CMD_Line),IX ; сохранить указатель на параметры запуска CMD_Line+1: @@ -128,11 +124,11 @@ Loader_length EQU 0 ;-----[Инициализация Covox-Blaster]----- ; IF YesSound ld bc,CBL.SYS_PORT - ld a,#80 + ld a,CBL.Blaster + CBL.Mono + CBL.is8bit + CBL.Int_off + CBL.KHz_16old out (c),a ; ;-----------[заглушить звук]------------ - LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? + LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? 1: CALL CLEAR_COVOX_X DEC A CP #80 @@ -149,15 +145,15 @@ Loader_length EQU 0 ld a,(RAMBlkIDs) ld bc,BIOS.GetMemPage rst ToBIOS - di - ld (MemPatch_PalitrePage),a + ;di + ld (PalitrePage),a ld a,(RAMBlkIDs+3) ld bc,BIOS.GetMemPage rst ToBIOS - di - ld (MemPatch_D2_FRAM_page),a - DI + ;di + ld (D2_FRAM_page),a + ;DI CALL CLEAR_GRAF_SCR @@ -175,9 +171,11 @@ Loader_length EQU 0 CALL SET_PAL ;----[открыть порты масштабирования]---- +; один внутренний порт масштабирования маппится на диаппазон #XX00 +; внешних портов. Write, Dos off, CNF 0. LD A,1 - LD HL, %0000'0100'0000'0000 - LD DE, %1111'1110'0110'1111 + LD HL, %0000'0100'0000'0000 ; значение + LD DE, %1111'1110'0110'1111 ; маска LD BC,ACEX.SCALE*256 + BIOS.DCP_CONFIG RST ToBIOS @@ -186,42 +184,30 @@ Loader_length EQU 0 ; LD A,DCP_PAGE ; OUT (SLOT3),A ; LD A,ACEX.SCALE - -; -; один внутренний порт масштабирования -; маппится на несколько диаппазонов -; внешних портов -; Маска - - ; LD (#C400),A ; порт #0000 Dos off - ; LD (#C410),A ; порт #2000 Dos off - ; LD (#C480),A ; порт #4000 Dos off - ; LD (#C490),A ; порт #6000 Dos off - ; LD (#C500),A ; порт #8000 Dos off - ; LD (#C510),A ; порт #A000 Dos off - ; LD (#C580),A ; порт #C000 Dos off - ; LD (#C590),A ; порт #E000 Dos off - + ; LD (#C400),A ; порт #XX00 Dos off + ; LD (#C410),A ; порт #XX00 Dos off + ; LD (#C480),A ; порт #XX00 Dos off + ; LD (#C490),A ; порт #XX00 Dos off + ; LD (#C500),A ; порт #XX00 Dos off + ; LD (#C510),A ; порт #XX00 Dos off + ; LD (#C580),A ; порт #XX00 Dos off + ; LD (#C590),A ; порт #XX00 Dos off ; EX AF,AF' ; OUT (SLOT3),A -;--------------------------------------- - EXX - LD BC,#100 ; масштаб 1:1 - LD D,0 - OUT (C),D - EXX + ; Активация Акселя масштабирования, обратно только через ресет + LD BC,#100 ; C - масштаб 1:1 + OUT (C),C +;----------------------------------------------------------------------- -; -; IFN NORM_syncPORT -; DI -; LD A, +(high im_handler_emulator) -; LD I,A -; ; IM 2 - пока не включаем, процедура прерывания прыгает в кэш, а он не вставлен и не прогружен -; ENDIF + +;----------------------------------------------------------------------- CALL MAIN -;------------------------------------------------------------------------ +;----------------------------------------------------------------------- + +;----------------------------------------------------------------------- + ; E)eeeeee X) xx I)iiii T)tttttt ; E) X) xx I) T) ; E)eeeee X)xx I) T) @@ -230,7 +216,7 @@ Loader_length EQU 0 ; E)eeeeee X) xx I)iiii T) -;------------------------------------------------------------------------ +;----------------------------------------------------------------------- ;----[LP_OPEN_S]------------------------ ; Открытие стандартных окон @@ -266,16 +252,16 @@ RETURN_POINT: ; OUT (SLOT3),A LD (#C000),HL HALT_L: - DI + ;DI HALT JR HALT_L ;--------------------------------------- SET_PAL_x: - FRAM_OFF + IN A,(FastRAM.OFF) CALL SET_PAL - FRAM_ON + IN A,(FastRAM.ON) RET SET_PAL: @@ -294,7 +280,7 @@ SET_PAL: IN A,(SLOT3) PUSH AF -MemPatch_PalitrePage+1: +PalitrePage+1: LD A,#FF OUT (SLOT3),A @@ -304,7 +290,7 @@ MemPatch_PalitrePage+1: LD B,#FF LD C,BIOS.PIC_SET_PAL ; установка палитры RST ToBIOS - DI + ;DI LD HL,#C000 LD DE,0 @@ -312,7 +298,7 @@ MemPatch_PalitrePage+1: LD B,#FF LD C,BIOS.PIC_SET_PAL ; установка палитры RST ToBIOS - DI + ;DI POP AF OUT (SLOT3),A @@ -324,12 +310,12 @@ CLEAR_GRAF_SCR: IN A,(SLOT3) PUSH AF - LD (MemPatch_SPSave2),SP + LD (SPSave2),SP LD A,#50 OUT (SLOT3),A - LD A,0 + XOR A OUT (PORT_Y),A LD SP,#C040 + 640 @@ -339,10 +325,7 @@ CLEAR_GRAF_SCR: LOOP_CLS: ACC_SetBlockSize LD E,0 - ACC_Off ; !FIXIT убрать????? - LD D,E - ACC_FillScreenOneByte PUSH DE PUSH DE @@ -350,7 +333,7 @@ LOOP_CLS: DJNZ LOOP_CLS ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -MemPatch_SPSave2+1: +SPSave2+1: LD SP,0 POP AF OUT (SLOT3),A @@ -411,7 +394,7 @@ MemPatch_SPSave2+1: ; FLAG: DB 0 -SAVE_RGA: DB 0 +;SAVE_PORT_Y: DB 0 ; ; CLEAR_COVOX: @@ -465,8 +448,7 @@ LOOP_PAL_D: SUB E JR NC,NO_Z XOR A -NO_Z: - LD (HL),A +NO_Z: LD (HL),A INC L DEC D JR NZ,LOOP_PAL_D @@ -489,12 +471,11 @@ NO_PAL_EXE: ; ; ; -MAIN: - CALL INIT_TABLE +MAIN: CALL INIT_TABLE RET C - IN A,(PORT_Y) - LD (SAVE_RGA),A + ;IN A,(PORT_Y) + ;LD (SAVE_PORT_Y),A LD A,#C0 OUT (PORT_Y),A CALL RECALC_MAP @@ -504,10 +485,10 @@ MAIN: ;--------------------------------------- - LD A,(SAVE_RGA) - OUT (PORT_Y),A + ;LD A,(SAVE_PORT_Y) + ;OUT (PORT_Y),A - ret c ; нужно ли???!!! + RET C ; нужно ли???!!! XOR A LD (LAST_KEY),A @@ -574,7 +555,7 @@ TAB_320x256_1 ;----[переброс части кода в FastRAM]---- IN A,(SLOT3) PUSH AF -MemPatch_D2_FRAM_page+1: +D2_FRAM_page+1: LD A,#FF OUT (SLOT3),A @@ -589,34 +570,27 @@ MemPatch_D2_FRAM_page+1: ; надо потом нормально выделять и ; освобождать память, а не вот это всё ; - ld b,1 + ld b,2 ld c,Dss.GetMem rst ToDSS - PUSH AF ; ID блока на стек - ld bc,BIOS.GetMemPage - rst ToBIOS - LD (MemPatch_CatPage),a + ; + LD (CatPage),a ld b,1 - POP AF ; ID блока со стека ld c,BIOS.GetMemPage rst ToBIOS - di + ; + ld (DOOM2_SndPage),a + ld (D2_FRAM_SndPage+#B000),a + ;di ;----[] ENDIF - - FRAM_ON - + IN A,(FastRAM.ON) + LD HL,#C000 LD DE,#1000 LD BC,D2_fram_END-TRACE LDIR - - IF YesSound - ld (MemPatch_D2_FRAM_SndPage),a - ld (MemPatch_DOOM2_SndPage),a - ENDIF - ; IFN NORM_syncPORT ; IM 2 ; вот теперь можно включать ; ENDIF @@ -639,10 +613,10 @@ MemPatch_D2_FRAM_page+1: CALL CLEAR_COVOX - FRAM_OFF + IN A,(FastRAM.OFF) CALL INIT_HDD_WORK - FRAM_ON + IN A,(FastRAM.ON) SOUND_SWITCH: IF YesSound LD HL,NAMES+1 @@ -660,9 +634,16 @@ SOUND_S1: RLCA RLCA RLCA - ADD A,#80 - LD E,A - LD D,#80 + ; + ADD A,low (NAMES+2) + LD E,A + LD A,0 + RLA + ADD A,high (NAMES+2) + LD D,A + ;ADD A,#80 + ;LD E,A + ;LD D,#80 CALL SET_SND_FILE CALL INIT_SOUND ENDIF @@ -940,7 +921,7 @@ M_VAR3 EQU $-MONSTR_DAT ; bit 6 - показывать один цикл ; bit 7 - не выводить ; -M_VAR4 EQU $-MONSTR_DAT +M_VAR4 EQU $-MONSTR_DAT DB 0 ; Переключение монстра ADD параметр MONSTR_D_LEN EQU $-MONSTR_DAT ;следующий монстр @@ -969,257 +950,28 @@ MONSTR_DATS: ; ; ************************************** ; -MSD_DATS: - DW 0,0,0,0 - DW 0,0,0,0 - ;CAT_PAGE EQU 15 EFF_PAGE: DB #FF -PAGE_M_PLACE: DB #FF +PAGE_M_PLACE: DB #FF FIRE_PAGE: DB #FF BAR_PAGE: DB #FF BFGF_PAGE: DB #FF MONSTR_END_T: DW MONSTR_TABLE +;======================================================================= +;======================================================================= -;-------[инициализация винчестера]------; УБРАТЬ!!! -INIT_HDD_WORK: + INCLUDE 'Music_4x.asm' - IFN YesSound - RET - ENDIF - - LD C,BIOS.HDD_INIT - RST ToBIOS - JR C,INIT_HDD_WORK -;--------------------------------------- +;======================================================================= +;======================================================================= - IN A,(SLOT3) - PUSH AF - LD A,SYS_PAGE - OUT (SLOT3),A - - LD HL,SYS_PAGE.MSD_FAT_SEC - LD DE,MSD_DATS - LD BC,16 - LDIR - POP AF - OUT (SLOT3),A - -;-----[читать секторы с винчестера]----- - LD HL,#C000 ; адрес буфера данных - LD DE,(MSD_DATS+4) ; CAT TABLE. абсолютный номер сектора младшая часть - LD IX,(MSD_DATS+6) ; абсолютный номер сектора старшая часть - LD B,32 ; число читаемых секторов -MemPatch_CatPage EQU $+1 - LD A,15 ; страница буфера, если адрес в окне 0C000h - LD C,BIOS.HDD_READ - RST ToBIOS ; загрузить CAT -;--------------------------------------- - RET - - -SND_SEC1: DW 12525 ; начальный сектор -SND_SEC2: DW 0 -SND_L1: DW 1720H ; длина -SND_L2: DW 0 - -SND_S1: DW 12525 ; текуший сектор -SND_S2: DW 0 -SND_C1: DW 1720H ; остаток до конца -SND_C2: DW 0 - -SET_SND_FILE: - IFN YesSound - ret - ENDIF - - CALL OPEN_FILE - RET C - - LD (SND_SEC1),IX ; сектор музыки!!! - LD (SND_SEC2),HL - LD HL,(FILE_DATA+2) - LD DE,(FILE_DATA+4) - AND A - RR D - RR E - RR H - LD L,H - LD H,E - LD E,D - LD D,0 - LD (SND_L1),HL ; длина в секторах - LD (SND_L2),DE ; длина в секторах - AND A - RET - -SWITCH_SND: -NAME_S+1: LD DE,NAME1 - CALL SET_SND_FILE - JR C,SWITCH_X - - LD HL,(NAME_S) - LD BC,16 - ADD HL,BC - LD (NAME_S),HL - RET - -SWITCH_X: - LD HL,NAME1 - LD (NAME_S),HL - JR SWITCH_SND - -FILE_DATA: - DW 0 ; начальный кластер - DW 0,0 ; длина файла - - DW 0 ; текущий кластер - DW 0,0 ; текущее положение в файле - DW 0 ; текущий номер сектора в кластере -; -OPEN_FILE: ; DE - name - CALL FIND_FILE - RET C - - LD C,SLOT3 - IN B,(C) - - PUSH BC - LD A,(MemPatch_CatPage) - OUT (C),A - LD BC,26 - ADD HL,BC - LD DE,FILE_DATA - LD BC,6 - LDIR - - POP BC - OUT (C),B - - LD HL,(FILE_DATA) - LD (FILE_DATA+6),HL - LD HL,0 - LD (FILE_DATA+8),HL - LD (FILE_DATA+10),HL - LD (FILE_DATA+12),HL - - LD IX,(FILE_DATA) ; номер первого кластера - DEC IX - DEC IX ; -2 !!! - LD HL,0 - SCF - LD DE,(MSD_DATS+13) ; длина кластера в байтах - RR D - RR E -SEC_MUL: - RR D - RR E - JR C,SECT_X - ADD IX,IX - ADC HL,HL - JR SEC_MUL - -SECT_X: - LD DE,(MSD_DATS+8) - ADD IX,DE - LD DE,(MSD_DATS+10) - ADC HL,DE ; HL:IX - номер первого сектора файла - - AND A - RET -; -;DE - name - 11 символов -FIND_FILE: -; - LD C,SLOT3 - IN B,(C) - PUSH BC - - LD A,(MemPatch_CatPage) - OUT (C),A - - LD HL,#C000 - -NEXT_LOOP: - LD B,11 - PUSH DE - -NAME_LOOP: - LD A,(DE) - CP (HL) - JR NZ,NEXT_NAME - INC HL - INC DE - DJNZ NAME_LOOP - - POP DE - LD A,L - AND #E0 - LD L,A - - POP BC - OUT (C),B - AND A - RET ; HL - данные файла в странице 6 - -NEXT_NAME: - POP DE - LD A,L - AND #E0 - LD L,A - LD BC,#20 - ADD HL,BC - LD A,(HL) - AND A - JR Z,END_CAT - LD A,H - AND A - JR NZ,NEXT_LOOP - -END_CAT: - POP BC - OUT (C),B - SCF - RET - -HDD_FN: - EX AF,AF' - FRAM_OFF ; отключаем кэш - IN A,(SLOT1) - PUSH AF - IN A,(SLOT3) - PUSH AF - LD A,5 ; ПЕРЕДЕЛАТЬ!!! - OUT (SLOT1),A -MemPatch_DOOM2_SndPage EQU $+1 - LD A,0 - OUT (SLOT3),A - - IN A,(PORT_Y) - PUSH AF - EX AF,AF' - - RST ToBIOS ; читать сектора с винчестера, функция #45 - DI - - POP AF - OUT (PORT_Y),A - POP AF - OUT (SLOT3),A - POP AF - OUT (SLOT1),A - FRAM_ON ; включаем кэш - RET -; -; ************************************** -; SKY_1: DB #FF SKY_2: DB #FF -PAGE_WEAPON: DB #FF +PAGE_WEAPON: DB #FF ;*************************************** ;*************************************** @@ -1416,7 +1168,7 @@ NEXT_HL_FFING: */ ;*************************************** - DS #8700-$ ;ВЫРАВНИВАНИЕ + BLOCK #8700-$,0 ;ВЫРАВНИВАНИЕ ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; тут выравнивание на 0 в младшем ; бите адреса @@ -1427,7 +1179,7 @@ TABLE_PIC: DS 6 ;-------[загрузка ресурсов игры]-------- Load_Resources: in a,(SLOT3) - ld (.MemPatch_SavePage),a + ld (.SavePage),a LD B,FilesTBL.END LD DE,FilesTBL @@ -1440,7 +1192,7 @@ Load_Resources: ex de,hl ld b,(hl) ; FilesTBL inc hl - ld (.MemPatch_FileName),hl + ld (.FileName),hl ; B - размер блока в страницах ld c,Dss.GetMem @@ -1464,12 +1216,12 @@ Load_Resources: push hl ;++буфер со списком страниц push bc ;++сколько страниц грузим -.MemPatch_FileName EQU $+1 - ld hl,.MemPatch_FileName +.FileName+1: + ld hl,0 ld a,1 ld c,Dss.Open rst ToDSS - ld (.MemPatch_TempFileID),a + ld (.TempFileID),a pop bc ;--сколько страниц грузим pop hl ;--буфер со списком страниц @@ -1481,32 +1233,32 @@ Load_Resources: push hl ;++буфер со списком страниц push bc ;++сколько страниц грузим -.MemPatch_TempFileID EQU $+1 - ld a,#FF ; файловый манипулятор - LD HL,#C000 ; адрес в памяти - LD DE,#4000 ; количество читаемых байт +.TempFileID+1: + ld a,#FF ; файловый манипулятор + LD HL,#C000 ; адрес в памяти + LD DE,#4000 ; количество читаемых байт LD C,Dss.Read - rst ToDSS - DI + RST ToDSS + ;DI - pop bc ;--сколько страниц грузим - pop hl ;--буфер со списком страниц + pop bc ;--сколько страниц грузим + pop hl ;--буфер со списком страниц DJNZ .readloop ;---[] ;---[закрываем] - ld a,(.MemPatch_TempFileID) + ld a,(.TempFileID) ld c,Dss.Close rst ToDSS ;---[] - ld de,(.MemPatch_FileName) + ld de,(.FileName) ld hl,13 add hl,de ex de,hl - POP HL ;--буфер под BlockID - POP BC ;--счётчик + POP HL ;--буфер под BlockID + POP BC ;--счётчик DJNZ .LR_loop ;-[разобраться с таблицами!!!]- @@ -1524,30 +1276,39 @@ Load_Resources: pop af ld c,Dss.Close rst ToDSS -/* - ld hl,MONSTR_TABLE_file - ld a,1 - ld c,Dss.Open - rst ToDSS - push af - LD HL,MONSTR_TABLE ; адрес в памяти - LD DE,MONSTR_TABLE_SIZE ; количество читаемых байт - LD C,Dss.Read - rst ToDSS + ; ld hl,MONSTR_TABLE_file + ; ld a,1 + ; ld c,Dss.Open + ; rst ToDSS + ; push af - pop af - ld c,Dss.Close - rst ToDSS -*/ - di + ; LD HL,MONSTR_TABLE ; адрес в памяти + ; LD DE,MONSTR_TABLE_SIZE ; количество читаемых байт + ; LD C,Dss.Read + ; rst ToDSS + + ; pop af + ; ld c,Dss.Close + ; rst ToDSS + + ;di ;------------------------------ -.MemPatch_SavePage equ $+1 - ld a,0 +.SavePage+1: + ld a,0 out (SLOT3),a + ; + LD HL,CURRENT_DIR + LD C,Dss.CurDir + RST ToDSS + ; + LD C,Dss.CurDisk + RST ToDSS + LD (INIT_HDD_WORK.currentDisk),A + ; RET -Temp_Buffer: BLOCK 256,#FF +;Temp_Buffer: BLOCK 256,#FF TABLE_X_file: db 'table_x.tbl',0 ;MONSTR_TABLE_file: db 'monsters.tbl',0 @@ -1900,24 +1661,24 @@ MONSTR_POS: ALIGN 2,0 ; TABLES_START: -X_COORD: DW 090*256 -Y_COORD: DW 090*256 -ANGLE_A: DW -160*32+0C000h -ANGLE_R: DW 0 +X_COORD: DW 90*256 +Y_COORD: DW 90*256 +ANGLE_A: DW -160*32+#C000 +ANGLE_R: DW 0 -X_SPEED: DW 300H -Y_SPEED: DW 302H -A_SPEED: DW 200H +X_SPEED: DW #300 +Y_SPEED: DW #302 +A_SPEED: DW #200 -TABLE_TRACE: DS 33 ; таблица трассировки/банки таблицы -TABLE_WALL: DS 33 +TABLE_TRACE: BLOCK 33,0 ; таблица трассировки/банки таблицы +TABLE_WALL: BLOCK 33,0 - DS TABLES_START+#74-$ ;ВЫРАВНИВАНИЕ +; BLOCK TABLES_START+#74-$,0 ;ВЫРАВНИВАНИЕ -NAMES: DB 6,1 -LAST_KEY: DB 0 +LAST_KEY: DB 0 +NAMES: DB 6,1 - DS TABLES_START+#7C-$ ;ВЫРАВНИВАНИЕ +; BLOCK TABLES_START+#7C-$,0 ;ВЫРАВНИВАНИЕ NAME1: DB "_1X62 CBL " NAME2: DB "2NDREAL3CBL " @@ -1945,13 +1706,16 @@ NAME9: DB "_ENI511CCBL " ; ENDIF ; OUTEND ; конец файла doom2.exe +DIR_NAME_11: BLOCK 11,0 +CURRENT_DIR: BLOCK 257,0 +Temp_Buffer EQU $ ; ; DISPLAY "DOOM2.EXE starts - ",/H,BEGIN DISPLAY "DOOM2.EXE ends - ",/H,$ DISPLAY "DOOM2.EXE size - ",/H,$-BEGIN -FRAM_PROG_1000H: +;FRAM_PROG_1000H: include 'D2_FRAM.asm' ; END diff --git a/Music_4x.asm b/Music_4x.asm new file mode 100644 index 0000000..963f0ba --- /dev/null +++ b/Music_4x.asm @@ -0,0 +1,431 @@ + +;----------------------------------------------------------------------- +;-------[инициализация винчестера]------; +INIT_HDD_WORK: + IFN YesSound + RET + ENDIF + +.currentDisk+1: ; + LD A,0 + OR #80 + LD HL,Temp_Buffer + LD BC,Dss.DskInfo + RST ToDSS + ; + LD B,4 ;!HARDCODE номер нужного параметра + LD DE,0 + LD HL,Temp_Buffer +.loop_param: ADD HL,DE + LD E,(HL) + INC HL + DJNZ .loop_param + LD A,(HL) + AND #80 + JR Z,.no_change_Disk + CP #90 + JR NC,.no_change_Disk + ; + LD A,3 + AND (HL) + LD D,A + INC HL + LD A,(HL) + RLCA + RLCA + ; + OR D + AND #0F + JR .start + ; +.no_change_Disk:; + XOR A +.start: LD C,BIOS.HDD_PART ; IDE-1/IDE-2 + RST ToBIOS + ; +.loop: LD C,BIOS.HDD_INIT + RST ToBIOS + JR C,.loop + ; + + CALL BPB_SetUp +;----------------------------------------------------------------------- + + IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + + LD HL,SYS_PAGE.MSD_FAT_SEC + LD DE,MSD_DATS + LD BC,16 + LDIR + POP AF + OUT (SLOT3),A + ;!TODO music and dirs + ; парсим строку пути + ; LD HL,CURRENT_DIR+1 + ; LD DE,DIR_NAME_11 + ; PUSH DE + ; PUSH HL + ; LD BC,1*256 + Dss.DosName + ; RST ToDSS + +;-----[читать секторы с винчестера]----- +READ_DIR: + LD HL,#C000 ; адрес буфера данных + LD DE,(MSD_DATS+4) ; CAT TABLE. абсолютный номер сектора младшая часть + LD IX,(MSD_DATS+6) ; абсолютный номер сектора старшая часть + LD B,32 ; число читаемых секторов +CatPage+1: + LD A,15 ; страница буфера, если адрес в окне #C000 + LD C,BIOS.HDD_READ + RST ToBIOS ; загрузить CAT + RET +;--------------------------------------- + +MSD_DATS: WORD 0,0,0,0,0,0,0,0 + +SND_SEC1: DW 12525 ; начальный сектор +SND_SEC2: DW 0 +SND_L1: DW #1720 ; длина +SND_L2: DW 0 + +SND_S1: DW 12525 ; текуший сектор +SND_S2: DW 0 +SND_C1: DW #1720 ; остаток до конца +SND_C2: DW 0 + +SET_SND_FILE: + IFN YesSound + ret + ENDIF + + CALL OPEN_FILE + RET C + + LD (SND_SEC1),IX ; сектор музыки!!! + LD (SND_SEC2),HL + LD HL,(FILE_DATA+2) + LD DE,(FILE_DATA+4) + AND A + RR D + RR E + RR H + LD L,H + LD H,E + LD E,D + LD D,0 + LD (SND_L1),HL ; длина в секторах + LD (SND_L2),DE ; длина в секторах + AND A + RET + +SWITCH_SND: +NAME_S+1: LD DE,NAME1 + CALL SET_SND_FILE + JR C,SWITCH_X + + LD HL,(NAME_S) + LD BC,16 + ADD HL,BC + LD (NAME_S),HL + RET + +SWITCH_X: + LD HL,NAME1 + LD (NAME_S),HL + JR SWITCH_SND + +FILE_DATA: + DW 0 ; начальный кластер + DW 0,0 ; длина файла + + DW 0 ; текущий кластер + DW 0,0 ; текущее положение в файле + DW 0 ; текущий номер сектора в кластере +; +OPEN_FILE: ; DE - name + CALL FIND_FILE + RET C + + LD C,SLOT3 + IN B,(C) + + PUSH BC + LD A,(CatPage) + OUT (C),A + LD BC,26 + ADD HL,BC + LD DE,FILE_DATA + LD BC,6 + LDIR + + POP BC + OUT (C),B + + LD HL,(FILE_DATA) + LD (FILE_DATA+6),HL + LD HL,0 + LD (FILE_DATA+8),HL + LD (FILE_DATA+10),HL + LD (FILE_DATA+12),HL + + LD IX,(FILE_DATA) ; номер первого кластера + DEC IX + DEC IX ; -2 !!! + LD HL,0 + SCF + LD DE,(MSD_DATS+13) ; длина кластера в байтах + RR D + RR E +SEC_MUL: + RR D + RR E + JR C,SECT_X + ADD IX,IX + ADC HL,HL + JR SEC_MUL + +SECT_X: + LD DE,(MSD_DATS+8) + ADD IX,DE + LD DE,(MSD_DATS+10) + ADC HL,DE ; HL:IX - номер первого сектора файла + + AND A + RET +; +;DE - name - 11 символов +FIND_FILE: +; + LD C,SLOT3 + IN B,(C) + PUSH BC + + LD A,(CatPage) + OUT (C),A + + LD HL,#C000 + +NEXT_LOOP: + LD B,11 + PUSH DE + +NAME_LOOP: + LD A,(DE) + CP (HL) + JR NZ,NEXT_NAME + INC HL + INC DE + DJNZ NAME_LOOP + + POP DE + LD A,L + AND #E0 + LD L,A + + POP BC + OUT (C),B + AND A + RET ; HL - данные файла в странице 6 + +NEXT_NAME: + POP DE + LD A,L + AND #E0 + LD L,A + LD BC,#20 + ADD HL,BC + LD A,(HL) + AND A + JR Z,END_CAT + LD A,H + AND A + JR NZ,NEXT_LOOP + +END_CAT: + POP BC + OUT (C),B + SCF + RET + +HDD_FN: + EX AF,AF' + IN A,(FastRAM.OFF) + IN A,(SLOT1) + PUSH AF + IN A,(SLOT3) + PUSH AF + LD A,5 ;!FIXIT + OUT (SLOT1),A +DOOM2_SndPage+1: + LD A,0 + OUT (SLOT3),A + + IN A,(PORT_Y) + PUSH AF + EX AF,AF' + + RST ToBIOS ; читать сектора с винчестера, функция #45 + ;DI + + POP AF + OUT (PORT_Y),A + POP AF + OUT (SLOT3),A + POP AF + OUT (SLOT1),A + IN A,(FastRAM.ON) ; включаем кэш + RET +; +; +BPB_SetUp: + LD A,SYS_PAGE + LD HL,SYS_PAGE.MS_BPB + LD C,BIOS.HDD_READ_BPB + RST ToBIOS +.PARAMS: + DI + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + + LD A,(SYS_PAGE.MS_BPB+FORM_CODE) + CP #F0 + JP C,.ERROR_BPB + + LD HL,SYS_PAGE.MS_BPB+FAT_ID + LD DE,.FAT1_MSG + LD B,4 +.L1: LD A,(DE) + CP ' ' + JR NZ,.L11 + INC DE + JR .L1 +.L11: CP (HL) + JR NZ,.PC_DOS + + INC HL + INC DE + DJNZ .L1 + LD A,(HL) + CP '6' + LD HL,#81FF ; FAT16 флаг + JR Z,.FAT + CP '2' + JP NZ,.ERROR_BPB + +.PC_DOS: + LD HL,#01FF ; FAT12 флаг +.FAT: LD (SYS_PAGE.FAT_FLAG),HL + + LD A,(SYS_PAGE.MS_BPB+S_P_T) ; Количество секторов на трек + LD (SYS_PAGE.MSD_SECS),A + + BIT 7,H + + LD IX,0 + LD HL,0 ; вычислить начальный сектор FAT + + JR Z,.NO_LD_SPECIAL + LD IX,(SYS_PAGE.MS_BPB+SPECIAL_SECS) + LD HL,(SYS_PAGE.MS_BPB+SPECIAL_SECS+2) +.NO_LD_SPECIAL: + LD BC,0 + LD DE,(SYS_PAGE.MS_BPB+RESERV_SECS) + + ADD IX,DE + ADC HL,BC + + LD (SYS_PAGE.MSD_FAT_SEC),IX ; начальный сектор FAT + LD (SYS_PAGE.MSD_FAT_SEC2),HL ; начальный сектор FAT + + LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; число секторов в FAT + LD BC,0 + + LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; количество FATs +.NEXT_ADD: + ADD IX,DE + ADC HL,BC + DEC A + JR NZ,.NEXT_ADD + + LD (SYS_PAGE.MSD_CAT_SEC),IX ; начальный сектор DIR + LD (SYS_PAGE.MSD_CAT_SEC2),HL ; начальный сектор DIR + + LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + RL C + RL B + RL C + RL B + RL C + RL B + LD C,B + LD B,0 ; BC - число файловых записей в секторе + LD A,C + LD (SYS_PAGE.F_P_S),A + + LD DE,(SYS_PAGE.MS_BPB+FLS_NUM) ; Число файловых записей + + EX DE,HL + DEC HL + XOR A +.NEXT_ADD2: + INC A + JR Z,.ERROR_BPB + SBC HL,BC + JR NC,.NEXT_ADD2 + EX DE,HL + + LD E,A ; A - число секторов в DIR + LD D,0 + LD BC,0 + LD (SYS_PAGE.S_P_C),A + + ADD IX,DE ; Начало DATA area + ADC HL,BC + + LD (SYS_PAGE.MSD_DAT_SEC),IX + LD (SYS_PAGE.MSD_DAT_SEC2),HL + + LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + LD HL,0 + LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) + LD D,A + LD A,0 +.NEXT_ADD3: + ADD HL,BC ; Вычисление длины кластера + ADC A,0 + DEC D + JR NZ,.NEXT_ADD3 + + LD (SYS_PAGE.CLASTER_LEN),HL + LD B,0 + LD C,A + LD (SYS_PAGE.CLASTER_LEN2),BC + + LD HL,0 + LD BC,(SYS_PAGE.MS_BPB+S_P_T) + LD A,(SYS_PAGE.MS_BPB+H_P_S) +.BPB_L1:; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР + ADD HL,BC + DEC A + JR NZ,.BPB_L1 + LD (SYS_PAGE.S_X_H),HL + ; + EX AF,AF' + OUT (SLOT3),A + EI + AND A + RET +.ERROR_BPB: + EX AF,AF' + OUT (SLOT3),A + SCF + EI + RET + ; +.FAT1_MSG: + DB 'FAT1' \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index b5606d6..f74ae7e 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b5606d6db7c0eecf2e3b3da53040af2432a40569 +Subproject commit f74ae7e760de5541ee4966d509442c6421225c3b From e4a65dd0bbdb45312577ca0bb03e3b0518a73fd1 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 5 Feb 2024 02:01:11 +1000 Subject: [PATCH 05/16] error --- D2_FRAM.asm | 17 +++++++- DOOM2.asm | 90 +++++++++++++++++++------------------- Music_4x.asm | 119 +++++++++++++++++++++++++++------------------------ 3 files changed, 123 insertions(+), 103 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index 9851071..079de4a 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -1386,6 +1386,14 @@ COV_ADR+1: IN A,(SLOT3) LD E,A + + + ;!FIXIT DEBUG + ; LD A,COLORS.CGA.BORDER.CYAN + ; OUT (BorderColor),A + ; + + D2_FRAM_SndPage+1: LD A,0 OUT (SLOT3),A @@ -1404,6 +1412,13 @@ L_DDX: DEC D JR NZ,L_DDX + + ;!FIXIT DEBUG + ; LD A,COLORS.CGA.BORDER.BLACK + ; OUT (BorderColor),A + ; + + LD (SND_A),HL LD A,H @@ -1457,7 +1472,7 @@ SND_INIT1: ;_------[Чтение секторов с диска]------- NO_NEW_COUNT: LD HL,-SND_READ_SECTORS*512 ; буфер для данных - LD A,(D2_FRAM_SndPage) ;!FIXIT ; страница буфера, если адрес в окне #C000 + LD A,(D2_FRAM_SndPage) ;!FIXIT ; страница буфера, если адрес в окне #C000 LD DE,(SND_S1) ; абсолютный номер сектора Младшая часть LD IX,(SND_S2) ; абсолютный номер сектора Старшая часть LD B,SND_READ_SECTORS ; число читаемых секторов diff --git a/DOOM2.asm b/DOOM2.asm index 18278a2..7a0c00e 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -55,6 +55,7 @@ include 'Shared_includes/constants/SP2000.inc' include 'Shared_includes/constants/dss_equ.inc' include 'Shared_includes/constants/BIOS_equ.inc' + include 'Shared_includes/constants/standart_colors.inc' include 'Shared_includes/macroses/accelerator.z80' include 'Shared_includes/macroses/macros.z80' ;----------------------------------------------------------------------- @@ -92,18 +93,18 @@ BEGIN: DI LD (CMD_Line),IX ; сохранить указатель на параметры запуска CMD_Line+1: LD HL,#8080 -/* + ; Доделать???!!!! - LD C,(HL) - LD B,0 - INC BC - INC BC - INC BC - ADD HL,BC ; указатель на полный путь до файла запуска - ld c,Dss.ChDir ; переход в каталог DOOM2 на всякий случай - rst ToDSS - DI -*/ + ; LD C,(HL) + ; LD B,0 + ; INC BC + ; INC BC + ; INC BC + ; ADD HL,BC ; указатель на полный путь до файла запуска + ; ld c,Dss.ChDir ; переход в каталог DOOM2 на всякий случай + ; rst ToDSS + ; DI + ; IN A,(SLOT3) ; LD C,BIOS.SPRINTER_ALL ; RST ToBIOS @@ -415,26 +416,22 @@ CLEAR_CBL: CLEAR_SP_PAL: IN A,(SLOT3) PUSH AF - + ; LD A,#50 OUT (SLOT3),A - + ; LD B,61 - -LOOP_PAL_ALL: +.LOOP_PAL_ALL: PUSH BC - LD BC,PORT_Y - -LOOP_PAL_C: +.LOOP_PAL_C: OUT (C),B -; -PAL_RESES_ADR+1: +.RESES_ADR+1: LD HL,#C3F0 -; + ; LD D,16 - -LOOP_PAL_D: + ; +.LOOP_PAL_D: LD A,(HL) RRA RRA @@ -446,25 +443,24 @@ LOOP_PAL_D: LD E,A LD A,(HL) SUB E - JR NC,NO_Z + JR NC,.NO_Z XOR A -NO_Z: LD (HL),A +.NO_Z: LD (HL),A INC L DEC D - JR NZ,LOOP_PAL_D - + JR NZ,.LOOP_PAL_D + ; CALL SOUND1 - DJNZ LOOP_PAL_C - + DJNZ .LOOP_PAL_C + ; CALL PAUSE_INT - + ; POP BC LD A,(LAST_KEY) AND A - JR NZ,NO_PAL_EXE - DJNZ LOOP_PAL_ALL - -NO_PAL_EXE: + JR NZ,.NO_PAL_EXE + DJNZ .LOOP_PAL_ALL +.NO_PAL_EXE: POP AF OUT (SLOT3),A RET @@ -600,7 +596,7 @@ D2_FRAM_page+1: ;--------------------------------------- ; LD HL,#C3E0 - LD (PAL_RESES_ADR),HL + LD (CLEAR_SP_PAL.RESES_ADR),HL ; ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; Странное место. Можно же сразу в коде @@ -1181,9 +1177,9 @@ Load_Resources: in a,(SLOT3) ld (.SavePage),a - LD B,FilesTBL.END - LD DE,FilesTBL LD HL,RAMBlkIDs + LD DE,FilesTBL + LD B,FilesTBL.END .LR_loop: PUSH BC ;++счётчик @@ -1298,9 +1294,9 @@ Load_Resources: ld a,0 out (SLOT3),a ; - LD HL,CURRENT_DIR - LD C,Dss.CurDir - RST ToDSS + ; LD HL,CURRENT_DIR + ; LD C,Dss.CurDir + ; RST ToDSS ; LD C,Dss.CurDisk RST ToDSS @@ -1675,8 +1671,8 @@ TABLE_WALL: BLOCK 33,0 ; BLOCK TABLES_START+#74-$,0 ;ВЫРАВНИВАНИЕ -LAST_KEY: DB 0 NAMES: DB 6,1 +LAST_KEY: DB 0 ; BLOCK TABLES_START+#7C-$,0 ;ВЫРАВНИВАНИЕ @@ -1688,6 +1684,8 @@ NAME3: DB "_ICT2 CBL " NAME6: DB "_UNNY2 CBL " NAME8: DB "94956C CBL " NAME9: DB "_ENI511CCBL " +; +;Up_Dir: DZ ".." ; @@ -1706,8 +1704,12 @@ NAME9: DB "_ENI511CCBL " ; ENDIF ; OUTEND ; конец файла doom2.exe -DIR_NAME_11: BLOCK 11,0 -CURRENT_DIR: BLOCK 257,0 +;-----------------------------------------------------------------------; + +;------------------------------------ +;CURRENT_DIR: BLOCK 257,0 + +;------------------------------------ Temp_Buffer EQU $ ; ; @@ -1717,6 +1719,4 @@ Temp_Buffer EQU $ ;FRAM_PROG_1000H: include 'D2_FRAM.asm' -; - END ; \ No newline at end of file diff --git a/Music_4x.asm b/Music_4x.asm index 963f0ba..070fea8 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -62,15 +62,31 @@ INIT_HDD_WORK: LDIR POP AF OUT (SLOT3),A - ;!TODO music and dirs - ; парсим строку пути - ; LD HL,CURRENT_DIR+1 - ; LD DE,DIR_NAME_11 - ; PUSH DE - ; PUSH HL - ; LD BC,1*256 + Dss.DosName - ; RST ToDSS + ; ;[ ] music and dirs + ; LD A,(CURRENT_DIR+1) + ; AND A + ; JR Z,.skip_dir + ; ; + ; LD HL,Up_Dir + ; LD C,Dss.ChDir + ; RST ToDSS + ; ; + ; LD A,'\' ; + ; LD HL,CURRENT_DIR+257 + ; LD BC,257 ;!HARDCODE длина строки пути + ; CPDR + ; INC HL + ; INC HL + ; ; + ; LD DE,Temp_Buffer + ; LD A,FAT_ATTR.DIRECTORY + ; LD BC,Dss.F_First + ; RST ToDSS + ; ; + ; LD HL,(Temp_Buffer+15) + ; ; +.skip_dir: ;-----[читать секторы с винчестера]----- READ_DIR: LD HL,#C000 ; адрес буфера данных @@ -122,25 +138,25 @@ SET_SND_FILE: RET SWITCH_SND: -NAME_S+1: LD DE,NAME1 +.NAME_S+1: + LD DE,NAME1 CALL SET_SND_FILE - JR C,SWITCH_X - - LD HL,(NAME_S) + JR C,.SWITCH_X + ; + LD HL,(.NAME_S) LD BC,16 ADD HL,BC - LD (NAME_S),HL + LD (.NAME_S),HL RET - -SWITCH_X: +.SWITCH_X: LD HL,NAME1 - LD (NAME_S),HL + LD (.NAME_S),HL JR SWITCH_SND FILE_DATA: DW 0 ; начальный кластер DW 0,0 ; длина файла - + ; DW 0 ; текущий кластер DW 0,0 ; текущее положение в файле DW 0 ; текущий номер сектора в кластере @@ -179,58 +195,52 @@ OPEN_FILE: ; DE - name LD DE,(MSD_DATS+13) ; длина кластера в байтах RR D RR E -SEC_MUL: +.SEC_MUL: RR D RR E - JR C,SECT_X + JR C,.SECT_X ADD IX,IX ADC HL,HL - JR SEC_MUL - -SECT_X: + JR .SEC_MUL +.SECT_X: LD DE,(MSD_DATS+8) ADD IX,DE LD DE,(MSD_DATS+10) ADC HL,DE ; HL:IX - номер первого сектора файла - AND A RET ; ;DE - name - 11 символов FIND_FILE: -; LD C,SLOT3 IN B,(C) PUSH BC - + ; LD A,(CatPage) OUT (C),A - + ; LD HL,#C000 - -NEXT_LOOP: +.NEXT_LOOP: LD B,11 PUSH DE - -NAME_LOOP: +.NAME_LOOP: LD A,(DE) CP (HL) - JR NZ,NEXT_NAME + JR NZ,.NEXT_NAME INC HL INC DE - DJNZ NAME_LOOP - + DJNZ .NAME_LOOP + ; POP DE LD A,L AND #E0 LD L,A - + ; POP BC OUT (C),B AND A RET ; HL - данные файла в странице 6 - -NEXT_NAME: +.NEXT_NAME: POP DE LD A,L AND #E0 @@ -239,37 +249,32 @@ NEXT_NAME: ADD HL,BC LD A,(HL) AND A - JR Z,END_CAT + JR Z,.END_CAT LD A,H AND A - JR NZ,NEXT_LOOP - -END_CAT: + JR NZ,.NEXT_LOOP +.END_CAT: POP BC OUT (C),B SCF RET -HDD_FN: - EX AF,AF' - IN A,(FastRAM.OFF) - IN A,(SLOT1) - PUSH AF - IN A,(SLOT3) - PUSH AF - LD A,5 ;!FIXIT - OUT (SLOT1),A +HDD_FN: EX AF,AF' + IN A,(FastRAM.OFF) + IN A,(SLOT1) + PUSH AF + IN A,(SLOT3) + PUSH AF + LD A,5 ;!FIXIT + OUT (SLOT1),A DOOM2_SndPage+1: - LD A,0 - OUT (SLOT3),A - - IN A,(PORT_Y) - PUSH AF + LD A,0 + OUT (SLOT3),A + IN A,(PORT_Y) + PUSH AF EX AF,AF' - RST ToBIOS ; читать сектора с винчестера, функция #45 - ;DI - + ; POP AF OUT (PORT_Y),A POP AF From 276d36e713b9ba8d2a5454f27d5f64cc6c42c949 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 5 Feb 2024 23:28:53 +1000 Subject: [PATCH 06/16] ... --- D2_FRAM.asm | 6 +- DOOM2.asm | 274 +++++++++++++++++++++++++-------------------------- Music_4x.asm | 4 +- 3 files changed, 136 insertions(+), 148 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index 079de4a..de40057 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -1393,9 +1393,7 @@ COV_ADR+1: ; OUT (BorderColor),A ; - -D2_FRAM_SndPage+1: - LD A,0 + LD A,CBL.BUFFER_PAGE OUT (SLOT3),A L_DDX: @@ -1472,7 +1470,7 @@ SND_INIT1: ;_------[Чтение секторов с диска]------- NO_NEW_COUNT: LD HL,-SND_READ_SECTORS*512 ; буфер для данных - LD A,(D2_FRAM_SndPage) ;!FIXIT ; страница буфера, если адрес в окне #C000 + LD A,CBL.BUFFER_PAGE ; страница буфера, если адрес в окне #C000 LD DE,(SND_S1) ; абсолютный номер сектора Младшая часть LD IX,(SND_S2) ; абсолютный номер сектора Старшая часть LD B,SND_READ_SECTORS ; число читаемых секторов diff --git a/DOOM2.asm b/DOOM2.asm index 7a0c00e..a6dbe89 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -140,21 +140,30 @@ Loader_length EQU 0 ;--------------------------------------- - IN A,(SLOT3) - PUSH AF + ; IN A,(SLOT3) + ; PUSH AF - ld a,(RAMBlkIDs) - ld bc,BIOS.GetMemPage - rst ToBIOS - ;di + ld a,(RAMBlkIDs.resources) ld (PalitrePage),a - ld a,(RAMBlkIDs+3) - ld bc,BIOS.GetMemPage - rst ToBIOS - ;di + ld a,(RAMBlkIDs.d2_fram) ld (D2_FRAM_page),a - ;DI + + IF YesSound +;----[] +; Запрашиваем страницу для каталога +; сохраняем её № в коде +; +; ДОДЕЛАТЬ!!! +; надо потом нормально выделять и +; освобождать память, а не вот это всё +; + ld b,1 + ld c,Dss.GetMem + rst ToDSS + LD (CatPage),a +;----[] + ENDIF CALL CLEAR_GRAF_SCR @@ -325,11 +334,11 @@ CLEAR_GRAF_SCR: ;!!!!!!!!!!![оптимизировать]!!!!!!!!!!!! LOOP_CLS: ACC_SetBlockSize - LD E,0 - LD D,E + LD E,0 + LD D,E ACC_FillScreenOneByte - PUSH DE - PUSH DE + PUSH DE + PUSH DE ACC_Off DJNZ LOOP_CLS @@ -470,22 +479,16 @@ CLEAR_SP_PAL: MAIN: CALL INIT_TABLE RET C - ;IN A,(PORT_Y) - ;LD (SAVE_PORT_Y),A + ; IN A,(PORT_Y) + ; LD (SAVE_PORT_Y),A LD A,#C0 OUT (PORT_Y),A CALL RECALC_MAP + RET C ; нужно ли???!!! ;----!!!!!!!!!!!!!!!!!!!!!!!!!---------- ;--------------------------------------- - - - ;LD A,(SAVE_PORT_Y) - ;OUT (PORT_Y),A - - RET C ; нужно ли???!!! - XOR A LD (LAST_KEY),A OUT (BorderColor),A @@ -515,7 +518,7 @@ MAIN: CALL INIT_TABLE RST ToBIOS LD HL,#5000 - LD E,1 + LD E,0 LD B,9 ; графическое окно 1, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS @@ -555,31 +558,6 @@ D2_FRAM_page+1: LD A,#FF OUT (SLOT3),A - IF YesSound -;----[] -; Запрашиваем страницы для музла и -; каталога, сохраняем их № в коде -; 0 страница блока - CatPage -; 1 страница блока - SndPage -; -; ДОДЕЛАТЬ!!! -; надо потом нормально выделять и -; освобождать память, а не вот это всё -; - ld b,2 - ld c,Dss.GetMem - rst ToDSS - ; - LD (CatPage),a - ld b,1 - ld c,BIOS.GetMemPage - rst ToBIOS - ; - ld (DOOM2_SndPage),a - ld (D2_FRAM_SndPage+#B000),a - ;di -;----[] - ENDIF IN A,(FastRAM.ON) LD HL,#C000 @@ -867,48 +845,48 @@ SOUND1: ; MONSTR_DAT: -M_PAGE EQU $-MONSTR_DAT - DB 0 ; страница с общими данными монстра (картинки) -; признак конца таблицы монстров -M_ADR EQU $-MONSTR_DAT - DW #4000 ; адрес в странице +M_PAGE EQU $-MONSTR_DAT + DB 0 ; страница с общими данными монстра (картинки) +; признак конца таблицы монстров +M_ADR EQU $-MONSTR_DAT + DW #4000 ; адрес в странице ; -M_HIGH EQU $-MONSTR_DAT - DB #40 ; вертикальное положение +M_HIGH EQU $-MONSTR_DAT + DB #40 ; вертикальное положение ; -M_HOR EQU $-MONSTR_DAT - DW 160 ; горизонтальное положение +M_HOR EQU $-MONSTR_DAT + DW 160 ; горизонтальное положение ; -M_VAR2 EQU $-MONSTR_DAT - DW 0008 ; счетчик переключений +M_VAR2 EQU $-MONSTR_DAT + DW 0008 ; счетчик переключений ; -M_XADD EQU $-MONSTR_DAT - DW #0100 ; x-add параметры - DB #40,#40 ; ширина-высота ??? +M_XADD EQU $-MONSTR_DAT + DW #0100 ; x-add параметры + DB #40,#40 ; ширина-высота ??? ; -M_X EQU $-MONSTR_DAT - DW #0700 ; координата X +M_X EQU $-MONSTR_DAT + DW #0700 ; координата X ; -M_Y EQU $-MONSTR_DAT - DW #0700 ; координата Y +M_Y EQU $-MONSTR_DAT + DW #0700 ; координата Y ; -M_VX EQU $-MONSTR_DAT - DW 0000 ; скорость движения по X +M_VX EQU $-MONSTR_DAT + DW 0000 ; скорость движения по X ; -M_VY EQU $-MONSTR_DAT - DW 0000 ; скорость движения по Y +M_VY EQU $-MONSTR_DAT + DW 0000 ; скорость движения по Y ; -M_TYPE EQU $-MONSTR_DAT - DW 0000 ; тип монстра уничтожаемый, неуничтожаемый -; исчезающий при ударе о стенку, не исчезающий -; исчезающий при соприкосновении с игроком, -; не исчезающий.... +M_TYPE EQU $-MONSTR_DAT + DW 0000 ; тип монстра уничтожаемый, неуничтожаемый +; исчезающий при ударе о стенку, не исчезающий +; исчезающий при соприкосновении с игроком, +; не исчезающий.... -M_VAR EQU $-MONSTR_DAT - DB 0 ; Переменные конкретного монстра +M_VAR EQU $-MONSTR_DAT + DB 0 ; Переменные конкретного монстра ; -M_VAR3 EQU $-MONSTR_DAT - DB 0 +M_VAR3 EQU $-MONSTR_DAT + DB 0 ; Переменная монстра бит 0,1 - деление по ширине ; bit 2 - переключать по старшему ; bit 3 - @@ -918,10 +896,10 @@ M_VAR3 EQU $-MONSTR_DAT ; bit 7 - не выводить ; M_VAR4 EQU $-MONSTR_DAT - DB 0 ; Переключение монстра ADD параметр + DB 0 ; Переключение монстра ADD параметр MONSTR_D_LEN EQU $-MONSTR_DAT ;следующий монстр - DB 0 ; - отсутствует + DB 0 ; - отсутствует ; ;**************************************** ; IX+0 - страница стенки @@ -935,14 +913,14 @@ MONSTR_D_LEN EQU $-MONSTR_DAT ;сле ; IX+11 - реальная высота стенки ??? WALL_DATS: - DB 0 - DW #4000 - DB #40 - DW #00A0 ; 160 - DB 0,0 + DB 0 + DW #4000 + DB #40 + DW #00A0 ; 160 + DB 0,0 MONSTR_DATS: - DB 0,0,0,0,0,0,0,0 + DB 0,0,0,0,0,0,0,0 ; ; ************************************** ; @@ -980,7 +958,7 @@ MADE_FFING: NEXT_BYTE_: LD A,(HL) - CP 0F7H + CP #F7 JR NZ,NO_FFING LD (HL),0FFH NO_FFING: @@ -1002,32 +980,36 @@ INIT_TABLE: ;----[Читаем первый блок таблиц E:]-----; Tables disk Doom.trd ;--------------------------------------- !!!!! Заменить к чертям на свою подгрузку блоками! - LD A,(RAMBlkIDs) + LD A,(RAMBlkIDs.resources) LD HL,TABLE_MAIN ld c,BIOS.GetMemBlkPages ; получить список страниц блока A rst ToBIOS RET C ; LD HL,TABLE_MAIN - INC HL - INC HL - INC HL - LD A,(HL) - LD (PAGE_WEAPON),A - INC HL - LD A,(HL) - LD (SKY_1),A - INC HL - LD A,(HL) - LD (SKY_2),A + ; INC HL + ; INC HL + ; INC HL - LD HL,TABLE_MAIN - LD A,26 - ADD A,L - LD L,A + ; !TODO Это говно надо оптимизировать и раскидывать номера страниц сразу в код + LD A,(TABLE_MAIN+3) ;!HARDCODE + LD (PAGE_WEAPON),A + ; INC HL + ;LD A,(HL) + LD A,(TABLE_MAIN+4) ;!HARDCODE + LD (SKY_1),A + ;INC HL + LD A,(TABLE_MAIN+5) ;!HARDCODE + ;LD A,(HL) + LD (SKY_2),A + ; + LD HL,TABLE_MAIN+26 + ;LD A,26 ;!HARDCODE + ;ADD A,L + ;LD L,A LD A,(HL) LD (WALL_DATS),A - + ; LD DE,MONSTR_DATS LD B,7 NEXT_HL_FFING: @@ -1053,11 +1035,11 @@ NEXT_HL_FFING: LD A,(MONSTR_DATS+6) LD (BAR_PAGE),A - LD HL,TABLE_MAIN - LD A,35 - ADD A,L - LD L,A - LD A,(HL) + ;LD HL,TABLE_MAIN + ;LD A,35 + ;ADD A,L + ;LD L,A + LD A,(TABLE_MAIN+35) LD (BFGF_PAGE),A CALL MADE_FFING @@ -1065,18 +1047,18 @@ NEXT_HL_FFING: LD A,(PAGE_WEAPON) CALL MADE_FFING - LD HL,TABLE_MAIN - LD A,33 - ADD A,L - LD L,A - LD A,(HL) + ;LD HL,TABLE_MAIN + ;LD A,33 + ;ADD A,L + ;LD L,A + LD A,(TABLE_MAIN+33) LD (EFF_PAGE),A ; звук выстрела - LD HL,TABLE_MAIN - LD A,34 - ADD A,L - LD L,A - LD A,(HL) + ; LD HL,TABLE_MAIN + ; LD A,34 + ; ADD A,L + ; LD L,A + LD A,(TABLE_MAIN+34) LD (PAGE_M_PLACE),A ; таблица с углами для монстров ;--_[Читаем четвёртый блок таблиц H:]---; Tables disk my_tab*.* @@ -1087,15 +1069,20 @@ NEXT_HL_FFING: ret c ;--------------------------------------- */ - ld a,(RAMBlkIDs+2) + ld a,(RAMBlkIDs.d2_table) LD HL,TABLE_TRACE ld c,BIOS.GetMemBlkPages ; получить список страниц блока A rst ToBIOS RET C LD A,B - CP 32 - SCF - RET NZ + ; + CP 33 + CCF + RET C + ;CP 32 + ;SCF + ;RET NZ + ; ; ;----[Читаем третий блок таблиц G:]-----; Tables disk mapw*.d2 /* @@ -1105,13 +1092,13 @@ NEXT_HL_FFING: ret c ;--------------------------------------- */ - ld a,(RAMBlkIDs+1) + ld a,(RAMBlkIDs.map_wall) LD HL,TABLE_WALL ld c,BIOS.GetMemBlkPages ; получить список страниц блока A rst ToBIOS RET C LD A,B - CP 33 + CP 17 CCF RET C ; B - размер рамдиска @@ -1324,6 +1311,10 @@ FilesTBL: .END EQU ($-FilesTBL)/14 ; количество файлов RAMBlkIDs: BLOCK FilesTBL.END,0 +.resources EQU RAMBlkIDs+0 +.map_wall EQU RAMBlkIDs+1 +.d2_table EQU RAMBlkIDs+2 +.d2_fram EQU RAMBlkIDs+3 ;--------------------------------------- ; @@ -1352,14 +1343,14 @@ RECALC_M2: JR Z,NO_PRP ; проверить, какую таблицу пересчитываем BIT 5,H JR Z,NO_PRP ; если не 4-ю, то идти дальше, иначе -; - это таблица препрятствий +; - это таблица препрятствий RECALC_M2X: LD A,(HL) ; код стенки CP 'S' ; #53 JR Z,ZERO_PRP - SUB 20H ; код пробела + SUB ' ' JR Z,ZERO_PRP - LD A,05Fh ; препятствие + LD A,#5F ; препятствие JR ONE_PRP ZERO_PRP: XOR A @@ -1369,9 +1360,9 @@ ONE_PRP: JR NZ,RECALC_M2X INC H LD A,H - AND 0Fh + AND #0F JR NZ,RECALC_M2X - JR NO_PROCESS ; закончить + JR NO_PROCESS ; закончить ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; Сделать условие на максимальное кол-во @@ -1392,13 +1383,12 @@ NO_PRP: CALL Z,MONSTR_POS2 CP 'P' ; огонь bfg CALL Z,MONSTR_POS3 - SUB 20H + SUB #20 JR Z,ZERO_WOLL - SUB 10H + SUB #10 JR C,ZERO_WOLL -; - CP 15 -MAP_ELS EQU $-1 +MAP_ELS+1: + CP 15 ; JR NC,ZERO_WOLL @@ -1428,16 +1418,16 @@ NO_ZERO_W: JR NZ,NO_PRP INC H LD A,H - AND 0Fh + AND #0F JR NZ,NO_PRP LD A,H - CP 50H + CP #50 JR NZ,NO_ST LD (MONSTR_END_T),IX ; конец таблицы монстров NO_ST: LD A,H - CP 80h + CP #80 JR NZ,RECALC_X NO_PROCESS: @@ -1667,7 +1657,7 @@ Y_SPEED: DW #302 A_SPEED: DW #200 TABLE_TRACE: BLOCK 33,0 ; таблица трассировки/банки таблицы -TABLE_WALL: BLOCK 33,0 +TABLE_WALL: BLOCK 17,0 ; BLOCK TABLES_START+#74-$,0 ;ВЫРАВНИВАНИЕ diff --git a/Music_4x.asm b/Music_4x.asm index 070fea8..dcb3fc1 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -267,8 +267,8 @@ HDD_FN: EX AF,AF' PUSH AF LD A,5 ;!FIXIT OUT (SLOT1),A -DOOM2_SndPage+1: - LD A,0 + ; + LD A,CBL.BUFFER_PAGE OUT (SLOT3),A IN A,(PORT_Y) PUSH AF From c6910384f9bad60b34341a29208f6cd8a94d76af Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 7 Feb 2024 02:51:53 +1000 Subject: [PATCH 07/16] ... --- D2_FRAM.asm | 107 +++------- DOOM2.asm | 530 ++++++++++++++++++++++++++++-------------------- Music_4x.asm | 167 +++++++++++---- Shared_Includes | 2 +- 4 files changed, 468 insertions(+), 338 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index de40057..6d0453e 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -98,11 +98,7 @@ SKY_LOOP_1: RES 7,H SET 6,H - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND LD A,(SKY_1) LD B,A @@ -118,12 +114,8 @@ NO_NEXT_SKY: DEC C JR NZ,SKY_LOOP_1 - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF -; + CALL SOUND + EXX SCREEN_1+1: LD DE,#C040 ; начало экрана @@ -312,10 +304,10 @@ COLOR_LO+1: LD A,#2F ; цве ACC_SetBlockSize LD (DE),A ;!!!!! прикольно ACC_CopyScreenBlock - LD (DE),A ; положить стенку! + LD (DE),A ; положить стенку! ACC_Off - EXX ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + EXX ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NEXT_ANGLE: @@ -340,13 +332,7 @@ CONT_PAGE+1: LD A,0 LD L,A JP NZ,TRACE_LOOP -; CALL SOUND ; играть музыку на ковоксбластере!!! - - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND ; играть музыку на ковоксбластере!!! INC H BIT 7,H @@ -468,11 +454,7 @@ SET_PICTURE: LD A,#50 OUT (C),A - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND ; ld bc,#0100 ; масштабирование - 1 OUT (C),C @@ -514,11 +496,7 @@ LOOP_PG: POP BC - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND DJNZ PIC_LOOP @@ -1039,12 +1017,8 @@ NO_Z_A: LD A,E AND #0F - IF YesSound - CALL Z,SOUND - ; ELSE - ; CALL Z,YesSoundZero - ENDIF - + CALL Z,SOUND + ; NO_WRITE_LINE: INC DE ; новое значение X @@ -1159,11 +1133,7 @@ MAP_L4: POP HL PUSH HL - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND LD C,16 @@ -1191,9 +1161,7 @@ MAP_L6: POP HL PUSH HL - IF YesSound - CALL SOUND - ENDIF + CALL SOUND LD C,16 @@ -1294,7 +1262,9 @@ CONT_MOVE: ;COV_ADR: DB 0 ;SND_P: DB #FF SND_A: DW #C000 - IF YesSound + + + SND_STOP: ; остановить музыку PUSH AF @@ -1348,19 +1318,14 @@ SND_INIT: LD E,A JR SND_INIT1 - ENDIF + + SOUND: - IF !YesSound - ; PUSH AF - ; CALL KBD_INT - ; POP AF - RET - ENDIF -; - IF YesSound SoundOnOff: NOP ; сюда вставляется команда RET для отключения звука и NOP для включения +SoundOnOff2: + NOP PUSH AF PUSH HL SND_MORE: @@ -1525,22 +1490,16 @@ NO_LD_SND: POP HL POP AF RET - ENDIF -; - IF !YesSound -YesSoundZero: - PUSH AF - PUSH HL - CALL KBD_INT - POP HL - POP AF - RET - ENDIF + +; YesSoundZero: +; PUSH AF +; PUSH HL +; CALL KBD_INT +; POP HL +; POP AF +; RET EFFECTS: - IF !YesSound - RET - ENDIF LD DE,(EFF_) LD A,D CP #C0 @@ -1930,12 +1889,7 @@ MONST_H1: CALL C,WALL - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF - + CALL SOUND NO_M_OUT: call MONSTR_NEXT_P @@ -2050,7 +2004,7 @@ NO_SAVE: SAVE_HL: DW 0 SAVE_P1: DW 0 SAVE_P2: DW 0 -SAVE_RGA2: DB 0 +; SAVE_RGA2: DB 0 SAVE_PIC: IN A,(SCREEN_SWITCH) @@ -2126,7 +2080,8 @@ NO_NEXT_PAGE: OUT (C),B LD BC,(SAVE_P1) OUT (C),B - LD A,(SAVE_RGA2) +SAVE_RGA2+1: + LD A,0 OUT (PORT_Y),A RET diff --git a/DOOM2.asm b/DOOM2.asm index a6dbe89..ce05c57 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -8,36 +8,7 @@ ; ;---------------------------[Defines section]--------------------------- -; IFNDEF HARDWARE : IFNDEF ZXMAK2 : IFNDEF MAME : DEFINE HARDWARE 1 : ENDIF : ENDIF : ENDIF - -; IFDEF HARDWARE -; DEFINE NORM_ACC 1 -; DEFINE NORM_FastRAM 1 -; ENDIF -; IFDEF ZXMAK2 -; DEFINE NORM_ACC 0 -; DEFINE NORM_FastRAM 0 -; ENDIF -; IFDEF MAME -; DEFINE NORM_ACC 1 -; DEFINE NORM_FastRAM 1 -; ENDIF - - IFNDEF YesSound : DEFINE YesSound 1 : ENDIF - DEFINE EXE_HEADER 1 -; DEFINE NEED_LOADER 1 - -; IFDEF HARDWARE -; DISPLAY "[]------[ Compilation target: Sprinter 2000 ]------[]" -; ENDIF -; IFDEF ZXMAK2 -; DISPLAY "[]------[ Compilation target: emulator ZXMAK2 ]------[]" -; ENDIF -; IFDEF MAME -; DISPLAY "[]------[ Compilation target: emulator MAME ]------[]" -; ENDIF - ;----------------------------------------------------------------------- ; @@ -58,24 +29,26 @@ include 'Shared_includes/constants/standart_colors.inc' include 'Shared_includes/macroses/accelerator.z80' include 'Shared_includes/macroses/macros.z80' + include 'Shared_includes/structures/FileSystem.inc' ;----------------------------------------------------------------------- ; ; ;-------------------------[Standart EQU section]------------------------ -org_addr EQU #8000+CLP_Buffer -code_addr EQU BEGIN -stack_point EQU #BFFF -program_start EQU BEGIN +org_addr EQU #8000+CLP_Buffer +code_addr EQU BEGIN +stack_point EQU #BFFF +program_start EQU BEGIN +Loader_length EQU 0 ;----------------------------------------------------------------------- ; -TABLE_X EQU #A000 ; таблица коэфициентов высоты -TABLE_X_SIZE EQU #0800 ; её размер??? -MONSTR_TABLE EQU #A800 ; таблица монстров -MONSTR_TABLE_SIZE EQU #1800 ; её размер??? -TABLE_W EQU #2000 ; текущие карты для TRACE +TABLE_X EQU #A000 ; таблица коэфициентов высоты +TABLE_X_SIZE EQU #0800 ; её размер??? +MONSTR_TABLE EQU #A800 ; таблица монстров +MONSTR_TABLE_SIZE EQU #1800 ; её размер??? +TABLE_W EQU #2000 ; текущие карты для TRACE ; Code start section @@ -87,43 +60,33 @@ TABLE_W EQU #2000 ; тек ELSE ORG org_addr - CLP_Buffer ENDIF +;[]-------------------------------------------------------------------[] + + +;[]-------------------------------------------------------------------[] BEGIN: DI - LD (CMD_Line),IX ; сохранить указатель на параметры запуска CMD_Line+1: LD HL,#8080 - -; Доделать???!!!! - ; LD C,(HL) - ; LD B,0 - ; INC BC - ; INC BC - ; INC BC - ; ADD HL,BC ; указатель на полный путь до файла запуска - ; ld c,Dss.ChDir ; переход в каталог DOOM2 на всякий случай - ; rst ToDSS - ; DI - - ; IN A,(SLOT3) - ; LD C,BIOS.SPRINTER_ALL - ; RST ToBIOS - - + CALL SET_HOME_PATH ;--------[загрузка ресурсов игры]------- ; выполнено в виде костыльной заглушки - call Load_Resources - - IFDEF NEED_LOADER -Loader_length EQU $-BEGIN - ELSE -Loader_length EQU 0 - ENDIF + LD HL,Loading_TXT + LD C,Dss.PChars + RST ToDSS + ; + CALL Load_Resources + ; + CALL SAVE_PAL + CALL SAVE_TXT_SCREEN + ; LD A,Dss.SetVMod.grf320x256 + ; LD BC,Dss.SetVMod.Screen_1 + ; RST ToDSS ;--------------------------------------- ;-----[Инициализация Covox-Blaster]----- -; IF YesSound ld bc,CBL.SYS_PORT ld a,CBL.Blaster + CBL.Mono + CBL.is8bit + CBL.Int_off + CBL.KHz_16old out (c),a @@ -136,7 +99,6 @@ Loader_length EQU 0 JR NZ,1B ;--------------------------------------- ; -; ENDIF ;--------------------------------------- @@ -149,7 +111,6 @@ Loader_length EQU 0 ld a,(RAMBlkIDs.d2_fram) ld (D2_FRAM_page),a - IF YesSound ;----[] ; Запрашиваем страницу для каталога ; сохраняем её № в коде @@ -163,7 +124,7 @@ Loader_length EQU 0 rst ToDSS LD (CatPage),a ;----[] - ENDIF + CALL CLEAR_GRAF_SCR @@ -214,8 +175,6 @@ Loader_length EQU 0 CALL MAIN ;----------------------------------------------------------------------- - - ;----------------------------------------------------------------------- ; E)eeeeee X) xx I)iiii T)tttttt @@ -224,49 +183,61 @@ Loader_length EQU 0 ; E) X)xx I) T) ; E) X) xx I) T) ; E)eeeeee X) xx I)iiii T) - - ;----------------------------------------------------------------------- +; +;-----------[EXIT Procedure]------------; +RETURN_POINT: +; DI +; LD A,#10 +; LD BC,#1FFD +; OUT (C),A +; LD A,RESET_PAGE +; OUT (SLOT3),A +; LD (#C000),HL +; HALT_L: +; ;DI +; HALT +; JR HALT_L + + IN A,(FastRAM.OFF) + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.RAM),A + ; + LD A,ACEX.Config_PG.Sp2000_SoftSetUp + LD BC,BIOS.RST_CONF.CUSTOM + RST ToBIOS + ; + CALL RESTORE_ALL + ; +.loop: LD BC,Dss.Exit + RST ToDSS + JR .loop +;--------------------------------------- + ;----[LP_OPEN_S]------------------------ ; Открытие стандартных окон - LD HL,#5104 - LD E,0 ; win_flag - флаги окна: -; bit 0 определяет страницу режима, которая будет -; открыта после исполнения функции - LD B,4 ; 4 - спектрумовское окно, HL - положение окна - LD C,BIOS.LP_OPEN_S - RST ToBIOS -;--------------------------------------- +; LD HL,#5104 +; LD E,0 ; win_flag - флаги окна: +; ; bit 0 определяет страницу режима, которая будет +; ; открыта после исполнения функции +; LD B,4 ; 4 - спектрумовское окно, HL - положение окна +; LD C,BIOS.LP_OPEN_S +; RST ToBIOS +; ;--------------------------------------- -SP_SAVE1: - LD SP,0 - EXX - POP HL - EXX - POP IX - POP IY - EI - RET +; SP_SAVE1: +; LD SP,0 +; EXX +; POP HL +; EXX +; POP IX +; POP IY +; EI +; RET ;======================================= ; -; -;-----------[EXIT Procedure]------------; Сделать!!! -RETURN_POINT: ; точка возврата - полный сброс - DI - LD A,#10 - LD BC,#1FFD - OUT (C),A - LD A,RESET_PAGE - OUT (SLOT3),A - LD (#C000),HL -HALT_L: - ;DI - HALT - JR HALT_L -;--------------------------------------- - SET_PAL_x: IN A,(FastRAM.OFF) @@ -413,11 +384,9 @@ CLEAR_COVOX: CLEAR_COVOX_X: LD BC,CBL.COVOX_OUT -; IF YesSound CLEAR_CBL: OUT (C),A DJNZ CLEAR_CBL -; ENDIF RET ; ; @@ -518,7 +487,7 @@ MAIN: CALL INIT_TABLE RST ToBIOS LD HL,#5000 - LD E,0 + LD E,1 LD B,9 ; графическое окно 1, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS @@ -587,40 +556,36 @@ D2_FRAM_page+1: CALL CLEAR_COVOX - IN A,(FastRAM.OFF) - CALL INIT_HDD_WORK + IN A,(FastRAM.OFF) + CALL INIT_HDD_WORK IN A,(FastRAM.ON) + SOUND_SWITCH: - IF YesSound - LD HL,NAMES+1 - LD A,(HL) - INC A - LD (HL),A - DEC HL - CP (HL) - JR NZ,SOUND_S1 - LD A,0 - INC HL - LD (HL),A + LD HL,NAMES+1 + LD A,(HL) + INC A + LD (HL),A + DEC HL + CP (HL) + JR NZ,SOUND_S1 + LD A,0 + INC HL + LD (HL),A SOUND_S1: - RLCA - RLCA - RLCA - RLCA - ; - ADD A,low (NAMES+2) - LD E,A - LD A,0 - RLA - ADD A,high (NAMES+2) - LD D,A - ;ADD A,#80 - ;LD E,A - ;LD D,#80 - CALL SET_SND_FILE - CALL INIT_SOUND - ENDIF + RLCA + RLCA + RLCA + RLCA + ; + ADD A,low (NAME1) + LD E,A + LD A,0 + RLA + ADD A,high (NAME1) + LD D,A + CALL SET_SND_FILE + CALL INIT_SOUND MORE_PIC: LD HL,#0100 @@ -629,6 +594,7 @@ MORE_PIC: LD (Y_SPEED),HL LD HL,#0200 LD (A_SPEED),HL + HELP_2: CALL CLEAR_SP_PAL LD A,6 @@ -670,9 +636,10 @@ PAUS_START: JR Z,DM_LOOP CP 38 JR Z,SOUND_SWITCH - CP 9 JP Z,RETURN_POINT + ; CP 76 + ; JP Z,RETURN_POINT CP 5 JP Z,HELP_ @@ -715,89 +682,51 @@ DM_LOOP: ; CALL Z,SWITCH_XX_W ; CALL CRAZY_WALL - DI + ;DI ; CALL SET_PAL_x ; CALL FIRE_S - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + + CALL SOUND CALL CALC_NEW_PLACE CALL MAP_PLACE CALL MAKE_MAP ; соорудить относительную карту - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND CALL PRECALC_PLACE - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND CALL TRACE ; прорисовка! - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND ; CALL MONSTR_OUT CALL MONSTR_ALL - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND CALL WEAPON_OUT - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND CALL MAP_OUT CALL CLEAR_Z_BUFER LOOP_SCR: -; IF NORM_syncPORT - IN A,(SCR_SyncPort) - BIT 5,A - JR NZ,CONT_WORK + IN A,(SCR_SyncPort) + BIT 5,A + JR NZ,CONT_WORK - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF - - JR LOOP_SCR - -; ELSE -; EI -; HALT -; ENDIF + CALL SOUND + JR LOOP_SCR CONT_WORK: CALL SCR_SWITCH - IF YesSound - CALL SOUND - ; ELSE - ; CALL YesSoundZero - ENDIF + CALL SOUND JP DM_LOOP @@ -817,22 +746,18 @@ SET_1: PAUSE_INT: CALL SOUND1 -; IF NORM_syncPORT - IN A,(SCR_SyncPort) - BIT 5,A - JR NZ,PAUSE_INT + + IN A,(SCR_SyncPort) + BIT 5,A + JR NZ,PAUSE_INT PAUSE_INT1: - CALL SOUND1 - IN A,(SCR_SyncPort) - BIT 5,A - RET NZ - JR PAUSE_INT1 -; ELSE -; EI -; HALT -; ret -; ENDIF + CALL SOUND1 + IN A,(SCR_SyncPort) + BIT 5,A + RET NZ + JR PAUSE_INT1 + PAUSE_SNDC: JP SOUND @@ -1641,8 +1566,173 @@ MONSTR_POS: POP DE RET ; -;*************************************** +;*********************************************************************** + +;*********************************************************************** +SET_HOME_PATH: + LD C,(HL) + LD B,0 + INC BC + INC BC + INC BC + ADD HL,BC ; указатель на полный путь до файла запуска + LD A,(HL) + PUSH HL + SUB 'A' + LD C,Dss.ChDisk + RST ToDSS + ; + POP HL + INC HL + INC HL + LD D,H + LD E,L + LD BC,128 + XOR A + CPIR + LD A,'\' ; + LD BC,128 + CPDR + LD A,(HL) + CP ':' + JR Z,.it_is_root + ; + INC HL + LD (HL),0 + EX DE,HL + LD C,Dss.ChDir ; переход в каталог DOOM2 на всякий случай + RST ToDSS +.it_is_root: + RET +;*********************************************************************** +SAVE_PAL: + IN A,(SLOT2) + PUSH AF + OUT (SLOT3),A + ; + LD HL,Pal_Restore_Buffer+#4000 + LD DE,0 + LD A,4 + LD C,BIOS.PIC_GET_PAL + RST ToBIOS + ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024 + ; LD DE,0 + ; LD A,5 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 + ; LD DE,0 + ; LD A,6 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 + ; LD DE,0 + ; LD A,7 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; + POP AF + OUT (SLOT3),A + RET +;*********************************************************************** +RESTORE_PAL: + ; + IN A,(SLOT2) + PUSH AF + OUT (SLOT3),A + ; + LD HL,Pal_Restore_Buffer+#4000 + LD DE,0 + LD A,4 + LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + RST ToBIOS + ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024 + ; LD DE,0 + ; LD A,5 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 + ; LD DE,0 + ; LD A,6 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 + ; LD DE,0 + ; LD A,7 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; + POP AF + OUT (SLOT3),A + RET +;*********************************************************************** + ;!TODO тут не проверяется режим 80 или 40 +SAVE_TXT_SCREEN: + LD C,BIOS.LP_GET_PLACE + RST ToBIOS + LD (LOAD_TXT_SCREEN.CURS),DE + LD IX,#4000 + TXT_SCREEN + LD HL,#2050 ; #2028 + ; +; LD (LOAD_TXT_SCREEN.SVHL1),HL + LD DE,#0000 + IN A,(SLOT2) + LD B,A + LD C,BIOS.WIN_COPY + JP ToBIOS + +LOAD_TXT_SCREEN: + LD IX,#4000 + TXT_SCREEN +.SVHL1+1: LD HL,#2050 ; #2028 + LD DE,#0000 + IN A,(SLOT2) + LD B,A + LD C,BIOS.WIN_RESTORE + RST ToBIOS + ; +.CURS+1: LD DE,#0000 + LD C,Dss.Locate + JP ToDSS +;*********************************************************************** +RESTORE_ALL: + LD A,1 + LD HL, %0000'0100'0000'0000 ; значение + LD DE, %1111'1110'0110'1111 ; маска + LD BC,0*256 + BIOS.DCP_CONFIG + RST ToBIOS + ; + ;LD B,3 ; 3 - установка CGA палитры + ;LD C,BIOS.SET_PAL_INIT ; номер функции + ;RST ToBIOS ; установка палитры + ; + LD A,Dss.SetVMod.txt80x32 + LD BC,Dss.SetVMod.Screen_0 + RST ToDSS + LD A,Dss.SetVMod.txt80x32 + LD BC,Dss.SetVMod.Screen_1 + RST ToDSS + ; + CALL RESTORE_PAL + ; + LD DE,0 + LD HL,#2050 + LD BC,COLORS.CGA.INC.LGRAY*256 + BIOS.LP_CLS_WIN + RST ToBIOS + ; + CALL LOAD_TXT_SCREEN + ; + RET +;*********************************************************************** + + +;*********************************************************************** ;---------------[Tables]---------------- ALIGN 2,0 ; @@ -1659,25 +1749,21 @@ A_SPEED: DW #200 TABLE_TRACE: BLOCK 33,0 ; таблица трассировки/банки таблицы TABLE_WALL: BLOCK 17,0 -; BLOCK TABLES_START+#74-$,0 ;ВЫРАВНИВАНИЕ -NAMES: DB 6,1 +NAMES: DB 7,1 LAST_KEY: DB 0 - -; BLOCK TABLES_START+#7C-$,0 ;ВЫРАВНИВАНИЕ - -NAME1: DB "_1X62 CBL " -NAME2: DB "2NDREAL3CBL " -NAME3: DB "_ICT2 CBL " -;NAME4: DB "MISS2 CBL " -;NAME5: DB "5EL CBL " -NAME6: DB "_UNNY2 CBL " -NAME8: DB "94956C CBL " -NAME9: DB "_ENI511CCBL " +NAME1: DB "_1X62 CBL " +NAME2: DB "2NDREAL3CBL " +NAME3: DB "_ICT2 CBL " +NAME4: DB "5EL CBL " +NAME5: DB "_UNNY2 CBL " +NAME6: DB "94956C CBL " +NAME7: DB "_ENI511CCBL " ; +SND_DIR: DZ "MUSIC" ;Up_Dir: DZ ".." - - +; +Loading_TXT: DZ "\r\nPlease wait, resources are loading..." ; ; IFN NORM_syncPORT @@ -1700,7 +1786,9 @@ NAME9: DB "_ENI511CCBL " ;CURRENT_DIR: BLOCK 257,0 ;------------------------------------ -Temp_Buffer EQU $ +Pal_Restore_Buffer EQU $ ;Temp_Buffer + 256 +Temp_Buffer EQU Pal_Restore_Buffer + 1024 + 1024 +TXT_SCREEN EQU Temp_Buffer + 257 ; ; DISPLAY "DOOM2.EXE starts - ",/H,BEGIN diff --git a/Music_4x.asm b/Music_4x.asm index dcb3fc1..27eafda 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -2,10 +2,6 @@ ;----------------------------------------------------------------------- ;-------[инициализация винчестера]------; INIT_HDD_WORK: - IFN YesSound - RET - ENDIF - .currentDisk+1: ; LD A,0 OR #80 @@ -48,59 +44,113 @@ INIT_HDD_WORK: JR C,.loop ; + CALL BPB_SetUp ;----------------------------------------------------------------------- IN A,(SLOT3) - PUSH AF - LD A,SYS_PAGE + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD HL,SYS_PAGE.MSD_FAT_SEC + LD DE,MSD_DATS + LD BC,16 + LDIR + EX AF,AF' OUT (SLOT3),A - LD HL,SYS_PAGE.MSD_FAT_SEC - LD DE,MSD_DATS - LD BC,16 - LDIR - POP AF - OUT (SLOT3),A - - ; ;[ ] music and dirs + ;[ ] music and dirs ; LD A,(CURRENT_DIR+1) ; AND A ; JR Z,.skip_dir - ; ; + ; ; LD HL,Up_Dir ; LD C,Dss.ChDir ; RST ToDSS - ; ; + ; ; LD A,'\' ; ; LD HL,CURRENT_DIR+257 ; LD BC,257 ;!HARDCODE длина строки пути ; CPDR ; INC HL - ; INC HL - ; ; - ; LD DE,Temp_Buffer - ; LD A,FAT_ATTR.DIRECTORY - ; LD BC,Dss.F_First - ; RST ToDSS - ; ; - ; LD HL,(Temp_Buffer+15) - ; ; + ; + LD HL,SND_DIR + LD DE,Temp_Buffer + LD A,FAT_ATTR.DIRECTORY + LD BC,Dss.F_First + RST ToDSS + JR NC,.start_setup + ; + LD A,#C9 ; RET opcode - disable music + LD (SoundOnOff2),A + RET + ; + + + ;LD HL,(SYS_PAGE.MS_BPB + _sBOOT_SEC.B_P_S) + +; LD BC,(Temp_Buffer+26) ; first dir cluster +; LD A,(SYS_PAGE.MS_BPB + _sBOOT_SEC.S_P_C) +; LD E,A +; LD D,0 +; LD HL,0 +; LD IX,0 +; .cluster_loop: +; ADD HL,DE +; CALL C,KOSTILYI +; DEC BC +; LD A,B +; OR C +; JR NZ,.cluster_loop + +.start_setup: +;-=-=-=-=-=-=-=- + LD HL,(Temp_Buffer+26) ; first dir cluster + CALL NSECTOR + LD (MSD_DATS.MSD_CAT_SEC2),HL + LD (MSD_DATS.MSD_CAT_SEC),IX + ;JP READ_DIR +;-=-=-=-=-=-=-=- + + + + ; В FAT12/FAT16 для корневого каталога выделено место между FAT и данными. + ; Как узнать его размер в секторах? Число элементов корневого каталога умножаем на 32, + ; добавляем размер сектора, вычитаем единицу и делим это всё на размер сектора. + ; Кластер папки #2258 + ; IX:HL относительный сектор папки #897E0 (E0 97 08 00) + ; .skip_dir: + ; LD DE,(MSD_DATS.MSD_CAT_SEC) ; CAT TABLE. абсолютный номер сектора младшая часть + ; LD IX,(MSD_DATS.MSD_CAT_SEC2) ; абсолютный номер сектора старшая часть ;-----[читать секторы с винчестера]----- + READ_DIR: LD HL,#C000 ; адрес буфера данных - LD DE,(MSD_DATS+4) ; CAT TABLE. абсолютный номер сектора младшая часть - LD IX,(MSD_DATS+6) ; абсолютный номер сектора старшая часть + LD DE,(MSD_DATS.MSD_CAT_SEC) ; CAT TABLE. абсолютный номер сектора младшая часть + LD IX,(MSD_DATS.MSD_CAT_SEC2) ; абсолютный номер сектора старшая часть LD B,32 ; число читаемых секторов CatPage+1: - LD A,15 ; страница буфера, если адрес в окне #C000 - LD C,BIOS.HDD_READ + LD A,0 ; страница буфера, если адрес в окне #C000 + LD C,BIOS.HDD_READ ; IX:DE - абсолютный номер сектора RST ToBIOS ; загрузить CAT RET + +; KOSTILYI: +; INC IX +; RET ;--------------------------------------- -MSD_DATS: WORD 0,0,0,0,0,0,0,0 +MSD_DATS: +.MSD_FAT_SEC DW 00 +.MSD_FAT_SEC2 DW 00 +.MSD_CAT_SEC DW 00 +.MSD_CAT_SEC2 DW 00 +.MSD_DAT_SEC DW 00 +.MSD_DAT_SEC2 DW 00 +.CLASTER_LEN DW 00 +.CLASTER_LEN2 DW 00 SND_SEC1: DW 12525 ; начальный сектор SND_SEC2: DW 0 @@ -113,10 +163,6 @@ SND_C1: DW #1720 ; SND_C2: DW 0 SET_SND_FILE: - IFN YesSound - ret - ENDIF - CALL OPEN_FILE RET C @@ -192,7 +238,7 @@ OPEN_FILE: ; DE - name DEC IX ; -2 !!! LD HL,0 SCF - LD DE,(MSD_DATS+13) ; длина кластера в байтах + LD DE,(MSD_DATS.CLASTER_LEN + 1) ; длина кластера в байтах RR D RR E .SEC_MUL: @@ -203,9 +249,9 @@ OPEN_FILE: ; DE - name ADC HL,HL JR .SEC_MUL .SECT_X: - LD DE,(MSD_DATS+8) + LD DE,(MSD_DATS.MSD_DAT_SEC) ADD IX,DE - LD DE,(MSD_DATS+10) + LD DE,(MSD_DATS.MSD_DAT_SEC2) ADC HL,DE ; HL:IX - номер первого сектора файла AND A RET @@ -422,15 +468,56 @@ BPB_SetUp: ; EX AF,AF' OUT (SLOT3),A - EI + ;EI AND A RET .ERROR_BPB: EX AF,AF' OUT (SLOT3),A SCF - EI + ;EI RET ; .FAT1_MSG: - DB 'FAT1' \ No newline at end of file + DB 'FAT1' + + +;-=-=-=-=-=-=-=- +; in: HL - CLUSTER +; out: HL:IX - SECTOR +NSECTOR: + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + ; + LD DE,0 ;!FIXIT for FAT32 + DEC HL + DEC HL + XOR 1 + JR Z,.skip + ; + RRA +.loop: ADD HL,HL + RL E + RL D + ; + RRA + JP NC,.loop + ; +.skip: EX DE,HL + LD XL,E + LD XH,D + LD DE,(MSD_DATS.MSD_DAT_SEC) ;first data sector ;!FIXIT а если начальный сектор > #FFFF + XOR A + ADD IX,DE + LD D,A + LD E,A + ADC HL,DE + ;!TODO а надо ли проверять переполнение HL:IX? + RET +;-=-=-=-=-=-=-=- \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index f74ae7e..93f04cc 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f74ae7e760de5541ee4966d509442c6421225c3b +Subproject commit 93f04cc30f6a3c20f382c8b467bca79718c9ab2e From b27ca37cc957f34e63097f17a5dbaa01aad44239 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 7 Feb 2024 02:52:24 +1000 Subject: [PATCH 08/16] ... --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 93f04cc..1a384e2 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 93f04cc30f6a3c20f382c8b467bca79718c9ab2e +Subproject commit 1a384e2e43f985438aafa6f7fed3e7552d7b6f3d From 4259263dee958dc5a683eb27952e65b2ed8b42f0 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 11 Feb 2024 05:05:29 +1000 Subject: [PATCH 09/16] correct work in DSS --- D2_FRAM.asm | 403 ++++++++++++++++++++++---------------------- DOOM2.asm | 438 +++++++++++++++++++++++++++++------------------- Music_4x.asm | 15 +- Shared_Includes | 2 +- 4 files changed, 460 insertions(+), 398 deletions(-) diff --git a/D2_FRAM.asm b/D2_FRAM.asm index 6d0453e..c40a131 100644 --- a/D2_FRAM.asm +++ b/D2_FRAM.asm @@ -15,9 +15,7 @@ SND_READ_SECTORS EQU 4 Module__D2_FRAM__Start EQU $ ; -TRACE: - - IN A,(SLOT1) +TRACE: IN A,(SLOT1) LD (TRACE_RET_SLOT1),A IN A,(SLOT3) LD (TRACE_RET_SLOT3),A @@ -47,19 +45,19 @@ TRACE: NO_SKY_2: OUT (SLOT1),A - LD A,0 ;????????? не нужно? + ;LD A,0 ;????????? не нужно? LD C,80 SKY_LOOP_1: ACC_SetBlockSize - LD B,0 + LD A,0 ACC_CopyBlock LD B,(HL) ACC_SetBlockSize LD B,#80 ACC_Off - XOR A + ;XOR A OUT (PORT_Y),A ACC_CopyScreenBlock @@ -118,7 +116,7 @@ NO_NEXT_SKY: EXX SCREEN_1+1: - LD DE,#C040 ; начало экрана + LD DE,ScreenStartAddress ; начало экрана LD C,0 ;!!!!!!!!!!!!!!!!!!!!!!!!!! EXX ; @@ -154,7 +152,6 @@ PLACE_L+1: OUT (SLOT1),A LD (CONT_PAGE),A ; JR TRACE_LOOP - TRACE_LOOP: LD A,#50 OUT (SLOT3),A @@ -162,29 +159,28 @@ TRACE_LOOP: OUT (PORT_Y),A REPT 16 - LD E,(HL) ; первый и далее следующий кубик - LD A,(DE) ; есть или нет? - AND A - JR NZ,TRACE_CONT ; если есть, рисовать!! - INC L + LD E,(HL) ; первый и далее следующий кубик + LD A,(DE) ; есть или нет? + AND A + JR NZ,TRACE_CONT ; если есть, рисовать!! + INC L ENDR PURE_LINE: -; EXX - ACC_SetBlockSize - LD A,#80 ; пустая стенка - ACC_Off - ; LD (DE),A ; LINE-Z-bufer - OUT (PORT_Y),A - - LD A,(COLOR_LO) - - ACC_FillScreenOneByte - LD (DE),A - ACC_Off - LD A,#70 ; Z-bufer - LD (DE),A + ACC_SetBlockSize + LD A,#80 ; пустая стенка + ACC_Off + ;LD (DE),A ; LINE-Z-Buffer + OUT (PORT_Y),A + ; + LD A,(COLOR_LO) + ; + ACC_FillScreenOneByte + LD (DE),A + ACC_Off + LD A,#70 ; Z-Buffer + LD (DE),A EXX ; JR NEXT_ANGLE @@ -234,33 +230,33 @@ PLACE_L2+1: LD A,5 ; EXX LD H,TABLE_X/256 - LD L,A ; высота TABLE_X - таблица высот - LD B,(HL) ; старшая часть коэфициента - ; ld b,0 + LD L,A ; высота TABLE_X - таблица высот + LD B,(HL) ; старшая часть коэфициента +; ld b,0 INC H - LD L,(HL) ; младшая часть коэфициента/смещение в стенке - ; LD C,0 - OUT (C),L ; масштабирование - ; OUTI ; B уменьшается сначала! + LD L,(HL) ; младшая часть коэфициента/смещение в стенке +; LD C,0 + OUT (C),L ; масштабирование +; OUTI ; B уменьшается сначала! BIT 7,A - JR Z,HIGH_1 ; 64 точки, не на весь экран + JR Z,HIGH_1 ; 64 точки, не на весь экран ; <64 точки, на весь экран XOR A - OUT (PORT_Y),A ; с самого начала + OUT (PORT_Y),A ; с самого начала ACC_SetBlockSize - LD (DE),A ; 256 байт И LINE-Z-bufer!!!! + LD (DE),A ; 256 байт И LINE-Z-Buffer!!!! ACC_Off LD A,#58 OUT (SLOT3),A ACC_CopyScreenBlock - LD (DE),A ; ФИГАКС всю линию!!! + LD (DE),A ; ФИГАКС всю линию!!! ACC_Off XOR A - LD (DE),A ; LINE-Z-bufer!!!! + LD (DE),A ; LINE-Z-Buffer!!!! EXX ; JR NEXT_ANGLE @@ -268,7 +264,7 @@ PLACE_L2+1: LD A,5 HIGH_1: ; A - высота, с которой рисуется стенка ACC_SetBlockSize - LD (DE),A ; число точек потолка и пола! & LINE-Z-bufer + LD (DE),A ; число точек потолка и пола! & LINE-Z-Buffer ACC_Off NEG ; получить положение начала пола OUT (PORT_Y),A @@ -873,40 +869,39 @@ WALL: IN A,(SLOT3) LD (WALL_SLOT1_RET),A IN A,(PORT_Y) LD (WALL_PORT_Y_RET),A - LD A,#58 + LD A,#5C OUT (SLOT3),A LD A,(IX+0) ; страница стенки OUT (SLOT1),A EXX - LD C,0 ; порт масштаба - - LD H,TABLE_X/256 ; таблица высот и коэфициентов масштабирования - LD L,(IX+3) ; положение по Y / определяет высоту - LD A,(HL) ; масштаб - LOW - AND 3 - LD (X_ADD),A - INC H - LD A,(HL) ; масштаб - HIGH - LD (X_ADD2),A - DEC H - - LD A,L - ADD A,A - NEG ; ширина по горизонтали - - BIT 0,(IX+M_VAR3) - JR Z,NO_DEL2 - RRA - AND #7F -NO_DEL2: - BIT 1,(IX+M_VAR3) - JR Z,NO_DEL4 - AND A - RRA - RRA - AND #3F + LD C,0 ; порт масштаба + ; + LD H,TABLE_X/256 ; таблица высот и коэфициентов масштабирования + LD L,(IX+3) ; положение по Y / определяет высоту + LD A,(HL) ; масштаб - LOW + AND 3 + LD (X_ADD),A + INC H + LD A,(HL) ; масштаб - HIGH + LD (X_ADD2),A + DEC H + ; + LD A,L + ADD A,A + NEG ; ширина по горизонтали + ; + BIT 0,(IX+M_VAR3) + JR Z,NO_DEL2 + RRA + AND #7F +NO_DEL2: BIT 1,(IX+M_VAR3) + JR Z,NO_DEL4 + AND A + RRA + RRA + AND #3F NO_DEL4: EXX @@ -930,7 +925,7 @@ NO_DEL4: ; ; в A сколько линий до начала экрана ;WALL_NO_SCF: ; -; LD HL,140h +; LD HL,#0140 ; AND A ; SBC HL,DE ; LD A,L ; в A - сколько линий осталось до конца экрана?? @@ -947,9 +942,10 @@ NO_DEL4: ; LD E,A LD D,0 SBC HL,DE + ;!FIXIT после вычитания в HL адрес по которому будет запись блока, может залезать на шрифты EX DE,HL - LD H,(IX+2) ; старший адрес стенки + LD H,(IX+2) ; старший адрес стенки LD L,(IX+1) LD A,#58 @@ -960,58 +956,59 @@ WOLL_LOOP: OUT (PORT_Y),A LD A,D + ;!FIXIT тут проверка на старший адрес, но шрифтам это не поможет CP #C3 - JR NC,NO_WRITE_ALL ; не выводить за экран и закончить + JR NC,NO_WRITE_ALL ; не выводить за экран и закончить CP #C0 - JR C,NO_WRITE_LINE ; не выводить за экран - - LD A,(DE) ; Z-bufer!!! + JR C,NO_WRITE_LINE ; не выводить за экран + ;!FIXIT тут может читаться из области шрифтов + LD A,(DE) ; чтение из Z-Buffer EXX - CP L + CP L EXX JR C,NO_WRITE_LINE EXX - LD B,1 - OUT (C),C ; масштаб - 1 - ACC_SetBlockSize - LD B,#40 ; задать длину линии - ACC_Off + LD B,1 + OUT (C),C ; масштаб - 1 + ACC_SetBlockSize + LD B,#40 ; задать длину линии + ACC_Off EXX ACC_CopyBlock - LD A,(HL) ; взять линию стенки + LD A,(HL) ; взять линию стенки ACC_Off EXX -; L - высота -128..0..127 !!! - LD B,(HL) - INC H - LD A,(HL) ; масштаб - HIGH - OUT (C),A - INC H - LD A,L - ADD A,A - JR NC,NO_Z_A1 - XOR A + ; L - высота -128..0..127 !!! + LD B,(HL) + INC H + LD A,(HL) ; масштаб - HIGH + OUT (C),A + INC H + LD A,L + ADD A,A + JR NC,NO_Z_A1 + XOR A NO_Z_A1: - NEG - ACC_SetBlockSize - LD (HL),A ; задать длину линии - ACC_Off - DEC H - DEC H - LD A,L + NEG + ACC_SetBlockSize + LD (HL),A ; задать длину линии + ACC_Off + DEC H + DEC H + LD A,L EXX BIT 7,A JR Z,NO_Z_A XOR A NO_Z_A: - OUT (PORT_Y),A ; задать порт Y - + OUT (PORT_Y),A ; задать порт Y + ;!FIXIT тут может писаться в область шрифтов ACC_CopyScreenBlock - LD (DE),A ; вывести линию + LD (DE),A ; вывести линию ACC_Off LD A,E @@ -1021,16 +1018,16 @@ NO_Z_A: ; NO_WRITE_LINE: - INC DE ; новое значение X + INC DE ; новое значение X LD A,C X_ADD2+1: - ADD A,0 ; X-add-parameter 2 + ADD A,0 ; X-add-parameter 2 LD C,A X_ADD+1: - LD A,0 ; X-add-parameter + LD A,0 ; X-add-parameter ADC A,H - LD H,A ; следующая линия WOLL + LD H,A ; следующая линия WOLL DJNZ WOLL_LOOP @@ -1174,7 +1171,7 @@ MAP_L8: LD A,(HL) LD (DE),A LD A,L - SUB 40H + SUB #40 LD L,A LD A,H SBC A,0 @@ -1605,15 +1602,15 @@ KBD_INT: .NO_LAST_KEY: POP AF - CP 20 ; CTRL + CP 20 ; CTRL JR Z,.EFF_ON - CP 117 ; KEY_UP + CP 117 ; KEY_UP JR Z,.DIR_UP - CP 114 ; KEY_DN + CP 114 ; KEY_DN JR Z,.DIR_DN - CP 107 ; KEY_LF + CP 107 ; KEY_LF JR Z,.DIR_LF - CP 116 ; KEY_RT + CP 116 ; KEY_RT JR Z,.DIR_RT JR .KBD_INT2 @@ -1671,79 +1668,72 @@ OFF_BYTE: DB #FF ; TAB_ANGLE: - DB 0,1 ; 0 - DB 1,1 ; 45 - DB 1,1 ; 45 - DB 1,0 ; 90 - DB 1,0 ; 90 - DB 1,-1 ; 135 - DB 1,-1 ; 135 - DB 0,-1 ; 180 - DB 0,-1 ; 180 - DB -1,-1 - DB -1,-1 - DB -1,0 - DB -1,0 - DB -1,1 - DB -1,1 - DB 0,1 ; 0 - + DB 0 , 1 ; 0 + DB 1 , 1 ; 45 + DB 1 , 1 ; 45 + DB 1 , 0 ; 90 + DB 1 , 0 ; 90 + DB 1 , -1 ; 135 + DB 1 , -1 ; 135 + DB 0 , -1 ; 180 + DB 0 , -1 ; 180 + DB -1 , -1 + DB -1 , -1 + DB -1 , 0 + DB -1 , 0 + DB -1 , 1 + DB -1 , 1 + DB 0 , 1 ; 0 TAB_ANGLE2: - DB 0,2 ; 0 - DB 1,2 ; 22 - DB 2,2 ; 45 - DB 2,1 ; 67 - DB 2,0 ; 90 - DB 2,-1 ; 112 - DB 2,-2 ; 135 - DB 1,-2 ; 157 - DB 0,-2 ; 180 - DB -1,-2 - DB -2,-2 - DB -2,-1 - DB -2,0 - DB -2,1 - DB -2,2 - DB -1,2 ; 0 - + DB 0 , 2 ; 0 + DB 1 , 2 ; 22 + DB 2 , 2 ; 45 + DB 2 , 1 ; 67 + DB 2 , 0 ; 90 + DB 2 , -1 ; 112 + DB 2 , -2 ; 135 + DB 1 , -2 ; 157 + DB 0 , -2 ; 180 + DB -1 , -2 + DB -2 , -2 + DB -2 , -1 + DB -2 , 0 + DB -2 , 1 + DB -2 , 2 + DB -1 , 2 ; 0 TAB_ANGLE3: - - DB 4,2 ; 67 - DB 4,1 ; 67 - - DB 4,0 ; 90 - DB 4,-1 ; 112 - DB 4,-2 ; 135 - DB 4,-3 ; 135 - DB 4,-4 ; 135 - DB 3,-4 ; 157 - DB 2,-4 ; 157 - DB 1,-4 ; 157 - - DB 0,-4 ; 180 - DB -1,-4 - DB -2,-4 - DB -3,-4 - DB -4,-4 - DB -4,-3 - DB -4,-2 - DB -4,-1 - - DB -4,0 - DB -4,1 - DB -4,2 - DB -4,3 - DB -4,4 ; 0 - DB -3,4 ; 0 - DB -2,4 ; 0 - DB -1,4 ; 0 - - DB 0,4 ; 0 - DB 1,4 ; 0 - DB 2,4 ; 22 - DB 3,4 ; 45 - DB 4,4 ; 45 - DB 4,3 ; 45 + DB 4 , 2 ; 67 + DB 4 , 1 ; 67 + DB 4 , 0 ; 90 + DB 4 , -1 ; 112 + DB 4 , -2 ; 135 + DB 4 , -3 ; 135 + DB 4 , -4 ; 135 + DB 3 , -4 ; 157 + DB 2 , -4 ; 157 + DB 1 , -4 ; 157 + DB 0 , -4 ; 180 + DB -1 , -4 + DB -2 , -4 + DB -3 , -4 + DB -4 , -4 + DB -4 , -3 + DB -4 , -2 + DB -4 , -1 + DB -4 , 0 + DB -4 , 1 + DB -4 , 2 + DB -4 , 3 + DB -4 , 4 ; 0 + DB -3 , 4 ; 0 + DB -2 , 4 ; 0 + DB -1 , 4 ; 0 + DB 0 , 4 ; 0 + DB 1 , 4 ; 0 + DB 2 , 4 ; 22 + DB 3 , 4 ; 45 + DB 4 , 4 ; 45 + DB 4 , 3 ; 45 MONSTR_ALL: @@ -1775,7 +1765,7 @@ MONSTR_LOOP: SUB (IX+M_X+1) ; положение монстра ADD A,64 JR Z,NO_M_OUT - BIT 7,A ; проверка на дальность + BIT 7,A ; проверка на дальность JR NZ,NO_M_OUT ; не выводить SUB 64 @@ -1792,7 +1782,7 @@ MONSTR_LOOP: SUB 64 NEG - LD H,A ; H - Y, L - X + LD H,A ; H - Y, L - X OR L JR Z,NO_M_OUT ; проверка на 0 @@ -1800,7 +1790,7 @@ MONSTR_LOOP: BIT 7,H JR Z,A_NO_ADD4 - LD A,H ; поворот на 180 -X->X; -Y->Y + LD A,H ; поворот на 180 -X->X; -Y->Y NEG LD H,A LD A,L @@ -1810,7 +1800,7 @@ MONSTR_LOOP: A_NO_ADD4: BIT 7,L JR Z,A_NO_ADD2 - LD A,L ; поворот на 90 Y->X; -X->Y + LD A,L ; поворот на 90 Y->X; -X->Y NEG LD L,H LD H,A @@ -1823,7 +1813,6 @@ A_NO_ADD2: ; H - Y-координата MONSTR_ALL1: - LD A,L ADD A,A ADD A,A @@ -1839,23 +1828,23 @@ MONSTR_ALL1: LD A,(PAGE_M_PLACE) OUT (SLOT1),A - LD E,(HL) ; угол младший + LD E,(HL) ; угол младший INC L - LD D,(HL) ; угол старший + LD D,(HL) ; угол старший INC L - LD C,(HL) ; высота + LD C,(HL) ; высота POP AF OUT (SLOT1),A LD A,D ADD A,B - LD D,A ; добавить квадрант + LD D,A ; добавить квадрант DEC C BIT 7,C JR Z,MONST_H1 - LD C,0 ; монстр рядом + LD C,0 ; монстр рядом MONST_H1: INC C LD (IX+M_HIGH),C ; положение по вертикали @@ -1880,12 +1869,14 @@ MONST_H1: LD (IX+M_HOR),L ; угол LD (IX+M_HOR+1),H - LD DE,128 - ADD HL,DE + ; LD DE,128 ; А чёб не упростить так: + ; ADD HL,DE ; LD DE,256+320-128 + ; LD DE,256+320 ; SBC HL,DE + ; AND A ; и всё... HL может переполняться при ADD 128? - нет + ; SBC HL,DE ; ; проверка попадания монстра в угол зрения + LD DE,256+320-128 + SBC HL,DE ; проверка попадания монстра в угол зрения - LD DE,256+320 - AND A - SBC HL,DE ; проверка попадания монстра в угол зрения CALL C,WALL @@ -1902,15 +1893,15 @@ MONSTR_NEXT_P: RET NZ LD A,(IX+M_VAR2) ; счетчик цикла - AND 0Fh + AND #0F RLCA RLCA RLCA RLCA ADD A,(IX+M_VAR2) ; добавить младший байт к старшему LD (IX+M_VAR2),A - AND 0F0h - RET NZ ; вернуться, если не 0 + AND #F0 + RET NZ ; вернуться, если не 0 ; JR NC,NO_ADD_MX BIT 6,(IX+M_VAR3) ; бит единичного показа цикла @@ -1962,15 +1953,15 @@ CONT_MONS: LD A,(IX+M_ADR+1) ; переключатель адреса ADD A,(IX+M_VAR4) ; сколько добавлять - AND 3Fh - OR 40h + AND #3F + OR #40 LD (IX+M_ADR+1),A - CP 40h ; признак завершения цикла + CP #40 ; признак завершения цикла RET SW_MONS: LD A,(IX+M_ADR) ; переключатель адреса - ADD A,40H + ADD A,#40 LD (IX+M_ADR),A AND A ; признак завершения цикла ;NO_ADD_MX: @@ -2009,9 +2000,9 @@ SAVE_P2: DW 0 SAVE_PIC: IN A,(SCREEN_SWITCH) AND 1 - LD HL,#C040 + LD HL,ScreenStartAddress JR NZ,SET_1X - LD HL,#C180 + LD HL,ScreenStartAddress + #0140 SET_1X: LD IX,TABLE_PIC LD A,(IX) diff --git a/DOOM2.asm b/DOOM2.asm index ce05c57..89535c4 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -5,7 +5,8 @@ ;--------------------------------------- */ - +ScreenStartAddress EQU #C040 +;ScreenStartAddress EQU #C000 ; ;---------------------------[Defines section]--------------------------- DEFINE EXE_HEADER 1 @@ -71,15 +72,15 @@ CMD_Line+1: LD HL,#8080 CALL SET_HOME_PATH ;--------[загрузка ресурсов игры]------- -; выполнено в виде костыльной заглушки LD HL,Loading_TXT LD C,Dss.PChars RST ToDSS ; + CALL SAVE_ALL + ; выполнено в виде костыльной заглушки CALL Load_Resources ; - CALL SAVE_PAL - CALL SAVE_TXT_SCREEN + ;CALL SAVE_TXT_SCREEN ; LD A,Dss.SetVMod.grf320x256 ; LD BC,Dss.SetVMod.Screen_1 ; RST ToDSS @@ -111,7 +112,7 @@ CMD_Line+1: ld a,(RAMBlkIDs.d2_fram) ld (D2_FRAM_page),a -;----[] +;----[;!FIXIT переделать музло на API 5x] ; Запрашиваем страницу для каталога ; сохраняем её № в коде ; @@ -142,8 +143,8 @@ CMD_Line+1: CALL SET_PAL ;----[открыть порты масштабирования]---- -; один внутренний порт масштабирования маппится на диаппазон #XX00 -; внешних портов. Write, Dos off, CNF 0. +; один внутренний порт масштабирования маппится на диаппазон +; #XX00 внешних портов. Write, Dos off, CNF 0. LD A,1 LD HL, %0000'0100'0000'0000 ; значение LD DE, %1111'1110'0110'1111 ; маска @@ -166,7 +167,7 @@ CMD_Line+1: ; EX AF,AF' ; OUT (SLOT3),A ; Активация Акселя масштабирования, обратно только через ресет - LD BC,#100 ; C - масштаб 1:1 + LD BC,#0100 ; C - масштаб 1:1 OUT (C),C ;----------------------------------------------------------------------- @@ -188,18 +189,6 @@ CMD_Line+1: ; ;-----------[EXIT Procedure]------------; RETURN_POINT: -; DI -; LD A,#10 -; LD BC,#1FFD -; OUT (C),A -; LD A,RESET_PAGE -; OUT (SLOT3),A -; LD (#C000),HL -; HALT_L: -; ;DI -; HALT -; JR HALT_L - IN A,(FastRAM.OFF) LD A,SYS_PORT.BIOS OUT (SYS_PORT.RAM),A @@ -210,6 +199,10 @@ RETURN_POINT: ; CALL RESTORE_ALL ; + LD HL,GOTO_EXIT + LD C,Dss.PChars + RST ToDSS + ; .loop: LD BC,Dss.Exit RST ToDSS JR .loop @@ -299,19 +292,18 @@ CLEAR_GRAF_SCR: XOR A OUT (PORT_Y),A - LD SP,#C040 + 640 + LD SP,ScreenStartAddress + 640 LD B,640/4 -;!!!!!!!!!!![оптимизировать]!!!!!!!!!!!! -LOOP_CLS: +;!TODO ![оптимизировать]! ACC_SetBlockSize LD E,0 LD D,E +LOOP_CLS: ACC_FillScreenOneByte PUSH DE PUSH DE ACC_Off - DJNZ LOOP_CLS ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SPSave2+1: @@ -466,9 +458,9 @@ MAIN: CALL INIT_TABLE ; !FIXIT переделать логику под новый биос? ;---[установка синхры, очистка экрана]-- - LD A,2 ; режим Pentagon - 320 строк в экране - LD C,BIOS.FN_SYNC - RST ToBIOS + ; LD A,2 ; режим Pentagon - 320 строк в экране + ; LD C,BIOS.FN_SYNC + ; RST ToBIOS ;--------------------------------------- ;------[Открытие стандартных окон]------ @@ -480,45 +472,22 @@ MAIN: CALL INIT_TABLE ; HL - место на экране по знакоместам ; (копия в IX+2,3), в новых версиях ; биоса значение HL не существенно + ; LD HL,#4000 - LD E,1 + LD E,0 LD B,8 ; графическое окно 0, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS - + ; LD HL,#5000 LD E,1 LD B,9 ; графическое окно 1, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS -/* - LD A,Dss.SetVMod.grf320x256 - LD BC,Dss.SetVMod.Screen_0 - RST ToDSS - LD A,Dss.SetVMod.grf320x256 - LD BC,Dss.SetVMod.Screen_1 - RST ToDSS -;графическое окно 0 -PIC_320X256_1: - DB 40,32,0,0,32,0,08,0 - DB 40,32,0,0,96,0,48,0 - - DB 40,32,0,0,32,0,00,0 ;4 - DB 40,32,0,0,96,0,40,0 ;6 - -;графическое окно 1 -PIC_320X256_2: - -; 320x256. графическое, 0-й экран -TAB_320x256_0 - -; 320x256. графическое, 1-й экран -TAB_320x256_1 -*/ ;--------------------------------------- - LD A,1 - OUT (SCREEN_SWITCH),A + LD A,(RESTORE_ALL.scr) + OUT (SCREEN_SWITCH),A ;----[переброс части кода в FastRAM]---- IN A,(SLOT3) @@ -732,13 +701,13 @@ CONT_WORK: SCR_SWITCH: IN A,(SCREEN_SWITCH) - AND 1 + ;AND 1 XOR 1 OUT (SCREEN_SWITCH),A - LD DE,#C040 + LD DE,ScreenStartAddress JR Z,SET_1 - LD DE,#C180 + LD DE,ScreenStartAddress + #0140 SET_1: LD (SCREEN_1),DE RET @@ -1607,131 +1576,246 @@ SET_HOME_PATH: RET ;*********************************************************************** SAVE_PAL: - IN A,(SLOT2) - PUSH AF - OUT (SLOT3),A - ; - LD HL,Pal_Restore_Buffer+#4000 - LD DE,0 - LD A,4 - LD C,BIOS.PIC_GET_PAL - RST ToBIOS - ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024 - ; LD DE,0 - ; LD A,5 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 - ; LD DE,0 - ; LD A,6 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 - ; LD DE,0 - ; LD A,7 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; - POP AF - OUT (SLOT3),A - RET -;*********************************************************************** -RESTORE_PAL: - ; - IN A,(SLOT2) - PUSH AF - OUT (SLOT3),A - ; - LD HL,Pal_Restore_Buffer+#4000 - LD DE,0 - LD A,4 - LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - RST ToBIOS - ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024 - ; LD DE,0 - ; LD A,5 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 - ; LD DE,0 - ; LD A,6 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 - ; LD DE,0 - ; LD A,7 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; - POP AF - OUT (SLOT3),A - RET -;*********************************************************************** - ;!TODO тут не проверяется режим 80 или 40 -SAVE_TXT_SCREEN: - LD C,BIOS.LP_GET_PLACE - RST ToBIOS - LD (LOAD_TXT_SCREEN.CURS),DE - LD IX,#4000 + TXT_SCREEN - LD HL,#2050 ; #2028 - ; -; LD (LOAD_TXT_SCREEN.SVHL1),HL - LD DE,#0000 - IN A,(SLOT2) - LD B,A - LD C,BIOS.WIN_COPY - JP ToBIOS - -LOAD_TXT_SCREEN: - LD IX,#4000 + TXT_SCREEN -.SVHL1+1: LD HL,#2050 ; #2028 - LD DE,#0000 - IN A,(SLOT2) - LD B,A - LD C,BIOS.WIN_RESTORE - RST ToBIOS - ; -.CURS+1: LD DE,#0000 - LD C,Dss.Locate - JP ToDSS -;*********************************************************************** -RESTORE_ALL: + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.ON),A + IN A,(FastRAM.ON) LD A,1 - LD HL, %0000'0100'0000'0000 ; значение - LD DE, %1111'1110'0110'1111 ; маска - LD BC,0*256 + BIOS.DCP_CONFIG - RST ToBIOS + OUT (FastRAM.SLOT0),A ; - ;LD B,3 ; 3 - установка CGA палитры - ;LD C,BIOS.SET_PAL_INIT ; номер функции - ;RST ToBIOS ; установка палитры - ; - LD A,Dss.SetVMod.txt80x32 - LD BC,Dss.SetVMod.Screen_0 - RST ToDSS - LD A,Dss.SetVMod.txt80x32 - LD BC,Dss.SetVMod.Screen_1 - RST ToDSS - ; - CALL RESTORE_PAL + LD A,#50 + OUT (SLOT3),A + XOR A + OUT (PORT_Y),A ; LD DE,0 - LD HL,#2050 - LD BC,COLORS.CGA.INC.LGRAY*256 + BIOS.LP_CLS_WIN - RST ToBIOS - ; - CALL LOAD_TXT_SCREEN +.loop: LD HL,#C3E0 + LD BC,#20 + LDIR + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + JR NZ,.loop ; + XOR A + OUT (FastRAM.SLOT0),A + IN A,(FastRAM.OFF) + XOR A + OUT (SYS_PORT.OFF),A RET + + + ; IN A,(SLOT3) + ; PUSH AF + ; IN A,(SLOT2) + ; OUT (SLOT3),A + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + ; LD DE,0 + ; LD A,#80 + 0 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024 + ; LD DE,0 + ; LD A,#80 + 1 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 + ; LD DE,0 + ; LD A,6 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 + ; LD DE,0 + ; LD A,7 + ; LD C,BIOS.PIC_GET_PAL + ; RST ToBIOS + ; + ; POP AF + ; OUT (SLOT3),A + ; RET ;*********************************************************************** +RESTORE_PAL: + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.ON),A + IN A,(FastRAM.ON) + LD A,1 + OUT (FastRAM.SLOT0),A + ; + LD A,#50 + OUT (SLOT3),A + XOR A + OUT (PORT_Y),A + ; + LD HL,0 +.loop: LD DE,#C3E0 + LD BC,#20 + LDIR + IN A,(PORT_Y) + INC A + OUT (PORT_Y),A + JR NZ,.loop + ; + XOR A + OUT (FastRAM.SLOT0),A + IN A,(FastRAM.OFF) + XOR A + OUT (SYS_PORT.OFF),A + RET - + ; + ; IN A,(SLOT2) + ; PUSH AF + ; OUT (SLOT3),A + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + ; LD DE,0 + ; LD A,4 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024 + ; LD DE,0 + ; LD A,5 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 + ; LD DE,0 + ; LD A,6 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; ; + ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 + ; LD DE,0 + ; LD A,7 + ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры + ; RST ToBIOS + ; + ; POP AF + ; OUT (SLOT3),A + ; RET +;*********************************************************************** + ;!TODO тут не проверяется режим 80 или 40 +; DEFINE _TXT_SCREEN #E000 +; SAVE_TXT_SCREEN: +; DI +; LD C,BIOS.LP_GET_PLACE +; RST ToBIOS +; LD (LOAD_TXT_SCREEN.CURS),DE +; ; +; XOR A +; LD B,SHARED_PAGE +; LD HL,#2050 ; #2028 +; LD DE,#0000 +; LD IX,_TXT_SCREEN +; LD C,BIOS.WIN_COPY +; JP ToBIOS +; LOAD_TXT_SCREEN: +; DI +; XOR A +; LD B,SHARED_PAGE +; LD HL,#2050 ; #2028 +; LD DE,#0000 +; LD IX,_TXT_SCREEN +; LD C,BIOS.WIN_RESTORE +; RST ToBIOS +; ; +; .CURS+1: LD DE,#0000 +; LD C,Dss.Locate +; JP ToDSS +;*********************************************************************** +RESTORE_ALL: + ; LD B,3 ; 3 - установка CGA палитры + ; LD C,BIOS.SET_PAL_INIT ; номер функции + ; RST ToBIOS ; установка палитры + CALL RESTORE_PAL + ; +.mode+1: LD A,Dss.SetVMod.txt80x32 +.scr+2: LD BC,Dss.SetVMod + RST ToDSS + ; + LD BC,Dss.Lib_Sub.RestoreFont + RST ToDSS + ; + LD A,(.mode) + CP #80 + RET NC + ; +.cursor+1: + LD DE,0 + LD C,Dss.Locate + RST ToDSS + LD C,Dss.WinRest + JP TXT_Screen_Copy_Restore + ; +;*********************************************************************** +SAVE_ALL: + CALL SAVE_PAL + ; узнать видеорежим + LD C,Dss.GetVMod + RST ToDSS + LD (RESTORE_ALL.mode),A + LD A,B + LD (RESTORE_ALL.scr),A + ; если режим текстовый - сохранить окно + LD A,(RESTORE_ALL.mode) + CP #80 + RET NC + ; + LD C,Dss.Cursor + RST ToDSS + LD (RESTORE_ALL.cursor),DE + ; + LD C,Dss.WinCopy + ;JP TXT_Screen_Copy_Restore +;**************************** +TXT_Screen_Copy_Restore: + LD A,Dss.WinCopy + SUB C + PUSH AF + PUSH BC + CALL NZ,SCREEN_IN_CACHE + ; + LD A,(RESTORE_ALL.mode) + SUB 2 + LD DE,0 + LD HL,#2050 + JR NZ,.next + LD L,#28 +.next: IN A,(SLOT2) + POP BC + LD B,A + LD IX,TXT_SCREEN + RST ToDSS + POP AF + RET NZ + ;DEC A + ;JP SCREEN_IN_CACHE +;**************************** +SCREEN_IN_CACHE: + LD A,SYS_PORT.BIOS + OUT (SYS_PORT.ON),A + IN A,(FastRAM.ON) + LD A,1 + OUT (FastRAM.SLOT0),A + ; + LD HL,TXT_SCREEN + LD DE,1024*8 ; размер палитры + JR Z,.no_change + EX DE,HL +.no_change: + LD BC,80*32*2 ; максимальный размер текстового экрана + LDIR + ; + XOR A + OUT (FastRAM.SLOT0),A + IN A,(FastRAM.OFF) + XOR A + OUT (SYS_PORT.OFF),A + RET ;*********************************************************************** ;---------------[Tables]---------------- ALIGN 2,0 @@ -1764,6 +1848,7 @@ SND_DIR: DZ "MUSIC" ;Up_Dir: DZ ".." ; Loading_TXT: DZ "\r\nPlease wait, resources are loading..." +GOTO_EXIT: DZ "\r\n < GAME OVER))) >" ; ; IFN NORM_syncPORT @@ -1786,8 +1871,7 @@ Loading_TXT: DZ "\r\nPlease wait, resources are loading..." ;CURRENT_DIR: BLOCK 257,0 ;------------------------------------ -Pal_Restore_Buffer EQU $ ;Temp_Buffer + 256 -Temp_Buffer EQU Pal_Restore_Buffer + 1024 + 1024 +Temp_Buffer EQU $ TXT_SCREEN EQU Temp_Buffer + 257 ; ; diff --git a/Music_4x.asm b/Music_4x.asm index 27eafda..62baa1e 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -1,5 +1,6 @@ ;----------------------------------------------------------------------- +;!FIXIT переделать музло на API 5x ;-------[инициализация винчестера]------; INIT_HDD_WORK: .currentDisk+1: ; @@ -61,20 +62,6 @@ INIT_HDD_WORK: OUT (SLOT3),A ;[ ] music and dirs - ; LD A,(CURRENT_DIR+1) - ; AND A - ; JR Z,.skip_dir - ; - ; LD HL,Up_Dir - ; LD C,Dss.ChDir - ; RST ToDSS - ; - ; LD A,'\' ; - ; LD HL,CURRENT_DIR+257 - ; LD BC,257 ;!HARDCODE длина строки пути - ; CPDR - ; INC HL - ; LD HL,SND_DIR LD DE,Temp_Buffer LD A,FAT_ATTR.DIRECTORY diff --git a/Shared_Includes b/Shared_Includes index 1a384e2..b8a215d 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 1a384e2e43f985438aafa6f7fed3e7552d7b6f3d +Subproject commit b8a215d38afde3eed48f39eb961e96cdb6d9e426 From 5f9d648c2566287fff6500377ae0d9aa3f76c50a Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 11 Feb 2024 23:03:48 +1000 Subject: [PATCH 10/16] now it checks version before start --- DOOM2.asm | 106 +++++++++++++++++++++++++++++++++++------------- Shared_Includes | 2 +- 2 files changed, 79 insertions(+), 29 deletions(-) diff --git a/DOOM2.asm b/DOOM2.asm index 89535c4..a109459 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -9,15 +9,43 @@ ScreenStartAddress EQU #C040 ;ScreenStartAddress EQU #C000 ; ;---------------------------[Defines section]--------------------------- - DEFINE EXE_HEADER 1 + DEFINE EXE_HEADER 1 +; VERSIONS +MIN_VER: ; 1.70.887 +.DSS_V EQU 1 ; Version +.DSS_M EQU 70 ; Modification +.DSS_B EQU 887 ; Build +; ; 2.55 +.BIOS_V EQU 2 ; Version +.BIOS_M EQU 55 ; Modification +;;;;;;; + +; DEFINE MIN_DSS_VERSION MIN_VER.DSS_V*256 + MIN_VER.DSS_M +; DEFINE MIN_DSS_BUILD MIN_VER.DSS_B +; DEFINE MIN_BIOS_VERSION MIN_VER.BIOS_V*256 + MIN_VER.BIOS_M + +; DEFINE TXT_DSS_VERSION ('0'+MIN_VER.DSS_V),\ +; '.',\ +; ('0'+MIN_VER.DSS_M/10),\ +; ('0'+MIN_VER.DSS_M-(MIN_VER.DSS_M/10)*10),\ +; '.',\ +; ('0'+MIN_VER.DSS_B/100),\ +; ('0'+(MIN_VER.DSS_B/10 - MIN_VER.DSS_B/100*10)),\ +; ('0'+(MIN_VER.DSS_B - MIN_VER.DSS_B/10*10)) ; + + +; DEFINE TXT_BIOS_VERSION '0'+MIN_VER.BIOS_V,\ +; '.',\ +; '0'+MIN_VER.BIOS_M/10,\ +; '0'+MIN_VER.BIOS_M-(MIN_VER.BIOS_M/10)*10 ;----------------------------------------------------------------------- ; ; ;-----------------------[Compilation parameters]------------------------ - DEVICE ZXSPECTRUM4096 ; модель с 4 метрами памяти - MMU 2 e, 0 ; нулевая страница в банку 2 и проверка на границы + DEVICE ZXSPECTRUM4096 ; модель с 4 метрами памяти + MMU 2 e, 0 ; нулевая страница в банку 2 и проверка на границы OUTPUT './Build/DOOM2/doom2.exe' ;----------------------------------------------------------------------- ; @@ -72,7 +100,9 @@ CMD_Line+1: LD HL,#8080 CALL SET_HOME_PATH ;--------[загрузка ресурсов игры]------- - LD HL,Loading_TXT + CALL CHECK_SYSTEM + ; + LD HL,MESSAGES_TXT.Loading LD C,Dss.PChars RST ToDSS ; @@ -199,11 +229,12 @@ RETURN_POINT: ; CALL RESTORE_ALL ; - LD HL,GOTO_EXIT + LD HL,MESSAGES_TXT.NormExit LD C,Dss.PChars RST ToDSS ; -.loop: LD BC,Dss.Exit +.loop: LD B,0 +.error: LD C,Dss.Exit RST ToDSS JR .loop ;--------------------------------------- @@ -1817,8 +1848,44 @@ SCREEN_IN_CACHE: OUT (SYS_PORT.OFF),A RET ;*********************************************************************** +CHECK_SYSTEM: + _mCHECK_SYS_VERSIONS MIN_VER.DSS_V, MIN_VER.DSS_M, MIN_VER.DSS_B, MIN_VER.BIOS_V, MIN_VER.BIOS_M + +; LD C,Dss.Version +; RST ToDSS +; JR C,.Error_DOS +; LD HL,MIN_DSS_VERSION +; EX DE,HL +; SBC HL,DE +; JR C,.Error_DOS +; ; +; LD HL,-(MIN_DSS_BUILD) +; ADD HL,BC +; JR NC,.Error_DOS +; ; +; LD C,BIOS.DRV_VERSION +; RST ToBIOS +; JR C,.Error_BIOS +; LD HL,-(MIN_BIOS_VERSION) +; ADD HL,DE +; RET C +; .Error_BIOS: +; LD HL,.Error_BIOS +; JR .next +; .Error_DOS: +; LD HL,.Error_DSS +; .next: LD C,Dss.PChars +; RST ToDSS +; ; +; LD B,DSS_Error.sys.COMMON_ERROR +; .error: LD C,Dss.Exit +; RST ToDSS +; JR .loop +; .Error_BIOS: DB "\r\nERROR! Uncompatible version of BIOS. Needs version ",TXT_BIOS_VERSION," or higher.\r\n",0 +; .Error_DSS: DB "\r\nERROR! Uncompatible version of DSS. Needs version ",TXT_DSS_VERSION," or higher.\r\n",0 +;*********************************************************************** ;---------------[Tables]---------------- - ALIGN 2,0 + ALIGN 2,0 ; TABLES_START: X_COORD: DW 90*256 @@ -1845,31 +1912,14 @@ NAME6: DB "94956C CBL " NAME7: DB "_ENI511CCBL " ; SND_DIR: DZ "MUSIC" -;Up_Dir: DZ ".." -; -Loading_TXT: DZ "\r\nPlease wait, resources are loading..." -GOTO_EXIT: DZ "\r\n < GAME OVER))) >" -; -; IFN NORM_syncPORT - -; im_handler_emul_proc_address: -; di -; push af -; call KBD_INT -; pop af -; reti - -; BLOCK +(#FF - low $) -; im_handler_emulator: -; dw im_handler_emul_proc_address -; ENDIF ; +MESSAGES_TXT: +.Loading: DZ "\r\nPlease wait, resources are loading...\r\n" +.NormExit: DZ "DOOM 2 demo for DSS says goodbye to you...\r\n" +;-----------------------------------------------------------------------; OUTEND ; конец файла doom2.exe ;-----------------------------------------------------------------------; -;------------------------------------ -;CURRENT_DIR: BLOCK 257,0 - ;------------------------------------ Temp_Buffer EQU $ TXT_SCREEN EQU Temp_Buffer + 257 diff --git a/Shared_Includes b/Shared_Includes index b8a215d..c9539a1 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b8a215d38afde3eed48f39eb961e96cdb6d9e426 +Subproject commit c9539a188d91551738e666770744c6007f0e5b01 From d1206045446192489b5044d21f2770bc9d2f6118 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 24 Feb 2024 23:28:34 +1000 Subject: [PATCH 11/16] ... --- DOOM2.asm | 267 +++++++----------------------------------------- Music_4x.asm | 36 +++---- Shared_Includes | 2 +- 3 files changed, 54 insertions(+), 251 deletions(-) diff --git a/DOOM2.asm b/DOOM2.asm index a109459..888d07b 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -73,11 +73,11 @@ Loader_length EQU 0 ; -TABLE_X EQU #A000 ; таблица коэфициентов высоты -TABLE_X_SIZE EQU #0800 ; её размер??? -MONSTR_TABLE EQU #A800 ; таблица монстров -MONSTR_TABLE_SIZE EQU #1800 ; её размер??? -TABLE_W EQU #2000 ; текущие карты для TRACE +TABLE_X EQU #A000 ; таблица коэфициентов высоты +TABLE_X_SIZE EQU #0800 ; её размер??? +MONSTR_TABLE EQU #A800 ; таблица монстров +MONSTR_TABLE_SIZE EQU #1800 ; её размер??? +TABLE_W EQU #2000 ; текущие карты для TRACE ; Code start section @@ -95,7 +95,7 @@ TABLE_W EQU #2000 ; тек ;[]-------------------------------------------------------------------[] BEGIN: DI - LD (CMD_Line),IX ; сохранить указатель на параметры запуска + LD (CMD_Line),IX ; сохранить указатель на параметры запуска CMD_Line+1: LD HL,#8080 CALL SET_HOME_PATH @@ -109,11 +109,6 @@ CMD_Line+1: CALL SAVE_ALL ; выполнено в виде костыльной заглушки CALL Load_Resources - ; - ;CALL SAVE_TXT_SCREEN - ; LD A,Dss.SetVMod.grf320x256 - ; LD BC,Dss.SetVMod.Screen_1 - ; RST ToDSS ;--------------------------------------- @@ -123,7 +118,7 @@ CMD_Line+1: out (c),a ; ;-----------[заглушить звук]------------ - LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? + LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? 1: CALL CLEAR_COVOX_X DEC A CP #80 @@ -158,18 +153,6 @@ CMD_Line+1: CALL CLEAR_GRAF_SCR - - ; IN A,(SLOT3) - ; PUSH AF - ; LD A,3 - ; OUT (SLOT3),A - ; LD HL,PALITRE - ; LD DE,#C000 - ; LD BC,#0400 - ; LDIR - ; POP AF - ; OUT (SLOT3),A - CALL SET_PAL ;----[открыть порты масштабирования]---- @@ -180,33 +163,17 @@ CMD_Line+1: LD DE, %1111'1110'0110'1111 ; маска LD BC,ACEX.SCALE*256 + BIOS.DCP_CONFIG RST ToBIOS - - ; IN A,(SLOT3) - ; EX AF,AF' - ; LD A,DCP_PAGE - ; OUT (SLOT3),A - ; LD A,ACEX.SCALE - ; LD (#C400),A ; порт #XX00 Dos off - ; LD (#C410),A ; порт #XX00 Dos off - ; LD (#C480),A ; порт #XX00 Dos off - ; LD (#C490),A ; порт #XX00 Dos off - ; LD (#C500),A ; порт #XX00 Dos off - ; LD (#C510),A ; порт #XX00 Dos off - ; LD (#C580),A ; порт #XX00 Dos off - ; LD (#C590),A ; порт #XX00 Dos off - ; EX AF,AF' - ; OUT (SLOT3),A ; Активация Акселя масштабирования, обратно только через ресет - LD BC,#0100 ; C - масштаб 1:1 + LD BC,#0100 ; C - масштаб 1:1 OUT (C),C -;----------------------------------------------------------------------- +;-----------------------------------------------------------------------; -;----------------------------------------------------------------------- +;-----------------------------------------------------------------------; CALL MAIN -;----------------------------------------------------------------------- +;-----------------------------------------------------------------------; -;----------------------------------------------------------------------- +;-----------------------------------------------------------------------; ; E)eeeeee X) xx I)iiii T)tttttt ; E) X) xx I) T) @@ -214,10 +181,10 @@ CMD_Line+1: ; E) X)xx I) T) ; E) X) xx I) T) ; E)eeeeee X) xx I)iiii T) -;----------------------------------------------------------------------- +;-----------------------------------------------------------------------; ; -;-----------[EXIT Procedure]------------; +;----------------[EXIT Procedure]-----------------; RETURN_POINT: IN A,(FastRAM.OFF) LD A,SYS_PORT.BIOS @@ -237,31 +204,8 @@ RETURN_POINT: .error: LD C,Dss.Exit RST ToDSS JR .loop -;--------------------------------------- - -;----[LP_OPEN_S]------------------------ -; Открытие стандартных окон -; LD HL,#5104 -; LD E,0 ; win_flag - флаги окна: -; ; bit 0 определяет страницу режима, которая будет -; ; открыта после исполнения функции -; LD B,4 ; 4 - спектрумовское окно, HL - положение окна -; LD C,BIOS.LP_OPEN_S -; RST ToBIOS -; ;--------------------------------------- - -; SP_SAVE1: -; LD SP,0 -; EXX -; POP HL -; EXX -; POP IX -; POP IY -; EI -; RET -;======================================= -; - +;-------------------------------------------------; +;-----------------------------------------------------------------------; SET_PAL_x: IN A,(FastRAM.OFF) @@ -471,12 +415,10 @@ CLEAR_SP_PAL: MAIN: CALL INIT_TABLE RET C - ; IN A,(PORT_Y) - ; LD (SAVE_PORT_Y),A LD A,#C0 OUT (PORT_Y),A CALL RECALC_MAP - RET C ; нужно ли???!!! + RET C ; нужно ли???!!! ;----!!!!!!!!!!!!!!!!!!!!!!!!!---------- @@ -486,12 +428,6 @@ MAIN: CALL INIT_TABLE OUT (BorderColor),A CALL CLEAR_SP_PAL - -; !FIXIT переделать логику под новый биос? -;---[установка синхры, очистка экрана]-- - ; LD A,2 ; режим Pentagon - 320 строк в экране - ; LD C,BIOS.FN_SYNC - ; RST ToBIOS ;--------------------------------------- ;------[Открытие стандартных окон]------ @@ -506,13 +442,13 @@ MAIN: CALL INIT_TABLE ; LD HL,#4000 LD E,0 - LD B,8 ; графическое окно 0, HL - положение окна + LD B,8 ; графическое окно 0, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS ; LD HL,#5000 LD E,1 - LD B,9 ; графическое окно 1, HL - положение окна + LD B,9 ; графическое окно 1, HL - положение окна LD C,BIOS.LP_OPEN_S RST ToBIOS ;--------------------------------------- @@ -533,11 +469,7 @@ D2_FRAM_page+1: LD DE,#1000 LD BC,D2_fram_END-TRACE LDIR - -; IFN NORM_syncPORT -; IM 2 ; вот теперь можно включать -; ENDIF - + ; POP AF OUT (SLOT3),A ;--------------------------------------- @@ -699,7 +631,7 @@ DM_LOOP: CALL SOUND - CALL TRACE ; прорисовка! + CALL TRACE ; прорисовка! CALL SOUND @@ -888,7 +820,7 @@ NEXT_BYTE_: LD (HL),0FFH NO_FFING: INC HL - BIT 7,H ;!!!!!проверка на конец страницы #C000-FFFF!!!!! + BIT 7,H ;!!!!!проверка на конец страницы #C000-FFFF!!!!! JR NZ,NEXT_BYTE_ OUT (C),B @@ -929,7 +861,7 @@ INIT_TABLE: LD (SKY_2),A ; LD HL,TABLE_MAIN+26 - ;LD A,26 ;!HARDCODE + ;LD A,26 ;!HARDCODE ;ADD A,L ;LD L,A LD A,(HL) @@ -944,7 +876,7 @@ NEXT_HL_FFING: PUSH DE PUSH BC - CALL MADE_FFING ; замена FF-ами прозрачных цветов + CALL MADE_FFING ; замена FF-ами прозрачных цветов POP BC POP DE @@ -977,19 +909,19 @@ NEXT_HL_FFING: ;ADD A,L ;LD L,A LD A,(TABLE_MAIN+33) - LD (EFF_PAGE),A ; звук выстрела + LD (EFF_PAGE),A ; звук выстрела ; LD HL,TABLE_MAIN ; LD A,34 ; ADD A,L ; LD L,A LD A,(TABLE_MAIN+34) - LD (PAGE_M_PLACE),A ; таблица с углами для монстров + LD (PAGE_M_PLACE),A ; таблица с углами для монстров ;--_[Читаем четвёртый блок таблиц H:]---; Tables disk my_tab*.* /* - LD A,3 ;2 ; походу, карта уровня и ещё что-то - LD C,0CEH ; получить идентификатор блока от рамдиска + LD A,3 ;2 ; походу, карта уровня и ещё что-то + LD C,0CEH ; получить идентификатор блока от рамдиска RST ToBIOS ret c ;--------------------------------------- @@ -1011,8 +943,8 @@ NEXT_HL_FFING: ; ;----[Читаем третий блок таблиц G:]-----; Tables disk mapw*.d2 /* - LD A,2 ;1 ; рамдиск стенок - LD C,0CEH ; получить идентификатор блока от рамдиска + LD A,2 ;1 ; рамдиск стенок + LD C,0CEH ; получить идентификатор блока от рамдиска RST ToBIOS ret c ;--------------------------------------- @@ -1025,10 +957,10 @@ NEXT_HL_FFING: LD A,B CP 17 CCF - RET C ; B - размер рамдиска + RET C ; B - размер рамдиска DEC A - LD (MAP_ELS),A ; число стенок + LD (MAP_ELS),A ; число стенок ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! /* @@ -1056,7 +988,7 @@ NEXT_HL_FFING: RST ToBIOS AND A RET -; ;!!!!!!!сделать сохранение скриншотов +; ;!TODO сделать сохранение скриншотов ; LD A,4 ; LD C,BIOS.GET_RAMD_ST ; получить идентификатор блока от рамдиска ; RST ToBIOS @@ -1076,11 +1008,11 @@ NEXT_HL_FFING: */ ;*************************************** - BLOCK #8700-$,0 ;ВЫРАВНИВАНИЕ + BLOCK #8700-$,0 ;ВЫРАВНИВАНИЕ ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; тут выравнивание на 0 в младшем ; бите адреса -TABLE_MAIN: DS 37 ; буфер под страницы файла resurses.res +1 +TABLE_MAIN: DS 37 ; буфер под страницы файла resurses.res +1 TABLE_PIC: DS 6 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1633,40 +1565,6 @@ SAVE_PAL: XOR A OUT (SYS_PORT.OFF),A RET - - - ; IN A,(SLOT3) - ; PUSH AF - ; IN A,(SLOT2) - ; OUT (SLOT3),A - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 - ; LD DE,0 - ; LD A,#80 + 0 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024 - ; LD DE,0 - ; LD A,#80 + 1 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 - ; LD DE,0 - ; LD A,6 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 - ; LD DE,0 - ; LD A,7 - ; LD C,BIOS.PIC_GET_PAL - ; RST ToBIOS - ; - ; POP AF - ; OUT (SLOT3),A - ; RET ;*********************************************************************** RESTORE_PAL: LD A,SYS_PORT.BIOS @@ -1695,68 +1593,6 @@ RESTORE_PAL: XOR A OUT (SYS_PORT.OFF),A RET - - ; - ; IN A,(SLOT2) - ; PUSH AF - ; OUT (SLOT3),A - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 - ; LD DE,0 - ; LD A,4 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024 - ; LD DE,0 - ; LD A,5 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024 - ; LD DE,0 - ; LD A,6 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; ; - ; LD HL,Pal_Restore_Buffer+#4000 + 1024+1024+1024 - ; LD DE,0 - ; LD A,7 - ; LD BC,#FF*256 + BIOS.PIC_SET_PAL ; установка палитры - ; RST ToBIOS - ; - ; POP AF - ; OUT (SLOT3),A - ; RET -;*********************************************************************** - ;!TODO тут не проверяется режим 80 или 40 -; DEFINE _TXT_SCREEN #E000 -; SAVE_TXT_SCREEN: -; DI -; LD C,BIOS.LP_GET_PLACE -; RST ToBIOS -; LD (LOAD_TXT_SCREEN.CURS),DE -; ; -; XOR A -; LD B,SHARED_PAGE -; LD HL,#2050 ; #2028 -; LD DE,#0000 -; LD IX,_TXT_SCREEN -; LD C,BIOS.WIN_COPY -; JP ToBIOS -; LOAD_TXT_SCREEN: -; DI -; XOR A -; LD B,SHARED_PAGE -; LD HL,#2050 ; #2028 -; LD DE,#0000 -; LD IX,_TXT_SCREEN -; LD C,BIOS.WIN_RESTORE -; RST ToBIOS -; ; -; .CURS+1: LD DE,#0000 -; LD C,Dss.Locate -; JP ToDSS ;*********************************************************************** RESTORE_ALL: ; LD B,3 ; 3 - установка CGA палитры @@ -1850,39 +1686,6 @@ SCREEN_IN_CACHE: ;*********************************************************************** CHECK_SYSTEM: _mCHECK_SYS_VERSIONS MIN_VER.DSS_V, MIN_VER.DSS_M, MIN_VER.DSS_B, MIN_VER.BIOS_V, MIN_VER.BIOS_M - -; LD C,Dss.Version -; RST ToDSS -; JR C,.Error_DOS -; LD HL,MIN_DSS_VERSION -; EX DE,HL -; SBC HL,DE -; JR C,.Error_DOS -; ; -; LD HL,-(MIN_DSS_BUILD) -; ADD HL,BC -; JR NC,.Error_DOS -; ; -; LD C,BIOS.DRV_VERSION -; RST ToBIOS -; JR C,.Error_BIOS -; LD HL,-(MIN_BIOS_VERSION) -; ADD HL,DE -; RET C -; .Error_BIOS: -; LD HL,.Error_BIOS -; JR .next -; .Error_DOS: -; LD HL,.Error_DSS -; .next: LD C,Dss.PChars -; RST ToDSS -; ; -; LD B,DSS_Error.sys.COMMON_ERROR -; .error: LD C,Dss.Exit -; RST ToDSS -; JR .loop -; .Error_BIOS: DB "\r\nERROR! Uncompatible version of BIOS. Needs version ",TXT_BIOS_VERSION," or higher.\r\n",0 -; .Error_DSS: DB "\r\nERROR! Uncompatible version of DSS. Needs version ",TXT_DSS_VERSION," or higher.\r\n",0 ;*********************************************************************** ;---------------[Tables]---------------- ALIGN 2,0 diff --git a/Music_4x.asm b/Music_4x.asm index 62baa1e..e438e8f 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -187,14 +187,14 @@ SWITCH_SND: JR SWITCH_SND FILE_DATA: - DW 0 ; начальный кластер - DW 0,0 ; длина файла - ; - DW 0 ; текущий кластер - DW 0,0 ; текущее положение в файле - DW 0 ; текущий номер сектора в кластере + DW 0 ; начальный кластер + DW 0,0 ; длина файла + ; + DW 0 ; текущий кластер + DW 0,0 ; текущее положение в файле + DW 0 ; текущий номер сектора в кластере ; -OPEN_FILE: ; DE - name +OPEN_FILE: ; DE - name CALL FIND_FILE RET C @@ -220,12 +220,12 @@ OPEN_FILE: ; DE - name LD (FILE_DATA+10),HL LD (FILE_DATA+12),HL - LD IX,(FILE_DATA) ; номер первого кластера + LD IX,(FILE_DATA) ; номер первого кластера DEC IX - DEC IX ; -2 !!! + DEC IX ; -2 !!! LD HL,0 SCF - LD DE,(MSD_DATS.CLASTER_LEN + 1) ; длина кластера в байтах + LD DE,(MSD_DATS.CLASTER_LEN + 1) ; длина кластера в байтах RR D RR E .SEC_MUL: @@ -294,27 +294,27 @@ FIND_FILE: HDD_FN: EX AF,AF' IN A,(FastRAM.OFF) - IN A,(SLOT1) - PUSH AF + ;IN A,(SLOT1) + ;PUSH AF IN A,(SLOT3) PUSH AF - LD A,5 ;!FIXIT - OUT (SLOT1),A + ;LD A,5 ;!FIXIT + ;OUT (SLOT1),A ; LD A,CBL.BUFFER_PAGE OUT (SLOT3),A IN A,(PORT_Y) PUSH AF EX AF,AF' - RST ToBIOS ; читать сектора с винчестера, функция #45 + RST ToBIOS ; читать сектора с винчестера, функция #45 ; POP AF OUT (PORT_Y),A POP AF OUT (SLOT3),A - POP AF - OUT (SLOT1),A - IN A,(FastRAM.ON) ; включаем кэш + ;POP AF + ;OUT (SLOT1),A + IN A,(FastRAM.ON) ; включаем кэш RET ; ; diff --git a/Shared_Includes b/Shared_Includes index c9539a1..5a5dcf0 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit c9539a188d91551738e666770744c6007f0e5b01 +Subproject commit 5a5dcf0bd035d2adaaa27d28bb8ed1bd86260d59 From 0712ec0a95a4d2e744de011396d4658b68d9f951 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 19 Jul 2024 02:54:03 +1000 Subject: [PATCH 12/16] -fixed bug with perdyezh at start --- DOOM2.asm | 14 ++--- Music_4x.asm | 132 +++++++++++++++++++++--------------------------- Shared_Includes | 2 +- 3 files changed, 62 insertions(+), 86 deletions(-) diff --git a/DOOM2.asm b/DOOM2.asm index 888d07b..3194149 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -118,11 +118,7 @@ CMD_Line+1: out (c),a ; ;-----------[заглушить звук]------------ - LD A,#FF ; !FIXIT разве так надо глушить? Не рудименты Sp97? -1: CALL CLEAR_COVOX_X - DEC A - CP #80 - JR NZ,1B + CALL CLEAR_COVOX ;--------------------------------------- ; ;--------------------------------------- @@ -347,13 +343,9 @@ FLAG: DB 0 ; CLEAR_COVOX: LD A,#80 - -CLEAR_COVOX_X: LD BC,CBL.COVOX_OUT - -CLEAR_CBL: - OUT (C),A - DJNZ CLEAR_CBL +.CLEAR: OUT (C),A + DJNZ .CLEAR RET ; ; diff --git a/Music_4x.asm b/Music_4x.asm index e438e8f..cf75704 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -40,12 +40,11 @@ INIT_HDD_WORK: .start: LD C,BIOS.HDD_PART ; IDE-1/IDE-2 RST ToBIOS ; -.loop: LD C,BIOS.HDD_INIT - RST ToBIOS - JR C,.loop +;.loop: LD C,BIOS.HDD_INIT +; RST ToBIOS +; JR C,.loop ; - CALL BPB_SetUp ;----------------------------------------------------------------------- @@ -56,16 +55,16 @@ INIT_HDD_WORK: ; LD HL,SYS_PAGE.MSD_FAT_SEC LD DE,MSD_DATS - LD BC,16 + LD BC,16 ;!HARDCODE LDIR EX AF,AF' OUT (SLOT3),A - ;[ ] music and dirs + ;[x] music and dirs LD HL,SND_DIR LD DE,Temp_Buffer LD A,FAT_ATTR.DIRECTORY - LD BC,Dss.F_First + LD BC,Dss.F_First.FATname RST ToDSS JR NC,.start_setup ; @@ -73,24 +72,6 @@ INIT_HDD_WORK: LD (SoundOnOff2),A RET ; - - - ;LD HL,(SYS_PAGE.MS_BPB + _sBOOT_SEC.B_P_S) - -; LD BC,(Temp_Buffer+26) ; first dir cluster -; LD A,(SYS_PAGE.MS_BPB + _sBOOT_SEC.S_P_C) -; LD E,A -; LD D,0 -; LD HL,0 -; LD IX,0 -; .cluster_loop: -; ADD HL,DE -; CALL C,KOSTILYI -; DEC BC -; LD A,B -; OR C -; JR NZ,.cluster_loop - .start_setup: ;-=-=-=-=-=-=-=- LD HL,(Temp_Buffer+26) ; first dir cluster @@ -108,7 +89,7 @@ INIT_HDD_WORK: ; Кластер папки #2258 ; IX:HL относительный сектор папки #897E0 (E0 97 08 00) ; -.skip_dir: +;.skip_dir: ; LD DE,(MSD_DATS.MSD_CAT_SEC) ; CAT TABLE. абсолютный номер сектора младшая часть ; LD IX,(MSD_DATS.MSD_CAT_SEC2) ; абсолютный номер сектора старшая часть ;-----[читать секторы с винчестера]----- @@ -314,7 +295,7 @@ HDD_FN: EX AF,AF' OUT (SLOT3),A ;POP AF ;OUT (SLOT1),A - IN A,(FastRAM.ON) ; включаем кэш + IN A,(FastRAM.ON) ; включаем кэш RET ; ; @@ -325,49 +306,48 @@ BPB_SetUp: RST ToBIOS .PARAMS: DI - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A - LD A,(SYS_PAGE.MS_BPB+FORM_CODE) - CP #F0 - JP C,.ERROR_BPB + LD A,(SYS_PAGE.MS_BPB+FORM_CODE) + CP #F0 + JP C,.ERROR_BPB - LD HL,SYS_PAGE.MS_BPB+FAT_ID - LD DE,.FAT1_MSG - LD B,4 -.L1: LD A,(DE) - CP ' ' - JR NZ,.L11 - INC DE - JR .L1 -.L11: CP (HL) - JR NZ,.PC_DOS + LD DE,SYS_PAGE.MS_BPB+FAT_ID + LD HL,.FAT1_MSG + LD B,4 +.L1: LD A,(DE) + CP ' ' + JR NZ,.L11 + INC DE + JR .L1 +.L11: CP (HL) + JR NZ,.PC_DOS - INC HL - INC DE - DJNZ .L1 - LD A,(HL) - CP '6' - LD HL,#81FF ; FAT16 флаг - JR Z,.FAT - CP '2' - JP NZ,.ERROR_BPB + INC HL + INC DE + DJNZ .L1 + LD A,(DE) + CP '6' + LD HL,#81FF ; FAT16 флаг + JR Z,.FAT + CP '2' + JP NZ,.ERROR_BPB .PC_DOS: - LD HL,#01FF ; FAT12 флаг + LD HL,#01FF ; FAT12 флаг .FAT: LD (SYS_PAGE.FAT_FLAG),HL LD A,(SYS_PAGE.MS_BPB+S_P_T) ; Количество секторов на трек LD (SYS_PAGE.MSD_SECS),A - BIT 7,H + ; BIT 7,H + ; LD IX,0 + ; LD HL,0 ; вычислить начальный сектор FAT + ; JR Z,.NO_LD_SPECIAL - LD IX,0 - LD HL,0 ; вычислить начальный сектор FAT - - JR Z,.NO_LD_SPECIAL LD IX,(SYS_PAGE.MS_BPB+SPECIAL_SECS) LD HL,(SYS_PAGE.MS_BPB+SPECIAL_SECS+2) .NO_LD_SPECIAL: @@ -381,7 +361,7 @@ BPB_SetUp: LD (SYS_PAGE.MSD_FAT_SEC2),HL ; начальный сектор FAT LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; число секторов в FAT - LD BC,0 + ;LD BC,0 LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; количество FATs .NEXT_ADD: @@ -394,16 +374,16 @@ BPB_SetUp: LD (SYS_PAGE.MSD_CAT_SEC2),HL ; начальный сектор DIR LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + LD A,B RL C - RL B + RLA RL C - RL B + RLA RL C - RL B - LD C,B + RLA + LD C,A LD B,0 ; BC - число файловых записей в секторе - LD A,C - LD (SYS_PAGE.F_P_S),A + LD (SYS_PAGE.FilesPerSector),A LD DE,(SYS_PAGE.MS_BPB+FLS_NUM) ; Число файловых записей @@ -418,9 +398,9 @@ BPB_SetUp: EX DE,HL LD E,A ; A - число секторов в DIR - LD D,0 LD BC,0 - LD (SYS_PAGE.S_P_C),A + LD D,B + LD (SYS_PAGE.SectorsPerCluster),A ADD IX,DE ; Начало DATA area ADC HL,BC @@ -429,22 +409,26 @@ BPB_SetUp: LD (SYS_PAGE.MSD_DAT_SEC2),HL LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора - LD HL,0 + ; D = 0 + LD H,D + LD L,D + LD E,D LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) LD D,A - LD A,0 + XOR A .NEXT_ADD3: ADD HL,BC ; Вычисление длины кластера - ADC A,0 + ADC A,E DEC D JR NZ,.NEXT_ADD3 LD (SYS_PAGE.CLASTER_LEN),HL - LD B,0 + LD B,E LD C,A LD (SYS_PAGE.CLASTER_LEN2),BC - - LD HL,0 + ; + ; DE=0 + EX DE,HL ;LD HL,0 LD BC,(SYS_PAGE.MS_BPB+S_P_T) LD A,(SYS_PAGE.MS_BPB+H_P_S) .BPB_L1:; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР diff --git a/Shared_Includes b/Shared_Includes index 5a5dcf0..f3ac185 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 5a5dcf0bd035d2adaaa27d28bb8ed1bd86260d59 +Subproject commit f3ac185e2fe2d1e76f8e54c3c1f421a99fafdd62 From 2f34e333d59d4e09694c9b9e25cdd19febc81b01 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 19 Jul 2024 03:27:35 +1000 Subject: [PATCH 13/16] ... --- Music_4x.asm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Music_4x.asm b/Music_4x.asm index cf75704..c5d45ca 100644 --- a/Music_4x.asm +++ b/Music_4x.asm @@ -486,8 +486,7 @@ NSECTOR: LD DE,(MSD_DATS.MSD_DAT_SEC) ;first data sector ;!FIXIT а если начальный сектор > #FFFF XOR A ADD IX,DE - LD D,A - LD E,A + LD DE,(MSD_DATS.MSD_DAT_SEC2) ADC HL,DE ;!TODO а надо ли проверять переполнение HL:IX? RET From b9a2e9391b8f84c6f92dc069e73fea4fdea5abd8 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 28 Feb 2025 02:33:25 +1000 Subject: [PATCH 14/16] update shared includes --- DOOM2.asm | 12 +++++------- Shared_Includes | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/DOOM2.asm b/DOOM2.asm index 3194149..133739d 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -186,7 +186,7 @@ RETURN_POINT: LD A,SYS_PORT.BIOS OUT (SYS_PORT.RAM),A ; - LD A,ACEX.Config_PG.Sp2000_SoftSetUp + LD A,ACEX.Config_PG.Sp2000_SoftRestartNow LD BC,BIOS.RST_CONF.CUSTOM RST ToBIOS ; @@ -434,14 +434,12 @@ MAIN: CALL INIT_TABLE ; LD HL,#4000 LD E,0 - LD B,8 ; графическое окно 0, HL - положение окна - LD C,BIOS.LP_OPEN_S + LD BC,BIOS.LP_OPEN_S.Graf_0 ; графическое окно 0, HL - положение окна RST ToBIOS ; LD HL,#5000 LD E,1 - LD B,9 ; графическое окно 1, HL - положение окна - LD C,BIOS.LP_OPEN_S + LD BC,BIOS.LP_OPEN_S.Graf_1 ; графическое окно 1, HL - положение окна RST ToBIOS ;--------------------------------------- @@ -1596,8 +1594,8 @@ RESTORE_ALL: .scr+2: LD BC,Dss.SetVMod RST ToDSS ; - LD BC,Dss.Lib_Sub.RestoreFont - RST ToDSS + ;LD BC,Dss.Lib_Sub.RestoreFont + ;RST ToDSS ; LD A,(.mode) CP #80 diff --git a/Shared_Includes b/Shared_Includes index f3ac185..940fb62 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f3ac185e2fe2d1e76f8e54c3c1f421a99fafdd62 +Subproject commit 940fb62da5f5e00b0c1c4700ce004d06da28adca From d6a18c09194474d66508eaa9ce90f4762a29dcdd Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 15 Mar 2025 02:40:42 +1000 Subject: [PATCH 15/16] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D0=B3=D0=BB=D1=8F=D0=BD=D1=83=D1=82=D1=8C=20-=20TEST=5FSCREEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DOOM2.asm | 158 +++++++++++++++++++++++++++++++++++++++++++++++- Shared_Includes | 2 +- 2 files changed, 156 insertions(+), 4 deletions(-) diff --git a/DOOM2.asm b/DOOM2.asm index 133739d..87c1642 100644 --- a/DOOM2.asm +++ b/DOOM2.asm @@ -5,6 +5,9 @@ ;--------------------------------------- */ + DEFINE TEST_SCREEN 0 + + ScreenStartAddress EQU #C040 ;ScreenStartAddress EQU #C000 ; @@ -443,6 +446,14 @@ MAIN: CALL INIT_TABLE RST ToBIOS ;--------------------------------------- + IF TEST_SCREEN + ; + CALL MAKE_SCR_ST1 + ; + ENDIF + + + LD A,(RESTORE_ALL.scr) OUT (SCREEN_SWITCH),A @@ -1165,7 +1176,7 @@ RAMBlkIDs: BLOCK FilesTBL.END,0 ;--------------------------------------- ; - DS #8B00-$ ;ВЫРАВНИВАНИЕ + BLOCK #8B00-$,0 ;ВЫРАВНИВАНИЕ RECALC_MAP: ; пересчет карты на реальные номера @@ -1594,8 +1605,8 @@ RESTORE_ALL: .scr+2: LD BC,Dss.SetVMod RST ToDSS ; - ;LD BC,Dss.Lib_Sub.RestoreFont - ;RST ToDSS + LD BC,Dss.Lib_Sub.RestoreFont + RST ToDSS ; LD A,(.mode) CP #80 @@ -1710,6 +1721,147 @@ MESSAGES_TXT: .Loading: DZ "\r\nPlease wait, resources are loading...\r\n" .NormExit: DZ "DOOM 2 demo for DSS says goodbye to you...\r\n" ;-----------------------------------------------------------------------; + + +;-----------------------------------------------------------------------; + IF TEST_SCREEN +MAKE_SCR_ST1: IN A,(SLOT3) + PUSH AF + LD A,#50 + OUT (SLOT3),A + LD A,1 + OUT (PORT_Y),A + LD HL,#C300 + ; +.big_loop: LD C,20 + ; +.mid_loop: LD B,16 + LD DE,#C37C + LD HL,#C33C + ; +.sml_loop: PUSH BC + LDI + LDI + LD A,%0000'0110 + LD (DE),A + DEC HL + DEC HL + DEC DE + DEC DE + DEC DE + DEC DE + DEC DE + DEC DE + LDI + LDI + LD A,%0000'0100 + LD (DE),A + DEC HL + DEC HL + DEC HL + DEC HL + DEC HL + DEC HL + DEC DE + DEC DE + DEC DE + DEC DE + DEC DE + DEC DE + POP BC + DJNZ .sml_loop + ; + IN A,(PORT_Y) + INC A + INC A + OUT (PORT_Y),A + DEC C + JR NZ,.mid_loop + ; + IN A,(PORT_Y) + AND #80 + JR NZ,MAKE_SCR_ST2 + LD A,#81 + OUT (PORT_Y),A + JR .big_loop + ; +MAKE_SCR_ST2: LD HL,#C300 +.big_loop: EXX + LD D,#4F ; 79 port_y line + LD E,#27 ; 39 port_y line + LD C,PORT_Y + LD B,#14 ; счётчик + EXX +.mid_loop: EXX + OUT (C),E + EXX + ; + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD B,(HL) + DEC HL + DEC HL + ; + EXX + OUT (C),D + EXX + ; + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),B + SET 0,(HL) + ; + EXX + DEC D + DEC D + OUT (C),D + EXX + ; + LD (HL),B + DEC HL + LD (HL),D + DEC HL + LD (HL),E + ; + EXX + DEC D + DEC D + DEC E + DEC E + DEC B + EXX + JR NZ,.mid_loop + ; + EXX + BIT 7,E + EXX + JR Z,.HZ + ; + EXX + LD D,#CF ; 207 port_y line + LD E,#A7 ; 167 port_y line + LD C,PORT_Y + LD B,20 ; счётчик + EXX + JR .mid_loop + ; +.HZ: INC HL + INC HL + INC HL + INC HL + LD A,L + CP #80 + JR NZ,.big_loop + ; + POP AF + OUT (SLOT3),A + RET + ENDIF +;-----------------------------------------------------------------------; OUTEND ; конец файла doom2.exe ;-----------------------------------------------------------------------; diff --git a/Shared_Includes b/Shared_Includes index 940fb62..9bfe7bd 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 940fb62da5f5e00b0c1c4700ce004d06da28adca +Subproject commit 9bfe7bd76b9648dae6f492dcd730b9b7ed80f48d From 4fe0ebb829cecff284785f3abe1fb4ee5a6b213c Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 26 Jun 2025 20:43:29 +1000 Subject: [PATCH 16/16] Release 25/06/2025 --- Shared_Includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared_Includes b/Shared_Includes index 9bfe7bd..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 9bfe7bd76b9648dae6f492dcd730b9b7ed80f48d +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1