mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-09 22:06:42 +03:00
Version for DSS 1.70+
This commit is contained in:
parent
4c6b0a25fb
commit
51a7833253
36
CLOCK.ASM
36
CLOCK.ASM
@ -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"
|
||||
|
22
CMDLINE.ASM
22
CMDLINE.ASM
@ -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
116
DATA.ASM
@ -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
389
DEMON.ASM
@ -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
|
BIN
DEMON_old.EXE
BIN
DEMON_old.EXE
Binary file not shown.
786
DISASM.ASM
786
DISASM.ASM
@ -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
|
||||
|
@ -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
|
||||
|
104
EQU/DSS.INC
104
EQU/DSS.INC
@ -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
|
||||
;
|
@ -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
|
||||
|
194
EQU/dss_equ.asm
194
EQU/dss_equ.asm
@ -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
|
||||
;
|
||||
|
86
ERROR.ASM
86
ERROR.ASM
@ -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
274
FILE.ASM
@ -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
246
KDUMP.ASM
@ -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
|
||||
|
440
KREG.ASM
440
KREG.ASM
@ -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
|
||||
|
212
KSTACK.ASM
212
KSTACK.ASM
@ -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
87
REZ.ASM
@ -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
|
||||
|
64
SAVESCR.ASM
64
SAVESCR.ASM
@ -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
431
STEP.ASM
@ -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 ;¤«¨ १¨¤¥â
|
||||
|
@ -1 +1 @@
|
||||
0003
|
||||
0004
|
@ -1 +1 @@
|
||||
210211
|
||||
240724
|
@ -1 +1 @@
|
||||
11
|
||||
12
|
@ -1 +1 @@
|
||||
00:00
|
||||
15:00
|
28
changes.md
Normal file
28
changes.md
Normal 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.
|
25
changes.txt
25
changes.txt
@ -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
35
clock.asm
Normal 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
23
cmdline.asm
Normal 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
|
||||
|
BIN
d010_136.rar
BIN
d010_136.rar
Binary file not shown.
@ -1 +0,0 @@
|
||||
(0): error: Error opening file: daemon.asm
|
124
data.asm
Normal file
124
data.asm
Normal 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
442
demon.asm
Normal 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
|
377
demon.utf.txt
Normal file
377
demon.utf.txt
Normal 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
786
disasm.asm
Normal 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
398
dss.asm
Normal 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
44
dss.inc
Normal 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
86
error.asm
Normal 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
378
file.asm
Normal 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
260
kdump.asm
Normal 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
|
477
kreg.asm
Normal file
477
kreg.asm
Normal 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
215
kstack.asm
Normal 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
|
||||
|
369
loadbin.asm
369
loadbin.asm
@ -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
2
make.sh
Executable 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
27
readme.md
Normal 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.
|
26
readme.txt
26
readme.txt
@ -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
87
rez.asm
Normal 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
64
savescr.asm
Normal 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
44
sim/ports.js
Normal 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
433
step.asm
Normal 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
|
@ -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
|
@ -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
|
655
windows.asm
655
windows.asm
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user