Version for DSS 1.70+

This commit is contained in:
boykovra 2024-08-08 14:52:38 +03:00
parent 4c6b0a25fb
commit 51a7833253
55 changed files with 6482 additions and 13244 deletions

View File

@ -1,36 +0,0 @@
;[]=========================================================================[]
;[] ‚뢮¤ ç á®¢ []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 01.02.2006 []
;[]=========================================================================[]
Clock:
ld a,(ClockOn) ;ä« £ ¢ë¢®¤  ç á®¢
inc a
ret nz
ld c,Dss.SysTime
rst DssRst ;¯à®ç¨â âì ¤ ­­ë¥ ® ¢à¥¬¥­¨
ld de,.String
push de
push bc
push hl
ld l,h ;ç áë
ld h,0
call ConvDecStr8_1
inc de
pop hl ;¬¨­ãâë
ld h,0
call ConvDecStr8_1
inc de
pop hl
ld l,h ;ᥪ㭤ë
ld h,0
call ConvDecStr8_1
ld de,71
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst : di
pop hl
ld bc,8*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst : di
ret
.String db "00:00:00"

View File

@ -1,22 +0,0 @@
;[]=========================================================================[]
;[] Ž¡à ¡®âª  ª®¬ ­¤­®© áâப¨ ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 08.06.2006 []
;[] ‚室: ­  á⥪¥  ¤à¥á ­ ç «  ª®¬ ­¤­®© áâப¨ ¢ ¯ ¬ï⨠[]
;[] ‚ë室: CF=1 - ­¥â ¯ à ¬¥â஢, CF=0 - ¥áâì ¯ à ¬¥âàë []
;[]=========================================================================[]
CmdLine:
pop hl ;­ ç «®
ld a,(hl) ;¤«¨­  ª®¬ ­¤­®© áâப¨
or a
scf
jr z,.L1 ;­¥â ¯ à ¬¥â஢
ld de,FDebug ;¡ãä¥à
inc hl
ld c,Dss.GSwitch ;¢ë¤¥«¥­¨¥ ¯ à ¬¥âà 
rst DssRst
or a ;CF=0
.L1
;ret

116
DATA.ASM
View File

@ -1,116 +0,0 @@
;[]=========================================================================[]
;[] „ ­­ë¥ ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.10.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 11.03.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 05.02.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.09.2006 []
;[]=========================================================================[]
SymbolNoPrint db #b0;"." ;ᨬ¢®«ë < ¯à®¡¥« 
ClockOn db On ;¯à¨§­ ª ¢ë¢®¤  ç á®¢
DemonScreen db 0 ;­®¬¥à íªà ­  ®â« ¤ç¨ª 
OSScreen db 0 ;<3B>®¬¥à íªà ­  Ž‘¨
OSGrafMode db 0 ;ƒà ä¨ç¥áª¨© ०¨¬ ®á¨
BufPage db 255 ;<3B>®¬¥à áâà ­¨æë á ®ª®­­ë¬ ¡ãä¥à®¬
Hello db 13,10
; db "‚¥àá¨ï ®âª®¬¯¨«¨à®¢ ­  ᯥ樠«ì­® ¤«ï ‚ á¨«¨ï ˆ¢ ­®¢ !",13,10,10
db "DemoN v"
incbin "VERSION\major.bin"
db "."
incbin "VERSION\minor.bin"
db " build "
incbin "VERSION\build.bin"
db " (alpha) <Created by Alpha Studio>",13,10
db "Last edition "
incbin "VERSION\date.bin"
db " (BLR "
incbin "VERSION\time.bin"
db ")",13,10
db "FidoNet: Igor Zhadinets 2:454/5.18; "
db "e-mail: igor_ast@tut.by",13,10,10,0
Str:
.Load db "Load file ...",0x0D,0x0A,0
.DA db 0x0d,0x0A,0
PauseFlash equ 16 ;ç áâ®â  ¬¨£ ­¨ï ¯à®£à.ªãàá®à 
Color:
.Screen db 00000111b ;®á­®¢­®© 梥â íªà ­ 
.Border db 00000011b ;梥â à ¬ª¨
.TextStrReg db 00000010b ;梥â ॣ¨áâ஢ëå ¯ à
.TextStrWin db 00000101b ;梥⠭®¬¥à®¢ ®ª®­
._SP db 00000110b ;¯®¤á¢¥âª  ¢¥à設ë á⥪ 
._PC db 01110001b ;¯®¤á¢¥âª  ¢ë¯®«­ï¥¬®© áâà.
.RezArea db 00001110b ;¯®¤á¢¥âª  १¨¤¥­â 
.TextStrLogo db 00000100b ;梥⠫®£® ¯à®£à ¬¬ë
.Cursor db 00011101b ;梥⠪ãàá®à -㪠§ â¥«ï
.InLine db 00111111b ;梥â áâப¨ ¢¢®¤ 
.InLineEd db 00110001b ;梥â áâப¨ ¢¢®¤  ¯à¨ ।.
StackDebug ds 2 ; ¤à¥á á⥪  ®â« ¤ç¨ª 
BankDebug ds 1 ;­®¬¥à ¡ ­ª¨ ®â« ¤ç¨ª 
BankOS ds 1 ;­®¬¥à ¡ ­ª¨ á OS
RezAdr dw 0x7000 ; ¤à¥á ¯®á ¤ª¨ १¨¤¥­â 
StackDown ds 1 ;£«ã¡¨­  á⥪ 
StackDump dw 0x800A ;­ ç «® ¤ ¬¯  á⥪ 
Reg: ;§­ ç¥­¨¥ ॣ¨áâ஢ëå ¯ à
._IX dw 0
._IY dw 0
._HL dw 0
._DE dw 0
._BC dw 0
._AF dw 0
._HL_ dw 0
._DE_ dw 0
._BC_ dw 0
._AF_ dw 0
._IR dw 0
._SP dw 0x7FFE
._PC dw 0
WinPage: db 0xFF,0xFF,0xFF,0xFF ; ¤à¥á  ¯®¤ª«î祭­ëå áâà ­¨æ
Dump1 dw 0x4000 ; ¤à¥á ­ ç «  ¤¨­ ¬¨ç¥áª®£® ¤ ¬¯ 
Dump: ; ¤à¥á  ­ ç «  áâப ¤ ¬¯ 
dw InputLine.Buffer;0x4100
dw InputLine.Buffer+16;0x8100
dw PutCode.Buffer;0xC100
dw 0x5280
dw 0x9280
dw 0xD280
dw 0x6000
dw 0xA000
ListAdr: ds 40 ;¡ãä¥à åà ­¥­¨ï  ¤à¥á®¢ «¨á⨭£ 
ListFormat: db -1 ;ä®à¬ â­ë© ¢ë¢®¤ «¨á⨭£ 
;-1 - ¤ ; 0 - ­¥â
DecHex db 0 ;0-HEX FF-DEC á¨á⥬ 
;======== Š®­áâ â­âë ======
On equ 0xFF
Off equ 0
Ins equ 0
Ovr equ 0xFF
SysSymb equ 0x1B ;á¨á⥬­ë© §­ ª®£¥­¥à â®à
;¯¥ç âì ç¥à¥§ ¯/¯ ¡¨®á 
ifdef D_PRINTCH_BIOS
Demon.Bios_Win db 0 ;¨¤¥­â¨ä¨ª â®à ®ª­  ¡¨®á 
MainWin db 80,32,0,0,00110000b,0,0,0
ds 26,0
endif
;--------------------------------------
;„¨ «®£®¢®¥ ®ª­® ¤«ï ¯¯ ¢ë室 
;--------------------------------------
ExitDlg db 6,22,13,32,6,#40
db "Confirmation",0
db " You really want to quit?"
db 0x16,32,17,"OK Cancel",0
db 2
db 29,17,8,2 ;Ok
dw 0,0
db 39,17,8,2 ;Cancel
dw 0,Keyb.NoExit

389
DEMON.ASM
View File

@ -1,389 +0,0 @@
;[]=========================================================================[]
;[] Œ®­¨â®à-®â« ¤ç¨ª DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.10.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 07.02.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 11.03.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 27.08.2006 []
;[]=========================================================================[]
DEVICE ZXSPECTRUM128
; define DEBUG 1 ;®âªàë⨥ ¤¥¡ ££¥à­ëå § £«ã襪
; define D_PRINTCH_BIOS 1
org #8100-512
STARTPRG
DB "EXE" ;EXE ID
DB #00 ;EXE VERSION
DW #0200 ;CODE OFFSET LOW
DW #0000 ;CODE OFFSET HIGH
DW #0000 ;END-BEG ;PRIMARY LOADER
DW #0000 ;
DW #0000 ;RESERVED
DW #0000 ;
DW OrgAdr ;LOAD ADDRESS
DW OrgAdr ;START ADDRESS
DW #C001 ;STACK ADDRESS
OrgAdr equ 0x8100
org OrgAdr
; stack 0xC001
push ix ; ¤à¥á ª®¬ ­¤­®© áâப¨
in a,(EmmWin.P2) ;¡ ­ª  á ®â« ¤ç¨ª®¬
ld (BankDebug),a
in a,(EmmWin.P0) ;¡ ­ª  á OS
ld (BankOS),a
; ld (WinPage),a
; ld (Reg._SP),sp ; ¤à¥á á⥪ 
call SaveAllRegs ;á®åà ­¥­¨¥ ॣ¨áâ஢ëå ¯ à
; ld a,(BankDebug)
ld a,0xFF ;áªà뢠¥¬ ¡ ­ªã á ®â« ¤ç¨ª®¬
ld (WinPage+2),a
include "cmdline.asm"
call nc,LoadFile
jp Start
HorizLine db 8 ;ª®«¨ç¥á⢮ «¨­¨©
;1-¤«¨­  2-á⮫¡¥æ 3-áâப  4-ᨬ¢®«
db 0x4E,0x01,0x00,0xCD, 0x17,0x01,0x03,0xC4
db 0x17,0x01,0x09,0xC4, 0x17,0x01,0x0F,0xC4
db 0x17,0x01,0x11,0xCD, 0x4E,0x01,0x15,0xCD
db 0x4E,0x01,0x1E,0xCD, 0x17,0x01,0x13,0xCD
VerticalLine db 5 ;ª®«¨ç¥á⢮ «¨­¨©
;1-¢ëá®â  2-á⮫¡¥æ 3-áâப  4-ᨬ¢®«
db 0x1D,0x00,0x01,0xBA, 0x10,0x09,0x01,0xB3
db 0x08,0x0C,0x16,0xBA, 0x14,0x18,0x01,0xBA
db 0x1D,0x4F,0x01,0xBA
Corner db 41 ;㣫ë à ¬®ª
;1-á⮫¡¥æ 2-áâப  3-ᨬ¢®«
db 0x00,0x00,0xC9, 0x00,0x03,0xC7, 0x00,0x09,0xC7
db 0x00,0x0F,0xC7, 0x00,0x11,0xCC, 0x00,0x15,0xCC
db 0x00,0x1E,0xC8, 0x06,0x11,0xD1, 0x06,0x13,0xCF
db 0x09,0x00,0xD1, 0x09,0x03,0xC5, 0x09,0x09,0xC5
db 0x09,0x0F,0xC5, 0x0C,0x11,0xD1, 0x0C,0x15,0xCB
db 0x0C,0x1E,0xCA, 0x12,0x0F,0xC2, 0x12,0x11,0xD8
db 0x12,0x13,0xCF, 0x18,0x00,0xCB, 0x18,0x03,0xB6
db 0x18,0x09,0xB6, 0x18,0x0F,0xB6, 0x18,0x15,0xCA
db 0x00,0x13,0xCC, 0x0C,0x13,0xCF, 0x4F,0x00,0xBB
db 0x18,0x13,0xB9, 0x4F,0x15,0xB9, 0x4F,0x1E,0xBC
db 0x18,0x11,0xB9, 0x06,0x12,0xB3, 0x12,0x10,0xB3
db 0x12,0x12,0xB3, 0x09,0x13,0xD1, 0x09,0x14,0xB3
db 0x09,0x15,0xCF, 0x0C,0x12,0xB3, 0x0E,0x13,0xCB
db 0x0E,0x14,0xBA, 0x0E,0x15,0xCA
TextStrReg db 0x16,0x01,0x01,"IX", 0x16,0x01,0x02,"IY"
db 0x16,0x01,0x04,"HL", 0x16,0x01,0x05,"DE"
db 0x16,0x01,0x06,"BC", 0x16,0x01,0x07,"AF"
db 0x16,0x01,0x0A,"HL'", 0x16,0x01,0x0B,"DE'"
db 0x16,0x01,0x0C,"BC'", 0x16,0x01,0x0D,"AF'"
db 0x16,0x01,0x10,"PC", 0x16, 0x0A,0x10,"IR"
db 0x16,0x01,0x14,"SP",0
TextStrLogo db 0x016,0x01,0x1F,0xC4,0xCD,0xCD
db " DemoN v"
incbin "VERSION\major.bin"
db "."
incbin "VERSION\minor.bin"
db " build "
incbin "VERSION\build.bin"
db " (alpha)-"
incbin "VERSION\date.bin"
db " Igor by AlphA Studio, Hard/WCG"
db 0x20,0xCD,0xCD,0xC4,0x00
TextStrWin db 0x16,0x02,0x11," 0 ",0x16,0x08,0x11," 1 "
db 0x16,0x0E,0x11," 2 ",0x16,0x14,0x11," 3 ",0
TextStrRez db 0x16,0x0F,0x14,"REZ",0
;<3B>à®æ¥¤ãà  ¯à®à¨á®¢ª¨ «¨­¨©
;HL -  ¤à¥á ­ ç «  â ¡«¨æë
DrawLine ld c,(hl) ;ª®«¨ç¥á⢮ «¨­¨©
inc hl
ld b,(hl) ;¤«¨­  «¨­¨¨
inc hl
ld e,(hl) ;á⮫¡¥æ
inc hl
ld d,(hl) ;áâப 
inc hl
ld a,(hl) ;ᨬ¢®«
push hl
.L1 push bc
push af
ld bc,Dss.WrChar ;梥⠢ ॣ.B
rst DssRst
inc d ;­ à é¨¢ ­¨¥ ª®®à¤¨­ âë
pop af
pop bc
djnz .L1
pop hl
dec c
jr nz,DrawLine+1
ret
;<3B> ç «® ¯à®£à ¬¬ë
Start:
ld hl,Hello ;á®®¡é¥­¨¥ ¯à®£à ¬¬ë
ld c,Dss.PChars ;¢ë¢¥á⨠áâபã
rst DssRst
ld c,Dss.GetVMod ;’¥ªã騩 £à ä ०¨¬
rst DssRst
jp c,Exit
ld (OSGrafMode),a
ld a,b
ld (OSScreen),a ;¨ ⥪ãé ï áâà ­¨æ  íªà ­ 
push bc
ld bc,#0100+Dss.GetMem ;१¥à¢¨à㥬 1 áâà ­¨æã ¤«ï ®ª®­­®£® ¡ãä¥à 
rst DssRst
pop de ; D - ­®¬¥à áâà ­¨æë íªà ­  - OSScreen
jp c,Exit ;Žè¨¡ª  ¢ë¤¥«¥­¨ï ¡«®ª  ¯ ¬ïâ¨
ld (BufPage),a ;‘®åà ­¨¬ áâà ­¨æã ¢ ¯¥à¥¬¥­­®©
ld b,a
ld a,(DemonScreen)
cp d ;¥á«¨ íªà ­ë Ž‘ ¨ „¥¬®­  ­¥ ᮢ¯ ¤ îâ
jr nz,StartNext ;â® ¨ ­¥ á®å࠭塞 íªà ­ Ž‘¨
ld de,0 ;‘®å࠭塞 íªà ­ ¢ ¤®¯.áâà ­¨æ¥
ld hl,#2050
ld ix,#c000
ld c,Dss.WinCopy
rst DssRst
StartNext ld a,(DemonScreen) ;íªà ­ ®â« ¤ç¨ª 
ld b,a
ld a,3 ;ãáâ ­®¢¨âì ०¨¬ 80å32
ld c,Dss.SetVMod ;Dss.SelPage
; ld bc,0x0054
rst DssRst
ifdef D_PRINTCH_BIOS
ld ix,MainWin ;Žâªàë⨥ ®ª­  ç/§ ¡¨®á
ld e,00010001b
rst BiosRst
ld (Demon.Bios_Win),a
; jr nc,.lp1
; ld c,Dss.EchoKey ;¤¥¡ã££¥à­ ï § £«ã誠
; rst DssRst
endif
.lp1
; ld a,(Color._SP) ;¯®¤á¢¥âª  ¢¥à設ë á⥪ 
; ld b,a
; ld de,0x1C01
; ld hl,0x010B
; ld a," "
; ld c,Dss.Clear
; rst DssRst
call ClearScreen
call DrawDemonScreen
; ld c,Dss.EchoKey ;¤¥¡ã££¥à­ ï § £«ã誠
; rst DssRst
jp Start1
;Ž¡­®¢«¥­¨¥ íªà ­  ¤¥¬®­ 
RefreshScreen call CursorRes
call ClearScreen
call DrawDemonScreen
call Refresh
call Cursor ;¢ª« ªãàá®à
jp CursorSet
ClearScreen ld a,(Color.Screen)
ld b,a ;®ç¨á⪠ íªà ­ 
ld de,0
ld hl,0x2050
ld c,Bios.Lp_Cls_Win
rst BiosRst
ret
DrawDemonScreen
ld a,(Color.Border) ;ãáâ ­®¢ª  æ¢¥â  à ¬ª¨
ld (DrawLine.L1+4),a
ld (DrawCorner+10),a
ld a,0x14 ;ª®¤ ¬­¥¬®­¨ª¨ INC D
ld (DrawLine.L1+6),a
ld hl,VerticalLine ;¢¥à⨪ «ì­ë¥ «¨­¨¨
call DrawLine
ld hl,HorizLine ;£®à¨§®­â «ì­ë¥ «¨­¨¨
ld a,0x1C ;ª®¤ ¬­¥¬®­¨ª¨ INC E
ld (DrawLine.L1+6),a
call DrawLine
ld hl,Corner
ld b,(hl) ;ª®«¨ç¥á⢮ 㣫®¢
DrawCorner push bc
inc hl
ld e,(hl) ;á⮫¡¥æ
inc hl
ld d,(hl) ;áâப 
inc hl
ld a,(hl) ;ᨬ¢®«
push hl
ld bc,Dss.WrChar ;梥⠢ ॣ.B
rst DssRst
pop hl
pop bc
djnz DrawCorner
ld hl,TextStrReg
ld a,(Color.TextStrReg) ;梥â ॣ¨áâ஢ëå ¯ à
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrWin
ld a,(Color.TextStrWin) ;梥⠭®¬¥à®¢ ®ª®­
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrLogo
ld a,(Color.TextStrLogo) ;梥⠫®£® ¯à®£à ¬¬ë
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrRez
ld a,(Color.RezArea) ;梥â १¨¤¥­â 
ld (PrnStrColor.L1+5),a
call PrnStrColor
ret
ds OrgAdr+0x700-$
Start1:
call PreparChar ;¯®¤£®â®¢ª  ¯à®£à ¬¬­®£® ªãàá®à  ¢¢®¤ 
; ld hl,(Reg._PC)
; ld hl,0
; ld (ListAdr),hl
call Refresh
call Keyb
Exit:
ld hl,(Rst38.Vect+1) ;¢®ááâ ­®¢«¥­¨¥ ¢¥ªâ®à  DSS
ld (0039h),hl
ld a,(OSScreen) ;¨ ⥪ãé ï áâà ­¨æ  íªà ­ 
ld b,a
push bc
ld a,(OSGrafMode)
ld c,Dss.SetVMod
; ld bc,0x0100+Dss.SelPage ;¢®ááâ ­®¢«¥­¨¥ íªà ­  DSS
rst DssRst
pop bc
ld a,(DemonScreen)
cp b
jr nz,ExitNext
ld de,0 ;‚®ááâ ­ ¢«¨¢ ¥¬ íªà ­ ¨§ ¤®¯.áâà ­¨æë
ld hl,#2050
ld ix,#c000
ld c,Dss.WinRest
ld a,(BufPage)
push af
ld b,a
rst DssRst
pop af
ld c,Dss.FreeMem ;Žâ¤ ¥¬ áâà ­¨æã ¡ãä¥à  ®¡à â­® Ž‘¨
rst DssRst
ExitNext
ld bc,Dss.Exit ;­®à¬ «ì­®¥ § ¢¥à襭¨¥
rst DssRst
Return ret
Refresh:
di
ld de,0x0104 ;¢ë¢®¤ §­ ç¥­¨© ॣ¨áâ஢
ld hl,(Reg._IX)
call PrintStrReg
ld de,0x0204
ld hl,(Reg._IY)
call PrintStrReg
ld de,0x0404
ld hl,(Reg._HL)
call PrintStrReg
ld de,0x0504
ld hl,(Reg._DE)
call PrintStrReg
ld de,0x0604
ld hl,(Reg._BC)
call PrintStrReg
ld de,0x0A04
ld hl,(Reg._HL_)
call PrintStrReg
ld de,0x0B04
ld hl,(Reg._DE_)
call PrintStrReg
ld de,0x0C04
ld hl,(Reg._BC_)
call PrintStrReg
ld de,0x0704
ld hl,(Reg._AF)
call PrintStrAF
ld de,0x0D04
ld hl,(Reg._AF_)
call PrintStrAF
ld de,0x1004
ld hl,(Reg._PC)
call PrintReg
ld de,0x100D
ld hl,(Reg._IR)
call PrintReg
ld de,0x1404
ld hl,(Reg._SP)
call PrintReg
call PrintSPDn
ld de,0x1413
ld hl,(RezAdr)
call PrintReg
call PrintStrWin ;¢ë¢®¤ ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å
call PrintStrSP ;¢ë¢®¤ ¤ ¬¯  á⥪ 
call PrintDump
ei
jp DisAsm
DemonHelp call CursorRes
ld ix,HelpWnd
jp DialogWindow
; ld hl,HelpWndDlg
; jp WinDialog
HelpWnd db 6,16,11,42,7,#27
db "DemoN Help Page",0
db " DemoN v"
incbin "VERSION\major.bin"
db "."
incbin "VERSION\minor.bin"
db " build "
incbin "VERSION\build.bin"
db " (alpha)-"
incbin "VERSION\date.bin"
db 0x0D
db " Igor by AlphA Studio, Hard/WCG",0x0D,0x0D
db " OK",0
HelpWndDlg db 1 ;Ž¯¨á â¥«ì ¤¨ «®£®¢®£® ®ª­ 
db 16+19,16,4,2
dw 0,0
include "EQU\dss_equ.asm";"D:\WORKAST\EQU\dss_equ"
include "EQU\bios_equ.asm";"D:\WORKAST\EQU\bios_equ"
include "EQU\port.asm";"D:\WORKAST\EQU\port"
include "disasm.asm";"D:\WORKAST\DEMON\disasm"
include "util.asm";"D:\WORKAST\DEMON\util"
include "file.asm";"D:\WORKAST\DEMON\file"
include "error.asm";"D:\WORKAST\DEMON\error"
include "clock.asm";"D:\WORKAST\DEMON\clock"
include "keyb.asm";"D:\WORKAST\DEMON\keyb"
include "kreg.asm";"D:\WORKAST\DEMON\kreg"
include "kstack.asm";"D:\WORKAST\DEMON\kstack"
include "kdump.asm";"D:\WORKAST\DEMON\kdump"
include "rez.asm";"D:\WORKAST\DEMON\rez"
include "step.asm";"D:\WORKAST\DEMON\step"
include "savescr.asm";"D:\WORKAST\DEMON\savescr"
include "data.asm";"D:\WORKAST\DEMON\data"
include "tabl.asm";"D:\WORKAST\DEMON\tabl"
include "loadbin.asm"
include "windows.asm"
EndOfDaemon
savebin "demon.exe",STARTPRG,EndOfDaemon-STARTPRG

Binary file not shown.

View File

