mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-18 01:52:43 +03:00
432 lines
18 KiB
NASM
432 lines
18 KiB
NASM
;[]=========================================================================[]
|
|
;[] Žâ« ¤ª ª®¬ ¤ ¯à®£à ¬¬ë []
|
|
;[] v0.03 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 10.03.2006 []
|
|
;[] v0.10 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 18.03.2006 []
|
|
;[]=========================================================================[]
|
|
Step:
|
|
di
|
|
ld a,(WinPage+2) ;¡ ª ¯®¤ demon'®¬
|
|
ld (Rezident.Start1+1),a ;¢ १¨¤¥â ¥¥
|
|
ld (.BankP+1),a
|
|
ld a,(BankDebug) ;¡ ª á demon'®¬
|
|
ld (Rezident.BankD+1),a ;¢ १¨¤¥â ¥¥
|
|
ld (Rezident.BankD1+2),a
|
|
ld hl,Step.Run+3 ;â®çª ¢®§¢à â ¢ ®â« ¤ç¨ª
|
|
ld (Rezident.Return+1),hl ;¯à®¯¨áë¢ ¥¬ ¢ १¨¤¥â¥
|
|
ld a,l
|
|
ld (Rezident.Return1+2),a
|
|
ld a,h
|
|
ld (Rezident.Return1+7),a
|
|
ld hl,(Reg._PC)
|
|
ld (Rezident.Step+1),hl ; ¤à¥á ®â« ¦¨¢ ¥¬®© ª®¬ ¤ë
|
|
|
|
ld a,(Reg._AF) ;ä« £
|
|
ld b,a
|
|
call Ld_a_hl
|
|
; ld a,(hl) ;ª®¤ ª®¬ ¤ë
|
|
|
|
ld c,a
|
|
and 11001111b
|
|
cp 11000101b ;PUSH
|
|
call z,.SpdInc
|
|
cp 11000001b ;POP
|
|
call z,.SpdDec
|
|
|
|
ld a,c
|
|
cp 0xCD ;CALL
|
|
jr nz,.L7
|
|
ld a,(.Flag)
|
|
inc a
|
|
jp nz,.L2 ;¡¥§ § 室 ¢ ¯®¤¯à®£à ¬¬ã
|
|
jp .L8
|
|
.L7 cp 0xC9 ;RET
|
|
jp z,.L9
|
|
cp 0xC3 ;JP
|
|
jp z,.L8+3
|
|
cp 0x18 ;JR
|
|
jp z,.L6
|
|
cp 0x10 ;DJNZ
|
|
jr nz,.L18
|
|
ld a,(.Flag)
|
|
inc a
|
|
jp nz,.L2 ;¡¥§ ®â« ¤ª¨ 横«
|
|
ld a,(Reg._BC+1)
|
|
dec a
|
|
jr nz,.L6
|
|
jp .L2
|
|
.L18 inc hl ;á«¥¤ãî騩 ¡ ©â ᮬ ¤ë
|
|
exa
|
|
call Ld_a_hl
|
|
ld c,a
|
|
exa
|
|
; ld c,(hl)
|
|
dec hl
|
|
cp 0xED ;¯à¥ä¨ªá ¤«ï RETI, RETN
|
|
jr nz,.L10
|
|
ld a,c
|
|
cp 0x4D ;RETI
|
|
jp z,.L9
|
|
cp 0x45 ;RETN
|
|
jp z,.L9
|
|
.L10 cp 0xDD ;¯à¥ä¨ªá ¤«ï IX
|
|
jr nz,.L25
|
|
ld a,c
|
|
cp 0xE5 ;PUSH IX
|
|
call z,.SpdInc
|
|
cp 0xE1 ;POP IX
|
|
call z,.SpdDec
|
|
ld de,(Reg._IX)
|
|
jr .L24
|
|
.L25 cp 0xFD ;¯à¥ä¨ªá ¤«ï IY
|
|
jr nz,.L24-4
|
|
ld a,c
|
|
cp 0xE5 ;PUSH IY
|
|
call z,.SpdInc
|
|
cp 0xE1 ;POP IY
|
|
call z,.SpdDec
|
|
ld de,(Reg._IY)
|
|
jr .L24
|
|
ld de,(Reg._HL)
|
|
.L24 cp 0xE9 ;JP (HL/IX/IY)
|
|
jr nz,.L23
|
|
ex de,hl
|
|
jp .L2+3
|
|
.L23 cp 0x38 ;JR C,
|
|
jr nz,.L19
|
|
bit 0,b ;ä« £ C
|
|
jp z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L6 ;¯¥à¥å®¤
|
|
.L19 cp 0x30 ;JR NC,
|
|
jr nz,.L20
|
|
bit 0,b ;ä« £ C
|
|
jp nz,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L6 ;¯¥à¥å®¤
|
|
.L20 cp 0x28 ;JR Z,
|
|
jr nz,.L21
|
|
bit 6,b ;ä« £ Z
|
|
jp z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L6 ;¯¥à¥å®¤
|
|
.L21 cp 0x20 ;JR NZ,
|
|
jr nz,.L22
|
|
bit 6,b ;ä« £ Z
|
|
jp nz,.L2 ;¥â ¯¥à¥å®¤
|
|
|
|
.L6 inc hl
|
|
call Ld_a_hl
|
|
; ld a,(hl) ;ᬥ饨¥
|
|
inc hl
|
|
ld b,0
|
|
ld c,a
|
|
bit 7,a ;§ ª ç¨á«
|
|
jr z,$+11
|
|
neg
|
|
or a ;á¡à®á ä« £ C
|
|
ld c,a
|
|
sbc hl,bc ;®âà¨æ ⥫쮥 ᬥ饨¥
|
|
jp .L2+3
|
|
add hl,bc ;¯®«®¦¨â¥«ì®¥ ᬥ饨¥
|
|
jp .L2+3
|
|
|
|
.L22 and 11000111b
|
|
cp 11000111b ;RST x
|
|
jr nz,.L27
|
|
ld a,(.Flag)
|
|
inc a
|
|
jp nz,.L2 ;¡¥§ § 室 ¢ ¯®¤¯à®£à ¬¬ã
|
|
call .SpdInc
|
|
call Ld_a_hl
|
|
; ld a,(hl) ;¡ ©â ª®¬¤ë
|
|
and 00111000b ; ¤à¥á ¯¥à¥å®¤
|
|
ld h,0
|
|
ld l,a
|
|
jp .L2+3
|
|
.L27 cp 11000010b ;JP flag
|
|
jr z,.L26
|
|
cp 11000000b ;RET flag
|
|
jr z,.L26
|
|
cp 11000100b ;CALL flag
|
|
jr nz,.L2
|
|
ld a,(.Flag)
|
|
inc a
|
|
jr nz,.L2 ;¡¥§ § 室 ¢ ¯®¤¯à®£à ¬¬ã
|
|
.L26 call Ld_a_hl
|
|
; ld a,(hl) ;ª®¤ ª®¬ ¤ë
|
|
and 00111000b ;ä« £¨
|
|
jr z,.L11 ;JP/CALL/RET NZ,
|
|
cp 00001000b
|
|
jr z,.L12 ;JP/CALL/RET Z,
|
|
cp 00010000b
|
|
jr z,.L13 ;JP/CALL/RET NC,
|
|
cp 00011000b
|
|
jr z,.L14 ;JP/CALL/RET C,
|
|
cp 00100000b
|
|
jr z,.L15 ;JP/CALL/RET PO,
|
|
cp 00101000b
|
|
jr z,.L16 ;JP/CALL/RET PE,
|
|
cp 00110000b
|
|
jr z,.L17 ;JP/CALL/RET P,
|
|
bit 7,b ;JP/CALL/RET M, ä« £ S
|
|
jr z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L11 bit 6,b ;ä« £ Z
|
|
jr nz,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L12 bit 6,b ;ä« £ Z
|
|
jr z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L13 bit 0,b ;ä« £ C
|
|
jr nz,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L14 bit 0,b ;ä« £ C
|
|
jr z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L15 bit 2,b ;ä« £ P/V
|
|
jr nz,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L16 bit 2,b ;ä« £ P/V
|
|
jr z,.L2 ;¥â ¯¥à¥å®¤
|
|
jr .L5 ;¯¥à¥å®¤
|
|
.L17 bit 7,b ;ä« £ S
|
|
jr nz,.L2 ;¥â ¯¥à¥å®¤
|
|
|
|
.L5 call Ld_a_hl
|
|
; ld a,(hl) ;ª®¤ ª®¬ ¤ë
|
|
and 00000111b ;®âá«¥¤¨âì RET'ë
|
|
jr nz,.L8-4
|
|
.L9 call .SpdDec
|
|
ld hl,(Reg._SP) ;á⥪
|
|
dec hl
|
|
jr .L8+3
|
|
cp 00000010b ;®âá«¥¤¨âì JP
|
|
jr z,.L8+3
|
|
.L8 call .SpdInc
|
|
inc hl
|
|
call Ld_a_hl
|
|
ld b,a
|
|
; ld a,(hl)
|
|
inc hl
|
|
call Ld_a_hl
|
|
; ld h,(hl)
|
|
ld h,a
|
|
ld l,b
|
|
jr .L2+3
|
|
.L2 call List ;á«¥¤ãîé ï ª®¬ ¤
|
|
ld (Reg._PC),hl ;®¢ë© PC
|
|
push hl
|
|
push hl
|
|
ld a,(KList.Descript) ;ª®«¨ç¥á⢮ áâப «¨á⨣
|
|
call AdrListTabl ;¨¦¨© ¤à¥á «¨á⨣
|
|
ld de,(ListAdr) ;¢¥à娩 ¤à¥á «¨á⨣
|
|
pop bc ;®¢ë© PC
|
|
call AdrArea
|
|
jr nc,.L1+4
|
|
|
|
.L1 ld (ListAdr),bc ;®¢ ï áâà ¨æ «¨á⨣
|
|
pop hl
|
|
|
|
call Ld_a_hl ;á«¥¤ãî騥 § ª®¬ ¤®© ¡ ©âë
|
|
ld c,a
|
|
inc hl
|
|
call Ld_a_hl
|
|
ld b,a
|
|
inc hl
|
|
call Ld_a_hl
|
|
push bc
|
|
push af
|
|
push hl
|
|
|
|
push hl
|
|
ld hl,(RezAdr) ; ¤à¥á ¯®á ¤ª¨ १¨¤¥â
|
|
ld a,h
|
|
and 11000000b
|
|
cp 10000000b ;®ª® ¯®á ¤ª¨ १¨¤¥â
|
|
ld a,0xFF ;FF - १¨¤¥â ¢® 2-¬ ®ª¥
|
|
jr nz,.L30
|
|
ld de,Rezident.RetIn-Rezident
|
|
jr .L30+4
|
|
.L30 ld de,Rezident.RetIn1-Rezident
|
|
inc a ;0 - १¨¤¥â ¥ ¢® 2-¬ ®ª¥
|
|
ld (.WRez),a
|
|
add hl,de ; ¤à¥á ¢®§¢à â ¢ १¨¤¥â
|
|
ex de,hl
|
|
pop hl
|
|
ld a,d ;¯à®¯¨áë¢ ¥¬ ¯®á«¥
|
|
call Ld_hl_a ;®â« ¦¨¢ ¥¬®© ª®¬ ¤ë
|
|
dec hl
|
|
ld a,e
|
|
call Ld_hl_a
|
|
dec hl
|
|
ld a,0xC3 ;JP
|
|
call Ld_hl_a
|
|
|
|
ld hl,(RezAdr) ; ¤à¥á ¯®á ¤ª¨
|
|
push hl ;ª®à४æ¨ï ¤à¥á®¢ ª®¤ १¨¤¥â
|
|
ld (Rezident.K1+1),hl ;®¬¥à ¡ ª¨ ¯®¤ ®â« ¤ç¨ª®¬
|
|
ld (Rezident.K6+1),hl
|
|
inc hl
|
|
ld (Rezident.K3+1),hl ; ªªã¬ã«ïâ®à ¯à£à ¬¬ë
|
|
ld (Rezident.RetIn+1),hl
|
|
ld (Rezident.RetIn1+1),hl
|
|
inc hl
|
|
ld (Rezident.K2+1),hl ;¯ à HL ¯à®£à ¬¬ë
|
|
ld (Rezident.K4+1),hl
|
|
inc hl
|
|
inc hl
|
|
ld (Rezident.K5+1),hl ;1 ¨ 2 ¡ ©âë ¡ãä¥à
|
|
inc hl
|
|
inc hl
|
|
ld (Rezident.K5+7),hl ;3 ¨ 4 ¡ ©âë ¡ãä¥à
|
|
inc hl
|
|
inc hl
|
|
ld (Rezident.K5+13),hl ;5 ¨ 6 ¡ ©âë ¡ãä¥à
|
|
inc hl
|
|
inc hl
|
|
ld (Rezident.K5+19),hl ;7 ¡ ©â ¡ãä¥à
|
|
|
|
ld a,(.WRez) ;ä« £ ¯®á ¤ª¨ १¨¤¥â
|
|
or a
|
|
jr nz,.L31
|
|
ld de,Rezident.Start1-Rezident
|
|
ld hl,(RezAdr) ; ¤à¥á ¯®á ¤ª¨
|
|
add hl,de ;áâ àâ १¨¤¥â ¥ ¢® 2-¬ ®ª¥
|
|
jr .L32
|
|
|
|
.L31 inc hl ;áâ àâ १¨¤¥â ¢® 2-¬ ®ª¥
|
|
ld (.Run1+1),hl
|
|
|
|
ld hl,AdrTmpBuf
|
|
ld de,Rezident.Start+1 ;á®åà ¥¨¥ 7 ¡ ©â ¢ १¨¤¥â¥
|
|
ld b,3
|
|
.L33 ld a,(hl)
|
|
ld (de),a
|
|
inc hl
|
|
inc de
|
|
ld a,(hl)
|
|
ld (de),a
|
|
inc hl
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
djnz .L33
|
|
ld a,(hl)
|
|
ld (de),a
|
|
|
|
ld de,.Run1+2 ;¢á¯®¬®£ ⥫ì ï ¯à®æ¥¤ãà
|
|
ld b,7 ;¤«¨
|
|
.L34 ld a,(de)
|
|
ld (hl),a
|
|
dec hl
|
|
dec de
|
|
djnz .L34
|
|
inc hl
|
|
|
|
.L32 ld (.Run+1),hl
|
|
|
|
ld a,(Reg._AF+1) ; ªªã¬ã«ïâ®à ¯à®£à ¬¬ë
|
|
ld (Rezident+1),a ;¢ १¨¤¥â
|
|
ld hl,(Reg._HL) ;¯ à HL
|
|
ld (Rezident+2),hl ;¢ १¨¤¥â
|
|
|
|
pop hl ; ¤à¥á ¯®á ¤ª¨ १¨¤¥â
|
|
ld de,Rezident ; ç «® १¨¤¥â
|
|
ld bc,.Buffer
|
|
ld a,Rezident.End-Rezident ;¤«¨ १¨¤¥â
|
|
.L3 push af
|
|
call Ld_a_hl
|
|
ld (bc),a ;á®åà ¥¨¥ ¯ ¬ï⨠¯®¤ १¨¤¥â®¬
|
|
ld a,(de) ;ª®¯¨à®¢ ¨¥ १¨¤¥â
|
|
call Ld_hl_a
|
|
inc bc
|
|
inc de
|
|
inc hl
|
|
pop af
|
|
dec a
|
|
jr nz,.L3
|
|
|
|
ld a,(WinPage) ;¡ ª ¢ 0-®¬ ®ª¥
|
|
out (EmmWin.P0),a
|
|
|
|
call RestAllRegs
|
|
ld (StackDebug),sp ;á⥪ ®â« ¤ç¨ª
|
|
ld sp,(Reg._SP) ;á⥪ ¯à®£à ¬¬ë
|
|
.Run jp 0 ;¯ã᪠१¨¤¥â
|
|
|
|
ld (Reg._SP),sp ;á⥪ ¯à®£à ¬¬ë
|
|
ld sp,(StackDebug) ;á⥪ ®â« ¤ç¨ª
|
|
call SaveAllRegs
|
|
in a,(EmmWin.P0)
|
|
ld (WinPage),a ;¡ ª ¢ 0-®¬ ®ª¥
|
|
ld a,(BankOS) ;¡ ª á OS
|
|
out (EmmWin.P0),a
|
|
|
|
ld hl,(RezAdr)
|
|
call Ld_a_hl
|
|
ld (WinPage+2),a ;®¬¥à ¡ ª¨ ¢® 2-®¬ ®ª¥
|
|
inc hl ; ªªã¬ã«ïâ®à ¯à®£à ¬¬
|
|
call Ld_a_hl
|
|
ld (Reg._AF+1),a
|
|
ld a,(.WRez) ;ä« £ १¨¤¥â
|
|
or a
|
|
jr z,.L35 ;¥ ¢® 2-¬ ®ª¥
|
|
inc hl ;ॣ¨áâà L ¯à®£à ¬¬ë
|
|
call Ld_a_hl
|
|
ld (Reg._HL),a
|
|
inc hl ;ॣ¨áâà H ¯à®£à ¬¬ë
|
|
call Ld_a_hl
|
|
ld (Reg._HL+1),a
|
|
ld b,7
|
|
ld de,AdrTmpBuf
|
|
.L36 inc hl ;¡ãä¥à 7-¬¨ ¡ ©â
|
|
call Ld_a_hl
|
|
ld (de),a ;¢®áâ ®¢¨«¨
|
|
inc de
|
|
djnz .L36
|
|
|
|
.L35 pop hl
|
|
pop af ;¢®áâ ®¢¨«¨ ª®¤ ª®¬ ¤ë
|
|
pop bc
|
|
call Ld_hl_a
|
|
dec hl
|
|
ld a,b
|
|
call Ld_hl_a
|
|
dec hl
|
|
ld a,c
|
|
call Ld_hl_a
|
|
|
|
ld de,.Buffer ;¢®ááâ ®¢«¥¨¥ ¯ ¬ï⨠¯®¤ १¨¤¥â®¬
|
|
ld hl,(RezAdr) ; ¤à¥á ¯®á ¤ª¨
|
|
ld b,Rezident.End-Rezident ;¤«¨ १¨¤¥â
|
|
.L4 ld a,(de)
|
|
call Ld_hl_a
|
|
inc de
|
|
inc hl
|
|
djnz .L4
|
|
ei
|
|
ret
|
|
|
|
.BankP ld a,0xFF ;(2) ¡ ª ¯®¤ ®â« ¤ç¨ª®¬
|
|
out (EmmWin.P2),a ;(2)
|
|
.Run1 jp 0 ;(3) ¯¥à¥å®¤ ¢ १¨¤¥â
|
|
|
|
.SpdInc push af ;㢥«¨ç¥¨¥ £«ã¡¨ë á⥪
|
|
ld a,(StackDown)
|
|
inc a
|
|
ld (StackDown),a
|
|
pop af
|
|
ret
|
|
|
|
.SpdDec push af ;㬥ì襨¥ £«ã¡¨ë á⥪
|
|
ld a,(StackDown)
|
|
dec a
|
|
ld (StackDown),a
|
|
pop af
|
|
ret
|
|
|
|
.Flag db On ;ä« £ § 室 ¢ ¯®¤¯à®£à ¬¬ë
|
|
.WRez db 0 ;ä« £ ®ª ¯®á ¤ª¨ १¨¤¥â
|
|
|
|
.Buffer ds Rezident.End-Rezident ;¤«¨ १¨¤¥â
|
|
|