1
0
mirror of https://github.com/Tolik-Trek/DOOM2.git synced 2026-06-15 09:01:34 +03:00
DOOM2/Music_4x.asm
Anatoliy Belyanskiy 4259263dee correct work in DSS
2024-02-11 05:05:29 +10:00

510 lines
8.1 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.

;-----------------------------------------------------------------------
;!FIXIT ¯¥à¥¤¥« âì ¬ã§«® ­  API 5x
;-------[¨­¨æ¨ «¨§ æ¨ï ¢¨­ç¥áâ¥à ]------;
INIT_HDD_WORK:
.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)
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
;[ ] music and dirs
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.MSD_CAT_SEC) ; CAT TABLE.  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ¬« ¤è ï ç áâì
LD IX,(MSD_DATS.MSD_CAT_SEC2) ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  áâ àè ï ç áâì
LD B,32 ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
CatPage+1:
LD A,0 ; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
LD C,BIOS.HDD_READ ; IX:DE -  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à 
RST ToBIOS ; § £à㧨âì CAT
RET
; KOSTILYI:
; INC IX
; RET
;---------------------------------------
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
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:
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.CLASTER_LEN + 1) ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
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.MSD_DAT_SEC)
ADD IX,DE
LD DE,(MSD_DATS.MSD_DAT_SEC2)
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
;
LD A,CBL.BUFFER_PAGE
OUT (SLOT3),A
IN A,(PORT_Y)
PUSH AF
EX AF,AF'
RST ToBIOS ; ç¨â âì ᥪâ®à  á ¢¨­ç¥áâ¥à , äã­ªæ¨ï #45
;
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'
;-=-=-=-=-=-=-=-
; 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
;-=-=-=-=-=-=-=-