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