@ -1,786 +0,0 @@
;[]=========================================================================[]
;[] „¨§ áᥬ¡«¥à ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.10.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 20.03.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 16.02.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.09.2006 []
;[] []
;[] DisAsm - ¢ë¢®¤ «¨á⨭£  []
;[] AttrList - ¢ë¢®¤  âਡã⮢ áâப¨ «¨á⨭£  []
;[] UpAdres - à áç¥â ¯à¥¤ë¤ã饣®  ¤à¥á  áâப¨ «¨á⨭£  []
;[] List - ä®à¬¨à®¢ ­¨¥ áâப¨ «¨á⨭£  []
;[]=========================================================================[]
;[]=========================================================================[]
;[] ‚뢮¤ «¨á⨭£  []
;[]=========================================================================[]
DisAsm:
ld hl,(ListAdr) ; ¤à¥á ¯¥à¢®© áâப¨ «¨á⨭£ 
ld de,0x011A ;ª®®à¤¨­ âë ¯¥ç â¨
.L1 push de
push hl
push de
ld a,d
dec a
add a,a
ld c,a
ld b,0
ex de,hl
ld hl,ListAdr
add hl,bc
ld (hl),e ; ¤à¥á áâப¨ «¨á⨭£ 
inc hl
ld (hl),d
ex de,hl
pop de
call AttrList ;®ªà á¨âì áâபã
.L2 call PrintReg
pop hl
call List
pop de
; push af ;¤«¨­  ª®¤  ¢à¥¬¥­­®
ld a,(ListFormat) ;ä®à¬ â­ë© ¢ë¢®¤
or a
call nz,LFormat
push de
push hl
di
ld a,21
add a,e
ld e,a ;­®¢ ï ª®®à¤¨­ â  X
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst
; ld c,Dss.Locate
; rst DssRst
ld hl,List.String
ld bc,32*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
ei
; ld c,Dss.PChars
; rst DssRst
pop hl
pop de
;¯¥ç âì ¤«¨­ë ª®¤  ¢ ¯®«¥ ¬¥âª¨ (¢à¥¬¥­­®)
; pop af
; push de
; push hl
; ld e,0x24
; push de
; ld h,0
; ld l,a
; ld de,.Buf
; call NumToStr8
; pop de
; ld c,Dss.Locate
; rst DssRst
; ld hl,.Buf
; ld c,Dss.PChars
; rst DssRst
; pop hl
; pop de
; jr $+5
;.Buf db "123",0
;end (¢à¥¬¥­­®)
inc d ;á«¥¤ãîé ï áâப 
ld a,(KList.Descript) ;ª®«-¢® áâப «¨á⨭£ 
cp d
jr nc,.L1
ret
;[]=========================================================================[]
;[] ‚뢮¤  âਡã⮢ áâப¨ «¨á⨭£  []
;[] ‚室: DE - ª®®à¤¨­ âë ¯®¤á¢¥âª¨ []
;[] HL - ⥪ã騩  ¤à¥á «¨á⨭£  []
;[]=========================================================================[]
AttrList:
di
push hl ;⥪ã騩  ¤à¥á «¨á⨭£ 
push de ;⥪ã騥 ª®®à¤¨­ âë
push hl
ld bc,(Reg._PC) ; ¤à¥á ¯à®£à ¬¬­®£® áç¥â稪 
or a ;á¡à®á ä« £  C
sbc hl,bc
pop hl
jr nz,.L2
ld a,(Color._PC) ;梥⠯ணࠬ¬­®£® ªãàá®à 
jr .L0
.L2 push hl
push de
push hl
ld bc,Rezident.End-Rezident;¤«¨­  १¨¤¥­â 
ld hl,(RezAdr) ;­ ç «® १¨¤¥­â 
push hl
add hl,bc ;ª®­¥ç­ë©  ¤à¥á १¨¤¥­â 
pop de
dec de
dec de
dec de
dec de
pop bc
call AdrArea
pop de
pop hl
jr c,.L3
ld a,(Color.RezArea) ;梥⠮¡« á⨠ࠧ¬¥é¥­¨ï १¨¤¥­â 
jr .L0
.L3 ld a,(Color.Screen) ;®á­®¢­®© 梥â
.L0 ld (.L1+1),a
dec e
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst
.L1 ld e,0 ;梥⠯®¤á¢¥âª¨
ld bc,54*256+Bios.Lp_Print_Atr ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
pop de
pop hl
ei
ret
;[]=========================================================================[]
;[] <20> áç¥â ¯à¥¤ë¤ã饣®  ¤à¥á  áâப¨ «¨á⨭£  []
;[] ‚室: HL -  ¤à¥á ⥪ã饩 áâப¨ []
;[] ‚ë室: HL -  ¤à¥á ¯à¥¤ë¤ã饩 áâப¨ []
;[]=========================================================================[]
UpAdres:
ld de,-4
add hl,de ;4-å ¡ ©â­ ï ª®¬ ­¤ ?
call Ld_a_hl
; ld a,(hl)
cp 0xDD ;¯à¥ä¨ªá 0xDD
jr z,$+8
or 00110000b ;¬ áª  ¤«ï ¯à¥ä¨ªá®¢ 0xED,0xFD
cp 0xFD
jr nz,.L1
push hl
call List
pop hl
cp 4
ret z
.L1 inc hl
push hl ;3-å ¡ ©â­ ï ª®¬ ­¤ ?
call List
pop hl
cp 3
ret z
inc hl
push hl ;2-å ¡ ©â­ ï ª®¬ ­¤ ?
call List
pop hl
cp 2
ret z
inc hl
ret ;1-® ¡ ©â­ ï ª®¬ ­¤ !
;[]=========================================================================[]
;[] ”®à¬ â¨à®¢ ­¨¥ áâப¨ «¨á⨭£  []
;[]=========================================================================[]
LFormat:
push hl
ld hl,List.String+11 ;­ ç «® áâப¨
ld bc,2 ;¬ ªá ª®«-¢® ¢áâ ¢«ï¥¬ëå ¯à®¡¥«®¢
.L2 ld a,(hl)
or a
jr z,.Exit
cp 0x20 ;¯à®¡¥«
jr z,.L1
inc hl
dec c
jr nz,.L2
.Exit pop hl
ret
.L1 push de
push bc
push hl
ld hl,List.String+30 ;ª®­¥æ áâப¨
ld d,h
ld e,l
or a
sbc hl,bc
pop bc
push bc
push hl
sbc hl,bc ;ª®«-¢® ¡ ©â
ld b,h
ld c,l
pop hl
lddr
pop hl
pop bc ;ª®«-¢® ¯à®¡¥«®¢
ld b,c
.L3 inc hl ; ¤à¥á ¢áâ ¢ª¨
ld a,0x20
ld (hl),a
djnz .L3
pop de
pop hl
ret
;[]=========================================================================[]
;[] ”®à¬¨à®¢ ­¨¥ áâப¨ «¨á⨭£  []
;[] ‚室: HL -  ¤à¥á ¯ ¬ï⨠¤¨§ áᥬ¡«¨à®¢ ­¨ï []
;[] ‚ë室: HL - á«¥¤ãî騩 §  ¤¨§ áᥬ¡«¨à®¢ ­­®© ª®¬ ­¤®©  ¤à¥á ¯ ¬ï⨠[]
;[] A - ¤«¨­  ª®¤  ª®¬ ­¤ë []
;[]=========================================================================[]
List:
xor a ;¤«¨­  ª®¤  ª®¬ ­¤ë
ld (.Byte),a
push hl
ld d,h
ld e,l
ld hl,.String ;®ç¨á⪠ ¡ãä¥à  áâப¨
; di ;á ¨á¯®«ì§®¢ ­¨¥¬  ªá¥«ï
; ld d,d ;¢ª«îç¨âì  ªá¥«ì
; ld a,32 ;¤«¨­  ¡ãä¥à  ¨ ¡ ©â § ¯®«­¨â¥«ì
; ld c,c ;ª®¬ ­¤  § ¯®«­¥­¨ï
; ld (hl),a ;§ ¯®«­¨âì
; ld b,b ;¢ëª«îç¨âì  ªá¥«ì
; ei
ld a,32 ;¤«¨­  ¡ãä¥à  ¨ ¡ ©â § ¯®«­¨â¥«ì
ld b,a
ld (hl),a
inc hl
djnz $-2
ld ix,.String+2 ; ¤à¥á ¢ áâப¥ ¤«ï á«¥¤.ª®¤ 
ex de,hl
; ld a,(hl) ;¡ ©â ¨§ ¯ ¬ïâ¨
call Ld_a_hl
;===============================
cp 0xDD ;¯à¥ä¨ªá #DD
jr z,.L43
cp 0xFD ;¯à¥ä¨ªá #FD
jp nz,.L30
ld de,"DF"
ld a,"Y"
jr .L42
.L43 ld de,"DD"
ld a,"X"
.L42 ld (.String),de ;¯à¥ä¨ªá ¢ áâபã
ld (.IRS1+1),a ;ª®à४â¨à®¢ª  ॣ.¯ àë
ld (.L9+1),a
ld (.L13+6),a
ld a,1
ld (.Byte),a ;¤«¨­  ª®¤  ª®¬ ­¤ë
pop hl
inc hl
; ld a,(hl) ;á«¥¤ãî騩 ¡ ©â ª®¬ ­¤ë
call Ld_a_hl
push hl
cp 0xCB
jr z,.L40 ;ª®¬ ­¤ë #DD(#FD)#CB
ld hl,CodeDDFD ;â ¡«¨æ  ª®¤®¢
ld bc,85 ;à §¬¥à â ¡«¨æë
cpir ;¯®¨áª ª®¤ 
jr z,.L45
pop hl
ld bc,ED00
ld de,.String+9 ;ª®¯¨à®¢ ­¨¥ ¬­¥¬®­¨ª¨ NOP *
ld a,(bc)
or a
ret z
ld (de),a
inc de
inc bc
jr $-6
.L45 ld hl,84 ;à §¬¥à â ¡«¨æë
or a
sbc hl,bc
ld de,TablDDFD
jp .L_12+3
.L40 ld ix,.String+4 ; ¤à¥á ¢ áâப¥ ¤«ï á«¥¤.ª®¤ 
ld de,"BC" ;¯à¥ä¨ªá ¢ áâபã
ld (.String+2),de
ld a,4 ;¤«¨­  ª®¤ 
ld (.Byte),a
pop hl
inc hl
call Ld_a_hl
ld b,a
; ld b,(hl) ;¡ ©â-ᬥ饭¨¥
inc hl
call Ld_a_hl
; ld a,(hl) ;á«¥¤ãî騩 ¡ ©â ª®¬ ­¤ë
inc hl
push hl
ld c,a
ld h,0
cp 0x40 ;®â 0 ¤® 0x3F (ᤢ¨£¨)
jr c,.L44
call .ComCBBit ;¬­¥¬®­¨ª  BIT,SET,RES
ld a,c
cp 0x80 ;ª®¬ ­¤  BIT
jr nc,.L41
call .NomBit ;­®¬¥à ¡¨â 
call .IndexRegSh ;¨­¤¥ªá­ ï ¯ à  ᮠᬥ饭¨¥¬
jr .L46
.L41 call .NomBit ;­®¬¥à ¡¨â 
jr .L44+3
.L44 call .ComCBSh ;¬­¥¬®­¨ª 
call .RegName ;ॣ¨áâà
jr nz,$+6
ld a,"," ;à §¤¥«¨â¥«ì
ld (de),a
inc de
call .IndexRegSh ;¨­¤¥ªá­ ï ¯ à  ᮠᬥ饭¨¥¬
.L46 ld a,c
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
pop hl
ret
;===============================
.L30 cp 0xCB ;¯à¥ä¨ªá #CB
jp nz,.L20
ld de,"BC" ;¯à¥ä¨ªá ¢ áâபã
ld (.String),de
pop hl
inc hl
call Ld_a_hl
; ld a,(hl) ;á«¥¤ãî騩 ¡ ©â ª®¬ ­¤ë
inc hl
push hl
ld c,a
ld h,0
cp 0x40 ;®â 0 ¤® 0x3F (ᤢ¨£¨)
jr nc,.L31
call .ComCBSh ;¬­¥¬®­¨ª 
jr .L31+6
.L31 call .ComCBBit ;¬­¥¬®­¨ª 
call .NomBit ;­®¬¥à ¡¨â 
call .RegName ;ॣ¨áâà
call nz,.HLReg
ld a,c
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
pop hl
ld a,2 ;¤«¨­  ª®¤  ª®¬ ­¤ë
ret
;===============================
.L20 cp 0xED ;¯à¥ä¨ªá #ED
jr nz,.L10
ld a,1
ld (.Byte),a ;¤«¨­  ª®¤ 
ld de,"DE" ;¯à¥ä¨ªá ¢ áâபã
ld (.String),de
pop hl
inc hl
push hl
call Ld_a_hl
; ld a,(hl) ;á«¥¤ãî騩 ¡ ©â ª®¬ ­¤ë
cp 0x40 ;®â 0 ¤® 0x3F
jr c,.L21
ld de,TablED-0x40*2
cp 0x7F ;®â 0x40 ¤® 0x7E ¨§ â ¡«¨æë
jr c,.L_12
cp 0xA0 ;®â 0x7F ¤® 0x9F
jr c,.L21
ld de,TablED-0xA0*2+0x40*2-2
cp 0xBC ;®â 0xBC ¤® 0xFF
jr c,.L_12
.L21 ld hl,ED00 ;ª®¬ ­¤  "NOP *"
jr .L_2-3
;===============================
.L10 ld ix,.String
ld de,Tabl00_3F ;â ¡«¨æ  ᬥ饭¨©
cp 0x40 ;ª®¬ ­¤ë 0x00...0x3F
jr c,.L_12
ld de,TablC0_FF ;â ¡«¨æ  ᬥ饭¨©
ld c,a
sub 0xC0 ;ª®¬ ­¤ë 0xC0...0xFF
jr nc,.L_12
ld a,c
cp 0x80
jr nc,.L8
ld hl,MHALT
cp 0x76 ;ª®¤ ª®¬ ­¤ë HALT
jr z,.L_2-3
ld hl,.String+9
ld (hl),"L" ;¬­¥¬®­¨ª  LD
inc hl
ld (hl),"D"
inc hl
ld (hl)," "
inc hl
rrca
rrca
rrca
ex de,hl
call .RegName+1 ;¯¥ç âì ॣ¨áâà 
call nz,.HLReg
ld a,"," ;à §¤¥«¨â¥«ì
ld (de),a
inc de
call .RegName ;¯¥ç âì ॣ¨áâà 
call nz,.HLReg
xor a
jr .L1
.L8 and 00111000b ;ADD,ADC,SUB,SBC,AND,XOR,OR,CP
rrca
rrca
ld l,a
ld h,0
ld de,TablM
add hl,de ;ᬥ饭¨¥ ¢ â ¡«¨æ¥
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ld de,.String+9 ;ª®¯¨à®¢ ­¨¥ ¢ áâபã-¡ãä¥à
ld a,(hl)
ld (de),a
inc de
inc hl
or a
jr nz,$-5
dec de
call .RegName ;¯¥ç âì ॣ¨áâà 
call nz,.HLReg
xor a
jr .L1
.L_12 ld l,a ;à áç¥â  ¤à¥á  ¢ â ¡«¨æ¥
ld h,0
add hl,hl ;*2
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a ; ¤à¥á áâப¨-¬­¥¬®­¨ª¨
ld de,.String+9 ;ª®¯¨à®¢ ­¨¥ ¢ áâபã-¡ãä¥à
.L_2 ld a,(hl)
cp 0x20
jr c,.L1
cp "x" ;¨­¤¥ªá­ë© ॣ¨áâà
jr nz,$+4
.L9 ld a,"X"
ld (de),a
cp ")"
jr nz,$+9
ld (.TablAdr),hl
ld (.StrAdr),de
inc hl
inc de
jr .L_2
.L1 exa
pop hl ;¯¥ç âì ¡ ©â 
call Ld_a_hl
; ld a,(hl)
inc hl
push hl
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
exa
jp z,.LE
dec a ;2-å ¡ ©â­ ï ª®¬ ­¤  (1)
jr nz,.L3
call .TwoByteCom
pop hl
ld a,(.Byte)
inc a
inc a ;¤«¨­  ª®¤ 
ret
.L3 dec a ;3-å ¡ ©â­ ï ª®¬ ­¤  (2)
jr nz,.L4
call .ThreeByteCom
pop hl
ld a,(.Byte)
add a,3 ;¤«¨­  ª®¤ 
ret
.L4 dec a ;ª®¬ ­¤ë ®â­®á¨â¥«ì­®£® ¯¥à¥å®¤  (3)
jr nz,.L7
pop hl
call Ld_a_hl
; ld a,(hl) ;2-© ¡ ©â ª®¬ ­¤ë
inc hl
push hl
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld a,c
ld b,0
pop hl
push hl ;⥪ã騩  ¤à¥á
bit 7,a ;§­ ª ç¨á« 
jr z,$+10
neg
or a ;á¡à®á ä« £  C
ld c,a
sbc hl,bc ;®âà¨æ â¥«ì­®¥ ᬥ饭¨¥
jr $+3
add hl,bc ;¯®«®¦¨â¥«ì­®¥ ᬥ饭¨¥
call NumToStr16
pop hl
ld a,2 ;¤«¨­  ª®¤ 
ret
.L7 dec a ;ª®¬ ­¤ë à ¡®âë á ¯®àâ ¬¨ (4)
jr nz,.L5
inc a
ld (.Byte),a ;¤«¨­  ª®¤ 
ld de,(.StrAdr) ; ¤à¥á ¢áâ ¢ª¨
call .TwoByteCom
jr .L6
.L5 dec a ;3-å ¡ ©â­ë¥ ª®á¢¥­­®©  ¤à¥á æ¨¨ (5)
jr nz,.L11
ld a,(.Byte)
inc a
inc a
ld (.Byte),a ;¤«¨­  ª®¤ 
ld de,(.StrAdr) ; ¤à¥á ¢áâ ¢ª¨
call .ThreeByteCom
jr .L6
.L11 dec a ;¨­¤¥ªá­ë¥ ॣ¨áâàë ᮠᬥ饭¨¥¬ (6)
jr nz,.LE
ld a,2
ld (.Byte),a ;¤«¨­  ª®¤ 
ld de,(.StrAdr) ; ¤à¥á ¢áâ ¢ª¨
pop hl
call Ld_a_hl
ld b,a
; ld b,(hl)
inc hl
push hl
ld ix,.String+4
call .IndexRegSh
.L6 ld hl,(.TablAdr) ; ¤à¥á ¢ â ¡«¨æ¥ ¬­¥¬®­¨ª
ld a,(hl)
cp 0x20
jr nc,.L13
ld a,b
cp "," ;¬­¥¬®­¨ª  ®ª ­ç. ­  ","
jr nz,.LE
call .TwoByteCom
pop hl
ld a,4 ;¤«¨­  ª®¤ 
ret
.L13 ld b,a
cp "x" ;¨­¤¥ªá­ë© ॣ¨áâà
jr nz,$+4
ld a,"X"
ld (de),a
inc hl
inc de
jr .L6+3
.LE pop hl
ld a,(.Byte) ;¤«¨­  ª®¤ 
inc a
ret
;======== ¯¥ç âì ¢â®à®£® ª®¤  ¤¢ãå¡ ©â­®© ª®¬ ­¤ë ========
.TwoByteCom:
pop bc ; ¤à¥á ¢®§¢à â 
pop hl
call Ld_a_hl
; ld a,(hl) ;2-© ¡ ©â ª®¬ ­¤ë
inc hl
push hl
push bc
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld l,c
ld h,0
jp NumToStr8
;======== ¯¥ç âì ¢â®à®£® ¨ âà¥â쥣® ª®¤  âà¥å¡ ©â­®© ª®¬ ­¤ë ========
.ThreeByteCom:
pop bc ; ¤à¥á ¢®§¢à â 
pop hl
call Ld_a_hl
; ld a,(hl) ;2-© ¡ ©â ª®¬ ­¤ë
inc hl
exa
call Ld_a_hl
; ld a,(hl) ;3-© ¡ ©â ª®¬ ­¤ë
inc hl
push hl
push bc
ld b,a
call ConvHexStr
ld (ix+4),l
ld (ix+5),h
exa
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld h,b ;¢ HL - ç¨á«®
ld l,c
jp NumToStr16
;======== ¯¥ç âì ¬­¥¬®­¨ª ª®¬ ­¤ á ¯à¥ä¨ªá®¬ 0xCB (ᤢ¨£¨, ¡¨â®¢ë¥) ========
;A - ¡ ©â ª®¬ ­¤ë
;DE -  ¤à¥á ¢ áâப¥
.ComCBBit:
and 11000000b
rlca
rlca
rlca
rlca
ld l,a
ld de,CB40-4
add hl,de
jr .ComCBSh1
.ComCBSh:
and 00111000b ;ᬥ饭¨¥ ¢ â ¡«¨æ¥
rrca
rrca
ld l,a
ld de,TablCB
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
.ComCBSh1 ld de,.String+9 ;ª®¯¨à®¢ ­¨¥ ¢ áâபã-¡ãä¥à
ld a,(hl)
ld (de),a
inc de
inc hl
cp " " ;¯®á«¥¤­¨© ᨬ¢®« ¬­¥¬®­¨ª¨
jr nz,$-6
ret
;======== ¢ëç¨á«¥­¨¥ ­®¬¥à  ¡¨â  ¢ ¡¨â®¢ëå ª®¬ ­¤ å BIT, SET, RES ========
;C - ¡ ©â ª®¬ ­¤ë
;DE -  ¤à¥á ¢ áâப¥
.NomBit:
ld a,c
and 00111000b ;­®¬¥à ¡¨â 
rrca
rrca
rrca
add a,"0"
ld (de),a
ld a,","
inc de
ld (de),a
inc de
ret
;======== ¯¥ç âì ¨¬¥­¨ ॣ¨áâà  ========
;C - ª®¬ ­¤ 
;DE -  ¤à¥á ¢ áâப¥
.RegName:
ld a,c
and 00000111b ;ॣ¨áâà
add a,"B"
cp "F" ;B,C,D,E
jr c,.RN1
inc a
inc a
cp "H"
jr z,.RN1
add a,3
cp "L"
jr z,.RN1
sub 13
cp "A"
ret nz ;®â­®á¨â¥«ì­ ï  ¤à¥á æ¨ï
.RN1 ld (de),a
inc de
xor a
ret
;======== ¯¥ç âì (HL) ========
;DE -  ¤à¥á ¢ áâப¥
.HLReg:
ex de,hl
ld (hl),"("
inc hl
ld (hl),"H"
inc hl
ld (hl),"L"
inc hl
ld (hl),")"
inc hl
ex de,hl
ret
;======== ¯¥ç âì ¨­¤¥ªá­®© ॣ¨áâ஢®© ¯ àë ᮠᬥ饭¨¥¬ ========
;B - ᬥ饭¨¥
;DE -  ¤à¥á ¢ áâப¥
.IndexRegSh:
ld a,b
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
ex de,hl
ld (hl),"("
inc hl
ld (hl),"I"
inc hl
.IRS1 ld (hl),"X"
inc hl
ld a,"+" ;¯®«®¦¨â¥«ì­®¥ ᬥ饭¨¥
ld (hl),a
ld a,b ;ᬥ饭¨¥
bit 7,b
jr z,$+8
ld a,"-" ;®âà¨æ â¥«ì­®¥ ᬥ饭¨¥
ld (hl),a
ld a,b ;ᬥ饭¨¥
neg
inc hl
ex de,hl
ld l,a
ld h,0
call NumToStr8
ld a,")"
ld (de),a
ret
.String db "00112233 01234567890123456789012"
.Byte db 0
.TablAdr dw 0
.StrAdr dw 0

View File

@ -1,71 +0,0 @@
VERSION EQU #00
CHDISK EQU #01
CURDISK EQU #02
DSKINFO EQU #03
G_ENTRY EQU #04
BOOTDSK EQU #09
CREATE EQU #0A
CREAT_N EQU #0B
ERASE EQU #0D
DELETE EQU #0E
MOVE EQU #0F
RENAME EQU #10
OPEN EQU #11
CLOSE EQU #12
READ EQU #13
WRITE EQU #14
MOVE_FP EQU #15
ATTRIB EQU #16
GET_D_T EQU #17
PUT_D_T EQU #18
F_FIRST EQU #19
F_NEXT EQU #1A
MKDIR EQU #1B
RMDIR EQU #1C
CHDIR EQU #1D
CURDIR EQU #1E
SYSTIME EQU #21
SETTIME EQU #22
WAITKEY EQU #30
SCANKEY EQU #31
ECHOKEY EQU #32
CTRLKEY EQU #33
EDIT EQU #34
K_CLEAR EQU #35
SETWIN EQU #38
SETWIN1 EQU #39
SETWIN2 EQU #3A
SETWIN3 EQU #3B
FREEMEM EQU #3C
GETMEM EQU #3D
RETMEM EQU #3E
SETMEM EQU #3F
EXEC EQU #40
EXIT EQU #41
WAIT EQU #42
GSWITCH EQU #43
DOSNAME EQU #44
SETVMOD EQU #50
GETVMOD EQU #51
LOCATE EQU #52
CURSOR EQU #53
SELPAGE EQU #54
SCROLL EQU #55
CLEAR EQU #56
RDCHAR EQU #57
WRCHAR EQU #58
WINCOPY EQU #59
WINREST EQU #5A
PUTCHAR EQU #5B
PCHARS EQU #5C
RES_PRN EQU #5D
CTRLPRN EQU #5E
PRINT EQU #5F

View File

@ -1,104 +0,0 @@
DSS_VERSION EQU #00
DSS_CHDISK EQU #01
DSS_CURDISK EQU #02
DSS_DSKINFO EQU #03
;DSS_G_ENTRY EQU #04
; EQU #05
; EQU #06
; EQU #07
; EQU #08
DSS_BOOTDSK EQU #09
;File io
DSS_CREATE EQU #0A
DSS_CREAT_N EQU #0B
; EQU #0C
;DSS_ERASE EQU #0D
DSS_DELETE EQU #0E
;DSS_MOVE EQU #0F
DSS_RENAME EQU #10
DSS_OPEN EQU #11
DSS_CLOSE EQU #12
DSS_READ EQU #13
DSS_WRITE EQU #14
DSS_MOVE_FP EQU #15
DSS_ATTRIB EQU #16
DSS_GET_D_T EQU #17
DSS_PUT_D_T EQU #18
DSS_F_FIRST EQU #19
DSS_F_NEXT EQU #1A
DSS_MKDIR EQU #1B
DSS_RMDIR EQU #1C
DSS_CHDIR EQU #1D
DSS_CURDIR EQU #1E
; EQU #1F
; EQU #20
DSS_SYSTIME EQU #21
DSS_SETTIME EQU #22
; EQU #23
; EQU #24
; EQU #25
; EQU #26
; EQU #27
; EQU #28
; EQU #29
; EQU #2A
; EQU #2B
; EQU #2C
; EQU #2D
; EQU #2E
; EQU #2F
;Keyboard
DSS_WAITKEY EQU #30
DSS_SCANKEY EQU #31
DSS_ECHOKEY EQU #32
DSS_CTRLKEY EQU #33
;DSS_EDIT EQU #34
DSS_K_CLEAR EQU #35
DSS_K_SETUP EQU #36
DSS_TESTKEY EQU #37
;Memory
DSS_SETWIN EQU #38
DSS_SETWIN1 EQU #39
DSS_SETWIN2 EQU #3A
DSS_SETWIN3 EQU #3B
DSS_INFOMEM EQU #3C
DSS_GETMEM EQU #3D
DSS_FREEMEM EQU #3E
DSS_SETMEM EQU #3F
;Execution
DSS_EXEC EQU #40
DSS_EXIT EQU #41
DSS_WAIT EQU #42
DSS_GSWITCH EQU #43
DSS_DOSNAME EQU #44
DSS_EX_PATH EQU #45
DSS_ENVIRON EQU #46
DSS_APPINFO EQU #47
; EQU #48
; EQU #49
; EQU #4A
; EQU #4B
; EQU #4C
; EQU #4D
; EQU #4E
; EQU #4F
DSS_SETVMOD EQU #50
DSS_GETVMOD EQU #51
DSS_LOCATE EQU #52
DSS_CURSOR EQU #53
DSS_SELPAGE EQU #54
DSS_SCROLL EQU #55
DSS_CLEAR EQU #56
DSS_RDCHAR EQU #57
DSS_WRCHAR EQU #58
DSS_WINCOPY EQU #59
DSS_WINREST EQU #5A
DSS_PUTCHAR EQU #5B
DSS_PCHARS EQU #5C
;DSS_RES_PRN EQU #5D
;DSS_CTRLPRN EQU #5E
DSS_PRINT EQU #5F
;

View File

@ -1,6 +1,6 @@
BiosRst EQU #08
;”㭪樨 à ¡®âë á ¯ ¬ïâìî
;Функции работы с памятью
Bios.Emm_Fn0 EQU #C0
Bios.Emm_Fn1 EQU #C1
Bios.Emm_Fn2 EQU #C2
@ -13,7 +13,7 @@ Bios.Emm_Fn8 EQU #C8
Bios.Emm_Fn9 EQU #C9
;”㭪樨 ã¯à ¢«¥­¨ï ®ª­ ¬¨ ¨ ०¨¬ ¬¨ íªà ­ 
;Функции управления окнами и режимами экрана
Bios.Win_Open EQU #B0
Bios.Win_Close EQU #B1
Bios.Win_Copy_Win EQU #B2
@ -26,7 +26,7 @@ Bios.Win_Get_ZG EQU #B8
;”㭪樨 ¢ë¢®¤  ⥪áâ  ­  íªà ­
;Функции вывода текста на экран
Bios.Lp_Print_All EQU #81
Bios.Lp_Print_Sym EQU #82
Bios.Lp_Print_Atr EQU #83
@ -42,7 +42,7 @@ Bios.Lp_Print_Ln6 EQU #8C
Bios.Lp_Cls_Win2 EQU #8D
Bios.Lp_Get_Place EQU #8E
;”㭪樨 à ¡®âë á ¦¥á⪨¬¨ ¤¨áª ¬¨ ¨ ¤¨áª®¢®¤ ¬¨
;Функции работы с жесткими дисками и дисководами
Bios.Drv_Reset EQU #51
Bios.Drv_Verify EQU #54
Bios.Drv_Read EQU #55

View File

@ -1,105 +1,105 @@
DssRst EQU #10
DssRst EQU 0x10
Dss.Version EQU #00
Dss.ChDisk EQU #01
Dss.CurDisk EQU #02
Dss.DskInfo EQU #03
;Dss.G_ENTRY EQU #04
; EQU #05
; EQU #06
; EQU #07
; EQU #08
Dss.BOOTDSK EQU #09
Dss.Version EQU 0x00
Dss.ChDisk EQU 0x01
Dss.CurDisk EQU 0x02
Dss.DskInfo EQU 0x03
;Dss.G_ENTRY EQU 0x04
; EQU 0x05
; EQU 0x06
; EQU 0x07
; EQU 0x08
Dss.BOOTDSK EQU 0x09
;File io
Dss.Create EQU #0A
Dss.Creat_N EQU #0B
; EQU #0C
;Dss.ERASE EQU #0D
Dss.Delete EQU #0E
;Dss.Move EQU #0F
Dss.Rename EQU #10
Dss.Open EQU #11
Dss.Close EQU #12
Dss.Read EQU #13
Dss.Write EQU #14
Dss.Move_FP EQU #15
Dss.Attrib EQU #16
Dss.Get_D_T EQU #17
Dss.Put_D_T EQU #18
Dss.F_First EQU #19
Dss.F_Next EQU #1A
Dss.MkDir EQU #1B
Dss.RmDir EQU #1C
Dss.ChDir EQU #1D
Dss.CurDir EQU #1E
; EQU #1F
; EQU #20
Dss.SysTime EQU #21
Dss.SetTime EQU #22
; EQU #23
; EQU #24
; EQU #25
; EQU #26
; EQU #27
; EQU #28
; EQU #29
; EQU #2A
; EQU #2B
; EQU #2C
; EQU #2D
; EQU #2E
; EQU #2F
Dss.Create EQU 0x0A
Dss.Creat_N EQU 0x0B
; EQU 0x0C
;Dss.ERASE EQU 0x0D
Dss.Delete EQU 0x0E
;Dss.Move EQU 0x0F
Dss.Rename EQU 0x10
Dss.Open EQU 0x11
Dss.Close EQU 0x12
Dss.Read EQU 0x13
Dss.Write EQU 0x14
Dss.Move_FP EQU 0x15
Dss.Attrib EQU 0x16
Dss.Get_D_T EQU 0x17
Dss.Put_D_T EQU 0x18
Dss.F_First EQU 0x19
Dss.F_Next EQU 0x1A
Dss.MkDir EQU 0x1B
Dss.RmDir EQU 0x1C
Dss.ChDir EQU 0x1D
Dss.CurDir EQU 0x1E
; EQU 0x1F
; EQU 0x20
Dss.SysTime EQU 0x21
Dss.SetTime EQU 0x22
; EQU 0x23
; EQU 0x24
; EQU 0x25
; EQU 0x26
; EQU 0x27
; EQU 0x28
; EQU 0x29
; EQU 0x2A
; EQU 0x2B
; EQU 0x2C
; EQU 0x2D
; EQU 0x2E
; EQU 0x2F
;Keyboard
Dss.WaitKey EQU #30
Dss.ScanKey EQU #31
Dss.EchoKey EQU #32
Dss.CTRLKey EQU #33
;Dss.EDIT EQU #34
Dss.K_CLEAR EQU #35
Dss.K_SETUP EQU #36
Dss.TESTKEY EQU #37
Dss.WaitKey EQU 0x30
Dss.ScanKey EQU 0x31
Dss.EchoKey EQU 0x32
Dss.CTRLKey EQU 0x33
;Dss.EDIT EQU 0x34
Dss.K_CLEAR EQU 0x35
Dss.K_SETUP EQU 0x36
Dss.TESTKEY EQU 0x37
;Memory
Dss.SetWin EQU #38
Dss.SetWin1 EQU #39
Dss.SetWin2 EQU #3A
Dss.SetWin3 EQU #3B
Dss.INFOMEM EQU #3C
Dss.GetMem EQU #3D
Dss.FreeMem EQU #3E
Dss.SetMem EQU #3F
Dss.SetWin EQU 0x38
Dss.SetWin1 EQU 0x39
Dss.SetWin2 EQU 0x3A
Dss.SetWin3 EQU 0x3B
Dss.INFOMEM EQU 0x3C
Dss.GetMem EQU 0x3D
Dss.FreeMem EQU 0x3E
Dss.SetMem EQU 0x3F
;Execution
Dss.Exec EQU #40
Dss.Exit EQU #41
Dss.Wait EQU #42
Dss.Exec EQU 0x40
Dss.Exit EQU 0x41
Dss.Wait EQU 0x42
Dss.GSwitch EQU #43
Dss.DosName EQU #44
Dss.EX_Path EQU #45
Dss.Environ EQU #46
Dss.AppInfo EQU #47
; EQU #48
; EQU #49
; EQU #4A
; EQU #4B
; EQU #4C
; EQU #4D
; EQU #4E
; EQU #4F
Dss.GSwitch EQU 0x43
Dss.DosName EQU 0x44
Dss.EX_Path EQU 0x45
Dss.Environ EQU 0x46
Dss.AppInfo EQU 0x47
; EQU 0x48
; EQU 0x49
; EQU 0x4A
; EQU 0x4B
; EQU 0x4C
; EQU 0x4D
; EQU 0x4E
; EQU 0x4F
Dss.SetVMod EQU #50
Dss.GetVMod EQU #51
Dss.Locate EQU #52
Dss.Cursor EQU #53
Dss.SelPage EQU #54
Dss.Scroll EQU #55
Dss.Clear EQU #56
Dss.RdChar EQU #57
Dss.WrChar EQU #58
Dss.WinCopy EQU #59
Dss.WinRest EQU #5A
Dss.PutChar EQU #5B
Dss.PChars EQU #5C
;Dss.RES_PRN EQU #5D
;Dss.CTRLPRN EQU #5E
Dss.Print EQU #5F
Dss.SetVMod EQU 0x50
Dss.GetVMod EQU 0x51
Dss.Locate EQU 0x52
Dss.Cursor EQU 0x53
Dss.SelPage EQU 0x54
Dss.Scroll EQU 0x55
Dss.Clear EQU 0x56
Dss.RdChar EQU 0x57
Dss.WrChar EQU 0x58
Dss.WinCopy EQU 0x59
Dss.WinRest EQU 0x5A
Dss.PutChar EQU 0x5B
Dss.PChars EQU 0x5C
;Dss.RES_PRN EQU 0x5D
;Dss.CTRLPRN EQU 0x5E
Dss.Print EQU 0x5F
;

View File

@ -1,86 +0,0 @@
;[]=========================================================================[]
;[] Ž¡à ¡®âª  ®è¨¡®ª ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 27.08.2006 []
;[] []
;[] ErDss - ®¯à¥¤¥«¥­¨¥ ®è¨¡ª¨ DSS ¯® ¥¥ ª®¤ã []
;[]=========================================================================[]
;[]=========================================================================[]
;[] Žè¨¡ª¨ DSS []
;[] ‚室: A - ª®¤ ®è¨¡ª¨ []
;[] ‚ë室: A - ª®¤ ®è¨¡ª¨ []
;[] HL - áâப -®¯¨á ­¨¥ ®è¨¡ª¨ []
;[]=========================================================================[]
PrErDss:
call ErDss
ld c,Dss.PChars ;¢ë¢¥á⨠ᮮ¡é¥­¨¥ ®¡ ®è¨¡ª¥
rst DssRst
ld hl,Str.DA ;¯¥à¥¢®¤ áâப¨
ld c,Dss.PChars
rst DssRst
ret
ErDss:
.MaxError equ 0x26
cp .MaxError+1 ;¬ ªá¨¬ «ì­ë© ª®¤ ®è¨¡ª¨ + 1
jr c,$+4
ld a,.MaxError
push af
add a,a
ld hl,.Tabl
ld d,0
ld e,a
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
pop af
ret
.e01 db "Invalid function",0
.e02 db "Invalid drive number",0
.e03 db "File not found",0
.e04 db "Path not found",0
.e05 db "Invalid handle",0
.e06 db "Too many open files",0
.e07 db "File already exists",0
.e08 db "File read only",0
.e09 db "Root overflow",0
.e0A db "No free space",0
.e0B db "Directory not empty",0
.e0C db "Can't delete current directory",0
.e0D db "Invalid media",0
.e0E db "Unknown operation",0 ;(­¥¢®§¬. ®¯¥à æ¨ï)
.e0F db "Directory exist",0
.e10 db "Invalid filename",0
.e11 db "Invalid EXE-file",0
.e12 db "Not supported EXE-file",0
.e13 db "Access denied",0
.e14 db "Not ready",0
.e15 db "Seek error",0
.e16 db "Sector not found",0
.e17 db "CRC error",0
.e18 db "Write protect",0
.e19 db "Read error",0
.e1A db "Write error",0
.e1B db "Drive failure",0
.e1C db "Extended error: 28",0
.e1D db "Extended error: 29",0
.e1E db "Not enough memory",0
.e1F db "Invalid memory block",0
.e20 db "Extended error: 32",0
.e21 db "Extended error: 33",0
.e22 db "Extended error: 34",0
.e23 db "Too many files",0 ;(ᯨ᮪ ä ©«®¢)
.e24 db "(᫨誮¬ ¡®«ìè ï ¢«®¦. ¯ ¯®ª ¨«¨ >= 1024 ¯ ¯®ª)",0
.e25 db "User abort",0 ;(®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬)
.e26 db "Unknown error: 38..255",0 ;38
.Tabl dw .e01,.e02,.e03,.e04,.e05,.e06,.e07,.e08
dw .e09,.e0A,.e0B,.e0C,.e0D,.e0E,.e0F,.e10
dw .e11,.e12,.e13,.e14,.e15,.e16,.e17,.e18
dw .e19,.e1A,.e1B,.e1C,.e1D,.e1E,.e1F,.e20
dw .e21,.e22,.e23,.e24,.e25,.e26

274
FILE.ASM
View File

@ -1,274 +0,0 @@
;[]=========================================================================[]
;[] ” ©«®¢ë¥ ¯à®æ¥¤ãàë ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 27.08.2006 []
;[]=========================================================================[]
LoadFile:
xor a ;¢ëª« ç á®¢
ld (ClockOn),a
ld bc,0x0100+Dss.SelPage ;á¨á⥬­ë© íªà ­
rst DssRst
ld hl,Str.Load ;á®®¡é¥­¨¥ ® § £à㧪¥ ä ©« 
ld c,Dss.PChars
rst DssRst
call LoadExe
ld a,(DemonScreen)
ld b,a
ld c,Dss.SelPage
rst DssRst
ld a,On ;¢ª« ç á®¢
ld (ClockOn),a
ret
LoadExe:
ld hl,FDebug ;¨¬ï ä ©« 
ld a,1 ;®âªàëâì ¤«ï ç⥭¨ï
ld c,Dss.Open
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (FId),a ;§ ¯®¬­¨âì ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld hl,FDebug ;¡ãä¥à ¤«ï § £à㧪¨ § £®«®¢ª 
ld de,0x7F ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld c,Dss.Read ;ç⥭¨¥
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld hl,(FDebug) ;§ £®«®¢®ª EXE-ä ©« 
ld de,0x5845 ;'EX' ¯à®¢¥àª  ¨¤¥­â¨ä¨ª â®à 
sbc hl,de
jr nz,.L1
ld hl,FDebug+3
ld a,(hl) ;¢¥àá¨ï EXE-ä ©« 
or a
jr nz,.L1
inc hl
ld e,(hl) ;­ ç «® ¨á¯®«­ï¥¬®£® ª®¤ 
inc hl
ld d,(hl)
ld bc,11 ;¯à®¯ã᪠¥¬ ä« £ § £àã§ç¨ª  ¨ § à¥§¥à¢¨à®¢ ­­ë¥ ¡ ©âë
add hl,bc
ld a,(hl) ;¬«.¡ ©â à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
ld (FRam),a
inc hl
ld a,(hl) ;áâ.¡ ©â à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
ld (FRam+1),a
inc hl
ld a,(hl) ;¬«.¡ ©â  ¤à¥á  § ¯ã᪠
ld (Reg._PC),a
ld (ListAdr),a ;¬«.¡ ©â  ¤à¥á  «¨á⨭£ 
inc hl
ld a,(hl) ;áâ.¡ ©â  ¤à¥á  § ¯ã᪠
ld (Reg._PC+1),a
ld (ListAdr+1),a ;áâ.¡ ©â  ¤à¥á  «¨á⨭£ 
inc hl
ld a,(hl) ;¬«.¡ ©â á⥪  ¯à®£à ¬¬ë
ld (Reg._SP),a
inc hl
ld a,(hl) ;áâ.¡ ©â á⥪  ¯à®£à ¬¬ë
ld (Reg._SP+1),a
ld a,e
ld (.L2+2),a
ld a,d
ld (.L2+3),a
.L1 ld hl,0
ld ix,0 ;ᬥ饭¨¥ ¢ ä ©«¥
ld bc,2*256+Dss.Move_FP ;®â­®á¨â¥«ì­® ª®­æ 
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
push hl
ld de,(FRam) ; ¤à¥á à á¯®«®¦¥­¨ï ª®¤ 
set 6,d
res 7,d ;£à㧨¬ ç¥à¥§ 1-¥ ®ª­®
ld hl,0x8000
or a ;á¡à®á¨âì ä« £ C
sbc hl,de ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld (.L6+1),hl
ex de,hl
ld (.L6+4),hl
pop hl
call NBank ;®¯à¥¤¥«¨âì ª®«-¢® ¡ ­®ª
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (MemId+1),a ;ª®«-¢® ¢ë¤¥«ï¥¬ëå áâà ­¨æ
ld b,a
ld c,Dss.GetMem ;¢ë¤¥«¥­¨¥ ¯ ¬ïâ¨
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (MemId),a ;id ¡«®ª  ¯ ¬ïâ¨
ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld hl,0
.L2 ld ix,0 ;ᬥ饭¨¥ ¢ ä ©«¥
ld bc,Dss.Move_FP ;®â­®á¨â¥«ì­® ­ ç « 
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,Dss.SetWin1 ;¢ª« 1-î ¡ ­ªã ¢ 1-¥ ®ª­®
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
.L6 ld de,0x3FFF ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld hl,0x4000 ; ¤à¥á § £à㧪¨ ª®¤ 
ld a,1 ;áç¥â稪 ¡ ­®ª
ld (MemId+2),a
.L5 ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld c,Dss.Read ;ç⥭¨¥
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld bc,(MemId+1)
ld a,b
cp c ;§ £à§¨«¨ ¢¥áì ä ©«?
jr z,.L4 ;¯¥à¥å®¤, ¥á«¨ ¤ 
inc a
ld (MemId+2),a ;㢥«¨ç¨âì áç¥â稪 ¡ ­®ª
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld c,Dss.SetWin1 ;¢ª« ¡ ­ªã ¢ 1-¥ ®ª­®
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld hl,0x4000 ; ¤à¥á ¢ ¯ ¬ï⨠¤«ï § £à㧪¨
ld de,0x3FFF ;ª®«-¢® § £à㦠¥¬ëå ¡ ©â
jr .L5
.L4 ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld c,Dss.Close ;§ ªàëâì ä ©«
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 1-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
dec a
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,1*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 2-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+1),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
cp 2
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,2*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 3-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+2),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
cp 3
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,3*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 4-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+3),a
.L7 ld hl,WinPage
ld de,BankP
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
ld b,a
cp 5
jr c,$+4
ld b,4 ;¯®¤ª«îç ¥¬ ­¥ ¡®«¥¥ 4 ¡ ­®ª
ld a,(FRam+1) ;áâ. ¤à¥á à á¯®«®¦¥­¨ï ª®¤ 
and 0xC0 ;®ª­® á à á¯®«®¦¥­¨¥¬ ª®¤ 
or a ;0-¥ ®ª­®
jr nz,.L8
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L8 inc hl
cp 0x40 ;1-¥ ®ª­®
jr nz,.L9
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L9 inc hl
cp 0x80 ;2-¥ ®ª­®
jr nz,.L10
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L10 inc hl ;¨­ ç¥ 3-¥ ®ª­®
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
ret
;[]=========================================================================[]
;[] ‚ëç¨á«¥­¨¥ ­¥®¡å®¤¨¬®£® ª®«-¢  ¡ ­®ª ¤«ï § £à㧪¨ ä ©«  ¢ ¯ ¬ïâì []
;[] ‚室: HL:IX - ¤«¨­  ä ©«  ¢ ¡ ©â å []
;[] DE - ª®«-¢® ¡ ©â ¤«ï § £à㧪¨ ¢ 1-î ¡ ­ªã []
;[] ‚ë室: A - ª®«-¢® ­¥®¡å®¤¨¬ëå ¡ ­®ª []
;[] ä« £ C - ®è¨¡ª , ª®¤ ®è¨¡ª¨ ¢ A []
;[]=========================================================================[]
NBank:
push ix
ld b,h
ld c,l
pop hl
inc bc
xor a
inc a
sbc hl,de
jr nc,$+4
jr .L5
ld de,16384 ;à §¬¥à ¡ ­ª¨
push af
.L2 pop af
.L1 inc a
jr z,.L3
sbc hl,de
jr nc,.L1
.L5 dec bc
push af
ld a,b
or c
jr nz,.L2
pop af
or a ;á¡à®á¨âì ä« £ C
ret
.L3 ld a,0x1E ;"<22>¥¤®áâ â®ç­® ¯ ¬ïâ¨"
; JP ErrorDSS
ret
BankP ds 4 ;­®¬¥à  ¡ ­®ª § £à㦠¥¬®© ¯à®£¨
MemId ds 3 ;id-¡«®ª  ¯ ¬ï⨠¯®¤ ä ©«,
;ª®«-¢® ¢ë¤¥«¥­­ëå ¡ ­®ª,
;áç¥â稪 § £à㦥­­ëå ¡ ­®ª
FId db 0 ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
FDebug ds 128
db 0
FStart dw 0x4200
FRam dw 0 ; ¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨

