From c6910384f9bad60b34341a29208f6cd8a94d76af Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 7 Feb 2024 02:51:53 +1000 Subject: [PATCH] ... --- 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