1
0
mirror of https://github.com/Tolik-Trek/DOOM2.git synced 2026-06-15 00:51:33 +03:00
This commit is contained in:
Anatoliy Belyanskiy 2024-02-07 02:51:53 +10:00
parent 276d36e713
commit c6910384f9
4 changed files with 468 additions and 338 deletions

View File

@ -98,11 +98,7 @@ SKY_LOOP_1:
RES 7,H
SET 6,H
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
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
;
EXX
SCREEN_1+1:
LD DE,#C040 ; ­ ç «® íªà ­ 
@ -340,13 +332,7 @@ CONT_PAGE+1: LD A,0
LD L,A
JP NZ,TRACE_LOOP
; CALL SOUND ; 見<>碪 研投芥 <20><E88AB1>漭鄍!!!
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
CALL SOUND ; 見<>碪 研投芥 <20><E88AB1>漭鄍!!!
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
;
ld bc,#0100 ; ¬ áèâ ¡¨à®¢ ­¨¥ - 1
OUT (C),C
@ -514,11 +496,7 @@ LOOP_PG:
POP BC
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
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
;
NO_WRITE_LINE:
INC DE ; ­®¢®¥ §­ ç¥­¨¥ X
@ -1159,11 +1133,7 @@ MAP_L4:
POP HL
PUSH HL
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
LD C,16
@ -1191,9 +1161,7 @@ MAP_L6:
POP HL
PUSH HL
IF YesSound
CALL SOUND
ENDIF
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
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

422
DOOM2.asm
View File

@ -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,6 +29,7 @@
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'
;-----------------------------------------------------------------------
;
@ -67,6 +39,7 @@ org_addr EQU #8000+CLP_Buffer
code_addr EQU BEGIN
stack_point EQU #BFFF
program_start EQU BEGIN
Loader_length EQU 0
;-----------------------------------------------------------------------
;
@ -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,12 +556,12 @@ D2_FRAM_page+1:
CALL CLEAR_COVOX
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
@ -609,18 +578,14 @@ SOUND_S1:
RLCA
RLCA
;
ADD A,low (NAMES+2)
ADD A,low (NAME1)
LD E,A
LD A,0
RLA
ADD A,high (NAMES+2)
ADD A,high (NAME1)
LD D,A
;ADD A,#80
;LD E,A
;LD D,#80
CALL SET_SND_FILE
CALL INIT_SOUND
ENDIF
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 CALC_NEW_PLACE
CALL MAP_PLACE
CALL MAKE_MAP ; á®®à㤨âì ®â­®á¨â¥«ì­ãî ª àâã
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
CALL PRECALC_PLACE
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
CALL TRACE ; ¯à®à¨á®¢ª !
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
; CALL MONSTR_OUT
CALL MONSTR_ALL
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
CALL WEAPON_OUT
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
CALL MAP_OUT
CALL CLEAR_Z_BUFER
LOOP_SCR:
; IF NORM_syncPORT
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
CONT_WORK:
CALL SCR_SWITCH
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
JP DM_LOOP
@ -817,7 +746,7 @@ SET_1:
PAUSE_INT:
CALL SOUND1
; IF NORM_syncPORT
IN A,(SCR_SyncPort)
BIT 5,A
JR NZ,PAUSE_INT
@ -828,11 +757,7 @@ PAUSE_INT1:
BIT 5,A
RET NZ
JR PAUSE_INT1
; ELSE
; EI
; HALT
; ret
; ENDIF
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 ;<E2809A><E282AC>ˆ<E2809A>ˆ
NAMES: DB 6,1
NAMES: DB 7,1
LAST_KEY: DB 0
; BLOCK TABLES_START+#7C-$,0 ;<E2809A><E282AC>ˆ<E2809A>ˆ
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 "
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

View File

@ -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
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
POP AF
EX AF,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'
;-=-=-=-=-=-=-=-
; 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
;-=-=-=-=-=-=-=-

@ -1 +1 @@
Subproject commit f74ae7e760de5541ee4966d509442c6421225c3b
Subproject commit 93f04cc30f6a3c20f382c8b467bca79718c9ab2e