246
KDUMP.ASM
View File

@ -1,246 +0,0 @@
;[]=========================================================================[]
;[] Ž¡à ¡®âª  ª« ¢¨ âãàë ¢ ®ª­¥ ¤ ¬¯  []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 31.03.2006 []
;[]=========================================================================[]
KDump:
ld a,b ;á®áâ®ï­¨¥ <Shift><Alt><Ctrl>
and 11110000b
jr z,.L100
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Ctrl + ᨬ¢®«
.L10 cp 00100000b ;<Ctrl>
jp nz,.L100
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x51 ;<Ctrl>+<End)
jr nz,.L11
ld hl,.Coordinate ;⥪ãé ï ª®«®­ª 
ld a,16
cp (hl)
jr nc,$+4
ld a,32
inc a
ld (hl),a
jp Keyb-3
.L11 cp 0x80+0x57 ;<Ctrl>+<Home)
jp nz,Keyb-3
; jr nz,.L11
ld hl,.Coordinate ;⥪ãé ï ª®«®­ª 
ld a,18
cp (hl)
jr c,$+8
ld a,2
cp (hl)
jr c,$+3
dec a
ld (hl),a
jp Keyb-3
;Ž¡à ¡®âª  ¯®§¨æ¨®­­®£® ª®¤ 
.L100 ld a,e ;ASCII ª®¤
ld (.L200+1),a
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
ld de,(.Coordinate) ;⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
cp 0x56 ;<Right>
jr nz,.L101
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
cp e
ld a,e
jr nz,$+3
xor a
inc a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L101 cp 0x54 ;<Left>
jr nz,.L102
ld a,e ;⥪ãé ï ª®«®­ª 
cp 1
jr nz,$+6
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
inc a
dec a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L102 ld hl,(.Descript)
cp 0x52 ;<Down>
jr nz,.L103
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L104
ld hl,(Dump1)
ld bc,16
add hl,bc
ld (Dump1),hl
jp Keyb-11
.L104 inc a
ld (.Coordinate+1),a
jp Keyb-3
.L103 cp 0x58 ;<Up>
jr nz,.L105
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L107
ld hl,(Dump1)
ld bc,16
or a
sbc hl,bc
ld (Dump1),hl
jp Keyb-11
.L107 dec a
ld (.Coordinate+1),a
jp Keyb-3
.L105 cp 0x53 ;<PgDown>
jr nz,.L108
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L106
ld hl,(Dump1)
ld bc,16*7
add hl,bc
ld (Dump1),hl
jp Keyb-11
.L106 ld a,l ;­  ¯®á«¥¤­îî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L108 cp 0x59 ;<PgUp>
jr nz,.L110
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L109
ld hl,(Dump1)
ld bc,16*7
or a
sbc hl,bc
ld (Dump1),hl
jp Keyb-11
jr nz,.L109
.L109 ld a,h ;­  ¯¥à¢ãî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L110 cp 0x57 ;<Home>
jr nz,.L111
ld a,1
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
.L111 cp 0x51 ;<End>
jr nz,.L200
ld a,(.Descript+2)
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
;Ž¡à ¡®âª  ASCII ª®¤®¢
.L200 ld a,0 ;ASCII ª®¤
cp 0x0D ;<Enter>
jp nz,Keyb+6
.L201 ld b,0 ;¤«¨­  áâப¨ ¢¢®¤ 
ld hl,0 ;ª®®à¤¨­ âë áâப¨ ¢¢®¤ 
ld a,b
dec a
jr z,.L202
dec a
jr z,.L203
call InputLine ;¢¢®¤  ¤à¥á 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutAdres
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
ld de,16 ;ª®«-¢® ¡ ©â ¢ áâப¥
ld a,(.Coordinate+1) ;­®¬¥à áâப¨
sub 0x16 ;ª®®à¤¨­ â  ¯¥à¢®© áâப¨
jr z,$+8
ld b,a
or a
sbc hl,de
djnz $-3
ld (Dump1),hl
jp Keyb-11
.L202 call InputLineEd ;¢¢®¤ ᨬ¢®« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call .L299
ld a,c
sub 18 ;¯¥à¢ ï ª®«®­ª  ¢ ¯®«¥ ¤ ­­ëå
ld c,a
ld a,(InputLine.Buffer)
ld de,256*18+34 ;1-ï ¨ ¯®á«¥¤­ïï+1 ª®«®­ª¨
jr .L204
.L203 call InputLineEd ;¢¢®¤ ª®¤  ᨬ¢®« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutCode
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
call .L299
ld a,c
sub 2 ;¯¥à¢ ï ª®«®­ª  ¢ ¯®«¥ ¤ ­­ëå
ld c,a
ld a,(PutCode.Buffer) ;§ ¯¨á뢠¥¬ë© ¡ ©â
ld de,256*2+18 ;1-ï ¨ ¯®á«¥¤­ïï+1 ª®«®­ª¨
.L204 add hl,bc
call Ld_hl_a
ld a,(InputLine.EntEnd) ;¢¢®¤ § ª®­ç¥­ ENTER
or a
jp nz,Keyb-11 ;¤ 
ld hl,.Coordinate ;⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
inc (hl)
ld a,e ;¯¥à¢ ï ª®«®­ª  ¤ ­­ëå
cp (hl)
jr nz,.L205
ld a,d
ld (hl),a ;¢ ­ ç «® áâப¨ ª®¤ 
inc hl
ld a,0x1D ;¯®á«¥¤­ïï áâப  ¤ ¬¯ 
cp (hl)
jr nz,.L205-1
ld hl,(Dump1) ;ᤢ¨­ãâì ¤ ¬¯
ld bc,16
add hl,bc
ld (Dump1),hl
jr .L205
inc (hl)
.L205 call CursorRes ;¢ëª« ªãàá®à
call Refresh ;®¡­®¢«¥­¨¥ íªà ­ 
call Cursor ;¢ª« ªãàá®à
call CursorSet
jp .L201
.L299 ld de,16 ;ª®«-¢® ¡ ©â ¢ áâப¥
ld hl,(Dump1) ; ¤à¥á ¢ ¯¥à¢®© áâப¥
ld bc,(.Coordinate)
ld a,b
sub 0x16 ;ª®®à¤¨­ â  ¯¥à¢®© áâப¨
ld b,a
ret z
add hl,de
djnz $-1
ret
.Coordinate dw 0x1601 ;ªãàá®à (áâà/ª®« ªãàá®à )
.Descript:
dw 0x161D ;¯¥à¢ ï/¯®á«¥¤­ïï áâப  ®ª­ 
db 33 ;ª®«-¢® ª®«®­®ª
db 0x0E ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x15,2,0x17,2
db 0x1A,2,0x1C,2
db 0x1F,2,0x21,2
db 0x24,2,0x26,2
db 0x29,2,0x2B,2
db 0x2E,2,0x30,2
db 0x33,2,0x35,2
db 0x38,2,0x3A,2
db 0x3E,1,0x3F,1,0x40,1,0x41,1
db 0x42,1,0x43,1,0x44,1,0x45,1
db 0x46,1,0x47,1,0x48,1,0x49,1
db 0x4A,1,0x4B,1,0x4C,1,0x4D,1

1202
KEYB.ASM

File diff suppressed because it is too large Load Diff

440
KREG.ASM
View File

@ -1,440 +0,0 @@
;[]=========================================================================[]
;[] Ž¡à ¡®âª  ª« ¢¨ âãàë ¢ ®ª­¥ ॣ¨áâ஢ []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 11.03.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 14.05.2006 []
;[]=========================================================================[]
KReg:
; ld a,b ;á®áâ®ï­¨¥ <Shift><Alt><Ctrl>
; and 0b11110000
; jr z,.L100
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Shift + ᨬ¢®«
; and 0b11000000 ;<Shift>
; or a
; jp z,Keyb+6
; ld a,d
; cp 0x80+0x0F ;Shift+Tab
; jp nz,Keyb+6
; ld a,2 ;­®¬¥à ®ª­  ¤ ¬¯ 
; ld (Keyb.WinScreen),a
; jp Keyb-3
;Ž¡à ¡®âª  ¯®§¨æ¨®­­®£® ª®¤ 
.L100 ld a,e ;ASCII ª®¤
ld (.L200+1),a
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x56 ;<Right>
jr nz,.L101
call .DescCalc
ld a,(hl) ;ª®«-¢® ª®«®­®ª
cp e
ld a,e
jr nz,$+3
xor a
inc a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L101 cp 0x54 ;<Left>
jr nz,.L102
call .DescCalc
ld a,e ;⥪ãé ï ª®«®­ª 
cp 1
jr nz,$+4
ld a,(hl) ;ª®«-¢® ª®«®­®ª
inc a
dec a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L102 ld hl,(.Descript)
ld de,(.Coordinate)
cp 0x52 ;<Down>
jr nz,.L103
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L104
ld a,h ;1-ï áâப 
dec a
.L104 inc a
jr .L107+1
.L103 cp 0x58 ;<Up>
jr nz,.L105
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L107
ld a,l ; ¤à¥á ¯®á«¥¤­¥© áâப¨
inc a
.L107 dec a
ld h,a
ld l,1
ld (.Coordinate),hl
jp Keyb-3
.L105 ld b,3
cp 0x53 ;<PgDown>
jr nz,.L108
ld hl,.PgDown
ld a,d ;⥪ãé ï áâப 
cp (hl)
jr c,$+5
inc hl
djnz $-4
ld a,(hl)
jr .L107+1
.L108 cp 0x59 ;<PgUp>
jr nz,.L110
ld hl,.PgUp
ld a,d ;⥪ãé ï áâப 
cp (hl)
jr nc,$+5
inc hl
djnz $-4
ld a,(hl)
dec a
jr .L107+1
.L110 cp 0x57 ;<Home>
jr nz,.L111
ld a,1
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
.L111 cp 0x51 ;<End>
jr nz,.L200
call .DescCalc
ld a,(hl) ;¯®á«¥¤­ïï ª®«®­ª 
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
;.L112 cp 0x0F ;<Tab>
; jr nz,.L200
; ld a,4 ;­®¬¥à ®ª­  «¨á⨭£ 
; ld (Keyb.WinScreen),a
; jp Keyb-3
;Ž¡à ¡®âª  ASCII ª®¤®¢
.L200 ld a,0 ;ASCII ª®¤
cp 0x0D ;<Enter>
jp nz,Keyb+6
.L201 ld b,0 ;¤«¨­  áâப¨ ¢¢®¤ 
ld hl,0 ;ª®®à¤¨­ âë áâப¨ ¢¢®¤ 
ld a,b
dec a
jp nz,.L205
ld de,(.Coordinate)
ld a,d ;­®¬¥à áâப¨
ld c,e ;­®¬¥à ª®«®­ª¨
ex de,hl ;ª®®à¤¨­ âë
ld hl,Reg._AF+1 ;ॣ A
cp 6 ;áâப  á ¯ à®© AF?
jr z,.L207
ld hl,Reg._AF_+1 ;ॣ A'
cp 11 ;áâப  á ¯ à®© AF'?
jr z,.L207
ld hl,Reg._AF ;ॣ F
cp 7 ;áâப  á ¯ à®© AF?
jr z,$+9
ld hl,Reg._AF_ ;ॣ F'
cp 12 ;áâப  á ¯ à®© AF'?
jr nz,.L206
ld a,c ;ª®à४æ¨ï ­®¬¥à®¢ ¡¨â
cp 4 ;ª®«®­ª  4..6?
jr c,$+5
inc c
jr .L207-4
cp 3 ;ª®«®­ª  3?
jr z,.L207-4
dec c
ld a,7
jr .L208
.L207 ld a,10 ;ª®«®­ª¨ á ¡¨â ¬¨
cp c
jr z,.L206
dec a
.L208 sub c ;­®¬¥à ¡¨â 
rlca
rlca
rlca ;§ £®â®¢ª  ¤«ï ¡¨â®¢ëå ®¯¥à æ¨©
ld b,a
or 01000110b ;¤«ï BIT
ld ($+16),a
ld a,b
or 11000110b ;¤«ï SET
ld ($+14),a
ld a,b
or 10000110b ;¤«ï RES
ld ($+13),a
bit 0,(hl) ;á®áâ®ï­¨¥ ¡¨â 
jr nz,$+7
set 0,(hl) ;ãáâ ­®¢ª  ¡¨â 
jp Keyb-11
res 0,(hl) ;á¡à®á ¡¨â 
jp Keyb-11
.L206 ex de,hl ;ª®®à¤¨­ âë
call InputLine ;¢¢®¤ ᨬ¢®« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
ld de,.L204-5
push de
ld de,(.Coordinate)
ld hl,Reg._AF+1
ld a,d
ld de,0
cp 6 ;áâப  á ¯ à®© AF
ret z
ld hl,Reg._AF_+1
cp 11 ;áâப  á ¯ à®© AF'?
ret z
ld de,(.Coordinate)
ld a,e
sub 6
ld e,a
jr .L209
.L205 dec a ;¡ ©âë ¢ ¬¨­¨¤ ¬¯¥
jr nz,.L202
call InputLine ;¢¢®¤ ç¨á« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutCode
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
ld de,.L204
push de
ld de,(.Coordinate)
.L209 dec d
jr nz,$+6
ld hl,(Reg._IX)
ret
dec d
jr nz,$+6
ld hl,(Reg._IY)
ret
dec d
jr nz,$+6
ld hl,(Reg._HL)
ret
dec d
jr nz,$+6
ld hl,(Reg._DE)
ret
dec d
jr nz,$+6
ld hl,(Reg._BC)
ret
dec d
dec d
dec d
jr nz,$+6
ld hl,(Reg._HL_)
ret
dec d
jr nz,$+6
ld hl,(Reg._DE_)
ret
dec d
ld hl,(Reg._BC_)
ret
ld a,(InputLine.Buffer)
jr $+7
.L204 ld a,(PutCode.Buffer) ;§ ¯¨á뢠¥¬ë© ¡ ©â
dec e
dec e ;ᬥ饭¨¥ ¢ ¬¨­¨¤ ¬¯¥
add hl,de ; ¤à¥á ¢ ¯ ¬ïâ¨
call Ld_hl_a ;§ ¯¨á «¨
jp Keyb-11
.L202 dec a ;®¤­®¡ ©â­®¥ ç¨á«® (­®¬¥à ¡ ­ª¨)
jr nz,.L203
call InputLine ;¢¢®¤ ç¨á« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutAdres
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
ld de,Keyb-11
push de
ld a,l
ld de,(.Coordinate)
dec e ;ª®«®­ª  ¢ áâப¥
jr nz,$+6
ld (WinPage),a ;0-¥ ®ª­®
ret
dec e
jr nz,$+8
ld (WinPage+1),a ;1-¥ ®ª­®
out (EmmWin.P1),a
ret
dec e
jr nz,$+6
ld (WinPage+2),a ;2-¥ ®ª­®
ret
ld (WinPage+3),a ;3-¥ ®ª­®
out (EmmWin.P3),a
ret
.L203 dec a ;£«ã¡¨­  á⥪ 
jr nz,.L210
xor a ;®¡­ã«¨âì
ld (StackDown),a
jp Keyb-11
.L210 ;dec a ;¤¢ãå¡ ©â­®¥ ç¨á«®
;jp nz,Keyb+6
call InputLine ;¢¢®¤ ç¨á«  ¢ ॣ ¯ àë
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutAdres
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
ld de,Keyb-11
push de
ld de,(.Coordinate)
dec d
jr nz,$+6
ld (Reg._IX),hl
ret
dec d
jr nz,$+6
ld (Reg._IY),hl
ret
dec d
jr nz,$+6
ld (Reg._HL),hl
ret
dec d
jr nz,$+6
ld (Reg._DE),hl
ret
dec d
jr nz,$+6
ld (Reg._BC),hl
ret
dec d
jr nz,$+6
ld (Reg._AF),hl
ret
dec d
dec d
jr nz,$+6
ld (Reg._HL_),hl
ret
dec d
jr nz,$+6
ld (Reg._DE_),hl
ret
dec d
jr nz,$+6
ld (Reg._BC_),hl
ret
dec d
jr nz,$+6
ld (Reg._AF_),hl
ret
dec d
dec d
jr nz,$+13
dec e
jr z,$+6
ld (Reg._IR),hl
ret
ld (Reg._PC),hl
ret
dec e
jr z,.L211
.Rez ld bc,Rezident.End-Rezident;¤«¨­  १¨¤¥­â 
push hl ;­®¢®¥ ­ ç «® १¨¤¥­â 
add hl,bc ;­®¢ë© ª®­¥ç­ë©  ¤à¥á १¨¤¥­â 
ld a,h
and 11000000b
ld d,a
pop hl
ld a,h
and 11000000b
cp d ;१¨¤¥­â ¯¥à¥á¥ª ¥â ®ª­®?
jr z,.L212
ld h,d
ld l,0
dec hl ;¯®á«¥¤­¨©  ¤à¥á ®ª­  á १¨¤¥­â®¬
or a
sbc hl,bc
.L212 ld (RezAdr),hl
ret
.L211 ld (Reg._SP),hl
ret
;<3B> áç¥â ¤¥áªà¨¯â®à  áâப¨ ¢ ®ª­¥ ॣ¨áâ஢
.DescCalc ld de,(.Coordinate) ;⥪ã騥 ª®®à¤¨­ âë
ld hl,.Descript+1
ld b,d ;­®¬¥à áâப¨
inc hl ;¤¥áªà¨¯â®à áâப¨
inc hl
djnz $-2
ld a,(hl) ;­®¬¥à ¤¥áªà¨¯â®à  áâப¨
add a,a
ld c,a
dec hl
ld b,(hl)
push bc
ld b,0
ld hl,.DTabl
add hl,bc
ld a,(hl) ;­ ç «® ¤¥áªà¨¯â®à 
inc hl
ld h,(hl)
ld l,a
pop bc
ret
.PgDown db 2,7,12,15
.PgUp db 14,9,4,2
.Coordinate dw 0x0101 ;ªãàá®à (áâà/ª®« ªãàá®à )
.Descript:
dw 0x010F ;¯¥à¢ ï/ª®«-¢® áâப ®ª­ 
db 0x01,0 ;­®¬¥à áâப¨, ­®¬¥à ¤¥áªà¨¯â®à 
db 0x02,0,0x04,0
db 0x05,0,0x06,0,0x07,1
db 0x08,2,0x0A,0,0x0B,0
db 0x0C,0,0x0D,1,0x0E,2
db 0x10,3,0x12,4,0x14,5
.DTabl dw .D1,.D2,.D3,.D4,.D5,.D6
.D1 db 9 ;ª®«-¢® ª®«®­®ª ¤«ï ¯ à
db 0x04 ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x0A,2,0x0C,2,0x0F,2,0x11,2
db 0x14,1,0x15,1,0x16,1,0x17,1
.D2 db 10 ;ª®«-¢® ª®«®­®ª ¤«ï ¯ àë AF
db 0x04 ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x0B,1,0x0C,1,0x0D,1,0x0E,1
db 0x0F,1,0x10,1,0x11,1,0x12,1
db 0x15,1
.D3 db 6 ;ª®«-¢® ª®«®­®ª ¤«ï ä« £®¢
db 0x01 ;N á⮫¡æ  ª®«®­ª¨
db 1 ;è¨à¨­  ª®«®­ª¨
db 0x02,1,0x04,1
db 0x06,1,0x07,1,0x08,1
.D4 db 2 ;ª®«-¢® ª®«®­®ª ¤«ï PC IR
db 0x04 ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x0D,5
.D5 db 4 ;ª®«-¢® ª®«®­®ª ¤«ï ¡ ­®ª
db 0x02 ;N á⮫¡æ  ª®«®­ª¨
db 3 ;è¨à¨­  ª®«®­ª¨
db 0x08,3,0x0E,3,0x14,3
.D6 db 3 ;ª®«-¢® ª®«®­®ª
db 0x04 ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x0A,4
db 0x13,5

View File

@ -1,212 +0,0 @@
;[]=========================================================================[]
;[] Ž¡à ¡®âª  ª« ¢¨ âãàë ¢ ®ª­¥ ¤ ¬¯  á⥪  []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 18.03.2006 []
;[]=========================================================================[]
KStack:
ld a,b ;á®áâ®ï­¨¥ <Shift><Alt><Ctrl>
and 11110000b
; ld b,a
jr z,.L100
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Shift + ᨬ¢®«
; and 11000000b ;<Shift>
; or a
; jr z,.L10
; ld a,d
;; cp 0x80+0x0F ;Shift+Tab
;; jp nz,Keyb+6
;; ld a,3 ;­®¬¥à ®ª­  ¤ ¬¯ 
;; ld (Keyb.WinScreen),a
; jp Keyb-3
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Ctrl + ᨬ¢®«
; ld a,b
cp 00100000b ;<Ctrl>
jp nz,Keyb+6
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x2B ;<Ctrl>+<X>
jp nz,Keyb+6
ld hl,(StackDump)
ld bc,(.Coordinate)
ld a,b
ld b,0x16 ;x-ª®à¤¨­ â  1 áâப¨
sub b
rlca ;*2
ld b,0
ld c,a
or a
sbc hl,bc
ld (Reg._SP),hl
ld a,-1
ld (PrintStrSP.StrSp),a
jp Keyb-11
;Ž¡à ¡®âª  ¯®§¨æ¨®­­®£® ª®¤ 
.L100 ld a,e ;ASCII ª®¤
ld (.L200+1),a
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
ld de,(.Coordinate) ;⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
cp 0x56 ;<Right>
jr nz,.L101
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
cp e
ld a,e
jr nz,$+3
xor a
inc a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L101 cp 0x54 ;<Left>
jr nz,.L102
ld a,e ;⥪ãé ï ª®«®­ª 
cp 1
jr nz,$+6
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
inc a
dec a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L102 ld hl,(.Descript)
cp 0x52 ;<Down>
jr nz,.L103
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L104
ld hl,(StackDump) ; ¤à¥á 1-®© áâப¨
dec hl
dec hl
ld (StackDump),hl
ld hl,PrintStrSP.StrSp ;áâப  ¢¥àè.á⥪ 
ld a,-1
cp (hl) ;¢ ¤ ¬¯¥?
jr z,$+3
dec (hl)
jp Keyb-11
.L104 inc a
ld (.Coordinate+1),a
jp Keyb-3
.L103 cp 0x58 ;<Up>
jr nz,.L105
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L107
ld hl,(StackDump) ; ¤à¥á 1-®© áâப¨
inc hl
inc hl
ld (StackDump),hl
ld hl,PrintStrSP.StrSp ;áâப  ¢¥àè.á⥪ 
ld a,(hl)
cp 7 ;­  ¯®á«¥¤­¥© áâப¥?
jr c,$+5
ld a,-2
ld (hl),a ;¢¥àè.á⥪  ­¥ ¯®¯ ¤ ¥â ¢ ¤ ¬¯
inc (hl)
jp Keyb-11
.L107 dec a
ld (.Coordinate+1),a
jp Keyb-3
.L105 cp 0x53 ;<PgDown>
jr nz,.L108
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L106
ld hl,(StackDump)
ld bc,2*7
or a
sbc hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a ;áâப  ¢¥àè.á⥪ 
jp Keyb-11
.L106 ld a,l ;­  ¯®á«¥¤­îî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L108 cp 0x59 ;<PgUp>
jr nz,.L110
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L109
ld hl,(StackDump)
ld bc,2*7
add hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a ;áâப  ¢¥àè.á⥪ 
jp Keyb-11
.L109 ld a,h ;­  ¯¥à¢ãî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L110 cp 0x57 ;<Home>
jr nz,.L200
ld a,6
ld (PrintStrSP.StrSp),a ;áâப  ¢¥àè.á⥪ 
jp Keyb-11
;.L111 cp 0x0F ;<Tab>
; jr nz,.L200
; ld a,1 ;­®¬¥à ®ª­  «¨á⨭£ 
; ld (Keyb.WinScreen),a
; jp Keyb-3
;Ž¡à ¡®âª  ASCII ª®¤®¢
.L200 ld a,0 ;ASCII ª®¤
cp 0x0D ;<Enter>
jp nz,Keyb+6
.L201 ld b,0 ;¤«¨­  áâப¨ ¢¢®¤ 
ld hl,0 ;ª®®à¤¨­ âë áâப¨ ¢¢®¤ 
call InputLine ;¢¢®¤ ç¨á« 
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutAdres
jp c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
ld bc,(.Coordinate)
ld a,b
ld b,0x16 ;x-ª®à¤¨­ â  1 áâப¨
sub b
ex de,hl
ld hl,(StackDump)
ld b,a ;­®¬¥à áâப¨ 0..7
rlca ;*2
dec c
ld c,a
jr nz,.L202 ;¯¥à¥å®¤ - ¥á«¨ ¤ ­­ë¥, ¨­ ç¥  «à¥á
ld a,(PrintStrSP.StrSp) ;áâப  ¢¥àè.á⥪ 
cp b
jr z,.L203
ld b,0 ;­¥ ­  ¢¥à設¥ á⥪ 
ex de,hl ;HL - ¢¢¥¤¥­­ë©  ¤à¥á
add hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a
jr .L203+4
.L203 ld (Reg._SP),de ; ¤à¥á ¢¢¥¤¥­ ­  ¢¥à設¥ á⥪ 
jp Keyb-11
.L202 ld b,0 ;¢¢®¤ ¤ ­­ëå
or a
sbc hl,bc
ld a,d ;§ ¯¨áì ¤ ­­ëå ¢ ¯ ¬ïâì
call Ld_hl_a
inc hl
ld a,e
call Ld_hl_a
jp Keyb-11
.Coordinate dw 0x1601 ;ªãàá®à (áâà/ª®« ªãàá®à )
.Descript:
dw 0x161D ;¯¥à¢ ï/¯®á«¥¤­ïï áâப  ®ª­ 
db 2 ;ª®«-¢® ª®«®­®ª
db 0x01 ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x07,5

87
REZ.ASM
View File

@ -1,87 +0,0 @@
;[]=========================================================================[]
;[] <20>¥§¨¤¥­â ®â« ¤ç¨ª  []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 24.02.2006 []
;[] <20>ਭ樯 à ¡®âë (¤¢  ¢ à¨ ­â ): []
;[] 1. <20>¥§¨¤¥­â à á¯®«®¦¥­ ­¥ ¢® ¢â®à®¬ ®ª­¥ ¯ ¬ï⨠(0x8000...0xBFFF) []
;[] ˆ§ ®â« ¤ç¨ª  £®â®¢¨âáï १¨¤¥­â (­ áâà ¨¢ îâáï ¢á¥  ¤à¥á ) ¨ ª®¯¨àã¥âáï []
;[] ¯®  ¤à¥áã à á¯®«®¦¥­¨ï, ã¯à ¢«¥­¨¥ ¨§ ®â« ¤ç¨ª  ¯¥à¥¤ ¥âáï ­  ¬¥âªã []
;[] Rezident.Start1, ¯®á«¥ 祣® ¯à®¨á室¨â ¢®áâ ­®¢«¥­¨¥ ¡ ­ª¨ ¯ ¬ïâ¨, à á- []
;[] ¯®«®¦¥­­®© ¯®¤ ®â« ¤ç¨ª®¬ ¨ ¢ë¯®«­¥­¨¥ ®â« ¦¨¢ ¥¬®© ª®¬ ­¤ë. ‚®§¢à â []
;[] ¢ १¨¤¥­â ®áãé¥á⢫ï¥âáï ­  ¬¥âªã Rezident.RetIn1 ¨ ¤ «¥¥ ¯®á«¥ ¢®á- []
;[] â ­®¢«¥­¨ï ¡ ­ª¨ á ®â« ¤ç¨ª®¬ ¢®§¢à â ¢ ®â« ¤ç¨ª. []
;[] 2. <20>¥§¨¤¥­â à á¯®«®¦¥­ ¢® ¢â®à®¬ ®ª­¥ ¯ ¬ï⨠(0x8000...0xBFFF) []
;[] <20>®áª®«ìªã ¢ í⮬ ®ª­¥ à ¡®â ¥â á ¬ ®â« ¤ç¨ª, â® ¯¥à¥å®¤ ¢ १¨¤¥­â ¨ []
;[] ¢®§¢à â ¢ ®â« ¤ç¨ª ¯®á«¥ âà áá¨à®¢ª¨ ª®¬ ­¤ë ¢ë¯®«­ï¥âáï ¯à¨ ¯®¬®é¨ []
;[] ¢á¯®¬®£ â¥«ì­®© ¯à®æ¥¤ãàë ¤«¨­®© 7 ¡ ©â à á¯®«®¦¥­®© ¯®  ¤à¥áã []
;[] AdrTmpBuf. <20>®á«¥ ª®à४樨 ¢á¥å  ¤à¥á®¢ ¢ ®â« ¤ç¨ª¥ ¨ á®åà ­¥­¨¨  ªªã- []
;[] ¬ã«ïâ®à  ®â« ¦¨¢ ¥¬®© ¯à®£à ¬¬ë ¯®  ¤à¥áã Rezident+1 ¨ ¯ àë HL ¯®  ¤à¥- []
;[] ce Rezident+2 ã¯à ¢«¥­¨¥ ¯¥à¥¤ ¥âáï ¯®  ¤à¥áã AdrTmpBuf, £¤¥ à á¯®«®¦¥­ []
;[] á«¥¤ãî騩 ª®¤ ®âª«îç î騩 ¡ ­ªã á ®â« ¤ç¨ª®¬: []
;[] ld a,<2C>®¬¥à<C2A5> ­ª¨<C2AA>®¤Žâ« ¤ç¨ª®¬ []
;[] out (<28>®¬¥à<C2A5>®àâ 2Žª­ ),a []
;[] jp Rezident.Start []
;[] „ «¥¥ १¨¤¥­â ¢®áâ ­ ¢«¨¢ ¥â 7 ¡ ©â § ¯®à祭ëå ¢ë襯ॢ¥¤¥­­®© ¯à®æ¥- []
;[] ¤ãன,   â ª¦¥ ¯ àã HL ¨  ªªã¬ã«ïâ®à ¨ ¯¥à¥å®¤¨â ª âà áá¨à®¢ª¥. ‚®§¢à â []
;[] ¯à®¨á室¨â ­  ¬¥âªã Rezident.RetIn, £¤¥ ¯®á«¥ á®åà ­¥­¨ï  ªªã¬ã«ïâ®à  ¨ []
;[] ¯ àë HL á®åà ­ï¥âáï 7 ¡ ©â ¯ ¬ï⨠¨§  ¤à¥á  AdrTmpBuf ¨ â㤠 ¯à®¯¨á뢠- []
;[] ¥âáï ª®¤ ¢®áâ ­®¢«¥­¨ï ¡ ­ª¨ á ®â« ¤ç¨ª®¬: []
;[] ld a,<2C>®¬¥à<C2A5> ­ª¨Žâ« ¤ç¨ª®¬ []
;[] out (<28>®¬¥à<C2A5>®àâ 2Žª­ ),a []
;[] jp ‚Žâ« ¤ç¨ª []
;[] <20>®á«¥ ¢®§¢à â  ¢ ®â« ¤ç¨ª ¢®áâ ­ ¢«¨¢ ¥âáï ¯ ¬ïâì § ¯®à祭 ï १¨¤¥­â®¬ []
;[] ¨ ¢à¥¬¥­­®© ¯à®æ¥¤ãன []
;[]=========================================================================[]
AdrTmpBuf equ 0xFF00
Rezident:
ds 11
.Start ld hl,0 ;¢®áâ. ¯ ¬ï⨠§ ¯®à祭­®© ¯à¨
ld (AdrTmpBuf),hl ;à §¬¥é¥­¨¨ १¨¤¥­â 
ld hl,0 ;¢® 2-¬ ®ª­¥
ld (AdrTmpBuf+2),hl
ld hl,0
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
.K2 ld hl,(Rezident+2) ;¢®áâ ­®¢¨«¨ HL
jr .K3
;...¢®áâ ­®¢¨âì ¡ ­ªã ¢® 2-¬ ®ª­¥
.Start1 ld a,0xFF ;¡ ­ª  ¯®¤ demon'®¬
out (EmmWin.P2),a
.K3 ld a,(Rezident+1) ;¢®áâ ­®¢¨¬  ªªã¬ã«ïâ®à
.Step jp 0 ;¯¥à¥å®¤ ­  ¢ë¯®«­¥­¨¥
.RetIn ld (Rezident+1),a ;á®åà ­¨¬  ªªã¬ã«ïâ®à
.K4 ld (Rezident+2),hl ;á®åà ­¨¬ HL
ld hl,(AdrTmpBuf) ;á®åà ­¥­¨¥ ¯ ¬ïâ¨
.K5 ld (Rezident+4),hl
ld hl,(AdrTmpBuf+2)
ld (Rezident+6),hl
ld hl,(AdrTmpBuf+4)
ld (Rezident+8),hl
ld a,(AdrTmpBuf+6)
ld (Rezident+10),a
.BankD1 ld hl,0xFF3E ;ld a,0xFF - N ¡ ­ª¨ á ®â« ¤ç
ld (AdrTmpBuf),hl
ld hl,EmmWin.P2*256+0xD3 ;out (EmmWin.P2),a
ld (AdrTmpBuf+2),hl
.Return1 ld hl,0xC3 ;jp ¢ ®â« ¤ç¨ª
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
in a,(EmmWin.P2) ;­®¬¥à ¡ ­ª¨ ¯®¤ demon'®¬
.K6 ld (Rezident),a ;á®åà ­¨«¨
jp AdrTmpBuf
.RetIn1 ld (Rezident+1),a ;á®åà ­¨¬  ªªã¬ã«ïâ®à
;...á®åà ­¨âì ¡ ­ªã ¨§ 2-£® ®ª­ 
in a,(EmmWin.P2) ;­®¬¥à ¡ ­ª¨ ¯®¤ demon'®¬
.K1 ld (Rezident),a ;á®åà ­¨«¨
.BankD ld a,0xFF ;¡ ­ª  á demon'®¬
out (EmmWin.P2),a
.Return jp 0
.End

