1
0
mirror of https://github.com/Tolik-Trek/DOOM2.git synced 2026-06-15 09:01:34 +03:00

Release 25/06/2025

This commit is contained in:
Tolik 2025-06-26 20:46:17 +10:00
commit 26c9f72b31
4 changed files with 1705 additions and 1264 deletions

View File

@ -15,9 +15,7 @@ SND_READ_SECTORS EQU 4
Module__D2_FRAM__Start EQU $ Module__D2_FRAM__Start EQU $
; ;
TRACE: TRACE: IN A,(SLOT1)
IN A,(SLOT1)
LD (TRACE_RET_SLOT1),A LD (TRACE_RET_SLOT1),A
IN A,(SLOT3) IN A,(SLOT3)
LD (TRACE_RET_SLOT3),A LD (TRACE_RET_SLOT3),A
@ -47,21 +45,21 @@ TRACE:
NO_SKY_2: NO_SKY_2:
OUT (SLOT1),A OUT (SLOT1),A
LD A,0 ;????????? ­¥ ­ã¦­®? ;LD A,0 ;????????? ­¥ ­ã¦­®?
LD C,80 LD C,80
SKY_LOOP_1: SKY_LOOP_1:
ACC_SetBlockSize ACC_SetBlockSize
LD B,0 LD A,0
ACC_CopyBlock ACC_CopyBlock
LD B,(HL) LD B,(HL)
ACC_SetBlockSize ACC_SetBlockSize
LD B,#80 LD B,#80
ACC_Off ACC_Off
XOR A ;XOR A
OUT (RGADR),A OUT (PORT_Y),A
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A LD (DE),A
ACC_Off ACC_Off
@ -69,14 +67,14 @@ SKY_LOOP_1:
INC DE INC DE
INC DE INC DE
OUT (RGADR),A OUT (PORT_Y),A
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A LD (DE),A
ACC_Off ACC_Off
DEC DE DEC DE
OUT (RGADR),A OUT (PORT_Y),A
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A LD (DE),A
ACC_Off ACC_Off
@ -84,7 +82,7 @@ SKY_LOOP_1:
INC DE INC DE
INC DE INC DE
OUT (RGADR),A OUT (PORT_Y),A
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A LD (DE),A
ACC_Off ACC_Off
@ -98,11 +96,7 @@ SKY_LOOP_1:
RES 7,H RES 7,H
SET 6,H SET 6,H
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
LD A,(SKY_1) LD A,(SKY_1)
LD B,A LD B,A
@ -118,20 +112,17 @@ NO_NEXT_SKY:
DEC C DEC C
JR NZ,SKY_LOOP_1 JR NZ,SKY_LOOP_1
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
;
EXX EXX
SCREEN_1 EQU $+1 SCREEN_1+1:
LD DE,#C040 ; ­ ç «® íªà ­  LD DE,ScreenStartAddress ; ­ ç «® íªà ­ 
LD C,0 ;!!!!!!!!!!!!!!!!!!!!!!!!!! LD C,0 ;!!!!!!!!!!!!!!!!!!!!!!!!!!
EXX EXX
; ;
ANGLE_M+1:
LD HL,0 ; ­ ç «ì­ë© 㣮« * 32 LD HL,0 ; ­ ç «ì­ë© 㣮« * 32
ANGLE_M EQU $-2
; ;
LD A,H LD A,H
RLCA RLCA
@ -155,18 +146,17 @@ TRACE_NEXT_:
LD (PLACE_L2),A LD (PLACE_L2),A
EXX EXX
; ;
PLACE_L EQU $+1 PLACE_L+1:
LD A,(TABLE_TRACE+10) ; â®­ª®¥ ¯®«®¦¥­¨¥ - ¯®«®¦¥­¨¥ ¢ ª¢ ¤à â¥ LD A,(TABLE_TRACE+10) ; â®­ª®¥ ¯®«®¦¥­¨¥ - ¯®«®¦¥­¨¥ ¢ ª¢ ¤à â¥
; ;
OUT (SLOT1),A OUT (SLOT1),A
LD (CONT_PAGE),A LD (CONT_PAGE),A
; JR TRACE_LOOP ; JR TRACE_LOOP
TRACE_LOOP: TRACE_LOOP:
LD A,#50 LD A,#50
OUT (SLOT3),A OUT (SLOT3),A
XOR A XOR A
OUT (RGADR),A OUT (PORT_Y),A
REPT 16 REPT 16
LD E,(HL) ; ¯¥à¢ë© ¨ ¤ «¥¥ á«¥¤ãî騩 ªã¡¨ª LD E,(HL) ; ¯¥à¢ë© ¨ ¤ «¥¥ á«¥¤ãî騩 ªã¡¨ª
@ -177,20 +167,19 @@ TRACE_LOOP:
ENDR ENDR
PURE_LINE: PURE_LINE:
;
EXX EXX
ACC_SetBlockSize ACC_SetBlockSize
LD A,#80 ; ¯ãáâ ï á⥭ª  LD A,#80 ; ¯ãáâ ï á⥭ª 
ACC_Off ACC_Off
; LD (DE),A ; LINE-Z-bufer ;LD (DE),A ; LINE-Z-Buffer
OUT (RGADR),A OUT (PORT_Y),A
;
LD A,(COLOR_LO) LD A,(COLOR_LO)
;
ACC_FillScreenOneByte ACC_FillScreenOneByte
LD (DE),A LD (DE),A
ACC_Off ACC_Off
LD A,#70 ; Z-bufer LD A,#70 ; Z-Buffer
LD (DE),A LD (DE),A
EXX EXX
; ;
@ -203,8 +192,7 @@ TRACE_CONT:
; ;
EXX EXX
EX AF,AF' ;­®¬¥à á⥭ª¨ EX AF,AF' ;­®¬¥à á⥭ª¨
PLACE_L1 EQU $+1 PLACE_L1+1: LD A,5
LD A,5
OUT (SLOT1),A ; á«¥¤ãî饥 ¯®«®¦¥­¨¥ ¢ â ¡«¨æ¥ OUT (SLOT1),A ; á«¥¤ãî饥 ¯®«®¦¥­¨¥ ¢ â ¡«¨æ¥
; LD C,0 ; LD C,0
@ -231,9 +219,7 @@ PLACE_L1 EQU $+1
LD A,(HL) ; ¢§ïâì ­¥¬ áèâ ¡¨à®¢ ­­®! LD A,(HL) ; ¢§ïâì ­¥¬ áèâ ¡¨à®¢ ­­®!
ACC_Off ; á⥭ª  ¢ އ“  ªá¥«¥à â®à ! ACC_Off ; á⥭ª  ¢ އ“  ªá¥«¥à â®à !
LD A,5 PLACE_L2+1: LD A,5
PLACE_L2 EQU $-1
OUT (SLOT1),A ; á«¥¤ãî饥 ¯®«®¦¥­¨¥ OUT (SLOT1),A ; á«¥¤ãî饥 ¯®«®¦¥­¨¥
EXX EXX
; ;
@ -259,10 +245,10 @@ PLACE_L2 EQU $-1
; <64 â®çª¨, ­  ¢¥áì íªà ­ ; <64 â®çª¨, ­  ¢¥áì íªà ­
XOR A XOR A
OUT (RGADR),A ; á á ¬®£® ­ ç «  OUT (PORT_Y),A ; á á ¬®£® ­ ç « 
ACC_SetBlockSize ACC_SetBlockSize
LD (DE),A ; 256 ¡ ©â ˆ LINE-Z-bufer!!!! LD (DE),A ; 256 ¡ ©â ˆ LINE-Z-Buffer!!!!
ACC_Off ACC_Off
LD A,#58 LD A,#58
OUT (SLOT3),A OUT (SLOT3),A
@ -270,7 +256,7 @@ PLACE_L2 EQU $-1
LD (DE),A ; ”ˆƒ€Š‘ ¢áî «¨­¨î!!! LD (DE),A ; ”ˆƒ€Š‘ ¢áî «¨­¨î!!!
ACC_Off ACC_Off
XOR A XOR A
LD (DE),A ; LINE-Z-bufer!!!! LD (DE),A ; LINE-Z-Buffer!!!!
EXX EXX
; ;
JR NEXT_ANGLE JR NEXT_ANGLE
@ -278,10 +264,10 @@ PLACE_L2 EQU $-1
HIGH_1: HIGH_1:
; A - ¢ëá®â , á ª®â®à®© à¨áã¥âáï á⥭ª  ; A - ¢ëá®â , á ª®â®à®© à¨áã¥âáï á⥭ª 
ACC_SetBlockSize ACC_SetBlockSize
LD (DE),A ; ç¨á«® â®ç¥ª ¯®â®«ª  ¨ ¯®« ! & LINE-Z-bufer LD (DE),A ; ç¨á«® â®ç¥ª ¯®â®«ª  ¨ ¯®« ! & LINE-Z-Buffer
ACC_Off ACC_Off
NEG ; ¯®«ãç¨âì ¯®«®¦¥­¨¥ ­ ç «  ¯®«  NEG ; ¯®«ãç¨âì ¯®«®¦¥­¨¥ ­ ç «  ¯®« 
OUT (RGADR),A OUT (PORT_Y),A
LD L,A LD L,A
LD A,#58 LD A,#58
@ -290,8 +276,7 @@ HIGH_1:
; LD A,#06 ; 梥⠯®«  ; LD A,#06 ; 梥⠯®« 
; LD A,#5F ; 梥⠯®«  á¥àë© ; LD A,#5F ; 梥⠯®«  á¥àë©
; LD A,#CF ; 梥⠯®«  ᨭ¨© ; LD A,#CF ; 梥⠯®«  ᨭ¨©
LD A,#2F ; 梥⠯®«  ⥬­®ªà á­ë© COLOR_LO+1: LD A,#2F ; 梥⠯®«  ⥬­®ªà á­ë©
COLOR_LO EQU $-1
; ;
ACC_FillScreenOneByte ACC_FillScreenOneByte
LD (DE),A ; à¨á®¢ âì ¯®« LD (DE),A ; à¨á®¢ âì ¯®«
@ -305,15 +290,15 @@ COLOR_LO EQU $-1
LD A,L LD A,L
NEG NEG
OUT (RGADR),A OUT (PORT_Y),A
LD A,L LD A,L
; IN A,(RGADR) ; IN A,(PORT_Y)
ADD A,A ADD A,A
; NEG ; ¢ë¢®¤¨¬ë© à §¬¥à á⥭ª¨ ; NEG ; ¢ë¢®¤¨¬ë© à §¬¥à á⥭ª¨
; á⥭ª  ¢  ªá¥«¥à â®à¥! ; á⥭ª  ¢  ªá¥«¥à â®à¥!
ACC_SetBlockSize ACC_SetBlockSize
LD (DE),A LD (DE),A ;!!!!! ¯à¨ª®«ì­®
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A ; ¯®«®¦¨âì á⥭ªã! LD (DE),A ; ¯®«®¦¨âì á⥭ªã!
ACC_Off ACC_Off
@ -333,8 +318,7 @@ NEXT_ANGLE:
NO_TEST: NO_TEST:
; ;
LD A,0 CONT_PAGE+1: LD A,0
CONT_PAGE EQU $-1
; ;
OUT (SLOT1),A OUT (SLOT1),A
@ -344,13 +328,7 @@ CONT_PAGE EQU $-1
LD L,A LD L,A
JP NZ,TRACE_LOOP JP NZ,TRACE_LOOP
; CALL SOUND ; ¨£à âì ¬ã§ëªã ­  ª®¢®ªá¡« áâ¥à¥!!! CALL SOUND ; ¨£à âì ¬ã§ëªã ­  ª®¢®ªá¡« áâ¥à¥!!!
IF YesSound
CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
INC H INC H
BIT 7,H BIT 7,H
@ -359,8 +337,7 @@ CONT_PAGE EQU $-1
PUSH HL PUSH HL
PUSH BC PUSH BC
; ;
LD A,#0F CORNER_1+1: LD A,#0F
CORNER_1 EQU $-1
; ;
AND #0F AND #0F
RRCA RRCA
@ -391,17 +368,15 @@ CORNER_1 EQU $-1
TRACE_END: TRACE_END:
; ;
LD A,0 TRACE_RET_SLOT3+1: LD A,0
TRACE_RET_SLOT3 EQU $-1
; ;
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,5 TRACE_RET_SLOT1+1: LD A,5
TRACE_RET_SLOT1 EQU $-1
; ;
OUT (SLOT1),A OUT (SLOT1),A
LD A,0 LD A,0
OUT (RGADR),A OUT (PORT_Y),A
RET RET
; ;
;*************************************** ;***************************************
@ -463,9 +438,8 @@ NO_CORN1:
; ;
;*************************************** ;***************************************
; ;
SET_PICTURE:
; A - ®â­®á¨â¥«ì­ë© ­®¬¥à áâà ­¨æë ; A - ®â­®á¨â¥«ì­ë© ­®¬¥à áâà ­¨æë
SET_PICTURE:
LD C,SLOT1 LD C,SLOT1
IN B,(C) IN B,(C)
PUSH BC PUSH BC
@ -476,14 +450,10 @@ SET_PICTURE:
LD A,#50 LD A,#50
OUT (C),A OUT (C),A
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
; ;
ld bc,#0100 ; ¬ áèâ ¡¨à®¢ ­¨¥ - 1 ld bc,#0100 ; ¬ áèâ ¡¨à®¢ ­¨¥ - 1
OUT (C),B OUT (C),C
LD DE,(SCREEN_1) LD DE,(SCREEN_1)
LD B,5 ; 5 <E28098><EFBFBD>ˆ LD B,5 ; 5 <E28098><EFBFBD>ˆ
@ -491,7 +461,7 @@ SET_PICTURE:
ACC_SetBlockSize ACC_SetBlockSize
LD A,0 ; ¯® 256 ¡ ©â LD A,0 ; ¯® 256 ¡ ©â
ACC_Off ACC_Off
OUT (RGADR),A OUT (PORT_Y),A
POP AF POP AF
@ -522,11 +492,7 @@ LOOP_PG:
POP BC POP BC
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
DJNZ PIC_LOOP DJNZ PIC_LOOP
@ -703,7 +669,7 @@ WEAPON_OUT:
LD A,#58 LD A,#58
OUT (SLOT3),A OUT (SLOT3),A
WEAPON_SWITCH EQU $+1 WEAPON_SWITCH+1:
LD HL,#4500 ; ¯®«®¦¥­¨¥ á¯à ©â  ®àã¦¨ï ¢ áâà ­¨æ¥ LD HL,#4500 ; ¯®«®¦¥­¨¥ á¯à ©â  ®àã¦¨ï ¢ áâà ­¨æ¥
; ;
LD DE,(SCREEN_1) LD DE,(SCREEN_1)
@ -722,10 +688,9 @@ WEAPON_SWITCH EQU $+1
LD BC,#100 LD BC,#100
W_OUT_L: W_OUT_L:
LD A,#44 LD A,#44
SUB H SUB H
OUT (RGADR),A OUT (PORT_Y),A
; ;
;------[®¯â¨¬¨§¨à®¢ âì?]---------------- ;------[®¯â¨¬¨§¨à®¢ âì?]----------------
OUT (C),C ; Œ€˜<E28099> 1:1, ­ ç¨­ âì á 0 OUT (C),C ; Œ€˜<E28099> 1:1, ­ ç¨­ âì á 0
@ -788,7 +753,7 @@ MAP_LOOP_2:
LD BC,#0100 LD BC,#0100
OUT (C),C ; Œ€˜<E28099> 1:1 OUT (C),C ; Œ€˜<E28099> 1:1
IF NORM_ACC ; IF NORM_ACC
LD B,16 LD B,16
LD A,184 LD A,184
@ -805,7 +770,7 @@ MAP_LOOP_1:
INC H INC H
REPT 4 REPT 4
OUT (RGADR),A OUT (PORT_Y),A
ACC_CopyBlock ACC_CopyBlock
LD (DE),A LD (DE),A
ACC_Off ACC_Off
@ -814,55 +779,55 @@ MAP_LOOP_1:
DJNZ MAP_LOOP_1 DJNZ MAP_LOOP_1
ELSE ; ELSE
LD B,16 ; LD B,16
LD A,184 ; LD A,184
MAP_LOOP_1: ; MAP_LOOP_1:
ACC_SetBlockSize ; ACC_SetBlockSize
LD C,#40 ; LD C,#40
ACC_CopyBlock ; ACC_CopyBlock
LD C,(HL) ; LD C,(HL)
ACC_Off ; ACC_Off
OUT (RGADR),A ; OUT (PORT_Y),A
ACC_CopyBlock ; ACC_CopyBlock
LD (DE),A ; LD (DE),A
ACC_Off ; ACC_Off
INC A ; INC A
LD L,64 ; LD L,64
ACC_CopyBlock ; ACC_CopyBlock
LD C,(HL) ; LD C,(HL)
ACC_Off ; ACC_Off
OUT (RGADR),A ; OUT (PORT_Y),A
ACC_CopyBlock ; ACC_CopyBlock
LD (DE),A ; LD (DE),A
ACC_Off ; ACC_Off
INC A ; INC A
LD L,64*2 ; LD L,64*2
ACC_CopyBlock ; ACC_CopyBlock
LD C,(HL) ; LD C,(HL)
ACC_Off ; ACC_Off
OUT (RGADR),A ; OUT (PORT_Y),A
ACC_CopyBlock ; ACC_CopyBlock
LD (DE),A ; LD (DE),A
ACC_Off ; ACC_Off
INC A ; INC A
LD L,64*3 ; LD L,64*3
ACC_CopyBlock ; ACC_CopyBlock
LD C,(HL) ; LD C,(HL)
ACC_Off ; ACC_Off
OUT (RGADR),A ; OUT (PORT_Y),A
ACC_CopyBlock ; ACC_CopyBlock
LD (DE),A ; LD (DE),A
ACC_Off ; ACC_Off
INC A ; INC A
INC H ; INC H
LD L,0 ; LD L,0
DJNZ MAP_LOOP_1 ; DJNZ MAP_LOOP_1
ENDIF ; ENDIF
LD BC,240 LD BC,240
EX DE,HL EX DE,HL
@ -873,8 +838,8 @@ MAP_LOOP_1:
CP #50 CP #50
JR Z,MAP_LOOP_2 JR Z,MAP_LOOP_2
LD A,0 XOR A
OUT (RGADR),A OUT (PORT_Y),A
POP AF POP AF
POP HL POP HL
@ -889,26 +854,22 @@ MAP_LOOP_1:
;*************************************** ;***************************************
; ;
WALL:
; IX+0 - áâà ­¨æ  á⥭ª¨ ; IX+0 - áâà ­¨æ  á⥭ª¨
; IX+1,2 -  ¤à¥á á⥭ª¨ ¢ áâà ­¨æ¥ ; IX+1,2 -  ¤à¥á á⥭ª¨ ¢ áâà ­¨æ¥
; IX+3 - ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ - § ¤ ¥â ¬ áèâ ¡ ; IX+3 - ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ - § ¤ ¥â ¬ áèâ ¡
; IX+4,5 - ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨ ; IX+4,5 - ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨
; IX+6,7 - reserved ; IX+6,7 - reserved
; IX+8,9 - X-add-parameter (ª®í䍿¨¥­â ¬ áèâ ¡¨à®¢ ­¨ï ¯® Y) ; IX+8,9 - X-add-parameter (ª®í䍿¨¥­â ¬ áèâ ¡¨à®¢ ­¨ï ¯® Y)
; IX+10 - ॠ«ì­ ï è¨à¨­  á⥭ª¨ ??? ; IX+10 - ॠ«ì­ ï è¨à¨­  á⥭ª¨ ???
; IX+11 - ॠ«ì­ ï ¢ëá®â  á⥭ª¨ ??? ; IX+11 - ॠ«ì­ ï ¢ëá®â  á⥭ª¨ ???
WALL: IN A,(SLOT3)
LD (WALL_SLOT3_RET),A
IN A,(SLOT3)
LD (SLOT3_RET1),A
IN A,(SLOT1) IN A,(SLOT1)
LD (SLOT1_RET1),A LD (WALL_SLOT1_RET),A
IN A,(RGADR) IN A,(PORT_Y)
LD (RGADR_RET1),A LD (WALL_PORT_Y_RET),A
LD A,#58 LD A,#5C
OUT (SLOT3),A OUT (SLOT3),A
LD A,(IX+0) ; áâà ­¨æ  á⥭ª¨ LD A,(IX+0) ; áâà ­¨æ  á⥭ª¨
@ -916,7 +877,7 @@ WALL:
EXX EXX
LD C,0 ; ¯®àâ ¬ áèâ ¡  LD C,0 ; ¯®àâ ¬ áèâ ¡ 
;
LD H,TABLE_X/256 ; â ¡«¨æ  ¢ëá®â ¨ ª®í䍿¨¥­â®¢ ¬ áèâ ¡¨à®¢ ­¨ï LD H,TABLE_X/256 ; â ¡«¨æ  ¢ëá®â ¨ ª®í䍿¨¥­â®¢ ¬ áèâ ¡¨à®¢ ­¨ï
LD L,(IX+3) ; ¯®«®¦¥­¨¥ ¯® Y / ®¯à¥¤¥«ï¥â ¢ëá®âã LD L,(IX+3) ; ¯®«®¦¥­¨¥ ¯® Y / ®¯à¥¤¥«ï¥â ¢ëá®âã
LD A,(HL) ; ¬ áèâ ¡ - LOW LD A,(HL) ; ¬ áèâ ¡ - LOW
@ -926,17 +887,16 @@ WALL:
LD A,(HL) ; ¬ áèâ ¡ - HIGH LD A,(HL) ; ¬ áèâ ¡ - HIGH
LD (X_ADD2),A LD (X_ADD2),A
DEC H DEC H
;
LD A,L LD A,L
ADD A,A ADD A,A
NEG ; è¨à¨­  ¯® £®à¨§®­â «¨ NEG ; è¨à¨­  ¯® £®à¨§®­â «¨
;
BIT 0,(IX+M_VAR3) BIT 0,(IX+M_VAR3)
JR Z,NO_DEL2 JR Z,NO_DEL2
RRA RRA
AND #7F AND #7F
NO_DEL2: NO_DEL2: BIT 1,(IX+M_VAR3)
BIT 1,(IX+M_VAR3)
JR Z,NO_DEL4 JR Z,NO_DEL4
AND A AND A
RRA RRA
@ -965,7 +925,7 @@ NO_DEL4:
; ; ¢ A ᪮«ìª® «¨­¨© ¤® ­ ç «  íªà ­  ; ; ¢ A ᪮«ìª® «¨­¨© ¤® ­ ç «  íªà ­ 
;WALL_NO_SCF: ;WALL_NO_SCF:
; ;
; LD HL,140h ; LD HL,#0140
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
; LD A,L ; ¢ A - ᪮«ìª® «¨­¨© ®áâ «®áì ¤® ª®­æ  íªà ­ ?? ; LD A,L ; ¢ A - ᪮«ìª® «¨­¨© ®áâ «®áì ¤® ª®­æ  íªà ­ ??
@ -982,6 +942,7 @@ NO_DEL4:
; LD E,A ; LD E,A
LD D,0 LD D,0
SBC HL,DE SBC HL,DE
;!FIXIT ¯®á«¥ ¢ëç¨â ­¨ï ¢ HL  ¤à¥á ¯® ª®â®à®¬ã ¡ã¤¥â § ¯¨áì ¡«®ª , ¬®¦¥â § «¥§ âì ­  èà¨äâë
EX DE,HL EX DE,HL
LD H,(IX+2) ; áâ à訩  ¤à¥á á⥭ª¨ LD H,(IX+2) ; áâ à訩  ¤à¥á á⥭ª¨
@ -992,15 +953,16 @@ NO_DEL4:
WOLL_LOOP: WOLL_LOOP:
XOR A XOR A
OUT (RGADR),A OUT (PORT_Y),A
LD A,D LD A,D
;!FIXIT âã⠯஢¥àª  ­  áâ à訩  ¤à¥á, ­® èà¨äâ ¬ íâ® ­¥ ¯®¬®¦¥â
CP #C3 CP #C3
JR NC,NO_WRITE_ALL ; ­¥ ¢ë¢®¤¨âì §  íªà ­ ¨ § ª®­ç¨âì JR NC,NO_WRITE_ALL ; ­¥ ¢ë¢®¤¨âì §  íªà ­ ¨ § ª®­ç¨âì
CP #C0 CP #C0
JR C,NO_WRITE_LINE ; ­¥ ¢ë¢®¤¨âì §  íªà ­ JR C,NO_WRITE_LINE ; ­¥ ¢ë¢®¤¨âì §  íªà ­
;!FIXIT âãâ ¬®¦¥â ç¨â âìáï ¨§ ®¡« á⨠èà¨ä⮢
LD A,(DE) ; Z-bufer!!! LD A,(DE) ; ç⥭¨¥ ¨§ Z-Buffer
EXX EXX
CP L CP L
EXX EXX
@ -1043,8 +1005,8 @@ NO_Z_A1:
JR Z,NO_Z_A JR Z,NO_Z_A
XOR A XOR A
NO_Z_A: NO_Z_A:
OUT (RGADR),A ; § ¤ âì ¯®àâ Y OUT (PORT_Y),A ; § ¤ âì ¯®àâ Y
;!FIXIT âãâ ¬®¦¥â ¯¨á âìáï ¢ ®¡« áâì èà¨ä⮢
ACC_CopyScreenBlock ACC_CopyScreenBlock
LD (DE),A ; ¢ë¢¥á⨠«¨­¨î LD (DE),A ; ¢ë¢¥á⨠«¨­¨î
ACC_Off ACC_Off
@ -1052,21 +1014,17 @@ NO_Z_A:
LD A,E LD A,E
AND #0F AND #0F
IF YesSound
CALL Z,SOUND CALL Z,SOUND
; ELSE ;
; CALL Z,YesSoundZero
ENDIF
NO_WRITE_LINE: NO_WRITE_LINE:
INC DE ; ­®¢®¥ §­ ç¥­¨¥ X INC DE ; ­®¢®¥ §­ ç¥­¨¥ X
LD A,C LD A,C
X_ADD2 equ $+1 X_ADD2+1:
ADD A,0 ; X-add-parameter 2 ADD A,0 ; X-add-parameter 2
LD C,A LD C,A
X_ADD equ $+1 X_ADD+1:
LD A,0 ; X-add-parameter LD A,0 ; X-add-parameter
ADC A,H ADC A,H
LD H,A ; á«¥¤ãîé ï «¨­¨ï WOLL LD H,A ; á«¥¤ãîé ï «¨­¨ï WOLL
@ -1075,13 +1033,13 @@ X_ADD equ $+1
NO_WRITE_ALL: NO_WRITE_ALL:
; ;
RGADR_RET1 EQU $+1 WALL_PORT_Y_RET+1:
LD A,0 LD A,0
OUT (RGADR),A OUT (PORT_Y),A
SLOT3_RET1 EQU $+1 WALL_SLOT3_RET+1:
LD A,0 LD A,0
OUT (SLOT3),A OUT (SLOT3),A
SLOT1_RET1 EQU $+1 WALL_SLOT1_RET+1:
LD A,5 LD A,5
OUT (SLOT3),A OUT (SLOT3),A
RET RET
@ -1172,11 +1130,7 @@ MAP_L4:
POP HL POP HL
PUSH HL PUSH HL
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
LD C,16 LD C,16
@ -1204,9 +1158,7 @@ MAP_L6:
POP HL POP HL
PUSH HL PUSH HL
IF YesSound
CALL SOUND CALL SOUND
ENDIF
LD C,16 LD C,16
@ -1219,7 +1171,7 @@ MAP_L8:
LD A,(HL) LD A,(HL)
LD (DE),A LD (DE),A
LD A,L LD A,L
SUB 40H SUB #40
LD L,A LD L,A
LD A,H LD A,H
SBC A,0 SBC A,0
@ -1307,7 +1259,9 @@ CONT_MOVE:
;COV_ADR: DB 0 ;COV_ADR: DB 0
;SND_P: DB #FF ;SND_P: DB #FF
SND_A: DW #C000 SND_A: DW #C000
IF YesSound
SND_STOP: SND_STOP:
; ®áâ ­®¢¨âì ¬ã§ëªã ; ®áâ ­®¢¨âì ¬ã§ëªã
PUSH AF PUSH AF
@ -1320,7 +1274,7 @@ SND_OUT_S:
DJNZ SND_OUT_S DJNZ SND_OUT_S
LD A,#C9 ; § ¡¨âì ¢®§¢à â ¢ ¯à®£à ¬¬ã ¨£à ­¨ï ¬ã§ëª¨ LD A,#C9 ; § ¡¨âì ¢®§¢à â ¢ ¯à®£à ¬¬ã ¨£à ­¨ï ¬ã§ëª¨
LD (MemPatch_SoundOnOff),A LD (SoundOnOff),A
POP BC POP BC
POP AF POP AF
@ -1331,7 +1285,7 @@ SND_CONTINUE: ;
PUSH BC PUSH BC
LD A,0 ; § ¡¨âì NOP ¢ ¯à®£à ¬¬ã ¨£à ­¨ï ¬ã§ëª¨ LD A,0 ; § ¡¨âì NOP ¢ ¯à®£à ¬¬ã ¨£à ­¨ï ¬ã§ëª¨
LD (MemPatch_SoundOnOff),A LD (SoundOnOff),A
POP BC POP BC
POP AF POP AF
@ -1354,36 +1308,29 @@ SND_INIT:
; LD (SND_P),A ; LD (SND_P),A
LD A,0 LD A,0
LD (MemPatch_SoundOnOff),A LD (SoundOnOff),A
LD B,0 LD B,0
IN A,(SLOT3) IN A,(SLOT3)
LD E,A LD E,A
JR SND_INIT1 JR SND_INIT1
ENDIF
SOUND: SOUND:
IF !YesSound SoundOnOff:
; PUSH AF
; CALL KBD_INT
; POP AF
RET
ENDIF
;
IF YesSound
MemPatch_SoundOnOff EQU $
NOP ; á ¢áâ ¢«ï¥âáï ª®¬ ­¤  RET ¤«ï ®âª«î祭¨ï §¢ãª  ¨ NOP ¤«ï ¢ª«î祭¨ï NOP ; á ¢áâ ¢«ï¥âáï ª®¬ ­¤  RET ¤«ï ®âª«î祭¨ï §¢ãª  ¨ NOP ¤«ï ¢ª«î祭¨ï
SoundOnOff2:
NOP
PUSH AF PUSH AF
PUSH HL PUSH HL
SND_MORE: SND_MORE:
CALL KBD_INT CALL KBD_INT
IN A,(#FE) IN A,(#FE)
; ;
COV_ADR+1:
XOR 0 ; covox  ¤à¥á XOR 0 ; covox  ¤à¥á
COV_ADR EQU $-1
; ;
AND #80 AND #80
JP NZ,NO_LD_SND JP NZ,NO_LD_SND
@ -1401,8 +1348,14 @@ COV_ADR EQU $-1
IN A,(SLOT3) IN A,(SLOT3)
LD E,A LD E,A
MemPatch_D2_FRAM_SndPage EQU $+1
LD A,0
;!FIXIT DEBUG
; LD A,COLORS.CGA.BORDER.CYAN
; OUT (BorderColor),A
;
LD A,CBL.BUFFER_PAGE
OUT (SLOT3),A OUT (SLOT3),A
L_DDX: L_DDX:
@ -1419,6 +1372,13 @@ L_DDX:
DEC D DEC D
JR NZ,L_DDX JR NZ,L_DDX
;!FIXIT DEBUG
; LD A,COLORS.CGA.BORDER.BLACK
; OUT (BorderColor),A
;
LD (SND_A),HL LD (SND_A),HL
LD A,H LD A,H
@ -1426,7 +1386,6 @@ L_DDX:
JP NZ,NO_SNDP JP NZ,NO_SNDP
SND_INIT1: SND_INIT1:
PUSH IX PUSH IX
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
@ -1473,7 +1432,7 @@ SND_INIT1:
;_------[—⥭¨¥ ᥪâ®à®¢ á ¤¨áª ]------- ;_------[—⥭¨¥ ᥪâ®à®¢ á ¤¨áª ]-------
NO_NEW_COUNT: NO_NEW_COUNT:
LD HL,-SND_READ_SECTORS*512 ; ¡ãä¥à ¤«ï ¤ ­­ëå LD HL,-SND_READ_SECTORS*512 ; ¡ãä¥à ¤«ï ¤ ­­ëå
LD A,0 ; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000 LD A,CBL.BUFFER_PAGE ; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000
LD DE,(SND_S1) ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  Œ« ¤è ï ç áâì LD DE,(SND_S1) ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  Œ« ¤è ï ç áâì
LD IX,(SND_S2) ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ‘â àè ï ç áâì LD IX,(SND_S2) ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ‘â àè ï ç áâì
LD B,SND_READ_SECTORS ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢ LD B,SND_READ_SECTORS ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
@ -1510,7 +1469,6 @@ NO_NEW_COUNT:
LD (SND_A),HL LD (SND_A),HL
NO_SNDP: NO_SNDP:
LD A,B LD A,B
CPL CPL
LD (COV_ADR),A LD (COV_ADR),A
@ -1529,22 +1487,16 @@ NO_LD_SND:
POP HL POP HL
POP AF POP AF
RET RET
ENDIF
; ; YesSoundZero:
IF !YesSound ; PUSH AF
YesSoundZero: ; PUSH HL
PUSH AF ; CALL KBD_INT
PUSH HL ; POP HL
CALL KBD_INT ; POP AF
POP HL ; RET
POP AF
RET
ENDIF
EFFECTS: EFFECTS:
IF !YesSound
RET
ENDIF
LD DE,(EFF_) LD DE,(EFF_)
LD A,D LD A,D
CP #C0 CP #C0
@ -1571,7 +1523,6 @@ EFF_LOOP:
LD (EFF_),DE LD (EFF_),DE
EX AF,AF' EX AF,AF'
OUT (SLOT2),A OUT (SLOT2),A
RET RET
;*************************************** ;***************************************
@ -1582,7 +1533,7 @@ CLEAR_Z_BUFER:
OUT (SLOT3),A OUT (SLOT3),A
LD A,0 LD A,0
OUT (RGADR),A OUT (PORT_Y),A
LD DE,(SCREEN_1) LD DE,(SCREEN_1)
ACC_SetBlockSize ACC_SetBlockSize
@ -1733,7 +1684,6 @@ TAB_ANGLE:
DB -1 , 1 DB -1 , 1
DB -1 , 1 DB -1 , 1
DB 0 , 1 ; 0 DB 0 , 1 ; 0
TAB_ANGLE2: TAB_ANGLE2:
DB 0 , 2 ; 0 DB 0 , 2 ; 0
DB 1 , 2 ; 22 DB 1 , 2 ; 22
@ -1751,12 +1701,9 @@ TAB_ANGLE2:
DB -2 , 1 DB -2 , 1
DB -2 , 2 DB -2 , 2
DB -1 , 2 ; 0 DB -1 , 2 ; 0
TAB_ANGLE3: TAB_ANGLE3:
DB 4 , 2 ; 67 DB 4 , 2 ; 67
DB 4 , 1 ; 67 DB 4 , 1 ; 67
DB 4 , 0 ; 90 DB 4 , 0 ; 90
DB 4 , -1 ; 112 DB 4 , -1 ; 112
DB 4 , -2 ; 135 DB 4 , -2 ; 135
@ -1765,7 +1712,6 @@ TAB_ANGLE3:
DB 3 , -4 ; 157 DB 3 , -4 ; 157
DB 2 , -4 ; 157 DB 2 , -4 ; 157
DB 1 , -4 ; 157 DB 1 , -4 ; 157
DB 0 , -4 ; 180 DB 0 , -4 ; 180
DB -1 , -4 DB -1 , -4
DB -2 , -4 DB -2 , -4
@ -1774,7 +1720,6 @@ TAB_ANGLE3:
DB -4 , -3 DB -4 , -3
DB -4 , -2 DB -4 , -2
DB -4 , -1 DB -4 , -1
DB -4 , 0 DB -4 , 0
DB -4 , 1 DB -4 , 1
DB -4 , 2 DB -4 , 2
@ -1783,7 +1728,6 @@ TAB_ANGLE3:
DB -3 , 4 ; 0 DB -3 , 4 ; 0
DB -2 , 4 ; 0 DB -2 , 4 ; 0
DB -1 , 4 ; 0 DB -1 , 4 ; 0
DB 0 , 4 ; 0 DB 0 , 4 ; 0
DB 1 , 4 ; 0 DB 1 , 4 ; 0
DB 2 , 4 ; 22 DB 2 , 4 ; 22
@ -1869,7 +1813,6 @@ A_NO_ADD2:
; H - Y-ª®®à¤¨­ â  ; H - Y-ª®®à¤¨­ â 
MONSTR_ALL1: MONSTR_ALL1:
LD A,L LD A,L
ADD A,A ADD A,A
ADD A,A ADD A,A
@ -1926,21 +1869,18 @@ MONST_H1:
LD (IX+M_HOR),L ; 㣮« LD (IX+M_HOR),L ; 㣮«
LD (IX+M_HOR+1),H LD (IX+M_HOR+1),H
LD DE,128 ; LD DE,128 ; € çñ¡ ­¥ ã¯à®áâ¨âì â ª:
ADD HL,DE ; ADD HL,DE ; LD DE,256+320-128
; LD DE,256+320 ; SBC HL,DE
LD DE,256+320 ; AND A ; ¨ ¢áñ... HL ¬®¦¥â ¯¥à¥¯®«­ïâìáï ¯à¨ ADD 128? - ­¥â
AND A ; SBC HL,DE ; ; ¯à®¢¥àª  ¯®¯ ¤ ­¨ï ¬®­áâà  ¢ 㣮« §à¥­¨ï
LD DE,256+320-128
SBC HL,DE ; ¯à®¢¥àª  ¯®¯ ¤ ­¨ï ¬®­áâà  ¢ 㣮« §à¥­¨ï SBC HL,DE ; ¯à®¢¥àª  ¯®¯ ¤ ­¨ï ¬®­áâà  ¢ 㣮« §à¥­¨ï
CALL C,WALL CALL C,WALL
IF YesSound
CALL SOUND CALL SOUND
; ELSE
; CALL YesSoundZero
ENDIF
NO_M_OUT: NO_M_OUT:
call MONSTR_NEXT_P call MONSTR_NEXT_P
@ -1953,14 +1893,14 @@ MONSTR_NEXT_P:
RET NZ RET NZ
LD A,(IX+M_VAR2) ; áç¥â稪 横«  LD A,(IX+M_VAR2) ; áç¥â稪 横« 
AND 0Fh AND #0F
RLCA RLCA
RLCA RLCA
RLCA RLCA
RLCA RLCA
ADD A,(IX+M_VAR2) ; ¤®¡ ¢¨âì ¬« ¤è¨© ¡ ©â ª áâ à襬ã ADD A,(IX+M_VAR2) ; ¤®¡ ¢¨âì ¬« ¤è¨© ¡ ©â ª áâ à襬ã
LD (IX+M_VAR2),A LD (IX+M_VAR2),A
AND 0F0h AND #F0
RET NZ ; ¢¥à­ãâìáï, ¥á«¨ ­¥ 0 RET NZ ; ¢¥à­ãâìáï, ¥á«¨ ­¥ 0
; JR NC,NO_ADD_MX ; JR NC,NO_ADD_MX
@ -2013,15 +1953,15 @@ CONT_MONS:
LD A,(IX+M_ADR+1) ; ¯¥à¥ª«îç â¥«ì  ¤à¥á  LD A,(IX+M_ADR+1) ; ¯¥à¥ª«îç â¥«ì  ¤à¥á 
ADD A,(IX+M_VAR4) ; ᪮«ìª® ¤®¡ ¢«ïâì ADD A,(IX+M_VAR4) ; ᪮«ìª® ¤®¡ ¢«ïâì
AND 3Fh AND #3F
OR 40h OR #40
LD (IX+M_ADR+1),A LD (IX+M_ADR+1),A
CP 40h ; ¯à¨§­ ª § ¢¥à襭¨ï 横«  CP #40 ; ¯à¨§­ ª § ¢¥à襭¨ï 横« 
RET RET
SW_MONS: SW_MONS:
LD A,(IX+M_ADR) ; ¯¥à¥ª«îç â¥«ì  ¤à¥á  LD A,(IX+M_ADR) ; ¯¥à¥ª«îç â¥«ì  ¤à¥á 
ADD A,40H ADD A,#40
LD (IX+M_ADR),A LD (IX+M_ADR),A
AND A ; ¯à¨§­ ª § ¢¥à襭¨ï 横«  AND A ; ¯à¨§­ ª § ¢¥à襭¨ï 横« 
;NO_ADD_MX: ;NO_ADD_MX:
@ -2055,25 +1995,25 @@ NO_SAVE:
SAVE_HL: DW 0 SAVE_HL: DW 0
SAVE_P1: DW 0 SAVE_P1: DW 0
SAVE_P2: DW 0 SAVE_P2: DW 0
SAVE_RGA2: DB 0 ; SAVE_RGA2: DB 0
SAVE_PIC: SAVE_PIC:
IN A,(RGMOD) IN A,(SCREEN_SWITCH)
AND 1 AND 1
LD HL,0C040H LD HL,ScreenStartAddress
JR NZ,SET_1X JR NZ,SET_1X
LD HL,0C180H LD HL,ScreenStartAddress + #0140
SET_1X: SET_1X:
LD IX,TABLE_PIC LD IX,TABLE_PIC
LD A,(IX) LD A,(IX)
AND A AND A
RET Z RET Z
LD DE,08436h LD DE,#8436
SAVE_PIC_X: SAVE_PIC_X:
LD (SAVE_HL),HL ; Pic line LD (SAVE_HL),HL ; Pic line
IN A,(RGADR) IN A,(PORT_Y)
LD (SAVE_RGA2),A LD (SAVE_RGA2),A
LD C,SLOT2 LD C,SLOT2
@ -2087,7 +2027,7 @@ SAVE_PIC_X:
OUT (C),A ; Screen OUT (C),A ; Screen
LD A,#FF LD A,#FF
OUT (RGADR),A ; Line 1 OUT (PORT_Y),A ; Line 1
LD A,(IX) LD A,(IX)
OUT (SLOT2),A OUT (SLOT2),A
@ -2097,7 +2037,6 @@ NEXT_SV_LN:
LD B,160 LD B,160
LOOP_SV_PIC: LOOP_SV_PIC:
LD A,(HL) LD A,(HL)
LD (DE),A LD (DE),A
INC HL INC HL
@ -2116,24 +2055,25 @@ LOOP_SV_PIC:
INC IX INC IX
LD A,(IX) LD A,(IX)
OUT (SLOT2),A ; next page OUT (SLOT2),A ; next page
LD DE,8000h LD DE,#8000
NO_NEXT_PAGE: NO_NEXT_PAGE:
DJNZ LOOP_SV_PIC DJNZ LOOP_SV_PIC
; CALL SOUND ; CALL SOUND
IN A,(RGADR) IN A,(PORT_Y)
DEC A DEC A
OUT (RGADR),A OUT (PORT_Y),A
CP 0FFh CP #FF
JR NZ,NEXT_SV_LN JR NZ,NEXT_SV_LN
LD BC,(SAVE_P2) LD BC,(SAVE_P2)
OUT (C),B OUT (C),B
LD BC,(SAVE_P1) LD BC,(SAVE_P1)
OUT (C),B OUT (C),B
LD A,(SAVE_RGA2) SAVE_RGA2+1:
OUT (RGADR),A LD A,0
OUT (PORT_Y),A
RET RET

1416
DOOM2.asm

File diff suppressed because it is too large Load Diff

493
Music_4x.asm Normal file
View File

@ -0,0 +1,493 @@
;-----------------------------------------------------------------------
;!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 ;!HARDCODE
LDIR
EX AF,AF'
OUT (SLOT3),A
;[x] music and dirs
LD HL,SND_DIR
LD DE,Temp_Buffer
LD A,FAT_ATTR.DIRECTORY
LD BC,Dss.F_First.FATname
RST ToDSS
JR NC,.start_setup
;
LD A,#C9 ; RET opcode - disable music
LD (SoundOnOff2),A
RET
;
.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 DE,SYS_PAGE.MS_BPB+FAT_ID
LD HL,.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,(DE)
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> §¬¥à ᥪâ®à 
LD A,B
RL C
RLA
RL C
RLA
RL C
RLA
LD C,A
LD B,0 ; BC - ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
LD (SYS_PAGE.FilesPerSector),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 BC,0
LD D,B
LD (SYS_PAGE.SectorsPerCluster),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> §¬¥à ᥪâ®à 
; D = 0
LD H,D
LD L,D
LD E,D
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
LD D,A
XOR A
.NEXT_ADD3:
ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à 
ADC A,E
DEC D
JR NZ,.NEXT_ADD3
LD (SYS_PAGE.CLASTER_LEN),HL
LD B,E
LD C,A
LD (SYS_PAGE.CLASTER_LEN2),BC
;
; DE=0
EX DE,HL ;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 DE,(MSD_DATS.MSD_DAT_SEC2)
ADC HL,DE
;!TODO   ­ ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥ HL:IX?
RET
;-=-=-=-=-=-=-=-

@ -1 +1 @@
Subproject commit 95c15f46dcd79b9ea7f60eca0011152305fbc366 Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1