1
0
mirror of https://github.com/Tolik-Trek/DOOM2.git synced 2026-06-15 00:51:33 +03:00
DOOM2/DOOM2.asm
Anatoliy Belyanskiy 276d36e713 ...
2024-02-05 23:28:53 +10:00

1712 lines
30 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.

/*
;------------[<5B><EFBFBD>…„…œ!!!]------------
®¯â¨¬¨§¨à®¢ âì ¢ë¤¥«ï¥¬ë¥ ¡«®ª¨ ¯ ¬ïâ¨
¯à®¢¥àª  ­  ®è¨¡ª¨ ¯à¨ ¢ë§®¢¥ DSS ¨ BIOS
;---------------------------------------
*/
;
;---------------------------[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
;-----------------------------------------------------------------------
;
;
;-----------------------[Compilation parameters]------------------------
DEVICE ZXSPECTRUM4096 ; ¬®¤¥«ì á 4 ¬¥âà ¬¨ ¯ ¬ïâ¨
MMU 2 e, 0 ; ­ã«¥¢ ï áâà ­¨æ  ¢ ¡ ­ªã 2 ¨ ¯à®¢¥àª  ­  £à ­¨æë
OUTPUT './Build/DOOM2/doom2.exe'
;-----------------------------------------------------------------------
;
;
;-------------------------------[Includes]------------------------------
include 'Shared_includes/constants/SP2000.inc'
include 'Shared_includes/constants/dss_equ.inc'
include 'Shared_includes/constants/BIOS_equ.inc'
include 'Shared_includes/constants/standart_colors.inc'
include 'Shared_includes/macroses/accelerator.z80'
include 'Shared_includes/macroses/macros.z80'
;-----------------------------------------------------------------------
;
;
;-------------------------[Standart EQU section]------------------------
org_addr EQU #8000+CLP_Buffer
code_addr EQU BEGIN
stack_point EQU #BFFF
program_start EQU BEGIN
;-----------------------------------------------------------------------
;
TABLE_X EQU #A000 ; â ¡«¨æ  ª®í䍿¨¥­â®¢ ¢ëá®âë
TABLE_X_SIZE EQU #0800 ; ¥ñ à §¬¥à???
MONSTR_TABLE EQU #A800 ; â ¡«¨æ  ¬®­áâ஢
MONSTR_TABLE_SIZE EQU #1800 ; ¥ñ à §¬¥à???
TABLE_W EQU #2000 ; ⥪ã騥 ª àâë ¤«ï TRACE
; Code start section
;[]-------------------------------------------------------------------[]
IF EXE_HEADER
include 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
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 Load_Resources
IFDEF NEED_LOADER
Loader_length EQU $-BEGIN
ELSE
Loader_length EQU 0
ENDIF
;---------------------------------------
;-----[ˆ­¨æ¨ «¨§ æ¨ï 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
;
;-----------[§ £«ãè¨âì §¢ãª]------------
LD A,#FF ; !FIXIT à §¢¥ â ª ­ ¤® £«ãè¨âì? <20>¥ à㤨¬¥­âë Sp97?
1: CALL CLEAR_COVOX_X
DEC A
CP #80
JR NZ,1B
;---------------------------------------
;
; ENDIF
;---------------------------------------
; IN A,(SLOT3)
; PUSH AF
ld a,(RAMBlkIDs.resources)
ld (PalitrePage),a
ld a,(RAMBlkIDs.d2_fram)
ld (D2_FRAM_page),a
IF YesSound
;----[]
; ‡ ¯à è¨¢ ¥¬ áâà ­¨æã ¤«ï ª â «®£ 
; á®å࠭塞 ¥ñ ü ¢ ª®¤¥
;
; „Ž„…‹€’œ!!!
; ­ ¤® ¯®â®¬ ­®à¬ «ì­® ¢ë¤¥«ïâì ¨
; ®á¢®¡®¦¤ âì ¯ ¬ïâì,   ­¥ ¢®â íâ® ¢áñ
;
ld b,1
ld c,Dss.GetMem
rst ToDSS
LD (CatPage),a
;----[]
ENDIF
CALL CLEAR_GRAF_SCR
; IN A,(SLOT3)
; PUSH AF
; LD A,3
; OUT (SLOT3),A
; LD HL,PALITRE
; LD DE,#C000
; LD BC,#0400
; LDIR
; POP AF
; OUT (SLOT3),A
CALL SET_PAL
;----[®âªàëâì ¯®àâë ¬ áèâ ¡¨à®¢ ­¨ï]----
; ®¤¨­ ¢­ãâ७­¨© ¯®àâ ¬ áèâ ¡¨à®¢ ­¨ï ¬ ¯¯¨âáï ­  ¤¨ ¯¯ §®­ #XX00
; ¢­¥è­¨å ¯®à⮢. Write, Dos off, CNF 0.
LD A,1
LD HL, %0000'0100'0000'0000 ; §­ ç¥­¨¥
LD DE, %1111'1110'0110'1111 ; ¬ áª 
LD BC,ACEX.SCALE*256 + BIOS.DCP_CONFIG
RST ToBIOS
; IN A,(SLOT3)
; EX AF,AF'
; LD A,DCP_PAGE
; OUT (SLOT3),A
; LD A,ACEX.SCALE
; LD (#C400),A ; ¯®àâ #XX00 Dos off
; LD (#C410),A ; ¯®àâ #XX00 Dos off
; LD (#C480),A ; ¯®àâ #XX00 Dos off
; LD (#C490),A ; ¯®àâ #XX00 Dos off
; LD (#C500),A ; ¯®àâ #XX00 Dos off
; LD (#C510),A ; ¯®àâ #XX00 Dos off
; LD (#C580),A ; ¯®àâ #XX00 Dos off
; LD (#C590),A ; ¯®àâ #XX00 Dos off
; EX AF,AF'
; OUT (SLOT3),A
; €ªâ¨¢ æ¨ï €ªá¥«ï ¬ áèâ ¡¨à®¢ ­¨ï, ®¡à â­® ⮫쪮 ç¥à¥§ à¥á¥â
LD BC,#100 ; C - ¬ áèâ ¡ 1:1
OUT (C),C
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
CALL MAIN
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; E)eeeeee X) xx I)iiii T)tttttt
; E) X) xx I) T)
; E)eeeee X)xx I) T)
; E) X)xx I) T)
; E) X) xx I) T)
; E)eeeeee X) xx I)iiii T)
;-----------------------------------------------------------------------
;----[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
;---------------------------------------
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)
CALL SET_PAL
IN A,(FastRAM.ON)
RET
SET_PAL:
;----[PIC_SET_PAL “áâ ­®¢ª  ¯ «¨âàë]----
; ‡­ ç¥­¨¥ ॣ¨áâ஢ ­  ¢å®¤¥:
; C=0A4h
; HL - ¤ ­­ë¥ ¯ «¨âàë:
; ᯨ᮪ 梥⮢ ¯® ç¥âëॠ¡ ©â  B,G,R,Y
; E - ­®¬¥à ­ ç «ì­®£® 梥â 
; D - ª®«¨ç¥á⢮ ãáâ ­ ¢«¨¢ ¥¬ëå æ¢¥â®¢
; B - ¬ áª  ¯à¨ ãáâ ­®¢ª¥ ¯ «¨âàë.
; „«ï ­®à¬ «ì­®£® ०¨¬  ¤®«¦­a
; ¡ëâì 0FFh
; A - ­®¬¥à ¯ «¨âàë 0..15;
; ®â 8 ¤® 15 - १¥à¢­ë¥
IN A,(SLOT3)
PUSH AF
PalitrePage+1:
LD A,#FF
OUT (SLOT3),A
LD HL,#C000
LD DE,0
LD A,0
LD B,#FF
LD C,BIOS.PIC_SET_PAL ; ãáâ ­®¢ª  ¯ «¨âàë
RST ToBIOS
;DI
LD HL,#C000
LD DE,0
LD A,1
LD B,#FF
LD C,BIOS.PIC_SET_PAL ; ãáâ ­®¢ª  ¯ «¨âàë
RST ToBIOS
;DI
POP AF
OUT (SLOT3),A
RET
;
;---[®ç¨á⪠ íªà ­  á⥪®¬ ¨  ªá¥«¥¬]---
CLEAR_GRAF_SCR:
IN A,(SLOT3)
PUSH AF
LD (SPSave2),SP
LD A,#50
OUT (SLOT3),A
XOR A
OUT (PORT_Y),A
LD SP,#C040 + 640
LD B,640/4
;!!!!!!!!!!![®¯â¨¬¨§¨à®¢ âì]!!!!!!!!!!!!
LOOP_CLS:
ACC_SetBlockSize
LD E,0
LD D,E
ACC_FillScreenOneByte
PUSH DE
PUSH DE
ACC_Off
DJNZ LOOP_CLS
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SPSave2+1:
LD SP,0
POP AF
OUT (SLOT3),A
RET
;----------------------------------------------------------------------;
; FOR ZX-ROM in SLOT0
; _2L_PRIKOL:
; LD A,7
; OUT (BorderColor),A
; XOR A
; OUT (PORT_Y),A
; LD A,2
; LD HL,#4000
; LD B,27
; CALL .pause_loop
; LD A,0
; LD HL#4000
; LD B,27
; CALL .pause_loop
; CALL #0D6B ; CLS
; LD HL,.TXT_SP
; CALL PRINT_LOOP
; RET
; .pause_loop:
; LD (HL),A
; INC L
; PUSH DE
; POP DE
; JR NZ,.pause_loop
; INC H
; DJNZ .pause_loop
; ;
; LD HL,#8000
; .loop: PUSH HL
; POP HL
; DEC HL
; LD A,H
; OR L
; JR NZ,.loop
; RET
; .PRINT_LOOP:
; LD A,(HL)
; INC HL
; CP #FF
; RET Z
; RST #10
; JR .PRINT_LOOP
; .TXT_SP: DB #7F," 1982 Sinclair Research Ltd.",#FF
;----------------------------------------------------------------------;
;
FLAG: DB 0
;SAVE_PORT_Y: DB 0
;
;
CLEAR_COVOX:
LD A,#80
CLEAR_COVOX_X:
LD BC,CBL.COVOX_OUT
; IF YesSound
CLEAR_CBL:
OUT (C),A
DJNZ CLEAR_CBL
; ENDIF
RET
;
;
CLEAR_SP_PAL:
IN A,(SLOT3)
PUSH AF
;
LD A,#50
OUT (SLOT3),A
;
LD B,61
.LOOP_PAL_ALL:
PUSH BC
LD BC,PORT_Y
.LOOP_PAL_C:
OUT (C),B
.RESES_ADR+1:
LD HL,#C3F0
;
LD D,16
;
.LOOP_PAL_D:
LD A,(HL)
RRA
RRA
RRA
RRA
RRA
AND 7
INC A
LD E,A
LD A,(HL)
SUB E
JR NC,.NO_Z
XOR A
.NO_Z: LD (HL),A
INC L
DEC D
JR NZ,.LOOP_PAL_D
;
CALL SOUND1
DJNZ .LOOP_PAL_C
;
CALL PAUSE_INT
;
POP BC
LD A,(LAST_KEY)
AND A
JR NZ,.NO_PAL_EXE
DJNZ .LOOP_PAL_ALL
.NO_PAL_EXE:
POP AF
OUT (SLOT3),A
RET
;
;
;
MAIN: CALL INIT_TABLE
RET C
; IN A,(PORT_Y)
; LD (SAVE_PORT_Y),A
LD A,#C0
OUT (PORT_Y),A
CALL RECALC_MAP
RET C ; ­ã¦­® «¨???!!!
;----!!!!!!!!!!!!!!!!!!!!!!!!!----------
;---------------------------------------
XOR A
LD (LAST_KEY),A
OUT (BorderColor),A
CALL CLEAR_SP_PAL
; !FIXIT ¯¥à¥¤¥« âì «®£¨ªã ¯®¤ ­®¢ë© ¡¨®á?
;---[ãáâ ­®¢ª  ᨭåàë, ®ç¨á⪠ íªà ­ ]--
LD A,2 ; ०¨¬ Pentagon - 320 áâப ¢ íªà ­¥
LD C,BIOS.FN_SYNC
RST ToBIOS
;---------------------------------------
;------[Žâªàë⨥ áâ ­¤ àâ­ëå ®ª®­]------
; ॣ¨áâà E - ä« £¨ ®ª­ 
; ¡¨â 0 - ª ªãî áâà ­¨æã ०¨¬  ¢ª«îç âì
; ¯®á«¥ ¨á¯®«­¥­¨ï ä㭪樨
; ¡¨â 4 - ­  ª ª®© áâà ­¨æ¥ ०¨¬ 
; ®âªà뢠âì ®ª­®
; HL - ¬¥áâ® ­  íªà ­¥ ¯® §­ ª®¬¥áâ ¬
; (ª®¯¨ï ¢ IX+2,3), ¢ ­®¢ëå ¢¥àá¨ïå
; ¡¨®á  §­ ç¥­¨¥ HL ­¥ áãé¥á⢥­­®
LD HL,#4000
LD E,1
LD B,8 ; £à ä¨ç¥áª®¥ ®ª­® 0, HL - ¯®«®¦¥­¨¥ ®ª­ 
LD C,BIOS.LP_OPEN_S
RST ToBIOS
LD HL,#5000
LD E,0
LD B,9 ; £à ä¨ç¥áª®¥ ®ª­® 1, HL - ¯®«®¦¥­¨¥ ®ª­ 
LD C,BIOS.LP_OPEN_S
RST ToBIOS
/*
LD A,Dss.SetVMod.grf320x256
LD BC,Dss.SetVMod.Screen_0
RST ToDSS
LD A,Dss.SetVMod.grf320x256
LD BC,Dss.SetVMod.Screen_1
RST ToDSS
;£à ä¨ç¥áª®¥ ®ª­® 0
PIC_320X256_1:
DB 40,32,0,0,32,0,08,0
DB 40,32,0,0,96,0,48,0
DB 40,32,0,0,32,0,00,0 ;4
DB 40,32,0,0,96,0,40,0 ;6
;£à ä¨ç¥áª®¥ ®ª­® 1
PIC_320X256_2:
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà ­
TAB_320x256_0
; 320x256. £à ä¨ç¥áª®¥, 1-© íªà ­
TAB_320x256_1
*/
;---------------------------------------
LD A,1
OUT (SCREEN_SWITCH),A
;----[¯¥à¥¡à®á ç á⨠ª®¤  ¢ FastRAM]----
IN A,(SLOT3)
PUSH AF
D2_FRAM_page+1:
LD A,#FF
OUT (SLOT3),A
IN A,(FastRAM.ON)
LD HL,#C000
LD DE,#1000
LD BC,D2_fram_END-TRACE
LDIR
; IFN NORM_syncPORT
; IM 2 ; ¢®â ⥯¥àì ¬®¦­® ¢ª«îç âì
; ENDIF
POP AF
OUT (SLOT3),A
;---------------------------------------
;
LD HL,#C3E0
LD (CLEAR_SP_PAL.RESES_ADR),HL
;
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; ‘âà ­­®¥ ¬¥áâ®. Œ®¦­® ¦¥ áà §ã ¢ ª®¤¥
; ¡ë«® í⮠ᤥ« âì ¨ ­¥ ¯¥à¥ª¨¤ë¢ âì
LD HL,PAUSE_SNDC
LD DE,PAUSE_SND
LD BC,3
LDIR
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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
LD (HL),A
DEC HL
CP (HL)
JR NZ,SOUND_S1
LD A,0
INC HL
LD (HL),A
SOUND_S1:
RLCA
RLCA
RLCA
RLCA
;
ADD A,low (NAMES+2)
LD E,A
LD A,0
RLA
ADD A,high (NAMES+2)
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
LD (X_SPEED),HL
LD HL,#0102
LD (Y_SPEED),HL
LD HL,#0200
LD (A_SPEED),HL
HELP_2:
CALL CLEAR_SP_PAL
LD A,6
CALL SET_PICTURE
CALL SCR_SWITCH
LD A,6
CALL PIC_ALL_MD
LD A,11
CALL PIC_ALL_MD
LD A,16
CALL PIC_ALL_MD
MORE_PIC_LK:
LD A,21
CALL SET_PICTURE
CALL SCR_SWITCH
CALL SET_PAL_x
LD B,240
PAUS_START:
DEC B
JR Z,DM_LOOP
CALL PAUSE_INT
LD A,(LAST_KEY)
AND A
JR Z,PAUS_START
LD B,0
LD C,A
XOR A
LD (LAST_KEY),A
LD A,C
CP 118
JR Z,MORE_PIC
CP 22
JR Z,DM_LOOP
CP 38
JR Z,SOUND_SWITCH
CP 9
JP Z,RETURN_POINT
CP 5
JP Z,HELP_
JR PAUS_START
HELP_:
CALL FIRE_X
LD HL,#0300
LD (X_SPEED),HL
LD HL,#0382
LD (Y_SPEED),HL
LD HL,#0500
LD (A_SPEED),HL
JR DM_LOOP
;SWITCH_XX_W:
; LD HL,XX_W1
; LD DE,XX_W2
; LD B,3
;SWITCH_XX_W1:
; LD A,(DE)
; LD C,(HL)
; LD (HL),A
; LD A,C
; LD (DE),A
; DJNZ SWITCH_XX_W1
; RET
PIC_ALL_MD:
CALL SET_PICTURE
CALL SCR_SWITCH
CALL SET_PAL_x
CALL CLEAR_SP_PAL
RET
DM_LOOP:
LD A,(LAST_KEY)
CP 118
JP Z,MORE_PIC_LK
; CP 37
; CALL Z,SWITCH_XX_W
; CALL CRAZY_WALL
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
SCR_SWITCH:
IN A,(SCREEN_SWITCH)
AND 1
XOR 1
OUT (SCREEN_SWITCH),A
LD DE,#C040
JR Z,SET_1
LD DE,#C180
SET_1:
LD (SCREEN_1),DE
RET
PAUSE_INT:
CALL SOUND1
; IF NORM_syncPORT
IN A,(SCR_SyncPort)
BIT 5,A
JR NZ,PAUSE_INT
PAUSE_INT1:
CALL SOUND1
IN A,(SCR_SyncPort)
BIT 5,A
RET NZ
JR PAUSE_INT1
; ELSE
; EI
; HALT
; ret
; ENDIF
PAUSE_SNDC:
JP SOUND
PAUSE_SND:
SOUND1:
RET
NOP
NOP
RET
;
MONSTR_DAT:
M_PAGE EQU $-MONSTR_DAT
DB 0 ; áâà ­¨æ  á ®¡é¨¬¨ ¤ ­­ë¬¨ ¬®­áâà  (ª à⨭ª¨)
; ¯à¨§­ ª ª®­æ  â ¡«¨æë ¬®­áâ஢
M_ADR EQU $-MONSTR_DAT
DW #4000 ;  ¤à¥á ¢ áâà ­¨æ¥
;
M_HIGH EQU $-MONSTR_DAT
DB #40 ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
;
M_HOR EQU $-MONSTR_DAT
DW 160 ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
;
M_VAR2 EQU $-MONSTR_DAT
DW 0008 ; áç¥â稪 ¯¥à¥ª«î祭¨©
;
M_XADD EQU $-MONSTR_DAT
DW #0100 ; x-add ¯ à ¬¥âàë
DB #40,#40 ; è¨à¨­ -¢ëá®â  ???
;
M_X EQU $-MONSTR_DAT
DW #0700 ; ª®®à¤¨­ â  X
;
M_Y EQU $-MONSTR_DAT
DW #0700 ; ª®®à¤¨­ â  Y
;
M_VX EQU $-MONSTR_DAT
DW 0000 ; ᪮à®áâì ¤¢¨¦¥­¨ï ¯® X
;
M_VY EQU $-MONSTR_DAT
DW 0000 ; ᪮à®áâì ¤¢¨¦¥­¨ï ¯® Y
;
M_TYPE EQU $-MONSTR_DAT
DW 0000 ; ⨯ ¬®­áâà  ã­¨ç⮦ ¥¬ë©, ­¥ã­¨ç⮦ ¥¬ë©
; ¨á祧 î騩 ¯à¨ 㤠ॠ® á⥭ªã, ­¥ ¨á祧 î騩
; ¨á祧 î騩 ¯à¨ ᮯਪ®á­®¢¥­¨¨ á ¨£à®ª®¬,
; ­¥ ¨á祧 î騩....
M_VAR EQU $-MONSTR_DAT
DB 0 ; <20>¥à¥¬¥­­ë¥ ª®­ªà¥â­®£® ¬®­áâà 
;
M_VAR3 EQU $-MONSTR_DAT
DB 0
; <20>¥à¥¬¥­­ ï ¬®­áâà  ¡¨â 0,1 - ¤¥«¥­¨¥ ¯® è¨à¨­¥
; bit 2 - ¯¥à¥ª«îç âì ¯® áâ à襬ã
; bit 3 -
; bit 4
; bit 5
; bit 6 - ¯®ª §ë¢ âì ®¤¨­ 横«
; bit 7 - ­¥ ¢ë¢®¤¨âì
;
M_VAR4 EQU $-MONSTR_DAT
DB 0 ; <20>¥à¥ª«î祭¨¥ ¬®­áâà  ADD ¯ à ¬¥âà
MONSTR_D_LEN EQU $-MONSTR_DAT ;á«¥¤ãî騩 ¬®­áâà
DB 0 ; - ®âáãâáâ¢ã¥â
;
;****************************************
; IX+0 - áâà ­¨æ  á⥭ª¨
; IX+1,2 -  ¤à¥á á⥭ª¨ ¢ áâà ­¨æ¥
; IX+3 - ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ - § ¤ ¥â ¬ áèâ ¡
; IX+4,5 - ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨
; IX+6,7 - reserved
; IX+8,9 - X-add-parameter (ª®í䍿¨¥­â ¬ áèâ ¡¨à®¢ ­¨ï ¯® Y)
; IX+10 - ॠ«ì­ ï è¨à¨­  á⥭ª¨ ???
; IX+11 - ॠ«ì­ ï ¢ëá®â  á⥭ª¨ ???
WALL_DATS:
DB 0
DW #4000
DB #40
DW #00A0 ; 160
DB 0,0
MONSTR_DATS:
DB 0,0,0,0,0,0,0,0
;
; **************************************
;
;CAT_PAGE EQU 15
EFF_PAGE: DB #FF
PAGE_M_PLACE: DB #FF
FIRE_PAGE: DB #FF
BAR_PAGE: DB #FF
BFGF_PAGE: DB #FF
MONSTR_END_T: DW MONSTR_TABLE
;=======================================================================
;=======================================================================
INCLUDE 'Music_4x.asm'
;=======================================================================
;=======================================================================
SKY_1: DB #FF
SKY_2: DB #FF
PAGE_WEAPON: DB #FF
;***************************************
;***************************************
MADE_FFING:
LD C,SLOT3
IN B,(C)
OUT (C),A
LD HL,#C000
NEXT_BYTE_:
LD A,(HL)
CP #F7
JR NZ,NO_FFING
LD (HL),0FFH
NO_FFING:
INC HL
BIT 7,H ;!!!!!¯à®¢¥àª  ­  ª®­¥æ áâà ­¨æë #C000-FFFF!!!!!
JR NZ,NEXT_BYTE_
OUT (C),B
RET
;***************************************
INIT_TABLE:
;----[GET_RAMD_ST]----------------------
; ¯®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª ,
; ­ §­ ç¥­­®£® ­  RAM-Disk
;
;----[—¨â ¥¬ ¯¥à¢ë© ¡«®ª â ¡«¨æ E:]-----; Tables disk Doom.trd
;--------------------------------------- !!!!! ‡ ¬¥­¨âì ª ç¥àâï¬ ­  á¢®î ¯®¤£à㧪㠡«®ª ¬¨!
LD A,(RAMBlkIDs.resources)
LD HL,TABLE_MAIN
ld c,BIOS.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  A
rst ToBIOS
RET C
; LD HL,TABLE_MAIN
; INC HL
; INC HL
; INC HL
; !TODO <20>â® £®¢­® ­ ¤® ®¯â¨¬¨§¨à®¢ âì ¨ à áª¨¤ë¢ âì ­®¬¥à  áâà ­¨æ áà §ã ¢ ª®¤
LD A,(TABLE_MAIN+3) ;!HARDCODE
LD (PAGE_WEAPON),A
; INC HL
;LD A,(HL)
LD A,(TABLE_MAIN+4) ;!HARDCODE
LD (SKY_1),A
;INC HL
LD A,(TABLE_MAIN+5) ;!HARDCODE
;LD A,(HL)
LD (SKY_2),A
;
LD HL,TABLE_MAIN+26
;LD A,26 ;!HARDCODE
;ADD A,L
;LD L,A
LD A,(HL)
LD (WALL_DATS),A
;
LD DE,MONSTR_DATS
LD B,7
NEXT_HL_FFING:
LD A,(HL)
LD (DE),A
PUSH HL
PUSH DE
PUSH BC
CALL MADE_FFING ; § ¬¥­  FF- ¬¨ ¯à®§à ç­ëå æ¢¥â®¢
POP BC
POP DE
POP HL
INC HL
INC DE
DJNZ NEXT_HL_FFING
LD A,(MONSTR_DATS)
LD (MONSTR_DAT+M_PAGE),A
LD A,(MONSTR_DATS+5)
LD (FIRE_PAGE),A
LD A,(MONSTR_DATS+6)
LD (BAR_PAGE),A
;LD HL,TABLE_MAIN
;LD A,35
;ADD A,L
;LD L,A
LD A,(TABLE_MAIN+35)
LD (BFGF_PAGE),A
CALL MADE_FFING
LD A,(PAGE_WEAPON)
CALL MADE_FFING
;LD HL,TABLE_MAIN
;LD A,33
;ADD A,L
;LD L,A
LD A,(TABLE_MAIN+33)
LD (EFF_PAGE),A ; §¢ãª ¢ëáâ५ 
; LD HL,TABLE_MAIN
; LD A,34
; ADD A,L
; LD L,A
LD A,(TABLE_MAIN+34)
LD (PAGE_M_PLACE),A ; â ¡«¨æ  á 㣫 ¬¨ ¤«ï ¬®­áâ஢
;--_[—¨â ¥¬ ç¥â¢ñàâë© ¡«®ª â ¡«¨æ H:]---; Tables disk my_tab*.*
/*
LD A,3 ;2 ; ¯®å®¤ã, ª àâ  ã஢­ï ¨ ¥éñ çâ®-â®
LD C,0CEH ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ¡«®ª  ®â à ¬¤¨áª 
RST ToBIOS
ret c
;---------------------------------------
*/
ld a,(RAMBlkIDs.d2_table)
LD HL,TABLE_TRACE
ld c,BIOS.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  A
rst ToBIOS
RET C
LD A,B
;
CP 33
CCF
RET C
;CP 32
;SCF
;RET NZ
;
;
;----[—¨â ¥¬ âà¥â¨© ¡«®ª â ¡«¨æ G:]-----; Tables disk mapw*.d2
/*
LD A,2 ;1 ; à ¬¤¨áª á⥭®ª
LD C,0CEH ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ¡«®ª  ®â à ¬¤¨áª 
RST ToBIOS
ret c
;---------------------------------------
*/
ld a,(RAMBlkIDs.map_wall)
LD HL,TABLE_WALL
ld c,BIOS.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  A
rst ToBIOS
RET C
LD A,B
CP 17
CCF
RET C ; B - à §¬¥à à ¬¤¨áª 
DEC A
LD (MAP_ELS),A ; ç¨á«® á⥭®ª
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/*
XOR A
LD (TABLE_PIC),A
RET
*/
;----[—¨â ¥¬ ¯¥à¢ë© ¡«®ª â ¡«¨æ F:]-----; Tables disk *.XXX - ä ©« áªà¨­è®â  81920 ¡ ©â
/*
LD A,4
LD C,BIOS.GET_RAMD_ST
RST ToBIOS
JR NC,1F
*/
XOR A
LD (TABLE_PIC),A
AND A
RET
/*
1:
LD HL,TABLE_PIC
LD C,BIOS.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª 
RST ToBIOS
AND A
RET
; ;!!!!!!!ᤥ« âì á®åà ­¥­¨¥ áªà¨­è®â®¢
; LD A,4
; LD C,BIOS.GET_RAMD_ST ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ¡«®ª  ®â à ¬¤¨áª 
; RST ToBIOS
; AND A
; JR NZ,PIC_FOR_SAVE
; XOR A
; LD (TABLE_PIC),A
; AND A
; RET
;
;PIC_FOR_SAVE:
; LD HL,TABLE_PIC
; LD C,BIOS.GetMemBlkPages ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  A
; RST ToBIOS
; XOR A
; RET
*/
;***************************************
BLOCK #8700-$,0 ;<E2809A><E282AC>ˆ<E2809A>ˆ
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; âãâ ¢ëà ¢­¨¢ ­¨¥ ­  0 ¢ ¬« ¤è¥¬
; ¡¨â¥  ¤à¥á 
TABLE_MAIN: DS 37 ; ¡ãä¥à ¯®¤ áâà ­¨æë ä ©«  resurses.res +1
TABLE_PIC: DS 6
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;-------[§ £à㧪  à¥áãàᮢ ¨£àë]--------
Load_Resources:
in a,(SLOT3)
ld (.SavePage),a
LD HL,RAMBlkIDs
LD DE,FilesTBL
LD B,FilesTBL.END
.LR_loop:
PUSH BC ;++áçñâ稪
PUSH HL ;++¡ãä¥à ¯®¤ BlockID
ex de,hl
ld b,(hl) ; FilesTBL
inc hl
ld (.FileName),hl
; B - à §¬¥à ¡«®ª  ¢ áâà ­¨æ å
ld c,Dss.GetMem
rst ToDSS
; A - ¨¤¥­â¨ä¨ª â®à ¡«®ª  ¯ ¬ïâ¨
pop hl ;--¡ãä¥à ¯®¤ BlockID
ld (hl),a
inc hl
push hl ;++¡ãä¥à ¯®¤ BlockID
; A - ¨¤¥­â¨ä¨ª â®à ¡«®ª 
ld hl,Temp_Buffer
ld c,BIOS.GetMemBlkPages
rst ToBIOS
; B - ç¨á«® áâà ­¨æ ¢ ¡«®ª¥
; HL -  ¤à¥á ¡ãä¥à , ¢ ¡ãä¥à¥ ᯨ᮪
; 䨧¨ç¥áª¨å áâà ­¨æ ¯® ¯®à浪ã,
; § ª ­ç¨¢ î騩áï ¡ ©â®¬ 0FFh
push hl ;++¡ãä¥à ᮠᯨ᪮¬ áâà ­¨æ
push bc ;++᪮«ìª® áâà ­¨æ £à㧨¬
.FileName+1:
ld hl,0
ld a,1
ld c,Dss.Open
rst ToDSS
ld (.TempFileID),a
pop bc ;--᪮«ìª® áâà ­¨æ £à㧨¬
pop hl ;--¡ãä¥à ᮠᯨ᪮¬ áâà ­¨æ
;---[ç¨â ¥¬]
.readloop:
ld a,(hl)
out (SLOT3),a
inc hl
push hl ;++¡ãä¥à ᮠᯨ᪮¬ áâà ­¨æ
push bc ;++᪮«ìª® áâà ­¨æ £à㧨¬
.TempFileID+1:
ld a,#FF ; ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
LD HL,#C000 ;  ¤à¥á ¢ ¯ ¬ïâ¨
LD DE,#4000 ; ª®«¨ç¥á⢮ ç¨â ¥¬ëå ¡ ©â
LD C,Dss.Read
RST ToDSS
;DI
pop bc ;--᪮«ìª® áâà ­¨æ £à㧨¬
pop hl ;--¡ãä¥à ᮠᯨ᪮¬ áâà ­¨æ
DJNZ .readloop
;---[]
;---[§ ªà뢠¥¬]
ld a,(.TempFileID)
ld c,Dss.Close
rst ToDSS
;---[]
ld de,(.FileName)
ld hl,13
add hl,de
ex de,hl
POP HL ;--¡ãä¥à ¯®¤ BlockID
POP BC ;--áçñâ稪
DJNZ .LR_loop
;-[à §®¡à âìáï á â ¡«¨æ ¬¨!!!]-
ld hl,TABLE_X_file
ld a,1
ld c,Dss.Open
rst ToDSS
push af
LD HL,TABLE_X ;  ¤à¥á ¢ ¯ ¬ïâ¨
LD DE,TABLE_X_SIZE ; ª®«¨ç¥á⢮ ç¨â ¥¬ëå ¡ ©â
LD C,Dss.Read
rst ToDSS
pop af
ld c,Dss.Close
rst ToDSS
; ld hl,MONSTR_TABLE_file
; ld a,1
; ld c,Dss.Open
; rst ToDSS
; push af
; LD HL,MONSTR_TABLE ;  ¤à¥á ¢ ¯ ¬ïâ¨
; LD DE,MONSTR_TABLE_SIZE ; ª®«¨ç¥á⢮ ç¨â ¥¬ëå ¡ ©â
; LD C,Dss.Read
; rst ToDSS
; pop af
; ld c,Dss.Close
; rst ToDSS
;di
;------------------------------
.SavePage+1:
ld a,0
out (SLOT3),a
;
; LD HL,CURRENT_DIR
; LD C,Dss.CurDir
; RST ToDSS
;
LD C,Dss.CurDisk
RST ToDSS
LD (INIT_HDD_WORK.currentDisk),A
;
RET
;Temp_Buffer: BLOCK 256,#FF
TABLE_X_file: db 'table_x.tbl',0
;MONSTR_TABLE_file: db 'monsters.tbl',0
;-------[’ ¡«¨æ  § £à㧪¨ ä ©«®¢]-------
; ¤«¨­  ¢ áâà ­¨æ å 01 ¡ ©â
; ¨¬ï ä ©«  13 ¡ ©â
; ¥á«¨ ¨¬ï ä ©«  < 12 ᨬ¢®«®¢,
; â® ¤®¡¨âì ­ã«ï¬¨ ¤® 12
FilesTBL:
DZ 36,'resource.res' ;0 Disk E:
DZ 16,'map_wall.res' ;1
DZ 32,'d2_table.tbl' ;2
DZ 01,'d2_fram.bin',0 ;3
.END EQU ($-FilesTBL)/14 ; ª®«¨ç¥á⢮ ä ©«®¢
RAMBlkIDs: BLOCK FilesTBL.END,0
.resources EQU RAMBlkIDs+0
.map_wall EQU RAMBlkIDs+1
.d2_table EQU RAMBlkIDs+2
.d2_fram EQU RAMBlkIDs+3
;---------------------------------------
;
DS #8B00-$ ;<E2809A><E282AC>ˆ<E2809A>ˆ
RECALC_MAP:
; ¯¥à¥áç¥â ª àâë ­  ॠ«ì­ë¥ ­®¬¥à 
; áâà ­¨æ á⥭®ª
LD IX,MONSTR_TABLE
LD HL,#4000
IN A,(SLOT1)
PUSH AF
LD A,(TABLE_WALL)
OUT (SLOT1),A
LD A,(HL)
CP '1'
JR NZ,NO_PROCESS
RECALC_X:
LD IX,MONSTR_TABLE
RECALC_M2:
LD A,(HL) ; ª®¤ á⥭ª¨
BIT 4,H
JR Z,NO_PRP ; ¯à®¢¥à¨âì, ª ªãî â ¡«¨æã ¯¥à¥áç¨â뢠¥¬
BIT 5,H
JR Z,NO_PRP ; ¥á«¨ ­¥ 4-î, â® ¨¤â¨ ¤ «ìè¥, ¨­ ç¥
; - íâ® â ¡«¨æ  ¯à¥¯àïâá⢨©
RECALC_M2X:
LD A,(HL) ; ª®¤ á⥭ª¨
CP 'S' ; #53
JR Z,ZERO_PRP
SUB ' '
JR Z,ZERO_PRP
LD A,#5F ; ¯à¥¯ïâá⢨¥
JR ONE_PRP
ZERO_PRP:
XOR A
ONE_PRP:
LD (HL),A
INC L
JR NZ,RECALC_M2X
INC H
LD A,H
AND #0F
JR NZ,RECALC_M2X
JR NO_PROCESS ; § ª®­ç¨âì
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; ‘¤¥« âì ãá«®¢¨¥ ­  ¬ ªá¨¬ «ì­®¥ ª®«-¢®
; "¬®­áâ஢" ¯à¨ § ¯®«­¥­¨¨ â ¡«¨æë ¯®
; LDIR ¢ ¯à®æ¥¤ãॠMONSTR_POS, ç⮡ ­¥
; § «¥§âì ­  á⥪ ¨«¨ ¤ «ìè¥ áâà ­¨æë.
; MAX_IX < (ST_Point-MaxStackSize-MONSTR_D_LEN)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NO_PRP:
LD A,(HL) ; ª®¤ á⥭ª¨
CP 'S' ; ¬¥áâ® áâ àâ ?
CALL Z,START_POS
CP 'M' ; ¬®­áâà
CALL Z,MONSTR_POS
CP 'N' ; ®£­¨
CALL Z,MONSTR_POS1
CP 'O' ; ¡®çª¨
CALL Z,MONSTR_POS2
CP 'P' ; ®£®­ì bfg
CALL Z,MONSTR_POS3
SUB #20
JR Z,ZERO_WOLL
SUB #10
JR C,ZERO_WOLL
MAP_ELS+1:
CP 15
;
JR NC,ZERO_WOLL
PUSH HL
PUSH BC
LD HL,TABLE_WALL
INC A
LD C,A
LD B,0
ADD HL,BC
LD A,(HL)
; LD A,(TABLE_WALL+1)
POP BC
POP HL
JR NO_ZERO_W
ZERO_WOLL:
XOR A ; § ¡¨¢ âì ­ã«ï¬¨
BIT 4,H
JR NZ,NO_ZERO_W
DEC A ; § ¡¨¢ âì FF- ¬¨
NO_ZERO_W:
LD (HL),A
INC L
JR NZ,NO_PRP
INC H
LD A,H
AND #0F
JR NZ,NO_PRP
LD A,H
CP #50
JR NZ,NO_ST
LD (MONSTR_END_T),IX ; ª®­¥æ â ¡«¨æë ¬®­áâ஢
NO_ST:
LD A,H
CP #80
JR NZ,RECALC_X
NO_PROCESS:
POP AF
OUT (SLOT1),A
AND A
RET
START_POS:
PUSH HL
PUSH AF
ADD HL,HL
ADD HL,HL
LD A,L
; ADD A,A
; ADD A,A
ADD A,2
LD (X_COORD+1),A
; RL L
; RL H
; RL L
; RL H
LD A,H
ADD A,A
ADD A,A
ADD A,2
LD (Y_COORD+1),A
POP AF
POP HL
RET
MONSTR_POS1:
; ä ª¥«ë
CALL MONSTR_POS
PUSH AF
LD A,(FIRE_PAGE)
LD (IX-MONSTR_D_LEN+M_PAGE),A
LD A,6 ; ¤¥«¨âì è¨à¨­ã ­  4 ¨ ¯¥à¥ª«îç âì ¯®
; áâ àè¥¬ã  ¤à¥áã
LD (IX-MONSTR_D_LEN+M_VAR3),A
LD A,10h
LD (IX-MONSTR_D_LEN+M_VAR4),A
LD A,0
LD (IX-MONSTR_D_LEN+M_VAR2),A ; £®à¥âì ¡ëáâ॥ ¢á¥å
POP AF
RET
MONSTR_POS2:
; ¡®çª¨
CALL MONSTR_POS
PUSH AF
LD A,(BAR_PAGE)
LD (IX-MONSTR_D_LEN+M_PAGE),A
LD A,5 ; ¤¥«¨âì è¨à¨­ã ­  2, ¯¥à¥ª«îç âì
; ¯® áâ àè¥¬ã  ¤à¥áã
LD (IX-MONSTR_D_LEN+M_VAR3),A
LD A,20h
LD (IX-MONSTR_D_LEN+M_VAR4),A
LD A,4
LD (IX-MONSTR_D_LEN+M_VAR2),A ; £®à¥âì ¡ëáâ॥ ¢á¥å
POP AF
RET
MONSTR_DELET:
; 㤠«¥­¨¥ ¬®­áâà 
; IX - ­  㤠«ï¥¬®¬ ¬®­áâà¥
PUSH IX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH IX ; ªã¤  ª¨¤ âì
POP DE
LD HL,MONSTR_D_LEN
ADD HL,DE ; ®âªã¤  ª¨¤ âì
LOOP_DEL:
LD A,(HL) ; ¯à¨§­ ª ­ «¨ç¨ï ¬®­áâà 
AND A
JR Z,NO_LDIR
LD BC,MONSTR_D_LEN
LDIR ; ¯¥à¥ª¨­ãâ ®¤¨­ ¬®­áâà
JR LOOP_DEL
NO_LDIR:
LD (MONSTR_END_T),DE
XOR A
LD (DE),A
POP AF
POP BC
POP DE
POP HL
POP IX
RET
MONSTR_BFG_INS:
; ¢áâ ¢¨âì ¢ â ¡«¨æã ¬®­áâ஢
; RET
PUSH IX
PUSH AF
PUSH HL
PUSH DE
; ®£­¥­­ë© è à FIRE
LD IX,(MONSTR_END_T) ; ¢§ïâì ª®­¥æ â ¡«¨æë ¬®­áâ஢
CALL MONSTR_POS ; ¨­¨æ¨ «¨§¨à®¢ âì ­®¢®£® ¬®­áâà 
CALL MONSTR_F_INI ; ¤«ï ®£­ï
LD A,(X_COORD+1) ; ª®®à¤¨­ âë ᮢ¯ ¤ îâ á ¨£à®ª®¬
LD (IX-MONSTR_D_LEN+M_X+1),A
LD A,(Y_COORD+1)
LD (IX-MONSTR_D_LEN+M_Y+1),A
LD HL,(ANGLE_R) ; 㣮« ¯®¢®à®â  ¨£à®ª 
ADD HL,HL
ADD HL,HL
ADD HL,HL ; x8
LD A,H
AND 3Eh
LD L,A
LD H,0
LD DE,TAB_ANGLE3+03Eh ; ¢§ïâì ¨§ â ¡«¨æë ¯® ­ ¯à ¢«¥­¨î
EX DE,HL
SBC HL,DE ; ᪮à®áâì ¤«ï FIRE
LD A,(HL)
LD (IX-MONSTR_D_LEN+M_VX+1),A
LD (IX-MONSTR_D_LEN+M_VX),0
INC HL
LD A,(HL)
LD (IX-MONSTR_D_LEN+M_VY+1),A
LD (IX-MONSTR_D_LEN+M_VY),0
LD (MONSTR_END_T),IX ; á®åà ­¨âì ­®¢ë© ª®­¥æ
POP DE
POP HL
POP AF
POP IX
RET
MONSTR_POS3:
CALL MONSTR_POS
MONSTR_F_INI:
PUSH AF
LD A,(BFGF_PAGE)
LD (IX-MONSTR_D_LEN+M_PAGE),A
LD A,8 ; è à ®£­ï, ¨á祧 î騩 ®â ¯à¥¯ïâá⢨ï
LD (IX-MONSTR_D_LEN+M_VAR3),A
LD A,10h
LD (IX-MONSTR_D_LEN+M_VAR4),A
LD A,0
LD (IX-MONSTR_D_LEN+M_VAR2),A ; £®à¥âì ¡ëáâ॥ ¢á¥å
LD A,-4
LD (IX-MONSTR_D_LEN+M_VX+1),A
POP AF
RET
MONSTR_POS:
; ¬®­áâàë
; ¯à ¢¨«ì­® «¨ ¯à®áâ ¢«ïîâáï ª®®à¤¨­ âë
; ¯®á«¥ LDIR,   ­¥ ¤® ­¥£®???
PUSH HL ; ª®¯¨à®¢ ­¨¥ â ¡«¨æë ¬®­áâà 
PUSH DE
PUSH BC
PUSH IX
POP DE
LD HL,MONSTR_DAT
LD BC,MONSTR_D_LEN
LDIR
POP BC
POP DE
POP HL
PUSH DE
PUSH HL
PUSH AF
ADD HL,HL
ADD HL,HL
LD A,L
ADD A,2
LD (IX+M_X+1),A
LD A,H
ADD A,A
ADD A,A
ADD A,2
LD (IX+M_Y+1),A
LD DE,MONSTR_D_LEN
ADD IX,DE
LD (IX),0 ; ®ç¥à¥¤­®© ª®­¥æ â ¡«¨æë
POP AF
POP HL
POP DE
RET
;
;***************************************
;---------------[Tables]----------------
ALIGN 2,0
;
TABLES_START:
X_COORD: DW 90*256
Y_COORD: DW 90*256
ANGLE_A: DW -160*32+#C000
ANGLE_R: DW 0
X_SPEED: DW #300
Y_SPEED: DW #302
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
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 "
;
;Up_Dir: DZ ".."
;
; IFN NORM_syncPORT
; im_handler_emul_proc_address:
; di
; push af
; call KBD_INT
; pop af
; reti
; BLOCK +(#FF - low $)
; im_handler_emulator:
; dw im_handler_emul_proc_address
; ENDIF
;
OUTEND ; ª®­¥æ ä ©«  doom2.exe
;-----------------------------------------------------------------------;
;------------------------------------
;CURRENT_DIR: BLOCK 257,0
;------------------------------------
Temp_Buffer EQU $
;
;
DISPLAY "DOOM2.EXE starts - ",/H,BEGIN
DISPLAY "DOOM2.EXE ends - ",/H,$
DISPLAY "DOOM2.EXE size - ",/H,$-BEGIN
;FRAM_PROG_1000H:
include 'D2_FRAM.asm'
;