mirror of
https://github.com/Tolik-Trek/DOOM2.git
synced 2026-06-15 09:01:34 +03:00
510 lines
8.1 KiB
NASM
510 lines
8.1 KiB
NASM
|
||
;-----------------------------------------------------------------------
|
||
;!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
|
||
;-=-=-=-=-=-=-=- |