DemoN/STEP.ASM
2020-12-26 23:59:23 +03:00

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 ;¤«¨­  १¨¤¥­â