View File

@ -1,64 +0,0 @@
;[]=========================================================================[]
;[] ‘®åà ­¥­¨¥ íªà ­  ¢ ä ©« []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 11.03.2006 []
;[]=========================================================================[]
SaveScr:
ld bc,1*256+Dss.GetMem
rst DssRst ;¢ë¤¥«¥­¨¥ ¡ ­ª¨ ¯ ¬ïâ¨
ret c ;¢ë室 á ®è¨¡ª®©
ld (.Id),a
ld bc,Dss.SetWin3
rst DssRst ;¢ª«î祭¨¥ ¡ ­ª¨ ¢ 3-¥ ®ª­®
ld (.Id+1),a ;§ ¬¥é ¥¬ ï áâà ­¨æ 
ld de,0 ;¯®§¨æ¨ï ­  íªà ­¥
ld hl,0xC000
.L1 push de
push hl
ld c,Dss.RdChar
rst DssRst ;áç¨â âì ᨬ¢®« á íªà ­ 
pop hl
pop de
ld (hl),a
inc hl
inc e
ld a,e
cp 0x50 ;§ ª®­ç¨« áì áâப ?
jr nz,.L1
ld bc,0x0D0A ;ª®­¥æ áâப¨
ld (hl),b
inc hl
ld (hl),c
inc hl
ld e,0 ;­ ç «® áâப¨
inc d
ld a,d
cp 0x20 ;ª®­¥æ íªà ­ ?
jr nz,.L1
ld hl,.NameF ;¨¬ï ä ©« 
xor a ; âਡãâ
ld c,Dss.Create
rst DssRst
jr c,.L2 ;®è¨¡ª 
push af
ld hl,0xC000 ;­ ç «® § ¯¨á뢠¥¬®© ¯ ¬ïâ¨
ld de,82*32 ;à §¬¥à § ¯¨á뢠¥¬®© ¨­äë
ld c,Dss.Write
rst DssRst ;§ ¯¨á âì
pop af
ld c,Dss.Close
rst DssRst ;§ ªàëâì ä ©«
.L2 ld a,(.Id) ;id ¯ ¬ïâ¨
ld c,Dss.FreeMem
rst DssRst ;®á¢®¡®¤¨âì ¯ ¬ïâì
ld a,(.Id+1)
out (EmmWin.P3),a ;¢®áâ ­®¢¨«¨ ¡ ­ªã
ret
.NameF db "demon.$$$",0
.Id ds 2 ;id ¢ë¤¥«¥­­®£® ¡«®ª 
;11:11 18.02.2011 ‡ £«ã誠 <20>¥ ¡ë«® ¨á室­¨ª  :(
; include "d:\workast\demon\screen\scrdemon"

431
STEP.ASM
View File

@ -1,431 +0,0 @@
;[]=========================================================================[]
;[] Žâ« ¤ª  ª®¬ ­¤ ¯à®£à ¬¬ë []
;[] 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 ;¤«¨­  १¨¤¥­â 

View File

@ -1 +1 @@
0003
0004

View File

@ -1 +1 @@
210211
240724

View File

@ -1 +1 @@
11
12

View File

@ -1 +1 @@
00:00
15:00

28
changes.md Normal file
View File

@ -0,0 +1,28 @@
DemoN v.0.11
============
Hard/WCG
b0003 20.02.2011
+ По кнопке <Z> PC присваивается адрес, на котором установлен курсор.
+ Добавил диалог Load BIN-file, но еще не довел его до ума.
b0002 19.02.2011
* Изменил процедуры печати и прорисовки курсора для работы через DSS, т.к. на эмуляторе Demon не
полноценно работает.
+ при старте запоминаем текущий режим экрана и при выходе - восстанавливаем.
+ сохраняем в буфер инфу экрана ОСи, если экран демона находится на той же странице,
при выходе - восстанавливаем
* изменена П/П просмотра другого экрана, теперь она с учетом того, что демон и ОС могут быть на одном экране
* изменен образ "непечатаемого" символа
+ добавил ПП прорисовки окон и обработки диалогов - на будущее
b0001 18.02.2011
* Переделал исходник под кроссассемблер sjasmplus.

View File

@ -1,25 +0,0 @@
DemoN v.0.11
Hard/WCG
b0003 20.02.2011
+ По кнопке <Z> PC присваивается адрес, на котором установлен курсор.
+ Добавил диалог Load BIN-file, но еще не довел его до ума.
b0002 19.02.2011
* Изменил процедуры печати и прорисовки курсора для работы через DSS, т.к. на эмуляторе Demon не
полноценно работает.
+ при старте запоминаем текущий режим экрана и при выходе - восстанавливаем.
+ сохраняем в буфер инфу экрана ОСи, если экран демона находится на той же странице,
при выходе - восстанавливаем
* изменена П/П просмотра другого экрана, теперь она с учетом того, что демон и ОС могут быть на одном экране
* изменен образ "непечатаемого" символа
+ добавил ПП прорисовки окон и обработки диалогов - на будущее
b0001 18.02.2011
* Переделал исходник под кроссассемблер sjasmplus.

35
clock.asm Normal file
View File

@ -0,0 +1,35 @@
;[]=========================================================================[]
;[] Вывод часов []
;[] v0.03 - последние изменения 01.02.2006 []
;[]=========================================================================[]
Clock
ld a,(ClockOn) ; флаг вывода часов
inc a
ret nz
ld c,Dss.SysTime
rst DssRst ; прочитать данные о времени
ld de,.String
push de
push bc
push hl
ld l,h ; часы
ld h,0
call ConvDecStr8_1
inc de
pop hl ; минуты
ld h,0
call ConvDecStr8_1
inc de
pop hl
ld l,h ; секунды
ld h,0
call ConvDecStr8_1
ld de,71
ld c,Bios.Lp_Set_Place ; установка позиции печати
rst BiosRst : di
pop hl
ld bc,8*256+Bios.Lp_Print_Ln2 ; в рег.B длина строки
rst BiosRst : di
ret
.String DB "00:00:00"

23
cmdline.asm Normal file
View File

@ -0,0 +1,23 @@
;[]=========================================================================[]
;[] Обработка командной строки монитора-отладчика DemoN []
;[] v0.10 - последние изменения 08.06.2006 []
;[] Вход: на стеке адрес начала командной строки в памяти []
;[] Выход: CF=1 - нет параметров, CF=0 - есть параметры []
;[]=========================================================================[]
CmdLine
pop hl ; начало
ld a,(hl) ; длина командной строки
or a
scf
jr z,.L1 ; нет параметров
ld de,FDebug ; буфер
inc hl
ld c,Dss.GSwitch ; выделение параметра
rst DssRst
or a ; CF=0
.L1
;ret

Binary file not shown.

View File

@ -1 +0,0 @@
(0): error: Error opening file: daemon.asm

124
data.asm Normal file
View File

@ -0,0 +1,124 @@
;[]=========================================================================[]
;[] Данные монитора-отладчика DemoN []
;[] v0.01 - последние изменения 10.10.2004 []
;[] v0.02 - последние изменения 11.03.2005 []
;[] v0.03 - последние изменения 05.02.2006 []
;[] v0.10 - последние изменения 10.09.2006 []
;[]=========================================================================[]
SymbolNoPrint
DB 0xB0;"." ; символы < пробела
ClockOn DB On ; признак вывода часов
DemonScreen DB 0 ; номер экрана отладчика
OSScreen DB 0 ; Номер экрана ОСи
OSGrafMode DB 0 ; Графический режим оси
BufPage DB 255 ; Номер страницы с оконным буфером
Hello DB "\r\n"
; DB "Версия откомпилирована специально для Василия Иванова!",13,10,10
IFDEF DSS_1_70
DB "Demon for DSS 1.70+ v"
ELSE
DB "DemoN v"
ENDIF
INCBIN "VERSION/major.bin"
DB "."
INCBIN "VERSION/minor.bin"
DB " build "
INCBIN "VERSION/build.bin"
DB " (alpha) <Created by Alpha Studio>\r\n"
DB "Last edition "
INCBIN "VERSION/date.bin"
DB " (BLR "
INCBIN "VERSION/time.bin"
DB ")\r\n"
DB "FidoNet: Igor Zhadinets 2:454/5.18; "
DB "e-mail: igor_ast@tut.by",13,10,10,0
Str:
.Load DB "Load file ...\r\n",0
.DA DB "\r\n",0
PauseFlash EQU 16 ; частота мигания прогр.курсора
Color:
.Screen DB 00000111b ; основной цвет экрана
.Border DB 00000011b ; цвет рамки
.TextStrReg DB 00000010b ; цвет регистровых пар
.TextStrWin DB 00000101b ; цвет номеров окон
._SP DB 00000110b ; подсветка вершины стека
._PC DB 01110001b ; подсветка выполняемой стр.
.RezArea DB 00001110b ; подсветка резидента
.TextStrLogo
DB 00000100b ; цвет лого программы
.Cursor DB 00011101b ; цвет курсора-указателя
.InLine DB 00111111b ; цвет строки ввода
.InLineEd DB 00110001b ; цвет строки ввода при ред.
StackDebug DS 2 ; адрес стека отладчика
BankDebug DS 1 ; номер банки отладчика
BankOS DS 1 ; номер банки с OS
RezAdr DW 0x7000 ; адрес посадки резидента
StackDown DS 1 ; глубина стека
StackDump DW 0x800A ; начало дампа стека
Reg: ; значение регистровых пар
._IX DW 0
._IY DW 0
._HL DW 0
._DE DW 0
._BC DW 0
._AF DW 0
._HL_ DW 0
._DE_ DW 0
._BC_ DW 0
._AF_ DW 0
._IR DW 0
._SP DW 0x7FFE
._PC DW 0
WinPage: DB 0xFF,0xFF,0xFF,0xFF ; адреса подключенных страниц
Dump1 DW 0x4000 ; адрес начала динамического дампа
Dump: ; адреса начала строк дампа
DW KEYB.InputLine.Buffer;0x4100
DW KEYB.InputLine.Buffer+16;0x8100
DW KEYB.PutCode.Buffer;0xC100
DW 0x5280
DW 0x9280
DW 0xD280
DW 0x6000
DW 0xA000
ListAddr DS 40 ; буфер хранения адресов листинга
ListFormat DB -1 ; форматный вывод листинга
; -1 - да; 0 - нет
DecHex DB 0 ; 0-HEX FF-DEC система
;======== Констатнты ======
On EQU 0xFF
Off EQU 0
Ins EQU 0
Ovr EQU 0xFF
SysSymb EQU 0x1B ; системный знакогенератор
;печать через п/п биоса
IFDEF D_PRINTCH_BIOS
Demon.Bios_Win
DB 0 ; идентификатор окна биоса
MainWin DB 80,32,0,0,00110000b,0,0,0
DS 26,0
ENDIF
;--------------------------------------
;Диалоговое окно для пп выхода
;--------------------------------------
ExitDlg DB 6,22,13,32,6,#40
DB "Confirmation",0
DB " You really want to quit?"
DB 0x16,32,17,"OK Cancel",0
DB 2
DB 29,17,8,2 ;Ok
DW 0,0
DB 39,17,8,2 ;Cancel
DW 0,KEYB.Keyb.NoExit

442
demon.asm Normal file
View File

@ -0,0 +1,442 @@
;[]=========================================================================[]
;[] Монитор-отладчик DemoN []
;[] v0.01 - последние изменения 10.10.2004 []
;[] v0.02 - последние изменения 07.02.2005 []
;[] v0.03 - последние изменения 11.03.2006 []
;[] v0.10 - последние изменения 27.08.2006 []
;[]=========================================================================[]
;DEVICE ZXSPECTRUM128
DEVICE NOSLOT64K
SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
; define DEBUG 1 ;открытие дебаггерных заглушек
; define D_PRINTCH_BIOS 1
DEFINE DSS_1_70
;DEFINE DBG ; For debug with DeZog
; TODO: Set cur_dir for loaded exe
IFDEF DBG
INCLUDE "dss.asm"
DB 0
ALIGN 16384, 0
DS 0x80, 0
ENDIF
ORG 0x7F00 ; 0x8100-512
; ------------------------------------------------------
STARTPRG
DB "EXE" ; EXE ID
IFDEF DSS_1_70
DB 0x01 ; EXE VERSION
ELSE
DB 0x00
ENDIF
DW 0x0200 ; CODE OFFSET LOW
DW 0x0000 ; CODE OFFSET HIGH
DW 0x0000 ; END-BEG ;PRIMARY LOADER
DW 0x0000 ;
DW 0x0000 ; RESERVED
DW 0x0000 ;
DW OrgAdr ; LOAD ADDRESS
DW OrgAdr ; START ADDRESS
DW 0xC001 ; STACK ADDRESS
ExeFiller
IFDEF DBG
DS 106,0
ELSE
DS OrgAdr-ExeFiller,0
ENDIF
ORG 0x8100
@STACK_TOP ; for DeZog internal sim
OrgAdr
; stack 0xC001
IFDEF DBG
LD SP, STACK_TOP
LD IX,CMD_LINE1
ENDIF
push ix ; адрес командной строки
in a,(EmmWin.P2) ; банка с отладчиком
ld (BankDebug),a
in a,(EmmWin.P0) ; банка с OS
ld (BankOS),a
; ld (WinPage),a
; ld (Reg._SP),sp ; адрес стека
call SaveAllRegs ; сохранение регистровых пар
; ld a,(BankDebug)
ld a,0xFF ; скрываем банку с отладчиком
ld (WinPage+2),a
INCLUDE "cmdline.asm"
call nc,LoadFile
jp Start
HorizLine DB 8 ; количество линий
;1-длина 2-столбец 3-строка 4-символ
DB 0x4E,0x01,0x00,0xCD, 0x17,0x01,0x03,0xC4
DB 0x17,0x01,0x09,0xC4, 0x17,0x01,0x0F,0xC4
DB 0x17,0x01,0x11,0xCD, 0x4E,0x01,0x15,0xCD
DB 0x4E,0x01,0x1E,0xCD, 0x17,0x01,0x13,0xCD
VerticalLine
DB 5 ; количество линий
;1-высота 2-столбец 3-строка 4-символ
DB 0x1D,0x00,0x01,0xBA, 0x10,0x09,0x01,0xB3
DB 0x08,0x0C,0x16,0xBA, 0x14,0x18,0x01,0xBA
DB 0x1D,0x4F,0x01,0xBA
Corner DB 41 ; углы рамок
;1-столбец 2-строка 3-символ
DB 0x00,0x00,0xC9, 0x00,0x03,0xC7, 0x00,0x09,0xC7
DB 0x00,0x0F,0xC7, 0x00,0x11,0xCC, 0x00,0x15,0xCC
DB 0x00,0x1E,0xC8, 0x06,0x11,0xD1, 0x06,0x13,0xCF
DB 0x09,0x00,0xD1, 0x09,0x03,0xC5, 0x09,0x09,0xC5
DB 0x09,0x0F,0xC5, 0x0C,0x11,0xD1, 0x0C,0x15,0xCB
DB 0x0C,0x1E,0xCA, 0x12,0x0F,0xC2, 0x12,0x11,0xD8
DB 0x12,0x13,0xCF, 0x18,0x00,0xCB, 0x18,0x03,0xB6
DB 0x18,0x09,0xB6, 0x18,0x0F,0xB6, 0x18,0x15,0xCA
DB 0x00,0x13,0xCC, 0x0C,0x13,0xCF, 0x4F,0x00,0xBB
DB 0x18,0x13,0xB9, 0x4F,0x15,0xB9, 0x4F,0x1E,0xBC
DB 0x18,0x11,0xB9, 0x06,0x12,0xB3, 0x12,0x10,0xB3
DB 0x12,0x12,0xB3, 0x09,0x13,0xD1, 0x09,0x14,0xB3
DB 0x09,0x15,0xCF, 0x0C,0x12,0xB3, 0x0E,0x13,0xCB
DB 0x0E,0x14,0xBA, 0x0E,0x15,0xCA
TextStrReg DB 0x16,0x01,0x01,"IX", 0x16,0x01,0x02,"IY"
DB 0x16,0x01,0x04,"HL", 0x16,0x01,0x05,"DE"
DB 0x16,0x01,0x06,"BC", 0x16,0x01,0x07,"AF"
DB 0x16,0x01,0x0A,"HL'", 0x16,0x01,0x0B,"DE'"
DB 0x16,0x01,0x0C,"BC'", 0x16,0x01,0x0D,"AF'"
DB 0x16,0x01,0x10,"PC", 0x16, 0x0A,0x10,"IR"
DB 0x16,0x01,0x14,"SP",0
TextStrLogo DB 0x016,0x01,0x1F,0xC4,0xCD,0xCD
DB " DemoN v"
INCBIN "VERSION/major.bin"
DB "."
INCBIN "VERSION/minor.bin"
DB " build "
INCBIN "VERSION/build.bin"
DB " (alpha)-"
INCBIN "VERSION/date.bin"
DB " Igor by AlphA Studio, Hard/WCG"
DB 0x20,0xCD,0xCD,0xC4,0x00
TextStrWin DB 0x16,0x02,0x11," 0 ",0x16,0x08,0x11," 1 "
DB 0x16,0x0E,0x11," 2 ",0x16,0x14,0x11," 3 ",0
TextStrRez DB 0x16,0x0F,0x14,"REZ",0
; ------------------------------------------------------
; Процедура прорисовки линий
; HL - адрес начала таблицы
; ------------------------------------------------------
DrawLine ld c,(hl) ; количество линий
inc hl
ld b,(hl) ; длина линии
inc hl
ld e,(hl) ; столбец
inc hl
ld d,(hl) ; строка
inc hl
ld a,(hl) ; символ
push hl
.L1 push bc
push af
ld bc,Dss.WrChar ; цвет в рег.B
rst DssRst
inc d ; наращивание координаты
pop af
pop bc
djnz .L1
pop hl
dec c
jr nz,DrawLine+1
ret
; ------------------------------------------------------
; Начало программы
; ------------------------------------------------------
Start:
ld hl,Hello ; сообщение программы
ld c,Dss.PChars ; вывести строку
rst DssRst
ld c,Dss.GetVMod ; Текущий граф режим
rst DssRst
jp c,Exit
ld (OSGrafMode),a
ld a,b
ld (OSScreen),a ; и текущая страница экрана
push bc
ld bc,#0100+Dss.GetMem ; резервируем 1 страницу для оконного буфера
rst DssRst
pop de ; В D - номер страницы экрана - OSScreen
jp c,Exit ; Ошибка выделения блока памяти
ld (BufPage),a ; Сохраним страницу в переменной
ld b,a
ld a,(DemonScreen)
cp d ; если экраны ОС и Демона не совпадают
jr nz,StartNext ; то и не сохраняем экран ОСи
ld de,0 ; Сохраняем экран в доп.странице
ld hl,#2050
ld ix,#c000
ld c,Dss.WinCopy
rst DssRst
StartNext ld a,(DemonScreen) ; экран отладчика
ld b,a
ld a,3 ; установить режим 80х32
ld c,Dss.SetVMod ; Dss.SelPage
; ld bc,0x0054
rst DssRst
ifdef D_PRINTCH_BIOS
ld ix,MainWin ; Открытие окна ч/з биос
ld e,00010001b
rst BiosRst
ld (Demon.Bios_Win),a
; jr nc,.lp1
; ld c,Dss.EchoKey ; дебуггерная заглушка
; rst DssRst
endif
.lp1
; ld a,(Color._SP) ; подсветка вершины стека
; ld b,a
; ld de,0x1C01
; ld hl,0x010B
; ld a," "
; ld c,Dss.Clear
; rst DssRst
call ClearScreen
call DrawDemonScreen
; ld c,Dss.EchoKey ; дебуггерная заглушка
; rst DssRst
jp Start1
; ------------------------------------------------------
; Обновление экрана демона
; ------------------------------------------------------
RefreshScreen
call CursorRes
call ClearScreen
call DrawDemonScreen
call Refresh
call KEYB.Cursor ; вкл курсор
jp CursorSet
; ------------------------------------------------------
ClearScreen ld a,(Color.Screen)
ld b,a ; очистка экрана
ld de,0
ld hl,0x2050
ld c,Bios.Lp_Cls_Win
rst BiosRst
ret
; ------------------------------------------------------
DrawDemonScreen
ld a,(Color.Border) ; установка цвета рамки
ld (DrawLine.L1+4),a
ld (DrawCorner+10),a
ld a,0x14 ; код мнемоники INC D
ld (DrawLine.L1+6),a
ld hl,VerticalLine ; вертикальные линии
call DrawLine
ld hl,HorizLine ; горизонтальные линии
ld a,0x1C ; код мнемоники INC E
ld (DrawLine.L1+6),a
call DrawLine
ld hl,Corner
ld b,(hl) ; количество углов
DrawCorner push bc
inc hl
ld e,(hl) ; столбец
inc hl
ld d,(hl) ; строка
inc hl
ld a,(hl) ; символ
push hl
ld bc,Dss.WrChar ; цвет в рег.B
rst DssRst
pop hl
pop bc
djnz DrawCorner
ld hl,TextStrReg
ld a,(Color.TextStrReg) ; цвет регистровых пар
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrWin
ld a,(Color.TextStrWin) ; цвет номеров окон
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrLogo
ld a,(Color.TextStrLogo) ; цвет лого программы
ld (PrnStrColor.L1+5),a
call PrnStrColor
ld hl,TextStrRez
ld a,(Color.RezArea) ; цвет резидента
ld (PrnStrColor.L1+5),a
call PrnStrColor
ret
ds OrgAdr+0x700-$
; ------------------------------------------------------
Start1:
call KEYB.PreparChar ; подготовка программного курсора ввода
; ld hl,(Reg._PC)
; ld hl,0
; ld (ListAddr),hl
call Refresh
call KEYB.Keyb
; ------------------------------------------------------
Exit:
ld hl,(KEYB.Rst38.Vect+1) ; восстановление вектора DSS
ld (0039h),hl
ld a,(OSScreen) ; и текущая страница экрана
ld b,a
push bc
ld a,(OSGrafMode)
ld c,Dss.SetVMod
; ld bc,0x0100+Dss.SelPage ;восстановление экрана DSS
rst DssRst
pop bc
ld a,(DemonScreen)
cp b
jr nz,ExitNext
ld de,0 ; Восстанавливаем экран из доп.страницы
ld hl,#2050
ld ix,#c000
ld c,Dss.WinRest
ld a,(BufPage)
push af
ld b,a
rst DssRst
pop af
ld c,Dss.FreeMem ; Отдаем страницу буфера обратно ОСи
rst DssRst
ExitNext
ld bc,Dss.Exit ; нормальное завершение
rst DssRst
Return ret
; ------------------------------------------------------
Refresh
di
ld de,0x0104 ; вывод значений регистров
ld hl,(Reg._IX)
call PrintStrReg
ld de,0x0204
ld hl,(Reg._IY)
call PrintStrReg
ld de,0x0404
ld hl,(Reg._HL)
call PrintStrReg
ld de,0x0504
ld hl,(Reg._DE)
call PrintStrReg
ld de,0x0604
ld hl,(Reg._BC)
call PrintStrReg
ld de,0x0A04
ld hl,(Reg._HL_)
call PrintStrReg
ld de,0x0B04
ld hl,(Reg._DE_)
call PrintStrReg
ld de,0x0C04
ld hl,(Reg._BC_)
call PrintStrReg
ld de,0x0704
ld hl,(Reg._AF)
call PrintStrAF
ld de,0x0D04
ld hl,(Reg._AF_)
call PrintStrAF
ld de,0x1004
ld hl,(Reg._PC)
call PrintReg
ld de,0x100D
ld hl,(Reg._IR)
call PrintReg
ld de,0x1404
ld hl,(Reg._SP)
call PrintReg
call PrintSPDn
ld de,0x1413
ld hl,(RezAdr)
call PrintReg
call PrintStrWin ; вывод номеров банок в окнах
call PrintStrSP ; вывод дампа стека
call PrintDump
ei
jp DisAsm
DemonHelp call CursorRes
ld ix,HelpWnd
jp DialogWindow
; ld hl,HelpWndDlg
; jp WinDialog
HelpWnd DB 6,16,11,42,7,#27
DB "DemoN Help Page",0
DB " DemoN v"
INCBIN "VERSION/major.bin"
DB "."
INCBIN "VERSION/minor.bin"
DB " build "
INCBIN "VERSION/build.bin"
DB " (alpha)-"
INCBIN "VERSION/date.bin"
DB 0x0D
DB " Igor by AlphA Studio, Hard/WCG",0x0D,0x0D
DB " OK",0
HelpWndDlg DB 1 ; Описатель диалогового окна
DB 16+19,16,4,2
DW 0,0
INCLUDE "EQU/dss_equ.asm"
INCLUDE "EQU/bios_equ.asm"
INCLUDE "EQU/port.asm"
INCLUDE "disasm.asm"
INCLUDE "util.asm"
INCLUDE "file.asm"
INCLUDE "error.asm"
INCLUDE "clock.asm"
INCLUDE "keyb.asm"
INCLUDE "kreg.asm"
INCLUDE "kstack.asm"
INCLUDE "kdump.asm"
INCLUDE "rez.asm"
INCLUDE "step.asm"
INCLUDE "savescr.asm"
INCLUDE "data.asm"
INCLUDE "tabl.asm"
INCLUDE "loadbin.asm"
INCLUDE "windows.asm"
EndOfDaemon
;savebin "demon.exe",STARTPRG,EndOfDaemon-STARTPRG

BIN
demon.exe

Binary file not shown.

7807
demon.lst

File diff suppressed because it is too large Load Diff

377
demon.utf.txt Normal file
View File

@ -0,0 +1,377 @@
Пофиксенная (на ошибки) дока.
Немного изменено описание в "2.4. Дамп памяти".
Глюки.
1. Не работает Ctrl+S.
2. Перейди в поле регистра "PC" и введи адрес #C000. После перейди в асм-
листинг (на этот адрес, я переходил по Ctrl+~) и иди по-строчно вверх
(т.е. к младшим адресам). Увидишь глюки с выводом в асм-листинге. Перейти
можешь на другой адрес, глюк не пропадает. При страничном листании вверх,
этот глюк вроде как не заметен.
Кста, только щас проверил на этот же глюк. Запускаю Демона, перехожу по
Ctrl+~ на #C000 и иду по-строчно вверх - глюк. То же самое с адреса #4000.
Т.е. я хочу сказать, что правка регистра PC тут ни при чем.
Пожелание. Как бы быстро переходить в любое окно Димы ?. А то круговое по
Табу утомляет - пока дойдешь до нужного окна... Может каждому окну присвоить
свою нот-клавишу, типа Alt+1,2,... Цифру каждому окну можно поставить на его
границу, но только другим цветом, например синим, чтобы в глазах не так
маячило. Типа (порядковые номера только для этого примера)
1════════╤═
║IX #8080│0
║IY #1637│0
2────────┼─
║HL #8100│0
║DE #2C40│C
║BC #C089│D
║AF #FB82│%
║Sz.h.pNc│
3────────┼─
║HL'#0000│C
║DE'#2E07│3
║BC'#0200│D
║AF'#FB44│%
║sZ.h.Pnc│
4────────┼─
║PC #0000│I
╠═ 0 ═╤═ 1
║ #FB │ #FF
5═════╧══╤═
║SP #7FFE│
6════════╧═
║#800A #FF0
║#8008 #FF0
║#8006 #100
║#8004 #103
║#8002 #7E6
║#8000 #007
║#7FFE #2CE
║#7FFC #434
╚══════════
Ложка дегтя ;). У тебя немного кривоватая навигация в hex-окне между hex/ascii
дампами. Если переходишь из одного дампа на другой, то переходи на тот же
самый адрес - это логически правильно. Кидаю тебе hex-редактор QVIEW, я им
на PC-хе только и пользуюсь.
Переделывать много потребуется, если в hex-окне сразу прикрутить режим редак-
тирования ?.
Но это так, мечты на будущее.
-----------------------------------------------------------------------------
DemoN - монитор-отладчик для DSS Estex
1. Назначение программы.
Demon предназначен для отладки програм, написанных на ассемблере Z80. Он
позволяет трассировать код программы с отслеживанием состояния всех регистров
процессора и ячеек памяти отлаживаемой программы.
2. Внешний вид программы.
Demon использует текстовый режим экрана.
Текущее время ───────┐
┌───┴──┐
╔════════╤══════════════╦══════════════════════════════════════════════18:41:03╗
║IX #8080│0EFC F8FC .№°№║ #06CC 34 INC (HL) ║
║IY #1637│0045 4D4F .EMO║ #06CD CBB6 RES 6,(HL) ║
╟────────┼──────────────╢ #06CF 6F LD L,A ║
║HL #8100│0081 FFFE .Б.■║ #06D0 2606 LD H,#06 ║
║DE #2C40│C34A 2D21 ├J-!║ #06D2 73 LD (HL),E ║
║BC #C089│D6C6 06C6 ╓╞.╞║ #06D3 2C INC L ║
║AF #FB82│%11111011 "√" ║ #06D4 72 LD (HL),D ║
║Sz.h.pNc│ ║ #06D5 2C INC L ║
╟────────┼──────────────╢ #06D6 70 LD (HL),B ║
║HL'#0000│C34A 2DFF ├J-.║ #06D7 2C INC L ║
║DE'#2E07│3045 5845 0EXE║ #06D8 71 LD (HL),C ║
║BC'#0200│DCE6 0106 ▄ц..║ #06D9 C9 RET ║
║AF'#FB44│%11111011 "√" ║ #06DA 214106 LD HL,#0641 ║
║sZ.h.Pnc│ ║ #06DD 3A4006 LD A,(#0640) ║
╟────────┼────────┬─────╢ #06E0 BE CP (HL) ║
║PC #0000│IR #8059│ ║ #06E1 C8 RET Z ║
╠═ 0 ═╤═ 1 ═╤═ 2 ═╪═ 3 ═╣ #06E2 7E LD A,(HL) ║
║ #FB │ #FF │ #E8 │ #FF ║ #06E3 34 INC (HL) ║
╠═════╧══╤══╧═╦═══╧═════╣ #06E4 34 INC (HL) ║
║SP #7FFE│ 0║REZ #7000║ #06E5 34 INC (HL) ║
╠════════╧══╦═╩═════════╩══════════════════════════════════════════════════════╣
║#800A #FF0F║ #4000 007E 7E6C 1038 1000 FF00 FF0F 3C3F 7F18 .~~l.8......<?.. ║
║#8008 #FF00║ #4010 8002 1866 7F3E 0018 1818 0000 0000 0000 А..f.>.......... ║
║#8006 #1000║ #4020 0030 6C6C 3000 3860 1860 0000 0000 0006 .0ll0.8`.`...... ║
║#8004 #1038║ #4030 7C30 7878 1CFC 38FC 7878 0000 1800 6078 |0xx.№8№xx....`x ║
║#8002 #7E6C║ #4040 7C30 FC3C F8FE FE3C CC78 1EE6 F0C6 C638 |0№<°■■<╠x.цЁ╞╞8 ║
║#8000 #007E║ #4050 FC78 FC78 FCCC CCC6 C6CC FE78 C078 1000 №x№x№╠╠╞╞╠■x└x.. ║
║#7FFE #2CE4║ #4060 3000 E000 1C00 3800 E030 0CE0 7000 0000 0.р...8.р0.рp... ║
║#7FFC #4340║ #4070 0000 0000 1000 0000 0000 001C 18E0 7600 .............рv. ║
╚═══════════╩══════════════════════════════════════════════════════════════════╝
─══ DemoN v0.10 build 65 (alpha) Igor by AlphA Studio, 2006 ══─
Весь экран разбит на следующие области:
- окно регистров;
- дамп стека;
- окно листинга;
- дамп памяти.
2.1. Окно регистров.
Окно регистров разбито на более мелкие окна (условные области):
- область индексных регистровых пар;
- область основного набора регистров;
- область альтернативного набора регистров;
- нижняя область (оставшиеся три строки);
2.1.1. Состояние индексных регистровых пар.
┌───────────────── Состояние регистровой пары
│ ┌────── Мини-дамп
┌───┴──┐ ┌─────┴──────┐
╔════════╤══════════════╦═
║IX #8080│0EFC F8FC .№°№║
║IY #1637│0045 4D4F .EMO║
╟────────┼──────────────╢
└┤ └─┬─┘ └┬─┘ └┬─┘ └┬─┘
│ │ └──┬─┘ └─ ASCII представление памяти
│ │ └──────── Байты из памяти, на которую ссылается регистровая пара
│ └──────────────── Значение регистровой пары
└──────────────────── Регистровая пара
2.1.2. Состояние основного и aльтернативного наборов регистров процессора.
╟────────┼──────────────╢
║HL #8100│0081 FFFE .Б.■║
║DE #2C40│C34A 2D21 ├J-!║
║BC #C089│D6C6 06C6 ╓╞.╞║
║AF #FB82│%11111011 "√" ║
║Sz.h.pNc│ ║
╟────────┼──────────────╢
║HL'#0000│C34A 2DFF ├J-.║
║DE'#2B18│DD21 082E ▌!..║
║BC'#0200│DCE6 0106 ▄ц..║
║AF'#FB44│%11111011 "√" ║
║sZ.h.Pnc│ ║
╟────────┼────────┬─────╢
Состояние строк с регистровыми парами HL, DE, BC и HL', DE', BC' полностью
аналогично строкам с индексными регистровыми парами. Далее в двух строках
отображается состояние аккумулятора и флагов процессора:
┌──────────────────── Регистровая пара
│ ┌──────────────── Значение аккумулятора
│ │ ┌────────────── Значение флагового регистра
│ │ │ ┌──────── Двоичное представление аккумулятора
│ │ │ │ ┌─ ASCII представление аккумулятора
┌┤ ┌┤┌┤ ┌───┴───┐ │
║AF #FB82│%11111011 "√" ║
║Sz.h.pNc│ ║
╟────────┼──────────────╢
││ │ │││
││ │ ││└────────────── С - флаг переноса
││ │ │└─────────────── N - флаг операции вычитания
││ │ └──────────────── P/V - флаг четного результата / переполнения
││ └────────────────── H - флаг вспомогательного переноса
│└──────────────────── Z - флаг нуля
└───────────────────── S - флаг знака
Заглавная буква соответствует установленному флагу, прописная - сброшенному.
2.1.3. Состояние счетчика команд и регистров адреса регенерации и таблицы
прерываний.
╟────────┼────────┬─────╢
║PC #00CF│IR #8045│ ║
└┤ └─┬─┘ └┤ └┤└┤
│ │ │ │ └───── Значение регистра адреса регенерации
│ │ │ └─────── Значение регистра адреса таблицы прерываний
│ │ └─────────── Регистровая пара
│ └──────────────── Значение счетчика команд
└──────────────────── Регистровая пара
2.1.4. Номера банок памяти, включенных в окна процессора.
┌─────────────────── 0-е окно адресного пространства (#0000...#3FFF)
│ ┌───────────── 1-е окно адресного пространства (#4000...#7FFF)
│ │ ┌─────── 2-е окно адресного пространства (#8000...#BFFF)
│ │ │ ┌─ 3-е окно адресного пространства (#C000...#FFFF)
╠═ 0 ═╤═ 1 ═╤═ 2 ═╪═ 3 ═╣
║ #FB │ #FF │ #E8 │ #FF ║
╠═════╧══╤══╧═╦═══╧═════╣
└┬┘ └┬┘ └┬┘ └┬┘
│ │ │ └─ Физический номер банки памяти включенной в 0-е окно
│ │ └─────── Физический номер банки памяти включенной в 1-е окно
│ └───────────── Физический номер банки памяти включенной во 2-е окно
└─────────────────── Физический номер банки памяти включенной в 3-е окно
2.1.5. Состояние указателя стека и адрес расположения резидента.
╠═════╧══╤══╧═╦═══╧═════╣
║SP #7FF6│ 4║REZ #7000║
╠════════╧══╦═╩═════════╩═
└┤ └─┬─┘ └─┬┘ └┬┘ └─┬─┘
│ │ │ │ └─ Адрес размещения резидента
│ │ │ └────── Резидент
│ │ └────────── Использованная глубина стека
│ └──────────────── Значение указателя стека
└──────────────────── Регистровая пара
Справа от пары SP выводится глубина использованного стека. Так команды PUSH,
CALL и RST приводят к увеличению этого числа, а команды POP и RET -
соответственно к уменьшению. Число всегда отображено в десятичном формате и
может быть отрицательным.
2.2. Дамп стека.
╠════════╧══╦ Вершина стека подсвечена. Ниже подсвеченной строки находятся
║#8002 #6C7E║ значения снятые со стека, выше - значения в стеке.
║#8000 #7E00║
║#7FFE #302C║
║#7FFC #FB82║
║#7FFA #FB82║
║#7FF8 #FB82║
║#7FF6 #2C40║
║#7FF4 #1637║
╚═══════════╩
└─┬─┘ └─┬─┘
│ └───────────── Значение памяти
└─────────────────── Адрес памяти
2.3. Окно листинга.
Текущее время ───────┐
┌───┴──┐
╦══════════════════════════════════════════════01:58:36╗
║ #A000 7A LD A,D ║
║ #A001 FE20 CP #20 ║
╢ #A003 20E2 JR NZ,#9FE7 ║
║ #A005 2128A0 LD HL,#A028 ║
║ #A008 AF XOR A ║
║ #A009 0E0A LD C,#0A ║
║ #A00B D7 RST #10 ║
║ #A00C 380E JR C,#A01C ║
╢ #A00E F5 PUSH AF ║
║ #A00F 2100C0 LD HL,#C000 ║
║ #A012 11400A LD DE,#0A40 ║
║ #A015 0E14 LD C,#14 ║
║ #A017 D7 RST #10 ║
║ #A018 F1 POP AF ║
╢ #A019 0E12 LD C,#12 ║
║ #A01B D7 RST #10 ║
╣ #A01C 3A32A0 LD A,(#A032) ║
║ #A01F 0E3C LD C,#3C ║
╣ #A021 D7 RST #10 ║
║ #A022 3A33A0 LD A,(#A033) ║
╩══════════════════════════════════════════════════════╣
└─┬─┘ └──────┬─────┘ └───┬──┘ └─────┬──────────────┘
│ │ │ └── Мнемоника команды
│ │ └───────────── Поле кода команды
│ └───────────────────────── Поле метки
│ (в текущей версии не реализовано)
└──────────────────────────────────── Адрес команды
Текущая команда процессора (на которую указывает PC) выделена полосой.
2.4. Дамп памяти.
ASCII представление памяти ─────────────┐
┌───────┴──────┐
╦═╩═════════╩══════════════════════════════════════════════════════╣
║ #4000 007E 7E6C 1038 1000 FF00 FF0F 3C3F 7F18 .~~l.8......<?.. ║
║ #4010 8002 1866 7F3E 0018 1818 0000 0000 0000 А..f.>.......... ║
║ #4020 0030 6C6C 3000 3860 1860 0000 0000 0006 .0ll0.8`.`...... ║
║ #4030 7C30 7878 1CFC 38FC 7878 0000 1800 6078 |0xx.№8№xx....`x ║
║ #4040 7C30 FC3C F8FE FE3C CC78 1EE6 F0C6 C638 |0№<°■■<╠x.цЁ╞╞8 ║
║ #4050 FC78 FC78 FCCC CCC6 C6CC FE78 C078 1000 №x№x№╠╠╞╞╠■x└x.. ║
║ #4060 3000 E000 1C00 3800 E030 0CE0 7000 0000 0.р...8.р0.рp... ║
║ #4070 0000 0000 1000 0000 0000 001C 18E0 7600 .............рv. ║
╩══════════════════════════════════════════════════════════════════╝
└─┬─┘ └──────────────────┬──────────────────┘
│ └──────────── HEX представление памяти
└──────────────────────────────────── Адреса памяти дампа
3. Управление.
Управление в программе осуществляется при помощи клавиатуры.
3.1. Общее управление.
Эти последовательности клавиатурных команд обрабатываются в независимости от
того, в каком окне находится курсор программы:
TAB - переход в следующее окно программы;
SHIFT+TAB - переход в предыдущее окно программы;
CTRL+E - переключение dEc/hEc системы вывода чисел на экране;
CTRL+R - изменение адреса размещения резидента;
F7 или CTRL+Z - выполнение текущей команды процесcора;
F8 или CTRL+C - выполнение текущей команды процесcора с автоматическим
выполнением подпрограмм и цикла DJNZ;
F9 или CTRL+V - пропуск текущей команды процесcора, адрес в регистровой паре
PC устанавливается на следующую команду без исполнения
предыдущей;
ESC - просмотр системного экрана;
F10 или ALT+X - выход из программы.
В программе реализована полноценная строка ввода. Данные можно вводить как в
HEX, так и в DEC системах исчисления, причем HEX-число должно начинаться с
префикса #, латинской литеры x или X.
3.2. Окно регистров.
HOME - в начало текущей строки;
END - в конец текущей строки;
PAGE UP - на первую строку условной области;
PAGE DOWN - на последнюю строку условной области;
ENTER - начало редактирования значения регистровых пар, байт памяти
и ASCII представления памяти и аккумулятора, а также номеров
банок, включенных в окна процессора;
- инвертирование битов двоичного представления аккумулятора и
установка / сброс флагов, а также обнуление значения глубины
стека.
3.3. Дамп стека.
PAGE UP - по-страничный просмотр стека;
PAGE DOWN - по-страничный просмотр стека;
HOME - вернуть вершину стека в фокус;
CTRL+X - установить стек на текущую строку;
ENTER - ввод нового адреса или данных;
- ввод адреса в подсвеченной строке (на вершине стека) приводит
к изменению регистровой пары SP.
3.4. Окно листинга.
PAGE UP - на страницу листинга вверх;
PAGE DOWN - на страницу листинга вниз;
HOME - переход в колонку адреса;
END - переход в колонку мнемоники;
CTRL+X - установить значение счетчика команд на текущую строку;
RCTRL+цифра - запоминание текущего адреса листинга (запомнить закладку);
LCTRL+цифра - быстрый переход на адрес листинга (на сохр. ранее закладку);
LCTRL+~ - быстрый циклический переход (отображение листинга)
в начало 0..3 окон памяти процессора;
ENTER - редактирование адреса или кода команды, причем код команды
вводится только в HEX системе исчисления.
3.5. Дамп памяти.
PAGE UP - на страницу дампа вверх;
PAGE DOWN - на страницу дампа вниз;
HOME - переход к колонке адреса;
END - переход к последней колонке окна;
CTRL+HOME - переход последовательно (если курсор установлен в конце
строки дампа) к первой колонке ASCII представления памяти,
далее к первой колонке байт памяти и наконец к адресу;
CTRL+END - переход к последней колонке байт памяти и далее к последней
колонке ASCII представления памяти;
ENTER - редактирование адреса или текущих данных, причем
редактирование в поле данных и в поле ASCII представления
памяти несколько отличается - курсор после ввода очередного
байта автоматичеси переходит к следующему.

786
disasm.asm Normal file
View File

@ -0,0 +1,786 @@
;[]=========================================================================[]
;[] Дизассемблер монитора-отладчика DemoN []
;[] v0.01 - последние изменения 10.10.2004 []
;[] v0.02 - последние изменения 20.03.2005 []
;[] v0.03 - последние изменения 16.02.2006 []
;[] v0.10 - последние изменения 10.09.2006 []
;[] []
;[] DisAsm - вывод листинга []
;[] AttrList - вывод атрибутов строки листинга []
;[] UpAddress - расчет предыдущего адреса строки листинга []
;[] List - формирование строки листинга []
;[]=========================================================================[]
;[]=========================================================================[]
;[] Вывод листинга []
;[]=========================================================================[]
DisAsm:
ld hl,(ListAddr) ; адрес первой строки листинга
ld de,0x011A ; координаты печати
.L1 push de
push hl
push de
ld a,d
dec a
add a,a
ld c,a
ld b,0
ex de,hl
ld hl,ListAddr
add hl,bc
ld (hl),e ; адрес строки листинга
inc hl
ld (hl),d
ex de,hl
pop de
call AttrList ; окрасить строку
.L2 call PrintReg
pop hl
call List
pop de
; push af ; длина кода временно
ld a,(ListFormat) ; форматный вывод
or a
call nz,LFormat
push de
push hl
di
ld a,21
add a,e
ld e,a ; новая координата X
ld c,Bios.Lp_Set_Place ; установка позиции печати
rst BiosRst
; ld c,Dss.Locate
; rst DssRst
ld hl,List.String
ld bc,32*256+Bios.Lp_Print_Ln2 ; в рег.B длина строки
rst BiosRst
ei
; ld c,Dss.PChars
; rst DssRst
pop hl
pop de
;печать длины кода в поле метки (временно)
; pop af
; push de
; push hl
; ld e,0x24
; push de
; ld h,0
; ld l,a
; ld de,.Buf
; call NumToStr8
; pop de
; ld c,Dss.Locate
; rst DssRst
; ld hl,.Buf
; ld c,Dss.PChars
; rst DssRst
; pop hl
; pop de
; jr $+5
;.Buf db "123",0
;end (временно)
inc d ; следующая строка
ld a,(KEYB.KList.Descript) ; кол-во строк листинга
cp d
jr nc,.L1
ret
;[]=========================================================================[]
;[] Вывод атрибутов строки листинга []
;[] Вход: DE - координаты подсветки []
;[] HL - текущий адрес листинга []
;[]=========================================================================[]
AttrList:
di
push hl ; текущий адрес листинга
push de ; текущие координаты
push hl
ld bc,(Reg._PC) ; адрес программного счетчика
or a ; сброс флага C
sbc hl,bc
pop hl
jr nz,.L2
ld a,(Color._PC) ; цвет программного курсора
jr .L0
.L2 push hl
push de
push hl
ld bc,Rezident.End-Rezident ; длина резидента
ld hl,(RezAdr) ; начало резидента
push hl
add hl,bc ; конечный адрес резидента
pop de
dec de
dec de
dec de
dec de
pop bc
call AdrArea
pop de
pop hl
jr c,.L3
ld a,(Color.RezArea) ; цвет области размещения резидента
jr .L0
.L3 ld a,(Color.Screen) ; основной цвет
.L0 ld (.L1+1),a
dec e
ld c,Bios.Lp_Set_Place ; установка позиции печати
rst BiosRst
.L1 ld e,0 ; цвет подсветки
ld bc,54*256+Bios.Lp_Print_Atr ; в рег.B длина строки
rst BiosRst
pop de
pop hl
ei
ret
;[]=========================================================================[]
;[] Расчет предыдущего адреса строки листинга []
;[] Вход: HL - адрес текущей строки []
;[] Выход: HL - адрес предыдущей строки []
;[]=========================================================================[]
UpAddress:
ld de,-4
add hl,de ; 4-х байтная команда?
call Ld_a_hl
; ld a,(hl)
cp 0xDD ; префикс 0xDD
jr z,$+8
or 00110000b ; маска для префиксов 0xED,0xFD
cp 0xFD
jr nz,.L1
push hl
call List
pop hl
cp 4
ret z
.L1 inc hl
push hl ; 3-х байтная команда?
call List
pop hl
cp 3
ret z
inc hl
push hl ; 2-х байтная команда?
call List
pop hl
cp 2
ret z
inc hl
ret ; 1-о байтная команда!
;[]=========================================================================[]
;[] Форматирование строки листинга []
;[]=========================================================================[]
LFormat:
push hl
ld hl,List.String+11 ; начало строки
ld bc,2 ; макс кол-во вставляемых пробелов
.L2 ld a,(hl)
or a
jr z,.Exit
cp 0x20 ; пробел
jr z,.L1
inc hl
dec c
jr nz,.L2
.Exit pop hl
ret
.L1 push de
push bc
push hl
ld hl,List.String+30 ; конец строки
ld d,h
ld e,l
or a
sbc hl,bc
pop bc
push bc
push hl
sbc hl,bc ; кол-во байт
ld b,h
ld c,l
pop hl
lddr
pop hl
pop bc ; кол-во пробелов
ld b,c
.L3 inc hl ; адрес вставки
ld a,0x20
ld (hl),a
djnz .L3
pop de
pop hl
ret
;[]=========================================================================[]
;[] Формирование строки листинга []
;[] Вход: HL - адрес памяти дизассемблирования []
;[] Выход: HL - следующий за дизассемблированной командой адрес памяти []
;[] A - длина кода команды []
;[]=========================================================================[]
List:
xor a ; длина кода команды
ld (.Byte),a
push hl
ld d,h
ld e,l
ld hl,.String ; очистка буфера строки
; di ; с использованием акселя
; ld d,d ; включить аксель
; ld a,32 ; длина буфера и байт заполнитель
; ld c,c ; команда заполнения
; ld (hl),a ; заполнить
; ld b,b ; выключить аксель
; ei
ld a,32 ; длина буфера и байт заполнитель
ld b,a
ld (hl),a
inc hl
djnz $-2
ld ix,.String+2 ; адрес в строке для след.кода
ex de,hl
; ld a,(hl) ; байт из памяти
call Ld_a_hl
;===============================
cp 0xDD ; префикс #DD
jr z,.L43
cp 0xFD ; префикс #FD
jp nz,.L30
ld de,"DF"
ld a,"Y"
jr .L42
.L43 ld de,"DD"
ld a,"X"
.L42 ld (.String),de ; префикс в строку
ld (.IRS1+1),a ; корректировка рег.пары
ld (.L9+1),a
ld (.L13+6),a
ld a,1
ld (.Byte),a ; длина кода команды
pop hl
inc hl
; ld a,(hl) ; следующий байт команды
call Ld_a_hl
push hl
cp 0xCB
jr z,.L40 ; команды #DD(#FD)#CB
ld hl,CodeDDFD ; таблица кодов
ld bc,85 ; размер таблицы
cpir ; поиск кода
jr z,.L45
pop hl
ld bc,ED00
ld de,.String+9 ; копирование мнемоники NOP *
ld a,(bc)
or a
ret z
ld (de),a
inc de
inc bc
jr $-6
.L45 ld hl,84 ; размер таблицы
or a
sbc hl,bc
ld de,TablDDFD
jp .L_12+3
.L40 ld ix,.String+4 ;адрес в строке для след.кода
ld de,"BC" ;префикс в строку
ld (.String+2),de
ld a,4 ;длина кода
ld (.Byte),a
pop hl
inc hl
call Ld_a_hl
ld b,a
; ld b,(hl) ;байт-смещение
inc hl
call Ld_a_hl
; ld a,(hl) ;следующий байт команды
inc hl
push hl
ld c,a
ld h,0
cp 0x40 ;от 0 до 0x3F (сдвиги)
jr c,.L44
call .ComCBBit ;мнемоника BIT,SET,RES
ld a,c
cp 0x80 ;команда BIT
jr nc,.L41
call .NomBit ;номер бита
call .IndexRegSh ;индексная пара со смещением
jr .L46
.L41 call .NomBit ;номер бита
jr .L44+3
.L44 call .ComCBSh ;мнемоника
call .RegName ;регистр
jr nz,$+6
ld a,"," ;разделитель
ld (de),a
inc de
call .IndexRegSh ;индексная пара со смещением
.L46 ld a,c
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
pop hl
ret
;===============================
.L30 cp 0xCB ;префикс #CB
jp nz,.L20
ld de,"BC" ;префикс в строку
ld (.String),de
pop hl
inc hl
call Ld_a_hl
; ld a,(hl) ;следующий байт команды
inc hl
push hl
ld c,a
ld h,0
cp 0x40 ;от 0 до 0x3F (сдвиги)
jr nc,.L31
call .ComCBSh ;мнемоника
jr .L31+6
.L31 call .ComCBBit ;мнемоника
call .NomBit ;номер бита
call .RegName ;регистр
call nz,.HLReg
ld a,c
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
pop hl
ld a,2 ;длина кода команды
ret
;===============================
.L20 cp 0xED ;префикс #ED
jr nz,.L10
ld a,1
ld (.Byte),a ;длина кода
ld de,"DE" ;префикс в строку
ld (.String),de
pop hl
inc hl
push hl
call Ld_a_hl
; ld a,(hl) ;следующий байт команды
cp 0x40 ;от 0 до 0x3F
jr c,.L21
ld de,TablED-0x40*2
cp 0x7F ;от 0x40 до 0x7E из таблицы
jr c,.L_12
cp 0xA0 ;от 0x7F до 0x9F
jr c,.L21
ld de,TablED-0xA0*2+0x40*2-2
cp 0xBC ;от 0xBC до 0xFF
jr c,.L_12
.L21 ld hl,ED00 ;команда "NOP *"
jr .L_2-3
;===============================
.L10 ld ix,.String
ld de,Tabl00_3F ;таблица смещений
cp 0x40 ;команды 0x00...0x3F
jr c,.L_12
ld de,TablC0_FF ;таблица смещений
ld c,a
sub 0xC0 ;команды 0xC0...0xFF
jr nc,.L_12
ld a,c
cp 0x80
jr nc,.L8
ld hl,MHALT
cp 0x76 ;код команды HALT
jr z,.L_2-3
ld hl,.String+9
ld (hl),"L" ;мнемоника LD
inc hl
ld (hl),"D"
inc hl
ld (hl)," "
inc hl
rrca
rrca
rrca
ex de,hl
call .RegName+1 ;печать регистра
call nz,.HLReg
ld a,"," ;разделитель
ld (de),a
inc de
call .RegName ;печать регистра
call nz,.HLReg
xor a
jr .L1
.L8 and 00111000b ;ADD,ADC,SUB,SBC,AND,XOR,OR,CP
rrca
rrca
ld l,a
ld h,0
ld de,TablM
add hl,de ;смещение в таблице
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ld de,.String+9 ;копирование в строку-буфер
ld a,(hl)
ld (de),a
inc de
inc hl
or a
jr nz,$-5
dec de
call .RegName ;печать регистра
call nz,.HLReg
xor a
jr .L1
.L_12 ld l,a ;расчет адреса в таблице
ld h,0
add hl,hl ;*2
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a ;адрес строки-мнемоники
ld de,.String+9 ;копирование в строку-буфер
.L_2 ld a,(hl)
cp 0x20
jr c,.L1
cp "x" ;индексный регистр
jr nz,$+4
.L9 ld a,"X"
ld (de),a
cp ")"
jr nz,$+9
ld (.TablAdr),hl
ld (.StrAdr),de
inc hl
inc de
jr .L_2
.L1 exa
pop hl ;печать байта
call Ld_a_hl
; ld a,(hl)
inc hl
push hl
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
exa
jp z,.LE
dec a ;2-х байтная команда (1)
jr nz,.L3
call .TwoByteCom
pop hl
ld a,(.Byte)
inc a
inc a ;длина кода
ret
.L3 dec a ;3-х байтная команда (2)
jr nz,.L4
call .ThreeByteCom
pop hl
ld a,(.Byte)
add a,3 ;длина кода
ret
.L4 dec a ;команды относительного перехода (3)
jr nz,.L7
pop hl
call Ld_a_hl
; ld a,(hl) ;2-й байт команды
inc hl
push hl
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld a,c
ld b,0
pop hl
push hl ;текущий адрес
bit 7,a ;знак числа
jr z,$+10
neg
or a ;сброс флага C
ld c,a
sbc hl,bc ;отрицательное смещение
jr $+3
add hl,bc ;положительное смещение
call NumToStr16
pop hl
ld a,2 ;длина кода
ret
.L7 dec a ;команды работы с портами (4)
jr nz,.L5
inc a
ld (.Byte),a ;длина кода
ld de,(.StrAdr) ;адрес вставки
call .TwoByteCom
jr .L6
.L5 dec a ;3-х байтные косвенной адресации (5)
jr nz,.L11
ld a,(.Byte)
inc a
inc a
ld (.Byte),a ;длина кода
ld de,(.StrAdr) ;адрес вставки
call .ThreeByteCom
jr .L6
.L11 dec a ;индексные регистры со смещением (6)
jr nz,.LE
ld a,2
ld (.Byte),a ;длина кода
ld de,(.StrAdr) ;адрес вставки
pop hl
call Ld_a_hl
ld b,a
; ld b,(hl)
inc hl
push hl
ld ix,.String+4
call .IndexRegSh
.L6 ld hl,(.TablAdr) ;адрес в таблице мнемоник
ld a,(hl)
cp 0x20
jr nc,.L13
ld a,b
cp "," ;мнемоника оканч. на ","
jr nz,.LE
call .TwoByteCom
pop hl
ld a,4 ;длина кода
ret
.L13 ld b,a
cp "x" ;индексный регистр
jr nz,$+4
ld a,"X"
ld (de),a
inc hl
inc de
jr .L6+3
.LE pop hl
ld a,(.Byte) ;длина кода
inc a
ret
;======== печать второго кода двухбайтной команды ========
.TwoByteCom:
pop bc ;адрес возврата
pop hl
call Ld_a_hl
; ld a,(hl) ;2-й байт команды
inc hl
push hl
push bc
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld l,c
ld h,0
jp NumToStr8
;======== печать второго и третьего кода трехбайтной команды ========
.ThreeByteCom:
pop bc ;адрес возврата
pop hl
call Ld_a_hl
; ld a,(hl) ;2-й байт команды
inc hl
exa
call Ld_a_hl
; ld a,(hl) ;3-й байт команды
inc hl
push hl
push bc
ld b,a
call ConvHexStr
ld (ix+4),l
ld (ix+5),h
exa
ld c,a
call ConvHexStr
ld (ix+2),l
ld (ix+3),h
ld h,b ;в HL - число
ld l,c
jp NumToStr16
;======== печать мнемоник команд с префиксом 0xCB (сдвиги, битовые) ========
;A - байт команды
;DE - адрес в строке
.ComCBBit:
and 11000000b
rlca
rlca
rlca
rlca
ld l,a
ld de,CB40-4
add hl,de
jr .ComCBSh1
.ComCBSh:
and 00111000b ;смещение в таблице
rrca
rrca
ld l,a
ld de,TablCB
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
.ComCBSh1 ld de,.String+9 ;копирование в строку-буфер
ld a,(hl)
ld (de),a
inc de
inc hl
cp " " ;последний символ мнемоники
jr nz,$-6
ret
;======== вычисление номера бита в битовых командах BIT, SET, RES ========
;C - байт команды
;DE - адрес в строке
.NomBit:
ld a,c
and 00111000b ;номер бита
rrca
rrca
rrca
add a,"0"
ld (de),a
ld a,","
inc de
ld (de),a
inc de
ret
;======== печать имени регистра ========
;C - команда
;DE - адрес в строке
.RegName:
ld a,c
and 00000111b ;регистр
add a,"B"
cp "F" ;B,C,D,E
jr c,.RN1
inc a
inc a
cp "H"
jr z,.RN1
add a,3
cp "L"
jr z,.RN1
sub 13
cp "A"
ret nz ;относительная адресация
.RN1 ld (de),a
inc de
xor a
ret
;======== печать (HL) ========
;DE - адрес в строке
.HLReg:
ex de,hl
ld (hl),"("
inc hl
ld (hl),"H"
inc hl
ld (hl),"L"
inc hl
ld (hl),")"
inc hl
ex de,hl
ret
;======== печать индексной регистровой пары со смещением ========
;B - смещение
;DE - адрес в строке
.IndexRegSh:
ld a,b
call ConvHexStr
ld (ix+0),l
ld (ix+1),h
ex de,hl
ld (hl),"("
inc hl
ld (hl),"I"
inc hl
.IRS1 ld (hl),"X"
inc hl
ld a,"+" ;положительное смещение
ld (hl),a
ld a,b ;смещение
bit 7,b
jr z,$+8
ld a,"-" ;отрицательное смещение
ld (hl),a
ld a,b ;смещение
neg
inc hl
ex de,hl
ld l,a
ld h,0
call NumToStr8
ld a,")"
ld (de),a
ret
.String db "00112233 01234567890123456789012"
.Byte db 0
.TablAdr dw 0
.StrAdr dw 0

398
dss.asm Normal file
View File

@ -0,0 +1,398 @@
; ======================================================
; DSS Estex dumb for debug code in VSC with DEZOG plugin
; By Roman Boykov. Copyright (c) 2024
; https://github.com/romychs
; ======================================================
INCLUDE "dss.inc"
ORG 0x0000
RESET:
JP NOT_IMPL
DS 5, 0xFF
RST08:
JP NOT_IMPL
DS 5, 0xFF
ORG 0x0010
RST10:
JP DSS_HANDLER
DS 5, 0xFF
RST18:
JP NOT_IMPL
DS 5, 0xFF
RST20:
JP NOT_IMPL
DS 5, 0xFF
RST28:
JP NOT_IMPL
DS 5, 0xFF
RST30:
JP NOT_IMPL
DS 5, 0xFF
RST38:
JP NOT_IMPL
DS 5, 0xFF
DSS_HANDLER
PUSH HL
PUSH BC
LD A, C
CP DSS_CURDISK
JP Z, _CURDISK
CP 0x0B
JP Z, _CREATE_FILE
CP 0x11
JP Z, _OPEN_FILE
CP 0x12
JP Z, _CLOSE_FILE
CP 0x13
JP Z, _READ_FILE
CP 0x14
JP Z, _WRITE_FILE
CP 0x19
JP Z, _FIND_FIRST
CP 0x1D
JP Z, _CH_DIR
CP 0x1E
JP Z, _CURDIR
CP DSS_WAITKEY
JP Z, _WAITKEY
CP DSS_SCANKEY
JP Z, _SCANKEY
CP DSS_ECHOKEY
JP Z, _ECHOKEY
CP DSS_SETVMOD
JP Z, _SETVMOD
CP DSS_GSWITCH
JP Z, _GSWITCH
CP DSS_GETVMOD
JP Z, _GETVMOD
CP low DSS_CLEAR
JP Z, _CLEAR
CP DSS_PUTCHAR
JP Z, _PUTCHAR
CP DSS_PCHARS
JP Z, _PCHARS
CP 0x41
JP Z, _EXIT
POP BC
POP HL
NOT_IMPL
LD A,0x01
SCF
RET
_PUTCHAR
LD BC, 0x9000
OUT (C),A
JR NORM_EXIT
_PCHARS
LD BC, 0x9000
NXT_PCHAR
LD A, (HL)
OUT (C),A
INC HL
OR A
JR NZ, NXT_PCHAR
NORM_EXIT
AND A ; CF=0
POP BC
POP HL
RET
BAD_EXIT
SCF
POP BC
POP HL
RET
_CURDISK
LD A, 3
JP NORM_EXIT
; Входные значения:
; HL - указатель на файловую спецификацию
; A - атрибут файла
; Выходные значения:
; A — код ошибки, если CF=1
; A - файловый манипулятор, если CF=0
_CREATE_FILE
JP _OPEN_FILE
; Входные значения:
; HL - указатель на файловую спецификацию
; A - режим доступа
; A=0 чтение/запись
; A=1 чтение
; A=2 запись
; Выходные значения:
; A - код ошибки, если CF=1
; A - файловый манипулятор, если CF=0
CUR_FILE_MAN
DB 0x4F
CUR_DIR
DB "\\FOLDER",0
CUR_DIR_END
CUR_DIR_SIZE EQU CUR_DIR_END-CUR_DIR
_OPEN_FILE
LD HL, CUR_FILE_MAN
INC (HL)
LD A, (HL)
JP NORM_EXIT
_CLOSE_FILE
JP NORM_EXIT
CUR_F_PTR
DW ZIP_FILE
REMAINS_IN_ZIP
DW 0
; Входные значения:
; A - файловый манипулятор
; HL - адрес в памяти
; DE - количество читаемых байт
; Выходные значения:
; A - код ошибки, если CF=1
; DE - реальное количество прочитанных байт
; если CF=0:
; A = 0 прочитаны все байты
; A = 0FFh прочитано меньшее число байт
_READ_FILE
OR A
JP Z, BAD_EXIT
PUSH DE
POP BC ; BC - bytes to read
PUSH HL
LD HL, (CUR_F_PTR) ; HL -> IN ZIP_FILE
LD DE, ZIP_FILE_END
EX HL, DE
SUB HL, DE ; HL = remain bytes
LD (REMAINS_IN_ZIP), HL
SBC HL, BC
LD A, 0
JR NC, NO_OUT_OF_ZIP
DEC A
LD HL,(REMAINS_IN_ZIP)
LD BC, HL
NO_OUT_OF_ZIP
LD HL, (CUR_F_PTR)
POP DE ; DE - Buffer to write
PUSH BC
LDIR
POP DE ; DE = bytes read, A = 0 or 0xFF
LD (CUR_F_PTR), HL
JP NORM_EXIT
; Входные значения:
; A - файловый манипулятор
; HL - адрес в памяти
; DE - количество записываемых байт
; Выходные значения:
; A - код ошибки, если CF=1
; DE - реальное количество записанных байт
_WRITE_FILE
PUSH DE
POP BC
LD DE,UNZIP_FILE
PUSH BC
LDIR
POP DE
JP NORM_EXIT
; Входные значения:
; HL - указатель на файловую спецификацию
; Выходные значения:
; A - код ошибки, если CF=1
_CH_DIR
JP NORM_EXIT
; 1Eh (30) CURDIR (Информация о текущем каталоге)
; Входные значения:
; HL - буфер в памяти 256 байт
; Выходные значения:
; A - код ошибки, если CF=1
_CURDIR
PUSH DE
LD DE, CUR_DIR
EX HL,DE
LD BC, CUR_DIR_SIZE
LDIR
POP DE
JP NORM_EXIT
_ECHOKEY
PUSH HL
LD HL,EC
LD C,DSS_PCHARS
RST DSS
POP HL
LD A,(EC)
JP NORM_EXIT
EC DB "3",0
; Входные значения:
; HL - указатель на файловую спецификацию
; DE - рабочий буфер 44 байта, если B=0, иначе 256 байт
; A - атрибуты, используемые при поиске
; B = 0 - имя найденного файла в формате 11 байт "FilenameExt"
; B = 1 - имя найденного файла в формате DOS "filename.ext",0
; C - 19h
; Выходные значения:
; A - код ошибки, если CF=1
_FIND_FIRST
PUSH DE
LD HL, 33 ; offset of file name
ADD HL, DE
EX HL, DE
LD HL, ZIP_FILE_NAME
LD BC,9
LDIR
POP DE
JP NORM_EXIT
_SCANKEY
XOR A
JP NORM_EXIT
; Выходные значения:
; A - код символа
; D - позиционный код
; Е - ASCII код
; C - режим клавиатуры:
_WAITKEY
XOR A
LD D, A
LD C, A
LD E,65
LD A,65
JP NORM_EXIT
CUR_VMOD
DB 1
; 50h (80) SETVMOD (Выбор режима экрана)
; Входные значения:
; A - режим экрана:
; 02h - текстовый 40x32x16 цветов;
; 03h - текстовый 80x32x16 цветов;
; 81h - графический 320x256x256 цветов;
; 82h - графический 640x256x16 цветов;
; B - страница экрана 0/1
; C - 50h
; Выходные значения:
; A - код ошибки, если CF=1
_SETVMOD
LD (CUR_VMOD),A
JP NORM_EXIT
; 51h (81) GETVMOD (Получить текущий режим экрана)
; Входные значения:
; C - 51h
; Выходные значения:
; A - код ошибки, если CF=1
; A - текущий режим экрана, если CF=0
; B - страница экрана 0/1
_GETVMOD
LD A,(CUR_VMOD)
JP NORM_EXIT
; 56h (86) CLEAR (Очистка окна)
; Входные значения:
; D - строка левого верхнего угла окна
; E - столбец левого верхнего угла окна
; H - высота окна
; L - ширина окна
; B - атрибут заполнитель
; A - символ заполнитель
; C - 56h
; Выходные значения:
; нет
_CLEAR
JP NORM_EXIT
_EXIT
; LOGPOINT STOPPED!
HALT
JP _EXIT
; GSWITCH (Выделить параметр командной строки)
; Входные значения:
; HL - указатель командной строки
; DE - буфер для выделяемого параметра
; C - 43h
; Выходные значения:
; HL - указатель на следующий параметр командной строки
; CF = 0 - конец строки не достигнут (есть другие параметры)
; CF = 1 - конец строки (в буфер перенесён последний параметр или ноль)
_GSWITCH
LD HL,CMD_LINE1+1
PUSH DE
.next
LD A, (HL)
LD (DE), A
OR A
JR Z,.enough
INC HL
INC DE
JR .next
.enough
POP DE
JP BAD_EXIT
CMD_LINE1
DB " myfile.exe",0
ZIP_FILE_NAME
DB "file.zip",0
ZIP_FILE
DS 1024,0
ZIP_FILE_END
UNZIP_FILE
DS 1024,0
ALIGN 16384, 0

44
dss.inc Normal file
View File

@ -0,0 +1,44 @@
; ======================================================
; Defines for DSS Estex for Sprinter computer
; By Roman Boykov. Copyright (c) 2024
; https://github.com/romychs
; ======================================================
; DSS RST Entry
DSS EQU 0x10
; DSS Functions
DSS_CURDISK EQU 0x02
DSS_CREATE_FILE EQU 0x0B
DSS_OPEN_FILE EQU 0x11
DSS_CLOSE_FILE EQU 0x12
DSS_READ_FILE EQU 0x13
DSS_WRITE EQU 0x14
DSS_MOVE_FP_CP EQU 0x0115
DSS_FIND_FIRST EQU 0x0119
DSS_FIND_NEXT EQU 0x011A
DSS_MKDIR EQU 0x1B
DSS_CHDIR EQU 0x1D
DSS_CURDIR EQU 0x1E
DSS_SCANKEY EQU 0x31
DSS_ECHOKEY EQU 0x32
DSS_EXIT EQU 0x41
DSS_GSWITCH EQU 0x43
DSS_WAITKEY EQU 0x48
DSS_SETVMOD EQU 0x50
DSS_GETVMOD EQU 0x51
DSS_CLEAR EQU 0x56
DSS_PUTCHAR EQU 0x5B
DSS_PCHARS EQU 0x5C
DSS_VMOD_T40 EQU 0x02 ; text 40x32, 16 colors
DSS_VMOD_T80 EQU 0x03 ; text 80x32, 16 colors
DSS_VMOD_G320 EQU 0x81 ; graphics 320x256, 256 colors
DSS_VMOD_G640 EQU 0x82 ; graphics 640x256, 16 colors
; DSS Error codes
E_FILE_EXISTS EQU 7
E_FILE_NOT_FOUND EQU 3

86
error.asm Normal file
View File

@ -0,0 +1,86 @@
;[]=========================================================================[]
;[] Обработка ошибок монитора-отладчика DemoN []
;[] v0.10 - последние изменения 27.08.2006 []
;[] []
;[] ErDss - определение ошибки DSS по ее коду []
;[]=========================================================================[]
;[]=========================================================================[]
;[] Ошибки DSS []
;[] Вход: A - код ошибки []
;[] Выход: A - код ошибки []
;[] HL - строка-описание ошибки []
;[]=========================================================================[]
PrErDss:
call ErDss
ld c,Dss.PChars ;вывести сообщение об ошибке
rst DssRst
ld hl,Str.DA ;перевод строки
ld c,Dss.PChars
rst DssRst
ret
ErDss:
.MaxError equ 0x26
cp .MaxError+1 ;максимальный код ошибки + 1
jr c,$+4
ld a,.MaxError
push af
add a,a
ld hl,.Tabl
ld d,0
ld e,a
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
pop af
ret
.e01 DB "Invalid function",0
.e02 DB "Invalid drive number",0
.e03 DB "File not found",0
.e04 DB "Path not found",0
.e05 DB "Invalid handle",0
.e06 DB "Too many open files",0
.e07 DB "File already exists",0
.e08 DB "File read only",0
.e09 DB "Root overflow",0
.e0A DB "No free space",0
.e0B DB "Directory not empty",0
.e0C DB "Can't delete current directory",0
.e0D DB "Invalid media",0
.e0E DB "Unknown operation",0 ; (невозм. операция)
.e0F DB "Directory exist",0
.e10 DB "Invalid filename",0
.e11 DB "Invalid EXE-file",0
.e12 DB "Not supported EXE-file",0
.e13 DB "Access denied",0
.e14 DB "Not ready",0
.e15 DB "Seek error",0
.e16 DB "Sector not found",0
.e17 DB "CRC error",0
.e18 DB "Write protect",0
.e19 DB "Read error",0
.e1A DB "Write error",0
.e1B DB "Drive failure",0
.e1C DB "Extended error: 28",0
.e1D DB "Extended error: 29",0
.e1E DB "Not enough memory",0
.e1F DB "Invalid memory block",0
.e20 DB "Extended error: 32",0
.e21 DB "Extended error: 33",0
.e22 DB "Extended error: 34",0
.e23 DB "Too many files",0 ; (список файлов)
.e24 DB "Too many folders nested or many folders (>1024)",0
.e25 DB "User abort",0 ; (операция прервана пользователем)
.e26 DB "Unknown error: 38..255",0 ; 38
.Tabl dw .e01,.e02,.e03,.e04,.e05,.e06,.e07,.e08
dw .e09,.e0A,.e0B,.e0C,.e0D,.e0E,.e0F,.e10
dw .e11,.e12,.e13,.e14,.e15,.e16,.e17,.e18
dw .e19,.e1A,.e1B,.e1C,.e1D,.e1E,.e1F,.e20
dw .e21,.e22,.e23,.e24,.e25,.e26

378
file.asm Normal file
View File

@ -0,0 +1,378 @@
;[]=========================================================================[]
;[] Файловые процедуры монитора-отладчика DemoN []
;[] v0.10 - последние изменения 27.08.2006 []
;[]=========================================================================[]
LoadFile
xor a ; выкл часов
ld (ClockOn),a
ld bc,0x0100+Dss.SelPage ; системный экран
rst DssRst
ld hl,Str.Load ; сообщение о загрузке файла
ld c,Dss.PChars
rst DssRst
call LoadExe
ld a,(DemonScreen)
ld b,a
ld c,Dss.SelPage
rst DssRst
ld a,On ; вкл часов
ld (ClockOn),a
ret
LoadExe
ld hl,FDebug ; имя файла
IFDEF DSS_1_70
call build_filename
ENDIF
ld a,1 ; открыть для чтения
ld c,Dss.Open
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld (FId),a ; запомнить файловый манипулятор
ld hl,FDebug ; буфер для загрузки заголовка
ld de,0x7F ; кол-во считываемых байт
ld c,Dss.Read ; чтение
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld hl,(FDebug) ; заголовок EXE-файла
ld de,0x5845 ; 'EX' проверка идентификатора
sbc hl,de
jr nz,.AS_BUN
ld hl,FDebug+3
ld a,(hl) ; версия EXE-файла
; exe v0 & v1
IFDEF DSS_1_70
cp 2 ; если версия EXE >1 то грузим как бинарник с ORG 0x0000
jp p,.AS_BUN
ELSE
or a
jr nz,.AS_BUN
ENDIF
inc hl
ld e,(hl) ; DE -> начало исполняемого кода
inc hl
ld d,(hl)
ld bc,11 ; пропускаем флаг загрузчика и зарезервированные байты
add hl,bc
ld a,(hl) ; мл.байт расположения кода в памяти
ld (FRam),a
inc hl
ld a,(hl) ; ст.байт расположения кода в памяти
ld (FRam+1),a
inc hl
ld a,(hl) ; мл.байт адреса запуска
ld (Reg._PC),a
ld (ListAddr),a ; мл.байт адреса листинга
inc hl
ld a,(hl) ; ст.байт адреса запуска
ld (Reg._PC+1),a
ld (ListAddr+1),a ; ст.байт адреса листинга
inc hl
ld a,(hl) ; мл.байт стека программы
ld (Reg._SP),a
inc hl
ld a,(hl) ; ст.байт стека программы
ld (Reg._SP+1),a
ld a,e
ld (.F_OFFS),a
ld a,d
ld (.F_OFFS+1),a
.AS_BUN
ld hl,0
ld ix,0 ; смещение в файле
ld bc,2*256+Dss.Move_FP ; относительно конца
rst DssRst
jp c,PrErDss ; выход с ошибкой
push hl
ld de,(FRam) ; адрес расположения кода
set 6,d
res 7,d ; грузим через 1-е окно
ld hl,0x8000
or a ; сбросить флаг C
sbc hl,de ; кол-во считываемых байт
ld (.L6+1),hl
ex de,hl
ld (.L6+4),hl
pop hl
call NBank ; определить кол-во банок
jp c,PrErDss ; выход с ошибкой
ld (MemId+1),a ; кол-во выделяемых страниц
ld b,a
ld c,Dss.GetMem ; выделение памяти
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld (MemId),a ; id блока памяти
ld a,(FId) ; файловый манипулятор
ld hl,0
.F_OFFS+2 ld ix,0 ; смещение в файле
ld bc,Dss.Move_FP ; относительно начала
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld a,(MemId) ; id блока памяти
ld bc,Dss.SetWin1 ; вкл 1-ю банку в 1-е окно
rst DssRst
jp c,PrErDss ; выход с ошибкой
.L6 ld de,0x3FFF ; кол-во считываемых байт
ld hl,0x4000 ; адрес загрузки кода
ld a,1 ; счетчик банок
ld (MemId+2),a
.L5 ld a,(FId) ; файловый манипулятор
ld c,Dss.Read ; чтение
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld bc,(MemId+1)
ld a,b
cp c ; загрзили весь файл?
jr z,.L4 ; переход, если да
inc a
ld (MemId+2),a ; увеличить счетчик банок
ld a,(MemId) ; id блока памяти
ld c,Dss.SetWin1 ; вкл банку в 1-е окно
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld hl,0x4000 ; адрес в памяти для загрузки
ld de,0x3FFF ; кол-во загружаемых байт
jr .L5
.L4 ld a,(FId) ; файловый манипулятор
ld c,Dss.Close ; закрыть файл
rst DssRst
jp c,PrErDss ; выход с ошибкой
ld a,(MemId) ; id блока памяти
ld bc,Bios.Emm_Fn4 ; вычислить физ номер 1-й банки
rst BiosRst
ret c ; выход с ошибкой
ld (BankP),a
ld a,(MemId+1) ; кол-во выделенных страниц
dec a
jr z,.L7
ld a,(MemId) ; id блока памяти
ld bc,1*256+Bios.Emm_Fn4 ; вычислить физ номер 2-й банки
rst BiosRst
ret c ; выход с ошибкой
ld (BankP+1),a
ld a,(MemId+1) ; кол-во выделенных страниц
cp 2
jr z,.L7
ld a,(MemId) ; id блока памяти
ld bc,2*256+Bios.Emm_Fn4 ; вычислить физ номер 3-й банки
rst BiosRst
ret c ; выход с ошибкой
ld (BankP+2),a
ld a,(MemId+1) ; кол-во выделенных страниц
cp 3
jr z,.L7
ld a,(MemId) ; id блока памяти
ld bc,3*256+Bios.Emm_Fn4 ; вычислить физ номер 4-й банки
rst BiosRst
ret c ; выход с ошибкой
ld (BankP+3),a
.L7 ld hl,WinPage
ld de,BankP
ld a,(MemId+1) ; кол-во выделенных страниц
ld b,a
cp 5
jr c,$+4
ld b,4 ; подключаем не более 4 банок
ld a,(FRam+1) ; ст.адрес расположения кода
and 0xC0 ; окно с расположением кода
or a ; 0-е окно
jr nz,.L8
ld c,a
ld a,(de)
ld (hl),a ; подключить банку программы
dec b
ret z ; выход, если больше нет банок
ld a,c
inc de
.L8 inc hl
cp 0x40 ; 1-е окно
jr nz,.L9
ld c,a
ld a,(de)
ld (hl),a ; подключить банку программы
dec b
ret z ; выход, если больше нет банок
ld a,c
inc de
.L9 inc hl
cp 0x80 ; 2-е окно
jr nz,.L10
ld c,a
ld a,(de)
ld (hl),a ; подключить банку программы
dec b
ret z ; выход, если больше нет банок
ld a,c
inc de
.L10 inc hl ; иначе 3-е окно
ld a,(de)
ld (hl),a ; подключить банку программы
ret
;[]=========================================================================[]
;[] Вычисление необходимого кол-ва банок для загрузки файла в память []
;[] Вход: HL:IX - длина файла в байтах []
;[] DE - кол-во байт для загрузки в 1-ю банку []
;[] Выход: A - кол-во необходимых банок []
;[] флаг C - ошибка, код ошибки в A []
;[]=========================================================================[]
NBank:
push ix
ld b,h
ld c,l
pop hl
inc bc
xor a
inc a
sbc hl,de
jr nc,$+4
jr .L5
ld de,16384 ; размер банки
push af
.L2 pop af
.L1 inc a
jr z,.L3
sbc hl,de
jr nc,.L1
.L5 dec bc
push af
ld a,b
or c
jr nz,.L2
pop af
or a ; сбросить флаг C
ret
.L3 ld a,0x1E ; "Недостаточно памяти"
; JP ErrorDSS
ret
IFDEF DSS_1_70
; ------------------------------------------------------
; Check '\' in file path
; Inp: HL->filespec
; Out: CF=0 - slash exists, CF=1 - no slash
; ------------------------------------------------------
check_bkslash
PUSH BC,HL
LD B,128
.next
LD A, (HL)
OR A
JR Z,.not_exists
CP "\\"
JR Z,.exists
INC HL
DJNZ .next
.not_exists
SCF
JR .exit
.exists
OR A ; CF=0
.exit POP HL,BC
RET
; ----------------------------------------------------
; Get full current path
; Inp: HP - pointer to buffer for path
; ----------------------------------------------------
get_cur_dur
PUSH HL
LD C, Dss.CurDisk
RST DssRst
JP C,PrErDss
ADD A, 65
LD (HL),A
INC HL
LD (HL),':'
INC HL
LD C, Dss.CurDir
RST DssRst
JP C,PrErDss
POP HL
CALL add_back_slash
RET
; ----------------------------------------------------
; Add back slash to path string
; Inp: HL - pointer to zero ended string with path
; Out: HL - point to end
; ----------------------------------------------------
add_back_slash
XOR A
; find end of path
.find_eos
CP (HL)
JR Z,.is_eos
INC HL
JR .find_eos
; check last symbol is '\'' and add if not
.is_eos
DEC HL
LD A,(HL)
CP "\\"
JR Z,.is_sep
INC HL
LD (HL),"\\"
.is_sep
; mark new end of string
INC HL
LD (HL),0x0
RET
; ------------------------------------------------------
; In only filename specified, build full path to file
; Inp: HL -> to filename
; Out: HL -> full path name
; ------------------------------------------------------
build_filename
CALL check_bkslash
RET NC
LD HL, FullPath
call get_cur_dur
LD DE, FDebug
EX DE,HL
LD BC,128
LDIR
LD HL, FullPath
RET
ENDIF
BankP DS 4 ; номера банок загружаемой проги
MemId DS 3 ; id-блока памяти под файл,
; кол-во выделенных банок,
; счетчик загруженных банок
FId DB 0 ; файловый манипулятор
FDebug DS 128 ; имя отлаживаемого файла и буфер для его чтения
DB 0
IFDEF DSS_1_70
FullPath DS 256,0
ENDIF
FStart DW 0x4200
FRam DW 0 ; адрес расположения кода в памяти

260
kdump.asm Normal file
View File

@ -0,0 +1,260 @@
;[]=========================================================================[]
;[] Обработка клавиатуры в окне дампа []
;[] v0.10 - последние изменения 31.03.2006 []
;[]=========================================================================[]
MODULE KDUMP
KDump:
ld a,b ; состояние <Shift><Alt><Ctrl>
and 11110000b
jr z,.L100
; Обработка комбинации Ctrl + символ
.L10 cp 00100000b ; <Ctrl>
jp nz,.L100
ld a,d ; позиционный код
cp SHIFTED_KEY+END_KEY ; <Ctrl>+<End>
jr nz,.L11
ld hl,.Coordinate ; текущая колонка
ld a,16
cp (hl)
jr nc,.L415
ld a,32
.L415
inc a
ld (hl),a
jp KEYB.Keyb_NC
.L11 cp SHIFTED_KEY+HOME_KEY ; <Ctrl>+<Home>
jp nz,KEYB.Keyb_NC
; jr nz,.L11
ld hl,.Coordinate ; текущая колонка
ld a,18
cp (hl)
jr c,.L11P8
ld a,2
cp (hl)
jr c,.L11P8
dec a
.L11P8
ld (hl),a
jp KEYB.Keyb_NC
; Обработка позиционного кода
.L100 ld a,e ; ASCII код
ld (.L200+1),a
ld a,d ; позиционный код
ld de,(.Coordinate) ; текущие координаты курсора
cp 0x56 ; <Right>
jr nz,.L101
ld a,(.Descript+2) ; кол-во колонок
cp e
ld a,e
jr nz,.LA446
xor a
.LA446
inc a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L101 cp 0x54 ; <Left>
jr nz,.L102
ld a,e ; текущая колонка
cp 1
jr nz,.L101P6
ld a,(.Descript+2) ; кол-во колонок
inc a
.L101P6
dec a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L102 ld hl,(.Descript)
cp DN_KEY ; <Down>
jr nz,.L103
ld a,d ; текущая строка
cp l
jr nz,.L104
ld hl,(Dump1)
ld bc,16
add hl,bc
ld (Dump1),hl
jp KEYB.Keyb_RF
.L104 inc a
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L103 cp UP_KEY ; <Up>
jr nz,.L105
ld a,d ; текущая строка
cp h
jr nz,.L107
ld hl,(Dump1)
ld bc,16
or a
sbc hl,bc
ld (Dump1),hl
jp KEYB.Keyb_RF
.L107 dec a
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L105 cp PGDN_KEY ; <PgDown>
jr nz,.L108
ld a,d ; текущая строка
cp l
jr nz,.L106
ld hl,(Dump1)
ld bc,16*7
add hl,bc
ld (Dump1),hl
jp KEYB.Keyb_RF
.L106 ld a,l ; на последнюю строку
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L108 cp PGUP_KEY ; <PgUp>
jr nz,.L110
ld a,d ; текущая строка
cp h
jr nz,.L109
ld hl,(Dump1)
ld bc,16*7
or a
sbc hl,bc
ld (Dump1),hl
jp KEYB.Keyb_RF
jr nz,.L109
.L109 ld a,h ; на первую строку
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L110 cp HOME_KEY ; <Home>
jr nz,.L111
ld a,1
ld (.Coordinate),a ; первая колонка
jp KEYB.Keyb_NC
.L111 cp END_KEY ; <End>
jr nz,.L200
ld a,(.Descript+2)
ld (.Coordinate),a ; первая колонка
jp KEYB.Keyb_NC
; Обработка ASCII кодов
.L200 ld a,0 ; ASCII код
cp ENTER_KEY ; <Enter>
jp nz,KEYB.Keyb_L1
.L201
.ESTR_LEN+* ld b,0 ; длина строки ввода
.ESTR_POS+* ld hl,0 ; координаты строки ввода
ld a,b
dec a
jr z,.L202
dec a
jr z,.L203
call KEYB.InputLine ; ввод адреса
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutAddress
jp c,.L201 ; ошибка в веденных данных
ld de,16 ; кол-во байт в строке
ld a,(.Coordinate+1) ; номер строки
sub 0x16 ; координата первой строки
jr z,.L522
ld b,a
.L51D
or a
sbc hl,de
djnz .L51D
.L522
ld (Dump1),hl
jp KEYB.Keyb_RF
.L202 call KEYB.InputLineEd ; ввод символа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call .L299
ld a,c
sub 18 ; первая колонка в поле данных
ld c,a
ld a,(KEYB.InputLine.Buffer)
ld de,256*18+34 ; 1-я и последняя+1 колонки
jr .L204
.L203 call KEYB.InputLineEd ; ввод кода символа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutCode
jp c,.L201 ; ошибка в веденных данных
call .L299
ld a,c
sub 2 ; первая колонка в поле данных
ld c,a
ld a,(KEYB.PutCode.Buffer) ; записываемый байт
ld de,256*2+18 ; 1-я и последняя+1 колонки
.L204 add hl,bc
call Ld_hl_a
ld a,(KEYB.InputLine.EntEnd) ; ввод закончен ENTER
or a
jp nz,KEYB.Keyb_RF ; да
ld hl,.Coordinate ; текущие координаты курсора
inc (hl)
ld a,e ; первая колонка данных
cp (hl)
jr nz,.L205
ld a,d
ld (hl),a ; в начало строки кода
inc hl
ld a,0x1D ; последняя строка дампа
cp (hl)
jr nz,.L205M1
ld hl,(Dump1) ; сдвинуть дамп
ld bc,16
add hl,bc
ld (Dump1),hl
jr .L205
.L205M1
inc (hl)
.L205 call CursorRes ; выкл курсор
call Refresh ; обновление экрана
call KEYB.Cursor ; вкл курсор
call CursorSet
jp .L201
.L299 ld de,16 ; кол-во байт в строке
ld hl,(Dump1) ; адрес в первой строке
ld bc,(.Coordinate)
ld a,b
sub 0x16 ; координата первой строки
ld b,a
ret z
.LA59C
add hl,de
djnz .LA59C
ret
.Coordinate DW 0x1601 ; курсор (стр/кол курсора)
.Descript:
DW 0x161D ; первая/последняя строка окна
DB 33 ; кол-во колонок
DB 0x0E ; N столбца колонки
DB 5 ; ширина колонки
DB 0x15,2,0x17,2
DB 0x1A,2,0x1C,2
DB 0x1F,2,0x21,2
DB 0x24,2,0x26,2
DB 0x29,2,0x2B,2
DB 0x2E,2,0x30,2
DB 0x33,2,0x35,2
DB 0x38,2,0x3A,2
DB 0x3E,1,0x3F,1,0x40,1,0x41,1
DB 0x42,1,0x43,1,0x44,1,0x45,1
DB 0x46,1,0x47,1,0x48,1,0x49,1
DB 0x4A,1,0x4B,1,0x4C,1,0x4D,1
ENDMODULE

1297
keyb.asm Normal file

File diff suppressed because it is too large Load Diff

477
kreg.asm Normal file
View File

@ -0,0 +1,477 @@
;[]=========================================================================[]
;[] Обработка клавиатуры в окне регистров []
;[] v0.03 - последние изменения 11.03.2006 []
;[] v0.10 - последние изменения 14.05.2006 []
;[]=========================================================================[]
MODULE KREG
KReg
; ld a,b ;состояние <Shift><Alt><Ctrl>
; and 0b11110000
; jr z,.L100
; Обработка комбинации Shift + символ
; and 0b11000000 ;<Shift>
; or a
; jp z,KEYB.Keyb.Keyb_L1
; ld a,d
; cp 0x80+0x0F ;Shift+Tab
; jp nz,KEYB.Keyb.Keyb_L1
; ld a,2 ;номер окна дампа
; ld (Keyb.WinScreen),a
; jp Keyb_NC
; Обработка позиционного кода
.L100 ld a,e ; ASCII код
ld (.ASC_COD),a
ld a,d ; позиционный код
cp RIGHT_KEY ; <Right>
jr nz,.L101
call .DescCalc
ld a,(hl) ; кол-во колонок
cp e
ld a,e
jr nz,.L9FC0
xor a
.L9FC0
inc a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L101 cp LEFT_KEY ; <Left>
jr nz,.L102
call .DescCalc
ld a,e ; текущая колонка
cp 1
jr nz,.L9FD5
ld a,(hl) ; кол-во колонок
inc a
.L9FD5
dec a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L102 ld hl,(.Descript)
ld de,(.Coordinate)
cp DN_KEY ; <Down>
jr nz,.L103
ld a,d ; текущая строка
cp l
jr nz,.L104
ld a,h ; 1-я строка
dec a
.L104 inc a
jr .L107P1
.L103 cp UP_KEY ; <Up>
jr nz,.L105
ld a,d ; текущая строка
cp h
jr nz,.L107
ld a,l ; адрес последней строки
inc a
.L107 dec a
.L107P1 ld h,a
ld l,1
ld (.Coordinate),hl
jp KEYB.Keyb_NC
.L105 ld b,3
cp PGDN_KEY ; <PgDown>
jr nz,.L108
ld hl,.PgDown
ld a,d ; текущая строка
.LA00E
cp (hl)
jr c,.LA014
inc hl
djnz .LA00E
.LA014
ld a,(hl)
jr .L107+1
.L108 cp PGUP_KEY ; <PgUp>
jr nz,.L110
ld hl,.PgUp
ld a,d ; текущая строка
.LA01F
cp (hl)
jr nc,.LA025
inc hl
djnz .LA01F
.LA025
ld a,(hl)
dec a
jr .L107P1
.L110 cp HOME_KEY ; <Home>
jr nz,.L111
ld a,1
ld (.Coordinate),a ; первая колонка
jp KEYB.Keyb_NC
.L111 cp END_KEY ; <End>
jr nz,.L200
call .DescCalc
ld a,(hl) ; последняя колонка
ld (.Coordinate),a ; первая колонка
jp KEYB.Keyb_NC
;.L112 cp 0x0F ; <Tab>
; jr nz,.L200
; ld a,4 ; номер окна листинга
; ld (Keyb.WinScreen),a
; jp Keyb_NC
; Обработка ASCII кодов
.L200
.ASC_COD+* ld a,0 ; ASCII код
cp ENTER_KEY ; <Enter>
jp nz,KEYB.Keyb_L1
.L201
.ESTR_LEN+* ld b,0 ; длина строки ввода
.ESTR_POS+* ld hl,0 ; координаты строки ввода
ld a,b
dec a
jp nz,.L205
ld de,(.Coordinate)
ld a,d ; номер строки
ld c,e ; номер колонки
ex de,hl ; координаты
ld hl,Reg._AF+1 ; рег A
cp 6 ; строка с парой AF?
jr z,.L207
ld hl,Reg._AF_+1 ; рег A'
cp 11 ; строка с парой AF'?
jr z,.L207
ld hl,Reg._AF ; рег F
cp 7 ; строка с парой AF?
jr z,.LA077
ld hl,Reg._AF_ ; рег F'
cp 12 ; строка с парой AF'?
jr nz,.L206
.LA077
ld a,c ; коррекция номеров бит
cp 4 ; колонка 4..6?
jr c,.LA07F
inc c
jr .L207-4
.LA07F
cp 3 ; колонка 3?
jr z,.L207-4
dec c
ld a,7
jr .L208
.L207 ld a,10 ; колонки с битами
cp c
jr z,.L206
dec a
.L208 sub c ; номер бита
rlca
rlca
rlca ; заготовка для битовых операций
ld b,a
or 01000110b ; для BIT
ld (.BIT_TST),a
ld a,b
or 11000110b ; для SET
ld (.BIT_SET),a
ld a,b
or 10000110b ; для RES
ld (.BIT_RST),a
.BIT_TST+1 bit 0,(hl) ; состояние бита
jr nz,.LA0AD
.BIT_SET+1 set 0,(hl) ; установка бита
jp KEYB.Keyb_RF
.LA0AD
.BIT_RST+1 res 0,(hl) ; сброс бита
jp KEYB.Keyb_RF
.L206 ex de,hl ; координаты
call KEYB.InputLine ; ввод символа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
ld de,.L204-5
push de
ld de,(.Coordinate)
ld hl,Reg._AF+1
ld a,d
ld de,0
cp 6 ; строка с парой AF
ret z
ld hl,Reg._AF_+1
cp 11 ; строка с парой AF'?
ret z
ld de,(.Coordinate)
ld a,e
sub 6
ld e,a
jr .L209
.L205 dec a ; байты в минидампе
jr nz,.L202
call KEYB.InputLine ; ввод числа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutCode
jp c,.L201 ; ошибка в веденных данных
ld de,.L204
push de
ld de,(.Coordinate)
.L209 dec d
jr nz,.LA0F9
ld hl,(Reg._IX)
ret
.LA0F9
dec d
jr nz,.LA100
ld hl,(Reg._IY)
ret
.LA100
dec d
jr nz,.LA107
ld hl,(Reg._HL)
ret
.LA107
dec d
jr nz,.LA10E
ld hl,(Reg._DE)
ret
.LA10E
dec d
jr nz,.LA115
ld hl,(Reg._BC)
ret
.LA115
dec d
dec d
dec d
jr nz,.LA11E
ld hl,(Reg._HL_)
ret
.LA11E
dec d
jr nz,.LA125
ld hl,(Reg._DE_)
ret
.LA125
dec d
ld hl,(Reg._BC_)
ret
ld a,(KEYB.InputLine.Buffer)
jr .LA134
.L204 ld a,(KEYB.PutCode.Buffer) ; записываемый байт
dec e
dec e ; смещение в минидампе
.LA134
add hl,de ; адрес в памяти
call Ld_hl_a ; записали
jp KEYB.Keyb_RF
.L202 dec a ; однобайтное число (номер банки)
jr nz,.L203
call KEYB.InputLine ; ввод числа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutAddress
jp c,.L201 ; ошибка в веденных данных
ld de,KEYB.Keyb_RF
push de
ld a,l
ld de,(.Coordinate)
dec e ; колонка в строке
jr nz,.LA15A
ld (WinPage),a ; 0-е окно
ret
.LA15A
dec e
jr nz,.LA163
ld (WinPage+1),a ; 1-е окно
out (EmmWin.P1),a
ret
.LA163
dec e
jr nz,.LA16A
ld (WinPage+2),a ; 2-е окно
ret
.LA16A
ld (WinPage+3),a ; 3-е окно
out (EmmWin.P3),a
ret
.L203 dec a ; глубина стека
jr nz,.L210
xor a ; обнулить
ld (StackDown),a
jp KEYB.Keyb_RF
.L210 ;dec a ; двухбайтное число
;jp nz,KEYB.Keyb.Keyb_L1
call KEYB.InputLine ; ввод числа в рег пары
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutAddress
jp c,.L201 ; ошибка в веденных данных
ld de,KEYB.Keyb_RF
push de
ld de,(.Coordinate)
dec d
jr nz,.LA195
ld (Reg._IX),hl
ret
.LA195
dec d
jr nz,.LA19C
ld (Reg._IY),hl
ret
.LA19C
dec d
jr nz,.LA1A3
ld (Reg._HL),hl
ret
.LA1A3
dec d
jr nz,.LA1AA
ld (Reg._DE),hl
ret
.LA1AA
dec d
jr nz,.LA1B1
ld (Reg._BC),hl
ret
.LA1B1
dec d
jr nz,.LA1B8
ld (Reg._AF),hl
ret
.LA1B8
dec d
dec d
jr nz,.LA1C0
ld (Reg._HL_),hl
ret
.LA1C0
dec d
jr nz,.LA1C7
ld (Reg._DE_),hl
ret
.LA1C7
dec d
jr nz,.LA1CE
ld (Reg._BC_),hl
ret
.LA1CE
dec d
jr nz,.LA1D5
ld (Reg._AF_),hl
ret
.LA1D5
dec d
dec d
jr nz,.LA1E4
dec e
jr z,.LA1E0
ld (Reg._IR),hl
ret
.LA1E0
ld (Reg._PC),hl
ret
.LA1E4
dec e
jr z,.L211
.Rez ld bc,Rezident.End-Rezident ; длина резидента
push hl ; новое начало резидента
add hl,bc ; новый конечный адрес резидента
ld a,h
and 11000000b
ld d,a
pop hl
ld a,h
and 11000000b
cp d ; резидент пересекает окно?
jr z,.L212
ld h,d
ld l,0
dec hl ; последний адрес окна с резидентом
or a
sbc hl,bc
.L212 ld (RezAdr),hl
ret
.L211 ld (Reg._SP),hl
ret
; Расчет дескриптора строки в окне регистров
.DescCalc ld de,(.Coordinate) ; текущие координаты
ld hl,.Descript+1
ld b,d ; номер строки
.LA20E
inc hl ; дескриптор строки
inc hl
djnz .LA20E
ld a,(hl) ; номер дескриптора строки
add a,a
ld c,a
dec hl
ld b,(hl)
push bc
ld b,0
ld hl,.DTabl
add hl,bc
ld a,(hl) ; начало дескриптора
inc hl
ld h,(hl)
ld l,a
pop bc
ret
.PgDown DB 2,7,12,15
.PgUp DB 14,9,4,2
.Coordinate DW 0x0101 ; курсор (стр/кол курсора)
.Descript:
DW 0x010F ; первая/кол-во строк окна
DB 0x01,0 ; номер строки, номер дескриптора
DB 0x02,0,0x04,0
DB 0x05,0,0x06,0,0x07,1
DB 0x08,2,0x0A,0,0x0B,0
DB 0x0C,0,0x0D,1,0x0E,2
DB 0x10,3,0x12,4,0x14,5
.DTabl DW .D1,.D2,.D3,.D4,.D5,.D6
.D1 DB 9 ; кол-во колонок для пар
DB 0x04 ; N столбца колонки
DB 5 ; ширина колонки
DB 0x0A,2,0x0C,2,0x0F,2,0x11,2
DB 0x14,1,0x15,1,0x16,1,0x17,1
.D2 DB 10 ; кол-во колонок для пары AF
DB 0x04 ; N столбца колонки
DB 5 ; ширина колонки
DB 0x0B,1,0x0C,1,0x0D,1,0x0E,1
DB 0x0F,1,0x10,1,0x11,1,0x12,1
DB 0x15,1
.D3 DB 6 ; кол-во колонок для флагов
DB 0x01 ; N столбца колонки
DB 1 ; ширина колонки
DB 0x02,1,0x04,1
DB 0x06,1,0x07,1,0x08,1
.D4 DB 2 ; кол-во колонок для PC IR
DB 0x04 ; N столбца колонки
DB 5 ; ширина колонки
DB 0x0D,5
.D5 DB 4 ; кол-во колонок для банок
DB 0x02 ; N столбца колонки
DB 3 ; ширина колонки
DB 0x08,3,0x0E,3,0x14,3
.D6 DB 3 ; кол-во колонок
DB 0x04 ; N столбца колонки
DB 5 ; ширина колонки
DB 0x0A,4
DB 0x13,5
ENDMODULE

215
kstack.asm Normal file
View File

@ -0,0 +1,215 @@
;[]=========================================================================[]
;[] Обработка клавиатуры в окне дампа стека []
;[] v0.10 - последние изменения 18.03.2006 []
;[]=========================================================================[]
KStack:
ld a,b ;состояние <Shift><Alt><Ctrl>
and SHIFTS_MASK
; ld b,a
jr z,.L100
;Обработка комбинации Shift + символ
; and 11000000b ;<Shift>
; or a
; jr z,.L10
; ld a,d
;; cp 0x80+0x0F ;Shift+Tab
;; jp nz,KEYB.Keyb.Keyb_L1
;; ld a,3 ;номер окна дампа
;; ld (Keyb.WinScreen),a
; jp Keyb_NC
;Обработка комбинации Ctrl + символ
; ld a,b
cp CTRL_FLAG ; <Ctrl>
jp nz,KEYB.Keyb_L1
ld a,d ; позиционный код
cp SHIFTED_KEY+X_KEY ; <Ctrl>+<X>
jp nz,KEYB.Keyb_L1
ld hl,(StackDump)
ld bc,(.Coordinate)
ld a,b
ld b,0x16 ; x-кордината 1 строки
sub b
rlca ; *2
ld b,0
ld c,a
or a
sbc hl,bc
ld (Reg._SP),hl
ld a,-1
ld (PrintStrSP.StrSp),a
jp KEYB.Keyb_RF
; Обработка позиционного кода
.L100 ld a,e ; ASCII код
ld (.L200+1),a
ld a,d ; позиционный код
ld de,(.Coordinate) ; текущие координаты курсора
cp RIGHT_KEY ; <Right>
jr nz,.L101
ld a,(.Descript+2) ; кол-во колонок
cp e
ld a,e
jr nz,.LA2E6
xor a
.LA2E6
inc a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L101 cp LEFT_KEY ; <Left>
jr nz,.L102
ld a,e ; текущая колонка
cp 1
jr nz,.LA2FA
ld a,(.Descript+2) ; кол-во колонок
inc a
.LA2FA
dec a
ld (.Coordinate),a ; текущая колонка
jp KEYB.Keyb_NC
.L102 ld hl,(.Descript)
cp DN_KEY ; <Down>
jr nz,.L103
ld a,d ; текущая строка
cp l
jr nz,.L104
ld hl,(StackDump) ; адрес 1-ой строки
dec hl
dec hl
ld (StackDump),hl
ld hl,PrintStrSP.StrSp ; строка верш.стека
ld a,-1
cp (hl) ; в дампе?
jr z,.LA31D
dec (hl)
.LA31D
jp KEYB.Keyb_RF
.L104 inc a
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L103 cp UP_KEY ; <Up>
jr nz,.L105
ld a,d ; текущая строка
cp h
jr nz,.L107
ld hl,(StackDump) ; адрес 1-ой строки
inc hl
inc hl
ld (StackDump),hl
ld hl,PrintStrSP.StrSp ; строка верш.стека
ld a,(hl)
cp 7 ; на последней строке?
jr c,.LA342
ld a,-2
ld (hl),a ; верш.стека не попадает в дамп
.LA342
inc (hl)
jp KEYB.Keyb_RF
.L107 dec a
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L105 cp PGDN_KEY ; <PgDown>
jr nz,.L108
ld a,d ; текущая строка
cp l
jr nz,.L106
ld hl,(StackDump)
ld bc,2*7
or a
sbc hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a ; строка верш.стека
jp KEYB.Keyb_RF
.L106 ld a,l ; на последнюю строку
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L108 cp PGUP_KEY ; <PgUp>
jr nz,.L110
ld a,d ; текущая строка
cp h
jr nz,.L109
ld hl,(StackDump)
ld bc,2*7
add hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a ; строка верш.стека
jp KEYB.Keyb_RF
.L109 ld a,h ; на первую строку
ld (.Coordinate+1),a
jp KEYB.Keyb_NC
.L110 cp HOME_KEY ; <Home>
jr nz,.L200
ld a,6
ld (PrintStrSP.StrSp),a ; строка верш.стека
jp KEYB.Keyb_RF
;.L111 cp 0x0F ;<Tab>
; jr nz,.L200
; ld a,1 ; номер окна листинга
; ld (Keyb.WinScreen),a
; jp KEYB.Keyb_NC
;Обработка ASCII кодов
.L200 ld a,0 ; ASCII код
cp 0x0D ; <Enter>
jp nz,KEYB.Keyb_L1
.L201
.ESTR_LEN+* ld b,0 ; длина строки ввода
.ESTR_POS+* ld hl,0 ; координаты строки ввода
call KEYB.InputLine ; ввод числа
jp c,KEYB.Keyb_NC ; завершение ввода по <ESC>
call KEYB.PutAddress
jp c,.L201 ; ошибка в веденных данных
ld bc,(.Coordinate)
ld a,b
ld b,0x16 ; x-кордината 1 строки
sub b
ex de,hl
ld hl,(StackDump)
ld b,a ; номер строки 0..7
rlca ; *2
dec c
ld c,a
jr nz,.L202 ; переход - если данные, иначе алрес
ld a,(PrintStrSP.StrSp) ; строка верш.стека
cp b
jr z,.L203
ld b,0 ; не на вершине стека
ex de,hl ; HL - введенный адрес
add hl,bc
ld (StackDump),hl
ld a,-1
ld (PrintStrSP.StrSp),a
jr .L203+4
.L203 ld (Reg._SP),de ; адрес введен на вершине стека
jp KEYB.Keyb_RF
.L202 ld b,0 ; ввод данных
or a
sbc hl,bc
ld a,d ; запись данных в память
call Ld_hl_a
inc hl
ld a,e
call Ld_hl_a
jp KEYB.Keyb_RF
.Coordinate DW 0x1601 ;курсор (стр/кол курсора)
.Descript
DW 0x161D ;первая/последняя строка окна
DB 2 ;кол-во колонок
DB 0x01 ;N столбца колонки
DB 5 ;ширина колонки
DB 0x07,5

View File

@ -1,191 +1,206 @@
LoadBinDialog ld ix,.LoadBinWnd
call DialogWindow
ret
.LoadBinEditFN ;ld hl,.LoadBinFileName
;ld c,20
;call InputLine.ToBuffer
.L003 ld hl,#0f24
ld b,20
call InputLine1
jr c,LoadBinDialog
ld a,c
and a
jr z,.L003
ld (.filenamelen),a
push bc
ld de,.LoadBinFileName
call InputLine.FromBuffer
pop bc
ld a,20
sub c
jr z,.L001
ld b,a
ld a,32
.L002 ld (de),a
inc de
djnz .L002
.L001 jr LoadBinDialog
MODULE LOADBIN
.EditAddres ld hl,#1021
ld b,5
call InputLine1
jr c,LoadBinDialog
push bc
call PutAdres
pop bc
jr c,.EditAddres
ld (.LoadToAdr),hl
ld de,.AdresTxt
call InputLine.FromBuffer
jr LoadBinDialog
.EditLenght ld hl,#1031
ld b,5
call InputLine1
jr c,LoadBinDialog
push bc
call PutAdres
pop bc
jr c,.EditLenght
ld (.LoadLen),hl
ld de,.LenTxt
call InputLine.FromBuffer
jr LoadBinDialog
LoadBinDialog
ld ix,.LoadBinWnd
call DialogWindow
ret
.LoadBinEditFN
;ld hl,.LoadBinFileName
;ld c,20
;call InputLine.ToBuffer
.L003 ld hl,#0f24
ld b,20
call KEYB.InputLine1
jr c,LoadBinDialog
ld a,c
and a
jr z,.L003
ld (.filenamelen),a
push bc
ld de,.LoadBinFileName
call KEYB.InputLine.FromBuffer
pop bc
ld a,20
sub c
jr z,.L001
ld b,a
ld a,32
.L002 ld (de),a
inc de
djnz .L002
.L001 jr LoadBinDialog
.EditAddres
ld hl,0x1021
ld b,5
call KEYB.InputLine1
jr c,LoadBinDialog
push bc
call KEYB.PutAddress
pop bc
jr c,.EditAddres
ld (.LoadToAdr),hl
ld de,.AdresTxt
call KEYB.InputLine.FromBuffer
jr LoadBinDialog
.EditLenght
ld hl,0x1031
ld b,5
call KEYB.InputLine1
jr c,LoadBinDialog
push bc
call KEYB.PutAddress
pop bc
jr c,.EditLenght
ld (.LoadLen),hl
ld de,.LenTxt
call KEYB.InputLine.FromBuffer
jr LoadBinDialog
.LoadBIN
xor a
ld (ClockOn),a
ld c,Dss.Open
ld hl,.LoadBinFileName
push hl
ld a,(.filenamelen)
ld d,0
ld e,a
add hl,de
ld (.restadr+1),hl
ld (hl),0
pop hl
ld a,1
rst DssRst
jp c,.Err1
.restadr ld hl,0
ld (hl),32
ld (.FMid),a
ld hl,(.LoadToAdr)
ld a,1 ;àäðåñ â îáëàñòè #0000-7fff?
bit 7,h
jr z,.adr0000
inc a ;#8000-#bfff?
bit 6,h
jr z,.adr
inc a ;#c000-ffff !!!
jr .adr
.adr0000 bit 6,h
jr nz,.adr
sub a
.adr ld (.bank),a
set 6,h ;àäðåñ çàãðóçêè =>#4XXX
res 7,h
ld (.LoadFirst+4),hl
push hl
ld hl,0 ;Óçíàåì äëèíó ôàéëà
ld ix,0
ld b,2
ld c,Dss.Move_FP
rst DssRst
ld (.LoadLen),HL
ld (.LoadEnd+1),hl
pop hl
.Load00 and a
ex hl,de
ld de,#8000
sbc hl,de
ld (.LoadFirst+1),hl
ld de,(.LoadEnd+1)
and a
sbc hl,de
jr c,.LoadEnd
.LoadFirst ld de,0 ;êîëè÷åñòâî áàéò, êîòîðûå íàäî ñ÷èòàòü â ïåðâóþ áàíêó
ld hl,0 ;àäðåñ, êóäà ñêà÷àòü
.LoadNext call .Bank1
ld c,Dss.Read
ld a,(.FMid)
rst DssRst
jr c,.Err
ld hl,.bank
inc (hl)
ld hl,(.LoadEnd+1)
ld de,#4000
and a
sbc hl,de
jr c,.LoadEnd ;Îñòàëîñü ìåíüøå 16Êá
ld (.LoadEnd+1),hl
ld hl,#4000
ld de,#4000
jr .LoadNext
.LoadEnd ld de,0 ;êîëè÷åñòâî áàéò, êîòîðûå íåîáõîäèìî äî÷èòàòü
call .Bank1
ld hl,#4000
ld a,(.FMid)
ld c,Dss.Read
rst DssRst
jr c,.Err
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
xor a
ld (ClockOn),a
ld c,Dss.Open
ld hl,.LoadBinFileName
push hl
ld a,(.filenamelen)
ld d,0
ld e,a
add hl,de
ld (.restadr+1),hl
ld (hl),0
pop hl
ld a,1
rst DssRst
jp c,.Err1
ld hl,(.LoadToAdr)
ld (ListAdr),hl
ld a,(WinPage+1)
out (EmmWin.P1),a
ret
.restadr ld hl,0
ld (hl),32
ld (.FMid),a
ld hl,(.LoadToAdr)
ld a,1 ; адрес в области #0000-7fff?
bit 7,h
jr z,.adr0000
inc a ; #8000-#bfff?
bit 6,h
jr z,.adr
inc a ; #c000-ffff !!!
jr .adr
.adr0000 bit 6,h
jr nz,.adr
sub a
.adr ld (.bank),a
set 6,h ; адрес загрузки =>#4XXX
res 7,h
ld (.LoadFirst+4),hl
push hl
ld hl,0 ; Узнаем длину файла
ld ix,0
ld b,2
ld c,Dss.Move_FP
rst DssRst
ld (.LoadLen),hl
ld (.LoadEnd+1),hl
pop hl
.Load00 and a
ex hl,de
ld de,#8000
sbc hl,de
ld (.LoadFirst+1),hl
ld de,(.LoadEnd+1)
and a
sbc hl,de
jr c,.LoadEnd
.LoadFirst ld de,0 ; количество байт, которые надо считать в первую банку
ld hl,0 ; адрес, куда скачать
.LoadNext call .Bank1
ld c,Dss.Read
ld a,(.FMid)
rst DssRst
jr c,.Err
ld hl,.bank
inc (hl)
ld hl,(.LoadEnd+1)
ld de,#4000
and a
sbc hl,de
jr c,.LoadEnd ; Осталось меньше 16Кб
ld (.LoadEnd+1),hl
ld hl,#4000
ld de,#4000
jr .LoadNext
.LoadEnd ld de,0 ; количество байт, которые необходимо дочитать
call .Bank1
ld hl,#4000
ld a,(.FMid)
ld c,Dss.Read
rst DssRst
jr c,.Err
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
ld hl,(.LoadToAdr)
ld (ListAddr),hl
ld a,(WinPage+1)
out (EmmWin.P1),a
ret
.Err push af
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
pop af
.Err1 call ErDss
ld c,Dss.PChars ;âûâîä òåêñòà îøèáêè è îæèäàíèÿ any key
rst DssRst
ld c,Dss.WaitKey
rst DssRst
ret
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
pop af
.Err1
ei
call ErDss
ld c,Dss.PChars ; вывод текста ошибки и ожидания any key
rst DssRst
ld c,Dss.WaitKey
rst DssRst
ret
.Bank1 push hl
push de
ld a,(.bank)
ld l,a
ld h,0
ld de,WinPage
add hl,de
ld a,(hl)
out (EmmWin.P1),a
pop de
pop hl
ret
push de
ld a,(.bank)
ld l,a
ld h,0
ld de,WinPage
add hl,de
ld a,(hl)
out (EmmWin.P1),a
pop de
pop hl
ret
.bank db 0
.FMid db 0
.filenamelen db 0
.LoadToAdr dw #4000
.LoadLen dw #1000
.filenamelen
db 0
.LoadToAdr dw 0x4000
.LoadLen dw 0x1000
.LoadBinWnd db 2,23,13,36,6,7
db "Load BIN-file",0
db "Filename: "
.LoadBinFileName ds 20,32
db 0X0D
db "Addres: "
db "Load BIN-file",0
db "Filename: "
.LoadBinFileName
ds 20,32
db 0x0D
db "Addres: "
.AdresTxt db "#4000 Lenght: "
.LenTxt db "#1000"
db 0x16,10+23,4+13,"OK Cancel",0
db 5
db 35,15,22,2 ;Filename
dw 0,.LoadBinEditFN
db 32,16,7,2 ;Addres
dw 0,.EditAddres
db 48,16,7,2 ;Lenght
dw 0,.EditLenght
db 30,17,8,2 ;OK
dw 0,.LoadBIN
db 41,17,8,2 ;Cancel
dw 0,0
db 0x16,10+23,4+13,"OK Cancel",0
db 5
db 35,15,22,2 ; Filename
dw 0,.LoadBinEditFN
db 32,16,7,2 ; Address
dw 0,.EditAddres
db 48,16,7,2 ; Lenght
dw 0,.EditLenght
db 30,17,8,2 ; OK
dw 0,.LoadBIN
db 41,17,8,2 ; Cancel
dw 0,0
ENDMODULE

2
make.sh Executable file
View File

@ -0,0 +1,2 @@
#! /bin/bash
sjasmplus --sld=demon.sld --sym=demon.labels --raw=demon.exe --fullpath demon.asm

27
readme.md Normal file
View File

@ -0,0 +1,27 @@
# Монитор-отладчик DemoN by Alpha Studio с небольшими доработками Hard/WCG
## DemoN v.0.12
### b0004 24.07.2024 (Romych)
+ (DSS 1.70+) Добавлена поддержка загрузки EXE-файлов версии 1
+ (DSS 1.70+) Добавлена поддержка функции DSS CurDir, теперь demon.exe можно держать где-то в каталоге, прописанных в PATH и запускать отладку exe из текущего каталога.
### b0003 20.02.2011
+ По кнопке "Z" PC присваивается адрес, на котором установлен курсор.
+ Добавил диалог Load BIN-file, но еще не довел его до ума.
### b0002 19.02.2011
+ Изменил процедуры печати и прорисовки курсора для работы через DSS, т.к. на эмуляторе Demon не
полноценно работает.
+ при старте запоминаем текущий режим экрана и при выходе - восстанавливаем.
+ сохраняем в буфер инфу экрана ОСи, если экран демона находится на той же странице, при выходе - восстанавливаем
+ изменена П/П просмотра другого экрана, теперь она с учетом того, что демон и ОС могут быть на одном экране
+ изменен образ "непечатаемого" символа
+ добавил ПП прорисовки окон и обработки диалогов - на будущее
### b0001 18.02.2011
+ Переделал исходник под кроссассемблер sjasmplus.

View File

@ -1,26 +0,0 @@
Монитор-отладчик DemoN by Alpha Studio с небольшими доработками Hard/WCG
DemoN v.0.11
b0003 20.02.2011
+ По кнопке <Z> PC присваивается адрес, на котором установлен курсор.
+ Добавил диалог Load BIN-file, но еще не довел его до ума.
b0002 19.02.2011
* Изменил процедуры печати и прорисовки курсора для работы через DSS, т.к. на эмуляторе Demon не
полноценно работает.
+ при старте запоминаем текущий режим экрана и при выходе - восстанавливаем.
+ сохраняем в буфер инфу экрана ОСи, если экран демона находится на той же странице,
при выходе - восстанавливаем
* изменена П/П просмотра другого экрана, теперь она с учетом того, что демон и ОС могут быть на одном экране
* изменен образ "непечатаемого" символа
+ добавил ПП прорисовки окон и обработки диалогов - на будущее
b0001 18.02.2011
* Переделал исходник под кроссассемблер sjasmplus.

87
rez.asm Normal file
View File

@ -0,0 +1,87 @@
;[]=========================================================================[]
;[] Резидент отладчика []
;[] v0.03 - последние изменения 24.02.2006 []
;[] Принцип работы (два варианта): []
;[] 1. Резидент расположен не во втором окне памяти (0x8000...0xBFFF) []
;[] Из отладчика готовится резидент (настраиваются все адреса) и копируется []
;[] по адресу расположения, управление из отладчика передается на метку []
;[] Rezident.Start1, после чего происходит востановление банки памяти, рас- []
;[] положенной под отладчиком и выполнение отлаживаемой команды. Возврат []
;[] в резидент осуществляется на метку Rezident.RetIn1 и далее после вос- []
;[] тановления банки с отладчиком возврат в отладчик. []
;[] 2. Резидент расположен во втором окне памяти (0x8000...0xBFFF) []
;[] Поскольку в этом окне работает сам отладчик, то переход в резидент и []
;[] возврат в отладчик после трассировки команды выполняется при помощи []
;[] вспомогательной процедуры длиной 7 байт расположеной по адресу []
;[] AdrTmpBuf. После коррекции всех адресов в отладчике и сохранении акку- []
;[] мулятора отлаживаемой программы по адресу Rezident+1 и пары HL по адре- []
;[] ce Rezident+2 управление передается по адресу AdrTmpBuf, где расположен []
;[] следующий код отключающий банку с отладчиком: []
;[] ld a,НомерБанкиПодОтладчиком []
;[] out (НомерПорта2Окна),a []
;[] jp Rezident.Start []
;[] Далее резидент востанавливает 7 байт запорченых вышепреведенной проце- []
;[] дурой, а также пару HL и аккумулятор и переходит к трассировке. Возврат []
;[] происходит на метку Rezident.RetIn, где после сохранения аккумулятора и []
;[] пары HL сохраняется 7 байт памяти из адреса AdrTmpBuf и туда прописыва- []
;[] ется код востановления банки с отладчиком: []
;[] ld a,НомерБанкиСОтладчиком []
;[] out (НомерПорта2Окна),a []
;[] jp ВОтладчик []
;[] После возврата в отладчик востанавливается память запорченая резидентом []
;[] и временной процедурой []
;[]=========================================================================[]
AdrTmpBuf equ 0xFF00
Rezident:
ds 11
.Start ld hl,0 ;вост. памяти запорченной при
ld (AdrTmpBuf),hl ;размещении резидента
ld hl,0 ;во 2-м окне
ld (AdrTmpBuf+2),hl
ld hl,0
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
.K2 ld hl,(Rezident+2) ;востановили HL
jr .K3
;...востановить банку во 2-м окне
.Start1 ld a,0xFF ;банка под demon'ом
out (EmmWin.P2),a
.K3 ld a,(Rezident+1) ;востановим аккумулятор
.Step jp 0 ;переход на выполнение
.RetIn ld (Rezident+1),a ;сохраним аккумулятор
.K4 ld (Rezident+2),hl ;сохраним HL
ld hl,(AdrTmpBuf) ;сохранение памяти
.K5 ld (Rezident+4),hl
ld hl,(AdrTmpBuf+2)
ld (Rezident+6),hl
ld hl,(AdrTmpBuf+4)
ld (Rezident+8),hl
ld a,(AdrTmpBuf+6)
ld (Rezident+10),a
.BankD1 ld hl,0xFF3E ;ld a,0xFF - N банки с отладч
ld (AdrTmpBuf),hl
ld hl,EmmWin.P2*256+0xD3 ;out (EmmWin.P2),a
ld (AdrTmpBuf+2),hl
.Return1 ld hl,0xC3 ;jp в отладчик
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
in a,(EmmWin.P2) ;номер банки под demon'ом
.K6 ld (Rezident),a ;сохранили
jp AdrTmpBuf
.RetIn1 ld (Rezident+1),a ;сохраним аккумулятор
;...сохранить банку из 2-го окна
in a,(EmmWin.P2) ;номер банки под demon'ом
.K1 ld (Rezident),a ;сохранили
.BankD ld a,0xFF ;банка с demon'ом
out (EmmWin.P2),a
.Return jp 0
.End

64
savescr.asm Normal file
View File

@ -0,0 +1,64 @@
;[]=========================================================================[]
;[] Сохранение экрана в файл []
;[] v0.03 - последние изменения 11.03.2006 []
;[]=========================================================================[]
SaveScr:
ld bc,1*256+Dss.GetMem
rst DssRst ;выделение банки памяти
ret c ;выход с ошибкой
ld (.Id),a
ld bc,Dss.SetWin3
rst DssRst ;включение банки в 3-е окно
ld (.Id+1),a ;замещаемая страница
ld de,0 ;позиция на экране
ld hl,0xC000
.L1 push de
push hl
ld c,Dss.RdChar
rst DssRst ;считать символ с экрана
pop hl
pop de
ld (hl),a
inc hl
inc e
ld a,e
cp 0x50 ;закончилась строка?
jr nz,.L1
ld bc,0x0D0A ;конец строки
ld (hl),b
inc hl
ld (hl),c
inc hl
ld e,0 ;начало строки
inc d
ld a,d
cp 0x20 ;конец экрана?
jr nz,.L1
ld hl,.NameF ;имя файла
xor a ;атрибут
ld c,Dss.Create
rst DssRst
jr c,.L2 ;ошибка
push af
ld hl,0xC000 ;начало записываемой памяти
ld de,82*32 ;размер записываемой инфы
ld c,Dss.Write
rst DssRst ;записать
pop af
ld c,Dss.Close
rst DssRst ;закрыть файл
.L2 ld a,(.Id) ;id памяти
ld c,Dss.FreeMem
rst DssRst ;освободить память
ld a,(.Id+1)
out (EmmWin.P3),a ;востановили банку
ret
.NameF db "demon.$$$",0
.Id ds 2 ;id выделенного блока
;11:11 18.02.2011 Заглушка Не было исходника :(
; include "d:\workast\demon\screen\scrdemon"

44
sim/ports.js Normal file
View File

@ -0,0 +1,44 @@
port_p0 = 0;
port_p1 = 1;
port_p2 = 2;
port_p3 = 3;
message = "";
// This function is called when time (t-states) advances.
API.tick = () => {
}
// This function is called when an 'out' is executed in Z80.
API.writePort = (port, value) => {
// Go through all ports
if (port == 0x9000) {
if (value != 0) {
message += String.fromCharCode(value);
} else {
API.log("> " + message);
message = "";
}
} else if (port == 0x82) {
port_p0 = value;
} else if (port == 0xA2) {
port_p1 = value;
} else if (port == 0xC2) {
port_p2 = value;
} else if (port == 0xE2) {
port_p3 = value;
}
}
API.readPort = (port) => {
if (port == 0x82) {
return port_p0;
} else if (port == 0xA2) {
return port_p1;
} else if (port == 0xC2) {
return port_p2;
} else if (port == 0xE2) {
return port_p3;
}
}

433
step.asm Normal file
View File

@ -0,0 +1,433 @@
;[]=========================================================================[]
;[] Отладка команд программы []
;[] v0.03 - последние изменения 10.03.2006 []
;[] v0.10 - последние изменения 18.03.2006 []
;[]=========================================================================[]
MODULE STEP
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 .NPC
.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 .NPC
add hl,bc ; положительное смещение
jp .NPC
.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 .NPC
.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 .NPC
.L2 call List ; следующая команда
.NPC
ld (Reg._PC),hl ; новый PC
push hl
push hl
ld a,(KEYB.KList.Descript) ; количество строк листинга
call KEYB.AdrListTabl ; нижний адрес листинга
ld de,(ListAddr) ; верхний адрес листинга
pop bc ; новый PC
call AdrArea
jr nc,.L1+4
.L1 ld (ListAddr),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 ; длина резидента
ENDMODULE

View File

@ -1,8 +1,8 @@
;[]=========================================================================[]
;[] ’ ¡«¨æë ¤¨§ áᥬ¡«¥à  ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.10.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 29.11.2004 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 29.01.2006 []
;[] Таблицы дизассемблера монитора-отладчика DemoN []
;[] v0.01 - последние изменения 10.10.2004 []
;[] v0.02 - последние изменения 29.11.2004 []
;[] v0.03 - последние изменения 29.01.2006 []
;[]=========================================================================[]
Tabl00_3F:
dw M00,M01,M02,M03,M04,M05,M06,M07,M08,M09,M0A,M0B,M0C,M0D,M0E,M0F

View File

@ -1,36 +1,36 @@
;[]=========================================================================[]
;[] <EFBFBD>®¤¯à®£à ¬¬ë-ã⨫¨âë ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 29.08.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 20.03.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 25.02.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 17.05.2006 []
;[] Подпрограммы-утилиты монитора-отладчика DemoN []
;[] v0.01 - последние изменения 29.08.2004 []
;[] v0.02 - последние изменения 20.03.2005 []
;[] v0.03 - последние изменения 25.02.2006 []
;[] v0.10 - последние изменения 17.05.2006 []
;[] []
;[] SaveAllRegs - á®åà ­¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] RestAllRegs - ¢®áâ ­®¢«¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] PrnStrColor - ¯¥ç âì áâப¨ ᨬ¢®«®¢ á  âਡãâ ¬¨ []
;[] PrintReg - ¯¥ç âì ¤¢ãå¡ ©â®¢®£® ç¨á«  []
;[] PrintStrAF - ¯¥ç âì §­ ç¥­¨ï ॣ¨áâ஢®© ¯ àë AF ¨ ä« £®¢ []
;[] PrintStrReg - ¯¥ç âì §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à á  ¤à¥á㥬묨 ¡ ©â ¬¨ []
;[] PrintStrWin - ¯¥ç âì ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å []
;[] PrintSPDn - ¯¥ç âì £«ã¡¨­ë á⥪  []
;[] PrintStrSp - ¯¥ç âì §­ ç¥­¨© á⥪  []
;[] PrintDump - ¯¥ç âì ¤ ¬¯  []
;[] PrintStrDump - ¯¥ç âì áâப¨ ¤ ¬¯  []
;[] ReplSymNoPrint - § ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢ ¢ áâப¥ []
;[] NumToStr16 - ä®à¬¨à®¢ ­¨¥ 16-â¨à¨ç­®£® ç¨á«  []
;[] NumToStr8 - ä®à¬¨à®¢ ­¨¥ 8-à¨ç­®£® ç¨á«  []
;[] ConvHexStr - ª®­¢¥àâ¨à®¢ ­¨¥ ç¨á«  ¢ HEX-áâபã []
;[] ConvDecStr - ª®­¢¥àâ¨à®¢ ­¨¥ 16-¡¨â­®£® ç¨á«  ¢ DEC-áâபã []
;[] CursorSet - ¯à®à¨á®¢ª  ªãàá®à  []
;[] CursorRes - ¢®áâ ­®¢«¥­¨¥ íªà ­  ¯®¤ ªãàá®à®¬ []
;[] Ld_a_bc - ç⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ BC []
;[] Ld_a_hl - ç⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ HL []
;[] Ld_hl_a - § ¯¨áì ¡ ©â  ¢ ¯ ¬ïâì á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ HL []
;[] AdrArea - ®¯à¥¤¥«¥­¨¥ ¯à¨­ ¤«¥¦­®á⨠ ¤à¥á  ®¡« á⨠¯ ¬ï⨠[]
;[] SaveAllRegs - сохранение значений регистровых пар []
;[] RestAllRegs - востановление значений регистровых пар []
;[] PrnStrColor - печать строки символов с атрибутами []
;[] PrintReg - печать двухбайтового числа []
;[] PrintStrAF - печать значения регистровой пары AF и флагов []
;[] PrintStrReg - печать значений регистровых пар с адресуемыми байтами []
;[] PrintStrWin - печать номеров банок в окнах []
;[] PrintSPDn - печать глубины стека []
;[] PrintStrSp - печать значений стека []
;[] PrintDump - печать дампа []
;[] PrintStrDump - печать строки дампа []
;[] ReplSymNoPrint - замена непечатных символов в строке []
;[] NumToStr16 - формирование 16-тиричного числа []
;[] NumToStr8 - формирование 8-ричного числа []
;[] ConvHexStr - конвертирование числа в HEX-строку []
;[] ConvDecStr - конвертирование 16-битного числа в DEC-строку []
;[] CursorSet - прорисовка курсора []
;[] CursorRes - востановление экрана под курсором []
;[] Ld_a_bc - чтение байта из памяти с проверкой адреса, адрес в BC []
;[] Ld_a_hl - чтение байта из памяти с проверкой адреса, адрес в HL []
;[] Ld_hl_a - запись байта в память с проверкой адреса, адрес в HL []
;[] AdrArea - определение принадлежности адреса области памяти []
;[]=========================================================================[]
;[]=========================================================================[]
;[] ‘®åà ­¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] Сохранение значений регистровых пар []
;[]=========================================================================[]
SaveAllRegs:
ld (Reg._HL),hl
@ -59,22 +59,22 @@ SaveAllRegs:
ex af,af'
exx
ld hl,WinPage ;á®åà ­¥­¨¥ ­®¬¥à®¢ áâà ­¨æ
in a,(EmmWin.P0) ;0-¥ ®ª­®
ld hl,WinPage ;сохранение номеров страниц
in a,(EmmWin.P0) ;0-е окно
ld (hl),a
inc hl
in a,(EmmWin.P1) ;1-¥ ®ª­®
in a,(EmmWin.P1) ;1-е окно
ld (hl),a
inc hl
in a,(EmmWin.P2) ;2-¥ ®ª­®
in a,(EmmWin.P2) ;2-е окно
ld (hl),a
inc hl
in a,(EmmWin.P3) ;3-¥ ®ª­®
in a,(EmmWin.P3) ;3-е окно
ld (hl),a
ret
;[]=========================================================================[]
;[] ‚®áâ ­®¢«¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] Востановление значений регистровых пар []
;[]=========================================================================[]
RestAllRegs:
ld a,(Reg._IR)
@ -104,25 +104,25 @@ RestAllRegs:
ret
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì áâப¨ ᨬ¢®«®¢ []
;[] ‚室: HL -  ¤à¥á áâப¨ ᨬ¢®«®¢ []
;[] Печать строки символов []
;[] Вход: HL - адрес строки символов []
;[] []
;[] ”®à¬ â áâப¨: 0x16, ‘⮫¡¥æ, ‘âப , ‘¨¬¢®«ë, 0x00 []
;[] Формат строки: 0x16, Столбец, Строка, Символы, 0x00 []
;[]=========================================================================[]
ld a,(Color.Screen) ;®á­®¢­®© 梥â
ld a,(Color.Screen) ;основной цвет
ld (PrnStrColor.L1+5),a
PrnStrColor:
ld a,(hl)
cp 0x16 ;ª®¤ ãáâ ­®¢ª¨ ¯®§¨æ¨¨ ªãàá®à 
cp 0x16 ;код установки позиции курсора
jr nz,.L2
inc hl
ld e,(hl) ;á⮫¡¥æ
ld e,(hl) ;столбец
ld a,e
ld (PrtXCoord),a
inc hl
ld d,(hl) ;áâப 
ld d,(hl) ;строка
inc hl
ld a,(hl) ;ᨬ¢®«
ld a,(hl) ;символ
.L2 cp 0x0D
jr nz,.L3
inc d
@ -137,14 +137,14 @@ PrnStrColor:
inc hl
ld a,(hl)
.L1 or a
ret z ;¢ë室 ¥á«¨ ª®­¥æ áâப¨
ret z ;выход если конец строки
push hl
push de
;¯¥ç âì ç/§ ¡¨®á ¨«¨ ¤áá?
;печать ч/з биос или дсс?
ifdef D_PRINTCH_BIOS
ld h,0x03 ; âਡãâ
ld h,0x03 ;атрибут
ld l,a
sub a ;¨¤¥­â¨ä¨ª â®à ®ª­ 
sub a ;идентификатор окна
; ld a,(Demon.Bios_Win)
ld bc,SysSymb*256+Bios.Win_Put_Sym
rst BiosRst
@ -160,18 +160,18 @@ PrnStrColor:
jr PrnStrColor
PrtXCoord db 0
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì ¤¢ãå¡ ©â®¢®£® ç¨á«  []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[] Печать двухбайтового числа []
;[] Вход: DE - координаты печати []
;[] HL - значение регистровой пары []
;[]=========================================================================[]
PrintReg:
di
push hl
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
ld c,Bios.Lp_Set_Place ;установка позиции печати
rst BiosRst
pop hl
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
ld a,(DecHex) ;систем счисления
or a
jr z,.Hex
@ -184,12 +184,12 @@ PrintReg:
ld c,l
ld a,h
call ConvHexStr
ld (.String+1),hl ;áâ à訩 ¡ ©â
ld (.String+1),hl ;старший байт
ld a,c
call ConvHexStr
ld (.String+3),hl ;¬« ¤è¨© ¡ ©â
.Print ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,5*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld (.String+3),hl ;младший байт
.Print ld hl,.String ;печатаемая строка
ld bc,5*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
rst BiosRst
ei
ret
@ -197,16 +197,16 @@ PrintReg:
.String db "#0123"
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì §­ ç¥­¨ï ॣ¨áâ஢®© ¯ àë AF ¨ ä« £®¢ []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[] Печать значения регистровой пары AF и флагов []
;[] Вход: DE - координаты печати []
;[] HL - значение регистровой пары []
;[]=========================================================================[]
PrintStrAF:
ld a,h ;§­ ç¥­¨¥ ॣ¨áâà  A
ld a,h ;значение регистра A
push hl
ld (.String+11),a
ld hl,.String+1 ;¤¢®¨ç­®¥ §­ ç¥­¨¥
ld hl,.String+1 ;двоичное значение
push de
ld de,0x3031 ;"01"
ld b,8
@ -225,23 +225,23 @@ PrintStrAF:
call ReplSymNoPrint
pop hl
ld a,l ;ä« £¨
ld a,l ;флаги
push hl
ld hl,.Flags
ld b,8
res 3,a ;á¡à®á ­¥¨§¢¥áâ­ëå ä« £®¢
res 3,a ;сброс неизвестных флагов
res 5,a
.L2 rlca
jr c,$+6
set 5,(hl) ;á¡à®è¥­
set 5,(hl) ;сброшен
jr $+4
res 5,(hl) ;ãáâ ­®¢«¥­
res 5,(hl) ;установлен
inc hl
djnz .L2
pop hl
push de
call PrintReg ;¯¥ç âì §­ ç¥­¨ï ॣ.¯ àë
call PrintReg ;печать значения рег.пары
pop de
push de
ld a,6
@ -251,7 +251,7 @@ PrintStrAF:
di
rst BiosRst
ld hl,.String
ld bc,13*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld bc,13*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
di
rst BiosRst
pop de
@ -263,7 +263,7 @@ PrintStrAF:
di
rst BiosRst
ld hl,.Flags
ld bc,8*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld bc,8*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
di
rst BiosRst
ei
@ -273,16 +273,16 @@ PrintStrAF:
.Flags db "SZ.H.PNC"
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à á  ¤à¥á㥬묨 ¡ ©â ¬¨ []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[] Печать значений регистровых пар с адресуемыми байтами []
;[] Вход: DE - координаты печати []
;[] HL - значение регистровой пары []
;[]=========================================================================[]
PrintStrReg:
push hl
ld b,h
ld c,l
call Ld_a_bc ;ld a,(bc)  ¤à¥áã¥¬ë¥ ¡ ©âë
call Ld_a_bc ;ld a,(bc) адресуемые байты
ld (.String+10),a
call ConvHexStr
ld (.String),hl
@ -302,22 +302,22 @@ PrintStrReg:
call ConvHexStr
ld (.String+7),hl
ld hl,.String+10 ;§ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢
ld hl,.String+10 ;замена непечатных символов
ld b,4
call ReplSymNoPrint
pop hl
push de
call PrintReg ;¯¥ç âì §­ ç¥­¨ï ॣ.¯ àë
call PrintReg ;печать значения рег.пары
pop de
di
ld a,6
add a,e
ld e,a
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
ld c,Bios.Lp_Set_Place ;установка позиции печати
rst BiosRst
ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,14*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld hl,.String ;печатаемая строка
ld bc,14*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
rst BiosRst
ei
ret
@ -325,11 +325,11 @@ PrintStrReg:
.String db "0123 4567 ABCD"
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å []
;[] ‚室: HL -  ¤à¥á á®åà ­¥­­ëå ­®¬¥à®¢ []
;[] Печать номеров банок в окнах []
;[] Вход: HL - адрес сохраненных номеров []
;[]=========================================================================[]
PrintStrWin:
ld hl,WinPage ;¢ë¢®¤ ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å
ld hl,WinPage ;вывод номеров банок в окнах
ld de,.String+3
ld b,4
.L1 push bc
@ -338,7 +338,7 @@ PrintStrWin:
push hl
ld l,a
ld h,0
call NumToStr8 ;ª®­¢¥àâ¨à®¢ ­¨¥ ¢ HEX-áâபã
call NumToStr8 ;конвертирование в HEX-строку
inc de
inc de
inc de
@ -355,15 +355,15 @@ PrintStrWin:
db 0x16,0x14,0x12,"#04",0
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì £«ã¡¨­ë á⥪  []
;[] Печать глубины стека []
;[]=========================================================================[]
PrintSPDn:
ld a,(StackDown)
ld l,a
ld a,0x7F
cp l ;®âà¨æ â¥«ì­®¥?
cp l ;отрицательное?
jr nc,.L1
res 7,l ;á¡à®á¨âì ¬¨­ãá
res 7,l ;сбросить минус
inc a
sub l
ld l,a
@ -375,7 +375,7 @@ PrintSPDn:
dec hl
ld bc,3*256+"0"
ld (hl),c
ld a,(hl) ;£ è¥­¨¥ ­¥§­ ç é¨å ­ã«¥©
ld a,(hl) ;гашение незначащих нулей
cp c
jr nz,$+8
ld a,0x20
@ -385,16 +385,16 @@ PrintSPDn:
ld a,(StackDown)
bit 7,a
jr z,$+6
dec hl ;®âà¨æ â¥«ì­®¥ ç¨á«®
dec hl ;отрицательное число
ld a,"-"
ld (hl),a
ld de,0x140A
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
ld c,Bios.Lp_Set_Place ;установка позиции печати
di
rst BiosRst
ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,4*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld hl,.String ;печатаемая строка
ld bc,4*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
di
rst BiosRst
ei
@ -403,12 +403,12 @@ PrintSPDn:
.String ds 4
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì §­ ç¥­¨© á⥪  []
;[] Печать значений стека []
;[]=========================================================================[]
PrintStrSP:
ld a,(.StrSp) ;áâப  á ¢¥à設®© á⥪ 
ld a,(.StrSp) ;строка с вершиной стека
inc a
jr z,.L4 ;¥á«¨ ¢¥à設  á⥪  ­¥ ¯®¯ ¤ ¥â ¢ ¤ ¬¯
jr z,.L4 ;если вершина стека не попадает в дамп
ld hl,(Reg._SP)
dec hl
dec hl
@ -418,39 +418,39 @@ PrintStrSP:
jr nz,$-3
ld (StackDump),hl
.L4 ld hl,(StackDump) ;­ ç «® ¤ ¬¯ 
ld de,#1601 ;ª®®à¤¨­ âë ¯¥ç â¨
.L4 ld hl,(StackDump) ;начало дампа
ld de,#1601 ;координаты печати
ld a,-1
ld (.StrSp),a
ld b,8 ;ª®«-¢® áâப ¤ ¬¯ 
ld b,8 ;кол-во строк дампа
.L3 push bc
push de ;ª®®à¤¨­ âë
push de ;координаты
push hl
or a ;á¡à®á ä« £  C
or a ;сброс флага C
ld a,b
ld bc,(Reg._SP) ; ¤à¥á ¢¥à設ë á⥪ 
ld bc,(Reg._SP) ;адрес вершины стека
sbc hl,bc
jr nz,.L2
ld b,a
ld a,8
sub b
ld (.StrSp),a ;­®¬¥à áâப¨ ¢ ¤ ¬¯¥ á ¢¥à設®© á⥪ 
ld a,(Color._SP) ;梥⠢¥à設ë á⥪ 
ld (.StrSp),a ;номер строки в дампе с вершиной стека
ld a,(Color._SP) ;цвет вершины стека
jr .L2+3
.L2 ld a,(Color.Screen) ;®á­®¢­®© 梥â
ld (.L1+1),a ;§ ¯¨á «¨ 梥â
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
.L2 ld a,(Color.Screen) ;основной цвет
ld (.L1+1),a ;записали цвет
ld c,Bios.Lp_Set_Place ;установка позиции печати
di
rst BiosRst
.L1 ld e,0 ;梥⠯®¤á¢¥âª¨
ld bc,11*256+Bios.Lp_Print_Atr ;¢ ॣ.B ¤«¨­  áâப¨
.L1 ld e,0 ;цвет подсветки
ld bc,11*256+Bios.Lp_Print_Atr ;в рег.B длина строки
rst BiosRst
pop hl
pop de
push de
push hl
call PrintReg ;¯¥ç âì  ¤à¥á 
call PrintReg ;печать адреса
pop hl
pop de
push de
@ -470,7 +470,7 @@ PrintStrSP:
ld l,a
ld h,c
call PrintReg ;¯¥ç âì §­ ç¥­¨ï á⥪ 
call PrintReg ;печать значения стека
pop hl
pop de
inc d
@ -482,12 +482,12 @@ PrintStrSP:
.StrSp db 6
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì ¤ ¬¯  []
;[] Печать дампа []
;[]=========================================================================[]
PrintDump:
ld de,0x160E ;ª®®à¤¨­ âë
ld de,0x160E ;координаты
ld hl,(Dump1)
ld b,8 ;ª®«¨ç¥á⢮ áâப
ld b,8 ;количество строк
push de
push bc
push hl
@ -497,33 +497,33 @@ PrintDump:
add hl,bc
pop bc
pop de
inc d ;á«¥¤ãîé ï áâப 
inc d ;следующая строка
djnz $-14
ret
ld hl,Dump ;¢ë¢®¤ ¤ ¬¯ 
; ld de,0x160E ;ª®®à¤¨­ âë
ld b,8 ;ª®«¨ç¥á⢮ áâப
ld hl,Dump ;вывод дампа
; ld de,0x160E ;координаты
ld b,8 ;количество строк
push de
push bc
ld c,(hl) ;¬« ¤è¨© ¡ ©â  ¤à¥á 
ld c,(hl) ;младший байт адреса
inc hl
push hl
ld h,(hl) ;áâ à訩 ¡ ©â  ¤à¥á 
ld h,(hl) ;старший байт адреса
ld l,c
call PrintStrDump
pop hl
inc hl
pop bc
pop de
inc d ;á«¥¤ãîé ï áâப 
inc d ;следующая строка
djnz $-15
ret
;[]=========================================================================[]
;[] <EFBFBD>¥ç âì áâப¨ ¤ ¬¯  []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL -  ¤à¥á ­ ç «  áâப¨ []
;[] Печать строки дампа []
;[] Вход: DE - координаты печати []
;[] HL - адрес начала строки []
;[]=========================================================================[]
PrintStrDump:
push de
@ -566,21 +566,21 @@ PrintStrDump:
ld b,16
pop hl
call ReplSymNoPrint ;§ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢
call ReplSymNoPrint ;замена непечатных символов
pop hl
pop de
push de
call PrintReg ;¯¥ç âì  ¤à¥á  áâப¨
call PrintReg ;печать адреса строки
pop de
di
ld a,7
add a,e
ld e,a
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
ld c,Bios.Lp_Set_Place ;установка позиции печати
rst BiosRst
ld hl,.String
ld bc,57*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
ld bc,57*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки
rst BiosRst
ei
ret
@ -589,9 +589,9 @@ PrintStrDump:
db "0123456789ABCDEF"
;[]=========================================================================[]
;[] ‡ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢ ¢ áâப¥ []
;[] ‚室: B - ¤«¨­  áâப¨ []
;[] HL -  ¤à¥á ­ ç «  áâப¨ []
;[] Замена непечатных символов в строке []
;[] Вход: B - длина строки []
;[] HL - адрес начала строки []
;[]=========================================================================[]
ReplSymNoPrint:
ld a,(SymbolNoPrint)
@ -609,12 +609,12 @@ ReplSymNoPrint:
ret
;[]=========================================================================[]
;[] ”®à¬¨à®¢ ­¨¥ 16-⨡¨â­®£® ç¨á«  []
;[] ‚室: DE -  ¤à¥á ¡ãä¥à  []
;[] HL - ç¨á«® []
;[] Формирование 16-тибитного числа []
;[] Вход: DE - адрес буфера []
;[] HL - число []
;[]=========================================================================[]
NumToStr16:
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
ld a,(DecHex) ;систем счисления
or a
jp nz,ConvDecStr
@ -625,7 +625,7 @@ NumToStr16:
ld a,h
call ConvHexStr
ex de,hl
ld (hl),e ;áâ à訩 ¡ ©â
ld (hl),e ;старший байт
inc hl
ld (hl),d
inc hl
@ -633,7 +633,7 @@ NumToStr16:
ld a,c
call ConvHexStr
ex de,hl
ld (hl),e ;¬« ¤è¨© ¡ ©â
ld (hl),e ;младший байт
inc hl
ld (hl),d
inc hl
@ -641,12 +641,12 @@ NumToStr16:
ret
;[]=========================================================================[]
;[] ”®à¬¨à®¢ ­¨¥ 8-¡¨â­®£® ç¨á«  []
;[] ‚室: DE -  ¤à¥á ¡ãä¥à  []
;[] HL - ç¨á«® []
;[] Формирование 8-битного числа []
;[] Вход: DE - адрес буфера []
;[] HL - число []
;[]=========================================================================[]
NumToStr8:
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
ld a,(DecHex) ;систем счисления
or a
jp nz,ConvDecStr8
@ -664,9 +664,9 @@ NumToStr8:
ret
;[]=========================================================================[]
;[] Š®­¢¥àâ¨à®¢ ­¨¥ ç¨á«  ¢ HEX-áâபã []
;[] ‚室: A - ç¨á«® []
;[] ‚ë室: HL - HEX-áâப  []
;[] Конвертирование числа в HEX-строку []
;[] Вход: A - число []
;[] Выход: HL - HEX-строка []
;[]=========================================================================[]
ConvHexStr:
push af
@ -691,9 +691,9 @@ ConvHexStr:
ret
;[]=========================================================================[]
;[] Š®­¢¥àâ¨à®¢ ­¨¥ 16-¡¨â­®£® ç¨á«  ¢ DEC-áâபã []
;[] ‚室: HL - ç¨á«® []
;[] DE -  ¤à¥á ­ ç «  DEC-áâப¨ []
;[] Конвертирование 16-битного числа в DEC-строку []
;[] Вход: HL - число []
;[] DE - адрес начала DEC-строки []
;[]=========================================================================[]
ConvDecStr:
ld bc,-10000
@ -744,15 +744,15 @@ ConvDecStr8_1:
ret
;[]=========================================================================[]
;[] <EFBFBD>à®à¨á®¢ª  ªãàá®à  []
;[] ‚室: B - ¤«¨­  ªãàá®à  []
;[] HL - ª®®à¤¨­ âë ªãàá®à  []
;[] Прорисовка курсора []
;[] Вход: B - длина курсора []
;[] HL - координаты курсора []
;[]=========================================================================[]
CursorSet:
ld (CursorRes+1),hl
ex de,hl
ld l,b ;à §¬¥à ¯® ¢¥à⨪ «¨
ld h,1 ;à §¬¥à ¯® £®à¨§®­â «¨
ld l,b ;размер по вертикали
ld h,1 ;размер по горизонтали
ld (CursorRes+4),hl
ld ix,.Buffer
push de
@ -761,7 +761,7 @@ CursorSet:
push bc
ifdef D_PRINTCH_BIOS
xor a
ld c,Bios.Win_Copy_Win ;ª®¯¨à®¢ ­¨¥ ¢ ¡ãä¥à
ld c,Bios.Win_Copy_Win ;копирование в буфер
di
rst BiosRst
ei
@ -772,15 +772,15 @@ CursorSet:
rst DssRst
endif
pop bc ;¢ B ¤«¨­  ªãàá®à 
pop bc ;в B длина курсора
pop hl
push hl
inc hl
ld a,(hl) ;梥â ᨬ¢®«®¢
ld a,(hl) ;цвет символов
ld (CursorRes.L1+1),a
ld a,(Color.Cursor)
.L1 ld (hl),a
inc hl ;ª ¡ ©âã 梥â 
inc hl ;к байту цвета
inc hl
djnz .L1
@ -789,7 +789,7 @@ CursorSet:
pop de
ifdef D_PRINTCH_BIOS
xor a
ld c,Bios.Win_Restore_Win ;¢ë¢®¤ ªãàá®à  ­  íªà ­
ld c,Bios.Win_Restore_Win ;вывод курсора на экран
di
rst BiosRst
ei
@ -801,115 +801,115 @@ CursorSet:
endif
ret
.Buffer ds 22*2 ;max ¤«¨­  ªãàá®à 
.Buffer ds 22*2 ;max длина курсора
;[]=========================================================================[]
;[] ‚®áâ ­®¢«¥­¨¥ íªà ­  ¯®¤ ªãàá®à®¬ []
;[] Востановление экрана под курсором []
;[]=========================================================================[]
CursorRes:
ld de,0 ;ª®®à¤¨­ âë
ld hl,0 ;à §¬¥à
ld b,l ;¤«¨­ 
ld de,0 ;координаты
ld hl,0 ;размер
ld b,l ;длина
push de
push hl
ld hl,CursorSet.Buffer
push hl
.L1 ld a,0 ;梥â
inc hl ;ª ¡ ©âã 梥â 
.L1 ld a,0 ;цвет
inc hl ;к байту цвета
jr CursorSet.L1
;[]=========================================================================[]
;[] —⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á  []
;[] ‚室: BC ¨«¨ HL -  ¤à¥á ¢ ¯ ¬ï⨠[]
;[] ‚ë室: A - áç¨â ­­ë© ¡ ©â []
;[] Чтение байта из памяти с проверкой адреса []
;[] Вход: BC или HL - адрес в памяти []
;[] Выход: A - считанный байт []
;[]=========================================================================[]
Ld_a_bc:
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
ld a,11000000b ;проверка диапазона
and b
jr z,.L1 ;¢ 0-¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥
jr z,.L1 ;в 0-м окне
cp 10000000b ;во 2-ом окне
ld a,(bc)
ret nz ;¢®§¢à é ¥¬ ¡ ©â, ¥á«¨ ­¥â
ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,b ;ª®à४â¨à㥬  ¤à¥á
ld a,(bc) ;ç¨â ¥¬ ¡ ©â
res 6,b ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
ret nz ;возвращаем байт, если нет
ld a,(WinPage+2) ;номер банки под отладчиком
out (EmmWin.P3),a ;в третье окно ее
set 6,b ;корректируем адрес
ld a,(bc) ;читаем байт
res 6,b ;востанавливаем адрес
jr Ld_a_hl.L1
.L1 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,b ;ª®à४â¨à㥬  ¤à¥á
.L1 ld a,(WinPage) ;номер банки в 0-м
out (EmmWin.P3),a ;в третье окно ее
set 6,b ;корректируем адрес
set 7,b
ld a,(bc) ;ç¨â ¥¬ ¡ ©â
res 6,b ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
ld a,(bc) ;читаем байт
res 6,b ;востанавливаем адрес
res 7,b
jr Ld_a_hl.L1
Ld_a_hl:
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
ld a,11000000b ;проверка диапазона
and h
jr z,.L2 ;¢ 0-¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥
jr z,.L2 ;в 0-м окне
cp 10000000b ;во 2-ом окне
ld a,(hl)
ret nz ;¢®§¢à é ¥¬ ¡ ©â, ¥á«¨ ­¥â
ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
ld a,(hl) ;ç¨â ¥¬ ¡ ©â
res 6,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
ret nz ;возвращаем байт, если нет
ld a,(WinPage+2) ;номер банки под отладчиком
out (EmmWin.P3),a ;в третье окно ее
set 6,h ;корректируем адрес
ld a,(hl) ;читаем байт
res 6,h ;востанавливаем адрес
jr .L1
.L2 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-¬ ®ª­¥
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
.L2 ld a,(WinPage) ;номер банки в 0-м окне
out (EmmWin.P3),a ;в третье окно ее
set 6,h ;корректируем адрес
set 7,h
ld a,(hl) ;ç¨â ¥¬ ¡ ©â
res 6,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
ld a,(hl) ;читаем байт
res 6,h ;востанавливаем адрес
res 7,h
.L1 push af
ld a,(WinPage+3) ;­®¬¥à ¡ ­ª¨ ¨§ 3-£® ®ª­ 
out (EmmWin.P3),a ;¢®áâ ­ ¢«¨¢ ¥¬
ld a,(WinPage+3) ;номер банки из 3-го окна
out (EmmWin.P3),a ;востанавливаем
pop af
ret
;[]=========================================================================[]
;[] ‡ ¯¨áì ¡ ©â  ¢ ¯ ¬ïâì á ¯à®¢¥àª®©  ¤à¥á  []
;[] ‚室: HL -  ¤à¥á ¢ ¯ ¬ï⨠[]
;[] A - § ¯¨á뢠¥¬ë© ¡ ©â []
;[] Запись байта в память с проверкой адреса []
;[] Вход: HL - адрес в памяти []
;[] A - записываемый байт []
;[]=========================================================================[]
Ld_hl_a:
push af
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
ld a,11000000b ;проверка диапазона
and h
jr z,.L2 ;¢ 0-®¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥?
jr z,.L2 ;в 0-ом окне
cp 10000000b ;во 2-ом окне?
jr z,.L1
pop af
ld (hl),a ;§ ¯¨á «¨ ¡ ©â, ¥á«¨ ­¥â
ld (hl),a ;записали байт, если нет
ret
.L1 ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
.L1 ld a,(WinPage+2) ;номер банки под отладчиком
out (EmmWin.P3),a ;в третье окно ее
set 6,h ;корректируем адрес
pop af
ld (hl),a ;¯¨è¥¬ ¡ ©â
ld (hl),a ;пишем байт
jr .L3
.L2 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
.L2 ld a,(WinPage) ;номер банки в 0-ом
out (EmmWin.P3),a ;в третье окно ее
set 6,h ;корректируем адрес
set 7,h
pop af
ld (hl),a ;¯¨è¥¬ ¡ ©â
res 7,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
ld (hl),a ;пишем байт
res 7,h ;востанавливаем адрес
.L3 res 6,h
ld a,(WinPage+3) ;­®¬¥à ¡ ­ª¨ ¨§ 3-£® ®ª­ 
out (EmmWin.P3),a ;¢®áâ ­ ¢«¨¢ ¥¬
ld a,(WinPage+3) ;номер банки из 3-го окна
out (EmmWin.P3),a ;востанавливаем
ret
;[]=========================================================================[]
;[] Ž¯à¥¤¥«¥­¨¥ ¯à¨­ ¤«¥¦­®á⨠ ¤à¥á  ®¡« á⨠¯ ¬ï⨠[]
;[] ‚室: HL - ­¨¦­¨©  ¤à¥á ®¡« á⨠¯ ¬ï⨠[]
;[] DE - ¢¥àå­¨©  ¤à¥á ®¡« á⨠¯ ¬ï⨠[]
;[] BC -  ¤à¥á []
;[] ‚ë室: ä« £ C -  ¤à¥á ­¥ ¯à¨­ ¤«¥¦¨â ®¡« á⨠¯ ¬ï⨠[]
;[] ä« £ NC -  ¤à¥á ¯à¨­ ¤«¥¦¨â ®¡« á⨠¯ ¬ï⨠[]
;[] Определение принадлежности адреса области памяти []
;[] Вход: HL - нижний адрес области памяти []
;[] DE - верхний адрес области памяти []
;[] BC - адрес []
;[] Выход: флаг C - адрес не принадлежит области памяти []
;[] флаг NC - адрес принадлежит области памяти []
;[]=========================================================================[]
AdrArea:
or a

View File

@ -1,349 +1,370 @@
;IX - WINDOW DESCRIPTOR
;+0 - FLAG:
; ------------------------------------------------------
; IX - WINDOW DESCRIPTOR
; +0 - FLAG:
; BITS: 0 - STANDART WINDOW
; 1 - 0 - WITHOUT HEADER / 1 - WITH HEADER
; 2 - 0 - ORDINARY FRAME / 1 - DOUBLE FRAME
;+1 - X COORD
;+2 - Y COORD
;+3 - LENGHT
;+4 - HEIGHT
;+5 - ATTR
; +1 - X COORD
; +2 - Y COORD
; +3 - LENGHT
; +4 - HEIGHT
; +5 - ATTR
; ------------------------------------------------------
Windows
BIT 0,(IX+0)
JR Z,NO_STAND_WIN
LD A,(IX+1)
LD DE,-4
ADD IX,DE
PUSH IX
LD IX,STANDART
LD (IX+5),A
JR STAND_WIN
Windows BIT 0,(IX+0)
JR Z,NO_STAND_WIN
LD A,(IX+1)
LD DE,-4
ADD IX,DE
PUSH IX
LD IX,STANDART
LD (IX+5),A
JR STAND_WIN
NO_STAND_WIN
PUSH IX
PUSH IX
STAND_WIN
CALL Rectang
CALL Frame
BIT 1,(IX+0)
CALL NZ,WinHeader
POP HL
; PUSH HL
LD DE,6
ADD HL,DE
bit 1,(ix+0)
ld a,(IX+5)
jr z,WinNoHeader
RRCA
RRCA
RRCA
RRCA
AND #7F
ld (PrnStrColor.L1+5),a
push hl
call MenuItemLen
ld a,(ix+3)
sbc a,b
ld e,(ix+1)
and a
rra
add a,e
ld e,a
ld d,(ix+2)
pop hl
CALL PrnStrColor
inc hl
ld a,(IX+5)
CALL Rectang
CALL Frame
BIT 1,(IX+0)
CALL NZ,WinHeader
POP HL
; PUSH HL
LD DE,6
ADD HL,DE
bit 1,(ix+0)
ld a,(IX+5)
jr z,WinNoHeader
RRCA
RRCA
RRCA
RRCA
AND 0x7F
ld (PrnStrColor.L1+5),a
push hl
call MenuItemLen
ld a,(ix+3)
sbc a,b
ld e,(ix+1)
and a
rra
add a,e
ld e,a
ld d,(ix+2)
pop hl
CALL PrnStrColor
inc hl
ld a,(IX+5)
WinNoHeader
ld (PrnStrColor.L1+5),a
ld d,(ix+2) ;Êîîðäèíàòû â îêíå
ld e,(ix+1)
inc d
inc d
inc e
inc e
ld a,e
ld (PrtXCoord),a
; LD (WINDOW_TXT),HL
CALL PrnStrColor
; EX (DE),HL
RET
ld (PrnStrColor.L1+5),a
ld d,(ix+2) ; Координаты в окне
ld e,(ix+1)
inc d
inc d
inc e
inc e
ld a,e
ld (PrtXCoord),a
; LD (WINDOW_TXT),HL
CALL PrnStrColor
; EX (DE),HL
RET
;Ðèñîâàíèå çàãîëîâêà îêíà
; ------------------------------------------------------
; Рисование заголовка окна
; ------------------------------------------------------
WinHeader
LD E,(IX+1)
LD D,(IX+2)
LD L,(IX+3)
LD H,1
LD A,(IX+5)
RRCA
RRCA
RRCA
RRCA
AND #7F
LD B,A
LD A,#20
CALL FillBox
RET
LD E,(IX+1)
LD D,(IX+2)
LD L,(IX+3)
LD H,1
LD A,(IX+5)
RRCA
RRCA
RRCA
RRCA
AND 0x7F
LD B,A
LD A,0x20
CALL FillBox
RET
;Ïðîöåäóðà îñâîáîæäåíèÿ ïðÿìîóãîëüíîé ïëîùàäè îêíà
;Íà âõîä: IX - àäðåñ îïèñàòåëÿ
Rectang LD E,(IX+1)
LD D,(IX+2)
LD H,(IX+4)
LD L,(IX+3)
LD B,(IX+5)
LD A,#20
CALL FillBox
RET
; ------------------------------------------------------
; Процедура освобождения прямоугольной площади окна
; На вход: IX - адрес описателя
; ------------------------------------------------------
Rectang
LD E,(IX+1)
LD D,(IX+2)
LD H,(IX+4)
LD L,(IX+3)
LD B,(IX+5)
LD A,0x20
CALL FillBox
RET
FillBox PUSH HL
PUSH DE
FillB1 LD C,Dss.WrChar
RST DssRst
INC E
DEC L
JR NZ,FillB1
POP DE
POP HL
INC D
DEC H
JR NZ,FillBox
RET
FillBox PUSH HL
PUSH DE
FillB1 LD C,Dss.WrChar
RST DssRst
INC E
DEC L
JR NZ,FillB1
POP DE
POP HL
INC D
DEC H
JR NZ,FillBox
RET
Frame LD HL,FrameType1
BIT 2,(IX+0) ;windows type flag
JR Z,Frame1
LD HL,FrameType2
Frame1 LD D,(IX+2)
LD E,(IX+1)
LD B,(IX+5)
PUSH DE
PUSH HL
; PUSH BC
LD A,(HL)
LD C,Dss.WrChar
RST DssRst
; POP BC
POP HL
POP DE
LD A,(IX+3)
DEC A
ADD A,E
LD E,A
INC HL
LD A,(HL)
LD C,Dss.WrChar
PUSH DE
PUSH HL
RST DssRst
POP HL
POP DE
LD A,(IX+4)
DEC A
ADD A,D
LD D,A
INC HL
LD A,(HL)
PUSH DE
PUSH HL
LD C,Dss.WrChar
RST DssRst
POP HL
POP DE
LD E,(IX+1)
INC HL
LD A,(HL)
LD C,Dss.WrChar
RST DssRst
;HORIZONTAL LINES
INC HL
LD A,(HL)
LD (FramHor),A
INC HL
PUSH HL
LD H,(IX+2)
LD A,(IX+4)
DEC A
ADD A,H
LD L,A
LD A,(IX+3)
SUB 2
LD C,Dss.WrChar
LD E,(IX+1)
INC E
LD B,(IX+5)
FramHl1 PUSH AF
PUSH HL
LD D,H
LD A,0
FramHor EQU $-1
PUSH AF
RST DssRst
POP AF
LD D,L
RST DssRst
POP HL
POP AF
INC E
DEC A
JR NZ,FramHl1
POP HL
;VERTICAL LINES
LD A,(HL)
LD (FramVer),A
LD H,(IX+1)
LD A,(IX+3)
DEC A
ADD A,H
LD L,A
LD A,(IX+4)
SUB 2
LD C,Dss.WrChar
LD D,(IX+2)
INC D
LD B,(IX+5)
FramVl1 PUSH AF
PUSH HL
LD E,H
LD A,0
FramVer EQU $-1
PUSH AF
RST DssRst
POP AF
LD E,L
RST DssRst
POP HL
POP AF
INC D
DEC A
JR NZ,FramVl1
RET
Frame
LD HL,FrameType1
BIT 2,(IX+0) ; windows type flag
JR Z,Frame1
LD HL,FrameType2
Frame1 LD D,(IX+2)
LD E,(IX+1)
LD B,(IX+5)
PUSH DE
PUSH HL
; PUSH BC
LD A,(HL)
LD C,Dss.WrChar
RST DssRst
; POP BC
POP HL
POP DE
LD A,(IX+3)
DEC A
ADD A,E
LD E,A
INC HL
LD A,(HL)
LD C,Dss.WrChar
PUSH DE
PUSH HL
RST DssRst
POP HL
POP DE
LD A,(IX+4)
DEC A
ADD A,D
LD D,A
INC HL
LD A,(HL)
PUSH DE
PUSH HL
LD C,Dss.WrChar
RST DssRst
POP HL
POP DE
LD E,(IX+1)
INC HL
LD A,(HL)
LD C,Dss.WrChar
RST DssRst
; HORIZONTAL LINES
INC HL
LD A,(HL)
LD (FramHor),A
INC HL
PUSH HL
LD H,(IX+2)
LD A,(IX+4)
DEC A
ADD A,H
LD L,A
LD A,(IX+3)
SUB 2
LD C,Dss.WrChar
LD E,(IX+1)
INC E
LD B,(IX+5)
FramHl1 PUSH AF
PUSH HL
LD D,H
FramHor+* LD A,0
;FramHor EQU $-1
PUSH AF
RST DssRst
POP AF
LD D,L
RST DssRst
POP HL
POP AF
INC E
DEC A
JR NZ,FramHl1
POP HL
; VERTICAL LINES
LD A,(HL)
LD (FramVer),A
LD H,(IX+1)
LD A,(IX+3)
DEC A
ADD A,H
LD L,A
LD A,(IX+4)
SUB 2
LD C,Dss.WrChar
LD D,(IX+2)
INC D
LD B,(IX+5)
FramVl1 PUSH AF
PUSH HL
LD E,H
FramVer+* LD A,0
;FramVer EQU $-1
PUSH AF
RST DssRst
POP AF
LD E,L
RST DssRst
POP HL
POP AF
INC D
DEC A
JR NZ,FramVl1
RET
;ËÈÑÒÀÅÒ ÄÎ ÑËÅÄÓÞÙÅÃÎ ÏÓÍÊÒÀ ÌÅÍÞ
; ------------------------------------------------------
; ЛИСТАЕТ ДО СЛЕДУЮЩЕГО ПУНКТА МЕНЮ
; ------------------------------------------------------
MenuItemLen
LD B,0
LD B,0
NextMnuItem
LD A,(HL)
INC HL
AND A
RET Z
INC B
JR NextMnuItem
LD A,(HL)
INC HL
AND A
RET Z
INC B
JR NextMnuItem
;Ïðîðèñîâêà îêíà è îáðàáîòêà äèàëîãà
; ------------------------------------------------------
; Прорисовка окна и обработка диалога
; ------------------------------------------------------
DialogWindow
call Windows
inc hl
; jp WinDialog
call Windows
inc hl
; jp WinDialog
;ÏÏ îáðàáîòêè äèàëîãîâîãî îêíà
;Dialogs
;+0 (1) - Count of Items
;+1 (N) - Item Descriptor
;Descriptor
; ------------------------------------------------------
; ПП обработки диалогового окна
; Dialogs
; +0 (1) - Count of Items
; +1 (N) - Item Descriptor
; Descriptor
; +0 - X
; +1 - Y
; +2 - Len
; +3 - Attrib
; +4 (2) - Hot Key
; +6 (2) - Routine
; ------------------------------------------------------
WinDialog:
ld a,(hl)
ld (DlgItemsCnt),a
inc hl
ld (.DialogAdr),hl
xor a
ld (SelectedItem),a
.Lp1 ld a,(SelectedItem)
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
ld de,0
.DialogAdr equ $-2
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld b,(hl)
ex hl,de
call CursorSet
.Lp2 ld c,Dss.ScanKey
rst DssRst
jr z,.Lp2
ld a,d
cp #52 ;<Down>
jr nz,.Lp3
.LpDn ld a,(DlgItemsCnt)
ld b,a
ld a,(SelectedItem)
inc a
cp b ;Äîñòèãëè ìàêñèìàëüíîãî ïóíêòà
jr z,.Lp2
.Lp4 ld (SelectedItem),a
call CursorRes
jr .Lp1
.Lp3 cp #58 ;<Up>
jr nz,.Lp5
.LpUp ld a,(SelectedItem)
and a
jr z,.Lp2
dec a
jr .Lp4
.Lp5 cp #54 ;<Left>
jr z,.LpUp
cp #56 ;<Right>
jr z,.LpDn
WinDialog
ld a,(hl)
ld (DlgItemsCnt),a
inc hl
ld (.DialogAdr),hl
xor a
ld (SelectedItem),a
.Lp1 ld a,(SelectedItem)
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
.DialogAdr+* ld de,0
;.DialogAdr equ $-2
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld b,(hl)
ex hl,de
call CursorSet
.Lp2 ld c,Dss.ScanKey
rst DssRst
jr z,.Lp2
ld a,d
cp DN_KEY ; <Down>
jr nz,.Lp3
.LpDn ld a,(DlgItemsCnt)
ld b,a
ld a,(SelectedItem)
inc a
cp b ; Достигли максимального пункта
jr z,.Lp2
.Lp4 ld (SelectedItem),a
call CursorRes
jr .Lp1
.Lp3 cp UP_KEY ; <Up>
jr nz,.Lp5
.LpUp ld a,(SelectedItem)
and a
jr z,.Lp2
dec a
jr .Lp4
.Lp5 cp LEFT_KEY ; <Left>
jr z,.LpUp
cp RIGHT_KEY ; <Right>
jr z,.LpDn
.LpAscii
ld a,e ;ASCII - êîä
cp #0D ;<Enter>
jr nz,.Lp2
call CursorRes
ld a,(SelectedItem)
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
ld de,(.DialogAdr)
add hl,de
ld de,6
add hl,de
ifdef DEBUG
push hl
ld de,0
call PrintReg
pop hl
endif
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
or h
ret z ;Åñëè àäðåñ =0, òî RET
ifdef DEBUG
push hl
ld de,8
call PrintReg
pop hl
endif
jp (hl)
DlgItemsCnt
DB 0
SelectedItem
DB 0
STANDART; TYPE, X, Y, L,H,COLOR
DEFB 5,10,13,#20,6,7
ld a,e ; ASCII - код
cp ENTER_KEY ; <Enter>
jr nz,.Lp2
call CursorRes
ld a,(SelectedItem)
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
ld de,(.DialogAdr)
add hl,de
ld de,6
add hl,de
IFDEF DEBUG
push hl
ld de,0
call PrintReg
pop hl
ENDIF
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
or h
ret z ; Если адрес =0, то RET
IFDEF DEBUG
push hl
ld de,8
call PrintReg
pop hl
ENDIF
;Ordinary frame
jp (hl)
DlgItemsCnt
DB 0
SelectedItem
DB 0
; TYPE, X, Y, L,H,COLOR
STANDART
DEFB 5,10,13,0x20,6,7
; Ordinary frame
FrameType1
DB #DA,#BF,#D9,#C0,#C4,#B3
;Double frame
DB 0xDA,0xBF,0xD9,0xC0,0xC4,0xB3
; Double frame
FrameType2
DB #C9,#BB,#BC,#C8,#CD,#BA
DB 0xC9,0xBB,0xBC,0xC8,0xCD,0xBA