From 276d36e713b9ba8d2a5454f27d5f64cc6c42c949 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 5 Feb 2024 23:28:53 +1000 Subject: [PATCH] ... --- 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