1
0
mirror of https://github.com/Tolik-Trek/DOOM2.git synced 2026-06-15 00:51:33 +03:00
DOOM2/Music_4x.asm
Anatoliy Belyanskiy 804a9c4909 ...
2024-02-04 03:39:25 +10:00

431 lines
6.3 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;-----------------------------------------------------------------------
;-------[¨­¨æ¨ «¨§ æ¨ï ¢¨­ç¥áâ¥à ]------;
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) ; <20> §¬¥à ᥪâ®à 
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 ; <20> ç «® 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) ; <20> §¬¥à ᥪâ®à 
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:; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD>
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'