diff --git a/CLOCK.ASM b/CLOCK.ASM deleted file mode 100644 index 1eab560..0000000 --- a/CLOCK.ASM +++ /dev/null @@ -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" - diff --git a/CMDLINE.ASM b/CMDLINE.ASM deleted file mode 100644 index f21a2e4..0000000 --- a/CMDLINE.ASM +++ /dev/null @@ -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 - diff --git a/DATA.ASM b/DATA.ASM deleted file mode 100644 index 8b1d920..0000000 --- a/DATA.ASM +++ /dev/null @@ -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 ;Номер экрана ОСи -OSGrafMode db 0 ;Графический режим оси -BufPage db 255 ;Номер страницы с оконным буфером - -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) ",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 \ No newline at end of file diff --git a/DEMON.ASM b/DEMON.ASM deleted file mode 100644 index 93c0bb5..0000000 --- a/DEMON.ASM +++ /dev/null @@ -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 - - - ;Процедура прорисовки линий - ;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 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 \ No newline at end of file diff --git a/DEMON_old.EXE b/DEMON_old.EXE deleted file mode 100644 index d77f61d..0000000 Binary files a/DEMON_old.EXE and /dev/null differ diff --git a/DISASM.ASM b/DISASM.ASM deleted file mode 100644 index 1846c0d..0000000 --- a/DISASM.ASM +++ /dev/null @@ -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 - -;[]=========================================================================[] -;[] Расчет предыдущего адреса строки листинга [] -;[] Вход: 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 - diff --git a/EQU/DOS_EQU.ASM b/EQU/DOS_EQU.ASM deleted file mode 100644 index 01ccdca..0000000 --- a/EQU/DOS_EQU.ASM +++ /dev/null @@ -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 - diff --git a/EQU/DSS.INC b/EQU/DSS.INC deleted file mode 100644 index a38db37..0000000 --- a/EQU/DSS.INC +++ /dev/null @@ -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 -; diff --git a/EQU/bios_equ.asm b/EQU/bios_equ.asm index 14595ca..c8fbfa6 100644 --- a/EQU/bios_equ.asm +++ b/EQU/bios_equ.asm @@ -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 diff --git a/EQU/dss_equ.asm b/EQU/dss_equ.asm index c245856..f7df412 100644 --- a/EQU/dss_equ.asm +++ b/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 ; diff --git a/ERROR.ASM b/ERROR.ASM deleted file mode 100644 index 3a45e4e..0000000 --- a/ERROR.ASM +++ /dev/null @@ -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 - diff --git a/FILE.ASM b/FILE.ASM deleted file mode 100644 index eb4df1e..0000000 --- a/FILE.ASM +++ /dev/null @@ -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 ;"Недостаточно памяти" -; JP ErrorDSS - ret - -BankP ds 4 ;номера банок загружаемой проги -MemId ds 3 ;id-блока памяти под файл, - ;кол-во выделенных банок, - ;счетчик загруженных банок -FId db 0 ;файловый манипулятор -FDebug ds 128 - db 0 -FStart dw 0x4200 -FRam dw 0 ;адрес расположения кода в памяти - diff --git a/KDUMP.ASM b/KDUMP.ASM deleted file mode 100644 index fa6be95..0000000 --- a/KDUMP.ASM +++ /dev/null @@ -1,246 +0,0 @@ -;[]=========================================================================[] -;[] Обработка клавиатуры в окне дампа [] -;[] v0.10 - последние изменения 31.03.2006 [] -;[]=========================================================================[] -KDump: - ld a,b ;состояние - and 11110000b - jr z,.L100 - - ;Обработка комбинации Ctrl + символ -.L10 cp 00100000b ; - jp nz,.L100 - ld a,d ;позиционный код - - cp 0x80+0x51 ;++ - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - jr nz,.L111 - ld a,1 - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - -.L111 cp 0x51 ; - jr nz,.L200 - ld a,(.Descript+2) - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - - ;Обработка ASCII кодов -.L200 ld a,0 ;ASCII код - cp 0x0D ; - 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 ;завершение ввода по - 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 ;завершение ввода по - 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 ;завершение ввода по - 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 - diff --git a/KEYB.ASM b/KEYB.ASM deleted file mode 100644 index 56c2a6d..0000000 --- a/KEYB.ASM +++ /dev/null @@ -1,1202 +0,0 @@ -;[]=========================================================================[] -;[] Обработка клавиатуры [] -;[] v0.01 - последние изменения 10.10.2004 [] -;[] v0.02 - последние изменения 27.03.2005 [] -;[] v0.03 - последние изменения 11.03.2006 [] -;[] v0.10 - последние изменения 14.05.2006 [] -;[]=========================================================================[] - call CursorRes ;выкл курсор - call Refresh ;обновление экрана - jr Keyb - call CursorRes ;выкл курсор -Keyb: - call Cursor ;вкл курсор - call CursorSet - ld c,Dss.ScanKey ;состояние клавиатуры - rst DssRst - jr z,Keyb+6 - ld a,b ;состояние - and 11110000b - jr z,.L100 - - ;Обработка комбинации Shift + символ - and 11000000b ; - or a - jr z,.L1 - ld a,d - cp 0x80+0x0F ;Shift+Tab - jr nz,Keyb+6 - ld hl,Keyb.WinScreen - ld a,(hl) - dec a - jr nz,$+4 - ld a,4 - ld (hl),a ;номер окна дампа - jr Keyb-3 - - ;Обработка комбинации Alt + символ -.L1 ld a,b - and 11110000b - cp 00010000b ; - jr nz,.L10 - ld a,d ;позиционный код - cp 0x80+0x2B ;+ - jr nz,.L10 - ret z ;выход - - ;Обработка комбинации Ctrl + символ -.L10 cp 00100000b ; - jp nz,.L0 - ld a,d ;позиционный код - - cp 0x80+0x12 ;+ (dEc/hEx) - jr nz,.L11 - ld a,(DecHex) - cpl - ld (DecHex),a - jr Keyb-11 - -.L11 cp 0x80+0x13 ;+ резидент - jr nz,.L12 - call CursorRes - ld b,5 ;длина строки ввода - ld hl,0x1413 - push hl - push bc - call CursorSet - pop bc - pop hl - call InputLine - jp c,Keyb-3 - call PutAdres - jp c,Keyb-3 - call KReg.Rez ;новый адрес резидента - jr Keyb-11 - -.L12 cp 0x80+0x2A ;+ - jp z,.L202-2 ;выполнение команды - - cp 0x80+0x2C ;+ - jp z,.L200+5 ;выполнение команды - - cp 0x80+0x2D ;+ - jp z,.L203+4 ;пропуск команды - -; cp 0x80+0x48 ; -; call z,ScreenS ;сохранение экрана в файл - -.L13 ;... - jp .L0 - - ;Обработка ASCII кодов -.L100 ld a,e - cp 0x1B ; - вкл.системного экрана - jr nz,.L200 - xor a ;выкл часов - ld (ClockOn),a - ld a,(OSScreen) - ld b,a - push bc - ld a,(OSGrafMode) - ld c,Dss.SetVMod ;системный экран - rst DssRst - pop bc - ld a,(DemonScreen) - cp b - jr nz,.NoRest - ld de,0 ;Если экраны ОС и Демона совпадают - - ld hl,#2050 ;восстанавливаем скрин - ld a,(BufPage) - ld b,a - ld c,Dss.WinRest - ld ix,#c000 - rst DssRst -.NoRest ld c,Dss.WaitKey - rst DssRst ;ждем Any Key - ld a,(DemonScreen) - ld b,a - ld a,3 - ld c,Dss.SetVMod - push bc - rst DssRst - pop bc - ld a,(OSScreen) - cp b - call z,RefreshScreen ;Если экраны совпадают - перерисовываем - ld a,On ;вкл часов - ld (ClockOn),a - jp Keyb+6 - - ;Обработка позиционного кода -.L200 ld a,d - cp 0x3b ; - jr nz,.L208 - call DemonHelp -; ld c,Dss.WaitKey -; rst DssRst ;ждем Any Key - -.NoExit call RefreshScreen - jp Keyb+6 -.L208 cp 0x3d - jr nz,.L207 - call LoadBinDialog - jr .NoExit -.L207 - cp 0x42 ; - jr nz,.L201 - ld a,Off ;флаг пропуска подпрограмм - jr .L202 - -.L201 cp 0x41 ; - jr nz,.L203 - ld a,On ;флаг трассировки подпрограмм -.L202 ld (Step.Flag),a - ld hl,PrintStrSP.StrSp - ld a,(hl) ;строка вершины стека - inc a - jr nz,$+5 - ld a,6 ;вернуть вершину стека - ld (hl),a - call Step - jp Keyb-11 - -.L203 cp 0x43 ; - jr nz,.L204 - ld hl,(Reg._PC) - call List ;следующая команда - ld (Reg._PC),hl ;новый PC - push hl - ld a,(KList.Descript) ;количество строк листинга - call AdrListTabl ;нижний адрес листинга - ld de,(ListAdr) ;верхний адрес листинга - pop bc ;новый PC - call AdrArea - jp nc,Keyb-11 - ld (ListAdr),bc ;новая страница листинга - jp Keyb-11 - -.L204 cp 0x0F ; - jr nz,.L205 - ld hl,Keyb.WinScreen - ld a,(hl) - inc a - cp 5 - jr nz,$+4 - ld a,1 - ld (hl),a ;номер окна дампа - jp Keyb-3 - -.L205 cp 0x48 ; - jr nz,.L206 - call SaveScr ;сохранение экрана в файл - jp Keyb+6 - -.L206 cp 0x44 ; - jr nz,.L0 - ;выход - ld ix,ExitDlg - call DialogWindow - ret - call ClearScreen -.L0 ld a,(.WinScreen) ;активное окно - dec a - jp z,KList - dec a - jp z,KDump - dec a - jp z,KReg - jp KStack - -.WinScreen db 1 ;номер активного окна - ;1 - окно листинга - ;2 - окно дампа - ;3 - окно регистров - ;4 - окно стека - - ;Прорисовка курсора -Cursor: - ld a,(Keyb.WinScreen) ;активное окно - dec a - jr z,.L1 - dec a - jr z,.L2 - dec a - jr z,.L3 - ;Окно дампа стека - ld de,(KStack.Coordinate) ;расчет курсора - ld hl,KStack.Descript+2 - ld b,e - inc hl - inc hl - djnz $-2 - ld a,(hl) ;длина курсора - ld (KStack.L201+1),a - ld b,a - dec hl - ld e,(hl) ;X-координата курсора - ex de,hl - ld (KStack.L201+3),hl - ret - ;Окно листинга -.L1 ld de,(KList.Coordinate) ;расчет курсора - ld hl,KList.Descript+2 - ld b,e - inc hl - inc hl - djnz $-2 - ld a,(hl) ;длина курсора - ld (KList.L201+1),a - ld b,a - dec hl - ld e,(hl) ;X-координата курсора - ex de,hl - ld (KList.L201+3),hl - ret - ;Окно дампа -.L2 ld de,(KDump.Coordinate) ;расчет курсора - ld hl,KDump.Descript+2 - ld b,e - inc hl - inc hl - djnz $-2 - ld a,(hl) ;длина курсора - ld (KDump.L201+1),a - ld b,a - dec hl - ld e,(hl) ;X-координата курсора - ex de,hl - ld (KDump.L201+3),hl - ret - ;Окно регистров -.L3 call KReg.DescCalc - ld d,b - ld b,e ;колонока в строке - inc hl - inc hl - djnz $-2 - ld a,(hl) ;длина курсора - ld (KReg.L201+1),a - ld b,a - dec hl - ld e,(hl) ;X-координата курсора - ex de,hl - ld (KReg.L201+3),hl - ret - - ;Обработка клавиш в окне листинга -KList: - ld a,b ;состояние - and 11110000b - jr z,.L100 - - ;Обработка комбинации Alt + символ - cp 00010000b ; - jr nz,.L10 - jp Keyb+6 - - ;Обработка комбинации Ctrl + символ -.L10 cp 00100000b ; - jp nz,Keyb+6 - - ld a,d ;позиционный код - cp 0x80+0x2B ;+ - jp nz,.L20 - - call AdrListTabl-3 ;выборка адреса листинга по N строки - ld (Reg._PC),hl - jp .NewLA1+3 - -.L20 ld a,b - cp 00100010b ;правый - jr nz,.L21 - ld bc,.CtrlTabl - call AdrCtrlTabl ;выборка строки в таблице - jp nc,Keyb+6 ;не цифровые клавиши - - ld a,(.Coordinate+1) - ld (bc),a ;номер строки листинга - inc bc - call AdrListTabl ;выборка адреса листинга по N строки - ld a,l - ld (bc),a - inc bc - ld a,h - ld (bc),a - jp Keyb+6 - -.L21 cp 00101000b ;левый - jp nz,Keyb+6 - - ld a,d ;позиционный код - cp 0x80+0x00 ;Ctrl+"`" - jp nz,.L22 - - ld a,(.CtrlWin) - ld h,a - ld l,0 - add a,0x40 ;следующее окно - ld (.CtrlWin),a - ld a,(.Descript+1) - ld (.Coordinate+1),a - jp .NewLA1 - -.L22 ld bc,.CtrlTabl - call AdrCtrlTabl ;выборка строки в таблице - jp nc,Keyb+6 - - ld a,(bc) ;номер строки листинга - or a - jp z,Keyb+6 ;нет данных - - inc bc - ld a,(bc) - ld l,a - inc bc - ld a,(bc) - ld h,a ;адрес из буфера - jp .NewLA - - ;Обработка позиционного кода -.L100 ld a,e ;ASCII код - ld (.L200+1),a - ld a,d ;позиционный код - - ld de,(.Coordinate) ;текущие координаты курсора - cp 0x56 ; - 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 ; - 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 ; - jr nz,.L103 - ld a,d ;текущая строка - cp l - jr nz,.L104 - ld hl,(ListAdr+2) ;адрес следующей строки - jp .NewLA1 -.L104 inc a - ld (.Coordinate+1),a - jp Keyb-3 - -.L103 cp 0x58 ; - jr nz,.L105 - ld a,d ;текущая строка - cp h - jr nz,.L107 - ld hl,(ListAdr) ;адрес верхней строки листинга - call UpAdres ;предыдущий адрес - jp .NewLA1 -.L107 dec a - ld (.Coordinate+1),a - jp Keyb-3 - -.L105 cp 0x53 ; - jr nz,.L108 - ld a,d ;текущая строка - cp l - jr nz,.L106 - call AdrListTabl - jp .NewLA1 -.L106 ld a,l ;на последнюю строку - ld (.Coordinate+1),a - jp Keyb-3 - -.L108 cp 0x59 ; - jr nz,.L110 - ld a,d ;текущая строка - cp h - jr nz,.L109 - dec l ;кол-во строк - 1 - ld b,l - ld hl,(ListAdr) ;адрес первой строки - push bc - call UpAdres ;предыдущий адрес - pop bc - djnz $-5 - jp .NewLA1 -.L109 ld a,h ;на первую строку - ld (.Coordinate+1),a - jp Keyb-3 - -.L110 cp 0x57 ; - jr nz,.L111 - ld a,1 - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - -.L111 cp 0x51 ; - jr nz,.L200 - ld a,(.Descript+2) ;последняя колонка - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - - ;Обработка ASCII кодов -.L200 ld a,0 - cp 0x0D ; - jp nz,.NewPCAdr ;Keyb+6 -.L201 ld b,0 ;длина строки ввода - ld hl,0 ;координаты строки ввода - ld a,(.Coordinate) - dec a ;колонка адреса - jr z,.InAdres - dec a ;колонка метки - jr z,$+5 - dec a ;колонка кода команды - jr z,.InCode - call InputLine - jp Keyb-3 -.NewPCAdr cp "z" ; - jp nz,Keyb+6 - call AdrListTabl-3 ;Установить новый PC - ld (Reg._PC),HL - jp Keyb-11 -.InCode call InputLine ;ввод кода в 3 колонке - jp c,Keyb-3 ;завершение ввода по - call PutCode - jr c,.L201 ;ошибка в веденных данных - call AdrListTabl-3 ;адрес текущей строки - ld de,PutCode.Buffer - ld a,(de) ;запись кода в память - call Ld_hl_a - inc de - inc hl - djnz $-6 - jr .NewLA1+3 - -.InAdres call InputLine ;ввод адреса в 1 колонке - jp c,Keyb-3 ;завершение ввода по - call PutAdres - jr c,.L201 ;ошибка в веденных данных - -.NewLA ld a,(.Coordinate+1) - dec a - jr z,.NewLA1 - ld b,a - push bc - call UpAdres ;предыдущий адрес - pop bc - djnz $-5 -.NewLA1 ld (ListAdr),hl - jp Keyb-11 - -.CtrlWin db 0 ;окно для Ctrl+"`" -.CtrlTabl ds 30 ;буффер для адр быстр перехода -.Coordinate dw 0x0201 ;курсор (стр/кол курсора) -.Descript: - dw 0x0114 ;первая/последняя строка окна - db 4 ;кол-во колонок - - db 0x1A ;N столбца колонки - db 5 ;ширина колонки - db 0x20 - db 14 - db 0x2F - db 8 - db 0x38 - db 22 - -;[]=========================================================================[] -;[] Выборка адреса листинга из таблицы [] -;[] Выход: HL - адрес листинга в текущей строке [] -;[]=========================================================================[] - ld a,(KList.Coordinate+1) ;номер текущей строки листинга -AdrListTabl: - dec a - add a,a ;*2 - ld e,a - ld d,0 - ld hl,ListAdr ;таблица адресов листинга - add hl,de ;строка в таблице - ld a,(hl) - inc hl - ld h,(hl) - ld l,a ;адрес строки листинга - ret - -;[]=========================================================================[] -;[] Выборка адреса цифровых клавиш из таблицы [] -;[] Вход: D - позиционный код цифровой клавиши [] -;[] BC - адрес начала таблицы [] -;[] Выход: BC - адрес в таблице [] -;[] Флаг NC - нажата не цифровая клавиша [] -;[]=========================================================================[] -AdrCtrlTabl: - ld a,d - and 01111111b ;сброс старшего бита - dec a - dec a - cp 0x0A ;проверка цифровых клавиш верхнего ряда - ret nc - or a - scf - ret z ;выход, если "0" - inc bc - inc bc - inc bc - dec a - jr nz,$-4 - ret - -;[]=========================================================================[] -;[] Получение кода из строки ввода [] -;[] Вход: C - длина строки ввода [] -;[] Выход: .Buffer - захваченные байты [] -;[] B - количество захваченных байт [] -;[] флаг C - ошибка [] -;[]=========================================================================[] -PutCode: - ld de,InputLine.Buffer - ld hl,.Buffer - ld a,c - dec a - ret c ;нулевая строка - inc a - srl a - ld b,a - jr z,.L3 ;обработка одного символа - ld c,a - ld a,0xC9 ;RET - jr nc,$+3 - xor a ;NOP - ld (.L3-1),a - -.L2 push hl - ld hl,0 - ld a,2 - call PutHex - ld a,l - pop hl - ret c ;выход с ошибкой - ld (hl),a - inc hl - dec c - jr nz,.L2 - or a - ret - -.L3 inc b - push hl - ld hl,0 - ld a,1 - call PutHex - ld a,l - pop hl - ret c ;выход с ошибкой - ld (hl),a - or a - ret - -.Buffer ds 4 - -;[]=========================================================================[] -;[] Получение адреса из строки ввода [] -;[] Вход: C - длина строки ввода [] -;[] Выход: HL - число [] -;[] флаг C - ошибка [] -;[]=========================================================================[] -PutAdres: - ld a,c - dec a - ret c ;нулевая строка - ld de,InputLine.Buffer - ld hl,0 - ld a,(de) - call CapsLetter - cp "X" ;hex-число - jr z,$+4 - cp "#" ;hex-число - ld a,c - jr nz,PutDec - inc de - inc de - dec a - dec a - ret c - inc a - -PutHex exa - ld a,(de) - call Numeric ;цифра? - jr c,.L1 - call CapsLetter ;лат.буквы в верхний регистр - cp "F"+1 - ccf - ret c ;выход с ошибкой - cp "A" - ret c ;выход с ошибкой - sub 0x07 -.L1 sub 0x30 - add hl,hl ;*16 - add hl,hl - add hl,hl - add hl,hl - or l - ld l,a - inc de - inc de - exa - dec a - jr nz,PutHex - or a ;сброс флага C - ret - -PutDec exa - ld a,(de) - call Numeric ;цифра? - ccf - ret c ;выход если нет - ld c,l - ld b,h - add hl,hl ;*10 - add hl,hl - add hl,bc - add hl,hl - ld b,0 - sub 0x30 - ld c,a - add hl,bc - inc de - inc de - exa - dec a - jr nz,PutDec - or a ;сброс флага C - ret - -;[]=========================================================================[] -;[] Проверка кода символа на принадлежность к цифрам (коды 0x30...0x39) [] -;[] Вход: A - код символа [] -;[] Выход: флаг C - цифра; Флаг NC - не цифра [] -;[]=========================================================================[] -Numeric cp "0" - ccf - ret nc - cp 3Ah - ret - -;[]=========================================================================[] -;[] Перевод символов латинского алфавита a...z в верхний регистр [] -;[] Вход: A - код символа [] -;[] Выход: A - код символа в верхнем регистре [] -;[]=========================================================================[] -CapsLetter cp "a" ;<"a" - ret c - cp "z"+1 ;>"z" - ret nc - and 11011111b ;преобразование символа - ret - -InputLine1 push hl - push bc - call CursorSet - pop bc - pop hl - jr InputLine - -;[]=========================================================================[] -;[] Ввод строки символов с клавиатуры [] -;[] Вход: B - длина строки ввода [] -;[] HL - координаты курсора [] -;[] Выход: флаг C - флаг NC - [] -;[] C - длина введенной строки, если [] -;[]=========================================================================[] -InputLineEd: - ld a,(Color.InLineEd) ;цвет строки ввода - ld c,a - xor a - jr InputLine+6 -InputLine: - ld a,(Color.InLine) ;цвет строки ввода - ld c,a - ld a,On - ld (.EntEnd),a - ld a,0xC3 ;код JP - ld (.L15),a - ld (CursPos),hl - ld (.Coordinate),hl - ld hl,.Pos - xor a ;текущая позиция - ld (hl),a - inc hl - ld (hl),c ;цвет - inc hl - ld (hl),b ;длина строки редактирования - inc hl ;начало буфера редактирования - ld de,CursorSet.Buffer ;буфер строки под курсором - ;ld c,a ;окраска строки редактирования -.L1 ld a,(de) - ld (hl),a - inc hl - inc de - ld (hl),c - inc hl - inc de - djnz .L1 - - call .PrintInLine ;напечатать строку - ld a,(.EntEnd) - or a - call nz,.EndString ;курсор в конец строки - -.L100 ld a,On ;включить програм курсор - ld (CursOnOff),a - ld hl,.L100 - push hl ;адрес возврата - ld c,Dss.ScanKey ;состояние клавиатуры - rst DssRst - jr z,$-3 - - cp 0x20 ;есть ASCII-код - jr c,.L3 - - push af - ld a,(.Pos) - exa - ld hl,.Color ;текущий цвет строки ввода - ld a,(Color.InLine) - cp (hl) - call z,.ClearInLine - call z,.HomeString - call .NextPos ;на выходе в HL адрес .Pos - jr z,.L12 - ld a,(CursInsOvr) ;режим Ins/Ovr - or a - jr nz,.L12 ;переход если Ovr - ld a,(.Len) - ld e,a - dec a ;длина строки - 1 - add a,a - ld b,0 - ld c,a - ld d,(hl) ;позиция печати символа - ld hl,.Buffer - add hl,bc ;конец буфера - inc hl - ld a,e - sub d ;кол-во сдвигаемых символов - add a,a - ld c,a - ld d,h - ld e,l - dec hl - dec hl - lddr ;раздвижка строки -.L12 exa - add a,a - ld b,0 - ld c,a - ld hl,.Buffer - add hl,bc ;адрес в буфере - pop af - ld (hl),a ;символ в буфер - call ResCurs -.L15 jp .PrintInLine - jr .L14 - -.L3 cp 0x1B ; - jr nz,.L13 - call ResCurs - pop hl ;востановить стек - scf - ret - -.L13 cp 0x0D ; - jr nz,.L2 - ld a,On - ld (.EntEnd),a - call ResCurs -.L14 pop hl ;востановить стек - call .EndPos ;длина введенной строки - ret - -.L2 ld a,d - cp 0x4F ; - jr nz,.L9 - call ResCurs - ld hl,.Color ;текущий цвет строки ввода - ld a,(Color.InLine) - cp (hl) - call z,.ClearInLine -.L11 ld hl,.Pos - ld a,(hl) ;позиция курсора - add a,a - ld e,a - inc hl - inc hl - ld a,(hl) ;длина строки - dec a - add a,a - sub e ;проверка конца строки - ld c,a - ld b,0 - ld d,b - inc hl ;начало буфера - add hl,de ;адрес курсора - push hl - pop de - inc hl - inc hl - jr z,$+4 ;если в конце строки - ldir - ld a," " - ld (de),a ;последний символ - jp .PrintInLine - -.L9 cp 0x0E ; - jr nz,.L10 - call ResCurs - call .ColorInLine ;сменить цвет строки - ld hl,.Pos - ld a,(hl) ;позиция курсора - or a - jp z,.PrintInLine ;если в начале строки - dec (hl) ;уменьшить позицию - ld hl,CursPos - dec (hl) ;курсор влево - jr .L11 - -.L10 cp 0x50 ; - jr nz,.L5 - ld a,(CursInsOvr) - cpl - ld (CursInsOvr),a - ret - -.L5 cp 0x56 ; - jr nz,.L6 - call ResCurs - call .ColorInLine ;сменить цвет строки - call z,.PrintInLine - call .EndPos - ret z - ld a,(.Pos) - cp c - ret nc - jp .NextPos - -.L6 cp 0x54 ; - jr nz,.L7 - call ResCurs - call .ColorInLine ;сменить цвет строки - call z,.PrintInLine - ld hl,.Pos ;позиция курсора - ld a,(hl) - or a - ret z - dec (hl) - ld hl,CursPos ;координаты програм курсора - dec (hl) - ret - -.L7 cp 0x57 ; - jr nz,.L8 - call ResCurs - call .ColorInLine ;сменить цвет строки - call z,.PrintInLine -.HomeString ld hl,.Pos ;позиция курсора - ld a,(hl) - or a - ret z - ld a,(.Coordinate) ;координаты начала строки - ld (CursPos),a - xor a - ld (hl),a ;обнулить позицию печати - ret - -.L8 cp 0x51 ; - ret nz - call ResCurs - call .ColorInLine ;сменить цвет строки - call z,.PrintInLine -.EndString call .EndPos - ret z - ld a,(.Len) -; dec a ;длина строки ввода - 1 - sub c ;заполнена полностью? - jr nz,$+3 - dec c - ld hl,.Pos - ld (hl),c ;позиция в конце строки - ld a,(.Coordinate) - add a,c - ld (CursPos),a ;новая позиция програм курсора - ret - -.PrintInLine ld ix,.Buffer ;буфер строки - ld a,(.Len) - ld l,a - ld h,1 ;размеры буфера - ld de,(.Coordinate) ;координаты в экране - ifdef D_PRINTCH_BIOS - xor a - ld c,Bios.Win_Restore_Win ;вывод буфера на экран - di - rst BiosRst - ei - else - ld a,(BankDebug) - ld b,a - ld c,Dss.WinRest - rst DssRst - endif - ret - -.ClearInLine ld hl,.Len ;очистка строки ввода - ld b,(hl) ;длина строки ввода - ld a," " ;пробел - inc hl ;начало буфера строки - ld (hl),a - inc hl - djnz $-3 - xor a ;позиция печати - ld (.Pos),a - exa - ld a,(.Coordinate) - ld (CursPos),a - jr $+10 - -.ColorInLine ld hl,.Color ;окраска в основной цвет - ld a,(Color.InLine) - cp (hl) - ret nz - ld a,(Color.InLineEd) ;цвет строки ввода - ld (.Color),a - ld hl,.Len ;длина строки ввода - ld b,(hl) - inc hl - inc hl - ld (hl),a - inc hl - djnz $-3 - ret - -.EndPos ld hl,.Buffer ;поиск позиции послед. символа - ld a,(.Len) - ld c,a - dec a - add a,a - ld e,a - ld d,0 - add hl,de - ld a,(hl) - dec hl - dec hl - cp " " ;ищем конец строки - ret nz - dec c - jr nz,$-7 - ret - -.NextPos ld hl,.Pos ;расчет следующей позиции - ld a,(.Len) - dec a - cp (hl) - jr nz,.L16 - ld a,(.EntEnd) ;заканчивать по ENTER - inc a - ret z ;последняя позиция в строке - ld a,0xCD ;код CALL - ld (.L15),a - ret -.L16 inc (hl) ;увеличение позиции - ld a,(CursPos) ;координаты програм курсора - inc a - ld (CursPos),a - ret -;[]=========================================================================[] -;[] Копирование из буфера строки ввода [] -;[]=========================================================================[] -;Вход: -;DE - адрес назначения -;C - длина строки - -.FromBuffer ld hl,.Buffer - ld b,0 -.FB1 ld a,(hl) - ld (de),a - inc hl - inc hl - inc de - dec c - jr nz,.FB1 - ret -;[]=========================================================================[] -;[] Копирование в буфер строки ввода [] -;[]=========================================================================[] -;Вход: -;HL - адрес строки -;C - длина строки - -.ToBuffer ld de,.Buffer -.TB1 ld a,(hl) - ld (de),a - inc de - inc de - inc hl - dec c - jr nz,.TB1 - ret -.EntEnd db On ;флаг окончания строки ENTER -.Coordinate dw 0 ;начало строки в экране -;последовательность переменных не изменять! -.Pos db 0 ;позиция курсора в строке -.Color db 0 ;цвет строки ввода -.Len db 0 ;длина строки ввода -.Buffer ds 22*2 ;буфер строки ввода - -;[]=========================================================================[] -;[] Программное создние мигающего курсора [] -;[]=========================================================================[] - -;======== Подготовка дополнительного знакогенератора ======== -PreparChar: - ld de,OrgAdr-0x100 ;буфер для 2kB знакогенератора - ld c,Bios.Win_Get_ZG ;получить сист. знакогенератор - rst BiosRst - ld hl,OrgAdr-0x100+7*256 - ld bc,0x00FF - ld (hl),c - inc hl - djnz $-2 - - ld de,OrgAdr-0x100 ;уст.знакогенератор 0x5B - ld c,Bios.Win_Set_ZG - ld a,0x5B - rst BiosRst - - ld hl,(0039h) ;установка вектора (для мигания курсора) - ld (Rst38.Vect+1),hl - ld hl,Rst38 - ld (0039h),hl - ret - -Rst38 di ;вектор курсора - push iy - push ix - push hl - push de - push bc - push af - exx - exa - push hl - push de - push bc - push af - call Clock - ld a,(CursOnOff) - or a - call nz,CuttingCurs - pop af - pop bc - pop de - pop hl - exx - exa - pop af - pop bc - pop de - pop hl - pop ix - pop iy -.Vect jp 0x0000 ;адрес сист. вектора RST 38 - -;======== Обработка программного курсора ======== -CuttingCurs ld a,(TimerFlash) ;пауза мигания - dec a - call z,.L1 - ld (TimerFlash),a - ret - -.L1 ld a,(CursPutRes) - cpl - ld (CursPutRes),a - - ld de,(CursPos) - ld (ResCurs.L1+1),de - or a ;флаг Put / Res - jr z,.L3 ;установка курсора - ;иначе сброс курсора - ld hl,(CursSymb) ;символ и его цвет - sub a ;сброс id окна - ld b,SysSymb ;системный знакогенератор - ld c,Bios.Win_Put_Sym ;положить символ - rst BiosRst - ld a,PauseFlash ;пауза мигания - ret - -.L3 ld c,Bios.Win_Get_Sym ;получить символ - sub a ;сброс id окна - rst BiosRst - ld (CursSymb),hl ;символ и его цвет - - ld de,(CursPos) ;позиция печати - ld a,(CursInsOvr) ;флаг режима Ins / Ovr - or a - jr z,.L4 ;режим вставки - ;иначе режим замены - ld a,h - rlca - rlca - rlca - rlca - ld h,a - sub a ;сброс id окна - ld b,SysSymb ;системный знакогенератор -; ld l,0xDC ;курсор режима замены - ld c,Bios.Win_Put_Sym ;символ на экран - rst BiosRst - ld a,PauseFlash ;пауза мигания - ret - -.L4 sub a ;сброс id окна - ld b,0x5B ;модиф. знакогенератор - ld c,Bios.Win_Put_Sym ;символ на экран - rst BiosRst - ld a,PauseFlash ;пауза мигания - ret - -;======== Принудительный сброс курсора ======== -ResCurs ld a,(CursOnOff) - or a - ret z ;курсор не установлен - push hl - ld a,On - ld (CursPutRes),a - inc a - ld (CursOnOff),a - ld a,1 ;пауза мигания - ld (TimerFlash),a -.L1 ld de,0 ;последние координаты курсора - ld hl,(CursSymb) - ld bc,0x1B00+Bios.Win_Put_Sym - sub a ;сбросить id окна - rst BiosRst - pop hl - ret - -CursOnOff db Off ;флаг курсора 00-выкл/FF-вкл -CursPutRes db On ;флаг 00-Res/FF-Put -CursInsOvr db Ins ;флаг 00-Ins/FF-Ovr -TimerFlash db 1 ;таймер -CursPos dw 0 ;позиция курсора -CursSymb dw 0 ;символ под курсором - diff --git a/KREG.ASM b/KREG.ASM deleted file mode 100644 index ad58556..0000000 --- a/KREG.ASM +++ /dev/null @@ -1,440 +0,0 @@ -;[]=========================================================================[] -;[] Обработка клавиатуры в окне регистров [] -;[] v0.03 - последние изменения 11.03.2006 [] -;[] v0.10 - последние изменения 14.05.2006 [] -;[]=========================================================================[] -KReg: -; ld a,b ;состояние -; and 0b11110000 -; jr z,.L100 - - ;Обработка комбинации Shift + символ -; and 0b11000000 ; -; 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - jr nz,.L111 - ld a,1 - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - -.L111 cp 0x51 ; - jr nz,.L200 - call .DescCalc - ld a,(hl) ;последняя колонка - ld (.Coordinate),a ;первая колонка - jp Keyb-3 - -;.L112 cp 0x0F ; -; jr nz,.L200 -; ld a,4 ;номер окна листинга -; ld (Keyb.WinScreen),a -; jp Keyb-3 - - ;Обработка ASCII кодов -.L200 ld a,0 ;ASCII код - cp 0x0D ; - 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 ;завершение ввода по - 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 ;завершение ввода по - 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 ;завершение ввода по - 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 ;завершение ввода по - 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 - - ;Расчет дескриптора строки в окне регистров -.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 - diff --git a/KSTACK.ASM b/KSTACK.ASM deleted file mode 100644 index 6dc77fe..0000000 --- a/KSTACK.ASM +++ /dev/null @@ -1,212 +0,0 @@ -;[]=========================================================================[] -;[] Обработка клавиатуры в окне дампа стека [] -;[] v0.10 - последние изменения 18.03.2006 [] -;[]=========================================================================[] -KStack: - ld a,b ;состояние - and 11110000b -; ld b,a - jr z,.L100 - - ;Обработка комбинации Shift + символ -; and 11000000b ; -; 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 ; - jp nz,Keyb+6 - ld a,d ;позиционный код - cp 0x80+0x2B ;+ - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - 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 ; - jr nz,.L200 - ld a,6 - ld (PrintStrSP.StrSp),a ;строка верш.стека - jp Keyb-11 - -;.L111 cp 0x0F ; -; jr nz,.L200 -; ld a,1 ;номер окна листинга -; ld (Keyb.WinScreen),a -; jp Keyb-3 - - ;Обработка ASCII кодов -.L200 ld a,0 ;ASCII код - cp 0x0D ; - jp nz,Keyb+6 -.L201 ld b,0 ;длина строки ввода - ld hl,0 ;координаты строки ввода - call InputLine ;ввод числа - jp c,Keyb-3 ;завершение ввода по - 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 - diff --git a/REZ.ASM b/REZ.ASM deleted file mode 100644 index d93e26e..0000000 --- a/REZ.ASM +++ /dev/null @@ -1,87 +0,0 @@ -;[]=========================================================================[] -;[] Резидент отладчика [] -;[] 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 - diff --git a/SAVESCR.ASM b/SAVESCR.ASM deleted file mode 100644 index 7364d8b..0000000 --- a/SAVESCR.ASM +++ /dev/null @@ -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 Заглушка Не было исходника :( -; include "d:\workast\demon\screen\scrdemon" - diff --git a/STEP.ASM b/STEP.ASM deleted file mode 100644 index 1882928..0000000 --- a/STEP.ASM +++ /dev/null @@ -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 ;длина резидента - diff --git a/VERSION/build.bin b/VERSION/build.bin index 2f01c85..9df46a8 100644 --- a/VERSION/build.bin +++ b/VERSION/build.bin @@ -1 +1 @@ -0003 \ No newline at end of file +0004 \ No newline at end of file diff --git a/VERSION/date.bin b/VERSION/date.bin index 87ee74b..7e25c9c 100644 --- a/VERSION/date.bin +++ b/VERSION/date.bin @@ -1 +1 @@ -210211 \ No newline at end of file +240724 \ No newline at end of file diff --git a/VERSION/minor.bin b/VERSION/minor.bin index 9d60796..3cacc0b 100644 --- a/VERSION/minor.bin +++ b/VERSION/minor.bin @@ -1 +1 @@ -11 \ No newline at end of file +12 \ No newline at end of file diff --git a/VERSION/time.bin b/VERSION/time.bin index f677d90..af7d18f 100644 --- a/VERSION/time.bin +++ b/VERSION/time.bin @@ -1 +1 @@ -00:00 \ No newline at end of file +15:00 \ No newline at end of file diff --git a/changes.md b/changes.md new file mode 100644 index 0000000..fffec95 --- /dev/null +++ b/changes.md @@ -0,0 +1,28 @@ +DemoN v.0.11 +============ +Hard/WCG + +b0003 20.02.2011 + ++ ╨Я╨╛ ╨║╨╜╨╛╨┐╨║╨╡ PC ╨┐╤А╨╕╤Б╨▓╨░╨╕╨▓╨░╨╡╤В╤Б╤П ╨░╨┤╤А╨╡╤Б, ╨╜╨░ ╨║╨╛╤В╨╛╤А╨╛╨╝ ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜ ╨║╤Г╤А╤Б╨╛╤А. + ++ ╨Ф╨╛╨▒╨░╨▓╨╕╨╗ ╨┤╨╕╨░╨╗╨╛╨│ Load BIN-file, ╨╜╨╛ ╨╡╤Й╨╡ ╨╜╨╡ ╨┤╨╛╨▓╨╡╨╗ ╨╡╨│╨╛ ╨┤╨╛ ╤Г╨╝╨░. + +b0002 19.02.2011 + +* ╨Ш╨╖╨╝╨╡╨╜╨╕╨╗ ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л ╨┐╨╡╤З╨░╤В╨╕ ╨╕ ╨┐╤А╨╛╤А╨╕╤Б╨╛╨▓╨║╨╕ ╨║╤Г╤А╤Б╨╛╤А╨░ ╨┤╨╗╤П ╤А╨░╨▒╨╛╤В╤Л ╤З╨╡╤А╨╡╨╖ DSS, ╤В.╨║. ╨╜╨░ ╤Н╨╝╤Г╨╗╤П╤В╨╛╤А╨╡ Demon ╨╜╨╡ +╨┐╨╛╨╗╨╜╨╛╤Ж╨╡╨╜╨╜╨╛ ╤А╨░╨▒╨╛╤В╨░╨╡╤В. + ++ ╨┐╤А╨╕ ╤Б╤В╨░╤А╤В╨╡ ╨╖╨░╨┐╨╛╨╝╨╕╨╜╨░╨╡╨╝ ╤В╨╡╨║╤Г╤Й╨╕╨╣ ╤А╨╡╨╢╨╕╨╝ ╤Н╨║╤А╨░╨╜╨░ ╨╕ ╨┐╤А╨╕ ╨▓╤Л╤Е╨╛╨┤╨╡ - ╨▓╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╨╝. + ++ ╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╨╝ ╨▓ ╨▒╤Г╤Д╨╡╤А ╨╕╨╜╤Д╤Г ╤Н╨║╤А╨░╨╜╨░ ╨Ю╨б╨╕, ╨╡╤Б╨╗╨╕ ╤Н╨║╤А╨░╨╜ ╨┤╨╡╨╝╨╛╨╜╨░ ╨╜╨░╤Е╨╛╨┤╨╕╤В╤Б╤П ╨╜╨░ ╤В╨╛╨╣ ╨╢╨╡ ╤Б╤В╤А╨░╨╜╨╕╤Ж╨╡, +╨┐╤А╨╕ ╨▓╤Л╤Е╨╛╨┤╨╡ - ╨▓╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╨╝ + +* ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨░ ╨Я/╨Я ╨┐╤А╨╛╤Б╨╝╨╛╤В╤А╨░ ╨┤╤А╤Г╨│╨╛╨│╨╛ ╤Н╨║╤А╨░╨╜╨░, ╤В╨╡╨┐╨╡╤А╤М ╨╛╨╜╨░ ╤Б ╤Г╤З╨╡╤В╨╛╨╝ ╤В╨╛╨│╨╛, ╤З╤В╨╛ ╨┤╨╡╨╝╨╛╨╜ ╨╕ ╨Ю╨б ╨╝╨╛╨│╤Г╤В ╨▒╤Л╤В╤М ╨╜╨░ ╨╛╨┤╨╜╨╛╨╝ ╤Н╨║╤А╨░╨╜╨╡ + +* ╨╕╨╖╨╝╨╡╨╜╨╡╨╜ ╨╛╨▒╤А╨░╨╖ "╨╜╨╡╨┐╨╡╤З╨░╤В╨░╨╡╨╝╨╛╨│╨╛" ╤Б╨╕╨╝╨▓╨╛╨╗╨░ + ++ ╨┤╨╛╨▒╨░╨▓╨╕╨╗ ╨Я╨Я ╨┐╤А╨╛╤А╨╕╤Б╨╛╨▓╨║╨╕ ╨╛╨║╨╛╨╜ ╨╕ ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ ╨┤╨╕╨░╨╗╨╛╨│╨╛╨▓ - ╨╜╨░ ╨▒╤Г╨┤╤Г╤Й╨╡╨╡ + +b0001 18.02.2011 +* ╨Я╨╡╤А╨╡╨┤╨╡╨╗╨░╨╗ ╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨┐╨╛╨┤ ╨║╤А╨╛╤Б╤Б╨░╤Б╤Б╨╡╨╝╨▒╨╗╨╡╤А sjasmplus. \ No newline at end of file diff --git a/changes.txt b/changes.txt deleted file mode 100644 index 05f8c49..0000000 --- a/changes.txt +++ /dev/null @@ -1,25 +0,0 @@ -DemoN v.0.11 -Hard/WCG - -b0003 20.02.2011 -+ ╧ю ъэюяъх PC яЁшётрштрхЄё  рфЁхё, эр ъюЄюЁюь єёЄрэютыхэ ъєЁёюЁ. - -+ ─юсртшы фшрыюу Load BIN-file, эю х∙х эх фютхы хую фю єьр. - -b0002 19.02.2011 -* ╚чьхэшы яЁюЎхфєЁ√ яхўрЄш ш яЁюЁшёютъш ъєЁёюЁр фы  ЁрсюЄ√ ўхЁхч DSS, Є.ъ. эр ¤ьєы ЄюЁх Demon эх -яюыэюЎхээю ЁрсюЄрхЄ. - -+ яЁш ёЄрЁЄх чряюьшэрхь Єхъє∙шщ Ёхцшь ¤ъЁрэр ш яЁш т√їюфх - тюёёЄрэртыштрхь. - -+ ёюїЁрэ хь т сєЇхЁ шэЇє ¤ъЁрэр ╬╤ш, хёыш ¤ъЁрэ фхьюэр эрїюфшЄё  эр Єющ цх ёЄЁрэшЎх, -яЁш т√їюфх - тюёёЄрэртыштрхь - -* шчьхэхэр ╧/╧ яЁюёьюЄЁр фЁєуюую ¤ъЁрэр, ЄхяхЁ№ юэр ё єўхЄюь Єюую, ўЄю фхьюэ ш ╬╤ ьюуєЄ с√Є№ эр юфэюь ¤ъЁрэх - -* шчьхэхэ юсЁрч "эхяхўрЄрхьюую" ёшьтюыр - -+ фюсртшы ╧╧ яЁюЁшёютъш юъюэ ш юсЁрсюЄъш фшрыюуют - эр сєфє∙хх - -b0001 18.02.2011 -* ╧хЁхфхыры шёїюфэшъ яюф ъЁюёёрёёхьсыхЁ sjasmplus. \ No newline at end of file diff --git a/clock.asm b/clock.asm new file mode 100644 index 0000000..0a7d102 --- /dev/null +++ b/clock.asm @@ -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" diff --git a/cmdline.asm b/cmdline.asm new file mode 100644 index 0000000..49a7f00 --- /dev/null +++ b/cmdline.asm @@ -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 + diff --git a/d010_136.rar b/d010_136.rar deleted file mode 100644 index eb1e91f..0000000 Binary files a/d010_136.rar and /dev/null differ diff --git a/daemon.lst b/daemon.lst deleted file mode 100644 index d2a5a9d..0000000 --- a/daemon.lst +++ /dev/null @@ -1 +0,0 @@ -(0): error: Error opening file: daemon.asm diff --git a/data.asm b/data.asm new file mode 100644 index 0000000..6187425 --- /dev/null +++ b/data.asm @@ -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) \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 \ No newline at end of file diff --git a/demon.asm b/demon.asm new file mode 100644 index 0000000..73bbd3b --- /dev/null +++ b/demon.asm @@ -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 \ No newline at end of file diff --git a/demon.exe b/demon.exe index e83d1d5..1c8ac1f 100644 Binary files a/demon.exe and b/demon.exe differ diff --git a/demon.lst b/demon.lst deleted file mode 100644 index 161b2cf..0000000 --- a/demon.lst +++ /dev/null @@ -1,7807 +0,0 @@ -0001 0000 ;[]=========================================================================[] -0002 0000 ;[] Монитор-отладчик DemoN [] -0003 0000 ;[] v0.01 - последние изменения 10.10.2004 [] -0004 0000 ;[] v0.02 - последние изменения 07.02.2005 [] -0005 0000 ;[] v0.03 - последние изменения 11.03.2006 [] -0006 0000 ;[] v0.10 - последние изменения 27.08.2006 [] -0007 0000 ;[]=========================================================================[] -0008 0000 -0009 0000 DEVICE ZXSPECTRUM128 -0010 0000 -0011 0000 ; define DEBUG 1 ;открытие дебаггерных заглушек -0012 0000 ; define D_PRINTCH_BIOS 1 -0013 0000 -0014 0000 org #8100-512 -0015 7F00 STARTPRG -0016 7F00 45 58 45 DB "EXE" ;EXE ID -0017 7F03 00 DB #00 ;EXE VERSION -0018 7F04 00 02 DW #0200 ;CODE OFFSET LOW -0019 7F06 00 00 DW #0000 ;CODE OFFSET HIGH -0020 7F08 00 00 DW #0000 ;END-BEG ;PRIMARY LOADER -0021 7F0A 00 00 DW #0000 ; -0022 7F0C 00 00 DW #0000 ;RESERVED -0023 7F0E 00 00 DW #0000 ; -0024 7F10 00 81 DW OrgAdr ;LOAD ADDRESS -0025 7F12 00 81 DW OrgAdr ;START ADDRESS -0026 7F14 01 C0 DW #C001 ;STACK ADDRESS -0027 7F16 -0028 7F16 -0029 7F16 OrgAdr equ 0x8100 -0030 7F16 org OrgAdr -0031 8100 ; stack 0xC001 -0032 8100 -0033 8100 DD E5 push ix ;адрес командной строки -0034 8102 DB C2 in a,(EmmWin.P2) ;банка с отладчиком -0035 8104 32 1E AB ld (BankDebug),a -0036 8107 DB 82 in a,(EmmWin.P0) ;банка с OS -0037 8109 32 1F AB ld (BankOS),a -0038 810C ; ld (WinPage),a -0039 810C -0040 810C ; ld (Reg._SP),sp ;адрес стека -0041 810C CD AC 8D call SaveAllRegs ;сохранение регистровых пар -0042 810F ; ld a,(BankDebug) -0043 810F 3E FF ld a,0xFF ;скрываем банку с отладчиком -0044 8111 32 41 AB ld (WinPage+2),a -0045 8114 include "cmdline.asm" -0001+ 8114 ;[]=========================================================================[] -0002+ 8114 ;[] Обработка командной строки монитора-отладчика DemoN [] -0003+ 8114 ;[] v0.10 - последние изменения 08.06.2006 [] -0004+ 8114 ;[] Вход: на стеке адрес начала командной строки в памяти [] -0005+ 8114 ;[] Выход: CF=1 - нет параметров, CF=0 - есть параметры [] -0006+ 8114 ;[]=========================================================================[] -0007+ 8114 CmdLine: -0008+ 8114 E1 pop hl ;начало -0009+ 8115 7E ld a,(hl) ;длина командной строки -0010+ 8116 B7 or a -0011+ 8117 37 scf -0012+ 8118 28 08 jr z,.L1 ;нет параметров -0013+ 811A -0014+ 811A 11 80 94 ld de,FDebug ;буфер -0015+ 811D 23 inc hl -0016+ 811E 0E 43 ld c,Dss.GSwitch ;выделение параметра -0017+ 8120 D7 rst DssRst -0018+ 8121 -0019+ 8121 B7 or a ;CF=0 -0020+ 8122 .L1 -0021+ 8122 ;ret -0022+ 8122 -0023+ 8122 -0046 8122 D4 CE 92 call nc,LoadFile -0047 8125 C3 AA 82 jp Start -0048 8128 -0049 8128 08 HorizLine db 8 ;количество линий -0050 8129 ;1-длина 2-столбец 3-строка 4-символ -0051 8129 db 0x4E,0x01,0x00,0xCD, 0x17,0x01,0x03,0xC4 -0051 8129 4E0100CD170103C4 -0052 8131 db 0x17,0x01,0x09,0xC4, 0x17,0x01,0x0F,0xC4 -0052 8131 170109C417010FC4 -0053 8139 db 0x17,0x01,0x11,0xCD, 0x4E,0x01,0x15,0xCD -0053 8139 170111CD4E0115CD -0054 8141 db 0x4E,0x01,0x1E,0xCD, 0x17,0x01,0x13,0xCD -0054 8141 4E011ECD170113CD -0055 8149 -0056 8149 05 VerticalLine db 5 ;количество линий -0057 814A ;1-высота 2-столбец 3-строка 4-символ -0058 814A db 0x1D,0x00,0x01,0xBA, 0x10,0x09,0x01,0xB3 -0058 814A 1D0001BA100901B3 -0059 8152 db 0x08,0x0C,0x16,0xBA, 0x14,0x18,0x01,0xBA -0059 8152 080C16BA141801BA -0060 815A 1D 4F 01 BA db 0x1D,0x4F,0x01,0xBA -0061 815E -0062 815E 29 Corner db 41 ;углы рамок -0063 815F ;1-столбец 2-строка 3-символ -0064 815F db 0x00,0x00,0xC9, 0x00,0x03,0xC7, 0x00,0x09,0xC7 -0064 815F 0000C90003C70009C7 -0065 8168 db 0x00,0x0F,0xC7, 0x00,0x11,0xCC, 0x00,0x15,0xCC -0065 8168 000FC70011CC0015CC -0066 8171 db 0x00,0x1E,0xC8, 0x06,0x11,0xD1, 0x06,0x13,0xCF -0066 8171 001EC80611D10613CF -0067 817A db 0x09,0x00,0xD1, 0x09,0x03,0xC5, 0x09,0x09,0xC5 -0067 817A 0900D10903C50909C5 -0068 8183 db 0x09,0x0F,0xC5, 0x0C,0x11,0xD1, 0x0C,0x15,0xCB -0068 8183 090FC50C11D10C15CB -0069 818C db 0x0C,0x1E,0xCA, 0x12,0x0F,0xC2, 0x12,0x11,0xD8 -0069 818C 0C1ECA120FC21211D8 -0070 8195 db 0x12,0x13,0xCF, 0x18,0x00,0xCB, 0x18,0x03,0xB6 -0070 8195 1213CF1800CB1803B6 -0071 819E db 0x18,0x09,0xB6, 0x18,0x0F,0xB6, 0x18,0x15,0xCA -0071 819E 1809B6180FB61815CA -0072 81A7 db 0x00,0x13,0xCC, 0x0C,0x13,0xCF, 0x4F,0x00,0xBB -0072 81A7 0013CC0C13CF4F00BB -0073 81B0 db 0x18,0x13,0xB9, 0x4F,0x15,0xB9, 0x4F,0x1E,0xBC -0073 81B0 1813B94F15B94F1EBC -0074 81B9 db 0x18,0x11,0xB9, 0x06,0x12,0xB3, 0x12,0x10,0xB3 -0074 81B9 1811B90612B31210B3 -0075 81C2 db 0x12,0x12,0xB3, 0x09,0x13,0xD1, 0x09,0x14,0xB3 -0075 81C2 1212B30913D10914B3 -0076 81CB db 0x09,0x15,0xCF, 0x0C,0x12,0xB3, 0x0E,0x13,0xCB -0076 81CB 0915CF0C12B30E13CB -0077 81D4 db 0x0E,0x14,0xBA, 0x0E,0x15,0xCA -0077 81D4 0E14BA0E15CA -0078 81DA -0079 81DA TextStrReg db 0x16,0x01,0x01,"IX", 0x16,0x01,0x02,"IY" -0079 81DA 16010149581601024959 -0080 81E4 db 0x16,0x01,0x04,"HL", 0x16,0x01,0x05,"DE" -0080 81E4 160104484C1601054445 -0081 81EE db 0x16,0x01,0x06,"BC", 0x16,0x01,0x07,"AF" -0081 81EE 16010642431601074146 -0082 81F8 db 0x16,0x01,0x0A,"HL'", 0x16,0x01,0x0B,"DE'" -0082 81F8 16010A484C2716010B444527 -0083 8204 db 0x16,0x01,0x0C,"BC'", 0x16,0x01,0x0D,"AF'" -0083 8204 16010C42432716010D414627 -0084 8210 db 0x16,0x01,0x10,"PC", 0x16, 0x0A,0x10,"IR" -0084 8210 1601105043160A104952 -0085 821A db 0x16,0x01,0x14,"SP",0 -0085 821A 160114535000 -0086 8220 TextStrLogo db 0x016,0x01,0x1F,0xC4,0xCD,0xCD -0086 8220 16011FC4CDCD -0087 8226 db " DemoN v" -0087 8226 2044656D6F4E2076 -0088 822E incbin "VERSION\major.bin" -0089 822F 2E db "." -0090 8230 incbin "VERSION\minor.bin" -0091 8232 db " build " -0091 8232 206275696C6420 -0092 8239 incbin "VERSION\build.bin" -0093 823D db " (alpha)-" -0093 823D 2028616C706861292D -0094 8246 incbin "VERSION\date.bin" -0095 824C db " Igor by AlphA Studio, Hard/WCG" -0095 824C 2049676F7220627920416C7068412053747564696F2C20486172642F574347 -0096 826B 20CDCDC400 db 0x20,0xCD,0xCD,0xC4,0x00 -0097 8270 TextStrWin db 0x16,0x02,0x11," 0 ",0x16,0x08,0x11," 1 " -0097 8270 160211203020160811203120 -0098 827C db 0x16,0x0E,0x11," 2 ",0x16,0x14,0x11," 3 ",0 -0098 827C 160E1120322016141120332000 -0099 8289 TextStrRez db 0x16,0x0F,0x14,"REZ",0 -0099 8289 160F1452455A00 -0100 8290 -0101 8290 -0102 8290 ;Процедура прорисовки линий -0103 8290 ;HL - адрес начала таблицы -0104 8290 4E DrawLine ld c,(hl) ;количество линий -0105 8291 23 inc hl -0106 8292 46 ld b,(hl) ;длина линии -0107 8293 23 inc hl -0108 8294 5E ld e,(hl) ;столбец -0109 8295 23 inc hl -0110 8296 56 ld d,(hl) ;строка -0111 8297 23 inc hl -0112 8298 7E ld a,(hl) ;символ -0113 8299 E5 push hl -0114 829A C5 .L1 push bc -0115 829B F5 push af -0116 829C 01 58 00 ld bc,Dss.WrChar ;цвет в рег.B -0117 829F D7 rst DssRst -0118 82A0 14 inc d ;наращивание координаты -0119 82A1 F1 pop af -0120 82A2 C1 pop bc -0121 82A3 10 F5 djnz .L1 -0122 82A5 E1 pop hl -0123 82A6 0D dec c -0124 82A7 20 E8 jr nz,DrawLine+1 -0125 82A9 C9 ret -0126 82AA -0127 82AA ;Начало программы -0128 82AA Start: -0129 82AA 21 62 AA ld hl,Hello ;сообщение программы -0130 82AD 0E 5C ld c,Dss.PChars ;вывести строку -0131 82AF D7 rst DssRst -0132 82B0 0E 51 ld c,Dss.GetVMod ;Текущий граф режим -0133 82B2 D7 rst DssRst -0134 82B3 DA 09 88 jp c,Exit -0135 82B6 32 60 AA ld (OSGrafMode),a -0136 82B9 78 ld a,b -0137 82BA 32 5F AA ld (OSScreen),a ;и текущая страница экрана -0138 82BD C5 push bc -0139 82BE 01 3D 01 ld bc,#0100+Dss.GetMem ;резервируем 1 страницу для оконного буфера -0140 82C1 D7 rst DssRst -0141 82C2 D1 pop de ;В D - номер страницы экрана - OSScreen -0142 82C3 DA 09 88 jp c,Exit ;Ошибка выделения блока памяти -0143 82C6 32 61 AA ld (BufPage),a ;Сохраним страницу в переменной -0144 82C9 47 ld b,a -0145 82CA 3A 5E AA ld a,(DemonScreen) -0146 82CD BA cp d ;если экраны ОС и Демона не совпадают -0147 82CE 20 0D jr nz,StartNext ;то и не сохраняем экран ОСи -0148 82D0 11 00 00 ld de,0 ;Сохраняем экран в доп.странице -0149 82D3 21 50 20 ld hl,#2050 -0150 82D6 DD 21 00 C0 ld ix,#c000 -0151 82DA 0E 59 ld c,Dss.WinCopy -0152 82DC D7 rst DssRst -0153 82DD -0154 82DD 3A 5E AA StartNext ld a,(DemonScreen) ;экран отладчика -0155 82E0 47 ld b,a -0156 82E1 3E 03 ld a,3 ;установить режим 80х32 -0157 82E3 0E 50 ld c,Dss.SetVMod ;Dss.SelPage -0158 82E5 ; ld bc,0x0054 -0159 82E5 D7 rst DssRst -0160 82E6 ifdef D_PRINTCH_BIOS -0161 82E6~ ld ix,MainWin ;Открытие окна ч/з биос -0162 82E6~ ld e,00010001b -0163 82E6~ rst BiosRst -0164 82E6~ ld (Demon.Bios_Win),a -0165 82E6~ ; jr nc,.lp1 -0166 82E6~ ; ld c,Dss.EchoKey ;дебуггерная заглушка -0167 82E6~ ; rst DssRst -0168 82E6~ 0169 82E6 endif -0170 82E6 .lp1 -0171 82E6 ; ld a,(Color._SP) ;подсветка вершины стека -0172 82E6 ; ld b,a -0173 82E6 ; ld de,0x1C01 -0174 82E6 ; ld hl,0x010B -0175 82E6 ; ld a," " -0176 82E6 ; ld c,Dss.Clear -0177 82E6 ; rst DssRst -0178 82E6 CD 01 83 call ClearScreen -0179 82E9 CD 0F 83 call DrawDemonScreen -0180 82EC -0181 82EC ; ld c,Dss.EchoKey ;дебуггерная заглушка -0182 82EC ; rst DssRst -0183 82EC -0184 82EC C3 00 88 jp Start1 -0185 82EF ;Обновление экрана демона -0186 82EF CD 35 92 RefreshScreen call CursorRes -0187 82F2 CD 01 83 call ClearScreen -0188 82F5 CD 0F 83 call DrawDemonScreen -0189 82F8 CD 3C 88 call Refresh -0190 82FB CD B3 99 call Cursor ;вкл курсор -0191 82FE C3 D3 91 jp CursorSet -0192 8301 -0193 8301 3A 11 AB ClearScreen ld a,(Color.Screen) -0194 8304 47 ld b,a ;очистка экрана -0195 8305 11 00 00 ld de,0 -0196 8308 21 50 20 ld hl,0x2050 -0197 830B 0E 89 ld c,Bios.Lp_Cls_Win -0198 830D CF rst BiosRst -0199 830E C9 ret -0200 830F DrawDemonScreen -0201 830F 3A 12 AB ld a,(Color.Border) ;установка цвета рамки -0202 8312 32 9E 82 ld (DrawLine.L1+4),a -0203 8315 32 3C 83 ld (DrawCorner+10),a -0204 8318 3E 14 ld a,0x14 ;код мнемоники INC D -0205 831A 32 A0 82 ld (DrawLine.L1+6),a -0206 831D -0207 831D 21 49 81 ld hl,VerticalLine ;вертикальные линии -0208 8320 CD 90 82 call DrawLine -0209 8323 -0210 8323 21 28 81 ld hl,HorizLine ;горизонтальные линии -0211 8326 3E 1C ld a,0x1C ;код мнемоники INC E -0212 8328 32 A0 82 ld (DrawLine.L1+6),a -0213 832B CD 90 82 call DrawLine -0214 832E -0215 832E 21 5E 81 ld hl,Corner -0216 8331 46 ld b,(hl) ;количество углов -0217 8332 C5 DrawCorner push bc -0218 8333 23 inc hl -0219 8334 5E ld e,(hl) ;столбец -0220 8335 23 inc hl -0221 8336 56 ld d,(hl) ;строка -0222 8337 23 inc hl -0223 8338 7E ld a,(hl) ;символ -0224 8339 E5 push hl -0225 833A 01 58 00 ld bc,Dss.WrChar ;цвет в рег.B -0226 833D D7 rst DssRst -0227 833E E1 pop hl -0228 833F C1 pop bc -0229 8340 10 F0 djnz DrawCorner -0230 8342 -0231 8342 21 DA 81 ld hl,TextStrReg -0232 8345 3A 13 AB ld a,(Color.TextStrReg) ;цвет регистровых пар -0233 8348 32 5C 8E ld (PrnStrColor.L1+5),a -0234 834B CD 32 8E call PrnStrColor -0235 834E 21 70 82 ld hl,TextStrWin -0236 8351 3A 14 AB ld a,(Color.TextStrWin) ;цвет номеров окон -0237 8354 32 5C 8E ld (PrnStrColor.L1+5),a -0238 8357 CD 32 8E call PrnStrColor -0239 835A 21 20 82 ld hl,TextStrLogo -0240 835D 3A 18 AB ld a,(Color.TextStrLogo) ;цвет лого программы -0241 8360 32 5C 8E ld (PrnStrColor.L1+5),a -0242 8363 CD 32 8E call PrnStrColor -0243 8366 21 89 82 ld hl,TextStrRez -0244 8369 3A 17 AB ld a,(Color.RezArea) ;цвет резидента -0245 836C 32 5C 8E ld (PrnStrColor.L1+5),a -0246 836F CD 32 8E call PrnStrColor -0247 8372 C9 ret -0248 8373 00 ds OrgAdr+0x700-$ -0249 8800 Start1: -0250 8800 CD E4 9E call PreparChar ;подготовка программного курсора ввода -0251 8803 ; ld hl,(Reg._PC) -0252 8803 ; ld hl,0 -0253 8803 ; ld (ListAdr),hl -0254 8803 -0255 8803 CD 3C 88 call Refresh -0256 8806 CD 51 98 call Keyb -0257 8809 -0258 8809 Exit: -0259 8809 2A 31 9F ld hl,(Rst38.Vect+1) ;восстановление вектора DSS -0260 880C 22 39 00 ld (0039h),hl -0261 880F -0262 880F 3A 5F AA ld a,(OSScreen) ;и текущая страница экрана -0263 8812 47 ld b,a -0264 8813 C5 push bc -0265 8814 3A 60 AA ld a,(OSGrafMode) -0266 8817 0E 50 ld c,Dss.SetVMod -0267 8819 -0268 8819 ; ld bc,0x0100+Dss.SelPage ;восстановление экрана DSS -0269 8819 D7 rst DssRst -0270 881A C1 pop bc -0271 881B 3A 5E AA ld a,(DemonScreen) -0272 881E B8 cp b -0273 881F 20 16 jr nz,ExitNext -0274 8821 11 00 00 ld de,0 ;Восстанавливаем экран из доп.страницы -0275 8824 21 50 20 ld hl,#2050 -0276 8827 DD 21 00 C0 ld ix,#c000 -0277 882B 0E 5A ld c,Dss.WinRest -0278 882D 3A 61 AA ld a,(BufPage) -0279 8830 F5 push af -0280 8831 47 ld b,a -0281 8832 D7 rst DssRst -0282 8833 F1 pop af -0283 8834 0E 3E ld c,Dss.FreeMem ;Отдаем страницу буфера обратно ОСи -0284 8836 D7 rst DssRst -0285 8837 -0286 8837 ExitNext -0287 8837 01 41 00 ld bc,Dss.Exit ;нормальное завершение -0288 883A D7 rst DssRst -0289 883B C9 Return ret -0290 883C -0291 883C Refresh: -0292 883C F3 di -0293 883D 11 04 01 ld de,0x0104 ;вывод значений регистров -0294 8840 2A 25 AB ld hl,(Reg._IX) -0295 8843 CD 13 8F call PrintStrReg -0296 8846 11 04 02 ld de,0x0204 -0297 8849 2A 27 AB ld hl,(Reg._IY) -0298 884C CD 13 8F call PrintStrReg -0299 884F 11 04 04 ld de,0x0404 -0300 8852 2A 29 AB ld hl,(Reg._HL) -0301 8855 CD 13 8F call PrintStrReg -0302 8858 11 04 05 ld de,0x0504 -0303 885B 2A 2B AB ld hl,(Reg._DE) -0304 885E CD 13 8F call PrintStrReg -0305 8861 11 04 06 ld de,0x0604 -0306 8864 2A 2D AB ld hl,(Reg._BC) -0307 8867 CD 13 8F call PrintStrReg -0308 886A 11 04 0A ld de,0x0A04 -0309 886D 2A 31 AB ld hl,(Reg._HL_) -0310 8870 CD 13 8F call PrintStrReg -0311 8873 11 04 0B ld de,0x0B04 -0312 8876 2A 33 AB ld hl,(Reg._DE_) -0313 8879 CD 13 8F call PrintStrReg -0314 887C 11 04 0C ld de,0x0C04 -0315 887F 2A 35 AB ld hl,(Reg._BC_) -0316 8882 CD 13 8F call PrintStrReg -0317 8885 11 04 07 ld de,0x0704 -0318 8888 2A 2F AB ld hl,(Reg._AF) -0319 888B CD 9D 8E call PrintStrAF -0320 888E 11 04 0D ld de,0x0D04 -0321 8891 2A 37 AB ld hl,(Reg._AF_) -0322 8894 CD 9D 8E call PrintStrAF -0323 8897 11 04 10 ld de,0x1004 -0324 889A 2A 3D AB ld hl,(Reg._PC) -0325 889D CD 67 8E call PrintReg -0326 88A0 11 0D 10 ld de,0x100D -0327 88A3 2A 39 AB ld hl,(Reg._IR) -0328 88A6 CD 67 8E call PrintReg -0329 88A9 11 04 14 ld de,0x1404 -0330 88AC 2A 3B AB ld hl,(Reg._SP) -0331 88AF CD 67 8E call PrintReg -0332 88B2 CD AE 8F call PrintSPDn -0333 88B5 11 13 14 ld de,0x1413 -0334 88B8 2A 20 AB ld hl,(RezAdr) -0335 88BB CD 67 8E call PrintReg -0336 88BE -0337 88BE CD 76 8F call PrintStrWin ;вывод номеров банок в окнах -0338 88C1 -0339 88C1 CD F5 8F call PrintStrSP ;вывод дампа стека -0340 88C4 -0341 88C4 CD 67 90 call PrintDump -0342 88C7 FB ei -0343 88C8 C3 54 89 jp DisAsm -0344 88CB -0345 88CB CD 35 92 DemonHelp call CursorRes -0346 88CE DD 21 D5 88 ld ix,HelpWnd -0347 88D2 C3 D5 B9 jp DialogWindow -0348 88D5 -0349 88D5 ; ld hl,HelpWndDlg -0350 88D5 ; jp WinDialog -0351 88D5 HelpWnd db 6,16,11,42,7,#27 -0351 88D5 06100B2A0727 -0352 88DB db "DemoN Help Page",0 -0352 88DB 44656D6F4E2048656C70205061676500 -0353 88EB db " DemoN v" -0353 88EB 2044656D6F4E2076 -0354 88F3 incbin "VERSION\major.bin" -0355 88F4 2E db "." -0356 88F5 incbin "VERSION\minor.bin" -0357 88F7 db " build " -0357 88F7 206275696C6420 -0358 88FE incbin "VERSION\build.bin" -0359 8902 db " (alpha)-" -0359 8902 2028616C706861292D -0360 890B incbin "VERSION\date.bin" -0361 8911 0D db 0x0D -0362 8912 db " Igor by AlphA Studio, Hard/WCG",0x0D,0x0D -0362 8912 2020202049676F7220627920416C7068412053747564696F2C20486172642F57 -0362 8932 43470D0D -0363 8936 db " OK",0 -0363 8936 2020202020202020202020202020202020204F4B00 -0364 894B 01 HelpWndDlg db 1 ;Описатель диалогового окна -0365 894C 23 10 04 02 db 16+19,16,4,2 -0366 8950 00 00 00 00 dw 0,0 -0367 8954 -0368 8954 include "EQU\dss_equ.asm";"D:\WORKAST\EQU\dss_equ" -0001+ 8954 DssRst EQU #10 -0002+ 8954 -0003+ 8954 Dss.Version EQU #00 -0004+ 8954 Dss.ChDisk EQU #01 -0005+ 8954 Dss.CurDisk EQU #02 -0006+ 8954 Dss.DskInfo EQU #03 -0007+ 8954 ;Dss.G_ENTRY EQU #04 -0008+ 8954 ; EQU #05 -0009+ 8954 ; EQU #06 -0010+ 8954 ; EQU #07 -0011+ 8954 ; EQU #08 -0012+ 8954 Dss.BOOTDSK EQU #09 -0013+ 8954 ;File io -0014+ 8954 Dss.Create EQU #0A -0015+ 8954 Dss.Creat_N EQU #0B -0016+ 8954 ; EQU #0C -0017+ 8954 ;Dss.ERASE EQU #0D -0018+ 8954 Dss.Delete EQU #0E -0019+ 8954 ;Dss.Move EQU #0F -0020+ 8954 Dss.Rename EQU #10 -0021+ 8954 Dss.Open EQU #11 -0022+ 8954 Dss.Close EQU #12 -0023+ 8954 Dss.Read EQU #13 -0024+ 8954 Dss.Write EQU #14 -0025+ 8954 Dss.Move_FP EQU #15 -0026+ 8954 Dss.Attrib EQU #16 -0027+ 8954 Dss.Get_D_T EQU #17 -0028+ 8954 Dss.Put_D_T EQU #18 -0029+ 8954 Dss.F_First EQU #19 -0030+ 8954 Dss.F_Next EQU #1A -0031+ 8954 Dss.MkDir EQU #1B -0032+ 8954 Dss.RmDir EQU #1C -0033+ 8954 Dss.ChDir EQU #1D -0034+ 8954 Dss.CurDir EQU #1E -0035+ 8954 ; EQU #1F -0036+ 8954 ; EQU #20 -0037+ 8954 Dss.SysTime EQU #21 -0038+ 8954 Dss.SetTime EQU #22 -0039+ 8954 ; EQU #23 -0040+ 8954 ; EQU #24 -0041+ 8954 ; EQU #25 -0042+ 8954 ; EQU #26 -0043+ 8954 ; EQU #27 -0044+ 8954 ; EQU #28 -0045+ 8954 ; EQU #29 -0046+ 8954 ; EQU #2A -0047+ 8954 ; EQU #2B -0048+ 8954 ; EQU #2C -0049+ 8954 ; EQU #2D -0050+ 8954 ; EQU #2E -0051+ 8954 ; EQU #2F -0052+ 8954 ;Keyboard -0053+ 8954 Dss.WaitKey EQU #30 -0054+ 8954 Dss.ScanKey EQU #31 -0055+ 8954 Dss.EchoKey EQU #32 -0056+ 8954 Dss.CTRLKey EQU #33 -0057+ 8954 ;Dss.EDIT EQU #34 -0058+ 8954 Dss.K_CLEAR EQU #35 -0059+ 8954 Dss.K_SETUP EQU #36 -0060+ 8954 Dss.TESTKEY EQU #37 -0061+ 8954 ;Memory -0062+ 8954 Dss.SetWin EQU #38 -0063+ 8954 Dss.SetWin1 EQU #39 -0064+ 8954 Dss.SetWin2 EQU #3A -0065+ 8954 Dss.SetWin3 EQU #3B -0066+ 8954 Dss.INFOMEM EQU #3C -0067+ 8954 Dss.GetMem EQU #3D -0068+ 8954 Dss.FreeMem EQU #3E -0069+ 8954 Dss.SetMem EQU #3F -0070+ 8954 ;Execution -0071+ 8954 Dss.Exec EQU #40 -0072+ 8954 Dss.Exit EQU #41 -0073+ 8954 Dss.Wait EQU #42 -0074+ 8954 -0075+ 8954 Dss.GSwitch EQU #43 -0076+ 8954 Dss.DosName EQU #44 -0077+ 8954 Dss.EX_Path EQU #45 -0078+ 8954 Dss.Environ EQU #46 -0079+ 8954 Dss.AppInfo EQU #47 -0080+ 8954 ; EQU #48 -0081+ 8954 ; EQU #49 -0082+ 8954 ; EQU #4A -0083+ 8954 ; EQU #4B -0084+ 8954 ; EQU #4C -0085+ 8954 ; EQU #4D -0086+ 8954 ; EQU #4E -0087+ 8954 ; EQU #4F -0088+ 8954 -0089+ 8954 Dss.SetVMod EQU #50 -0090+ 8954 Dss.GetVMod EQU #51 -0091+ 8954 Dss.Locate EQU #52 -0092+ 8954 Dss.Cursor EQU #53 -0093+ 8954 Dss.SelPage EQU #54 -0094+ 8954 Dss.Scroll EQU #55 -0095+ 8954 Dss.Clear EQU #56 -0096+ 8954 Dss.RdChar EQU #57 -0097+ 8954 Dss.WrChar EQU #58 -0098+ 8954 Dss.WinCopy EQU #59 -0099+ 8954 Dss.WinRest EQU #5A -0100+ 8954 Dss.PutChar EQU #5B -0101+ 8954 Dss.PChars EQU #5C -0102+ 8954 ;Dss.RES_PRN EQU #5D -0103+ 8954 ;Dss.CTRLPRN EQU #5E -0104+ 8954 Dss.Print EQU #5F -0105+ 8954 ; -0106+ 8954 -0369 8954 include "EQU\bios_equ.asm";"D:\WORKAST\EQU\bios_equ" -0001+ 8954 BiosRst EQU #08 -0002+ 8954 -0003+ 8954 ;Функции работы с памятью -0004+ 8954 Bios.Emm_Fn0 EQU #C0 -0005+ 8954 Bios.Emm_Fn1 EQU #C1 -0006+ 8954 Bios.Emm_Fn2 EQU #C2 -0007+ 8954 Bios.Emm_Fn3 EQU #C3 -0008+ 8954 Bios.Emm_Fn4 EQU #C4 -0009+ 8954 Bios.Emm_Fn5 EQU #C5 -0010+ 8954 Bios.Emm_Fn6 EQU #C6 -0011+ 8954 Bios.Emm_Fn7 EQU #C7 -0012+ 8954 Bios.Emm_Fn8 EQU #C8 -0013+ 8954 Bios.Emm_Fn9 EQU #C9 -0014+ 8954 -0015+ 8954 -0016+ 8954 ;Функции управления окнами и режимами экрана -0017+ 8954 Bios.Win_Open EQU #B0 -0018+ 8954 Bios.Win_Close EQU #B1 -0019+ 8954 Bios.Win_Copy_Win EQU #B2 -0020+ 8954 Bios.Win_Restore_Win EQU #B3 -0021+ 8954 Bios.Win_Get_Sym EQU #B4 -0022+ 8954 Bios.Win_Put_Sym EQU #B5 -0023+ 8954 Bios.Win_Set_ZG EQU #B6 -0024+ 8954 Bios.Win_Move_Win EQU #B7 -0025+ 8954 Bios.Win_Get_ZG EQU #B8 -0026+ 8954 -0027+ 8954 -0028+ 8954 -0029+ 8954 ;Функции вывода текста на экран -0030+ 8954 Bios.Lp_Print_All EQU #81 -0031+ 8954 Bios.Lp_Print_Sym EQU #82 -0032+ 8954 Bios.Lp_Print_Atr EQU #83 -0033+ 8954 Bios.Lp_Set_Place EQU #84 -0034+ 8954 Bios.Lp_Print_Ln EQU #85 -0035+ 8954 Bios.Lp_Print_Ln2 EQU #86 -0036+ 8954 Bios.Lp_Print_Ln3 EQU #87 -0037+ 8954 Bios.Lp_Print_Ln4 EQU #88 -0038+ 8954 Bios.Lp_Cls_Win EQU #89 -0039+ 8954 Bios.Lp_Scroll_Up EQU #8A -0040+ 8954 Bios.Lp_Print_Ln5 EQU #8B -0041+ 8954 Bios.Lp_Print_Ln6 EQU #8C -0042+ 8954 Bios.Lp_Cls_Win2 EQU #8D -0043+ 8954 Bios.Lp_Get_Place EQU #8E -0044+ 8954 -0045+ 8954 ;Функции работы с жесткими дисками и дисководами -0046+ 8954 Bios.Drv_Reset EQU #51 -0047+ 8954 Bios.Drv_Verify EQU #54 -0048+ 8954 Bios.Drv_Read EQU #55 -0049+ 8954 Bios.Drv_Write EQU #56 -0050+ 8954 Bios.Drv_Detect EQU #57 -0051+ 8954 Bios.Drv_Get_Par EQU #58 -0052+ 8954 Bios.Drv_Set_Par EQU #59 -0053+ 8954 Bios.Ext_Version EQU #5A -0054+ 8954 Bios.Drv_List EQU #5F -0055+ 8954 -0056+ 8954 -0057+ 8954 -0058+ 8954 -0059+ 8954 -0060+ 8954 -0370 8954 include "EQU\port.asm";"D:\WORKAST\EQU\port" -0001+ 8954 EmmWin.P0 EQU #82 -0002+ 8954 EmmWin.P1 EQU #A2 -0003+ 8954 EmmWin.P2 EQU #C2 -0004+ 8954 EmmWin.P3 EQU #E2 -0005+ 8954 -0371 8954 include "disasm.asm";"D:\WORKAST\DEMON\disasm" -0001+ 8954 ;[]=========================================================================[] -0002+ 8954 ;[] Дизассемблер монитора-отладчика DemoN [] -0003+ 8954 ;[] v0.01 - последние изменения 10.10.2004 [] -0004+ 8954 ;[] v0.02 - последние изменения 20.03.2005 [] -0005+ 8954 ;[] v0.03 - последние изменения 16.02.2006 [] -0006+ 8954 ;[] v0.10 - последние изменения 10.09.2006 [] -0007+ 8954 ;[] [] -0008+ 8954 ;[] DisAsm - вывод листинга [] -0009+ 8954 ;[] AttrList - вывод атрибутов строки листинга [] -0010+ 8954 ;[] UpAdres - расчет предыдущего адреса строки листинга [] -0011+ 8954 ;[] List - формирование строки листинга [] -0012+ 8954 ;[]=========================================================================[] -0013+ 8954 -0014+ 8954 ;[]=========================================================================[] -0015+ 8954 ;[] Вывод листинга [] -0016+ 8954 ;[]=========================================================================[] -0017+ 8954 DisAsm: -0018+ 8954 2A 55 AB ld hl,(ListAdr) ;адрес первой строки листинга -0019+ 8957 11 1A 01 ld de,0x011A ;координаты печати -0020+ 895A D5 .L1 push de -0021+ 895B E5 push hl -0022+ 895C D5 push de -0023+ 895D 7A ld a,d -0024+ 895E 3D dec a -0025+ 895F 87 add a,a -0026+ 8960 4F ld c,a -0027+ 8961 06 00 ld b,0 -0028+ 8963 EB ex de,hl -0029+ 8964 21 55 AB ld hl,ListAdr -0030+ 8967 09 add hl,bc -0031+ 8968 73 ld (hl),e ;адрес строки листинга -0032+ 8969 23 inc hl -0033+ 896A 72 ld (hl),d -0034+ 896B EB ex de,hl -0035+ 896C D1 pop de -0036+ 896D -0037+ 896D CD 9B 89 call AttrList ;окрасить строку -0038+ 8970 -0039+ 8970 CD 67 8E .L2 call PrintReg -0040+ 8973 E1 pop hl -0041+ 8974 CD 42 8A call List -0042+ 8977 D1 pop de -0043+ 8978 -0044+ 8978 ; push af ;длина кода временно -0045+ 8978 -0046+ 8978 3A 7D AB ld a,(ListFormat) ;форматный вывод -0047+ 897B B7 or a -0048+ 897C C4 0C 8A call nz,LFormat -0049+ 897F -0050+ 897F D5 push de -0051+ 8980 E5 push hl -0052+ 8981 F3 di -0053+ 8982 3E 15 ld a,21 -0054+ 8984 83 add a,e -0055+ 8985 5F ld e,a ;новая координата X -0056+ 8986 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0057+ 8988 CF rst BiosRst -0058+ 8989 ; ld c,Dss.Locate -0059+ 8989 ; rst DssRst -0060+ 8989 21 87 8D ld hl,List.String -0061+ 898C 01 86 20 ld bc,32*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0062+ 898F CF rst BiosRst -0063+ 8990 FB ei -0064+ 8991 ; ld c,Dss.PChars -0065+ 8991 ; rst DssRst -0066+ 8991 E1 pop hl -0067+ 8992 D1 pop de -0068+ 8993 -0069+ 8993 ;печать длины кода в поле метки (временно) -0070+ 8993 ; pop af -0071+ 8993 ; push de -0072+ 8993 ; push hl -0073+ 8993 ; ld e,0x24 -0074+ 8993 ; push de -0075+ 8993 ; ld h,0 -0076+ 8993 ; ld l,a -0077+ 8993 ; ld de,.Buf -0078+ 8993 ; call NumToStr8 -0079+ 8993 ; pop de -0080+ 8993 ; ld c,Dss.Locate -0081+ 8993 ; rst DssRst -0082+ 8993 ; ld hl,.Buf -0083+ 8993 ; ld c,Dss.PChars -0084+ 8993 ; rst DssRst -0085+ 8993 ; pop hl -0086+ 8993 ; pop de -0087+ 8993 ; jr $+5 -0088+ 8993 ;.Buf db "123",0 -0089+ 8993 ;end (временно) -0090+ 8993 -0091+ 8993 14 inc d ;следующая строка -0092+ 8994 3A C3 9B ld a,(KList.Descript) ;кол-во строк листинга -0093+ 8997 BA cp d -0094+ 8998 30 C0 jr nc,.L1 -0095+ 899A C9 ret -0096+ 899B -0097+ 899B ;[]=========================================================================[] -0098+ 899B ;[] Вывод атрибутов строки листинга [] -0099+ 899B ;[] Вход: DE - координаты подсветки [] -0100+ 899B ;[] HL - текущий адрес листинга [] -0101+ 899B ;[]=========================================================================[] -0102+ 899B AttrList: -0103+ 899B F3 di -0104+ 899C E5 push hl ;текущий адрес листинга -0105+ 899D D5 push de ;текущие координаты -0106+ 899E -0107+ 899E E5 push hl -0108+ 899F ED 4B 3D AB ld bc,(Reg._PC) ;адрес программного счетчика -0109+ 89A3 B7 or a ;сброс флага C -0110+ 89A4 ED 42 sbc hl,bc -0111+ 89A6 E1 pop hl -0112+ 89A7 20 05 jr nz,.L2 -0113+ 89A9 3A 16 AB ld a,(Color._PC) ;цвет программного курсора -0114+ 89AC 18 20 jr .L0 -0115+ 89AE -0116+ 89AE E5 .L2 push hl -0117+ 89AF D5 push de -0118+ 89B0 E5 push hl -0119+ 89B1 01 7D 00 ld bc,Rezident.End-Rezident;длина резидента -0120+ 89B4 2A 20 AB ld hl,(RezAdr) ;начало резидента -0121+ 89B7 E5 push hl -0122+ 89B8 09 add hl,bc ;конечный адрес резидента -0123+ 89B9 D1 pop de -0124+ 89BA 1B dec de -0125+ 89BB 1B dec de -0126+ 89BC 1B dec de -0127+ 89BD 1B dec de -0128+ 89BE C1 pop bc -0129+ 89BF -0130+ 89BF CD C4 92 call AdrArea -0131+ 89C2 D1 pop de -0132+ 89C3 E1 pop hl -0133+ 89C4 38 05 jr c,.L3 -0134+ 89C6 3A 17 AB ld a,(Color.RezArea) ;цвет области размещения резидента -0135+ 89C9 18 03 jr .L0 -0136+ 89CB -0137+ 89CB 3A 11 AB .L3 ld a,(Color.Screen) ;основной цвет -0138+ 89CE -0139+ 89CE 32 D6 89 .L0 ld (.L1+1),a -0140+ 89D1 1D dec e -0141+ 89D2 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0142+ 89D4 CF rst BiosRst -0143+ 89D5 1E 00 .L1 ld e,0 ;цвет подсветки -0144+ 89D7 01 83 36 ld bc,54*256+Bios.Lp_Print_Atr ;в рег.B длина строки -0145+ 89DA CF rst BiosRst -0146+ 89DB D1 pop de -0147+ 89DC E1 pop hl -0148+ 89DD FB ei -0149+ 89DE C9 ret -0150+ 89DF -0151+ 89DF ;[]=========================================================================[] -0152+ 89DF ;[] Расчет предыдущего адреса строки листинга [] -0153+ 89DF ;[] Вход: HL - адрес текущей строки [] -0154+ 89DF ;[] Выход: HL - адрес предыдущей строки [] -0155+ 89DF ;[]=========================================================================[] -0156+ 89DF UpAdres: -0157+ 89DF 11 FC FF ld de,-4 -0158+ 89E2 19 add hl,de ;4-х байтная команда? -0159+ 89E3 CD 6C 92 call Ld_a_hl -0160+ 89E6 ; ld a,(hl) -0161+ 89E6 FE DD cp 0xDD ;префикс 0xDD -0162+ 89E8 28 06 jr z,$+8 -0163+ 89EA F6 30 or 00110000b ;маска для префиксов 0xED,0xFD -0164+ 89EC FE FD cp 0xFD -0165+ 89EE 20 08 jr nz,.L1 -0166+ 89F0 E5 push hl -0167+ 89F1 CD 42 8A call List -0168+ 89F4 E1 pop hl -0169+ 89F5 FE 04 cp 4 -0170+ 89F7 C8 ret z -0171+ 89F8 -0172+ 89F8 23 .L1 inc hl -0173+ 89F9 E5 push hl ;3-х байтная команда? -0174+ 89FA CD 42 8A call List -0175+ 89FD E1 pop hl -0176+ 89FE FE 03 cp 3 -0177+ 8A00 C8 ret z -0178+ 8A01 -0179+ 8A01 23 inc hl -0180+ 8A02 E5 push hl ;2-х байтная команда? -0181+ 8A03 CD 42 8A call List -0182+ 8A06 E1 pop hl -0183+ 8A07 FE 02 cp 2 -0184+ 8A09 C8 ret z -0185+ 8A0A -0186+ 8A0A 23 inc hl -0187+ 8A0B C9 ret ;1-о байтная команда! -0188+ 8A0C -0189+ 8A0C ;[]=========================================================================[] -0190+ 8A0C ;[] Форматирование строки листинга [] -0191+ 8A0C ;[]=========================================================================[] -0192+ 8A0C LFormat: -0193+ 8A0C E5 push hl -0194+ 8A0D 21 92 8D ld hl,List.String+11 ;начало строки -0195+ 8A10 01 02 00 ld bc,2 ;макс кол-во вставляемых пробелов -0196+ 8A13 7E .L2 ld a,(hl) -0197+ 8A14 B7 or a -0198+ 8A15 28 08 jr z,.Exit -0199+ 8A17 FE 20 cp 0x20 ;пробел -0200+ 8A19 28 06 jr z,.L1 -0201+ 8A1B 23 inc hl -0202+ 8A1C 0D dec c -0203+ 8A1D 20 F4 jr nz,.L2 -0204+ 8A1F -0205+ 8A1F E1 .Exit pop hl -0206+ 8A20 C9 ret -0207+ 8A21 -0208+ 8A21 D5 .L1 push de -0209+ 8A22 C5 push bc -0210+ 8A23 E5 push hl -0211+ 8A24 21 A5 8D ld hl,List.String+30 ;конец строки -0212+ 8A27 54 ld d,h -0213+ 8A28 5D ld e,l -0214+ 8A29 B7 or a -0215+ 8A2A ED 42 sbc hl,bc -0216+ 8A2C C1 pop bc -0217+ 8A2D C5 push bc -0218+ 8A2E E5 push hl -0219+ 8A2F ED 42 sbc hl,bc ;кол-во байт -0220+ 8A31 44 ld b,h -0221+ 8A32 4D ld c,l -0222+ 8A33 E1 pop hl -0223+ 8A34 ED B8 lddr -0224+ 8A36 E1 pop hl -0225+ 8A37 C1 pop bc ;кол-во пробелов -0226+ 8A38 41 ld b,c -0227+ 8A39 23 .L3 inc hl ;адрес вставки -0228+ 8A3A 3E 20 ld a,0x20 -0229+ 8A3C 77 ld (hl),a -0230+ 8A3D 10 FA djnz .L3 -0231+ 8A3F D1 pop de -0232+ 8A40 E1 pop hl -0233+ 8A41 C9 ret -0234+ 8A42 -0235+ 8A42 ;[]=========================================================================[] -0236+ 8A42 ;[] Формирование строки листинга [] -0237+ 8A42 ;[] Вход: HL - адрес памяти дизассемблирования [] -0238+ 8A42 ;[] Выход: HL - следующий за дизассемблированной командой адрес памяти [] -0239+ 8A42 ;[] A - длина кода команды [] -0240+ 8A42 ;[]=========================================================================[] -0241+ 8A42 List: -0242+ 8A42 AF xor a ;длина кода команды -0243+ 8A43 32 A7 8D ld (.Byte),a -0244+ 8A46 E5 push hl -0245+ 8A47 54 ld d,h -0246+ 8A48 5D ld e,l -0247+ 8A49 -0248+ 8A49 21 87 8D ld hl,.String ;очистка буфера строки -0249+ 8A4C ; di ;с использованием акселя -0250+ 8A4C ; ld d,d ;включить аксель -0251+ 8A4C ; ld a,32 ;длина буфера и байт заполнитель -0252+ 8A4C ; ld c,c ;команда заполнения -0253+ 8A4C ; ld (hl),a ;заполнить -0254+ 8A4C ; ld b,b ;выключить аксель -0255+ 8A4C ; ei -0256+ 8A4C 3E 20 ld a,32 ;длина буфера и байт заполнитель -0257+ 8A4E 47 ld b,a -0258+ 8A4F 77 ld (hl),a -0259+ 8A50 23 inc hl -0260+ 8A51 10 FC djnz $-2 -0261+ 8A53 -0262+ 8A53 DD 21 89 8D ld ix,.String+2 ;адрес в строке для след.кода -0263+ 8A57 EB ex de,hl -0264+ 8A58 ; ld a,(hl) ;байт из памяти -0265+ 8A58 CD 6C 92 call Ld_a_hl -0266+ 8A5B -0267+ 8A5B ;=============================== -0268+ 8A5B FE DD cp 0xDD ;префикс #DD -0269+ 8A5D 28 0C jr z,.L43 -0270+ 8A5F FE FD cp 0xFD ;префикс #FD -0271+ 8A61 C2 04 8B jp nz,.L30 -0272+ 8A64 -0273+ 8A64 11 46 44 ld de,"DF" -0274+ 8A67 3E 59 ld a,"Y" -0275+ 8A69 18 05 jr .L42 -0276+ 8A6B -0277+ 8A6B 11 44 44 .L43 ld de,"DD" -0278+ 8A6E 3E 58 ld a,"X" -0279+ 8A70 -0280+ 8A70 ED 53 87 8D .L42 ld (.String),de ;префикс в строку -0281+ 8A74 32 6B 8D ld (.IRS1+1),a ;корректировка рег.пары -0282+ 8A77 32 E9 8B ld (.L9+1),a -0283+ 8A7A 32 AC 8C ld (.L13+6),a -0284+ 8A7D 3E 01 ld a,1 -0285+ 8A7F 32 A7 8D ld (.Byte),a ;длина кода команды -0286+ 8A82 E1 pop hl -0287+ 8A83 23 inc hl -0288+ 8A84 ; ld a,(hl) ;следующий байт команды -0289+ 8A84 CD 6C 92 call Ld_a_hl -0290+ 8A87 E5 push hl -0291+ 8A88 FE CB cp 0xCB -0292+ 8A8A 28 25 jr z,.L40 ;команды #DD(#FD)#CB -0293+ 8A8C -0294+ 8A8C 21 67 B0 ld hl,CodeDDFD ;таблица кодов -0295+ 8A8F 01 55 00 ld bc,85 ;размер таблицы -0296+ 8A92 ED B1 cpir ;поиск кода -0297+ 8A94 28 0F jr z,.L45 -0298+ 8A96 E1 pop hl -0299+ 8A97 01 DE B4 ld bc,ED00 -0300+ 8A9A 11 90 8D ld de,.String+9 ;копирование мнемоники NOP * -0301+ 8A9D 0A ld a,(bc) -0302+ 8A9E B7 or a -0303+ 8A9F C8 ret z -0304+ 8AA0 12 ld (de),a -0305+ 8AA1 13 inc de -0306+ 8AA2 03 inc bc -0307+ 8AA3 18 F8 jr $-6 -0308+ 8AA5 -0309+ 8AA5 21 54 00 .L45 ld hl,84 ;размер таблицы -0310+ 8AA8 B7 or a -0311+ 8AA9 ED 42 sbc hl,bc -0312+ 8AAB 11 BC B0 ld de,TablDDFD -0313+ 8AAE C3 D6 8B jp .L_12+3 -0314+ 8AB1 -0315+ 8AB1 DD 21 8B 8D .L40 ld ix,.String+4 ;адрес в строке для след.кода -0316+ 8AB5 11 43 42 ld de,"BC" ;префикс в строку -0317+ 8AB8 ED 53 89 8D ld (.String+2),de -0318+ 8ABC 3E 04 ld a,4 ;длина кода -0319+ 8ABE 32 A7 8D ld (.Byte),a -0320+ 8AC1 E1 pop hl -0321+ 8AC2 23 inc hl -0322+ 8AC3 CD 6C 92 call Ld_a_hl -0323+ 8AC6 47 ld b,a -0324+ 8AC7 ; ld b,(hl) ;байт-смещение -0325+ 8AC7 23 inc hl -0326+ 8AC8 CD 6C 92 call Ld_a_hl -0327+ 8ACB ; ld a,(hl) ;следующий байт команды -0328+ 8ACB 23 inc hl -0329+ 8ACC E5 push hl -0330+ 8ACD 4F ld c,a -0331+ 8ACE 26 00 ld h,0 -0332+ 8AD0 FE 40 cp 0x40 ;от 0 до 0x3F (сдвиги) -0333+ 8AD2 38 15 jr c,.L44 -0334+ 8AD4 -0335+ 8AD4 CD F7 8C call .ComCBBit ;мнемоника BIT,SET,RES -0336+ 8AD7 79 ld a,c -0337+ 8AD8 FE 80 cp 0x80 ;команда BIT -0338+ 8ADA 30 08 jr nc,.L41 -0339+ 8ADC CD 1D 8D call .NomBit ;номер бита -0340+ 8ADF CD 59 8D call .IndexRegSh ;индексная пара со смещением -0341+ 8AE2 18 14 jr .L46 -0342+ 8AE4 -0343+ 8AE4 CD 1D 8D .L41 call .NomBit ;номер бита -0344+ 8AE7 18 03 jr .L44+3 -0345+ 8AE9 -0346+ 8AE9 CD 04 8D .L44 call .ComCBSh ;мнемоника -0347+ 8AEC CD 2C 8D call .RegName ;регистр -0348+ 8AEF 20 04 jr nz,$+6 -0349+ 8AF1 3E 2C ld a,"," ;разделитель -0350+ 8AF3 12 ld (de),a -0351+ 8AF4 13 inc de -0352+ 8AF5 CD 59 8D call .IndexRegSh ;индексная пара со смещением -0353+ 8AF8 -0354+ 8AF8 79 .L46 ld a,c -0355+ 8AF9 CD 74 91 call ConvHexStr -0356+ 8AFC DD 75 02 ld (ix+2),l -0357+ 8AFF DD 74 03 ld (ix+3),h -0358+ 8B02 E1 pop hl -0359+ 8B03 C9 ret -0360+ 8B04 -0361+ 8B04 ;=============================== -0362+ 8B04 FE CB .L30 cp 0xCB ;префикс #CB -0363+ 8B06 C2 3D 8B jp nz,.L20 -0364+ 8B09 11 43 42 ld de,"BC" ;префикс в строку -0365+ 8B0C ED 53 87 8D ld (.String),de -0366+ 8B10 E1 pop hl -0367+ 8B11 23 inc hl -0368+ 8B12 CD 6C 92 call Ld_a_hl -0369+ 8B15 ; ld a,(hl) ;следующий байт команды -0370+ 8B15 23 inc hl -0371+ 8B16 E5 push hl -0372+ 8B17 4F ld c,a -0373+ 8B18 26 00 ld h,0 -0374+ 8B1A FE 40 cp 0x40 ;от 0 до 0x3F (сдвиги) -0375+ 8B1C 30 05 jr nc,.L31 -0376+ 8B1E CD 04 8D call .ComCBSh ;мнемоника -0377+ 8B21 18 06 jr .L31+6 -0378+ 8B23 CD F7 8C .L31 call .ComCBBit ;мнемоника -0379+ 8B26 CD 1D 8D call .NomBit ;номер бита -0380+ 8B29 CD 2C 8D call .RegName ;регистр -0381+ 8B2C C4 4A 8D call nz,.HLReg -0382+ 8B2F 79 ld a,c -0383+ 8B30 CD 74 91 call ConvHexStr -0384+ 8B33 DD 75 00 ld (ix+0),l -0385+ 8B36 DD 74 01 ld (ix+1),h -0386+ 8B39 E1 pop hl -0387+ 8B3A 3E 02 ld a,2 ;длина кода команды -0388+ 8B3C C9 ret -0389+ 8B3D -0390+ 8B3D ;=============================== -0391+ 8B3D FE ED .L20 cp 0xED ;префикс #ED -0392+ 8B3F 20 2D jr nz,.L10 -0393+ 8B41 3E 01 ld a,1 -0394+ 8B43 32 A7 8D ld (.Byte),a ;длина кода -0395+ 8B46 11 45 44 ld de,"DE" ;префикс в строку -0396+ 8B49 ED 53 87 8D ld (.String),de -0397+ 8B4D E1 pop hl -0398+ 8B4E 23 inc hl -0399+ 8B4F E5 push hl -0400+ 8B50 CD 6C 92 call Ld_a_hl -0401+ 8B53 ; ld a,(hl) ;следующий байт команды -0402+ 8B53 FE 40 cp 0x40 ;от 0 до 0x3F -0403+ 8B55 38 12 jr c,.L21 -0404+ 8B57 11 A8 B3 ld de,TablED-0x40*2 -0405+ 8B5A FE 7F cp 0x7F ;от 0x40 до 0x7E из таблицы -0406+ 8B5C 38 75 jr c,.L_12 -0407+ 8B5E FE A0 cp 0xA0 ;от 0x7F до 0x9F -0408+ 8B60 38 07 jr c,.L21 -0409+ 8B62 11 66 B3 ld de,TablED-0xA0*2+0x40*2-2 -0410+ 8B65 FE BC cp 0xBC ;от 0xBC до 0xFF -0411+ 8B67 38 6A jr c,.L_12 -0412+ 8B69 21 DE B4 .L21 ld hl,ED00 ;команда "NOP *" -0413+ 8B6C 18 6E jr .L_2-3 -0414+ 8B6E -0415+ 8B6E ;=============================== -0416+ 8B6E DD 21 87 8D .L10 ld ix,.String -0417+ 8B72 11 CF AB ld de,Tabl00_3F ;таблица смещений -0418+ 8B75 FE 40 cp 0x40 ;команды 0x00...0x3F -0419+ 8B77 38 5A jr c,.L_12 -0420+ 8B79 11 02 AE ld de,TablC0_FF ;таблица смещений -0421+ 8B7C 4F ld c,a -0422+ 8B7D D6 C0 sub 0xC0 ;команды 0xC0...0xFF -0423+ 8B7F 30 52 jr nc,.L_12 -0424+ 8B81 -0425+ 8B81 79 ld a,c -0426+ 8B82 FE 80 cp 0x80 -0427+ 8B84 30 2A jr nc,.L8 -0428+ 8B86 21 26 B0 ld hl,MHALT -0429+ 8B89 FE 76 cp 0x76 ;код команды HALT -0430+ 8B8B 28 4F jr z,.L_2-3 -0431+ 8B8D -0432+ 8B8D 21 90 8D ld hl,.String+9 -0433+ 8B90 36 4C ld (hl),"L" ;мнемоника LD -0434+ 8B92 23 inc hl -0435+ 8B93 36 44 ld (hl),"D" -0436+ 8B95 23 inc hl -0437+ 8B96 36 20 ld (hl)," " -0438+ 8B98 23 inc hl -0439+ 8B99 0F rrca -0440+ 8B9A 0F rrca -0441+ 8B9B 0F rrca -0442+ 8B9C EB ex de,hl -0443+ 8B9D CD 2D 8D call .RegName+1 ;печать регистра -0444+ 8BA0 C4 4A 8D call nz,.HLReg -0445+ 8BA3 3E 2C ld a,"," ;разделитель -0446+ 8BA5 12 ld (de),a -0447+ 8BA6 13 inc de -0448+ 8BA7 CD 2C 8D call .RegName ;печать регистра -0449+ 8BAA C4 4A 8D call nz,.HLReg -0450+ 8BAD AF xor a -0451+ 8BAE 18 4A jr .L1 -0452+ 8BB0 -0453+ 8BB0 E6 38 .L8 and 00111000b ;ADD,ADC,SUB,SBC,AND,XOR,OR,CP -0454+ 8BB2 0F rrca -0455+ 8BB3 0F rrca -0456+ 8BB4 6F ld l,a -0457+ 8BB5 26 00 ld h,0 -0458+ 8BB7 11 2B B0 ld de,TablM -0459+ 8BBA 19 add hl,de ;смещение в таблице -0460+ 8BBB 7E ld a,(hl) -0461+ 8BBC 23 inc hl -0462+ 8BBD 66 ld h,(hl) -0463+ 8BBE 6F ld l,a -0464+ 8BBF 11 90 8D ld de,.String+9 ;копирование в строку-буфер -0465+ 8BC2 7E ld a,(hl) -0466+ 8BC3 12 ld (de),a -0467+ 8BC4 13 inc de -0468+ 8BC5 23 inc hl -0469+ 8BC6 B7 or a -0470+ 8BC7 20 F9 jr nz,$-5 -0471+ 8BC9 1B dec de -0472+ 8BCA CD 2C 8D call .RegName ;печать регистра -0473+ 8BCD C4 4A 8D call nz,.HLReg -0474+ 8BD0 AF xor a -0475+ 8BD1 18 27 jr .L1 -0476+ 8BD3 -0477+ 8BD3 6F .L_12 ld l,a ;расчет адреса в таблице -0478+ 8BD4 26 00 ld h,0 -0479+ 8BD6 29 add hl,hl ;*2 -0480+ 8BD7 19 add hl,de -0481+ 8BD8 7E ld a,(hl) -0482+ 8BD9 23 inc hl -0483+ 8BDA 66 ld h,(hl) -0484+ 8BDB 6F ld l,a ;адрес строки-мнемоники -0485+ 8BDC -0486+ 8BDC 11 90 8D ld de,.String+9 ;копирование в строку-буфер -0487+ 8BDF 7E .L_2 ld a,(hl) -0488+ 8BE0 FE 20 cp 0x20 -0489+ 8BE2 38 16 jr c,.L1 -0490+ 8BE4 FE 78 cp "x" ;индексный регистр -0491+ 8BE6 20 02 jr nz,$+4 -0492+ 8BE8 3E 58 .L9 ld a,"X" -0493+ 8BEA 12 ld (de),a -0494+ 8BEB FE 29 cp ")" -0495+ 8BED 20 07 jr nz,$+9 -0496+ 8BEF 22 A8 8D ld (.TablAdr),hl -0497+ 8BF2 ED 53 AA 8D ld (.StrAdr),de -0498+ 8BF6 23 inc hl -0499+ 8BF7 13 inc de -0500+ 8BF8 18 E5 jr .L_2 -0501+ 8BFA -0502+ 8BFA 08 .L1 exa -0503+ 8BFB E1 pop hl ;печать байта -0504+ 8BFC CD 6C 92 call Ld_a_hl -0505+ 8BFF ; ld a,(hl) -0506+ 8BFF 23 inc hl -0507+ 8C00 E5 push hl -0508+ 8C01 CD 74 91 call ConvHexStr -0509+ 8C04 DD 75 00 ld (ix+0),l -0510+ 8C07 DD 74 01 ld (ix+1),h -0511+ 8C0A 08 exa -0512+ 8C0B CA B2 8C jp z,.LE -0513+ 8C0E -0514+ 8C0E 3D dec a ;2-х байтная команда (1) -0515+ 8C0F 20 0A jr nz,.L3 -0516+ 8C11 CD B8 8C call .TwoByteCom -0517+ 8C14 E1 pop hl -0518+ 8C15 3A A7 8D ld a,(.Byte) -0519+ 8C18 3C inc a -0520+ 8C19 3C inc a ;длина кода -0521+ 8C1A C9 ret -0522+ 8C1B -0523+ 8C1B 3D .L3 dec a ;3-х байтная команда (2) -0524+ 8C1C 20 0A jr nz,.L4 -0525+ 8C1E CD D0 8C call .ThreeByteCom -0526+ 8C21 E1 pop hl -0527+ 8C22 3A A7 8D ld a,(.Byte) -0528+ 8C25 C6 03 add a,3 ;длина кода -0529+ 8C27 C9 ret -0530+ 8C28 -0531+ 8C28 3D .L4 dec a ;команды относительного перехода (3) -0532+ 8C29 20 29 jr nz,.L7 -0533+ 8C2B E1 pop hl -0534+ 8C2C CD 6C 92 call Ld_a_hl -0535+ 8C2F ; ld a,(hl) ;2-й байт команды -0536+ 8C2F 23 inc hl -0537+ 8C30 E5 push hl -0538+ 8C31 4F ld c,a -0539+ 8C32 CD 74 91 call ConvHexStr -0540+ 8C35 DD 75 02 ld (ix+2),l -0541+ 8C38 DD 74 03 ld (ix+3),h -0542+ 8C3B 79 ld a,c -0543+ 8C3C 06 00 ld b,0 -0544+ 8C3E E1 pop hl -0545+ 8C3F E5 push hl ;текущий адрес -0546+ 8C40 CB 7F bit 7,a ;знак числа -0547+ 8C42 28 08 jr z,$+10 -0548+ 8C44 ED 44 neg -0549+ 8C46 B7 or a ;сброс флага C -0550+ 8C47 4F ld c,a -0551+ 8C48 ED 42 sbc hl,bc ;отрицательное смещение -0552+ 8C4A 18 01 jr $+3 -0553+ 8C4C 09 add hl,bc ;положительное смещение -0554+ 8C4D CD 3D 91 call NumToStr16 -0555+ 8C50 E1 pop hl -0556+ 8C51 3E 02 ld a,2 ;длина кода -0557+ 8C53 C9 ret -0558+ 8C54 -0559+ 8C54 3D .L7 dec a ;команды работы с портами (4) -0560+ 8C55 20 0D jr nz,.L5 -0561+ 8C57 3C inc a -0562+ 8C58 32 A7 8D ld (.Byte),a ;длина кода -0563+ 8C5B ED 5B AA 8D ld de,(.StrAdr) ;адрес вставки -0564+ 8C5F CD B8 8C call .TwoByteCom -0565+ 8C62 18 2E jr .L6 -0566+ 8C64 -0567+ 8C64 3D .L5 dec a ;3-х байтные косвенной адресации (5) -0568+ 8C65 20 11 jr nz,.L11 -0569+ 8C67 3A A7 8D ld a,(.Byte) -0570+ 8C6A 3C inc a -0571+ 8C6B 3C inc a -0572+ 8C6C 32 A7 8D ld (.Byte),a ;длина кода -0573+ 8C6F ED 5B AA 8D ld de,(.StrAdr) ;адрес вставки -0574+ 8C73 CD D0 8C call .ThreeByteCom -0575+ 8C76 18 1A jr .L6 -0576+ 8C78 -0577+ 8C78 3D .L11 dec a ;индексные регистры со смещением (6) -0578+ 8C79 20 37 jr nz,.LE -0579+ 8C7B 3E 02 ld a,2 -0580+ 8C7D 32 A7 8D ld (.Byte),a ;длина кода -0581+ 8C80 ED 5B AA 8D ld de,(.StrAdr) ;адрес вставки -0582+ 8C84 E1 pop hl -0583+ 8C85 CD 6C 92 call Ld_a_hl -0584+ 8C88 47 ld b,a -0585+ 8C89 ; ld b,(hl) -0586+ 8C89 23 inc hl -0587+ 8C8A E5 push hl -0588+ 8C8B DD 21 8B 8D ld ix,.String+4 -0589+ 8C8F CD 59 8D call .IndexRegSh -0590+ 8C92 2A A8 8D .L6 ld hl,(.TablAdr) ;адрес в таблице мнемоник -0591+ 8C95 7E ld a,(hl) -0592+ 8C96 FE 20 cp 0x20 -0593+ 8C98 30 0C jr nc,.L13 -0594+ 8C9A 78 ld a,b -0595+ 8C9B FE 2C cp "," ;мнемоника оканч. на "," -0596+ 8C9D 20 13 jr nz,.LE -0597+ 8C9F CD B8 8C call .TwoByteCom -0598+ 8CA2 E1 pop hl -0599+ 8CA3 3E 04 ld a,4 ;длина кода -0600+ 8CA5 C9 ret -0601+ 8CA6 -0602+ 8CA6 47 .L13 ld b,a -0603+ 8CA7 FE 78 cp "x" ;индексный регистр -0604+ 8CA9 20 02 jr nz,$+4 -0605+ 8CAB 3E 58 ld a,"X" -0606+ 8CAD 12 ld (de),a -0607+ 8CAE 23 inc hl -0608+ 8CAF 13 inc de -0609+ 8CB0 18 E3 jr .L6+3 -0610+ 8CB2 -0611+ 8CB2 E1 .LE pop hl -0612+ 8CB3 3A A7 8D ld a,(.Byte) ;длина кода -0613+ 8CB6 3C inc a -0614+ 8CB7 C9 ret -0615+ 8CB8 -0616+ 8CB8 ;======== печать второго кода двухбайтной команды ======== -0617+ 8CB8 .TwoByteCom: -0618+ 8CB8 C1 pop bc ;адрес возврата -0619+ 8CB9 E1 pop hl -0620+ 8CBA CD 6C 92 call Ld_a_hl -0621+ 8CBD ; ld a,(hl) ;2-й байт команды -0622+ 8CBD 23 inc hl -0623+ 8CBE E5 push hl -0624+ 8CBF C5 push bc -0625+ 8CC0 4F ld c,a -0626+ 8CC1 CD 74 91 call ConvHexStr -0627+ 8CC4 DD 75 02 ld (ix+2),l -0628+ 8CC7 DD 74 03 ld (ix+3),h -0629+ 8CCA 69 ld l,c -0630+ 8CCB 26 00 ld h,0 -0631+ 8CCD C3 5E 91 jp NumToStr8 -0632+ 8CD0 -0633+ 8CD0 ;======== печать второго и третьего кода трехбайтной команды ======== -0634+ 8CD0 .ThreeByteCom: -0635+ 8CD0 C1 pop bc ;адрес возврата -0636+ 8CD1 E1 pop hl -0637+ 8CD2 CD 6C 92 call Ld_a_hl -0638+ 8CD5 ; ld a,(hl) ;2-й байт команды -0639+ 8CD5 23 inc hl -0640+ 8CD6 08 exa -0641+ 8CD7 CD 6C 92 call Ld_a_hl -0642+ 8CDA ; ld a,(hl) ;3-й байт команды -0643+ 8CDA 23 inc hl -0644+ 8CDB E5 push hl -0645+ 8CDC C5 push bc -0646+ 8CDD 47 ld b,a -0647+ 8CDE CD 74 91 call ConvHexStr -0648+ 8CE1 DD 75 04 ld (ix+4),l -0649+ 8CE4 DD 74 05 ld (ix+5),h -0650+ 8CE7 08 exa -0651+ 8CE8 4F ld c,a -0652+ 8CE9 CD 74 91 call ConvHexStr -0653+ 8CEC DD 75 02 ld (ix+2),l -0654+ 8CEF DD 74 03 ld (ix+3),h -0655+ 8CF2 60 ld h,b ;в HL - число -0656+ 8CF3 69 ld l,c -0657+ 8CF4 C3 3D 91 jp NumToStr16 -0658+ 8CF7 -0659+ 8CF7 ;======== печать мнемоник команд с префиксом 0xCB (сдвиги, битовые) ======== -0660+ 8CF7 ;A - байт команды -0661+ 8CF7 ;DE - адрес в строке -0662+ 8CF7 .ComCBBit: -0663+ 8CF7 E6 C0 and 11000000b -0664+ 8CF9 07 rlca -0665+ 8CFA 07 rlca -0666+ 8CFB 07 rlca -0667+ 8CFC 07 rlca -0668+ 8CFD 6F ld l,a -0669+ 8CFE 11 18 B4 ld de,CB40-4 -0670+ 8D01 19 add hl,de -0671+ 8D02 18 0D jr .ComCBSh1 -0672+ 8D04 .ComCBSh: -0673+ 8D04 E6 38 and 00111000b ;смещение в таблице -0674+ 8D06 0F rrca -0675+ 8D07 0F rrca -0676+ 8D08 6F ld l,a -0677+ 8D09 11 EE B3 ld de,TablCB -0678+ 8D0C 19 add hl,de -0679+ 8D0D 7E ld a,(hl) -0680+ 8D0E 23 inc hl -0681+ 8D0F 66 ld h,(hl) -0682+ 8D10 6F ld l,a -0683+ 8D11 11 90 8D .ComCBSh1 ld de,.String+9 ;копирование в строку-буфер -0684+ 8D14 7E ld a,(hl) -0685+ 8D15 12 ld (de),a -0686+ 8D16 13 inc de -0687+ 8D17 23 inc hl -0688+ 8D18 FE 20 cp " " ;последний символ мнемоники -0689+ 8D1A 20 F8 jr nz,$-6 -0690+ 8D1C C9 ret -0691+ 8D1D -0692+ 8D1D ;======== вычисление номера бита в битовых командах BIT, SET, RES ======== -0693+ 8D1D ;C - байт команды -0694+ 8D1D ;DE - адрес в строке -0695+ 8D1D .NomBit: -0696+ 8D1D 79 ld a,c -0697+ 8D1E E6 38 and 00111000b ;номер бита -0698+ 8D20 0F rrca -0699+ 8D21 0F rrca -0700+ 8D22 0F rrca -0701+ 8D23 C6 30 add a,"0" -0702+ 8D25 12 ld (de),a -0703+ 8D26 3E 2C ld a,"," -0704+ 8D28 13 inc de -0705+ 8D29 12 ld (de),a -0706+ 8D2A 13 inc de -0707+ 8D2B C9 ret -0708+ 8D2C -0709+ 8D2C ;======== печать имени регистра ======== -0710+ 8D2C ;C - команда -0711+ 8D2C ;DE - адрес в строке -0712+ 8D2C .RegName: -0713+ 8D2C 79 ld a,c -0714+ 8D2D E6 07 and 00000111b ;регистр -0715+ 8D2F C6 42 add a,"B" -0716+ 8D31 FE 46 cp "F" ;B,C,D,E -0717+ 8D33 38 11 jr c,.RN1 -0718+ 8D35 3C inc a -0719+ 8D36 3C inc a -0720+ 8D37 FE 48 cp "H" -0721+ 8D39 28 0B jr z,.RN1 -0722+ 8D3B C6 03 add a,3 -0723+ 8D3D FE 4C cp "L" -0724+ 8D3F 28 05 jr z,.RN1 -0725+ 8D41 D6 0D sub 13 -0726+ 8D43 FE 41 cp "A" -0727+ 8D45 C0 ret nz ;относительная адресация -0728+ 8D46 12 .RN1 ld (de),a -0729+ 8D47 13 inc de -0730+ 8D48 AF xor a -0731+ 8D49 C9 ret -0732+ 8D4A -0733+ 8D4A ;======== печать (HL) ======== -0734+ 8D4A ;DE - адрес в строке -0735+ 8D4A .HLReg: -0736+ 8D4A EB ex de,hl -0737+ 8D4B 36 28 ld (hl),"(" -0738+ 8D4D 23 inc hl -0739+ 8D4E 36 48 ld (hl),"H" -0740+ 8D50 23 inc hl -0741+ 8D51 36 4C ld (hl),"L" -0742+ 8D53 23 inc hl -0743+ 8D54 36 29 ld (hl),")" -0744+ 8D56 23 inc hl -0745+ 8D57 EB ex de,hl -0746+ 8D58 C9 ret -0747+ 8D59 -0748+ 8D59 ;======== печать индексной регистровой пары со смещением ======== -0749+ 8D59 ;B - смещение -0750+ 8D59 ;DE - адрес в строке -0751+ 8D59 .IndexRegSh: -0752+ 8D59 78 ld a,b -0753+ 8D5A CD 74 91 call ConvHexStr -0754+ 8D5D DD 75 00 ld (ix+0),l -0755+ 8D60 DD 74 01 ld (ix+1),h -0756+ 8D63 EB ex de,hl -0757+ 8D64 36 28 ld (hl),"(" -0758+ 8D66 23 inc hl -0759+ 8D67 36 49 ld (hl),"I" -0760+ 8D69 23 inc hl -0761+ 8D6A 36 58 .IRS1 ld (hl),"X" -0762+ 8D6C 23 inc hl -0763+ 8D6D 3E 2B ld a,"+" ;положительное смещение -0764+ 8D6F 77 ld (hl),a -0765+ 8D70 78 ld a,b ;смещение -0766+ 8D71 CB 78 bit 7,b -0767+ 8D73 28 06 jr z,$+8 -0768+ 8D75 3E 2D ld a,"-" ;отрицательное смещение -0769+ 8D77 77 ld (hl),a -0770+ 8D78 78 ld a,b ;смещение -0771+ 8D79 ED 44 neg -0772+ 8D7B 23 inc hl -0773+ 8D7C EB ex de,hl -0774+ 8D7D 6F ld l,a -0775+ 8D7E 26 00 ld h,0 -0776+ 8D80 CD 5E 91 call NumToStr8 -0777+ 8D83 3E 29 ld a,")" -0778+ 8D85 12 ld (de),a -0779+ 8D86 C9 ret -0780+ 8D87 -0781+ 8D87 -0782+ 8D87 .String db "00112233 01234567890123456789012" -0782+ 8D87 3030313132323333203031323334353637383930313233343536373839303132 -0783+ 8DA7 00 .Byte db 0 -0784+ 8DA8 00 00 .TablAdr dw 0 -0785+ 8DAA 00 00 .StrAdr dw 0 -0786+ 8DAC -0787+ 8DAC -0372 8DAC include "util.asm";"D:\WORKAST\DEMON\util" -0001+ 8DAC ;[]=========================================================================[] -0002+ 8DAC ;[] Подпрограммы-утилиты монитора-отладчика DemoN [] -0003+ 8DAC ;[] v0.01 - последние изменения 29.08.2004 [] -0004+ 8DAC ;[] v0.02 - последние изменения 20.03.2005 [] -0005+ 8DAC ;[] v0.03 - последние изменения 25.02.2006 [] -0006+ 8DAC ;[] v0.10 - последние изменения 17.05.2006 [] -0007+ 8DAC ;[] [] -0008+ 8DAC ;[] SaveAllRegs - сохранение значений регистровых пар [] -0009+ 8DAC ;[] RestAllRegs - востановление значений регистровых пар [] -0010+ 8DAC ;[] PrnStrColor - печать строки символов с атрибутами [] -0011+ 8DAC ;[] PrintReg - печать двухбайтового числа [] -0012+ 8DAC ;[] PrintStrAF - печать значения регистровой пары AF и флагов [] -0013+ 8DAC ;[] PrintStrReg - печать значений регистровых пар с адресуемыми байтами [] -0014+ 8DAC ;[] PrintStrWin - печать номеров банок в окнах [] -0015+ 8DAC ;[] PrintSPDn - печать глубины стека [] -0016+ 8DAC ;[] PrintStrSp - печать значений стека [] -0017+ 8DAC ;[] PrintDump - печать дампа [] -0018+ 8DAC ;[] PrintStrDump - печать строки дампа [] -0019+ 8DAC ;[] ReplSymNoPrint - замена непечатных символов в строке [] -0020+ 8DAC ;[] NumToStr16 - формирование 16-тиричного числа [] -0021+ 8DAC ;[] NumToStr8 - формирование 8-ричного числа [] -0022+ 8DAC ;[] ConvHexStr - конвертирование числа в HEX-строку [] -0023+ 8DAC ;[] ConvDecStr - конвертирование 16-битного числа в DEC-строку [] -0024+ 8DAC ;[] CursorSet - прорисовка курсора [] -0025+ 8DAC ;[] CursorRes - востановление экрана под курсором [] -0026+ 8DAC ;[] Ld_a_bc - чтение байта из памяти с проверкой адреса, адрес в BC [] -0027+ 8DAC ;[] Ld_a_hl - чтение байта из памяти с проверкой адреса, адрес в HL [] -0028+ 8DAC ;[] Ld_hl_a - запись байта в память с проверкой адреса, адрес в HL [] -0029+ 8DAC ;[] AdrArea - определение принадлежности адреса области памяти [] -0030+ 8DAC ;[]=========================================================================[] -0031+ 8DAC -0032+ 8DAC ;[]=========================================================================[] -0033+ 8DAC ;[] Сохранение значений регистровых пар [] -0034+ 8DAC ;[]=========================================================================[] -0035+ 8DAC SaveAllRegs: -0036+ 8DAC 22 29 AB ld (Reg._HL),hl -0037+ 8DAF ED 53 2B AB ld (Reg._DE),de -0038+ 8DB3 ED 43 2D AB ld (Reg._BC),bc -0039+ 8DB7 -0040+ 8DB7 DD 22 25 AB ld (Reg._IX),ix -0041+ 8DBB FD 22 27 AB ld (Reg._IY),iy -0042+ 8DBF F5 push af -0043+ 8DC0 E1 pop hl -0044+ 8DC1 22 2F AB ld (Reg._AF),hl -0045+ 8DC4 ED 5F ld a,r -0046+ 8DC6 32 39 AB ld (Reg._IR),a -0047+ 8DC9 ED 57 ld a,i -0048+ 8DCB 32 3A AB ld (Reg._IR+1),a -0049+ 8DCE -0050+ 8DCE D9 exx -0051+ 8DCF 08 ex af,af' -0052+ 8DD0 -0053+ 8DD0 22 31 AB ld (Reg._HL_),hl -0054+ 8DD3 ED 53 33 AB ld (Reg._DE_),de -0055+ 8DD7 ED 43 35 AB ld (Reg._BC_),bc -0056+ 8DDB F5 push af -0057+ 8DDC E1 pop hl -0058+ 8DDD 22 37 AB ld (Reg._AF_),hl -0059+ 8DE0 08 ex af,af' -0060+ 8DE1 D9 exx -0061+ 8DE2 -0062+ 8DE2 21 3F AB ld hl,WinPage ;сохранение номеров страниц -0063+ 8DE5 DB 82 in a,(EmmWin.P0) ;0-е окно -0064+ 8DE7 77 ld (hl),a -0065+ 8DE8 23 inc hl -0066+ 8DE9 DB A2 in a,(EmmWin.P1) ;1-е окно -0067+ 8DEB 77 ld (hl),a -0068+ 8DEC 23 inc hl -0069+ 8DED DB C2 in a,(EmmWin.P2) ;2-е окно -0070+ 8DEF 77 ld (hl),a -0071+ 8DF0 23 inc hl -0072+ 8DF1 DB E2 in a,(EmmWin.P3) ;3-е окно -0073+ 8DF3 77 ld (hl),a -0074+ 8DF4 C9 ret -0075+ 8DF5 -0076+ 8DF5 ;[]=========================================================================[] -0077+ 8DF5 ;[] Востановление значений регистровых пар [] -0078+ 8DF5 ;[]=========================================================================[] -0079+ 8DF5 RestAllRegs: -0080+ 8DF5 3A 39 AB ld a,(Reg._IR) -0081+ 8DF8 ED 4F ld r,a -0082+ 8DFA 3A 3A AB ld a,(Reg._IR+1) -0083+ 8DFD ED 47 ld i,a -0084+ 8DFF 2A 2F AB ld hl,(Reg._AF) -0085+ 8E02 E5 push hl -0086+ 8E03 F1 pop af -0087+ 8E04 2A 29 AB ld hl,(Reg._HL) -0088+ 8E07 ED 5B 2B AB ld de,(Reg._DE) -0089+ 8E0B ED 4B 2D AB ld bc,(Reg._BC) -0090+ 8E0F DD 2A 25 AB ld ix,(Reg._IX) -0091+ 8E13 FD 2A 27 AB ld iy,(Reg._IY) -0092+ 8E17 -0093+ 8E17 D9 exx -0094+ 8E18 08 ex af,af' -0095+ 8E19 2A 37 AB ld hl,(Reg._AF_) -0096+ 8E1C E5 push hl -0097+ 8E1D F1 pop af -0098+ 8E1E 2A 31 AB ld hl,(Reg._HL_) -0099+ 8E21 ED 5B 33 AB ld de,(Reg._DE_) -0100+ 8E25 ED 4B 35 AB ld bc,(Reg._BC_) -0101+ 8E29 08 ex af,af' -0102+ 8E2A D9 exx -0103+ 8E2B -0104+ 8E2B C9 ret -0105+ 8E2C -0106+ 8E2C ;[]=========================================================================[] -0107+ 8E2C ;[] Печать строки символов [] -0108+ 8E2C ;[] Вход: HL - адрес строки символов [] -0109+ 8E2C ;[] [] -0110+ 8E2C ;[] Формат строки: 0x16, Столбец, Строка, Символы, 0x00 [] -0111+ 8E2C ;[]=========================================================================[] -0112+ 8E2C 3A 11 AB ld a,(Color.Screen) ;основной цвет -0113+ 8E2F 32 5C 8E ld (PrnStrColor.L1+5),a -0114+ 8E32 PrnStrColor: -0115+ 8E32 7E ld a,(hl) -0116+ 8E33 FE 16 cp 0x16 ;код установки позиции курсора -0117+ 8E35 20 0A jr nz,.L2 -0118+ 8E37 23 inc hl -0119+ 8E38 5E ld e,(hl) ;столбец -0120+ 8E39 7B ld a,e -0121+ 8E3A 32 66 8E ld (PrtXCoord),a -0122+ 8E3D 23 inc hl -0123+ 8E3E 56 ld d,(hl) ;строка -0124+ 8E3F 23 inc hl -0125+ 8E40 7E ld a,(hl) ;символ -0126+ 8E41 FE 0D .L2 cp 0x0D -0127+ 8E43 20 07 jr nz,.L3 -0128+ 8E45 14 inc d -0129+ 8E46 3A 66 8E ld a,(PrtXCoord) -0130+ 8E49 5F ld e,a -0131+ 8E4A 18 17 jr .L4 -0132+ 8E4C FE 17 .L3 cp 0x17 -0133+ 8E4E 20 07 jr nz,.L1 -0134+ 8E50 23 inc hl -0135+ 8E51 7E ld a,(hl) -0136+ 8E52 32 5C 8E ld (PrnStrColor.L1+5),a -0137+ 8E55 23 inc hl -0138+ 8E56 7E ld a,(hl) -0139+ 8E57 B7 .L1 or a -0140+ 8E58 C8 ret z ;выход если конец строки -0141+ 8E59 E5 push hl -0142+ 8E5A D5 push de -0143+ 8E5B ;печать ч/з биос или дсс? -0144+ 8E5B ifdef D_PRINTCH_BIOS -0145+ 8E5B~ ld h,0x03 ;атрибут -0146+ 8E5B~ ld l,a -0147+ 8E5B~ sub a ;идентификатор окна -0148+ 8E5B~ ; ld a,(Demon.Bios_Win) -0149+ 8E5B~ ld bc,SysSymb*256+Bios.Win_Put_Sym -0150+ 8E5B~ rst BiosRst -0151+ 8E5B else -0152+ 8E5B 06 03 ld b,0x03 -0153+ 8E5D 0E 58 ld c,Dss.WrChar -0154+ 8E5F D7 rst DssRst -0155+ 8E60 endif -0156+ 8E60 D1 pop de -0157+ 8E61 E1 pop hl -0158+ 8E62 1C inc e -0159+ 8E63 23 .L4 inc hl -0160+ 8E64 18 CC jr PrnStrColor -0161+ 8E66 00 PrtXCoord db 0 -0162+ 8E67 ;[]=========================================================================[] -0163+ 8E67 ;[] Печать двухбайтового числа [] -0164+ 8E67 ;[] Вход: DE - координаты печати [] -0165+ 8E67 ;[] HL - значение регистровой пары [] -0166+ 8E67 ;[]=========================================================================[] -0167+ 8E67 PrintReg: -0168+ 8E67 F3 di -0169+ 8E68 E5 push hl -0170+ 8E69 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0171+ 8E6B CF rst BiosRst -0172+ 8E6C E1 pop hl -0173+ 8E6D -0174+ 8E6D 3A 7E AB ld a,(DecHex) ;систем счисления -0175+ 8E70 B7 or a -0176+ 8E71 28 08 jr z,.Hex -0177+ 8E73 -0178+ 8E73 11 98 8E ld de,.String -0179+ 8E76 CD 91 91 call ConvDecStr -0180+ 8E79 18 14 jr .Print -0181+ 8E7B -0182+ 8E7B 3E 23 .Hex ld a,"#" -0183+ 8E7D 32 98 8E ld (.String),a -0184+ 8E80 4D ld c,l -0185+ 8E81 7C ld a,h -0186+ 8E82 CD 74 91 call ConvHexStr -0187+ 8E85 22 99 8E ld (.String+1),hl ;старший байт -0188+ 8E88 79 ld a,c -0189+ 8E89 CD 74 91 call ConvHexStr -0190+ 8E8C 22 9B 8E ld (.String+3),hl ;младший байт -0191+ 8E8F 21 98 8E .Print ld hl,.String ;печатаемая строка -0192+ 8E92 01 86 05 ld bc,5*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0193+ 8E95 CF rst BiosRst -0194+ 8E96 FB ei -0195+ 8E97 C9 ret -0196+ 8E98 -0197+ 8E98 2330313233 .String db "#0123" -0198+ 8E9D -0199+ 8E9D ;[]=========================================================================[] -0200+ 8E9D ;[] Печать значения регистровой пары AF и флагов [] -0201+ 8E9D ;[] Вход: DE - координаты печати [] -0202+ 8E9D ;[] HL - значение регистровой пары [] -0203+ 8E9D ;[]=========================================================================[] -0204+ 8E9D PrintStrAF: -0205+ 8E9D 7C ld a,h ;значение регистра A -0206+ 8E9E E5 push hl -0207+ 8E9F 32 09 8F ld (.String+11),a -0208+ 8EA2 -0209+ 8EA2 21 FF 8E ld hl,.String+1 ;двоичное значение -0210+ 8EA5 D5 push de -0211+ 8EA6 11 31 30 ld de,0x3031 ;"01" -0212+ 8EA9 06 08 ld b,8 -0213+ 8EAB 07 .L1 rlca -0214+ 8EAC 38 03 jr c,$+5 -0215+ 8EAE 72 ld (hl),d ;"0" -0216+ 8EAF 18 01 jr $+3 -0217+ 8EB1 73 ld (hl),e ;"1" -0218+ 8EB2 23 inc hl -0219+ 8EB3 10 F6 djnz .L1 -0220+ 8EB5 D1 pop de -0221+ 8EB6 -0222+ 8EB6 04 inc b ;B=1 -0223+ 8EB7 23 inc hl -0224+ 8EB8 23 inc hl -0225+ 8EB9 CD 27 91 call ReplSymNoPrint -0226+ 8EBC -0227+ 8EBC E1 pop hl -0228+ 8EBD 7D ld a,l ;флаги -0229+ 8EBE E5 push hl -0230+ 8EBF 21 0B 8F ld hl,.Flags -0231+ 8EC2 06 08 ld b,8 -0232+ 8EC4 CB 9F res 3,a ;сброс неизвестных флагов -0233+ 8EC6 CB AF res 5,a -0234+ 8EC8 07 .L2 rlca -0235+ 8EC9 38 04 jr c,$+6 -0236+ 8ECB CB EE set 5,(hl) ;сброшен -0237+ 8ECD 18 02 jr $+4 -0238+ 8ECF CB AE res 5,(hl) ;установлен -0239+ 8ED1 23 inc hl -0240+ 8ED2 10 F4 djnz .L2 -0241+ 8ED4 E1 pop hl -0242+ 8ED5 -0243+ 8ED5 D5 push de -0244+ 8ED6 CD 67 8E call PrintReg ;печать значения рег.пары -0245+ 8ED9 D1 pop de -0246+ 8EDA D5 push de -0247+ 8EDB 3E 06 ld a,6 -0248+ 8EDD 83 add a,e -0249+ 8EDE 5F ld e,a -0250+ 8EDF 0E 84 ld c,Bios.Lp_Set_Place -0251+ 8EE1 F3 di -0252+ 8EE2 CF rst BiosRst -0253+ 8EE3 21 FE 8E ld hl,.String -0254+ 8EE6 01 86 0D ld bc,13*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0255+ 8EE9 F3 di -0256+ 8EEA CF rst BiosRst -0257+ 8EEB D1 pop de -0258+ 8EEC 14 inc d -0259+ 8EED 1D dec e -0260+ 8EEE 1D dec e -0261+ 8EEF 1D dec e -0262+ 8EF0 0E 84 ld c,Bios.Lp_Set_Place -0263+ 8EF2 F3 di -0264+ 8EF3 CF rst BiosRst -0265+ 8EF4 21 0B 8F ld hl,.Flags -0266+ 8EF7 01 86 08 ld bc,8*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0267+ 8EFA F3 di -0268+ 8EFB CF rst BiosRst -0269+ 8EFC FB ei -0270+ 8EFD C9 ret -0271+ 8EFE -0272+ 8EFE .String db '%01010101 " "' -0272+ 8EFE 25303130313031303120222022 -0273+ 8F0B .Flags db "SZ.H.PNC" -0273+ 8F0B 535A2E482E504E43 -0274+ 8F13 -0275+ 8F13 ;[]=========================================================================[] -0276+ 8F13 ;[] Печать значений регистровых пар с адресуемыми байтами [] -0277+ 8F13 ;[] Вход: DE - координаты печати [] -0278+ 8F13 ;[] HL - значение регистровой пары [] -0279+ 8F13 ;[]=========================================================================[] -0280+ 8F13 PrintStrReg: -0281+ 8F13 E5 push hl -0282+ 8F14 44 ld b,h -0283+ 8F15 4D ld c,l -0284+ 8F16 -0285+ 8F16 CD 47 92 call Ld_a_bc ;ld a,(bc) адресуемые байты -0286+ 8F19 32 72 8F ld (.String+10),a -0287+ 8F1C CD 74 91 call ConvHexStr -0288+ 8F1F 22 68 8F ld (.String),hl -0289+ 8F22 03 inc bc -0290+ 8F23 CD 47 92 call Ld_a_bc ;ld a,(bc) -0291+ 8F26 32 73 8F ld (.String+11),a -0292+ 8F29 CD 74 91 call ConvHexStr -0293+ 8F2C 22 6A 8F ld (.String+2),hl -0294+ 8F2F 03 inc bc -0295+ 8F30 CD 47 92 call Ld_a_bc ;ld a,(bc) -0296+ 8F33 32 74 8F ld (.String+12),a -0297+ 8F36 CD 74 91 call ConvHexStr -0298+ 8F39 22 6D 8F ld (.String+5),hl -0299+ 8F3C 03 inc bc -0300+ 8F3D CD 47 92 call Ld_a_bc ;ld a,(bc) -0301+ 8F40 32 75 8F ld (.String+13),a -0302+ 8F43 CD 74 91 call ConvHexStr -0303+ 8F46 22 6F 8F ld (.String+7),hl -0304+ 8F49 -0305+ 8F49 21 72 8F ld hl,.String+10 ;замена непечатных символов -0306+ 8F4C 06 04 ld b,4 -0307+ 8F4E CD 27 91 call ReplSymNoPrint -0308+ 8F51 -0309+ 8F51 E1 pop hl -0310+ 8F52 D5 push de -0311+ 8F53 CD 67 8E call PrintReg ;печать значения рег.пары -0312+ 8F56 D1 pop de -0313+ 8F57 F3 di -0314+ 8F58 3E 06 ld a,6 -0315+ 8F5A 83 add a,e -0316+ 8F5B 5F ld e,a -0317+ 8F5C 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0318+ 8F5E CF rst BiosRst -0319+ 8F5F 21 68 8F ld hl,.String ;печатаемая строка -0320+ 8F62 01 86 0E ld bc,14*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0321+ 8F65 CF rst BiosRst -0322+ 8F66 FB ei -0323+ 8F67 C9 ret -0324+ 8F68 -0325+ 8F68 .String db "0123 4567 ABCD" -0325+ 8F68 3031323320343536372041424344 -0326+ 8F76 -0327+ 8F76 ;[]=========================================================================[] -0328+ 8F76 ;[] Печать номеров банок в окнах [] -0329+ 8F76 ;[] Вход: HL - адрес сохраненных номеров [] -0330+ 8F76 ;[]=========================================================================[] -0331+ 8F76 PrintStrWin: -0332+ 8F76 21 3F AB ld hl,WinPage ;вывод номеров банок в окнах -0333+ 8F79 11 98 8F ld de,.String+3 -0334+ 8F7C 06 04 ld b,4 -0335+ 8F7E C5 .L1 push bc -0336+ 8F7F 7E ld a,(hl) -0337+ 8F80 23 inc hl -0338+ 8F81 E5 push hl -0339+ 8F82 6F ld l,a -0340+ 8F83 26 00 ld h,0 -0341+ 8F85 CD 5E 91 call NumToStr8 ;конвертирование в HEX-строку -0342+ 8F88 13 inc de -0343+ 8F89 13 inc de -0344+ 8F8A 13 inc de -0345+ 8F8B E1 pop hl -0346+ 8F8C C1 pop bc -0347+ 8F8D 10 EF djnz .L1 -0348+ 8F8F -0349+ 8F8F 21 95 8F ld hl,.String -0350+ 8F92 C3 2C 8E jp PrnStrColor-6 -0351+ 8F95 -0352+ 8F95 .String db 0x16,0x02,0x12,"#01" -0352+ 8F95 160212233031 -0353+ 8F9B db 0x16,0x08,0x12,"#02" -0353+ 8F9B 160812233032 -0354+ 8FA1 db 0x16,0x0E,0x12,"#03" -0354+ 8FA1 160E12233033 -0355+ 8FA7 db 0x16,0x14,0x12,"#04",0 -0355+ 8FA7 16141223303400 -0356+ 8FAE -0357+ 8FAE ;[]=========================================================================[] -0358+ 8FAE ;[] Печать глубины стека [] -0359+ 8FAE ;[]=========================================================================[] -0360+ 8FAE PrintSPDn: -0361+ 8FAE 3A 22 AB ld a,(StackDown) -0362+ 8FB1 6F ld l,a -0363+ 8FB2 3E 7F ld a,0x7F -0364+ 8FB4 BD cp l ;отрицательное? -0365+ 8FB5 30 05 jr nc,.L1 -0366+ 8FB7 CB BD res 7,l ;сбросить минус -0367+ 8FB9 3C inc a -0368+ 8FBA 95 sub l -0369+ 8FBB 6F ld l,a -0370+ 8FBC 26 00 .L1 ld h,0 -0371+ 8FBE 11 F2 8F ld de,.String+1 -0372+ 8FC1 D5 push de -0373+ 8FC2 CD AF 91 call ConvDecStr8 -0374+ 8FC5 E1 pop hl -0375+ 8FC6 2B dec hl -0376+ 8FC7 01 30 03 ld bc,3*256+"0" -0377+ 8FCA 71 ld (hl),c -0378+ 8FCB 7E ld a,(hl) ;гашение незначащих нулей -0379+ 8FCC B9 cp c -0380+ 8FCD 20 06 jr nz,$+8 -0381+ 8FCF 3E 20 ld a,0x20 -0382+ 8FD1 77 ld (hl),a -0383+ 8FD2 23 inc hl -0384+ 8FD3 10 F6 djnz $-8 -0385+ 8FD5 3A 22 AB ld a,(StackDown) -0386+ 8FD8 CB 7F bit 7,a -0387+ 8FDA 28 04 jr z,$+6 -0388+ 8FDC 2B dec hl ;отрицательное число -0389+ 8FDD 3E 2D ld a,"-" -0390+ 8FDF 77 ld (hl),a -0391+ 8FE0 -0392+ 8FE0 11 0A 14 ld de,0x140A -0393+ 8FE3 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0394+ 8FE5 F3 di -0395+ 8FE6 CF rst BiosRst -0396+ 8FE7 21 F1 8F ld hl,.String ;печатаемая строка -0397+ 8FEA 01 86 04 ld bc,4*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0398+ 8FED F3 di -0399+ 8FEE CF rst BiosRst -0400+ 8FEF FB ei -0401+ 8FF0 C9 ret -0402+ 8FF1 -0403+ 8FF1 00 .String ds 4 -0404+ 8FF5 -0405+ 8FF5 ;[]=========================================================================[] -0406+ 8FF5 ;[] Печать значений стека [] -0407+ 8FF5 ;[]=========================================================================[] -0408+ 8FF5 PrintStrSP: -0409+ 8FF5 3A 66 90 ld a,(.StrSp) ;строка с вершиной стека -0410+ 8FF8 3C inc a -0411+ 8FF9 28 0D jr z,.L4 ;если вершина стека не попадает в дамп -0412+ 8FFB 2A 3B AB ld hl,(Reg._SP) -0413+ 8FFE 2B dec hl -0414+ 8FFF 2B dec hl -0415+ 9000 23 inc hl -0416+ 9001 23 inc hl -0417+ 9002 3D dec a -0418+ 9003 20 FB jr nz,$-3 -0419+ 9005 22 23 AB ld (StackDump),hl -0420+ 9008 -0421+ 9008 2A 23 AB .L4 ld hl,(StackDump) ;начало дампа -0422+ 900B 11 01 16 ld de,#1601 ;координаты печати -0423+ 900E 3E FF ld a,-1 -0424+ 9010 32 66 90 ld (.StrSp),a -0425+ 9013 -0426+ 9013 06 08 ld b,8 ;кол-во строк дампа -0427+ 9015 C5 .L3 push bc -0428+ 9016 D5 push de ;координаты -0429+ 9017 E5 push hl -0430+ 9018 B7 or a ;сброс флага C -0431+ 9019 78 ld a,b -0432+ 901A ED 4B 3B AB ld bc,(Reg._SP) ;адрес вершины стека -0433+ 901E ED 42 sbc hl,bc -0434+ 9020 20 0C jr nz,.L2 -0435+ 9022 47 ld b,a -0436+ 9023 3E 08 ld a,8 -0437+ 9025 90 sub b -0438+ 9026 32 66 90 ld (.StrSp),a ;номер строки в дампе с вершиной стека -0439+ 9029 3A 15 AB ld a,(Color._SP) ;цвет вершины стека -0440+ 902C 18 03 jr .L2+3 -0441+ 902E 3A 11 AB .L2 ld a,(Color.Screen) ;основной цвет -0442+ 9031 32 39 90 ld (.L1+1),a ;записали цвет -0443+ 9034 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0444+ 9036 F3 di -0445+ 9037 CF rst BiosRst -0446+ 9038 1E 00 .L1 ld e,0 ;цвет подсветки -0447+ 903A 01 83 0B ld bc,11*256+Bios.Lp_Print_Atr ;в рег.B длина строки -0448+ 903D CF rst BiosRst -0449+ 903E E1 pop hl -0450+ 903F D1 pop de -0451+ 9040 D5 push de -0452+ 9041 E5 push hl -0453+ 9042 CD 67 8E call PrintReg ;печать адреса -0454+ 9045 E1 pop hl -0455+ 9046 D1 pop de -0456+ 9047 D5 push de -0457+ 9048 2B dec hl -0458+ 9049 2B dec hl -0459+ 904A E5 push hl -0460+ 904B 3E 06 ld a,6 -0461+ 904D 83 add a,e -0462+ 904E 5F ld e,a -0463+ 904F -0464+ 904F 23 inc hl -0465+ 9050 23 inc hl -0466+ 9051 CD 6C 92 call Ld_a_hl -0467+ 9054 4F ld c,a -0468+ 9055 23 inc hl -0469+ 9056 CD 6C 92 call Ld_a_hl -0470+ 9059 6F ld l,a -0471+ 905A 61 ld h,c -0472+ 905B -0473+ 905B CD 67 8E call PrintReg ;печать значения стека -0474+ 905E E1 pop hl -0475+ 905F D1 pop de -0476+ 9060 14 inc d -0477+ 9061 C1 pop bc -0478+ 9062 10 B1 djnz .L3 -0479+ 9064 FB ei -0480+ 9065 C9 ret -0481+ 9066 -0482+ 9066 06 .StrSp db 6 -0483+ 9067 -0484+ 9067 ;[]=========================================================================[] -0485+ 9067 ;[] Печать дампа [] -0486+ 9067 ;[]=========================================================================[] -0487+ 9067 PrintDump: -0488+ 9067 11 0E 16 ld de,0x160E ;координаты -0489+ 906A 2A 43 AB ld hl,(Dump1) -0490+ 906D 06 08 ld b,8 ;количество строк -0491+ 906F D5 push de -0492+ 9070 C5 push bc -0493+ 9071 E5 push hl -0494+ 9072 CD 97 90 call PrintStrDump -0495+ 9075 E1 pop hl -0496+ 9076 01 10 00 ld bc,16 -0497+ 9079 09 add hl,bc -0498+ 907A C1 pop bc -0499+ 907B D1 pop de -0500+ 907C 14 inc d ;следующая строка -0501+ 907D 10 F0 djnz $-14 -0502+ 907F C9 ret -0503+ 9080 -0504+ 9080 21 45 AB ld hl,Dump ;вывод дампа -0505+ 9083 ; ld de,0x160E ;координаты -0506+ 9083 06 08 ld b,8 ;количество строк -0507+ 9085 D5 push de -0508+ 9086 C5 push bc -0509+ 9087 4E ld c,(hl) ;младший байт адреса -0510+ 9088 23 inc hl -0511+ 9089 E5 push hl -0512+ 908A 66 ld h,(hl) ;старший байт адреса -0513+ 908B 69 ld l,c -0514+ 908C CD 97 90 call PrintStrDump -0515+ 908F E1 pop hl -0516+ 9090 23 inc hl -0517+ 9091 C1 pop bc -0518+ 9092 D1 pop de -0519+ 9093 14 inc d ;следующая строка -0520+ 9094 10 EF djnz $-15 -0521+ 9096 C9 ret -0522+ 9097 -0523+ 9097 ;[]=========================================================================[] -0524+ 9097 ;[] Печать строки дампа [] -0525+ 9097 ;[] Вход: DE - координаты печати [] -0526+ 9097 ;[] HL - адрес начала строки [] -0527+ 9097 ;[]=========================================================================[] -0528+ 9097 PrintStrDump: -0529+ 9097 D5 push de -0530+ 9098 E5 push hl -0531+ 9099 -0532+ 9099 44 ld b,h -0533+ 909A 4D ld c,l -0534+ 909B 11 EE 90 ld de,.String -0535+ 909E DD 21 17 91 ld ix,.String+41 -0536+ 90A2 DD E5 push ix -0537+ 90A4 -0538+ 90A4 3E 08 ld a,8 -0539+ 90A6 08 .L1 exa -0540+ 90A7 CD 47 92 call Ld_a_bc ;ld a,(bc) -0541+ 90AA DD 77 00 ld (ix),a -0542+ 90AD DD 23 inc ix -0543+ 90AF CD 74 91 call ConvHexStr -0544+ 90B2 EB ex de,hl -0545+ 90B3 73 ld (hl),e -0546+ 90B4 23 inc hl -0547+ 90B5 72 ld (hl),d -0548+ 90B6 23 inc hl -0549+ 90B7 EB ex de,hl -0550+ 90B8 03 inc bc -0551+ 90B9 CD 47 92 call Ld_a_bc ;ld a,(bc) -0552+ 90BC DD 77 00 ld (ix),a -0553+ 90BF DD 23 inc ix -0554+ 90C1 CD 74 91 call ConvHexStr -0555+ 90C4 EB ex de,hl -0556+ 90C5 73 ld (hl),e -0557+ 90C6 23 inc hl -0558+ 90C7 72 ld (hl),d -0559+ 90C8 23 inc hl -0560+ 90C9 23 inc hl -0561+ 90CA EB ex de,hl -0562+ 90CB 03 inc bc -0563+ 90CC 08 exa -0564+ 90CD 3D dec a -0565+ 90CE 20 D6 jr nz,.L1 -0566+ 90D0 -0567+ 90D0 06 10 ld b,16 -0568+ 90D2 E1 pop hl -0569+ 90D3 CD 27 91 call ReplSymNoPrint ;замена непечатных символов -0570+ 90D6 -0571+ 90D6 E1 pop hl -0572+ 90D7 D1 pop de -0573+ 90D8 D5 push de -0574+ 90D9 CD 67 8E call PrintReg ;печать адреса строки -0575+ 90DC D1 pop de -0576+ 90DD F3 di -0577+ 90DE 3E 07 ld a,7 -0578+ 90E0 83 add a,e -0579+ 90E1 5F ld e,a -0580+ 90E2 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0581+ 90E4 CF rst BiosRst -0582+ 90E5 21 EE 90 ld hl,.String -0583+ 90E8 01 86 39 ld bc,57*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0584+ 90EB CF rst BiosRst -0585+ 90EC FB ei -0586+ 90ED C9 ret -0587+ 90EE -0588+ 90EE .String db "1000 2000 3000 4000 5000 6000 7000 8000 " -0588+ 90EE 3130303020323030302033303030203430303020353030302036303030203730 -0588+ 910E 303020383030302020 -0589+ 9117 db "0123456789ABCDEF" -0589+ 9117 30313233343536373839414243444546 -0590+ 9127 -0591+ 9127 ;[]=========================================================================[] -0592+ 9127 ;[] Замена непечатных символов в строке [] -0593+ 9127 ;[] Вход: B - длина строки [] -0594+ 9127 ;[] HL - адрес начала строки [] -0595+ 9127 ;[]=========================================================================[] -0596+ 9127 ReplSymNoPrint: -0597+ 9127 3A 5C AA ld a,(SymbolNoPrint) -0598+ 912A 4F ld c,a -0599+ 912B 7E .L1 ld a,(hl) -0600+ 912C FE 7F cp 127 -0601+ 912E 28 08 jr z,$+10 -0602+ 9130 FE FF cp 0xFF -0603+ 9132 28 04 jr z,$+6 -0604+ 9134 FE 20 cp " " -0605+ 9136 30 01 jr nc,$+3 -0606+ 9138 71 ld (hl),c -0607+ 9139 23 inc hl -0608+ 913A 10 EF djnz .L1 -0609+ 913C C9 ret -0610+ 913D -0611+ 913D ;[]=========================================================================[] -0612+ 913D ;[] Формирование 16-тибитного числа [] -0613+ 913D ;[] Вход: DE - адрес буфера [] -0614+ 913D ;[] HL - число [] -0615+ 913D ;[]=========================================================================[] -0616+ 913D NumToStr16: -0617+ 913D 3A 7E AB ld a,(DecHex) ;систем счисления -0618+ 9140 B7 or a -0619+ 9141 C2 91 91 jp nz,ConvDecStr -0620+ 9144 -0621+ 9144 3E 23 ld a,"#" -0622+ 9146 12 ld (de),a -0623+ 9147 13 inc de -0624+ 9148 4D ld c,l -0625+ 9149 7C ld a,h -0626+ 914A CD 74 91 call ConvHexStr -0627+ 914D EB ex de,hl -0628+ 914E 73 ld (hl),e ;старший байт -0629+ 914F 23 inc hl -0630+ 9150 72 ld (hl),d -0631+ 9151 23 inc hl -0632+ 9152 EB ex de,hl -0633+ 9153 79 ld a,c -0634+ 9154 CD 74 91 call ConvHexStr -0635+ 9157 EB ex de,hl -0636+ 9158 73 ld (hl),e ;младший байт -0637+ 9159 23 inc hl -0638+ 915A 72 ld (hl),d -0639+ 915B 23 inc hl -0640+ 915C EB ex de,hl -0641+ 915D C9 ret -0642+ 915E -0643+ 915E ;[]=========================================================================[] -0644+ 915E ;[] Формирование 8-битного числа [] -0645+ 915E ;[] Вход: DE - адрес буфера [] -0646+ 915E ;[] HL - число [] -0647+ 915E ;[]=========================================================================[] -0648+ 915E NumToStr8: -0649+ 915E 3A 7E AB ld a,(DecHex) ;систем счисления -0650+ 9161 B7 or a -0651+ 9162 C2 AF 91 jp nz,ConvDecStr8 -0652+ 9165 -0653+ 9165 3E 23 .Hex ld a,"#" -0654+ 9167 12 ld (de),a -0655+ 9168 13 inc de -0656+ 9169 7D ld a,l -0657+ 916A CD 74 91 call ConvHexStr -0658+ 916D EB ex de,hl -0659+ 916E 73 ld (hl),e -0660+ 916F 23 inc hl -0661+ 9170 72 ld (hl),d -0662+ 9171 23 inc hl -0663+ 9172 EB ex de,hl -0664+ 9173 C9 ret -0665+ 9174 -0666+ 9174 ;[]=========================================================================[] -0667+ 9174 ;[] Конвертирование числа в HEX-строку [] -0668+ 9174 ;[] Вход: A - число [] -0669+ 9174 ;[] Выход: HL - HEX-строка [] -0670+ 9174 ;[]=========================================================================[] -0671+ 9174 ConvHexStr: -0672+ 9174 F5 push af -0673+ 9175 0F rrca -0674+ 9176 0F rrca -0675+ 9177 0F rrca -0676+ 9178 0F rrca -0677+ 9179 E6 0F and 0x0F -0678+ 917B C6 30 add a,0x30 -0679+ 917D FE 3A cp 0x3A -0680+ 917F 38 02 jr c,$+4 -0681+ 9181 C6 07 add a,7 -0682+ 9183 -0683+ 9183 6F ld l,a -0684+ 9184 F1 pop af -0685+ 9185 E6 0F and 0x0F -0686+ 9187 C6 30 add a,0x30 -0687+ 9189 FE 3A cp 0x3A -0688+ 918B 38 02 jr c,$+4 -0689+ 918D C6 07 add a,7 -0690+ 918F 67 ld h,a -0691+ 9190 C9 ret -0692+ 9191 -0693+ 9191 ;[]=========================================================================[] -0694+ 9191 ;[] Конвертирование 16-битного числа в DEC-строку [] -0695+ 9191 ;[] Вход: HL - число [] -0696+ 9191 ;[] DE - адрес начала DEC-строки [] -0697+ 9191 ;[]=========================================================================[] -0698+ 9191 ConvDecStr: -0699+ 9191 01 F0 D8 ld bc,-10000 -0700+ 9194 3E FF ld a,0xFF -0701+ 9196 3C inc a -0702+ 9197 09 add hl,bc -0703+ 9198 38 FC jr c,$-2 -0704+ 919A ED 42 sbc hl,bc -0705+ 919C C6 30 add a,"0" -0706+ 919E 12 ld (de),a -0707+ 919F 13 inc de -0708+ 91A0 -0709+ 91A0 01 18 FC ld bc,-1000 -0710+ 91A3 3E FF ld a,0xFF -0711+ 91A5 3C inc a -0712+ 91A6 09 add hl,bc -0713+ 91A7 38 FC jr c,$-2 -0714+ 91A9 ED 42 sbc hl,bc -0715+ 91AB C6 30 add a,"0" -0716+ 91AD 12 ld (de),a -0717+ 91AE 13 inc de -0718+ 91AF ConvDecStr8: -0719+ 91AF 01 9C FF ld bc,-100 -0720+ 91B2 3E FF ld a,0xFF -0721+ 91B4 3C inc a -0722+ 91B5 09 add hl,bc -0723+ 91B6 38 FC jr c,$-2 -0724+ 91B8 ED 42 sbc hl,bc -0725+ 91BA C6 30 add a,"0" -0726+ 91BC 12 ld (de),a -0727+ 91BD 13 inc de -0728+ 91BE ConvDecStr8_1: -0729+ 91BE 01 F6 FF ld bc,-10 -0730+ 91C1 3E FF ld a,0xFF -0731+ 91C3 3C inc a -0732+ 91C4 09 add hl,bc -0733+ 91C5 38 FC jr c,$-2 -0734+ 91C7 ED 42 sbc hl,bc -0735+ 91C9 -0736+ 91C9 C6 30 add a,"0" -0737+ 91CB 12 ld (de),a -0738+ 91CC 13 inc de -0739+ 91CD -0740+ 91CD 7D ld a,l -0741+ 91CE C6 30 add a,"0" -0742+ 91D0 12 ld (de),a -0743+ 91D1 13 inc de -0744+ 91D2 C9 ret -0745+ 91D3 -0746+ 91D3 ;[]=========================================================================[] -0747+ 91D3 ;[] Прорисовка курсора [] -0748+ 91D3 ;[] Вход: B - длина курсора [] -0749+ 91D3 ;[] HL - координаты курсора [] -0750+ 91D3 ;[]=========================================================================[] -0751+ 91D3 CursorSet: -0752+ 91D3 22 36 92 ld (CursorRes+1),hl -0753+ 91D6 EB ex de,hl -0754+ 91D7 68 ld l,b ;размер по вертикали -0755+ 91D8 26 01 ld h,1 ;размер по горизонтали -0756+ 91DA 22 39 92 ld (CursorRes+4),hl -0757+ 91DD DD 21 09 92 ld ix,.Buffer -0758+ 91E1 D5 push de -0759+ 91E2 E5 push hl -0760+ 91E3 DD E5 push ix -0761+ 91E5 C5 push bc -0762+ 91E6 ifdef D_PRINTCH_BIOS -0763+ 91E6~ xor a -0764+ 91E6~ ld c,Bios.Win_Copy_Win ;копирование в буфер -0765+ 91E6~ di -0766+ 91E6~ rst BiosRst -0767+ 91E6~ ei -0768+ 91E6 else -0769+ 91E6 3A 1E AB ld a,(BankDebug) -0770+ 91E9 47 ld b,a -0771+ 91EA 0E 59 ld c,Dss.WinCopy -0772+ 91EC D7 rst DssRst -0773+ 91ED endif -0774+ 91ED -0775+ 91ED C1 pop bc ;в B длина курсора -0776+ 91EE E1 pop hl -0777+ 91EF E5 push hl -0778+ 91F0 23 inc hl -0779+ 91F1 7E ld a,(hl) ;цвет символов -0780+ 91F2 32 43 92 ld (CursorRes.L1+1),a -0781+ 91F5 3A 19 AB ld a,(Color.Cursor) -0782+ 91F8 77 .L1 ld (hl),a -0783+ 91F9 23 inc hl ;к байту цвета -0784+ 91FA 23 inc hl -0785+ 91FB 10 FB djnz .L1 -0786+ 91FD -0787+ 91FD DD E1 pop ix -0788+ 91FF E1 pop hl -0789+ 9200 D1 pop de -0790+ 9201 ifdef D_PRINTCH_BIOS -0791+ 9201~ xor a -0792+ 9201~ ld c,Bios.Win_Restore_Win ;вывод курсора на экран -0793+ 9201~ di -0794+ 9201~ rst BiosRst -0795+ 9201~ ei -0796+ 9201 else -0797+ 9201 3A 1E AB ld a,(BankDebug) -0798+ 9204 47 ld b,a -0799+ 9205 0E 5A ld c,Dss.WinRest -0800+ 9207 D7 rst DssRst -0801+ 9208 endif -0802+ 9208 C9 ret -0803+ 9209 -0804+ 9209 00 .Buffer ds 22*2 ;max длина курсора -0805+ 9235 -0806+ 9235 ;[]=========================================================================[] -0807+ 9235 ;[] Востановление экрана под курсором [] -0808+ 9235 ;[]=========================================================================[] -0809+ 9235 CursorRes: -0810+ 9235 11 00 00 ld de,0 ;координаты -0811+ 9238 21 00 00 ld hl,0 ;размер -0812+ 923B 45 ld b,l ;длина -0813+ 923C D5 push de -0814+ 923D E5 push hl -0815+ 923E 21 09 92 ld hl,CursorSet.Buffer -0816+ 9241 E5 push hl -0817+ 9242 3E 00 .L1 ld a,0 ;цвет -0818+ 9244 23 inc hl ;к байту цвета -0819+ 9245 18 B1 jr CursorSet.L1 -0820+ 9247 -0821+ 9247 ;[]=========================================================================[] -0822+ 9247 ;[] Чтение байта из памяти с проверкой адреса [] -0823+ 9247 ;[] Вход: BC или HL - адрес в памяти [] -0824+ 9247 ;[] Выход: A - считанный байт [] -0825+ 9247 ;[]=========================================================================[] -0826+ 9247 Ld_a_bc: -0827+ 9247 3E C0 ld a,11000000b ;проверка диапазона -0828+ 9249 A0 and b -0829+ 924A 28 10 jr z,.L1 ;в 0-м окне -0830+ 924C FE 80 cp 10000000b ;во 2-ом окне -0831+ 924E 0A ld a,(bc) -0832+ 924F C0 ret nz ;возвращаем байт, если нет -0833+ 9250 3A 41 AB ld a,(WinPage+2) ;номер банки под отладчиком -0834+ 9253 D3 E2 out (EmmWin.P3),a ;в третье окно ее -0835+ 9255 CB F0 set 6,b ;корректируем адрес -0836+ 9257 0A ld a,(bc) ;читаем байт -0837+ 9258 CB B0 res 6,b ;востанавливаем адрес -0838+ 925A 18 33 jr Ld_a_hl.L1 -0839+ 925C 3A 3F AB .L1 ld a,(WinPage) ;номер банки в 0-м -0840+ 925F D3 E2 out (EmmWin.P3),a ;в третье окно ее -0841+ 9261 CB F0 set 6,b ;корректируем адрес -0842+ 9263 CB F8 set 7,b -0843+ 9265 0A ld a,(bc) ;читаем байт -0844+ 9266 CB B0 res 6,b ;востанавливаем адрес -0845+ 9268 CB B8 res 7,b -0846+ 926A 18 23 jr Ld_a_hl.L1 -0847+ 926C Ld_a_hl: -0848+ 926C 3E C0 ld a,11000000b ;проверка диапазона -0849+ 926E A4 and h -0850+ 926F 28 10 jr z,.L2 ;в 0-м окне -0851+ 9271 FE 80 cp 10000000b ;во 2-ом окне -0852+ 9273 7E ld a,(hl) -0853+ 9274 C0 ret nz ;возвращаем байт, если нет -0854+ 9275 3A 41 AB ld a,(WinPage+2) ;номер банки под отладчиком -0855+ 9278 D3 E2 out (EmmWin.P3),a ;в третье окно ее -0856+ 927A CB F4 set 6,h ;корректируем адрес -0857+ 927C 7E ld a,(hl) ;читаем байт -0858+ 927D CB B4 res 6,h ;востанавливаем адрес -0859+ 927F 18 0E jr .L1 -0860+ 9281 3A 3F AB .L2 ld a,(WinPage) ;номер банки в 0-м окне -0861+ 9284 D3 E2 out (EmmWin.P3),a ;в третье окно ее -0862+ 9286 CB F4 set 6,h ;корректируем адрес -0863+ 9288 CB FC set 7,h -0864+ 928A 7E ld a,(hl) ;читаем байт -0865+ 928B CB B4 res 6,h ;востанавливаем адрес -0866+ 928D CB BC res 7,h -0867+ 928F F5 .L1 push af -0868+ 9290 3A 42 AB ld a,(WinPage+3) ;номер банки из 3-го окна -0869+ 9293 D3 E2 out (EmmWin.P3),a ;востанавливаем -0870+ 9295 F1 pop af -0871+ 9296 C9 ret -0872+ 9297 -0873+ 9297 ;[]=========================================================================[] -0874+ 9297 ;[] Запись байта в память с проверкой адреса [] -0875+ 9297 ;[] Вход: HL - адрес в памяти [] -0876+ 9297 ;[] A - записываемый байт [] -0877+ 9297 ;[]=========================================================================[] -0878+ 9297 Ld_hl_a: -0879+ 9297 F5 push af -0880+ 9298 3E C0 ld a,11000000b ;проверка диапазона -0881+ 929A A4 and h -0882+ 929B 28 12 jr z,.L2 ;в 0-ом окне -0883+ 929D FE 80 cp 10000000b ;во 2-ом окне? -0884+ 929F 28 03 jr z,.L1 -0885+ 92A1 F1 pop af -0886+ 92A2 77 ld (hl),a ;записали байт, если нет -0887+ 92A3 C9 ret -0888+ 92A4 3A 41 AB .L1 ld a,(WinPage+2) ;номер банки под отладчиком -0889+ 92A7 D3 E2 out (EmmWin.P3),a ;в третье окно ее -0890+ 92A9 CB F4 set 6,h ;корректируем адрес -0891+ 92AB F1 pop af -0892+ 92AC 77 ld (hl),a ;пишем байт -0893+ 92AD 18 0D jr .L3 -0894+ 92AF 3A 3F AB .L2 ld a,(WinPage) ;номер банки в 0-ом -0895+ 92B2 D3 E2 out (EmmWin.P3),a ;в третье окно ее -0896+ 92B4 CB F4 set 6,h ;корректируем адрес -0897+ 92B6 CB FC set 7,h -0898+ 92B8 F1 pop af -0899+ 92B9 77 ld (hl),a ;пишем байт -0900+ 92BA CB BC res 7,h ;востанавливаем адрес -0901+ 92BC CB B4 .L3 res 6,h -0902+ 92BE 3A 42 AB ld a,(WinPage+3) ;номер банки из 3-го окна -0903+ 92C1 D3 E2 out (EmmWin.P3),a ;востанавливаем -0904+ 92C3 C9 ret -0905+ 92C4 -0906+ 92C4 ;[]=========================================================================[] -0907+ 92C4 ;[] Определение принадлежности адреса области памяти [] -0908+ 92C4 ;[] Вход: HL - нижний адрес области памяти [] -0909+ 92C4 ;[] DE - верхний адрес области памяти [] -0910+ 92C4 ;[] BC - адрес [] -0911+ 92C4 ;[] Выход: флаг C - адрес не принадлежит области памяти [] -0912+ 92C4 ;[] флаг NC - адрес принадлежит области памяти [] -0913+ 92C4 ;[]=========================================================================[] -0914+ 92C4 AdrArea: -0915+ 92C4 B7 or a -0916+ 92C5 ED 42 sbc hl,bc -0917+ 92C7 D8 ret c -0918+ 92C8 EB ex de,hl -0919+ 92C9 B7 or a -0920+ 92CA ED 42 sbc hl,bc -0921+ 92CC 3F ccf -0922+ 92CD C9 ret -0923+ 92CE -0924+ 92CE -0373 92CE include "file.asm";"D:\WORKAST\DEMON\file" -0001+ 92CE ;[]=========================================================================[] -0002+ 92CE ;[] Файловые процедуры монитора-отладчика DemoN [] -0003+ 92CE ;[] v0.10 - последние изменения 27.08.2006 [] -0004+ 92CE ;[]=========================================================================[] -0005+ 92CE LoadFile: -0006+ 92CE AF xor a ;выкл часов -0007+ 92CF 32 5D AA ld (ClockOn),a -0008+ 92D2 01 54 01 ld bc,0x0100+Dss.SelPage ;системный экран -0009+ 92D5 D7 rst DssRst -0010+ 92D6 -0011+ 92D6 21 FE AA ld hl,Str.Load ;сообщение о загрузке файла -0012+ 92D9 0E 5C ld c,Dss.PChars -0013+ 92DB D7 rst DssRst -0014+ 92DC -0015+ 92DC CD EC 92 call LoadExe -0016+ 92DF -0017+ 92DF 3A 5E AA ld a,(DemonScreen) -0018+ 92E2 47 ld b,a -0019+ 92E3 0E 54 ld c,Dss.SelPage -0020+ 92E5 D7 rst DssRst -0021+ 92E6 3E FF ld a,On ;вкл часов -0022+ 92E8 32 5D AA ld (ClockOn),a -0023+ 92EB C9 ret -0024+ 92EC -0025+ 92EC LoadExe: -0026+ 92EC 21 80 94 ld hl,FDebug ;имя файла -0027+ 92EF 3E 01 ld a,1 ;открыть для чтения -0028+ 92F1 0E 11 ld c,Dss.Open -0029+ 92F3 D7 rst DssRst -0030+ 92F4 DA 05 95 jp c,PrErDss ;выход с ошибкой -0031+ 92F7 -0032+ 92F7 32 7F 94 ld (FId),a ;запомнить файловый манипулятор -0033+ 92FA -0034+ 92FA 21 80 94 ld hl,FDebug ;буфер для загрузки заголовка -0035+ 92FD 11 7F 00 ld de,0x7F ;кол-во считываемых байт -0036+ 9300 0E 13 ld c,Dss.Read ;чтение -0037+ 9302 D7 rst DssRst -0038+ 9303 DA 05 95 jp c,PrErDss ;выход с ошибкой -0039+ 9306 -0040+ 9306 2A 80 94 ld hl,(FDebug) ;заголовок EXE-файла -0041+ 9309 11 45 58 ld de,0x5845 ;'EX' проверка идентификатора -0042+ 930C ED 52 sbc hl,de -0043+ 930E 20 3A jr nz,.L1 -0044+ 9310 21 83 94 ld hl,FDebug+3 -0045+ 9313 7E ld a,(hl) ;версия EXE-файла -0046+ 9314 B7 or a -0047+ 9315 20 33 jr nz,.L1 -0048+ 9317 23 inc hl -0049+ 9318 5E ld e,(hl) ;начало исполняемого кода -0050+ 9319 23 inc hl -0051+ 931A 56 ld d,(hl) -0052+ 931B 01 0B 00 ld bc,11 ;пропускаем флаг загрузчика и зарезервированные байты -0053+ 931E 09 add hl,bc -0054+ 931F 7E ld a,(hl) ;мл.байт расположения кода в памяти -0055+ 9320 32 03 95 ld (FRam),a -0056+ 9323 23 inc hl -0057+ 9324 7E ld a,(hl) ;ст.байт расположения кода в памяти -0058+ 9325 32 04 95 ld (FRam+1),a -0059+ 9328 23 inc hl -0060+ 9329 7E ld a,(hl) ;мл.байт адреса запуска -0061+ 932A 32 3D AB ld (Reg._PC),a -0062+ 932D 32 55 AB ld (ListAdr),a ;мл.байт адреса листинга -0063+ 9330 23 inc hl -0064+ 9331 7E ld a,(hl) ;ст.байт адреса запуска -0065+ 9332 32 3E AB ld (Reg._PC+1),a -0066+ 9335 32 56 AB ld (ListAdr+1),a ;ст.байт адреса листинга -0067+ 9338 23 inc hl -0068+ 9339 7E ld a,(hl) ;мл.байт стека программы -0069+ 933A 32 3B AB ld (Reg._SP),a -0070+ 933D 23 inc hl -0071+ 933E 7E ld a,(hl) ;ст.байт стека программы -0072+ 933F 32 3C AB ld (Reg._SP+1),a -0073+ 9342 7B ld a,e -0074+ 9343 32 8A 93 ld (.L2+2),a -0075+ 9346 7A ld a,d -0076+ 9347 32 8B 93 ld (.L2+3),a -0077+ 934A -0078+ 934A 21 00 00 .L1 ld hl,0 -0079+ 934D DD 21 00 00 ld ix,0 ;смещение в файле -0080+ 9351 01 15 02 ld bc,2*256+Dss.Move_FP ;относительно конца -0081+ 9354 D7 rst DssRst -0082+ 9355 DA 05 95 jp c,PrErDss ;выход с ошибкой -0083+ 9358 -0084+ 9358 E5 push hl -0085+ 9359 ED 5B 03 95 ld de,(FRam) ;адрес расположения кода -0086+ 935D CB F2 set 6,d -0087+ 935F CB BA res 7,d ;грузим через 1-е окно -0088+ 9361 21 00 80 ld hl,0x8000 -0089+ 9364 B7 or a ;сбросить флаг C -0090+ 9365 ED 52 sbc hl,de ;кол-во считываемых байт -0091+ 9367 22 9E 93 ld (.L6+1),hl -0092+ 936A EB ex de,hl -0093+ 936B 22 A1 93 ld (.L6+4),hl -0094+ 936E E1 pop hl -0095+ 936F CD 52 94 call NBank ;определить кол-во банок -0096+ 9372 DA 05 95 jp c,PrErDss ;выход с ошибкой -0097+ 9375 -0098+ 9375 32 7D 94 ld (MemId+1),a ;кол-во выделяемых страниц -0099+ 9378 47 ld b,a -0100+ 9379 0E 3D ld c,Dss.GetMem ;выделение памяти -0101+ 937B D7 rst DssRst -0102+ 937C DA 05 95 jp c,PrErDss ;выход с ошибкой -0103+ 937F 32 7C 94 ld (MemId),a ;id блока памяти -0104+ 9382 -0105+ 9382 3A 7F 94 ld a,(FId) ;файловый манипулятор -0106+ 9385 21 00 00 ld hl,0 -0107+ 9388 DD 21 00 00 .L2 ld ix,0 ;смещение в файле -0108+ 938C 01 15 00 ld bc,Dss.Move_FP ;относительно начала -0109+ 938F D7 rst DssRst -0110+ 9390 DA 05 95 jp c,PrErDss ;выход с ошибкой -0111+ 9393 -0112+ 9393 3A 7C 94 ld a,(MemId) ;id блока памяти -0113+ 9396 01 39 00 ld bc,Dss.SetWin1 ;вкл 1-ю банку в 1-е окно -0114+ 9399 D7 rst DssRst -0115+ 939A DA 05 95 jp c,PrErDss ;выход с ошибкой -0116+ 939D -0117+ 939D 11 FF 3F .L6 ld de,0x3FFF ;кол-во считываемых байт -0118+ 93A0 21 00 40 ld hl,0x4000 ;адрес загрузки кода -0119+ 93A3 3E 01 ld a,1 ;счетчик банок -0120+ 93A5 32 7E 94 ld (MemId+2),a -0121+ 93A8 3A 7F 94 .L5 ld a,(FId) ;файловый манипулятор -0122+ 93AB 0E 13 ld c,Dss.Read ;чтение -0123+ 93AD D7 rst DssRst -0124+ 93AE DA 05 95 jp c,PrErDss ;выход с ошибкой -0125+ 93B1 -0126+ 93B1 ED 4B 7D 94 ld bc,(MemId+1) -0127+ 93B5 78 ld a,b -0128+ 93B6 B9 cp c ;загрзили весь файл? -0129+ 93B7 28 15 jr z,.L4 ;переход, если да -0130+ 93B9 -0131+ 93B9 3C inc a -0132+ 93BA 32 7E 94 ld (MemId+2),a ;увеличить счетчик банок -0133+ 93BD 3A 7C 94 ld a,(MemId) ;id блока памяти -0134+ 93C0 0E 39 ld c,Dss.SetWin1 ;вкл банку в 1-е окно -0135+ 93C2 D7 rst DssRst -0136+ 93C3 DA 05 95 jp c,PrErDss ;выход с ошибкой -0137+ 93C6 -0138+ 93C6 21 00 40 ld hl,0x4000 ;адрес в памяти для загрузки -0139+ 93C9 11 FF 3F ld de,0x3FFF ;кол-во загружаемых байт -0140+ 93CC 18 DA jr .L5 -0141+ 93CE -0142+ 93CE 3A 7F 94 .L4 ld a,(FId) ;файловый манипулятор -0143+ 93D1 0E 12 ld c,Dss.Close ;закрыть файл -0144+ 93D3 D7 rst DssRst -0145+ 93D4 DA 05 95 jp c,PrErDss ;выход с ошибкой -0146+ 93D7 -0147+ 93D7 3A 7C 94 ld a,(MemId) ;id блока памяти -0148+ 93DA 01 C4 00 ld bc,Bios.Emm_Fn4 ;вычислить физ номер 1-й банки -0149+ 93DD CF rst BiosRst -0150+ 93DE D8 ret c ;выход с ошибкой -0151+ 93DF 32 78 94 ld (BankP),a -0152+ 93E2 3A 7D 94 ld a,(MemId+1) ;кол-во выделенных страниц -0153+ 93E5 3D dec a -0154+ 93E6 28 2F jr z,.L7 -0155+ 93E8 -0156+ 93E8 3A 7C 94 ld a,(MemId) ;id блока памяти -0157+ 93EB 01 C4 01 ld bc,1*256+Bios.Emm_Fn4 ;вычислить физ номер 2-й банки -0158+ 93EE CF rst BiosRst -0159+ 93EF D8 ret c ;выход с ошибкой -0160+ 93F0 32 79 94 ld (BankP+1),a -0161+ 93F3 3A 7D 94 ld a,(MemId+1) ;кол-во выделенных страниц -0162+ 93F6 FE 02 cp 2 -0163+ 93F8 28 1D jr z,.L7 -0164+ 93FA -0165+ 93FA 3A 7C 94 ld a,(MemId) ;id блока памяти -0166+ 93FD 01 C4 02 ld bc,2*256+Bios.Emm_Fn4 ;вычислить физ номер 3-й банки -0167+ 9400 CF rst BiosRst -0168+ 9401 D8 ret c ;выход с ошибкой -0169+ 9402 32 7A 94 ld (BankP+2),a -0170+ 9405 3A 7D 94 ld a,(MemId+1) ;кол-во выделенных страниц -0171+ 9408 FE 03 cp 3 -0172+ 940A 28 0B jr z,.L7 -0173+ 940C -0174+ 940C 3A 7C 94 ld a,(MemId) ;id блока памяти -0175+ 940F 01 C4 03 ld bc,3*256+Bios.Emm_Fn4 ;вычислить физ номер 4-й банки -0176+ 9412 CF rst BiosRst -0177+ 9413 D8 ret c ;выход с ошибкой -0178+ 9414 32 7B 94 ld (BankP+3),a -0179+ 9417 -0180+ 9417 21 3F AB .L7 ld hl,WinPage -0181+ 941A 11 78 94 ld de,BankP -0182+ 941D 3A 7D 94 ld a,(MemId+1) ;кол-во выделенных страниц -0183+ 9420 47 ld b,a -0184+ 9421 FE 05 cp 5 -0185+ 9423 38 02 jr c,$+4 -0186+ 9425 06 04 ld b,4 ;подключаем не более 4 банок -0187+ 9427 3A 04 95 ld a,(FRam+1) ;ст.адрес расположения кода -0188+ 942A E6 C0 and 0xC0 ;окно с расположением кода -0189+ 942C B7 or a ;0-е окно -0190+ 942D 20 07 jr nz,.L8 -0191+ 942F 4F ld c,a -0192+ 9430 1A ld a,(de) -0193+ 9431 77 ld (hl),a ;подключить банку программы -0194+ 9432 05 dec b -0195+ 9433 C8 ret z ;выход, если больше нет банок -0196+ 9434 -0197+ 9434 79 ld a,c -0198+ 9435 13 inc de -0199+ 9436 23 .L8 inc hl -0200+ 9437 FE 40 cp 0x40 ;1-е окно -0201+ 9439 20 07 jr nz,.L9 -0202+ 943B 4F ld c,a -0203+ 943C 1A ld a,(de) -0204+ 943D 77 ld (hl),a ;подключить банку программы -0205+ 943E 05 dec b -0206+ 943F C8 ret z ;выход, если больше нет банок -0207+ 9440 -0208+ 9440 79 ld a,c -0209+ 9441 13 inc de -0210+ 9442 23 .L9 inc hl -0211+ 9443 FE 80 cp 0x80 ;2-е окно -0212+ 9445 20 07 jr nz,.L10 -0213+ 9447 4F ld c,a -0214+ 9448 1A ld a,(de) -0215+ 9449 77 ld (hl),a ;подключить банку программы -0216+ 944A 05 dec b -0217+ 944B C8 ret z ;выход, если больше нет банок -0218+ 944C -0219+ 944C 79 ld a,c -0220+ 944D 13 inc de -0221+ 944E 23 .L10 inc hl ;иначе 3-е окно -0222+ 944F 1A ld a,(de) -0223+ 9450 77 ld (hl),a ;подключить банку программы -0224+ 9451 -0225+ 9451 C9 ret -0226+ 9452 -0227+ 9452 ;[]=========================================================================[] -0228+ 9452 ;[] Вычисление необходимого кол-ва банок для загрузки файла в память [] -0229+ 9452 ;[] Вход: HL:IX - длина файла в байтах [] -0230+ 9452 ;[] DE - кол-во байт для загрузки в 1-ю банку [] -0231+ 9452 ;[] Выход: A - кол-во необходимых банок [] -0232+ 9452 ;[] флаг C - ошибка, код ошибки в A [] -0233+ 9452 ;[]=========================================================================[] -0234+ 9452 NBank: -0235+ 9452 DD E5 push ix -0236+ 9454 44 ld b,h -0237+ 9455 4D ld c,l -0238+ 9456 E1 pop hl -0239+ 9457 03 inc bc -0240+ 9458 AF xor a -0241+ 9459 3C inc a -0242+ 945A ED 52 sbc hl,de -0243+ 945C 30 02 jr nc,$+4 -0244+ 945E 18 0C jr .L5 -0245+ 9460 11 00 40 ld de,16384 ;размер банки -0246+ 9463 F5 push af -0247+ 9464 F1 .L2 pop af -0248+ 9465 3C .L1 inc a -0249+ 9466 28 0D jr z,.L3 -0250+ 9468 ED 52 sbc hl,de -0251+ 946A 30 F9 jr nc,.L1 -0252+ 946C 0B .L5 dec bc -0253+ 946D F5 push af -0254+ 946E 78 ld a,b -0255+ 946F B1 or c -0256+ 9470 20 F2 jr nz,.L2 -0257+ 9472 F1 pop af -0258+ 9473 B7 or a ;сбросить флаг C -0259+ 9474 C9 ret -0260+ 9475 -0261+ 9475 3E 1E .L3 ld a,0x1E ;"Недостаточно памяти" -0262+ 9477 ; JP ErrorDSS -0263+ 9477 C9 ret -0264+ 9478 -0265+ 9478 00 BankP ds 4 ;номера банок загружаемой проги -0266+ 947C 00 MemId ds 3 ;id-блока памяти под файл, -0267+ 947F ;кол-во выделенных банок, -0268+ 947F ;счетчик загруженных банок -0269+ 947F 00 FId db 0 ;файловый манипулятор -0270+ 9480 00 FDebug ds 128 -0271+ 9500 00 db 0 -0272+ 9501 00 42 FStart dw 0x4200 -0273+ 9503 00 00 FRam dw 0 ;адрес расположения кода в памяти -0274+ 9505 -0275+ 9505 -0374 9505 include "error.asm";"D:\WORKAST\DEMON\error" -0001+ 9505 ;[]=========================================================================[] -0002+ 9505 ;[] Обработка ошибок монитора-отладчика DemoN [] -0003+ 9505 ;[] v0.10 - последние изменения 27.08.2006 [] -0004+ 9505 ;[] [] -0005+ 9505 ;[] ErDss - определение ошибки DSS по ее коду [] -0006+ 9505 ;[]=========================================================================[] -0007+ 9505 -0008+ 9505 ;[]=========================================================================[] -0009+ 9505 ;[] Ошибки DSS [] -0010+ 9505 ;[] Вход: A - код ошибки [] -0011+ 9505 ;[] Выход: A - код ошибки [] -0012+ 9505 ;[] HL - строка-описание ошибки [] -0013+ 9505 ;[]=========================================================================[] -0014+ 9505 PrErDss: -0015+ 9505 CD 12 95 call ErDss -0016+ 9508 0E 5C ld c,Dss.PChars ;вывести сообщение об ошибке -0017+ 950A D7 rst DssRst -0018+ 950B 21 0E AB ld hl,Str.DA ;перевод строки -0019+ 950E 0E 5C ld c,Dss.PChars -0020+ 9510 D7 rst DssRst -0021+ 9511 C9 ret -0022+ 9512 -0023+ 9512 ErDss: -0024+ 9512 .MaxError equ 0x26 -0025+ 9512 FE 27 cp .MaxError+1 ;максимальный код ошибки + 1 -0026+ 9514 38 02 jr c,$+4 -0027+ 9516 3E 26 ld a,.MaxError -0028+ 9518 -0029+ 9518 F5 push af -0030+ 9519 87 add a,a -0031+ 951A 21 C1 97 ld hl,.Tabl -0032+ 951D 16 00 ld d,0 -0033+ 951F 5F ld e,a -0034+ 9520 19 add hl,de -0035+ 9521 7E ld a,(hl) -0036+ 9522 23 inc hl -0037+ 9523 66 ld h,(hl) -0038+ 9524 6F ld l,a -0039+ 9525 F1 pop af -0040+ 9526 C9 ret -0041+ 9527 -0042+ 9527 .e01 db "Invalid function",0 -0042+ 9527 496E76616C69642066756E6374696F6E00 -0043+ 9538 .e02 db "Invalid drive number",0 -0043+ 9538 496E76616C6964206472697665206E756D62657200 -0044+ 954D .e03 db "File not found",0 -0044+ 954D 46696C65206E6F7420666F756E6400 -0045+ 955C .e04 db "Path not found",0 -0045+ 955C 50617468206E6F7420666F756E6400 -0046+ 956B .e05 db "Invalid handle",0 -0046+ 956B 496E76616C69642068616E646C6500 -0047+ 957A .e06 db "Too many open files",0 -0047+ 957A 546F6F206D616E79206F70656E2066696C657300 -0048+ 958E .e07 db "File already exists",0 -0048+ 958E 46696C6520616C72656164792065786973747300 -0049+ 95A2 .e08 db "File read only",0 -0049+ 95A2 46696C652072656164206F6E6C7900 -0050+ 95B1 .e09 db "Root overflow",0 -0050+ 95B1 526F6F74206F766572666C6F7700 -0051+ 95BF .e0A db "No free space",0 -0051+ 95BF 4E6F206672656520737061636500 -0052+ 95CD .e0B db "Directory not empty",0 -0052+ 95CD 4469726563746F7279206E6F7420656D70747900 -0053+ 95E1 .e0C db "Can't delete current directory",0 -0053+ 95E1 43616E27742064656C6574652063757272656E74206469726563746F727900 -0054+ 9600 .e0D db "Invalid media",0 -0054+ 9600 496E76616C6964206D6564696100 -0055+ 960E .e0E db "Unknown operation",0 ;(невозм. операция) -0055+ 960E 556E6B6E6F776E206F7065726174696F6E00 -0056+ 9620 .e0F db "Directory exist",0 -0056+ 9620 4469726563746F727920657869737400 -0057+ 9630 .e10 db "Invalid filename",0 -0057+ 9630 496E76616C69642066696C656E616D6500 -0058+ 9641 .e11 db "Invalid EXE-file",0 -0058+ 9641 496E76616C6964204558452D66696C6500 -0059+ 9652 .e12 db "Not supported EXE-file",0 -0059+ 9652 4E6F7420737570706F72746564204558452D66696C6500 -0060+ 9669 .e13 db "Access denied",0 -0060+ 9669 4163636573732064656E69656400 -0061+ 9677 .e14 db "Not ready",0 -0061+ 9677 4E6F7420726561647900 -0062+ 9681 .e15 db "Seek error",0 -0062+ 9681 5365656B206572726F7200 -0063+ 968C .e16 db "Sector not found",0 -0063+ 968C 536563746F72206E6F7420666F756E6400 -0064+ 969D .e17 db "CRC error",0 -0064+ 969D 435243206572726F7200 -0065+ 96A7 .e18 db "Write protect",0 -0065+ 96A7 57726974652070726F7465637400 -0066+ 96B5 .e19 db "Read error",0 -0066+ 96B5 52656164206572726F7200 -0067+ 96C0 .e1A db "Write error",0 -0067+ 96C0 5772697465206572726F7200 -0068+ 96CC .e1B db "Drive failure",0 -0068+ 96CC 4472697665206661696C75726500 -0069+ 96DA .e1C db "Extended error: 28",0 -0069+ 96DA 457874656E646564206572726F723A20323800 -0070+ 96ED .e1D db "Extended error: 29",0 -0070+ 96ED 457874656E646564206572726F723A20323900 -0071+ 9700 .e1E db "Not enough memory",0 -0071+ 9700 4E6F7420656E6F756768206D656D6F727900 -0072+ 9712 .e1F db "Invalid memory block",0 -0072+ 9712 496E76616C6964206D656D6F727920626C6F636B00 -0073+ 9727 .e20 db "Extended error: 32",0 -0073+ 9727 457874656E646564206572726F723A20333200 -0074+ 973A .e21 db "Extended error: 33",0 -0074+ 973A 457874656E646564206572726F723A20333300 -0075+ 974D .e22 db "Extended error: 34",0 -0075+ 974D 457874656E646564206572726F723A20333400 -0076+ 9760 .e23 db "Too many files",0 ;(список файлов) -0076+ 9760 546F6F206D616E792066696C657300 -0077+ 976F .e24 db "(слишком большая влож. папок или >= 1024 папок)",0 -0077+ 976F 28E1ABA8E8AAAEAC20A1AEABECE8A0EF20A2ABAEA62E20AFA0AFAEAA20A8ABA8 -0077+ 978F 203E3D203130323420AFA0AFAEAA2900 -0078+ 979F .e25 db "User abort",0 ;(операция прервана пользователем) -0078+ 979F 557365722061626F727400 -0079+ 97AA .e26 db "Unknown error: 38..255",0 ;38 -0079+ 97AA 556E6B6E6F776E206572726F723A2033382E2E32353500 -0080+ 97C1 -0081+ 97C1 .Tabl dw .e01,.e02,.e03,.e04,.e05,.e06,.e07,.e08 -0081+ 97C1 279538954D955C956B957A958E95A295 -0082+ 97D1 dw .e09,.e0A,.e0B,.e0C,.e0D,.e0E,.e0F,.e10 -0082+ 97D1 B195BF95CD95E19500960E9620963096 -0083+ 97E1 dw .e11,.e12,.e13,.e14,.e15,.e16,.e17,.e18 -0083+ 97E1 419652966996779681968C969D96A796 -0084+ 97F1 dw .e19,.e1A,.e1B,.e1C,.e1D,.e1E,.e1F,.e20 -0084+ 97F1 B596C096CC96DA96ED96009712972797 -0085+ 9801 dw .e21,.e22,.e23,.e24,.e25,.e26 -0085+ 9801 3A974D9760976F979F97AA97 -0086+ 980D -0087+ 980D -0375 980D include "clock.asm";"D:\WORKAST\DEMON\clock" -0001+ 980D ;[]=========================================================================[] -0002+ 980D ;[] Вывод часов [] -0003+ 980D ;[] v0.03 - последние изменения 01.02.2006 [] -0004+ 980D ;[]=========================================================================[] -0005+ 980D Clock: -0006+ 980D 3A 5D AA ld a,(ClockOn) ;флаг вывода часов -0007+ 9810 3C inc a -0008+ 9811 C0 ret nz -0009+ 9812 0E 21 ld c,Dss.SysTime -0010+ 9814 D7 rst DssRst ;прочитать данные о времени -0011+ 9815 11 3E 98 ld de,.String -0012+ 9818 D5 push de -0013+ 9819 C5 push bc -0014+ 981A E5 push hl -0015+ 981B 6C ld l,h ;часы -0016+ 981C 26 00 ld h,0 -0017+ 981E CD BE 91 call ConvDecStr8_1 -0018+ 9821 13 inc de -0019+ 9822 E1 pop hl ;минуты -0020+ 9823 26 00 ld h,0 -0021+ 9825 CD BE 91 call ConvDecStr8_1 -0022+ 9828 13 inc de -0023+ 9829 E1 pop hl -0024+ 982A 6C ld l,h ;секунды -0025+ 982B 26 00 ld h,0 -0026+ 982D CD BE 91 call ConvDecStr8_1 -0027+ 9830 11 47 00 ld de,71 -0028+ 9833 0E 84 ld c,Bios.Lp_Set_Place ;установка позиции печати -0028+ 9835 CF rst BiosRst -0029+ 9836 F3 di -0030+ 9837 E1 pop hl -0031+ 9838 01 86 08 ld bc,8*256+Bios.Lp_Print_Ln2 ;в рег.B длина строки -0031+ 983B CF rst BiosRst -0032+ 983C F3 di -0033+ 983D C9 ret -0034+ 983E -0035+ 983E .String db "00:00:00" -0035+ 983E 30303A30303A3030 -0036+ 9846 -0037+ 9846 -0376 9846 include "keyb.asm";"D:\WORKAST\DEMON\keyb" -0001+ 9846 ;[]=========================================================================[] -0002+ 9846 ;[] Обработка клавиатуры [] -0003+ 9846 ;[] v0.01 - последние изменения 10.10.2004 [] -0004+ 9846 ;[] v0.02 - последние изменения 27.03.2005 [] -0005+ 9846 ;[] v0.03 - последние изменения 11.03.2006 [] -0006+ 9846 ;[] v0.10 - последние изменения 14.05.2006 [] -0007+ 9846 ;[]=========================================================================[] -0008+ 9846 CD 35 92 call CursorRes ;выкл курсор -0009+ 9849 CD 3C 88 call Refresh ;обновление экрана -0010+ 984C 18 03 jr Keyb -0011+ 984E CD 35 92 call CursorRes ;выкл курсор -0012+ 9851 Keyb: -0013+ 9851 CD B3 99 call Cursor ;вкл курсор -0014+ 9854 CD D3 91 call CursorSet -0015+ 9857 0E 31 ld c,Dss.ScanKey ;состояние клавиатуры -0016+ 9859 D7 rst DssRst -0017+ 985A 28 FB jr z,Keyb+6 -0018+ 985C 78 ld a,b ;состояние -0019+ 985D E6 F0 and 11110000b -0020+ 985F 28 6C jr z,.L100 -0021+ 9861 -0022+ 9861 ;Обработка комбинации Shift + символ -0023+ 9861 E6 C0 and 11000000b ; -0024+ 9863 B7 or a -0025+ 9864 28 11 jr z,.L1 -0026+ 9866 7A ld a,d -0027+ 9867 FE 8F cp 0x80+0x0F ;Shift+Tab -0028+ 9869 20 EC jr nz,Keyb+6 -0029+ 986B 21 B2 99 ld hl,Keyb.WinScreen -0030+ 986E 7E ld a,(hl) -0031+ 986F 3D dec a -0032+ 9870 20 02 jr nz,$+4 -0033+ 9872 3E 04 ld a,4 -0034+ 9874 77 ld (hl),a ;номер окна дампа -0035+ 9875 18 D7 jr Keyb-3 -0036+ 9877 -0037+ 9877 ;Обработка комбинации Alt + символ -0038+ 9877 78 .L1 ld a,b -0039+ 9878 E6 F0 and 11110000b -0040+ 987A FE 10 cp 00010000b ; -0041+ 987C 20 06 jr nz,.L10 -0042+ 987E 7A ld a,d ;позиционный код -0043+ 987F FE AB cp 0x80+0x2B ;+ -0044+ 9881 20 01 jr nz,.L10 -0045+ 9883 C8 ret z ;выход -0046+ 9884 -0047+ 9884 ;Обработка комбинации Ctrl + символ -0048+ 9884 FE 20 .L10 cp 00100000b ; -0049+ 9886 C2 A0 99 jp nz,.L0 -0050+ 9889 7A ld a,d ;позиционный код -0051+ 988A -0052+ 988A FE 92 cp 0x80+0x12 ;+ (dEc/hEx) -0053+ 988C 20 09 jr nz,.L11 -0054+ 988E 3A 7E AB ld a,(DecHex) -0055+ 9891 2F cpl -0056+ 9892 32 7E AB ld (DecHex),a -0057+ 9895 18 AF jr Keyb-11 -0058+ 9897 -0059+ 9897 FE 93 .L11 cp 0x80+0x13 ;+ резидент -0060+ 9899 20 20 jr nz,.L12 -0061+ 989B CD 35 92 call CursorRes -0062+ 989E 06 05 ld b,5 ;длина строки ввода -0063+ 98A0 21 13 14 ld hl,0x1413 -0064+ 98A3 E5 push hl -0065+ 98A4 C5 push bc -0066+ 98A5 CD D3 91 call CursorSet -0067+ 98A8 C1 pop bc -0068+ 98A9 E1 pop hl -0069+ 98AA CD AA 9C call InputLine -0070+ 98AD DA 4E 98 jp c,Keyb-3 -0071+ 98B0 CD 30 9C call PutAdres -0072+ 98B3 DA 4E 98 jp c,Keyb-3 -0073+ 98B6 CD E7 A1 call KReg.Rez ;новый адрес резидента -0074+ 98B9 18 8B jr Keyb-11 -0075+ 98BB -0076+ 98BB FE AA .L12 cp 0x80+0x2A ;+ -0077+ 98BD CA 39 99 jp z,.L202-2 ;выполнение команды -0078+ 98C0 -0079+ 98C0 FE AC cp 0x80+0x2C ;+ -0080+ 98C2 CA 1B 99 jp z,.L200+5 ;выполнение команды -0081+ 98C5 -0082+ 98C5 FE AD cp 0x80+0x2D ;+ -0083+ 98C7 CA 52 99 jp z,.L203+4 ;пропуск команды -0084+ 98CA -0085+ 98CA ; cp 0x80+0x48 ; -0086+ 98CA ; call z,ScreenS ;сохранение экрана в файл -0087+ 98CA -0088+ 98CA .L13 ;... -0089+ 98CA C3 A0 99 jp .L0 -0090+ 98CD -0091+ 98CD ;Обработка ASCII кодов -0092+ 98CD 7B .L100 ld a,e -0093+ 98CE FE 1B cp 0x1B ; - вкл.системного экрана -0094+ 98D0 20 44 jr nz,.L200 -0095+ 98D2 AF xor a ;выкл часов -0096+ 98D3 32 5D AA ld (ClockOn),a -0097+ 98D6 3A 5F AA ld a,(OSScreen) -0098+ 98D9 47 ld b,a -0099+ 98DA C5 push bc -0100+ 98DB 3A 60 AA ld a,(OSGrafMode) -0101+ 98DE 0E 50 ld c,Dss.SetVMod ;системный экран -0102+ 98E0 D7 rst DssRst -0103+ 98E1 C1 pop bc -0104+ 98E2 3A 5E AA ld a,(DemonScreen) -0105+ 98E5 B8 cp b -0106+ 98E6 20 11 jr nz,.NoRest -0107+ 98E8 11 00 00 ld de,0 ;Если экраны ОС и Демона совпадают - -0108+ 98EB 21 50 20 ld hl,#2050 ;восстанавливаем скрин -0109+ 98EE 3A 61 AA ld a,(BufPage) -0110+ 98F1 47 ld b,a -0111+ 98F2 0E 5A ld c,Dss.WinRest -0112+ 98F4 DD 21 00 C0 ld ix,#c000 -0113+ 98F8 D7 rst DssRst -0114+ 98F9 0E 30 .NoRest ld c,Dss.WaitKey -0115+ 98FB D7 rst DssRst ;ждем Any Key -0116+ 98FC 3A 5E AA ld a,(DemonScreen) -0117+ 98FF 47 ld b,a -0118+ 9900 3E 03 ld a,3 -0119+ 9902 0E 50 ld c,Dss.SetVMod -0120+ 9904 C5 push bc -0121+ 9905 D7 rst DssRst -0122+ 9906 C1 pop bc -0123+ 9907 3A 5F AA ld a,(OSScreen) -0124+ 990A B8 cp b -0125+ 990B CC EF 82 call z,RefreshScreen ;Если экраны совпадают - перерисовываем -0126+ 990E 3E FF ld a,On ;вкл часов -0127+ 9910 32 5D AA ld (ClockOn),a -0128+ 9913 C3 57 98 jp Keyb+6 -0129+ 9916 -0130+ 9916 ;Обработка позиционного кода -0131+ 9916 7A .L200 ld a,d -0132+ 9917 FE 3B cp 0x3b ; -0133+ 9919 20 09 jr nz,.L208 -0134+ 991B CD CB 88 call DemonHelp -0135+ 991E ; ld c,Dss.WaitKey -0136+ 991E ; rst DssRst ;ждем Any Key -0137+ 991E -0138+ 991E CD EF 82 .NoExit call RefreshScreen -0139+ 9921 C3 57 98 jp Keyb+6 -0140+ 9924 FE 3D .L208 cp 0x3d -0141+ 9926 20 05 jr nz,.L207 -0142+ 9928 CD A6 B6 call LoadBinDialog -0143+ 992B 18 F1 jr .NoExit -0144+ 992D .L207 -0145+ 992D FE 42 cp 0x42 ; -0146+ 992F 20 04 jr nz,.L201 -0147+ 9931 3E 00 ld a,Off ;флаг пропуска подпрограмм -0148+ 9933 18 06 jr .L202 -0149+ 9935 -0150+ 9935 FE 41 .L201 cp 0x41 ; -0151+ 9937 20 15 jr nz,.L203 -0152+ 9939 3E FF ld a,On ;флаг трассировки подпрограмм -0153+ 993B 32 7B A9 .L202 ld (Step.Flag),a -0154+ 993E 21 66 90 ld hl,PrintStrSP.StrSp -0155+ 9941 7E ld a,(hl) ;строка вершины стека -0156+ 9942 3C inc a -0157+ 9943 20 03 jr nz,$+5 -0158+ 9945 3E 06 ld a,6 ;вернуть вершину стека -0159+ 9947 77 ld (hl),a -0160+ 9948 CD 64 A6 call Step -0161+ 994B C3 46 98 jp Keyb-11 -0162+ 994E -0163+ 994E FE 43 .L203 cp 0x43 ; -0164+ 9950 20 22 jr nz,.L204 -0165+ 9952 2A 3D AB ld hl,(Reg._PC) -0166+ 9955 CD 42 8A call List ;следующая команда -0167+ 9958 22 3D AB ld (Reg._PC),hl ;новый PC -0168+ 995B E5 push hl -0169+ 995C 3A C3 9B ld a,(KList.Descript) ;количество строк листинга -0170+ 995F CD D1 9B call AdrListTabl ;нижний адрес листинга -0171+ 9962 ED 5B 55 AB ld de,(ListAdr) ;верхний адрес листинга -0172+ 9966 C1 pop bc ;новый PC -0173+ 9967 CD C4 92 call AdrArea -0174+ 996A D2 46 98 jp nc,Keyb-11 -0175+ 996D ED 43 55 AB ld (ListAdr),bc ;новая страница листинга -0176+ 9971 C3 46 98 jp Keyb-11 -0177+ 9974 -0178+ 9974 FE 0F .L204 cp 0x0F ; -0179+ 9976 20 0F jr nz,.L205 -0180+ 9978 21 B2 99 ld hl,Keyb.WinScreen -0181+ 997B 7E ld a,(hl) -0182+ 997C 3C inc a -0183+ 997D FE 05 cp 5 -0184+ 997F 20 02 jr nz,$+4 -0185+ 9981 3E 01 ld a,1 -0186+ 9983 77 ld (hl),a ;номер окна дампа -0187+ 9984 C3 4E 98 jp Keyb-3 -0188+ 9987 -0189+ 9987 FE 48 .L205 cp 0x48 ; -0190+ 9989 20 06 jr nz,.L206 -0191+ 998B CD FA A9 call SaveScr ;сохранение экрана в файл -0192+ 998E C3 57 98 jp Keyb+6 -0193+ 9991 -0194+ 9991 FE 44 .L206 cp 0x44 ; -0195+ 9993 20 0B jr nz,.L0 -0196+ 9995 ;выход -0197+ 9995 DD 21 7F AB ld ix,ExitDlg -0198+ 9999 CD D5 B9 call DialogWindow -0199+ 999C C9 ret -0200+ 999D CD 01 83 call ClearScreen -0201+ 99A0 3A B2 99 .L0 ld a,(.WinScreen) ;активное окно -0202+ 99A3 3D dec a -0203+ 99A4 CA 1C 9A jp z,KList -0204+ 99A7 3D dec a -0205+ 99A8 CA FC A3 jp z,KDump -0206+ 99AB 3D dec a -0207+ 99AC CA AE 9F jp z,KReg -0208+ 99AF C3 A4 A2 jp KStack -0209+ 99B2 -0210+ 99B2 01 .WinScreen db 1 ;номер активного окна -0211+ 99B3 ;1 - окно листинга -0212+ 99B3 ;2 - окно дампа -0213+ 99B3 ;3 - окно регистров -0214+ 99B3 ;4 - окно стека -0215+ 99B3 -0216+ 99B3 ;Прорисовка курсора -0217+ 99B3 Cursor: -0218+ 99B3 3A B2 99 ld a,(Keyb.WinScreen) ;активное окно -0219+ 99B6 3D dec a -0220+ 99B7 28 1E jr z,.L1 -0221+ 99B9 3D dec a -0222+ 99BA 28 33 jr z,.L2 -0223+ 99BC 3D dec a -0224+ 99BD 28 48 jr z,.L3 -0225+ 99BF ;Окно дампа стека -0226+ 99BF ED 5B F3 A3 ld de,(KStack.Coordinate) ;расчет курсора -0227+ 99C3 21 F7 A3 ld hl,KStack.Descript+2 -0228+ 99C6 43 ld b,e -0229+ 99C7 23 inc hl -0230+ 99C8 23 inc hl -0231+ 99C9 10 FC djnz $-2 -0232+ 99CB 7E ld a,(hl) ;длина курсора -0233+ 99CC 32 A5 A3 ld (KStack.L201+1),a -0234+ 99CF 47 ld b,a -0235+ 99D0 2B dec hl -0236+ 99D1 5E ld e,(hl) ;X-координата курсора -0237+ 99D2 EB ex de,hl -0238+ 99D3 22 A7 A3 ld (KStack.L201+3),hl -0239+ 99D6 C9 ret -0240+ 99D7 ;Окно листинга -0241+ 99D7 ED 5B C1 9B .L1 ld de,(KList.Coordinate) ;расчет курсора -0242+ 99DB 21 C5 9B ld hl,KList.Descript+2 -0243+ 99DE 43 ld b,e -0244+ 99DF 23 inc hl -0245+ 99E0 23 inc hl -0246+ 99E1 10 FC djnz $-2 -0247+ 99E3 7E ld a,(hl) ;длина курсора -0248+ 99E4 32 44 9B ld (KList.L201+1),a -0249+ 99E7 47 ld b,a -0250+ 99E8 2B dec hl -0251+ 99E9 5E ld e,(hl) ;X-координата курсора -0252+ 99EA EB ex de,hl -0253+ 99EB 22 46 9B ld (KList.L201+3),hl -0254+ 99EE C9 ret -0255+ 99EF ;Окно дампа -0256+ 99EF ED 5B A0 A5 .L2 ld de,(KDump.Coordinate) ;расчет курсора -0257+ 99F3 21 A4 A5 ld hl,KDump.Descript+2 -0258+ 99F6 43 ld b,e -0259+ 99F7 23 inc hl -0260+ 99F8 23 inc hl -0261+ 99F9 10 FC djnz $-2 -0262+ 99FB 7E ld a,(hl) ;длина курсора -0263+ 99FC 32 FB A4 ld (KDump.L201+1),a -0264+ 99FF 47 ld b,a -0265+ 9A00 2B dec hl -0266+ 9A01 5E ld e,(hl) ;X-координата курсора -0267+ 9A02 EB ex de,hl -0268+ 9A03 22 FD A4 ld (KDump.L201+3),hl -0269+ 9A06 C9 ret -0270+ 9A07 ;Окно регистров -0271+ 9A07 CD 06 A2 .L3 call KReg.DescCalc -0272+ 9A0A 50 ld d,b -0273+ 9A0B 43 ld b,e ;колонока в строке -0274+ 9A0C 23 inc hl -0275+ 9A0D 23 inc hl -0276+ 9A0E 10 FC djnz $-2 -0277+ 9A10 7E ld a,(hl) ;длина курсора -0278+ 9A11 32 4B A0 ld (KReg.L201+1),a -0279+ 9A14 47 ld b,a -0280+ 9A15 2B dec hl -0281+ 9A16 5E ld e,(hl) ;X-координата курсора -0282+ 9A17 EB ex de,hl -0283+ 9A18 22 4D A0 ld (KReg.L201+3),hl -0284+ 9A1B C9 ret -0285+ 9A1C -0286+ 9A1C ;Обработка клавиш в окне листинга -0287+ 9A1C KList: -0288+ 9A1C 78 ld a,b ;состояние -0289+ 9A1D E6 F0 and 11110000b -0290+ 9A1F 28 6F jr z,.L100 -0291+ 9A21 -0292+ 9A21 ;Обработка комбинации Alt + символ -0293+ 9A21 FE 10 cp 00010000b ; -0294+ 9A23 20 03 jr nz,.L10 -0295+ 9A25 C3 57 98 jp Keyb+6 -0296+ 9A28 -0297+ 9A28 ;Обработка комбинации Ctrl + символ -0298+ 9A28 FE 20 .L10 cp 00100000b ; -0299+ 9A2A C2 57 98 jp nz,Keyb+6 -0300+ 9A2D -0301+ 9A2D 7A ld a,d ;позиционный код -0302+ 9A2E FE AB cp 0x80+0x2B ;+ -0303+ 9A30 C2 3C 9A jp nz,.L20 -0304+ 9A33 -0305+ 9A33 CD CE 9B call AdrListTabl-3 ;выборка адреса листинга по N строки -0306+ 9A36 22 3D AB ld (Reg._PC),hl -0307+ 9A39 C3 9F 9B jp .NewLA1+3 -0308+ 9A3C -0309+ 9A3C 78 .L20 ld a,b -0310+ 9A3D FE 22 cp 00100010b ;правый -0311+ 9A3F 20 19 jr nz,.L21 -0312+ 9A41 01 A3 9B ld bc,.CtrlTabl -0313+ 9A44 CD DF 9B call AdrCtrlTabl ;выборка строки в таблице -0314+ 9A47 D2 57 98 jp nc,Keyb+6 ;не цифровые клавиши -0315+ 9A4A -0316+ 9A4A 3A C2 9B ld a,(.Coordinate+1) -0317+ 9A4D 02 ld (bc),a ;номер строки листинга -0318+ 9A4E 03 inc bc -0319+ 9A4F CD D1 9B call AdrListTabl ;выборка адреса листинга по N строки -0320+ 9A52 7D ld a,l -0321+ 9A53 02 ld (bc),a -0322+ 9A54 03 inc bc -0323+ 9A55 7C ld a,h -0324+ 9A56 02 ld (bc),a -0325+ 9A57 C3 57 98 jp Keyb+6 -0326+ 9A5A -0327+ 9A5A FE 28 .L21 cp 00101000b ;левый -0328+ 9A5C C2 57 98 jp nz,Keyb+6 -0329+ 9A5F -0330+ 9A5F 7A ld a,d ;позиционный код -0331+ 9A60 FE 80 cp 0x80+0x00 ;Ctrl+"`" -0332+ 9A62 C2 79 9A jp nz,.L22 -0333+ 9A65 -0334+ 9A65 3A A2 9B ld a,(.CtrlWin) -0335+ 9A68 67 ld h,a -0336+ 9A69 2E 00 ld l,0 -0337+ 9A6B C6 40 add a,0x40 ;следующее окно -0338+ 9A6D 32 A2 9B ld (.CtrlWin),a -0339+ 9A70 3A C4 9B ld a,(.Descript+1) -0340+ 9A73 32 C2 9B ld (.Coordinate+1),a -0341+ 9A76 C3 9C 9B jp .NewLA1 -0342+ 9A79 -0343+ 9A79 01 A3 9B .L22 ld bc,.CtrlTabl -0344+ 9A7C CD DF 9B call AdrCtrlTabl ;выборка строки в таблице -0345+ 9A7F D2 57 98 jp nc,Keyb+6 -0346+ 9A82 -0347+ 9A82 0A ld a,(bc) ;номер строки листинга -0348+ 9A83 B7 or a -0349+ 9A84 CA 57 98 jp z,Keyb+6 ;нет данных -0350+ 9A87 -0351+ 9A87 03 inc bc -0352+ 9A88 0A ld a,(bc) -0353+ 9A89 6F ld l,a -0354+ 9A8A 03 inc bc -0355+ 9A8B 0A ld a,(bc) -0356+ 9A8C 67 ld h,a ;адрес из буфера -0357+ 9A8D C3 8E 9B jp .NewLA -0358+ 9A90 -0359+ 9A90 ;Обработка позиционного кода -0360+ 9A90 7B .L100 ld a,e ;ASCII код -0361+ 9A91 32 3D 9B ld (.L200+1),a -0362+ 9A94 7A ld a,d ;позиционный код -0363+ 9A95 -0364+ 9A95 ED 5B C1 9B ld de,(.Coordinate) ;текущие координаты курсора -0365+ 9A99 FE 56 cp 0x56 ; -0366+ 9A9B 20 0F jr nz,.L101 -0367+ 9A9D 3A C5 9B ld a,(.Descript+2) ;кол-во колонок -0368+ 9AA0 BB cp e -0369+ 9AA1 7B ld a,e -0370+ 9AA2 20 01 jr nz,$+3 -0371+ 9AA4 AF xor a -0372+ 9AA5 3C inc a -0373+ 9AA6 32 C1 9B ld (.Coordinate),a ;текущая колонка -0374+ 9AA9 C3 4E 98 jp Keyb-3 -0375+ 9AAC -0376+ 9AAC FE 54 .L101 cp 0x54 ; -0377+ 9AAE 20 10 jr nz,.L102 -0378+ 9AB0 7B ld a,e ;текущая колонка -0379+ 9AB1 FE 01 cp 1 -0380+ 9AB3 20 04 jr nz,$+6 -0381+ 9AB5 3A C5 9B ld a,(.Descript+2) ;кол-во колонок -0382+ 9AB8 3C inc a -0383+ 9AB9 3D dec a -0384+ 9ABA 32 C1 9B ld (.Coordinate),a ;текущая колонка -0385+ 9ABD C3 4E 98 jp Keyb-3 -0386+ 9AC0 -0387+ 9AC0 2A C3 9B .L102 ld hl,(.Descript) -0388+ 9AC3 FE 52 cp 0x52 ; -0389+ 9AC5 20 11 jr nz,.L103 -0390+ 9AC7 7A ld a,d ;текущая строка -0391+ 9AC8 BD cp l -0392+ 9AC9 20 06 jr nz,.L104 -0393+ 9ACB 2A 57 AB ld hl,(ListAdr+2) ;адрес следующей строки -0394+ 9ACE C3 9C 9B jp .NewLA1 -0395+ 9AD1 3C .L104 inc a -0396+ 9AD2 32 C2 9B ld (.Coordinate+1),a -0397+ 9AD5 C3 4E 98 jp Keyb-3 -0398+ 9AD8 -0399+ 9AD8 FE 58 .L103 cp 0x58 ; -0400+ 9ADA 20 14 jr nz,.L105 -0401+ 9ADC 7A ld a,d ;текущая строка -0402+ 9ADD BC cp h -0403+ 9ADE 20 09 jr nz,.L107 -0404+ 9AE0 2A 55 AB ld hl,(ListAdr) ;адрес верхней строки листинга -0405+ 9AE3 CD DF 89 call UpAdres ;предыдущий адрес -0406+ 9AE6 C3 9C 9B jp .NewLA1 -0407+ 9AE9 3D .L107 dec a -0408+ 9AEA 32 C2 9B ld (.Coordinate+1),a -0409+ 9AED C3 4E 98 jp Keyb-3 -0410+ 9AF0 -0411+ 9AF0 FE 53 .L105 cp 0x53 ; -0412+ 9AF2 20 11 jr nz,.L108 -0413+ 9AF4 7A ld a,d ;текущая строка -0414+ 9AF5 BD cp l -0415+ 9AF6 20 06 jr nz,.L106 -0416+ 9AF8 CD D1 9B call AdrListTabl -0417+ 9AFB C3 9C 9B jp .NewLA1 -0418+ 9AFE 7D .L106 ld a,l ;на последнюю строку -0419+ 9AFF 32 C2 9B ld (.Coordinate+1),a -0420+ 9B02 C3 4E 98 jp Keyb-3 -0421+ 9B05 -0422+ 9B05 FE 59 .L108 cp 0x59 ; -0423+ 9B07 20 1A jr nz,.L110 -0424+ 9B09 7A ld a,d ;текущая строка -0425+ 9B0A BC cp h -0426+ 9B0B 20 0F jr nz,.L109 -0427+ 9B0D 2D dec l ;кол-во строк - 1 -0428+ 9B0E 45 ld b,l -0429+ 9B0F 2A 55 AB ld hl,(ListAdr) ;адрес первой строки -0430+ 9B12 C5 push bc -0431+ 9B13 CD DF 89 call UpAdres ;предыдущий адрес -0432+ 9B16 C1 pop bc -0433+ 9B17 10 F9 djnz $-5 -0434+ 9B19 C3 9C 9B jp .NewLA1 -0435+ 9B1C 7C .L109 ld a,h ;на первую строку -0436+ 9B1D 32 C2 9B ld (.Coordinate+1),a -0437+ 9B20 C3 4E 98 jp Keyb-3 -0438+ 9B23 -0439+ 9B23 FE 57 .L110 cp 0x57 ; -0440+ 9B25 20 08 jr nz,.L111 -0441+ 9B27 3E 01 ld a,1 -0442+ 9B29 32 C1 9B ld (.Coordinate),a ;первая колонка -0443+ 9B2C C3 4E 98 jp Keyb-3 -0444+ 9B2F -0445+ 9B2F FE 51 .L111 cp 0x51 ; -0446+ 9B31 20 09 jr nz,.L200 -0447+ 9B33 3A C5 9B ld a,(.Descript+2) ;последняя колонка -0448+ 9B36 32 C1 9B ld (.Coordinate),a ;первая колонка -0449+ 9B39 C3 4E 98 jp Keyb-3 -0450+ 9B3C -0451+ 9B3C ;Обработка ASCII кодов -0452+ 9B3C 3E 00 .L200 ld a,0 -0453+ 9B3E FE 0D cp 0x0D ; -0454+ 9B40 C2 5A 9B jp nz,.NewPCAdr ;Keyb+6 -0455+ 9B43 06 00 .L201 ld b,0 ;длина строки ввода -0456+ 9B45 21 00 00 ld hl,0 ;координаты строки ввода -0457+ 9B48 3A C1 9B ld a,(.Coordinate) -0458+ 9B4B 3D dec a ;колонка адреса -0459+ 9B4C 28 35 jr z,.InAdres -0460+ 9B4E 3D dec a ;колонка метки -0461+ 9B4F 28 03 jr z,$+5 -0462+ 9B51 3D dec a ;колонка кода команды -0463+ 9B52 28 14 jr z,.InCode -0464+ 9B54 CD AA 9C call InputLine -0465+ 9B57 C3 4E 98 jp Keyb-3 -0466+ 9B5A FE 7A .NewPCAdr cp "z" ; -0467+ 9B5C C2 57 98 jp nz,Keyb+6 -0468+ 9B5F CD CE 9B call AdrListTabl-3 ;Установить новый PC -0469+ 9B62 22 3D AB ld (Reg._PC),HL -0470+ 9B65 C3 46 98 jp Keyb-11 -0471+ 9B68 CD AA 9C .InCode call InputLine ;ввод кода в 3 колонке -0472+ 9B6B DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0473+ 9B6E CD F1 9B call PutCode -0474+ 9B71 38 D0 jr c,.L201 ;ошибка в веденных данных -0475+ 9B73 CD CE 9B call AdrListTabl-3 ;адрес текущей строки -0476+ 9B76 11 2C 9C ld de,PutCode.Buffer -0477+ 9B79 1A ld a,(de) ;запись кода в память -0478+ 9B7A CD 97 92 call Ld_hl_a -0479+ 9B7D 13 inc de -0480+ 9B7E 23 inc hl -0481+ 9B7F 10 F8 djnz $-6 -0482+ 9B81 18 1C jr .NewLA1+3 -0483+ 9B83 -0484+ 9B83 CD AA 9C .InAdres call InputLine ;ввод адреса в 1 колонке -0485+ 9B86 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0486+ 9B89 CD 30 9C call PutAdres -0487+ 9B8C 38 B5 jr c,.L201 ;ошибка в веденных данных -0488+ 9B8E -0489+ 9B8E 3A C2 9B .NewLA ld a,(.Coordinate+1) -0490+ 9B91 3D dec a -0491+ 9B92 28 08 jr z,.NewLA1 -0492+ 9B94 47 ld b,a -0493+ 9B95 C5 push bc -0494+ 9B96 CD DF 89 call UpAdres ;предыдущий адрес -0495+ 9B99 C1 pop bc -0496+ 9B9A 10 F9 djnz $-5 -0497+ 9B9C 22 55 AB .NewLA1 ld (ListAdr),hl -0498+ 9B9F C3 46 98 jp Keyb-11 -0499+ 9BA2 -0500+ 9BA2 00 .CtrlWin db 0 ;окно для Ctrl+"`" -0501+ 9BA3 00 .CtrlTabl ds 30 ;буффер для адр быстр перехода -0502+ 9BC1 01 02 .Coordinate dw 0x0201 ;курсор (стр/кол курсора) -0503+ 9BC3 .Descript: -0504+ 9BC3 14 01 dw 0x0114 ;первая/последняя строка окна -0505+ 9BC5 04 db 4 ;кол-во колонок -0506+ 9BC6 -0507+ 9BC6 1A db 0x1A ;N столбца колонки -0508+ 9BC7 05 db 5 ;ширина колонки -0509+ 9BC8 20 db 0x20 -0510+ 9BC9 0E db 14 -0511+ 9BCA 2F db 0x2F -0512+ 9BCB 08 db 8 -0513+ 9BCC 38 db 0x38 -0514+ 9BCD 16 db 22 -0515+ 9BCE -0516+ 9BCE ;[]=========================================================================[] -0517+ 9BCE ;[] Выборка адреса листинга из таблицы [] -0518+ 9BCE ;[] Выход: HL - адрес листинга в текущей строке [] -0519+ 9BCE ;[]=========================================================================[] -0520+ 9BCE 3A C2 9B ld a,(KList.Coordinate+1) ;номер текущей строки листинга -0521+ 9BD1 AdrListTabl: -0522+ 9BD1 3D dec a -0523+ 9BD2 87 add a,a ;*2 -0524+ 9BD3 5F ld e,a -0525+ 9BD4 16 00 ld d,0 -0526+ 9BD6 21 55 AB ld hl,ListAdr ;таблица адресов листинга -0527+ 9BD9 19 add hl,de ;строка в таблице -0528+ 9BDA 7E ld a,(hl) -0529+ 9BDB 23 inc hl -0530+ 9BDC 66 ld h,(hl) -0531+ 9BDD 6F ld l,a ;адрес строки листинга -0532+ 9BDE C9 ret -0533+ 9BDF -0534+ 9BDF ;[]=========================================================================[] -0535+ 9BDF ;[] Выборка адреса цифровых клавиш из таблицы [] -0536+ 9BDF ;[] Вход: D - позиционный код цифровой клавиши [] -0537+ 9BDF ;[] BC - адрес начала таблицы [] -0538+ 9BDF ;[] Выход: BC - адрес в таблице [] -0539+ 9BDF ;[] Флаг NC - нажата не цифровая клавиша [] -0540+ 9BDF ;[]=========================================================================[] -0541+ 9BDF AdrCtrlTabl: -0542+ 9BDF 7A ld a,d -0543+ 9BE0 E6 7F and 01111111b ;сброс старшего бита -0544+ 9BE2 3D dec a -0545+ 9BE3 3D dec a -0546+ 9BE4 FE 0A cp 0x0A ;проверка цифровых клавиш верхнего ряда -0547+ 9BE6 D0 ret nc -0548+ 9BE7 B7 or a -0549+ 9BE8 37 scf -0550+ 9BE9 C8 ret z ;выход, если "0" -0551+ 9BEA 03 inc bc -0552+ 9BEB 03 inc bc -0553+ 9BEC 03 inc bc -0554+ 9BED 3D dec a -0555+ 9BEE 20 FA jr nz,$-4 -0556+ 9BF0 C9 ret -0557+ 9BF1 -0558+ 9BF1 ;[]=========================================================================[] -0559+ 9BF1 ;[] Получение кода из строки ввода [] -0560+ 9BF1 ;[] Вход: C - длина строки ввода [] -0561+ 9BF1 ;[] Выход: .Buffer - захваченные байты [] -0562+ 9BF1 ;[] B - количество захваченных байт [] -0563+ 9BF1 ;[] флаг C - ошибка [] -0564+ 9BF1 ;[]=========================================================================[] -0565+ 9BF1 PutCode: -0566+ 9BF1 11 B8 9E ld de,InputLine.Buffer -0567+ 9BF4 21 2C 9C ld hl,.Buffer -0568+ 9BF7 79 ld a,c -0569+ 9BF8 3D dec a -0570+ 9BF9 D8 ret c ;нулевая строка -0571+ 9BFA 3C inc a -0572+ 9BFB CB 3F srl a -0573+ 9BFD 47 ld b,a -0574+ 9BFE 28 1C jr z,.L3 ;обработка одного символа -0575+ 9C00 4F ld c,a -0576+ 9C01 3E C9 ld a,0xC9 ;RET -0577+ 9C03 30 01 jr nc,$+3 -0578+ 9C05 AF xor a ;NOP -0579+ 9C06 32 1B 9C ld (.L3-1),a -0580+ 9C09 -0581+ 9C09 E5 .L2 push hl -0582+ 9C0A 21 00 00 ld hl,0 -0583+ 9C0D 3E 02 ld a,2 -0584+ 9C0F CD 4C 9C call PutHex -0585+ 9C12 7D ld a,l -0586+ 9C13 E1 pop hl -0587+ 9C14 D8 ret c ;выход с ошибкой -0588+ 9C15 77 ld (hl),a -0589+ 9C16 23 inc hl -0590+ 9C17 0D dec c -0591+ 9C18 20 EF jr nz,.L2 -0592+ 9C1A B7 or a -0593+ 9C1B C9 ret -0594+ 9C1C -0595+ 9C1C 04 .L3 inc b -0596+ 9C1D E5 push hl -0597+ 9C1E 21 00 00 ld hl,0 -0598+ 9C21 3E 01 ld a,1 -0599+ 9C23 CD 4C 9C call PutHex -0600+ 9C26 7D ld a,l -0601+ 9C27 E1 pop hl -0602+ 9C28 D8 ret c ;выход с ошибкой -0603+ 9C29 77 ld (hl),a -0604+ 9C2A B7 or a -0605+ 9C2B C9 ret -0606+ 9C2C -0607+ 9C2C 00 .Buffer ds 4 -0608+ 9C30 -0609+ 9C30 ;[]=========================================================================[] -0610+ 9C30 ;[] Получение адреса из строки ввода [] -0611+ 9C30 ;[] Вход: C - длина строки ввода [] -0612+ 9C30 ;[] Выход: HL - число [] -0613+ 9C30 ;[] флаг C - ошибка [] -0614+ 9C30 ;[]=========================================================================[] -0615+ 9C30 PutAdres: -0616+ 9C30 79 ld a,c -0617+ 9C31 3D dec a -0618+ 9C32 D8 ret c ;нулевая строка -0619+ 9C33 11 B8 9E ld de,InputLine.Buffer -0620+ 9C36 21 00 00 ld hl,0 -0621+ 9C39 1A ld a,(de) -0622+ 9C3A CD 91 9C call CapsLetter -0623+ 9C3D FE 58 cp "X" ;hex-число -0624+ 9C3F 28 02 jr z,$+4 -0625+ 9C41 FE 23 cp "#" ;hex-число -0626+ 9C43 79 ld a,c -0627+ 9C44 20 29 jr nz,PutDec -0628+ 9C46 13 inc de -0629+ 9C47 13 inc de -0630+ 9C48 3D dec a -0631+ 9C49 3D dec a -0632+ 9C4A D8 ret c -0633+ 9C4B 3C inc a -0634+ 9C4C -0635+ 9C4C 08 PutHex exa -0636+ 9C4D 1A ld a,(de) -0637+ 9C4E CD 8A 9C call Numeric ;цифра? -0638+ 9C51 38 0C jr c,.L1 -0639+ 9C53 CD 91 9C call CapsLetter ;лат.буквы в верхний регистр -0640+ 9C56 FE 47 cp "F"+1 -0641+ 9C58 3F ccf -0642+ 9C59 D8 ret c ;выход с ошибкой -0643+ 9C5A FE 41 cp "A" -0644+ 9C5C D8 ret c ;выход с ошибкой -0645+ 9C5D D6 07 sub 0x07 -0646+ 9C5F D6 30 .L1 sub 0x30 -0647+ 9C61 29 add hl,hl ;*16 -0648+ 9C62 29 add hl,hl -0649+ 9C63 29 add hl,hl -0650+ 9C64 29 add hl,hl -0651+ 9C65 B5 or l -0652+ 9C66 6F ld l,a -0653+ 9C67 13 inc de -0654+ 9C68 13 inc de -0655+ 9C69 08 exa -0656+ 9C6A 3D dec a -0657+ 9C6B 20 DF jr nz,PutHex -0658+ 9C6D B7 or a ;сброс флага C -0659+ 9C6E C9 ret -0660+ 9C6F -0661+ 9C6F 08 PutDec exa -0662+ 9C70 1A ld a,(de) -0663+ 9C71 CD 8A 9C call Numeric ;цифра? -0664+ 9C74 3F ccf -0665+ 9C75 D8 ret c ;выход если нет -0666+ 9C76 4D ld c,l -0667+ 9C77 44 ld b,h -0668+ 9C78 29 add hl,hl ;*10 -0669+ 9C79 29 add hl,hl -0670+ 9C7A 09 add hl,bc -0671+ 9C7B 29 add hl,hl -0672+ 9C7C 06 00 ld b,0 -0673+ 9C7E D6 30 sub 0x30 -0674+ 9C80 4F ld c,a -0675+ 9C81 09 add hl,bc -0676+ 9C82 13 inc de -0677+ 9C83 13 inc de -0678+ 9C84 08 exa -0679+ 9C85 3D dec a -0680+ 9C86 20 E7 jr nz,PutDec -0681+ 9C88 B7 or a ;сброс флага C -0682+ 9C89 C9 ret -0683+ 9C8A -0684+ 9C8A ;[]=========================================================================[] -0685+ 9C8A ;[] Проверка кода символа на принадлежность к цифрам (коды 0x30...0x39) [] -0686+ 9C8A ;[] Вход: A - код символа [] -0687+ 9C8A ;[] Выход: флаг C - цифра; Флаг NC - не цифра [] -0688+ 9C8A ;[]=========================================================================[] -0689+ 9C8A FE 30 Numeric cp "0" -0690+ 9C8C 3F ccf -0691+ 9C8D D0 ret nc -0692+ 9C8E FE 3A cp 3Ah -0693+ 9C90 C9 ret -0694+ 9C91 -0695+ 9C91 ;[]=========================================================================[] -0696+ 9C91 ;[] Перевод символов латинского алфавита a...z в верхний регистр [] -0697+ 9C91 ;[] Вход: A - код символа [] -0698+ 9C91 ;[] Выход: A - код символа в верхнем регистре [] -0699+ 9C91 ;[]=========================================================================[] -0700+ 9C91 FE 61 CapsLetter cp "a" ;<"a" -0701+ 9C93 D8 ret c -0702+ 9C94 FE 7B cp "z"+1 ;>"z" -0703+ 9C96 D0 ret nc -0704+ 9C97 E6 DF and 11011111b ;преобразование символа -0705+ 9C99 C9 ret -0706+ 9C9A -0707+ 9C9A E5 InputLine1 push hl -0708+ 9C9B C5 push bc -0709+ 9C9C CD D3 91 call CursorSet -0710+ 9C9F C1 pop bc -0711+ 9CA0 E1 pop hl -0712+ 9CA1 18 07 jr InputLine -0713+ 9CA3 -0714+ 9CA3 ;[]=========================================================================[] -0715+ 9CA3 ;[] Ввод строки символов с клавиатуры [] -0716+ 9CA3 ;[] Вход: B - длина строки ввода [] -0717+ 9CA3 ;[] HL - координаты курсора [] -0718+ 9CA3 ;[] Выход: флаг C - флаг NC - [] -0719+ 9CA3 ;[] C - длина введенной строки, если [] -0720+ 9CA3 ;[]=========================================================================[] -0721+ 9CA3 InputLineEd: -0722+ 9CA3 3A 1B AB ld a,(Color.InLineEd) ;цвет строки ввода -0723+ 9CA6 4F ld c,a -0724+ 9CA7 AF xor a -0725+ 9CA8 18 06 jr InputLine+6 -0726+ 9CAA InputLine: -0727+ 9CAA 3A 1A AB ld a,(Color.InLine) ;цвет строки ввода -0728+ 9CAD 4F ld c,a -0729+ 9CAE 3E FF ld a,On -0730+ 9CB0 32 B2 9E ld (.EntEnd),a -0731+ 9CB3 3E C3 ld a,0xC3 ;код JP -0732+ 9CB5 32 34 9D ld (.L15),a -0733+ 9CB8 22 AA 9F ld (CursPos),hl -0734+ 9CBB 22 B3 9E ld (.Coordinate),hl -0735+ 9CBE 21 B5 9E ld hl,.Pos -0736+ 9CC1 AF xor a ;текущая позиция -0737+ 9CC2 77 ld (hl),a -0738+ 9CC3 23 inc hl -0739+ 9CC4 71 ld (hl),c ;цвет -0740+ 9CC5 23 inc hl -0741+ 9CC6 70 ld (hl),b ;длина строки редактирования -0742+ 9CC7 23 inc hl ;начало буфера редактирования -0743+ 9CC8 11 09 92 ld de,CursorSet.Buffer ;буфер строки под курсором -0744+ 9CCB ;ld c,a ;окраска строки редактирования -0745+ 9CCB 1A .L1 ld a,(de) -0746+ 9CCC 77 ld (hl),a -0747+ 9CCD 23 inc hl -0748+ 9CCE 13 inc de -0749+ 9CCF 71 ld (hl),c -0750+ 9CD0 23 inc hl -0751+ 9CD1 13 inc de -0752+ 9CD2 10 F7 djnz .L1 -0753+ 9CD4 -0754+ 9CD4 CD 1C 9E call .PrintInLine ;напечатать строку -0755+ 9CD7 3A B2 9E ld a,(.EntEnd) -0756+ 9CDA B7 or a -0757+ 9CDB C4 05 9E call nz,.EndString ;курсор в конец строки -0758+ 9CDE -0759+ 9CDE 3E FF .L100 ld a,On ;включить програм курсор -0760+ 9CE0 32 A6 9F ld (CursOnOff),a -0761+ 9CE3 21 DE 9C ld hl,.L100 -0762+ 9CE6 E5 push hl ;адрес возврата -0763+ 9CE7 0E 31 ld c,Dss.ScanKey ;состояние клавиатуры -0764+ 9CE9 D7 rst DssRst -0765+ 9CEA 28 FB jr z,$-3 -0766+ 9CEC -0767+ 9CEC FE 20 cp 0x20 ;есть ASCII-код -0768+ 9CEE 38 49 jr c,.L3 -0769+ 9CF0 -0770+ 9CF0 F5 push af -0771+ 9CF1 3A B5 9E ld a,(.Pos) -0772+ 9CF4 08 exa -0773+ 9CF5 21 B6 9E ld hl,.Color ;текущий цвет строки ввода -0774+ 9CF8 3A 1A AB ld a,(Color.InLine) -0775+ 9CFB BE cp (hl) -0776+ 9CFC CC 32 9E call z,.ClearInLine -0777+ 9CFF CC EA 9D call z,.HomeString -0778+ 9D02 CD 7A 9E call .NextPos ;на выходе в HL адрес .Pos -0779+ 9D05 28 1F jr z,.L12 -0780+ 9D07 3A A8 9F ld a,(CursInsOvr) ;режим Ins/Ovr -0781+ 9D0A B7 or a -0782+ 9D0B 20 19 jr nz,.L12 ;переход если Ovr -0783+ 9D0D 3A B7 9E ld a,(.Len) -0784+ 9D10 5F ld e,a -0785+ 9D11 3D dec a ;длина строки - 1 -0786+ 9D12 87 add a,a -0787+ 9D13 06 00 ld b,0 -0788+ 9D15 4F ld c,a -0789+ 9D16 56 ld d,(hl) ;позиция печати символа -0790+ 9D17 21 B8 9E ld hl,.Buffer -0791+ 9D1A 09 add hl,bc ;конец буфера -0792+ 9D1B 23 inc hl -0793+ 9D1C 7B ld a,e -0794+ 9D1D 92 sub d ;кол-во сдвигаемых символов -0795+ 9D1E 87 add a,a -0796+ 9D1F 4F ld c,a -0797+ 9D20 54 ld d,h -0798+ 9D21 5D ld e,l -0799+ 9D22 2B dec hl -0800+ 9D23 2B dec hl -0801+ 9D24 ED B8 lddr ;раздвижка строки -0802+ 9D26 08 .L12 exa -0803+ 9D27 87 add a,a -0804+ 9D28 06 00 ld b,0 -0805+ 9D2A 4F ld c,a -0806+ 9D2B 21 B8 9E ld hl,.Buffer -0807+ 9D2E 09 add hl,bc ;адрес в буфере -0808+ 9D2F F1 pop af -0809+ 9D30 77 ld (hl),a ;символ в буфер -0810+ 9D31 CD 85 9F call ResCurs -0811+ 9D34 C3 1C 9E .L15 jp .PrintInLine -0812+ 9D37 18 16 jr .L14 -0813+ 9D39 -0814+ 9D39 FE 1B .L3 cp 0x1B ; -0815+ 9D3B 20 06 jr nz,.L13 -0816+ 9D3D CD 85 9F call ResCurs -0817+ 9D40 E1 pop hl ;востановить стек -0818+ 9D41 37 scf -0819+ 9D42 C9 ret -0820+ 9D43 -0821+ 9D43 FE 0D .L13 cp 0x0D ; -0822+ 9D45 20 0D jr nz,.L2 -0823+ 9D47 3E FF ld a,On -0824+ 9D49 32 B2 9E ld (.EntEnd),a -0825+ 9D4C CD 85 9F call ResCurs -0826+ 9D4F E1 .L14 pop hl ;востановить стек -0827+ 9D50 CD 63 9E call .EndPos ;длина введенной строки -0828+ 9D53 C9 ret -0829+ 9D54 -0830+ 9D54 7A .L2 ld a,d -0831+ 9D55 FE 4F cp 0x4F ; -0832+ 9D57 20 2D jr nz,.L9 -0833+ 9D59 CD 85 9F call ResCurs -0834+ 9D5C 21 B6 9E ld hl,.Color ;текущий цвет строки ввода -0835+ 9D5F 3A 1A AB ld a,(Color.InLine) -0836+ 9D62 BE cp (hl) -0837+ 9D63 CC 32 9E call z,.ClearInLine -0838+ 9D66 21 B5 9E .L11 ld hl,.Pos -0839+ 9D69 7E ld a,(hl) ;позиция курсора -0840+ 9D6A 87 add a,a -0841+ 9D6B 5F ld e,a -0842+ 9D6C 23 inc hl -0843+ 9D6D 23 inc hl -0844+ 9D6E 7E ld a,(hl) ;длина строки -0845+ 9D6F 3D dec a -0846+ 9D70 87 add a,a -0847+ 9D71 93 sub e ;проверка конца строки -0848+ 9D72 4F ld c,a -0849+ 9D73 06 00 ld b,0 -0850+ 9D75 50 ld d,b -0851+ 9D76 23 inc hl ;начало буфера -0852+ 9D77 19 add hl,de ;адрес курсора -0853+ 9D78 E5 push hl -0854+ 9D79 D1 pop de -0855+ 9D7A 23 inc hl -0856+ 9D7B 23 inc hl -0857+ 9D7C 28 02 jr z,$+4 ;если в конце строки -0858+ 9D7E ED B0 ldir -0859+ 9D80 3E 20 ld a," " -0860+ 9D82 12 ld (de),a ;последний символ -0861+ 9D83 C3 1C 9E jp .PrintInLine -0862+ 9D86 -0863+ 9D86 FE 0E .L9 cp 0x0E ; -0864+ 9D88 20 15 jr nz,.L10 -0865+ 9D8A CD 85 9F call ResCurs -0866+ 9D8D CD 4A 9E call .ColorInLine ;сменить цвет строки -0867+ 9D90 21 B5 9E ld hl,.Pos -0868+ 9D93 7E ld a,(hl) ;позиция курсора -0869+ 9D94 B7 or a -0870+ 9D95 CA 1C 9E jp z,.PrintInLine ;если в начале строки -0871+ 9D98 35 dec (hl) ;уменьшить позицию -0872+ 9D99 21 AA 9F ld hl,CursPos -0873+ 9D9C 35 dec (hl) ;курсор влево -0874+ 9D9D 18 C7 jr .L11 -0875+ 9D9F -0876+ 9D9F FE 50 .L10 cp 0x50 ; -0877+ 9DA1 20 08 jr nz,.L5 -0878+ 9DA3 3A A8 9F ld a,(CursInsOvr) -0879+ 9DA6 2F cpl -0880+ 9DA7 32 A8 9F ld (CursInsOvr),a -0881+ 9DAA C9 ret -0882+ 9DAB -0883+ 9DAB FE 56 .L5 cp 0x56 ; -0884+ 9DAD 20 15 jr nz,.L6 -0885+ 9DAF CD 85 9F call ResCurs -0886+ 9DB2 CD 4A 9E call .ColorInLine ;сменить цвет строки -0887+ 9DB5 CC 1C 9E call z,.PrintInLine -0888+ 9DB8 CD 63 9E call .EndPos -0889+ 9DBB C8 ret z -0890+ 9DBC 3A B5 9E ld a,(.Pos) -0891+ 9DBF B9 cp c -0892+ 9DC0 D0 ret nc -0893+ 9DC1 C3 7A 9E jp .NextPos -0894+ 9DC4 -0895+ 9DC4 FE 54 .L6 cp 0x54 ; -0896+ 9DC6 20 15 jr nz,.L7 -0897+ 9DC8 CD 85 9F call ResCurs -0898+ 9DCB CD 4A 9E call .ColorInLine ;сменить цвет строки -0899+ 9DCE CC 1C 9E call z,.PrintInLine -0900+ 9DD1 21 B5 9E ld hl,.Pos ;позиция курсора -0901+ 9DD4 7E ld a,(hl) -0902+ 9DD5 B7 or a -0903+ 9DD6 C8 ret z -0904+ 9DD7 35 dec (hl) -0905+ 9DD8 21 AA 9F ld hl,CursPos ;координаты програм курсора -0906+ 9DDB 35 dec (hl) -0907+ 9DDC C9 ret -0908+ 9DDD -0909+ 9DDD FE 57 .L7 cp 0x57 ; -0910+ 9DDF 20 18 jr nz,.L8 -0911+ 9DE1 CD 85 9F call ResCurs -0912+ 9DE4 CD 4A 9E call .ColorInLine ;сменить цвет строки -0913+ 9DE7 CC 1C 9E call z,.PrintInLine -0914+ 9DEA 21 B5 9E .HomeString ld hl,.Pos ;позиция курсора -0915+ 9DED 7E ld a,(hl) -0916+ 9DEE B7 or a -0917+ 9DEF C8 ret z -0918+ 9DF0 3A B3 9E ld a,(.Coordinate) ;координаты начала строки -0919+ 9DF3 32 AA 9F ld (CursPos),a -0920+ 9DF6 AF xor a -0921+ 9DF7 77 ld (hl),a ;обнулить позицию печати -0922+ 9DF8 C9 ret -0923+ 9DF9 -0924+ 9DF9 FE 51 .L8 cp 0x51 ; -0925+ 9DFB C0 ret nz -0926+ 9DFC CD 85 9F call ResCurs -0927+ 9DFF CD 4A 9E call .ColorInLine ;сменить цвет строки -0928+ 9E02 CC 1C 9E call z,.PrintInLine -0929+ 9E05 CD 63 9E .EndString call .EndPos -0930+ 9E08 C8 ret z -0931+ 9E09 3A B7 9E ld a,(.Len) -0932+ 9E0C ; dec a ;длина строки ввода - 1 -0933+ 9E0C 91 sub c ;заполнена полностью? -0934+ 9E0D 20 01 jr nz,$+3 -0935+ 9E0F 0D dec c -0936+ 9E10 21 B5 9E ld hl,.Pos -0937+ 9E13 71 ld (hl),c ;позиция в конце строки -0938+ 9E14 3A B3 9E ld a,(.Coordinate) -0939+ 9E17 81 add a,c -0940+ 9E18 32 AA 9F ld (CursPos),a ;новая позиция програм курсора -0941+ 9E1B C9 ret -0942+ 9E1C -0943+ 9E1C DD 21 B8 9E .PrintInLine ld ix,.Buffer ;буфер строки -0944+ 9E20 3A B7 9E ld a,(.Len) -0945+ 9E23 6F ld l,a -0946+ 9E24 26 01 ld h,1 ;размеры буфера -0947+ 9E26 ED 5B B3 9E ld de,(.Coordinate) ;координаты в экране -0948+ 9E2A ifdef D_PRINTCH_BIOS -0949+ 9E2A~ xor a -0950+ 9E2A~ ld c,Bios.Win_Restore_Win ;вывод буфера на экран -0951+ 9E2A~ di -0952+ 9E2A~ rst BiosRst -0953+ 9E2A~ ei -0954+ 9E2A else -0955+ 9E2A 3A 1E AB ld a,(BankDebug) -0956+ 9E2D 47 ld b,a -0957+ 9E2E 0E 5A ld c,Dss.WinRest -0958+ 9E30 D7 rst DssRst -0959+ 9E31 endif -0960+ 9E31 C9 ret -0961+ 9E32 -0962+ 9E32 21 B7 9E .ClearInLine ld hl,.Len ;очистка строки ввода -0963+ 9E35 46 ld b,(hl) ;длина строки ввода -0964+ 9E36 3E 20 ld a," " ;пробел -0965+ 9E38 23 inc hl ;начало буфера строки -0966+ 9E39 77 ld (hl),a -0967+ 9E3A 23 inc hl -0968+ 9E3B 10 FB djnz $-3 -0969+ 9E3D AF xor a ;позиция печати -0970+ 9E3E 32 B5 9E ld (.Pos),a -0971+ 9E41 08 exa -0972+ 9E42 3A B3 9E ld a,(.Coordinate) -0973+ 9E45 32 AA 9F ld (CursPos),a -0974+ 9E48 18 08 jr $+10 -0975+ 9E4A -0976+ 9E4A 21 B6 9E .ColorInLine ld hl,.Color ;окраска в основной цвет -0977+ 9E4D 3A 1A AB ld a,(Color.InLine) -0978+ 9E50 BE cp (hl) -0979+ 9E51 C0 ret nz -0980+ 9E52 3A 1B AB ld a,(Color.InLineEd) ;цвет строки ввода -0981+ 9E55 32 B6 9E ld (.Color),a -0982+ 9E58 21 B7 9E ld hl,.Len ;длина строки ввода -0983+ 9E5B 46 ld b,(hl) -0984+ 9E5C 23 inc hl -0985+ 9E5D 23 inc hl -0986+ 9E5E 77 ld (hl),a -0987+ 9E5F 23 inc hl -0988+ 9E60 10 FB djnz $-3 -0989+ 9E62 C9 ret -0990+ 9E63 -0991+ 9E63 21 B8 9E .EndPos ld hl,.Buffer ;поиск позиции послед. символа -0992+ 9E66 3A B7 9E ld a,(.Len) -0993+ 9E69 4F ld c,a -0994+ 9E6A 3D dec a -0995+ 9E6B 87 add a,a -0996+ 9E6C 5F ld e,a -0997+ 9E6D 16 00 ld d,0 -0998+ 9E6F 19 add hl,de -0999+ 9E70 7E ld a,(hl) -1000+ 9E71 2B dec hl -1001+ 9E72 2B dec hl -1002+ 9E73 FE 20 cp " " ;ищем конец строки -1003+ 9E75 C0 ret nz -1004+ 9E76 0D dec c -1005+ 9E77 20 F7 jr nz,$-7 -1006+ 9E79 C9 ret -1007+ 9E7A -1008+ 9E7A 21 B5 9E .NextPos ld hl,.Pos ;расчет следующей позиции -1009+ 9E7D 3A B7 9E ld a,(.Len) -1010+ 9E80 3D dec a -1011+ 9E81 BE cp (hl) -1012+ 9E82 20 0B jr nz,.L16 -1013+ 9E84 3A B2 9E ld a,(.EntEnd) ;заканчивать по ENTER -1014+ 9E87 3C inc a -1015+ 9E88 C8 ret z ;последняя позиция в строке -1016+ 9E89 3E CD ld a,0xCD ;код CALL -1017+ 9E8B 32 34 9D ld (.L15),a -1018+ 9E8E C9 ret -1019+ 9E8F 34 .L16 inc (hl) ;увеличение позиции -1020+ 9E90 3A AA 9F ld a,(CursPos) ;координаты програм курсора -1021+ 9E93 3C inc a -1022+ 9E94 32 AA 9F ld (CursPos),a -1023+ 9E97 C9 ret -1024+ 9E98 ;[]=========================================================================[] -1025+ 9E98 ;[] Копирование из буфера строки ввода [] -1026+ 9E98 ;[]=========================================================================[] -1027+ 9E98 ;Вход: -1028+ 9E98 ;DE - адрес назначения -1029+ 9E98 ;C - длина строки -1030+ 9E98 -1031+ 9E98 21 B8 9E .FromBuffer ld hl,.Buffer -1032+ 9E9B 06 00 ld b,0 -1033+ 9E9D 7E .FB1 ld a,(hl) -1034+ 9E9E 12 ld (de),a -1035+ 9E9F 23 inc hl -1036+ 9EA0 23 inc hl -1037+ 9EA1 13 inc de -1038+ 9EA2 0D dec c -1039+ 9EA3 20 F8 jr nz,.FB1 -1040+ 9EA5 C9 ret -1041+ 9EA6 ;[]=========================================================================[] -1042+ 9EA6 ;[] Копирование в буфер строки ввода [] -1043+ 9EA6 ;[]=========================================================================[] -1044+ 9EA6 ;Вход: -1045+ 9EA6 ;HL - адрес строки -1046+ 9EA6 ;C - длина строки -1047+ 9EA6 -1048+ 9EA6 11 B8 9E .ToBuffer ld de,.Buffer -1049+ 9EA9 7E .TB1 ld a,(hl) -1050+ 9EAA 12 ld (de),a -1051+ 9EAB 13 inc de -1052+ 9EAC 13 inc de -1053+ 9EAD 23 inc hl -1054+ 9EAE 0D dec c -1055+ 9EAF 20 F8 jr nz,.TB1 -1056+ 9EB1 C9 ret -1057+ 9EB2 FF .EntEnd db On ;флаг окончания строки ENTER -1058+ 9EB3 00 00 .Coordinate dw 0 ;начало строки в экране -1059+ 9EB5 ;последовательность переменных не изменять! -1060+ 9EB5 00 .Pos db 0 ;позиция курсора в строке -1061+ 9EB6 00 .Color db 0 ;цвет строки ввода -1062+ 9EB7 00 .Len db 0 ;длина строки ввода -1063+ 9EB8 00 .Buffer ds 22*2 ;буфер строки ввода -1064+ 9EE4 -1065+ 9EE4 ;[]=========================================================================[] -1066+ 9EE4 ;[] Программное создние мигающего курсора [] -1067+ 9EE4 ;[]=========================================================================[] -1068+ 9EE4 -1069+ 9EE4 ;======== Подготовка дополнительного знакогенератора ======== -1070+ 9EE4 PreparChar: -1071+ 9EE4 11 00 80 ld de,OrgAdr-0x100 ;буфер для 2kB знакогенератора -1072+ 9EE7 0E B8 ld c,Bios.Win_Get_ZG ;получить сист. знакогенератор -1073+ 9EE9 CF rst BiosRst -1074+ 9EEA 21 00 87 ld hl,OrgAdr-0x100+7*256 -1075+ 9EED 01 FF 00 ld bc,0x00FF -1076+ 9EF0 71 ld (hl),c -1077+ 9EF1 23 inc hl -1078+ 9EF2 10 FC djnz $-2 -1079+ 9EF4 -1080+ 9EF4 11 00 80 ld de,OrgAdr-0x100 ;уст.знакогенератор 0x5B -1081+ 9EF7 0E B6 ld c,Bios.Win_Set_ZG -1082+ 9EF9 3E 5B ld a,0x5B -1083+ 9EFB CF rst BiosRst -1084+ 9EFC -1085+ 9EFC 2A 39 00 ld hl,(0039h) ;установка вектора (для мигания курсора) -1086+ 9EFF 22 31 9F ld (Rst38.Vect+1),hl -1087+ 9F02 21 09 9F ld hl,Rst38 -1088+ 9F05 22 39 00 ld (0039h),hl -1089+ 9F08 C9 ret -1090+ 9F09 -1091+ 9F09 F3 Rst38 di ;вектор курсора -1092+ 9F0A FD E5 push iy -1093+ 9F0C DD E5 push ix -1094+ 9F0E E5 push hl -1095+ 9F0F D5 push de -1096+ 9F10 C5 push bc -1097+ 9F11 F5 push af -1098+ 9F12 D9 exx -1099+ 9F13 08 exa -1100+ 9F14 E5 push hl -1101+ 9F15 D5 push de -1102+ 9F16 C5 push bc -1103+ 9F17 F5 push af -1104+ 9F18 CD 0D 98 call Clock -1105+ 9F1B 3A A6 9F ld a,(CursOnOff) -1106+ 9F1E B7 or a -1107+ 9F1F C4 33 9F call nz,CuttingCurs -1108+ 9F22 F1 pop af -1109+ 9F23 C1 pop bc -1110+ 9F24 D1 pop de -1111+ 9F25 E1 pop hl -1112+ 9F26 D9 exx -1113+ 9F27 08 exa -1114+ 9F28 F1 pop af -1115+ 9F29 C1 pop bc -1116+ 9F2A D1 pop de -1117+ 9F2B E1 pop hl -1118+ 9F2C DD E1 pop ix -1119+ 9F2E FD E1 pop iy -1120+ 9F30 C3 00 00 .Vect jp 0x0000 ;адрес сист. вектора RST 38 -1121+ 9F33 -1122+ 9F33 ;======== Обработка программного курсора ======== -1123+ 9F33 3A A9 9F CuttingCurs ld a,(TimerFlash) ;пауза мигания -1124+ 9F36 3D dec a -1125+ 9F37 CC 3E 9F call z,.L1 -1126+ 9F3A 32 A9 9F ld (TimerFlash),a -1127+ 9F3D C9 ret -1128+ 9F3E -1129+ 9F3E 3A A7 9F .L1 ld a,(CursPutRes) -1130+ 9F41 2F cpl -1131+ 9F42 32 A7 9F ld (CursPutRes),a -1132+ 9F45 -1133+ 9F45 ED 5B AA 9F ld de,(CursPos) -1134+ 9F49 ED 53 9A 9F ld (ResCurs.L1+1),de -1135+ 9F4D B7 or a ;флаг Put / Res -1136+ 9F4E 28 0C jr z,.L3 ;установка курсора -1137+ 9F50 ;иначе сброс курсора -1138+ 9F50 2A AC 9F ld hl,(CursSymb) ;символ и его цвет -1139+ 9F53 97 sub a ;сброс id окна -1140+ 9F54 06 1B ld b,SysSymb ;системный знакогенератор -1141+ 9F56 0E B5 ld c,Bios.Win_Put_Sym ;положить символ -1142+ 9F58 CF rst BiosRst -1143+ 9F59 3E 10 ld a,PauseFlash ;пауза мигания -1144+ 9F5B C9 ret -1145+ 9F5C -1146+ 9F5C 0E B4 .L3 ld c,Bios.Win_Get_Sym ;получить символ -1147+ 9F5E 97 sub a ;сброс id окна -1148+ 9F5F CF rst BiosRst -1149+ 9F60 22 AC 9F ld (CursSymb),hl ;символ и его цвет -1150+ 9F63 -1151+ 9F63 ED 5B AA 9F ld de,(CursPos) ;позиция печати -1152+ 9F67 3A A8 9F ld a,(CursInsOvr) ;флаг режима Ins / Ovr -1153+ 9F6A B7 or a -1154+ 9F6B 28 0F jr z,.L4 ;режим вставки -1155+ 9F6D ;иначе режим замены -1156+ 9F6D 7C ld a,h -1157+ 9F6E 07 rlca -1158+ 9F6F 07 rlca -1159+ 9F70 07 rlca -1160+ 9F71 07 rlca -1161+ 9F72 67 ld h,a -1162+ 9F73 97 sub a ;сброс id окна -1163+ 9F74 06 1B ld b,SysSymb ;системный знакогенератор -1164+ 9F76 ; ld l,0xDC ;курсор режима замены -1165+ 9F76 0E B5 ld c,Bios.Win_Put_Sym ;символ на экран -1166+ 9F78 CF rst BiosRst -1167+ 9F79 3E 10 ld a,PauseFlash ;пауза мигания -1168+ 9F7B C9 ret -1169+ 9F7C -1170+ 9F7C 97 .L4 sub a ;сброс id окна -1171+ 9F7D 06 5B ld b,0x5B ;модиф. знакогенератор -1172+ 9F7F 0E B5 ld c,Bios.Win_Put_Sym ;символ на экран -1173+ 9F81 CF rst BiosRst -1174+ 9F82 3E 10 ld a,PauseFlash ;пауза мигания -1175+ 9F84 C9 ret -1176+ 9F85 -1177+ 9F85 ;======== Принудительный сброс курсора ======== -1178+ 9F85 3A A6 9F ResCurs ld a,(CursOnOff) -1179+ 9F88 B7 or a -1180+ 9F89 C8 ret z ;курсор не установлен -1181+ 9F8A E5 push hl -1182+ 9F8B 3E FF ld a,On -1183+ 9F8D 32 A7 9F ld (CursPutRes),a -1184+ 9F90 3C inc a -1185+ 9F91 32 A6 9F ld (CursOnOff),a -1186+ 9F94 3E 01 ld a,1 ;пауза мигания -1187+ 9F96 32 A9 9F ld (TimerFlash),a -1188+ 9F99 11 00 00 .L1 ld de,0 ;последние координаты курсора -1189+ 9F9C 2A AC 9F ld hl,(CursSymb) -1190+ 9F9F 01 B5 1B ld bc,0x1B00+Bios.Win_Put_Sym -1191+ 9FA2 97 sub a ;сбросить id окна -1192+ 9FA3 CF rst BiosRst -1193+ 9FA4 E1 pop hl -1194+ 9FA5 C9 ret -1195+ 9FA6 -1196+ 9FA6 00 CursOnOff db Off ;флаг курсора 00-выкл/FF-вкл -1197+ 9FA7 FF CursPutRes db On ;флаг 00-Res/FF-Put -1198+ 9FA8 00 CursInsOvr db Ins ;флаг 00-Ins/FF-Ovr -1199+ 9FA9 01 TimerFlash db 1 ;таймер -1200+ 9FAA 00 00 CursPos dw 0 ;позиция курсора -1201+ 9FAC 00 00 CursSymb dw 0 ;символ под курсором -1202+ 9FAE -1203+ 9FAE -0377 9FAE include "kreg.asm";"D:\WORKAST\DEMON\kreg" -0001+ 9FAE ;[]=========================================================================[] -0002+ 9FAE ;[] Обработка клавиатуры в окне регистров [] -0003+ 9FAE ;[] v0.03 - последние изменения 11.03.2006 [] -0004+ 9FAE ;[] v0.10 - последние изменения 14.05.2006 [] -0005+ 9FAE ;[]=========================================================================[] -0006+ 9FAE KReg: -0007+ 9FAE ; ld a,b ;состояние -0008+ 9FAE ; and 0b11110000 -0009+ 9FAE ; jr z,.L100 -0010+ 9FAE -0011+ 9FAE ;Обработка комбинации Shift + символ -0012+ 9FAE ; and 0b11000000 ; -0013+ 9FAE ; or a -0014+ 9FAE ; jp z,Keyb+6 -0015+ 9FAE ; ld a,d -0016+ 9FAE ; cp 0x80+0x0F ;Shift+Tab -0017+ 9FAE ; jp nz,Keyb+6 -0018+ 9FAE ; ld a,2 ;номер окна дампа -0019+ 9FAE ; ld (Keyb.WinScreen),a -0020+ 9FAE ; jp Keyb-3 -0021+ 9FAE -0022+ 9FAE ;Обработка позиционного кода -0023+ 9FAE 7B .L100 ld a,e ;ASCII код -0024+ 9FAF 32 44 A0 ld (.L200+1),a -0025+ 9FB2 7A ld a,d ;позиционный код -0026+ 9FB3 -0027+ 9FB3 FE 56 cp 0x56 ; -0028+ 9FB5 20 10 jr nz,.L101 -0029+ 9FB7 CD 06 A2 call .DescCalc -0030+ 9FBA 7E ld a,(hl) ;кол-во колонок -0031+ 9FBB BB cp e -0032+ 9FBC 7B ld a,e -0033+ 9FBD 20 01 jr nz,$+3 -0034+ 9FBF AF xor a -0035+ 9FC0 3C inc a -0036+ 9FC1 32 2C A2 ld (.Coordinate),a ;текущая колонка -0037+ 9FC4 C3 4E 98 jp Keyb-3 -0038+ 9FC7 -0039+ 9FC7 FE 54 .L101 cp 0x54 ; -0040+ 9FC9 20 11 jr nz,.L102 -0041+ 9FCB CD 06 A2 call .DescCalc -0042+ 9FCE 7B ld a,e ;текущая колонка -0043+ 9FCF FE 01 cp 1 -0044+ 9FD1 20 02 jr nz,$+4 -0045+ 9FD3 7E ld a,(hl) ;кол-во колонок -0046+ 9FD4 3C inc a -0047+ 9FD5 3D dec a -0048+ 9FD6 32 2C A2 ld (.Coordinate),a ;текущая колонка -0049+ 9FD9 C3 4E 98 jp Keyb-3 -0050+ 9FDC -0051+ 9FDC 2A 2E A2 .L102 ld hl,(.Descript) -0052+ 9FDF ED 5B 2C A2 ld de,(.Coordinate) -0053+ 9FE3 FE 52 cp 0x52 ; -0054+ 9FE5 20 09 jr nz,.L103 -0055+ 9FE7 7A ld a,d ;текущая строка -0056+ 9FE8 BD cp l -0057+ 9FE9 20 02 jr nz,.L104 -0058+ 9FEB 7C ld a,h ;1-я строка -0059+ 9FEC 3D dec a -0060+ 9FED 3C .L104 inc a -0061+ 9FEE 18 0B jr .L107+1 -0062+ 9FF0 -0063+ 9FF0 FE 58 .L103 cp 0x58 ; -0064+ 9FF2 20 10 jr nz,.L105 -0065+ 9FF4 7A ld a,d ;текущая строка -0066+ 9FF5 BC cp h -0067+ 9FF6 20 02 jr nz,.L107 -0068+ 9FF8 7D ld a,l ;адрес последней строки -0069+ 9FF9 3C inc a -0070+ 9FFA 3D .L107 dec a -0071+ 9FFB 67 ld h,a -0072+ 9FFC 2E 01 ld l,1 -0073+ 9FFE 22 2C A2 ld (.Coordinate),hl -0074+ A001 C3 4E 98 jp Keyb-3 -0075+ A004 -0076+ A004 06 03 .L105 ld b,3 -0077+ A006 FE 53 cp 0x53 ; -0078+ A008 20 0D jr nz,.L108 -0079+ A00A 21 24 A2 ld hl,.PgDown -0080+ A00D 7A ld a,d ;текущая строка -0081+ A00E BE cp (hl) -0082+ A00F 38 03 jr c,$+5 -0083+ A011 23 inc hl -0084+ A012 10 FA djnz $-4 -0085+ A014 7E ld a,(hl) -0086+ A015 18 E4 jr .L107+1 -0087+ A017 -0088+ A017 FE 59 .L108 cp 0x59 ; -0089+ A019 20 0E jr nz,.L110 -0090+ A01B 21 28 A2 ld hl,.PgUp -0091+ A01E 7A ld a,d ;текущая строка -0092+ A01F BE cp (hl) -0093+ A020 30 03 jr nc,$+5 -0094+ A022 23 inc hl -0095+ A023 10 FA djnz $-4 -0096+ A025 7E ld a,(hl) -0097+ A026 3D dec a -0098+ A027 18 D2 jr .L107+1 -0099+ A029 -0100+ A029 FE 57 .L110 cp 0x57 ; -0101+ A02B 20 08 jr nz,.L111 -0102+ A02D 3E 01 ld a,1 -0103+ A02F 32 2C A2 ld (.Coordinate),a ;первая колонка -0104+ A032 C3 4E 98 jp Keyb-3 -0105+ A035 -0106+ A035 FE 51 .L111 cp 0x51 ; -0107+ A037 20 0A jr nz,.L200 -0108+ A039 CD 06 A2 call .DescCalc -0109+ A03C 7E ld a,(hl) ;последняя колонка -0110+ A03D 32 2C A2 ld (.Coordinate),a ;первая колонка -0111+ A040 C3 4E 98 jp Keyb-3 -0112+ A043 -0113+ A043 ;.L112 cp 0x0F ; -0114+ A043 ; jr nz,.L200 -0115+ A043 ; ld a,4 ;номер окна листинга -0116+ A043 ; ld (Keyb.WinScreen),a -0117+ A043 ; jp Keyb-3 -0118+ A043 -0119+ A043 ;Обработка ASCII кодов -0120+ A043 3E 00 .L200 ld a,0 ;ASCII код -0121+ A045 FE 0D cp 0x0D ; -0122+ A047 C2 57 98 jp nz,Keyb+6 -0123+ A04A 06 00 .L201 ld b,0 ;длина строки ввода -0124+ A04C 21 00 00 ld hl,0 ;координаты строки ввода -0125+ A04F -0126+ A04F 78 ld a,b -0127+ A050 3D dec a -0128+ A051 C2 DB A0 jp nz,.L205 -0129+ A054 ED 5B 2C A2 ld de,(.Coordinate) -0130+ A058 7A ld a,d ;номер строки -0131+ A059 4B ld c,e ;номер колонки -0132+ A05A EB ex de,hl ;координаты -0133+ A05B 21 30 AB ld hl,Reg._AF+1 ;рег A -0134+ A05E FE 06 cp 6 ;строка с парой AF? -0135+ A060 28 26 jr z,.L207 -0136+ A062 21 38 AB ld hl,Reg._AF_+1 ;рег A' -0137+ A065 FE 0B cp 11 ;строка с парой AF'? -0138+ A067 28 1F jr z,.L207 -0139+ A069 21 2F AB ld hl,Reg._AF ;рег F -0140+ A06C FE 07 cp 7 ;строка с парой AF? -0141+ A06E 28 07 jr z,$+9 -0142+ A070 21 37 AB ld hl,Reg._AF_ ;рег F' -0143+ A073 FE 0C cp 12 ;строка с парой AF'? -0144+ A075 20 3B jr nz,.L206 -0145+ A077 79 ld a,c ;коррекция номеров бит -0146+ A078 FE 04 cp 4 ;колонка 4..6? -0147+ A07A 38 03 jr c,$+5 -0148+ A07C 0C inc c -0149+ A07D 18 05 jr .L207-4 -0150+ A07F FE 03 cp 3 ;колонка 3? -0151+ A081 28 01 jr z,.L207-4 -0152+ A083 0D dec c -0153+ A084 3E 07 ld a,7 -0154+ A086 18 06 jr .L208 -0155+ A088 3E 0A .L207 ld a,10 ;колонки с битами -0156+ A08A B9 cp c -0157+ A08B 28 25 jr z,.L206 -0158+ A08D 3D dec a -0159+ A08E 91 .L208 sub c ;номер бита -0160+ A08F 07 rlca -0161+ A090 07 rlca -0162+ A091 07 rlca ;заготовка для битовых операций -0163+ A092 47 ld b,a -0164+ A093 F6 46 or 01000110b ;для BIT -0165+ A095 32 A5 A0 ld ($+16),a -0166+ A098 78 ld a,b -0167+ A099 F6 C6 or 11000110b ;для SET -0168+ A09B 32 A9 A0 ld ($+14),a -0169+ A09E 78 ld a,b -0170+ A09F F6 86 or 10000110b ;для RES -0171+ A0A1 32 AE A0 ld ($+13),a -0172+ A0A4 CB 46 bit 0,(hl) ;состояние бита -0173+ A0A6 20 05 jr nz,$+7 -0174+ A0A8 CB C6 set 0,(hl) ;установка бита -0175+ A0AA C3 46 98 jp Keyb-11 -0176+ A0AD CB 86 res 0,(hl) ;сброс бита -0177+ A0AF C3 46 98 jp Keyb-11 -0178+ A0B2 -0179+ A0B2 EB .L206 ex de,hl ;координаты -0180+ A0B3 CD AA 9C call InputLine ;ввод символа -0181+ A0B6 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0182+ A0B9 11 2A A1 ld de,.L204-5 -0183+ A0BC D5 push de -0184+ A0BD ED 5B 2C A2 ld de,(.Coordinate) -0185+ A0C1 21 30 AB ld hl,Reg._AF+1 -0186+ A0C4 7A ld a,d -0187+ A0C5 11 00 00 ld de,0 -0188+ A0C8 FE 06 cp 6 ;строка с парой AF -0189+ A0CA C8 ret z -0190+ A0CB 21 38 AB ld hl,Reg._AF_+1 -0191+ A0CE FE 0B cp 11 ;строка с парой AF'? -0192+ A0D0 C8 ret z -0193+ A0D1 ED 5B 2C A2 ld de,(.Coordinate) -0194+ A0D5 7B ld a,e -0195+ A0D6 D6 06 sub 6 -0196+ A0D8 5F ld e,a -0197+ A0D9 18 17 jr .L209 -0198+ A0DB -0199+ A0DB 3D .L205 dec a ;байты в минидампе -0200+ A0DC 20 5D jr nz,.L202 -0201+ A0DE CD AA 9C call InputLine ;ввод числа -0202+ A0E1 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0203+ A0E4 CD F1 9B call PutCode -0204+ A0E7 DA 4A A0 jp c,.L201 ;ошибка в веденных данных -0205+ A0EA 11 2F A1 ld de,.L204 -0206+ A0ED D5 push de -0207+ A0EE ED 5B 2C A2 ld de,(.Coordinate) -0208+ A0F2 15 .L209 dec d -0209+ A0F3 20 04 jr nz,$+6 -0210+ A0F5 2A 25 AB ld hl,(Reg._IX) -0211+ A0F8 C9 ret -0212+ A0F9 15 dec d -0213+ A0FA 20 04 jr nz,$+6 -0214+ A0FC 2A 27 AB ld hl,(Reg._IY) -0215+ A0FF C9 ret -0216+ A100 15 dec d -0217+ A101 20 04 jr nz,$+6 -0218+ A103 2A 29 AB ld hl,(Reg._HL) -0219+ A106 C9 ret -0220+ A107 15 dec d -0221+ A108 20 04 jr nz,$+6 -0222+ A10A 2A 2B AB ld hl,(Reg._DE) -0223+ A10D C9 ret -0224+ A10E 15 dec d -0225+ A10F 20 04 jr nz,$+6 -0226+ A111 2A 2D AB ld hl,(Reg._BC) -0227+ A114 C9 ret -0228+ A115 15 dec d -0229+ A116 15 dec d -0230+ A117 15 dec d -0231+ A118 20 04 jr nz,$+6 -0232+ A11A 2A 31 AB ld hl,(Reg._HL_) -0233+ A11D C9 ret -0234+ A11E 15 dec d -0235+ A11F 20 04 jr nz,$+6 -0236+ A121 2A 33 AB ld hl,(Reg._DE_) -0237+ A124 C9 ret -0238+ A125 15 dec d -0239+ A126 2A 35 AB ld hl,(Reg._BC_) -0240+ A129 C9 ret -0241+ A12A -0242+ A12A 3A B8 9E ld a,(InputLine.Buffer) -0243+ A12D 18 05 jr $+7 -0244+ A12F 3A 2C 9C .L204 ld a,(PutCode.Buffer) ;записываемый байт -0245+ A132 1D dec e -0246+ A133 1D dec e ;смещение в минидампе -0247+ A134 19 add hl,de ;адрес в памяти -0248+ A135 CD 97 92 call Ld_hl_a ;записали -0249+ A138 C3 46 98 jp Keyb-11 -0250+ A13B -0251+ A13B 3D .L202 dec a ;однобайтное число (номер банки) -0252+ A13C 20 32 jr nz,.L203 -0253+ A13E CD AA 9C call InputLine ;ввод числа -0254+ A141 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0255+ A144 CD 30 9C call PutAdres -0256+ A147 DA 4A A0 jp c,.L201 ;ошибка в веденных данных -0257+ A14A 11 46 98 ld de,Keyb-11 -0258+ A14D D5 push de -0259+ A14E 7D ld a,l -0260+ A14F ED 5B 2C A2 ld de,(.Coordinate) -0261+ A153 1D dec e ;колонка в строке -0262+ A154 20 04 jr nz,$+6 -0263+ A156 32 3F AB ld (WinPage),a ;0-е окно -0264+ A159 C9 ret -0265+ A15A 1D dec e -0266+ A15B 20 06 jr nz,$+8 -0267+ A15D 32 40 AB ld (WinPage+1),a ;1-е окно -0268+ A160 D3 A2 out (EmmWin.P1),a -0269+ A162 C9 ret -0270+ A163 1D dec e -0271+ A164 20 04 jr nz,$+6 -0272+ A166 32 41 AB ld (WinPage+2),a ;2-е окно -0273+ A169 C9 ret -0274+ A16A 32 42 AB ld (WinPage+3),a ;3-е окно -0275+ A16D D3 E2 out (EmmWin.P3),a -0276+ A16F C9 ret -0277+ A170 -0278+ A170 3D .L203 dec a ;глубина стека -0279+ A171 20 07 jr nz,.L210 -0280+ A173 AF xor a ;обнулить -0281+ A174 32 22 AB ld (StackDown),a -0282+ A177 C3 46 98 jp Keyb-11 -0283+ A17A -0284+ A17A .L210 ;dec a ;двухбайтное число -0285+ A17A ;jp nz,Keyb+6 -0286+ A17A CD AA 9C call InputLine ;ввод числа в рег пары -0287+ A17D DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0288+ A180 CD 30 9C call PutAdres -0289+ A183 DA 4A A0 jp c,.L201 ;ошибка в веденных данных -0290+ A186 11 46 98 ld de,Keyb-11 -0291+ A189 D5 push de -0292+ A18A ED 5B 2C A2 ld de,(.Coordinate) -0293+ A18E 15 dec d -0294+ A18F 20 04 jr nz,$+6 -0295+ A191 22 25 AB ld (Reg._IX),hl -0296+ A194 C9 ret -0297+ A195 15 dec d -0298+ A196 20 04 jr nz,$+6 -0299+ A198 22 27 AB ld (Reg._IY),hl -0300+ A19B C9 ret -0301+ A19C 15 dec d -0302+ A19D 20 04 jr nz,$+6 -0303+ A19F 22 29 AB ld (Reg._HL),hl -0304+ A1A2 C9 ret -0305+ A1A3 15 dec d -0306+ A1A4 20 04 jr nz,$+6 -0307+ A1A6 22 2B AB ld (Reg._DE),hl -0308+ A1A9 C9 ret -0309+ A1AA 15 dec d -0310+ A1AB 20 04 jr nz,$+6 -0311+ A1AD 22 2D AB ld (Reg._BC),hl -0312+ A1B0 C9 ret -0313+ A1B1 15 dec d -0314+ A1B2 20 04 jr nz,$+6 -0315+ A1B4 22 2F AB ld (Reg._AF),hl -0316+ A1B7 C9 ret -0317+ A1B8 15 dec d -0318+ A1B9 15 dec d -0319+ A1BA 20 04 jr nz,$+6 -0320+ A1BC 22 31 AB ld (Reg._HL_),hl -0321+ A1BF C9 ret -0322+ A1C0 15 dec d -0323+ A1C1 20 04 jr nz,$+6 -0324+ A1C3 22 33 AB ld (Reg._DE_),hl -0325+ A1C6 C9 ret -0326+ A1C7 15 dec d -0327+ A1C8 20 04 jr nz,$+6 -0328+ A1CA 22 35 AB ld (Reg._BC_),hl -0329+ A1CD C9 ret -0330+ A1CE 15 dec d -0331+ A1CF 20 04 jr nz,$+6 -0332+ A1D1 22 37 AB ld (Reg._AF_),hl -0333+ A1D4 C9 ret -0334+ A1D5 15 dec d -0335+ A1D6 15 dec d -0336+ A1D7 20 0B jr nz,$+13 -0337+ A1D9 1D dec e -0338+ A1DA 28 04 jr z,$+6 -0339+ A1DC 22 39 AB ld (Reg._IR),hl -0340+ A1DF C9 ret -0341+ A1E0 22 3D AB ld (Reg._PC),hl -0342+ A1E3 C9 ret -0343+ A1E4 1D dec e -0344+ A1E5 28 1B jr z,.L211 -0345+ A1E7 01 7D 00 .Rez ld bc,Rezident.End-Rezident;длина резидента -0346+ A1EA E5 push hl ;новое начало резидента -0347+ A1EB 09 add hl,bc ;новый конечный адрес резидента -0348+ A1EC 7C ld a,h -0349+ A1ED E6 C0 and 11000000b -0350+ A1EF 57 ld d,a -0351+ A1F0 E1 pop hl -0352+ A1F1 7C ld a,h -0353+ A1F2 E6 C0 and 11000000b -0354+ A1F4 BA cp d ;резидент пересекает окно? -0355+ A1F5 28 07 jr z,.L212 -0356+ A1F7 62 ld h,d -0357+ A1F8 2E 00 ld l,0 -0358+ A1FA 2B dec hl ;последний адрес окна с резидентом -0359+ A1FB B7 or a -0360+ A1FC ED 42 sbc hl,bc -0361+ A1FE 22 20 AB .L212 ld (RezAdr),hl -0362+ A201 C9 ret -0363+ A202 22 3B AB .L211 ld (Reg._SP),hl -0364+ A205 C9 ret -0365+ A206 -0366+ A206 ;Расчет дескриптора строки в окне регистров -0367+ A206 ED 5B 2C A2 .DescCalc ld de,(.Coordinate) ;текущие координаты -0368+ A20A 21 2F A2 ld hl,.Descript+1 -0369+ A20D 42 ld b,d ;номер строки -0370+ A20E 23 inc hl ;дескриптор строки -0371+ A20F 23 inc hl -0372+ A210 10 FC djnz $-2 -0373+ A212 7E ld a,(hl) ;номер дескриптора строки -0374+ A213 87 add a,a -0375+ A214 4F ld c,a -0376+ A215 2B dec hl -0377+ A216 46 ld b,(hl) -0378+ A217 C5 push bc -0379+ A218 06 00 ld b,0 -0380+ A21A 21 4E A2 ld hl,.DTabl -0381+ A21D 09 add hl,bc -0382+ A21E 7E ld a,(hl) ;начало дескриптора -0383+ A21F 23 inc hl -0384+ A220 66 ld h,(hl) -0385+ A221 6F ld l,a -0386+ A222 C1 pop bc -0387+ A223 C9 ret -0388+ A224 -0389+ A224 02 07 0C 0F .PgDown db 2,7,12,15 -0390+ A228 0E 09 04 02 .PgUp db 14,9,4,2 -0391+ A22C -0392+ A22C 01 01 .Coordinate dw 0x0101 ;курсор (стр/кол курсора) -0393+ A22E -0394+ A22E .Descript: -0395+ A22E 0F 01 dw 0x010F ;первая/кол-во строк окна -0396+ A230 -0397+ A230 01 00 db 0x01,0 ;номер строки, номер дескриптора -0398+ A232 02 00 04 00 db 0x02,0,0x04,0 -0399+ A236 db 0x05,0,0x06,0,0x07,1 -0399+ A236 050006000701 -0400+ A23C db 0x08,2,0x0A,0,0x0B,0 -0400+ A23C 08020A000B00 -0401+ A242 db 0x0C,0,0x0D,1,0x0E,2 -0401+ A242 0C000D010E02 -0402+ A248 db 0x10,3,0x12,4,0x14,5 -0402+ A248 100312041405 -0403+ A24E -0404+ A24E .DTabl dw .D1,.D2,.D3,.D4,.D5,.D6 -0404+ A24E 5AA26DA282A28FA294A29DA2 -0405+ A25A -0406+ A25A 09 .D1 db 9 ;кол-во колонок для пар -0407+ A25B 04 db 0x04 ;N столбца колонки -0408+ A25C 05 db 5 ;ширина колонки -0409+ A25D db 0x0A,2,0x0C,2,0x0F,2,0x11,2 -0409+ A25D 0A020C020F021102 -0410+ A265 db 0x14,1,0x15,1,0x16,1,0x17,1 -0410+ A265 1401150116011701 -0411+ A26D -0412+ A26D 0A .D2 db 10 ;кол-во колонок для пары AF -0413+ A26E 04 db 0x04 ;N столбца колонки -0414+ A26F 05 db 5 ;ширина колонки -0415+ A270 db 0x0B,1,0x0C,1,0x0D,1,0x0E,1 -0415+ A270 0B010C010D010E01 -0416+ A278 db 0x0F,1,0x10,1,0x11,1,0x12,1 -0416+ A278 0F01100111011201 -0417+ A280 15 01 db 0x15,1 -0418+ A282 -0419+ A282 06 .D3 db 6 ;кол-во колонок для флагов -0420+ A283 01 db 0x01 ;N столбца колонки -0421+ A284 01 db 1 ;ширина колонки -0422+ A285 02 01 04 01 db 0x02,1,0x04,1 -0423+ A289 db 0x06,1,0x07,1,0x08,1 -0423+ A289 060107010801 -0424+ A28F -0425+ A28F 02 .D4 db 2 ;кол-во колонок для PC IR -0426+ A290 04 db 0x04 ;N столбца колонки -0427+ A291 05 db 5 ;ширина колонки -0428+ A292 0D 05 db 0x0D,5 -0429+ A294 -0430+ A294 04 .D5 db 4 ;кол-во колонок для банок -0431+ A295 02 db 0x02 ;N столбца колонки -0432+ A296 03 db 3 ;ширина колонки -0433+ A297 db 0x08,3,0x0E,3,0x14,3 -0433+ A297 08030E031403 -0434+ A29D -0435+ A29D 03 .D6 db 3 ;кол-во колонок -0436+ A29E 04 db 0x04 ;N столбца колонки -0437+ A29F 05 db 5 ;ширина колонки -0438+ A2A0 0A 04 db 0x0A,4 -0439+ A2A2 13 05 db 0x13,5 -0440+ A2A4 -0441+ A2A4 -0378 A2A4 include "kstack.asm";"D:\WORKAST\DEMON\kstack" -0001+ A2A4 ;[]=========================================================================[] -0002+ A2A4 ;[] Обработка клавиатуры в окне дампа стека [] -0003+ A2A4 ;[] v0.10 - последние изменения 18.03.2006 [] -0004+ A2A4 ;[]=========================================================================[] -0005+ A2A4 KStack: -0006+ A2A4 78 ld a,b ;состояние -0007+ A2A5 E6 F0 and 11110000b -0008+ A2A7 ; ld b,a -0009+ A2A7 28 28 jr z,.L100 -0010+ A2A9 -0011+ A2A9 ;Обработка комбинации Shift + символ -0012+ A2A9 ; and 11000000b ; -0013+ A2A9 ; or a -0014+ A2A9 ; jr z,.L10 -0015+ A2A9 ; ld a,d -0016+ A2A9 ;; cp 0x80+0x0F ;Shift+Tab -0017+ A2A9 ;; jp nz,Keyb+6 -0018+ A2A9 ;; ld a,3 ;номер окна дампа -0019+ A2A9 ;; ld (Keyb.WinScreen),a -0020+ A2A9 ; jp Keyb-3 -0021+ A2A9 -0022+ A2A9 ;Обработка комбинации Ctrl + символ -0023+ A2A9 ; ld a,b -0024+ A2A9 FE 20 cp 00100000b ; -0025+ A2AB C2 57 98 jp nz,Keyb+6 -0026+ A2AE 7A ld a,d ;позиционный код -0027+ A2AF FE AB cp 0x80+0x2B ;+ -0028+ A2B1 C2 57 98 jp nz,Keyb+6 -0029+ A2B4 2A 23 AB ld hl,(StackDump) -0030+ A2B7 ED 4B F3 A3 ld bc,(.Coordinate) -0031+ A2BB 78 ld a,b -0032+ A2BC 06 16 ld b,0x16 ;x-кордината 1 строки -0033+ A2BE 90 sub b -0034+ A2BF 07 rlca ;*2 -0035+ A2C0 06 00 ld b,0 -0036+ A2C2 4F ld c,a -0037+ A2C3 B7 or a -0038+ A2C4 ED 42 sbc hl,bc -0039+ A2C6 22 3B AB ld (Reg._SP),hl -0040+ A2C9 3E FF ld a,-1 -0041+ A2CB 32 66 90 ld (PrintStrSP.StrSp),a -0042+ A2CE C3 46 98 jp Keyb-11 -0043+ A2D1 -0044+ A2D1 ;Обработка позиционного кода -0045+ A2D1 7B .L100 ld a,e ;ASCII код -0046+ A2D2 32 9E A3 ld (.L200+1),a -0047+ A2D5 7A ld a,d ;позиционный код -0048+ A2D6 -0049+ A2D6 ED 5B F3 A3 ld de,(.Coordinate) ;текущие координаты курсора -0050+ A2DA FE 56 cp 0x56 ; -0051+ A2DC 20 0F jr nz,.L101 -0052+ A2DE 3A F7 A3 ld a,(.Descript+2) ;кол-во колонок -0053+ A2E1 BB cp e -0054+ A2E2 7B ld a,e -0055+ A2E3 20 01 jr nz,$+3 -0056+ A2E5 AF xor a -0057+ A2E6 3C inc a -0058+ A2E7 32 F3 A3 ld (.Coordinate),a ;текущая колонка -0059+ A2EA C3 4E 98 jp Keyb-3 -0060+ A2ED -0061+ A2ED FE 54 .L101 cp 0x54 ; -0062+ A2EF 20 10 jr nz,.L102 -0063+ A2F1 7B ld a,e ;текущая колонка -0064+ A2F2 FE 01 cp 1 -0065+ A2F4 20 04 jr nz,$+6 -0066+ A2F6 3A F7 A3 ld a,(.Descript+2) ;кол-во колонок -0067+ A2F9 3C inc a -0068+ A2FA 3D dec a -0069+ A2FB 32 F3 A3 ld (.Coordinate),a ;текущая колонка -0070+ A2FE C3 4E 98 jp Keyb-3 -0071+ A301 -0072+ A301 2A F5 A3 .L102 ld hl,(.Descript) -0073+ A304 FE 52 cp 0x52 ; -0074+ A306 20 1F jr nz,.L103 -0075+ A308 7A ld a,d ;текущая строка -0076+ A309 BD cp l -0077+ A30A 20 14 jr nz,.L104 -0078+ A30C 2A 23 AB ld hl,(StackDump) ;адрес 1-ой строки -0079+ A30F 2B dec hl -0080+ A310 2B dec hl -0081+ A311 22 23 AB ld (StackDump),hl -0082+ A314 21 66 90 ld hl,PrintStrSP.StrSp ;строка верш.стека -0083+ A317 3E FF ld a,-1 -0084+ A319 BE cp (hl) ;в дампе? -0085+ A31A 28 01 jr z,$+3 -0086+ A31C 35 dec (hl) -0087+ A31D C3 46 98 jp Keyb-11 -0088+ A320 3C .L104 inc a -0089+ A321 32 F4 A3 ld (.Coordinate+1),a -0090+ A324 C3 4E 98 jp Keyb-3 -0091+ A327 -0092+ A327 FE 58 .L103 cp 0x58 ; -0093+ A329 20 22 jr nz,.L105 -0094+ A32B 7A ld a,d ;текущая строка -0095+ A32C BC cp h -0096+ A32D 20 17 jr nz,.L107 -0097+ A32F 2A 23 AB ld hl,(StackDump) ;адрес 1-ой строки -0098+ A332 23 inc hl -0099+ A333 23 inc hl -0100+ A334 22 23 AB ld (StackDump),hl -0101+ A337 21 66 90 ld hl,PrintStrSP.StrSp ;строка верш.стека -0102+ A33A 7E ld a,(hl) -0103+ A33B FE 07 cp 7 ;на последней строке? -0104+ A33D 38 03 jr c,$+5 -0105+ A33F 3E FE ld a,-2 -0106+ A341 77 ld (hl),a ;верш.стека не попадает в дамп -0107+ A342 34 inc (hl) -0108+ A343 C3 46 98 jp Keyb-11 -0109+ A346 3D .L107 dec a -0110+ A347 32 F4 A3 ld (.Coordinate+1),a -0111+ A34A C3 4E 98 jp Keyb-3 -0112+ A34D -0113+ A34D FE 53 .L105 cp 0x53 ; -0114+ A34F 20 1F jr nz,.L108 -0115+ A351 7A ld a,d ;текущая строка -0116+ A352 BD cp l -0117+ A353 20 14 jr nz,.L106 -0118+ A355 2A 23 AB ld hl,(StackDump) -0119+ A358 01 0E 00 ld bc,2*7 -0120+ A35B B7 or a -0121+ A35C ED 42 sbc hl,bc -0122+ A35E 22 23 AB ld (StackDump),hl -0123+ A361 3E FF ld a,-1 -0124+ A363 32 66 90 ld (PrintStrSP.StrSp),a ;строка верш.стека -0125+ A366 C3 46 98 jp Keyb-11 -0126+ A369 7D .L106 ld a,l ;на последнюю строку -0127+ A36A 32 F4 A3 ld (.Coordinate+1),a -0128+ A36D C3 4E 98 jp Keyb-3 -0129+ A370 -0130+ A370 FE 59 .L108 cp 0x59 ; -0131+ A372 20 1D jr nz,.L110 -0132+ A374 7A ld a,d ;текущая строка -0133+ A375 BC cp h -0134+ A376 20 12 jr nz,.L109 -0135+ A378 2A 23 AB ld hl,(StackDump) -0136+ A37B 01 0E 00 ld bc,2*7 -0137+ A37E 09 add hl,bc -0138+ A37F 22 23 AB ld (StackDump),hl -0139+ A382 3E FF ld a,-1 -0140+ A384 32 66 90 ld (PrintStrSP.StrSp),a ;строка верш.стека -0141+ A387 C3 46 98 jp Keyb-11 -0142+ A38A 7C .L109 ld a,h ;на первую строку -0143+ A38B 32 F4 A3 ld (.Coordinate+1),a -0144+ A38E C3 4E 98 jp Keyb-3 -0145+ A391 -0146+ A391 FE 57 .L110 cp 0x57 ; -0147+ A393 20 08 jr nz,.L200 -0148+ A395 3E 06 ld a,6 -0149+ A397 32 66 90 ld (PrintStrSP.StrSp),a ;строка верш.стека -0150+ A39A C3 46 98 jp Keyb-11 -0151+ A39D -0152+ A39D ;.L111 cp 0x0F ; -0153+ A39D ; jr nz,.L200 -0154+ A39D ; ld a,1 ;номер окна листинга -0155+ A39D ; ld (Keyb.WinScreen),a -0156+ A39D ; jp Keyb-3 -0157+ A39D -0158+ A39D ;Обработка ASCII кодов -0159+ A39D 3E 00 .L200 ld a,0 ;ASCII код -0160+ A39F FE 0D cp 0x0D ; -0161+ A3A1 C2 57 98 jp nz,Keyb+6 -0162+ A3A4 06 00 .L201 ld b,0 ;длина строки ввода -0163+ A3A6 21 00 00 ld hl,0 ;координаты строки ввода -0164+ A3A9 CD AA 9C call InputLine ;ввод числа -0165+ A3AC DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0166+ A3AF CD 30 9C call PutAdres -0167+ A3B2 DA A4 A3 jp c,.L201 ;ошибка в веденных данных -0168+ A3B5 ED 4B F3 A3 ld bc,(.Coordinate) -0169+ A3B9 78 ld a,b -0170+ A3BA 06 16 ld b,0x16 ;x-кордината 1 строки -0171+ A3BC 90 sub b -0172+ A3BD EB ex de,hl -0173+ A3BE 2A 23 AB ld hl,(StackDump) -0174+ A3C1 47 ld b,a ;номер строки 0..7 -0175+ A3C2 07 rlca ;*2 -0176+ A3C3 0D dec c -0177+ A3C4 4F ld c,a -0178+ A3C5 20 1B jr nz,.L202 ;переход - если данные, иначе алрес -0179+ A3C7 -0180+ A3C7 3A 66 90 ld a,(PrintStrSP.StrSp) ;строка верш.стека -0181+ A3CA B8 cp b -0182+ A3CB 28 0E jr z,.L203 -0183+ A3CD 06 00 ld b,0 ;не на вершине стека -0184+ A3CF EB ex de,hl ;HL - введенный адрес -0185+ A3D0 09 add hl,bc -0186+ A3D1 22 23 AB ld (StackDump),hl -0187+ A3D4 3E FF ld a,-1 -0188+ A3D6 32 66 90 ld (PrintStrSP.StrSp),a -0189+ A3D9 18 04 jr .L203+4 -0190+ A3DB ED 53 3B AB .L203 ld (Reg._SP),de ;адрес введен на вершине стека -0191+ A3DF C3 46 98 jp Keyb-11 -0192+ A3E2 -0193+ A3E2 06 00 .L202 ld b,0 ;ввод данных -0194+ A3E4 B7 or a -0195+ A3E5 ED 42 sbc hl,bc -0196+ A3E7 7A ld a,d ;запись данных в память -0197+ A3E8 CD 97 92 call Ld_hl_a -0198+ A3EB 23 inc hl -0199+ A3EC 7B ld a,e -0200+ A3ED CD 97 92 call Ld_hl_a -0201+ A3F0 C3 46 98 jp Keyb-11 -0202+ A3F3 -0203+ A3F3 -0204+ A3F3 01 16 .Coordinate dw 0x1601 ;курсор (стр/кол курсора) -0205+ A3F5 .Descript: -0206+ A3F5 1D 16 dw 0x161D ;первая/последняя строка окна -0207+ A3F7 02 db 2 ;кол-во колонок -0208+ A3F8 -0209+ A3F8 01 db 0x01 ;N столбца колонки -0210+ A3F9 05 db 5 ;ширина колонки -0211+ A3FA 07 05 db 0x07,5 -0212+ A3FC -0213+ A3FC -0379 A3FC include "kdump.asm";"D:\WORKAST\DEMON\kdump" -0001+ A3FC ;[]=========================================================================[] -0002+ A3FC ;[] Обработка клавиатуры в окне дампа [] -0003+ A3FC ;[] v0.10 - последние изменения 31.03.2006 [] -0004+ A3FC ;[]=========================================================================[] -0005+ A3FC KDump: -0006+ A3FC 78 ld a,b ;состояние -0007+ A3FD E6 F0 and 11110000b -0008+ A3FF 28 30 jr z,.L100 -0009+ A401 -0010+ A401 ;Обработка комбинации Ctrl + символ -0011+ A401 FE 20 .L10 cp 00100000b ; -0012+ A403 C2 31 A4 jp nz,.L100 -0013+ A406 7A ld a,d ;позиционный код -0014+ A407 -0015+ A407 FE D1 cp 0x80+0x51 ;++ -0047+ A43C 20 0F jr nz,.L101 -0048+ A43E 3A A4 A5 ld a,(.Descript+2) ;кол-во колонок -0049+ A441 BB cp e -0050+ A442 7B ld a,e -0051+ A443 20 01 jr nz,$+3 -0052+ A445 AF xor a -0053+ A446 3C inc a -0054+ A447 32 A0 A5 ld (.Coordinate),a ;текущая колонка -0055+ A44A C3 4E 98 jp Keyb-3 -0056+ A44D -0057+ A44D FE 54 .L101 cp 0x54 ; -0058+ A44F 20 10 jr nz,.L102 -0059+ A451 7B ld a,e ;текущая колонка -0060+ A452 FE 01 cp 1 -0061+ A454 20 04 jr nz,$+6 -0062+ A456 3A A4 A5 ld a,(.Descript+2) ;кол-во колонок -0063+ A459 3C inc a -0064+ A45A 3D dec a -0065+ A45B 32 A0 A5 ld (.Coordinate),a ;текущая колонка -0066+ A45E C3 4E 98 jp Keyb-3 -0067+ A461 -0068+ A461 2A A2 A5 .L102 ld hl,(.Descript) -0069+ A464 FE 52 cp 0x52 ; -0070+ A466 20 18 jr nz,.L103 -0071+ A468 7A ld a,d ;текущая строка -0072+ A469 BD cp l -0073+ A46A 20 0D jr nz,.L104 -0074+ A46C 2A 43 AB ld hl,(Dump1) -0075+ A46F 01 10 00 ld bc,16 -0076+ A472 09 add hl,bc -0077+ A473 22 43 AB ld (Dump1),hl -0078+ A476 C3 46 98 jp Keyb-11 -0079+ A479 3C .L104 inc a -0080+ A47A 32 A1 A5 ld (.Coordinate+1),a -0081+ A47D C3 4E 98 jp Keyb-3 -0082+ A480 -0083+ A480 FE 58 .L103 cp 0x58 ; -0084+ A482 20 1A jr nz,.L105 -0085+ A484 7A ld a,d ;текущая строка -0086+ A485 BC cp h -0087+ A486 20 0F jr nz,.L107 -0088+ A488 2A 43 AB ld hl,(Dump1) -0089+ A48B 01 10 00 ld bc,16 -0090+ A48E B7 or a -0091+ A48F ED 42 sbc hl,bc -0092+ A491 22 43 AB ld (Dump1),hl -0093+ A494 C3 46 98 jp Keyb-11 -0094+ A497 3D .L107 dec a -0095+ A498 32 A1 A5 ld (.Coordinate+1),a -0096+ A49B C3 4E 98 jp Keyb-3 -0097+ A49E -0098+ A49E FE 53 .L105 cp 0x53 ; -0099+ A4A0 20 18 jr nz,.L108 -0100+ A4A2 7A ld a,d ;текущая строка -0101+ A4A3 BD cp l -0102+ A4A4 20 0D jr nz,.L106 -0103+ A4A6 2A 43 AB ld hl,(Dump1) -0104+ A4A9 01 70 00 ld bc,16*7 -0105+ A4AC 09 add hl,bc -0106+ A4AD 22 43 AB ld (Dump1),hl -0107+ A4B0 C3 46 98 jp Keyb-11 -0108+ A4B3 7D .L106 ld a,l ;на последнюю строку -0109+ A4B4 32 A1 A5 ld (.Coordinate+1),a -0110+ A4B7 C3 4E 98 jp Keyb-3 -0111+ A4BA -0112+ A4BA FE 59 .L108 cp 0x59 ; -0113+ A4BC 20 1C jr nz,.L110 -0114+ A4BE 7A ld a,d ;текущая строка -0115+ A4BF BC cp h -0116+ A4C0 20 11 jr nz,.L109 -0117+ A4C2 2A 43 AB ld hl,(Dump1) -0118+ A4C5 01 70 00 ld bc,16*7 -0119+ A4C8 B7 or a -0120+ A4C9 ED 42 sbc hl,bc -0121+ A4CB 22 43 AB ld (Dump1),hl -0122+ A4CE C3 46 98 jp Keyb-11 -0123+ A4D1 20 00 jr nz,.L109 -0124+ A4D3 7C .L109 ld a,h ;на первую строку -0125+ A4D4 32 A1 A5 ld (.Coordinate+1),a -0126+ A4D7 C3 4E 98 jp Keyb-3 -0127+ A4DA -0128+ A4DA FE 57 .L110 cp 0x57 ; -0129+ A4DC 20 08 jr nz,.L111 -0130+ A4DE 3E 01 ld a,1 -0131+ A4E0 32 A0 A5 ld (.Coordinate),a ;первая колонка -0132+ A4E3 C3 4E 98 jp Keyb-3 -0133+ A4E6 -0134+ A4E6 FE 51 .L111 cp 0x51 ; -0135+ A4E8 20 09 jr nz,.L200 -0136+ A4EA 3A A4 A5 ld a,(.Descript+2) -0137+ A4ED 32 A0 A5 ld (.Coordinate),a ;первая колонка -0138+ A4F0 C3 4E 98 jp Keyb-3 -0139+ A4F3 -0140+ A4F3 ;Обработка ASCII кодов -0141+ A4F3 3E 00 .L200 ld a,0 ;ASCII код -0142+ A4F5 FE 0D cp 0x0D ; -0143+ A4F7 C2 57 98 jp nz,Keyb+6 -0144+ A4FA 06 00 .L201 ld b,0 ;длина строки ввода -0145+ A4FC 21 00 00 ld hl,0 ;координаты строки ввода -0146+ A4FF -0147+ A4FF 78 ld a,b -0148+ A500 3D dec a -0149+ A501 28 25 jr z,.L202 -0150+ A503 3D dec a -0151+ A504 28 37 jr z,.L203 -0152+ A506 -0153+ A506 CD AA 9C call InputLine ;ввод адреса -0154+ A509 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0155+ A50C CD 30 9C call PutAdres -0156+ A50F DA FA A4 jp c,.L201 ;ошибка в веденных данных -0157+ A512 11 10 00 ld de,16 ;кол-во байт в строке -0158+ A515 3A A1 A5 ld a,(.Coordinate+1) ;номер строки -0159+ A518 D6 16 sub 0x16 ;координата первой строки -0160+ A51A 28 06 jr z,$+8 -0161+ A51C 47 ld b,a -0162+ A51D B7 or a -0163+ A51E ED 52 sbc hl,de -0164+ A520 10 FB djnz $-3 -0165+ A522 22 43 AB ld (Dump1),hl -0166+ A525 C3 46 98 jp Keyb-11 -0167+ A528 -0168+ A528 CD A3 9C .L202 call InputLineEd ;ввод символа -0169+ A52B DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0170+ A52E CD 8D A5 call .L299 -0171+ A531 79 ld a,c -0172+ A532 D6 12 sub 18 ;первая колонка в поле данных -0173+ A534 4F ld c,a -0174+ A535 3A B8 9E ld a,(InputLine.Buffer) -0175+ A538 11 22 12 ld de,256*18+34 ;1-я и последняя+1 колонки -0176+ A53B 18 19 jr .L204 -0177+ A53D -0178+ A53D CD A3 9C .L203 call InputLineEd ;ввод кода символа -0179+ A540 DA 4E 98 jp c,Keyb-3 ;завершение ввода по -0180+ A543 CD F1 9B call PutCode -0181+ A546 DA FA A4 jp c,.L201 ;ошибка в веденных данных -0182+ A549 CD 8D A5 call .L299 -0183+ A54C 79 ld a,c -0184+ A54D D6 02 sub 2 ;первая колонка в поле данных -0185+ A54F 4F ld c,a -0186+ A550 3A 2C 9C ld a,(PutCode.Buffer) ;записываемый байт -0187+ A553 11 12 02 ld de,256*2+18 ;1-я и последняя+1 колонки -0188+ A556 09 .L204 add hl,bc -0189+ A557 CD 97 92 call Ld_hl_a -0190+ A55A 3A B2 9E ld a,(InputLine.EntEnd) ;ввод закончен ENTER -0191+ A55D B7 or a -0192+ A55E C2 46 98 jp nz,Keyb-11 ;да -0193+ A561 21 A0 A5 ld hl,.Coordinate ;текущие координаты курсора -0194+ A564 34 inc (hl) -0195+ A565 7B ld a,e ;первая колонка данных -0196+ A566 BE cp (hl) -0197+ A567 20 15 jr nz,.L205 -0198+ A569 7A ld a,d -0199+ A56A 77 ld (hl),a ;в начало строки кода -0200+ A56B 23 inc hl -0201+ A56C 3E 1D ld a,0x1D ;последняя строка дампа -0202+ A56E BE cp (hl) -0203+ A56F 20 0C jr nz,.L205-1 -0204+ A571 2A 43 AB ld hl,(Dump1) ;сдвинуть дамп -0205+ A574 01 10 00 ld bc,16 -0206+ A577 09 add hl,bc -0207+ A578 22 43 AB ld (Dump1),hl -0208+ A57B 18 01 jr .L205 -0209+ A57D 34 inc (hl) -0210+ A57E CD 35 92 .L205 call CursorRes ;выкл курсор -0211+ A581 CD 3C 88 call Refresh ;обновление экрана -0212+ A584 CD B3 99 call Cursor ;вкл курсор -0213+ A587 CD D3 91 call CursorSet -0214+ A58A C3 FA A4 jp .L201 -0215+ A58D -0216+ A58D 11 10 00 .L299 ld de,16 ;кол-во байт в строке -0217+ A590 2A 43 AB ld hl,(Dump1) ;адрес в первой строке -0218+ A593 ED 4B A0 A5 ld bc,(.Coordinate) -0219+ A597 78 ld a,b -0220+ A598 D6 16 sub 0x16 ;координата первой строки -0221+ A59A 47 ld b,a -0222+ A59B C8 ret z -0223+ A59C 19 add hl,de -0224+ A59D 10 FD djnz $-1 -0225+ A59F C9 ret -0226+ A5A0 -0227+ A5A0 01 16 .Coordinate dw 0x1601 ;курсор (стр/кол курсора) -0228+ A5A2 .Descript: -0229+ A5A2 1D 16 dw 0x161D ;первая/последняя строка окна -0230+ A5A4 21 db 33 ;кол-во колонок -0231+ A5A5 -0232+ A5A5 0E db 0x0E ;N столбца колонки -0233+ A5A6 05 db 5 ;ширина колонки -0234+ A5A7 15 02 17 02 db 0x15,2,0x17,2 -0235+ A5AB 1A 02 1C 02 db 0x1A,2,0x1C,2 -0236+ A5AF 1F 02 21 02 db 0x1F,2,0x21,2 -0237+ A5B3 24 02 26 02 db 0x24,2,0x26,2 -0238+ A5B7 29 02 2B 02 db 0x29,2,0x2B,2 -0239+ A5BB 2E 02 30 02 db 0x2E,2,0x30,2 -0240+ A5BF 33 02 35 02 db 0x33,2,0x35,2 -0241+ A5C3 38 02 3A 02 db 0x38,2,0x3A,2 -0242+ A5C7 db 0x3E,1,0x3F,1,0x40,1,0x41,1 -0242+ A5C7 3E013F0140014101 -0243+ A5CF db 0x42,1,0x43,1,0x44,1,0x45,1 -0243+ A5CF 4201430144014501 -0244+ A5D7 db 0x46,1,0x47,1,0x48,1,0x49,1 -0244+ A5D7 4601470148014901 -0245+ A5DF db 0x4A,1,0x4B,1,0x4C,1,0x4D,1 -0245+ A5DF 4A014B014C014D01 -0246+ A5E7 -0247+ A5E7 -0380 A5E7 include "rez.asm";"D:\WORKAST\DEMON\rez" -0001+ A5E7 ;[]=========================================================================[] -0002+ A5E7 ;[] Резидент отладчика [] -0003+ A5E7 ;[] v0.03 - последние изменения 24.02.2006 [] -0004+ A5E7 ;[] Принцип работы (два варианта): [] -0005+ A5E7 ;[] 1. Резидент расположен не во втором окне памяти (0x8000...0xBFFF) [] -0006+ A5E7 ;[] Из отладчика готовится резидент (настраиваются все адреса) и копируется [] -0007+ A5E7 ;[] по адресу расположения, управление из отладчика передается на метку [] -0008+ A5E7 ;[] Rezident.Start1, после чего происходит востановление банки памяти, рас- [] -0009+ A5E7 ;[] положенной под отладчиком и выполнение отлаживаемой команды. Возврат [] -0010+ A5E7 ;[] в резидент осуществляется на метку Rezident.RetIn1 и далее после вос- [] -0011+ A5E7 ;[] тановления банки с отладчиком возврат в отладчик. [] -0012+ A5E7 ;[] 2. Резидент расположен во втором окне памяти (0x8000...0xBFFF) [] -0013+ A5E7 ;[] Поскольку в этом окне работает сам отладчик, то переход в резидент и [] -0014+ A5E7 ;[] возврат в отладчик после трассировки команды выполняется при помощи [] -0015+ A5E7 ;[] вспомогательной процедуры длиной 7 байт расположеной по адресу [] -0016+ A5E7 ;[] AdrTmpBuf. После коррекции всех адресов в отладчике и сохранении акку- [] -0017+ A5E7 ;[] мулятора отлаживаемой программы по адресу Rezident+1 и пары HL по адре- [] -0018+ A5E7 ;[] ce Rezident+2 управление передается по адресу AdrTmpBuf, где расположен [] -0019+ A5E7 ;[] следующий код отключающий банку с отладчиком: [] -0020+ A5E7 ;[] ld a,НомерБанкиПодОтладчиком [] -0021+ A5E7 ;[] out (НомерПорта2Окна),a [] -0022+ A5E7 ;[] jp Rezident.Start [] -0023+ A5E7 ;[] Далее резидент востанавливает 7 байт запорченых вышепреведенной проце- [] -0024+ A5E7 ;[] дурой, а также пару HL и аккумулятор и переходит к трассировке. Возврат [] -0025+ A5E7 ;[] происходит на метку Rezident.RetIn, где после сохранения аккумулятора и [] -0026+ A5E7 ;[] пары HL сохраняется 7 байт памяти из адреса AdrTmpBuf и туда прописыва- [] -0027+ A5E7 ;[] ется код востановления банки с отладчиком: [] -0028+ A5E7 ;[] ld a,НомерБанкиСОтладчиком [] -0029+ A5E7 ;[] out (НомерПорта2Окна),a [] -0030+ A5E7 ;[] jp ВОтладчик [] -0031+ A5E7 ;[] После возврата в отладчик востанавливается память запорченая резидентом [] -0032+ A5E7 ;[] и временной процедурой [] -0033+ A5E7 ;[]=========================================================================[] -0034+ A5E7 AdrTmpBuf equ 0xFF00 -0035+ A5E7 Rezident: -0036+ A5E7 00 ds 11 -0037+ A5F2 -0038+ A5F2 21 00 00 .Start ld hl,0 ;вост. памяти запорченной при -0039+ A5F5 22 00 FF ld (AdrTmpBuf),hl ;размещении резидента -0040+ A5F8 21 00 00 ld hl,0 ;во 2-м окне -0041+ A5FB 22 02 FF ld (AdrTmpBuf+2),hl -0042+ A5FE 21 00 00 ld hl,0 -0043+ A601 22 04 FF ld (AdrTmpBuf+4),hl -0044+ A604 3E 00 ld a,0 -0045+ A606 32 06 FF ld (AdrTmpBuf+6),a -0046+ A609 2A E9 A5 .K2 ld hl,(Rezident+2) ;востановили HL -0047+ A60C 18 04 jr .K3 -0048+ A60E ;...востановить банку во 2-м окне -0049+ A60E 3E FF .Start1 ld a,0xFF ;банка под demon'ом -0050+ A610 D3 C2 out (EmmWin.P2),a -0051+ A612 3A E8 A5 .K3 ld a,(Rezident+1) ;востановим аккумулятор -0052+ A615 -0053+ A615 C3 00 00 .Step jp 0 ;переход на выполнение -0054+ A618 -0055+ A618 32 E8 A5 .RetIn ld (Rezident+1),a ;сохраним аккумулятор -0056+ A61B 22 E9 A5 .K4 ld (Rezident+2),hl ;сохраним HL -0057+ A61E 2A 00 FF ld hl,(AdrTmpBuf) ;сохранение памяти -0058+ A621 22 EB A5 .K5 ld (Rezident+4),hl -0059+ A624 2A 02 FF ld hl,(AdrTmpBuf+2) -0060+ A627 22 ED A5 ld (Rezident+6),hl -0061+ A62A 2A 04 FF ld hl,(AdrTmpBuf+4) -0062+ A62D 22 EF A5 ld (Rezident+8),hl -0063+ A630 3A 06 FF ld a,(AdrTmpBuf+6) -0064+ A633 32 F1 A5 ld (Rezident+10),a -0065+ A636 21 3E FF .BankD1 ld hl,0xFF3E ;ld a,0xFF - N банки с отладч -0066+ A639 22 00 FF ld (AdrTmpBuf),hl -0067+ A63C 21 D3 C2 ld hl,EmmWin.P2*256+0xD3 ;out (EmmWin.P2),a -0068+ A63F 22 02 FF ld (AdrTmpBuf+2),hl -0069+ A642 21 C3 00 .Return1 ld hl,0xC3 ;jp в отладчик -0070+ A645 22 04 FF ld (AdrTmpBuf+4),hl -0071+ A648 3E 00 ld a,0 -0072+ A64A 32 06 FF ld (AdrTmpBuf+6),a -0073+ A64D DB C2 in a,(EmmWin.P2) ;номер банки под demon'ом -0074+ A64F 32 E7 A5 .K6 ld (Rezident),a ;сохранили -0075+ A652 C3 00 FF jp AdrTmpBuf -0076+ A655 -0077+ A655 32 E8 A5 .RetIn1 ld (Rezident+1),a ;сохраним аккумулятор -0078+ A658 ;...сохранить банку из 2-го окна -0079+ A658 DB C2 in a,(EmmWin.P2) ;номер банки под demon'ом -0080+ A65A 32 E7 A5 .K1 ld (Rezident),a ;сохранили -0081+ A65D 3E FF .BankD ld a,0xFF ;банка с demon'ом -0082+ A65F D3 C2 out (EmmWin.P2),a -0083+ A661 -0084+ A661 C3 00 00 .Return jp 0 -0085+ A664 -0086+ A664 .End -0087+ A664 -0088+ A664 -0381 A664 include "step.asm";"D:\WORKAST\DEMON\step" -0001+ A664 ;[]=========================================================================[] -0002+ A664 ;[] Отладка команд программы [] -0003+ A664 ;[] v0.03 - последние изменения 10.03.2006 [] -0004+ A664 ;[] v0.10 - последние изменения 18.03.2006 [] -0005+ A664 ;[]=========================================================================[] -0006+ A664 Step: -0007+ A664 F3 di -0008+ A665 3A 41 AB ld a,(WinPage+2) ;банка под demon'ом -0009+ A668 32 0F A6 ld (Rezident.Start1+1),a ;в резидент ее -0010+ A66B 32 61 A9 ld (.BankP+1),a -0011+ A66E 3A 1E AB ld a,(BankDebug) ;банка с demon'ом -0012+ A671 32 5E A6 ld (Rezident.BankD+1),a ;в резидент ее -0013+ A674 32 38 A6 ld (Rezident.BankD1+2),a -0014+ A677 21 F8 A8 ld hl,Step.Run+3 ;точка возврата в отладчик -0015+ A67A 22 62 A6 ld (Rezident.Return+1),hl ;прописываем в резиденте -0016+ A67D 7D ld a,l -0017+ A67E 32 44 A6 ld (Rezident.Return1+2),a -0018+ A681 7C ld a,h -0019+ A682 32 49 A6 ld (Rezident.Return1+7),a -0020+ A685 2A 3D AB ld hl,(Reg._PC) -0021+ A688 22 16 A6 ld (Rezident.Step+1),hl ;адрес отлаживаемой команды -0022+ A68B -0023+ A68B 3A 2F AB ld a,(Reg._AF) ;флаг -0024+ A68E 47 ld b,a -0025+ A68F CD 6C 92 call Ld_a_hl -0026+ A692 ; ld a,(hl) ;код команды -0027+ A692 -0028+ A692 4F ld c,a -0029+ A693 E6 CF and 11001111b -0030+ A695 FE C5 cp 11000101b ;PUSH -0031+ A697 CC 67 A9 call z,.SpdInc -0032+ A69A FE C1 cp 11000001b ;POP -0033+ A69C CC 71 A9 call z,.SpdDec -0034+ A69F -0035+ A69F 79 ld a,c -0036+ A6A0 FE CD cp 0xCD ;CALL -0037+ A6A2 20 0A jr nz,.L7 -0038+ A6A4 3A 7B A9 ld a,(.Flag) -0039+ A6A7 3C inc a -0040+ A6A8 C2 FF A7 jp nz,.L2 ;без захода в подпрограмму -0041+ A6AB C3 EF A7 jp .L8 -0042+ A6AE FE C9 .L7 cp 0xC9 ;RET -0043+ A6B0 CA E2 A7 jp z,.L9 -0044+ A6B3 FE C3 cp 0xC3 ;JP -0045+ A6B5 CA F2 A7 jp z,.L8+3 -0046+ A6B8 FE 18 cp 0x18 ;JR -0047+ A6BA CA 48 A7 jp z,.L6 -0048+ A6BD FE 10 cp 0x10 ;DJNZ -0049+ A6BF 20 10 jr nz,.L18 -0050+ A6C1 3A 7B A9 ld a,(.Flag) -0051+ A6C4 3C inc a -0052+ A6C5 C2 FF A7 jp nz,.L2 ;без отладки цикла -0053+ A6C8 3A 2E AB ld a,(Reg._BC+1) -0054+ A6CB 3D dec a -0055+ A6CC 20 7A jr nz,.L6 -0056+ A6CE C3 FF A7 jp .L2 -0057+ A6D1 23 .L18 inc hl ;следующий байт соманды -0058+ A6D2 08 exa -0059+ A6D3 CD 6C 92 call Ld_a_hl -0060+ A6D6 4F ld c,a -0061+ A6D7 08 exa -0062+ A6D8 ; ld c,(hl) -0063+ A6D8 2B dec hl -0064+ A6D9 FE ED cp 0xED ;префикс для RETI, RETN -0065+ A6DB 20 0B jr nz,.L10 -0066+ A6DD 79 ld a,c -0067+ A6DE FE 4D cp 0x4D ;RETI -0068+ A6E0 CA E2 A7 jp z,.L9 -0069+ A6E3 FE 45 cp 0x45 ;RETN -0070+ A6E5 CA E2 A7 jp z,.L9 -0071+ A6E8 FE DD .L10 cp 0xDD ;префикс для IX -0072+ A6EA 20 11 jr nz,.L25 -0073+ A6EC 79 ld a,c -0074+ A6ED FE E5 cp 0xE5 ;PUSH IX -0075+ A6EF CC 67 A9 call z,.SpdInc -0076+ A6F2 FE E1 cp 0xE1 ;POP IX -0077+ A6F4 CC 71 A9 call z,.SpdDec -0078+ A6F7 ED 5B 25 AB ld de,(Reg._IX) -0079+ A6FB 18 19 jr .L24 -0080+ A6FD FE FD .L25 cp 0xFD ;префикс для IY -0081+ A6FF 20 11 jr nz,.L24-4 -0082+ A701 79 ld a,c -0083+ A702 FE E5 cp 0xE5 ;PUSH IY -0084+ A704 CC 67 A9 call z,.SpdInc -0085+ A707 FE E1 cp 0xE1 ;POP IY -0086+ A709 CC 71 A9 call z,.SpdDec -0087+ A70C ED 5B 27 AB ld de,(Reg._IY) -0088+ A710 18 04 jr .L24 -0089+ A712 ED 5B 29 AB ld de,(Reg._HL) -0090+ A716 FE E9 .L24 cp 0xE9 ;JP (HL/IX/IY) -0091+ A718 20 04 jr nz,.L23 -0092+ A71A EB ex de,hl -0093+ A71B C3 02 A8 jp .L2+3 -0094+ A71E FE 38 .L23 cp 0x38 ;JR C, -0095+ A720 20 07 jr nz,.L19 -0096+ A722 CB 40 bit 0,b ;флаг C -0097+ A724 CA FF A7 jp z,.L2 ;нет перехода -0098+ A727 18 1F jr .L6 ;переход -0099+ A729 FE 30 .L19 cp 0x30 ;JR NC, -0100+ A72B 20 07 jr nz,.L20 -0101+ A72D CB 40 bit 0,b ;флаг C -0102+ A72F C2 FF A7 jp nz,.L2 ;нет перехода -0103+ A732 18 14 jr .L6 ;переход -0104+ A734 FE 28 .L20 cp 0x28 ;JR Z, -0105+ A736 20 07 jr nz,.L21 -0106+ A738 CB 70 bit 6,b ;флаг Z -0107+ A73A CA FF A7 jp z,.L2 ;нет перехода -0108+ A73D 18 09 jr .L6 ;переход -0109+ A73F FE 20 .L21 cp 0x20 ;JR NZ, -0110+ A741 20 1E jr nz,.L22 -0111+ A743 CB 70 bit 6,b ;флаг Z -0112+ A745 C2 FF A7 jp nz,.L2 ;нет перехода -0113+ A748 -0114+ A748 23 .L6 inc hl -0115+ A749 CD 6C 92 call Ld_a_hl -0116+ A74C ; ld a,(hl) ;смещение -0117+ A74C 23 inc hl -0118+ A74D 06 00 ld b,0 -0119+ A74F 4F ld c,a -0120+ A750 CB 7F bit 7,a ;знак числа -0121+ A752 28 09 jr z,$+11 -0122+ A754 ED 44 neg -0123+ A756 B7 or a ;сброс флага C -0124+ A757 4F ld c,a -0125+ A758 ED 42 sbc hl,bc ;отрицательное смещение -0126+ A75A C3 02 A8 jp .L2+3 -0127+ A75D 09 add hl,bc ;положительное смещение -0128+ A75E C3 02 A8 jp .L2+3 -0129+ A761 -0130+ A761 E6 C7 .L22 and 11000111b -0131+ A763 FE C7 cp 11000111b ;RST x -0132+ A765 20 15 jr nz,.L27 -0133+ A767 3A 7B A9 ld a,(.Flag) -0134+ A76A 3C inc a -0135+ A76B C2 FF A7 jp nz,.L2 ;без захода в подпрограмму -0136+ A76E CD 67 A9 call .SpdInc -0137+ A771 CD 6C 92 call Ld_a_hl -0138+ A774 ; ld a,(hl) ;байт комнды -0139+ A774 E6 38 and 00111000b ;адрес перехода -0140+ A776 26 00 ld h,0 -0141+ A778 6F ld l,a -0142+ A779 C3 02 A8 jp .L2+3 -0143+ A77C FE C2 .L27 cp 11000010b ;JP flag -0144+ A77E 28 0E jr z,.L26 -0145+ A780 FE C0 cp 11000000b ;RET flag -0146+ A782 28 0A jr z,.L26 -0147+ A784 FE C4 cp 11000100b ;CALL flag -0148+ A786 20 77 jr nz,.L2 -0149+ A788 3A 7B A9 ld a,(.Flag) -0150+ A78B 3C inc a -0151+ A78C 20 71 jr nz,.L2 ;без захода в подпрограмму -0152+ A78E CD 6C 92 .L26 call Ld_a_hl -0153+ A791 ; ld a,(hl) ;код команды -0154+ A791 E6 38 and 00111000b ;флаги -0155+ A793 28 1E jr z,.L11 ;JP/CALL/RET NZ, -0156+ A795 FE 08 cp 00001000b -0157+ A797 28 20 jr z,.L12 ;JP/CALL/RET Z, -0158+ A799 FE 10 cp 00010000b -0159+ A79B 28 22 jr z,.L13 ;JP/CALL/RET NC, -0160+ A79D FE 18 cp 00011000b -0161+ A79F 28 24 jr z,.L14 ;JP/CALL/RET C, -0162+ A7A1 FE 20 cp 00100000b -0163+ A7A3 28 26 jr z,.L15 ;JP/CALL/RET PO, -0164+ A7A5 FE 28 cp 00101000b -0165+ A7A7 28 28 jr z,.L16 ;JP/CALL/RET PE, -0166+ A7A9 FE 30 cp 00110000b -0167+ A7AB 28 2A jr z,.L17 ;JP/CALL/RET P, -0168+ A7AD CB 78 bit 7,b ;JP/CALL/RET M, флаг S -0169+ A7AF 28 4E jr z,.L2 ;нет перехода -0170+ A7B1 18 28 jr .L5 ;переход -0171+ A7B3 CB 70 .L11 bit 6,b ;флаг Z -0172+ A7B5 20 48 jr nz,.L2 ;нет перехода -0173+ A7B7 18 22 jr .L5 ;переход -0174+ A7B9 CB 70 .L12 bit 6,b ;флаг Z -0175+ A7BB 28 42 jr z,.L2 ;нет перехода -0176+ A7BD 18 1C jr .L5 ;переход -0177+ A7BF CB 40 .L13 bit 0,b ;флаг C -0178+ A7C1 20 3C jr nz,.L2 ;нет перехода -0179+ A7C3 18 16 jr .L5 ;переход -0180+ A7C5 CB 40 .L14 bit 0,b ;флаг C -0181+ A7C7 28 36 jr z,.L2 ;нет перехода -0182+ A7C9 18 10 jr .L5 ;переход -0183+ A7CB CB 50 .L15 bit 2,b ;флаг P/V -0184+ A7CD 20 30 jr nz,.L2 ;нет перехода -0185+ A7CF 18 0A jr .L5 ;переход -0186+ A7D1 CB 50 .L16 bit 2,b ;флаг P/V -0187+ A7D3 28 2A jr z,.L2 ;нет перехода -0188+ A7D5 18 04 jr .L5 ;переход -0189+ A7D7 CB 78 .L17 bit 7,b ;флаг S -0190+ A7D9 20 24 jr nz,.L2 ;нет перехода -0191+ A7DB -0192+ A7DB CD 6C 92 .L5 call Ld_a_hl -0193+ A7DE ; ld a,(hl) ;код команды -0194+ A7DE E6 07 and 00000111b ;отследить RET'ы -0195+ A7E0 20 09 jr nz,.L8-4 -0196+ A7E2 CD 71 A9 .L9 call .SpdDec -0197+ A7E5 2A 3B AB ld hl,(Reg._SP) ;стек -0198+ A7E8 2B dec hl -0199+ A7E9 18 07 jr .L8+3 -0200+ A7EB FE 02 cp 00000010b ;отследить JP -0201+ A7ED 28 03 jr z,.L8+3 -0202+ A7EF CD 67 A9 .L8 call .SpdInc -0203+ A7F2 23 inc hl -0204+ A7F3 CD 6C 92 call Ld_a_hl -0205+ A7F6 47 ld b,a -0206+ A7F7 ; ld a,(hl) -0207+ A7F7 23 inc hl -0208+ A7F8 CD 6C 92 call Ld_a_hl -0209+ A7FB ; ld h,(hl) -0210+ A7FB 67 ld h,a -0211+ A7FC 68 ld l,b -0212+ A7FD 18 03 jr .L2+3 -0213+ A7FF CD 42 8A .L2 call List ;следующая команда -0214+ A802 22 3D AB ld (Reg._PC),hl ;новый PC -0215+ A805 E5 push hl -0216+ A806 E5 push hl -0217+ A807 3A C3 9B ld a,(KList.Descript) ;количество строк листинга -0218+ A80A CD D1 9B call AdrListTabl ;нижний адрес листинга -0219+ A80D ED 5B 55 AB ld de,(ListAdr) ;верхний адрес листинга -0220+ A811 C1 pop bc ;новый PC -0221+ A812 CD C4 92 call AdrArea -0222+ A815 30 04 jr nc,.L1+4 -0223+ A817 -0224+ A817 ED 43 55 AB .L1 ld (ListAdr),bc ;новая страница листинга -0225+ A81B E1 pop hl -0226+ A81C -0227+ A81C CD 6C 92 call Ld_a_hl ;следующие за командой байты -0228+ A81F 4F ld c,a -0229+ A820 23 inc hl -0230+ A821 CD 6C 92 call Ld_a_hl -0231+ A824 47 ld b,a -0232+ A825 23 inc hl -0233+ A826 CD 6C 92 call Ld_a_hl -0234+ A829 C5 push bc -0235+ A82A F5 push af -0236+ A82B E5 push hl -0237+ A82C -0238+ A82C E5 push hl -0239+ A82D 2A 20 AB ld hl,(RezAdr) ;адрес посадки резидента -0240+ A830 7C ld a,h -0241+ A831 E6 C0 and 11000000b -0242+ A833 FE 80 cp 10000000b ;окно посадки резидента -0243+ A835 3E FF ld a,0xFF ;FF - резидент во 2-м окне -0244+ A837 20 05 jr nz,.L30 -0245+ A839 11 31 00 ld de,Rezident.RetIn-Rezident -0246+ A83C 18 04 jr .L30+4 -0247+ A83E 11 6E 00 .L30 ld de,Rezident.RetIn1-Rezident -0248+ A841 3C inc a ;0 - резидент не во 2-м окне -0249+ A842 32 7C A9 ld (.WRez),a -0250+ A845 19 add hl,de ;адрес возврата в резидент -0251+ A846 EB ex de,hl -0252+ A847 E1 pop hl -0253+ A848 7A ld a,d ;прописываем после -0254+ A849 CD 97 92 call Ld_hl_a ;отлаживаемой команды -0255+ A84C 2B dec hl -0256+ A84D 7B ld a,e -0257+ A84E CD 97 92 call Ld_hl_a -0258+ A851 2B dec hl -0259+ A852 3E C3 ld a,0xC3 ;JP -0260+ A854 CD 97 92 call Ld_hl_a -0261+ A857 -0262+ A857 2A 20 AB ld hl,(RezAdr) ;адрес посадки -0263+ A85A E5 push hl ;коррекция адресов кода резидента -0264+ A85B 22 5B A6 ld (Rezident.K1+1),hl ;номер банки под отладчиком -0265+ A85E 22 50 A6 ld (Rezident.K6+1),hl -0266+ A861 23 inc hl -0267+ A862 22 13 A6 ld (Rezident.K3+1),hl ;аккумулятор прграммы -0268+ A865 22 19 A6 ld (Rezident.RetIn+1),hl -0269+ A868 22 56 A6 ld (Rezident.RetIn1+1),hl -0270+ A86B 23 inc hl -0271+ A86C 22 0A A6 ld (Rezident.K2+1),hl ;пара HL программы -0272+ A86F 22 1C A6 ld (Rezident.K4+1),hl -0273+ A872 23 inc hl -0274+ A873 23 inc hl -0275+ A874 22 22 A6 ld (Rezident.K5+1),hl ;1 и 2 байты буфера -0276+ A877 23 inc hl -0277+ A878 23 inc hl -0278+ A879 22 28 A6 ld (Rezident.K5+7),hl ;3 и 4 байты буфера -0279+ A87C 23 inc hl -0280+ A87D 23 inc hl -0281+ A87E 22 2E A6 ld (Rezident.K5+13),hl ;5 и 6 байты буфера -0282+ A881 23 inc hl -0283+ A882 23 inc hl -0284+ A883 22 34 A6 ld (Rezident.K5+19),hl ;7 байт буфера -0285+ A886 -0286+ A886 3A 7C A9 ld a,(.WRez) ;флаг посадки резидента -0287+ A889 B7 or a -0288+ A88A 20 09 jr nz,.L31 -0289+ A88C 11 27 00 ld de,Rezident.Start1-Rezident -0290+ A88F 2A 20 AB ld hl,(RezAdr) ;адрес посадки -0291+ A892 19 add hl,de ;старт резидента не во 2-м окне -0292+ A893 18 28 jr .L32 -0293+ A895 -0294+ A895 23 .L31 inc hl ;старт резидента во 2-м окне -0295+ A896 22 65 A9 ld (.Run1+1),hl -0296+ A899 -0297+ A899 21 00 FF ld hl,AdrTmpBuf -0298+ A89C 11 F3 A5 ld de,Rezident.Start+1 ;сохранение 7 байт в резиденте -0299+ A89F 06 03 ld b,3 -0300+ A8A1 7E .L33 ld a,(hl) -0301+ A8A2 12 ld (de),a -0302+ A8A3 23 inc hl -0303+ A8A4 13 inc de -0304+ A8A5 7E ld a,(hl) -0305+ A8A6 12 ld (de),a -0306+ A8A7 23 inc hl -0307+ A8A8 13 inc de -0308+ A8A9 13 inc de -0309+ A8AA 13 inc de -0310+ A8AB 13 inc de -0311+ A8AC 13 inc de -0312+ A8AD 10 F2 djnz .L33 -0313+ A8AF 7E ld a,(hl) -0314+ A8B0 12 ld (de),a -0315+ A8B1 -0316+ A8B1 11 66 A9 ld de,.Run1+2 ;вспомогательная процедура -0317+ A8B4 06 07 ld b,7 ;длина -0318+ A8B6 1A .L34 ld a,(de) -0319+ A8B7 77 ld (hl),a -0320+ A8B8 2B dec hl -0321+ A8B9 1B dec de -0322+ A8BA 10 FA djnz .L34 -0323+ A8BC 23 inc hl -0324+ A8BD -0325+ A8BD 22 F6 A8 .L32 ld (.Run+1),hl -0326+ A8C0 -0327+ A8C0 3A 30 AB ld a,(Reg._AF+1) ;аккумулятор программы -0328+ A8C3 32 E8 A5 ld (Rezident+1),a ;в резидент -0329+ A8C6 2A 29 AB ld hl,(Reg._HL) ;пара HL -0330+ A8C9 22 E9 A5 ld (Rezident+2),hl ;в резидент -0331+ A8CC -0332+ A8CC E1 pop hl ;адрес посадки резидента -0333+ A8CD 11 E7 A5 ld de,Rezident ;начало резидента -0334+ A8D0 01 7D A9 ld bc,.Buffer -0335+ A8D3 3E 7D ld a,Rezident.End-Rezident ;длина резидента -0336+ A8D5 F5 .L3 push af -0337+ A8D6 CD 6C 92 call Ld_a_hl -0338+ A8D9 02 ld (bc),a ;сохранение памяти под резидентом -0339+ A8DA 1A ld a,(de) ;копирование резидента -0340+ A8DB CD 97 92 call Ld_hl_a -0341+ A8DE 03 inc bc -0342+ A8DF 13 inc de -0343+ A8E0 23 inc hl -0344+ A8E1 F1 pop af -0345+ A8E2 3D dec a -0346+ A8E3 20 F0 jr nz,.L3 -0347+ A8E5 -0348+ A8E5 3A 3F AB ld a,(WinPage) ;банка в 0-ом окне -0349+ A8E8 D3 82 out (EmmWin.P0),a -0350+ A8EA -0351+ A8EA CD F5 8D call RestAllRegs -0352+ A8ED ED 73 1C AB ld (StackDebug),sp ;стек отладчика -0353+ A8F1 ED 7B 3B AB ld sp,(Reg._SP) ;стек программы -0354+ A8F5 C3 00 00 .Run jp 0 ;пуск резидента -0355+ A8F8 -0356+ A8F8 ED 73 3B AB ld (Reg._SP),sp ;стек программы -0357+ A8FC ED 7B 1C AB ld sp,(StackDebug) ;стек отладчика -0358+ A900 CD AC 8D call SaveAllRegs -0359+ A903 DB 82 in a,(EmmWin.P0) -0360+ A905 32 3F AB ld (WinPage),a ;банка в 0-ом окне -0361+ A908 3A 1F AB ld a,(BankOS) ;банка с OS -0362+ A90B D3 82 out (EmmWin.P0),a -0363+ A90D -0364+ A90D 2A 20 AB ld hl,(RezAdr) -0365+ A910 CD 6C 92 call Ld_a_hl -0366+ A913 32 41 AB ld (WinPage+2),a ;номер банки во 2-ом окне -0367+ A916 23 inc hl ;аккумулятор программа -0368+ A917 CD 6C 92 call Ld_a_hl -0369+ A91A 32 30 AB ld (Reg._AF+1),a -0370+ A91D 3A 7C A9 ld a,(.WRez) ;флаг резидента -0371+ A920 B7 or a -0372+ A921 28 1B jr z,.L35 ;не во 2-м окне -0373+ A923 23 inc hl ;регистр L программы -0374+ A924 CD 6C 92 call Ld_a_hl -0375+ A927 32 29 AB ld (Reg._HL),a -0376+ A92A 23 inc hl ;регистр H программы -0377+ A92B CD 6C 92 call Ld_a_hl -0378+ A92E 32 2A AB ld (Reg._HL+1),a -0379+ A931 06 07 ld b,7 -0380+ A933 11 00 FF ld de,AdrTmpBuf -0381+ A936 23 .L36 inc hl ;буфер 7-ми байт -0382+ A937 CD 6C 92 call Ld_a_hl -0383+ A93A 12 ld (de),a ;востановили -0384+ A93B 13 inc de -0385+ A93C 10 F8 djnz .L36 -0386+ A93E -0387+ A93E E1 .L35 pop hl -0388+ A93F F1 pop af ;востановили код команды -0389+ A940 C1 pop bc -0390+ A941 CD 97 92 call Ld_hl_a -0391+ A944 2B dec hl -0392+ A945 78 ld a,b -0393+ A946 CD 97 92 call Ld_hl_a -0394+ A949 2B dec hl -0395+ A94A 79 ld a,c -0396+ A94B CD 97 92 call Ld_hl_a -0397+ A94E -0398+ A94E 11 7D A9 ld de,.Buffer ;восстановление памяти под резидентом -0399+ A951 2A 20 AB ld hl,(RezAdr) ;адрес посадки -0400+ A954 06 7D ld b,Rezident.End-Rezident ;длина резидента -0401+ A956 1A .L4 ld a,(de) -0402+ A957 CD 97 92 call Ld_hl_a -0403+ A95A 13 inc de -0404+ A95B 23 inc hl -0405+ A95C 10 F8 djnz .L4 -0406+ A95E FB ei -0407+ A95F C9 ret -0408+ A960 -0409+ A960 3E FF .BankP ld a,0xFF ;(2) банка под отладчиком -0410+ A962 D3 C2 out (EmmWin.P2),a ;(2) -0411+ A964 C3 00 00 .Run1 jp 0 ;(3) переход в резидент -0412+ A967 -0413+ A967 F5 .SpdInc push af ;увеличение глубины стека -0414+ A968 3A 22 AB ld a,(StackDown) -0415+ A96B 3C inc a -0416+ A96C 32 22 AB ld (StackDown),a -0417+ A96F F1 pop af -0418+ A970 C9 ret -0419+ A971 -0420+ A971 F5 .SpdDec push af ;уменьшение глубины стека -0421+ A972 3A 22 AB ld a,(StackDown) -0422+ A975 3D dec a -0423+ A976 32 22 AB ld (StackDown),a -0424+ A979 F1 pop af -0425+ A97A C9 ret -0426+ A97B -0427+ A97B FF .Flag db On ;флаг захода в подпрограммы -0428+ A97C 00 .WRez db 0 ;флаг окна посадки резидента -0429+ A97D -0430+ A97D 00 .Buffer ds Rezident.End-Rezident ;длина резидента -0431+ A9FA -0432+ A9FA -0382 A9FA include "savescr.asm";"D:\WORKAST\DEMON\savescr" -0001+ A9FA ;[]=========================================================================[] -0002+ A9FA ;[] Сохранение экрана в файл [] -0003+ A9FA ;[] v0.03 - последние изменения 11.03.2006 [] -0004+ A9FA ;[]=========================================================================[] -0005+ A9FA SaveScr: -0006+ A9FA 01 3D 01 ld bc,1*256+Dss.GetMem -0007+ A9FD D7 rst DssRst ;выделение банки памяти -0008+ A9FE D8 ret c ;выход с ошибкой -0009+ A9FF 32 5A AA ld (.Id),a -0010+ AA02 01 3B 00 ld bc,Dss.SetWin3 -0011+ AA05 D7 rst DssRst ;включение банки в 3-е окно -0012+ AA06 32 5B AA ld (.Id+1),a ;замещаемая страница -0013+ AA09 11 00 00 ld de,0 ;позиция на экране -0014+ AA0C 21 00 C0 ld hl,0xC000 -0015+ AA0F D5 .L1 push de -0016+ AA10 E5 push hl -0017+ AA11 0E 57 ld c,Dss.RdChar -0018+ AA13 D7 rst DssRst ;считать символ с экрана -0019+ AA14 E1 pop hl -0020+ AA15 D1 pop de -0021+ AA16 77 ld (hl),a -0022+ AA17 23 inc hl -0023+ AA18 1C inc e -0024+ AA19 7B ld a,e -0025+ AA1A FE 50 cp 0x50 ;закончилась строка? -0026+ AA1C 20 F1 jr nz,.L1 -0027+ AA1E 01 0A 0D ld bc,0x0D0A ;конец строки -0028+ AA21 70 ld (hl),b -0029+ AA22 23 inc hl -0030+ AA23 71 ld (hl),c -0031+ AA24 23 inc hl -0032+ AA25 1E 00 ld e,0 ;начало строки -0033+ AA27 14 inc d -0034+ AA28 7A ld a,d -0035+ AA29 FE 20 cp 0x20 ;конец экрана? -0036+ AA2B 20 E2 jr nz,.L1 -0037+ AA2D -0038+ AA2D 21 50 AA ld hl,.NameF ;имя файла -0039+ AA30 AF xor a ;атрибут -0040+ AA31 0E 0A ld c,Dss.Create -0041+ AA33 D7 rst DssRst -0042+ AA34 38 0E jr c,.L2 ;ошибка -0043+ AA36 F5 push af -0044+ AA37 21 00 C0 ld hl,0xC000 ;начало записываемой памяти -0045+ AA3A 11 40 0A ld de,82*32 ;размер записываемой инфы -0046+ AA3D 0E 14 ld c,Dss.Write -0047+ AA3F D7 rst DssRst ;записать -0048+ AA40 F1 pop af -0049+ AA41 0E 12 ld c,Dss.Close -0050+ AA43 D7 rst DssRst ;закрыть файл -0051+ AA44 -0052+ AA44 3A 5A AA .L2 ld a,(.Id) ;id памяти -0053+ AA47 0E 3E ld c,Dss.FreeMem -0054+ AA49 D7 rst DssRst ;освободить память -0055+ AA4A 3A 5B AA ld a,(.Id+1) -0056+ AA4D D3 E2 out (EmmWin.P3),a ;востановили банку -0057+ AA4F C9 ret -0058+ AA50 -0059+ AA50 .NameF db "demon.$$$",0 -0059+ AA50 64656D6F6E2E24242400 -0060+ AA5A 00 .Id ds 2 ;id выделенного блока -0061+ AA5C -0062+ AA5C ;11:11 18.02.2011 Заглушка Не было исходника :( -0063+ AA5C ; include "d:\workast\demon\screen\scrdemon" -0064+ AA5C -0065+ AA5C -0383 AA5C include "data.asm";"D:\WORKAST\DEMON\data" -0001+ AA5C ;[]=========================================================================[] -0002+ AA5C ;[] Данные монитора-отладчика DemoN [] -0003+ AA5C ;[] v0.01 - последние изменения 10.10.2004 [] -0004+ AA5C ;[] v0.02 - последние изменения 11.03.2005 [] -0005+ AA5C ;[] v0.03 - последние изменения 05.02.2006 [] -0006+ AA5C ;[] v0.10 - последние изменения 10.09.2006 [] -0007+ AA5C ;[]=========================================================================[] -0008+ AA5C B0 SymbolNoPrint db #b0;"." ;символы < пробела -0009+ AA5D FF ClockOn db On ;признак вывода часов -0010+ AA5E 00 DemonScreen db 0 ;номер экрана отладчика -0011+ AA5F 00 OSScreen db 0 ;Номер экрана ОСи -0012+ AA60 00 OSGrafMode db 0 ;Графический режим оси -0013+ AA61 FF BufPage db 255 ;Номер страницы с оконным буфером -0014+ AA62 -0015+ AA62 0D 0A Hello db 13,10 -0016+ AA64 ; db "Версия откомпилирована специально для Василия Иванова!",13,10,10 -0017+ AA64 db "DemoN v" -0017+ AA64 44656D6F4E2076 -0018+ AA6B incbin "VERSION\major.bin" -0019+ AA6C 2E db "." -0020+ AA6D incbin "VERSION\minor.bin" -0021+ AA6F db " build " -0021+ AA6F 206275696C6420 -0022+ AA76 incbin "VERSION\build.bin" -0023+ AA7A db " (alpha) ",13,10 -0023+ AA7A 2028616C70686129203C4372656174656420627920416C706861205374756469 -0023+ AA9A 6F3E0D0A -0024+ AA9E db "Last edition " -0024+ AA9E 4C6173742065646974696F6E20 -0025+ AAAB incbin "VERSION\date.bin" -0026+ AAB1 db " (BLR " -0026+ AAB1 2028424C5220 -0027+ AAB7 incbin "VERSION\time.bin" -0028+ AABC 29 0D 0A db ")",13,10 -0029+ AABF db "FidoNet: Igor Zhadinets 2:454/5.18; " -0029+ AABF 4669646F4E65743A2049676F72205A686164696E65747320323A3435342F352E -0029+ AADF 31383B20 -0030+ AAE3 db "e-mail: igor_ast@tut.by",13,10,10,0 -0030+ AAE3 652D6D61696C3A2069676F725F617374407475742E62790D0A0A00 -0031+ AAFE Str: -0032+ AAFE .Load db "Load file ...",0x0D,0x0A,0 -0032+ AAFE 4C6F61642066696C65202E2E2E0D0A00 -0033+ AB0E 0D 0A 00 .DA db 0x0d,0x0A,0 -0034+ AB11 -0035+ AB11 PauseFlash equ 16 ;частота мигания прогр.курсора -0036+ AB11 -0037+ AB11 Color: -0038+ AB11 07 .Screen db 00000111b ;основной цвет экрана -0039+ AB12 03 .Border db 00000011b ;цвет рамки -0040+ AB13 02 .TextStrReg db 00000010b ;цвет регистровых пар -0041+ AB14 05 .TextStrWin db 00000101b ;цвет номеров окон -0042+ AB15 06 ._SP db 00000110b ;подсветка вершины стека -0043+ AB16 71 ._PC db 01110001b ;подсветка выполняемой стр. -0044+ AB17 0E .RezArea db 00001110b ;подсветка резидента -0045+ AB18 04 .TextStrLogo db 00000100b ;цвет лого программы -0046+ AB19 1D .Cursor db 00011101b ;цвет курсора-указателя -0047+ AB1A 3F .InLine db 00111111b ;цвет строки ввода -0048+ AB1B 31 .InLineEd db 00110001b ;цвет строки ввода при ред. -0049+ AB1C -0050+ AB1C 00 StackDebug ds 2 ;адрес стека отладчика -0051+ AB1E 00 BankDebug ds 1 ;номер банки отладчика -0052+ AB1F 00 BankOS ds 1 ;номер банки с OS -0053+ AB20 00 70 RezAdr dw 0x7000 ;адрес посадки резидента -0054+ AB22 00 StackDown ds 1 ;глубина стека -0055+ AB23 0A 80 StackDump dw 0x800A ;начало дампа стека -0056+ AB25 -0057+ AB25 Reg: ;значение регистровых пар -0058+ AB25 00 00 ._IX dw 0 -0059+ AB27 00 00 ._IY dw 0 -0060+ AB29 00 00 ._HL dw 0 -0061+ AB2B 00 00 ._DE dw 0 -0062+ AB2D 00 00 ._BC dw 0 -0063+ AB2F 00 00 ._AF dw 0 -0064+ AB31 00 00 ._HL_ dw 0 -0065+ AB33 00 00 ._DE_ dw 0 -0066+ AB35 00 00 ._BC_ dw 0 -0067+ AB37 00 00 ._AF_ dw 0 -0068+ AB39 00 00 ._IR dw 0 -0069+ AB3B FE 7F ._SP dw 0x7FFE -0070+ AB3D 00 00 ._PC dw 0 -0071+ AB3F -0072+ AB3F FF FF FF FF WinPage: db 0xFF,0xFF,0xFF,0xFF ;адреса подключенных страниц -0073+ AB43 -0074+ AB43 00 40 Dump1 dw 0x4000 ;адрес начала динамического дампа -0075+ AB45 Dump: ;адреса начала строк дампа -0076+ AB45 B8 9E dw InputLine.Buffer;0x4100 -0077+ AB47 C8 9E dw InputLine.Buffer+16;0x8100 -0078+ AB49 2C 9C dw PutCode.Buffer;0xC100 -0079+ AB4B 80 52 dw 0x5280 -0080+ AB4D 80 92 dw 0x9280 -0081+ AB4F 80 D2 dw 0xD280 -0082+ AB51 00 60 dw 0x6000 -0083+ AB53 00 A0 dw 0xA000 -0084+ AB55 -0085+ AB55 00 ListAdr: ds 40 ;буфер хранения адресов листинга -0086+ AB7D FF ListFormat: db -1 ;форматный вывод листинга -0087+ AB7E ;-1 - да; 0 - нет -0088+ AB7E -0089+ AB7E 00 DecHex db 0 ;0-HEX FF-DEC система -0090+ AB7F -0091+ AB7F ;======== Констатнты ====== -0092+ AB7F On equ 0xFF -0093+ AB7F Off equ 0 -0094+ AB7F Ins equ 0 -0095+ AB7F Ovr equ 0xFF -0096+ AB7F SysSymb equ 0x1B ;системный знакогенератор -0097+ AB7F -0098+ AB7F ;печать через п/п биоса -0099+ AB7F ifdef D_PRINTCH_BIOS -0100+ AB7F~ Demon.Bios_Win db 0 ;идентификатор окна биоса -0101+ AB7F~ MainWin db 80,32,0,0,00110000b,0,0,0 -0102+ AB7F~ ds 26,0 -0103+ AB7F endif -0104+ AB7F -0105+ AB7F ;-------------------------------------- -0106+ AB7F ;Диалоговое окно для пп выхода -0107+ AB7F ;-------------------------------------- -0108+ AB7F ExitDlg db 6,22,13,32,6,#40 -0108+ AB7F 06160D200640 -0109+ AB85 db "Confirmation",0 -0109+ AB85 436F6E6669726D6174696F6E00 -0110+ AB92 db " You really want to quit?" -0110+ AB92 2020596F75207265616C6C792077616E7420746F20717569743F -0111+ ABAC db 0x16,32,17,"OK Cancel",0 -0111+ ABAC 1620114F4B20202020202043616E63656C00 -0112+ ABBE 02 db 2 -0113+ ABBF 1D 11 08 02 db 29,17,8,2 ;Ok -0114+ ABC3 00 00 00 00 dw 0,0 -0115+ ABC7 27 11 08 02 db 39,17,8,2 ;Cancel -0116+ ABCB 00 00 1E 99 dw 0,Keyb.NoExit -0384 ABCF include "tabl.asm";"D:\WORKAST\DEMON\tabl" -0001+ ABCF ;[]=========================================================================[] -0002+ ABCF ;[] Таблицы дизассемблера монитора-отладчика DemoN [] -0003+ ABCF ;[] v0.01 - последние изменения 10.10.2004 [] -0004+ ABCF ;[] v0.02 - последние изменения 29.11.2004 [] -0005+ ABCF ;[] v0.03 - последние изменения 29.01.2006 [] -0006+ ABCF ;[]=========================================================================[] -0007+ ABCF Tabl00_3F: -0008+ ABCF dw M00,M01,M02,M03,M04,M05,M06,M07,M08,M09,M0A,M0B,M0C,M0D,M0E,M0F -0008+ ABCF 4FAC53AC5AAC64AC6BAC71AC77AC7DAC82AC8CAC96ACA0ACA7ACADACB3ACB9AC -0009+ ABEF dw M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M1A,M1B,M1C,M1D,M1E,M1F -0009+ ABEF BEACC4ACCBACD5ACDCACE2ACE8ACEEACF2ACF6AC00AD0AAD11AD17AD1DAD23AD -0010+ AC0F dw M20,M21,M22,M23,M24,M25,M26,M27,M28,M29,M2A,M2B,M2C,M2D,M2E,M2F -0010+ AC0F 27AD2EAD35AD3EAD45AD4BAD51AD57AD5BAD61AD6BAD74AD7BAD81AD87AD8DAD -0011+ AC2F dw M30,M31,M32,M33,M34,M35,M36,M37,M38,M39,M3A,M3B,M3C,M3D,M3E,M3F -0011+ AC2F 91AD98AD9FADA7ADAEADB7ADC0ADC9ADCDADD3ADDDADE5ADECADF2ADF8ADFEAD -0012+ AC4F -0013+ AC4F 4E 4F 50 00 M00 db "NOP",0 -0014+ AC53 M01 db "LD BC,",2 -0014+ AC53 4C442042432C02 -0015+ AC5A M02 db "LD (BC),A",0 -0015+ AC5A 4C4420284243292C4100 -0016+ AC64 M03 db "INC BC",0 -0016+ AC64 494E4320424300 -0017+ AC6B M04 db "INC B",0 -0017+ AC6B 494E43204200 -0018+ AC71 M05 db "DEC B",0 -0018+ AC71 444543204200 -0019+ AC77 M06 db "LD B,",1 -0019+ AC77 4C4420422C01 -0020+ AC7D 524C434100 M07 db "RLCA",0 -0021+ AC82 M08 db "EX AF,AF'",0 -0021+ AC82 45582041462C41462700 -0022+ AC8C M09 db "ADD HL,BC",0 -0022+ AC8C 41444420484C2C424300 -0023+ AC96 M0A db "LD A,(BC)",0 -0023+ AC96 4C4420412C2842432900 -0024+ ACA0 M0B db "DEC BC",0 -0024+ ACA0 44454320424300 -0025+ ACA7 M0C db "INC C",0 -0025+ ACA7 494E43204300 -0026+ ACAD M0D db "DEC C",0 -0026+ ACAD 444543204300 -0027+ ACB3 M0E db "LD C,",1 -0027+ ACB3 4C4420432C01 -0028+ ACB9 5252434100 M0F db "RRCA",0 -0029+ ACBE M10 db "DJNZ ",3 -0029+ ACBE 444A4E5A2003 -0030+ ACC4 M11 db "LD DE,",2 -0030+ ACC4 4C442044452C02 -0031+ ACCB M12 db "LD (DE),A",0 -0031+ ACCB 4C4420284445292C4100 -0032+ ACD5 M13 db "INC DE",0 -0032+ ACD5 494E4320444500 -0033+ ACDC M14 db "INC D",0 -0033+ ACDC 494E43204400 -0034+ ACE2 M15 db "DEC D",0 -0034+ ACE2 444543204400 -0035+ ACE8 M16 db "LD D,",1 -0035+ ACE8 4C4420442C01 -0036+ ACEE 52 4C 41 00 M17 db "RLA",0 -0037+ ACF2 4A 52 20 03 M18 db "JR ",3 -0038+ ACF6 M19 db "ADD HL,DE",0 -0038+ ACF6 41444420484C2C444500 -0039+ AD00 M1A db "LD A,(DE)",0 -0039+ AD00 4C4420412C2844452900 -0040+ AD0A M1B db "DEC DE",0 -0040+ AD0A 44454320444500 -0041+ AD11 M1C db "INC E",0 -0041+ AD11 494E43204500 -0042+ AD17 M1D db "DEC E",0 -0042+ AD17 444543204500 -0043+ AD1D M1E db "LD E,",1 -0043+ AD1D 4C4420452C01 -0044+ AD23 52 52 41 00 M1F db "RRA",0 -0045+ AD27 M20 db "JR NZ,",3 -0045+ AD27 4A52204E5A2C03 -0046+ AD2E M21 db "LD HL,",2 -0046+ AD2E 4C4420484C2C02 -0047+ AD35 M22 db "LD (),HL",5 -0047+ AD35 4C442028292C484C05 -0048+ AD3E M23 db "INC HL",0 -0048+ AD3E 494E4320484C00 -0049+ AD45 M24 db "INC H",0 -0049+ AD45 494E43204800 -0050+ AD4B M25 db "DEC H",0 -0050+ AD4B 444543204800 -0051+ AD51 M26 db "LD H,",1 -0051+ AD51 4C4420482C01 -0052+ AD57 44 41 41 00 M27 db "DAA",0 -0053+ AD5B M28 db "JR Z,",3 -0053+ AD5B 4A52205A2C03 -0054+ AD61 M29 db "ADD HL,HL",0 -0054+ AD61 41444420484C2C484C00 -0055+ AD6B M2A db "LD HL,()",5 -0055+ AD6B 4C4420484C2C282905 -0056+ AD74 M2B db "DEC HL",0 -0056+ AD74 44454320484C00 -0057+ AD7B M2C db "INC L",0 -0057+ AD7B 494E43204C00 -0058+ AD81 M2D db "DEC L",0 -0058+ AD81 444543204C00 -0059+ AD87 M2E db "LD L,",1 -0059+ AD87 4C44204C2C01 -0060+ AD8D 43 50 4C 00 M2F db "CPL",0 -0061+ AD91 M30 db "JR NC,",3 -0061+ AD91 4A52204E432C03 -0062+ AD98 M31 db "LD SP,",2 -0062+ AD98 4C442053502C02 -0063+ AD9F M32 db "LD (),A",5 -0063+ AD9F 4C442028292C4105 -0064+ ADA7 M33 db "INC SP",0 -0064+ ADA7 494E4320535000 -0065+ ADAE M34 db "INC (HL)",0 -0065+ ADAE 494E432028484C2900 -0066+ ADB7 M35 db "DEC (HL)",0 -0066+ ADB7 4445432028484C2900 -0067+ ADC0 M36 db "LD (HL),",1 -0067+ ADC0 4C442028484C292C01 -0068+ ADC9 53 43 46 00 M37 db "SCF",0 -0069+ ADCD M38 db "JR C,",3 -0069+ ADCD 4A5220432C03 -0070+ ADD3 M39 db "ADD HL,SP",0 -0070+ ADD3 41444420484C2C535000 -0071+ ADDD M3A db "LD A,()",5 -0071+ ADDD 4C4420412C282905 -0072+ ADE5 M3B db "DEC SP",0 -0072+ ADE5 44454320535000 -0073+ ADEC M3C db "INC A",0 -0073+ ADEC 494E43204100 -0074+ ADF2 M3D db "DEC A",0 -0074+ ADF2 444543204100 -0075+ ADF8 M3E db "LD A,",1 -0075+ ADF8 4C4420412C01 -0076+ ADFE 43 43 46 00 M3F db "CCF",0 -0077+ AE02 -0078+ AE02 TablC0_FF: -0079+ AE02 dw MC0,MC1,MC2,MC3,MC4,MC5,MC6,MC7,MC8,MC9,MCA,M00,MCC,MCD,MCE,MCF -0079+ AE02 82AE89AE90AE97AE9BAEA4AEACAEB3AEB9AEBFAEC3AE4FACC9AED1AED7AEDEAE -0080+ AE22 dw MD0,MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8,MD9,MDA,MDB,MDC,MDD,MDE,MDF -0080+ AE22 E4AEEBAEF2AEF9AE02AF0BAF13AF18AF20AF26AF2AAF30AF38AF40AF43AF4AAF -0081+ AE42 dw ME0,ME1,ME2,ME3,ME4,ME5,ME6,ME7,ME8,ME9,MEA,MEB,MEC,M00,MEE,MEF -0081+ AE42 52AF59AF60AF67AF72AF7BAF83AF88AF90AF97AF9FAFA6AFAFAF4FACB8AFBDAF -0082+ AE62 dw MF0,MF1,MF2,MF3,MF4,MF5,MF6,MF7,MF8,MF9,MFA,MFB,MFC,MFD,MFE,MFF -0082+ AE62 C5AFCBAFD2AFD8AFDBAFE3AFEBAFEFAFF7AFFDAF06B00CB00FB017B01AB01EB0 -0083+ AE82 -0084+ AE82 MC0 db "RET NZ",0 -0084+ AE82 524554204E5A00 -0085+ AE89 MC1 db "POP BC",0 -0085+ AE89 504F5020424300 -0086+ AE90 MC2 db "JP NZ,",2 -0086+ AE90 4A50204E5A2C02 -0087+ AE97 4A 50 20 02 MC3 db "JP ",2 -0088+ AE9B MC4 db "CALL NZ,",2 -0088+ AE9B 43414C4C204E5A2C02 -0089+ AEA4 MC5 db "PUSH BC",0 -0089+ AEA4 5055534820424300 -0090+ AEAC MC6 db "ADD A,",1 -0090+ AEAC 41444420412C01 -0091+ AEB3 MC7 db "RST 0",0 -0091+ AEB3 525354203000 -0092+ AEB9 MC8 db "RET Z",0 -0092+ AEB9 524554205A00 -0093+ AEBF 52 45 54 00 MC9 db "RET",0 -0094+ AEC3 MCA db "JP Z,",2 -0094+ AEC3 4A50205A2C02 -0095+ AEC9 MCC db "CALL Z,",2 -0095+ AEC9 43414C4C205A2C02 -0096+ AED1 MCD db "CALL ",2 -0096+ AED1 43414C4C2002 -0097+ AED7 MCE db "ADC A,",1 -0097+ AED7 41444320412C01 -0098+ AEDE MCF db "RST 8",0 -0098+ AEDE 525354203800 -0099+ AEE4 MD0 db "RET NC",0 -0099+ AEE4 524554204E4300 -0100+ AEEB MD1 db "POP DE",0 -0100+ AEEB 504F5020444500 -0101+ AEF2 MD2 db "JP NC,",2 -0101+ AEF2 4A50204E432C02 -0102+ AEF9 MD3 db "OUT (),A",4 -0102+ AEF9 4F55542028292C4104 -0103+ AF02 MD4 db "CALL NC,",2 -0103+ AF02 43414C4C204E432C02 -0104+ AF0B MD5 db "PUSH DE",0 -0104+ AF0B 5055534820444500 -0105+ AF13 5355422001 MD6 db "SUB ",1 -0106+ AF18 MD7 db "RST #10",0 -0106+ AF18 5253542023313000 -0107+ AF20 MD8 db "RET C",0 -0107+ AF20 524554204300 -0108+ AF26 45 58 58 00 MD9 db "EXX",0 -0109+ AF2A MDA db "JP C,",2 -0109+ AF2A 4A5020432C02 -0110+ AF30 MDB db "IN A,()",4 -0110+ AF30 494E20412C282904 -0111+ AF38 MDC db "CALL C,",2 -0111+ AF38 43414C4C20432C02 -0112+ AF40 44 44 00 MDD db "DD",0 -0113+ AF43 MDE db "SBC A,",1 -0113+ AF43 53424320412C01 -0114+ AF4A MDF db "RST #18",0 -0114+ AF4A 5253542023313800 -0115+ AF52 ME0 db "RET PO",0 -0115+ AF52 52455420504F00 -0116+ AF59 ME1 db "POP HL",0 -0116+ AF59 504F5020484C00 -0117+ AF60 ME2 db "JP PO,",2 -0117+ AF60 4A5020504F2C02 -0118+ AF67 ME3 db "EX (SP),HL",0 -0118+ AF67 455820285350292C484C00 -0119+ AF72 ME4 db "CALL PO,",2 -0119+ AF72 43414C4C20504F2C02 -0120+ AF7B ME5 db "PUSH HL",0 -0120+ AF7B 5055534820484C00 -0121+ AF83 414E442001 ME6 db "AND ",1 -0122+ AF88 ME7 db "RST #20",0 -0122+ AF88 5253542023323000 -0123+ AF90 ME8 db "RET PE",0 -0123+ AF90 52455420504500 -0124+ AF97 ME9 db "JP (HL)",0 -0124+ AF97 4A502028484C2900 -0125+ AF9F MEA db "JP PE,",2 -0125+ AF9F 4A502050452C02 -0126+ AFA6 MEB db "EX DE,HL",0 -0126+ AFA6 45582044452C484C00 -0127+ AFAF MEC db "CALL PE,",2 -0127+ AFAF 43414C4C2050452C02 -0128+ AFB8 584F522001 MEE db "XOR ",1 -0129+ AFBD MEF db "RST #28",0 -0129+ AFBD 5253542023323800 -0130+ AFC5 MF0 db "RET P",0 -0130+ AFC5 524554205000 -0131+ AFCB MF1 db "POP AF",0 -0131+ AFCB 504F5020414600 -0132+ AFD2 MF2 db "JP P,",2 -0132+ AFD2 4A5020502C02 -0133+ AFD8 44 49 00 MF3 db "DI",0 -0134+ AFDB MF4 db "CALL P,",2 -0134+ AFDB 43414C4C20502C02 -0135+ AFE3 MF5 db "PUSH AF",0 -0135+ AFE3 5055534820414600 -0136+ AFEB 4F 52 20 01 MF6 db "OR ",1 -0137+ AFEF MF7 db "RST #30",0 -0137+ AFEF 5253542023333000 -0138+ AFF7 MF8 db "RET M",0 -0138+ AFF7 524554204D00 -0139+ AFFD MF9 db "LD SP,HL",0 -0139+ AFFD 4C442053502C484C00 -0140+ B006 MFA db "JP M,",2 -0140+ B006 4A50204D2C02 -0141+ B00C 45 49 00 MFB db "EI",0 -0142+ B00F MFC db "CALL M,",2 -0142+ B00F 43414C4C204D2C02 -0143+ B017 46 44 00 MFD db "FD",0 -0144+ B01A 43 50 20 01 MFE db "CP ",1 -0145+ B01E MFF db "RST #38",0 -0145+ B01E 5253542023333800 -0146+ B026 -0147+ B026 48414C5400 MHALT db "HALT",0 -0148+ B02B -0149+ B02B TablM: -0150+ B02B dw M80,M88,M90,M98,MA0,MA8,MB0,MB8 -0150+ B02B 3BB042B049B04EB055B05AB05FB063B0 -0151+ B03B -0152+ B03B M80 db "ADD A,",0 -0152+ B03B 41444420412C00 -0153+ B042 M88 db "ADC A,",0 -0153+ B042 41444320412C00 -0154+ B049 5355422000 M90 db "SUB ",0 -0155+ B04E M98 db "SBC A,",0 -0155+ B04E 53424320412C00 -0156+ B055 414E442000 MA0 db "AND ",0 -0157+ B05A 584F522000 MA8 db "XOR ",0 -0158+ B05F 4F 52 20 00 MB0 db "OR ",0 -0159+ B063 43 50 20 00 MB8 db "CP ",0 -0160+ B067 -0161+ B067 CodeDDFD: -0162+ B067 db 0x09,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x29 -0162+ B067 091921222324252629 -0163+ B070 db 0x2A,0x2B,0x2C,0x2D,0x2E,0x34,0x35,0x36,0x39 -0163+ B070 2A2B2C2D2E34353639 -0164+ B079 db 0x44,0x45,0x46,0x4C,0x4D,0x4E,0x54,0x55,0x56 -0164+ B079 4445464C4D4E545556 -0165+ B082 db 0x5C,0x5D,0x5E,0x60,0x61,0x62,0x63,0x64,0x65 -0165+ B082 5C5D5E606162636465 -0166+ B08B db 0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E -0166+ B08B 666768696A6B6C6D6E -0167+ B094 db 0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x77,0x7C -0167+ B094 6F707172737475777C -0168+ B09D db 0x7D,0x7E,0x84,0x85,0x86,0x8C,0x8D,0x8E,0x94 -0168+ B09D 7D7E8485868C8D8E94 -0169+ B0A6 db 0x95,0x96,0x9C,0x9D,0x9E,0xA4,0xA5,0xA6,0xAC -0169+ B0A6 95969C9D9EA4A5A6AC -0170+ B0AF db 0xAD,0xAE,0xB4,0xB5,0xB6,0xBC,0xBD,0xBE,0xE1 -0170+ B0AF ADAEB4B5B6BCBDBEE1 -0171+ B0B8 E3 E5 E9 F9 db 0xE3,0xE5,0xE9,0xF9 -0172+ B0BC -0173+ B0BC TablDDFD: -0174+ B0BC dw DD09,DD19,DD21,DD22,DD23,DD24,DD25,DD26,DD29 -0174+ B0BC 66B170B17AB181B18AB191B198B19FB1A6B1 -0175+ B0CE dw DD2A,DD2B,DD2C,DD2D,DD2E,DD34,DD35,DD36,DD39 -0175+ B0CE B0B1B9B1C0B1C7B1CEB1D5B1DBB1E1B1E7B1 -0176+ B0E0 dw DD44,DD45,DD46,DD4C,DD4D,DD4E,DD54,DD55,DD56 -0176+ B0E0 F1B1F9B101B208B210B218B21FB227B22FB2 -0177+ B0F2 dw DD5C,DD5D,DD5E,DD60,DD61,DD62,DD63,DD64,DD65 -0177+ B0F2 36B23EB246B24DB255B25DB265B26DB276B2 -0178+ B104 dw DD66,DD67,DD68,DD69,DD6A,DD6B,DD6C,DD6D,DD6E -0178+ B104 7FB286B28EB296B29EB2A6B2AEB2B7B2C0B2 -0179+ B116 dw DD6F,DD70,DD71,DD72,DD73,DD74,DD75,DD77,DD7C -0179+ B116 C7B2CFB2D6B2DDB2E4B2EBB2F2B2F9B200B3 -0180+ B128 dw DD7D,DD7E,DD84,DD85,DD86,DD8C,DD8D,DD8E,DD94 -0180+ B128 08B310B317B320B329B331B33AB343B34BB3 -0181+ B13A dw DD95,DD96,DD9C,DD9D,DD9E,DDA4,DDA5,DDA6,DDAC -0181+ B13A 52B359B35FB368B371B379B380B387B38DB3 -0182+ B14C dw DDAD,DDAE,DDB4,DDB5,DDB6,DDBC,DDBD,DDBE,DDE1 -0182+ B14C 94B39BB3A1B3A7B3ADB3B2B3B8B3BEB3C3B3 -0183+ B15E dw DDE3,DDE5,DDE9,DDF9 -0183+ B15E CAB3D5B3DDB3E5B3 -0184+ B166 -0185+ B166 DD09 db "ADD Ix,BC",0 -0185+ B166 4144442049782C424300 -0186+ B170 DD19 db "ADD Ix,DE",0 -0186+ B170 4144442049782C444500 -0187+ B17A DD21 db "LD Ix,",2 -0187+ B17A 4C442049782C02 -0188+ B181 DD22 db "LD (),Ix",5 -0188+ B181 4C442028292C497805 -0189+ B18A DD23 db "INC Ix",0 -0189+ B18A 494E4320497800 -0190+ B191 DD24 db "INC Hx",0 -0190+ B191 494E4320487800 -0191+ B198 DD25 db "DEC Hx",0 -0191+ B198 44454320487800 -0192+ B19F DD26 db "LD Hx,",1 -0192+ B19F 4C442048782C01 -0193+ B1A6 DD29 db "ADD Ix,Ix",0 -0193+ B1A6 4144442049782C497800 -0194+ B1B0 DD2A db "LD Ix,()",5 -0194+ B1B0 4C442049782C282905 -0195+ B1B9 DD2B db "DEC Ix",0 -0195+ B1B9 44454320497800 -0196+ B1C0 DD2C db "INC Lx",0 -0196+ B1C0 494E43204C7800 -0197+ B1C7 DD2D db "DEC Lx",0 -0197+ B1C7 444543204C7800 -0198+ B1CE DD2E db "LD Lx,",1 -0198+ B1CE 4C44204C782C01 -0199+ B1D5 DD34 db "INC )",6 -0199+ B1D5 494E43202906 -0200+ B1DB DD35 db "DEC )",6 -0200+ B1DB 444543202906 -0201+ B1E1 DD36 db "LD ),",6 -0201+ B1E1 4C4420292C06 -0202+ B1E7 DD39 db "ADD Ix,SP",0 -0202+ B1E7 4144442049782C535000 -0203+ B1F1 DD44 db "LD B,Hx",0 -0203+ B1F1 4C4420422C487800 -0204+ B1F9 DD45 db "LD B,Lx",0 -0204+ B1F9 4C4420422C4C7800 -0205+ B201 DD46 db "LD B,)",6 -0205+ B201 4C4420422C2906 -0206+ B208 DD4C db "LD C,Hx",0 -0206+ B208 4C4420432C487800 -0207+ B210 DD4D db "LD C,Lx",0 -0207+ B210 4C4420432C4C7800 -0208+ B218 DD4E db "LD C,)",6 -0208+ B218 4C4420432C2906 -0209+ B21F DD54 db "LD D,Hx",0 -0209+ B21F 4C4420442C487800 -0210+ B227 DD55 db "LD D,Lx",0 -0210+ B227 4C4420442C4C7800 -0211+ B22F DD56 db "LD D,)",6 -0211+ B22F 4C4420442C2906 -0212+ B236 DD5C db "LD E,Hx",0 -0212+ B236 4C4420452C487800 -0213+ B23E DD5D db "LD E,Lx",0 -0213+ B23E 4C4420452C4C7800 -0214+ B246 DD5E db "LD E,)",6 -0214+ B246 4C4420452C2906 -0215+ B24D DD60 db "LD Hx,B",0 -0215+ B24D 4C442048782C4200 -0216+ B255 DD61 db "LD Hx,C",0 -0216+ B255 4C442048782C4300 -0217+ B25D DD62 db "LD Hx,D",0 -0217+ B25D 4C442048782C4400 -0218+ B265 DD63 db "LD Hx,E",0 -0218+ B265 4C442048782C4500 -0219+ B26D DD64 db "LD Hx,Hx",0 -0219+ B26D 4C442048782C487800 -0220+ B276 DD65 db "LD Hx,Lx",0 -0220+ B276 4C442048782C4C7800 -0221+ B27F DD66 db "LD H,)",6 -0221+ B27F 4C4420482C2906 -0222+ B286 DD67 db "LD Lx,A",0 -0222+ B286 4C44204C782C4100 -0223+ B28E DD68 db "LD Lx,B",0 -0223+ B28E 4C44204C782C4200 -0224+ B296 DD69 db "LD Lx,C",0 -0224+ B296 4C44204C782C4300 -0225+ B29E DD6A db "LD Lx,D",0 -0225+ B29E 4C44204C782C4400 -0226+ B2A6 DD6B db "LD Lx,E",0 -0226+ B2A6 4C44204C782C4500 -0227+ B2AE DD6C db "LD Lx,Hx",0 -0227+ B2AE 4C44204C782C487800 -0228+ B2B7 DD6D db "LD Lx,Lx",0 -0228+ B2B7 4C44204C782C4C7800 -0229+ B2C0 DD6E db "LD L,)",6 -0229+ B2C0 4C44204C2C2906 -0230+ B2C7 DD6F db "LD Lx,A",0 -0230+ B2C7 4C44204C782C4100 -0231+ B2CF DD70 db "LD ),B",6 -0231+ B2CF 4C4420292C4206 -0232+ B2D6 DD71 db "LD ),C",6 -0232+ B2D6 4C4420292C4306 -0233+ B2DD DD72 db "LD ),D",6 -0233+ B2DD 4C4420292C4406 -0234+ B2E4 DD73 db "LD ),E",6 -0234+ B2E4 4C4420292C4506 -0235+ B2EB DD74 db "LD ),H",6 -0235+ B2EB 4C4420292C4806 -0236+ B2F2 DD75 db "LD ),L",6 -0236+ B2F2 4C4420292C4C06 -0237+ B2F9 DD77 db "LD ),A",6 -0237+ B2F9 4C4420292C4106 -0238+ B300 DD7C db "LD A,Hx",0 -0238+ B300 4C4420412C487800 -0239+ B308 DD7D db "LD A,Lx",0 -0239+ B308 4C4420412C4C7800 -0240+ B310 DD7E db "LD A,)",6 -0240+ B310 4C4420412C2906 -0241+ B317 DD84 db "ADD A,Hx",0 -0241+ B317 41444420412C487800 -0242+ B320 DD85 db "ADD A,Lx",0 -0242+ B320 41444420412C4C7800 -0243+ B329 DD86 db "ADD A,)",6 -0243+ B329 41444420412C2906 -0244+ B331 DD8C db "ADC E,Hx",0 -0244+ B331 41444320452C487800 -0245+ B33A DD8D db "ADC E,Lx",0 -0245+ B33A 41444320452C4C7800 -0246+ B343 DD8E db "ADC E,)",6 -0246+ B343 41444320452C2906 -0247+ B34B DD94 db "SUB Hx",0 -0247+ B34B 53554220487800 -0248+ B352 DD95 db "SUB Lx",0 -0248+ B352 535542204C7800 -0249+ B359 DD96 db "SUB )",6 -0249+ B359 535542202906 -0250+ B35F DD9C db "SBC A,Hx",0 -0250+ B35F 53424320412C487800 -0251+ B368 DD9D db "SBC A,Lx",0 -0251+ B368 53424320412C4C7800 -0252+ B371 DD9E db "SBC A,)",6 -0252+ B371 53424320412C2906 -0253+ B379 DDA4 db "AND Hx",0 -0253+ B379 414E4420487800 -0254+ B380 DDA5 db "AND Lx",0 -0254+ B380 414E44204C7800 -0255+ B387 DDA6 db "AND )",6 -0255+ B387 414E44202906 -0256+ B38D DDAC db "XOR Hx",0 -0256+ B38D 584F5220487800 -0257+ B394 DDAD db "XOR Lx",0 -0257+ B394 584F52204C7800 -0258+ B39B DDAE db "XOR )",6 -0258+ B39B 584F52202906 -0259+ B3A1 DDB4 db "OR Hx",0 -0259+ B3A1 4F5220487800 -0260+ B3A7 DDB5 db "OR Lx",0 -0260+ B3A7 4F52204C7800 -0261+ B3AD 4F52202906 DDB6 db "OR )",6 -0262+ B3B2 DDBC db "CP Hx",0 -0262+ B3B2 435020487800 -0263+ B3B8 DDBD db "CP Lx",0 -0263+ B3B8 4350204C7800 -0264+ B3BE 4350202906 DDBE db "CP )",6 -0265+ B3C3 DDE1 db "POP Ix",0 -0265+ B3C3 504F5020497800 -0266+ B3CA DDE3 db "EX (SP),Ix",0 -0266+ B3CA 455820285350292C497800 -0267+ B3D5 DDE5 db "PUSH Ix",0 -0267+ B3D5 5055534820497800 -0268+ B3DD DDE9 db "JP (Ix)",0 -0268+ B3DD 4A50202849782900 -0269+ B3E5 DDF9 db "LD SP,Ix",0 -0269+ B3E5 4C442053502C497800 -0270+ B3EE -0271+ B3EE TablCB: -0272+ B3EE dw CB00,CB08,CB10,CB18,CB20,CB28,CB30,CB38 -0272+ B3EE FEB302B406B409B40CB410B414B418B4 -0273+ B3FE -0274+ B3FE 52 4C 43 20 CB00 db "RLC " -0275+ B402 52 52 43 20 CB08 db "RRC " -0276+ B406 52 4C 20 CB10 db "RL " -0277+ B409 52 52 20 CB18 db "RR " -0278+ B40C 53 4C 41 20 CB20 db "SLA " -0279+ B410 53 52 41 20 CB28 db "SRA " -0280+ B414 53 4C 49 20 CB30 db "SLI " -0281+ B418 53 52 4C 20 CB38 db "SRL " -0282+ B41C 42 49 54 20 CB40 db "BIT " -0283+ B420 52 45 53 20 CB80 db "RES " -0284+ B424 53 45 54 20 CBC0 db "SET " -0285+ B428 -0286+ B428 TablED: -0287+ B428 dw ED40,ED41,ED42,ED43,ED44,ED45,ED46,ED47 -0287+ B428 E4B4EDB4F7B401B50AB50EB513B518B5 -0288+ B438 dw ED48,ED49,ED4A,ED4B,ED44,ED4D,ED4E,ED4F -0288+ B438 1FB528B532B53CB50AB545B54AB551B5 -0289+ B448 dw ED50,ED51,ED52,ED53,ED44,ED45,ED56,ED57 -0289+ B448 58B561B56BB575B50AB50EB57EB583B5 -0290+ B458 dw ED58,ED59,ED5A,ED5B,ED44,ED4D,ED5E,ED5F -0290+ B458 8AB593B59DB5A7B50AB545B5B0B5B5B5 -0291+ B468 dw ED60,ED61,ED62,ED63,ED44,ED45,ED46,ED67 -0291+ B468 BCB5C5B5CFB5D9B50AB50EB513B5E2B5 -0292+ B478 dw ED68,ED69,ED6A,ED6B,ED44,ED4D,ED4E,ED6F -0292+ B478 E6B5EFB5F9B503B60AB545B54AB50CB6 -0293+ B488 dw ED70,ED71,ED72,ED73,ED44,ED45,ED56,ED00 -0293+ B488 10B619B623B62DB60AB50EB57EB5DEB4 -0294+ B498 dw ED78,ED79,ED7A,ED7B,ED44,ED4D,ED5E -0294+ B498 36B63FB649B653B60AB545B5B0B5 -0295+ B4A6 dw EDA0,EDA1,EDA2,EDA3,ED00,ED00,ED00,ED00 -0295+ B4A6 5CB660B664B668B6DEB4DEB4DEB4DEB4 -0296+ B4B6 dw EDA8,EDA9,EDAA,EDAB,ED00,ED00,ED00,ED00 -0296+ B4B6 6DB671B675B679B6DEB4DEB4DEB4DEB4 -0297+ B4C6 dw EDB0,EDB1,EDB2,EDB3,ED00,ED00,ED00,ED00 -0297+ B4C6 7EB683B688B68DB6DEB4DEB4DEB4DEB4 -0298+ B4D6 dw EDB8,EDB9,EDBA,EDBB -0298+ B4D6 92B697B69CB6A1B6 -0299+ B4DE -0300+ B4DE ED00 db "NOP *",0 -0300+ B4DE 4E4F50202A00 -0301+ B4E4 ED40 db "IN B,(C)",0 -0301+ B4E4 494E20422C28432900 -0302+ B4ED ED41 db "OUT (C),B",0 -0302+ B4ED 4F5554202843292C4200 -0303+ B4F7 ED42 db "SBC HL,BC",0 -0303+ B4F7 53424320484C2C424300 -0304+ B501 ED43 db "LD (),BC",5 -0304+ B501 4C442028292C424305 -0305+ B50A 4E 45 47 00 ED44 db "NEG",0 -0306+ B50E 5245544E00 ED45 db "RETN",0 -0307+ B513 494D203000 ED46 db "IM 0",0 -0308+ B518 ED47 db "LD I,A",0 -0308+ B518 4C4420492C4100 -0309+ B51F ED48 db "IN C,(C)",0 -0309+ B51F 494E20432C28432900 -0310+ B528 ED49 db "OUT (C),C",0 -0310+ B528 4F5554202843292C4300 -0311+ B532 ED4A db "ADC HL,BC",0 -0311+ B532 41444320484C2C424300 -0312+ B53C ED4B db "LD BC,()",5 -0312+ B53C 4C442042432C282905 -0313+ B545 5245544900 ED4D db "RETI",0 -0314+ B54A ED4E db "IM 0 *",0 -0314+ B54A 494D2030202A00 -0315+ B551 ED4F db "LD R,A",0 -0315+ B551 4C4420522C4100 -0316+ B558 ED50 db "IN D,(C)",0 -0316+ B558 494E20442C28432900 -0317+ B561 ED51 db "OUT (C),D",0 -0317+ B561 4F5554202843292C4400 -0318+ B56B ED52 db "SBC HL,DE",0 -0318+ B56B 53424320484C2C444500 -0319+ B575 ED53 db "LD (),DE",5 -0319+ B575 4C442028292C444505 -0320+ B57E 494D203100 ED56 db "IM 1",0 -0321+ B583 ED57 db "LD A,I",0 -0321+ B583 4C4420412C4900 -0322+ B58A ED58 db "IN E,(C)",0 -0322+ B58A 494E20452C28432900 -0323+ B593 ED59 db "OUT (C),E",0 -0323+ B593 4F5554202843292C4500 -0324+ B59D ED5A db "ADC HL,DE",0 -0324+ B59D 41444320484C2C444500 -0325+ B5A7 ED5B db "LD DE,()",5 -0325+ B5A7 4C442044452C282905 -0326+ B5B0 494D203200 ED5E db "IM 2",0 -0327+ B5B5 ED5F db "LD A,R",0 -0327+ B5B5 4C4420412C5200 -0328+ B5BC ED60 db "IN H,(C)",0 -0328+ B5BC 494E20482C28432900 -0329+ B5C5 ED61 db "OUT (C),H",0 -0329+ B5C5 4F5554202843292C4800 -0330+ B5CF ED62 db "SBC HL,HL",0 -0330+ B5CF 53424320484C2C484C00 -0331+ B5D9 ED63 db "LD (),HL",5 -0331+ B5D9 4C442028292C484C05 -0332+ B5E2 52 52 44 00 ED67 db "RRD",0 -0333+ B5E6 ED68 db "IN L,(C)",0 -0333+ B5E6 494E204C2C28432900 -0334+ B5EF ED69 db "OUT (C),L",0 -0334+ B5EF 4F5554202843292C4C00 -0335+ B5F9 ED6A db "ADC HL,HL",0 -0335+ B5F9 41444320484C2C484C00 -0336+ B603 ED6B db "LD HL,()",5 -0336+ B603 4C4420484C2C282905 -0337+ B60C 52 4C 44 00 ED6F db "RLD",0 -0338+ B610 ED70 db "IN F,(C)",0 -0338+ B610 494E20462C28432900 -0339+ B619 ED71 db "OUT (C),*",0 -0339+ B619 4F5554202843292C2A00 -0340+ B623 ED72 db "SBC HL,SP",0 -0340+ B623 53424320484C2C535000 -0341+ B62D ED73 db "LD (),SP",5 -0341+ B62D 4C442028292C535005 -0342+ B636 ED78 db "IN A,(C)",0 -0342+ B636 494E20412C28432900 -0343+ B63F ED79 db "OUT (C),A",0 -0343+ B63F 4F5554202843292C4100 -0344+ B649 ED7A db "ADC HL,SP",0 -0344+ B649 41444320484C2C535000 -0345+ B653 ED7B db "LD SP,()",5 -0345+ B653 4C442053502C282905 -0346+ B65C 4C 44 49 00 EDA0 db "LDI",0 -0347+ B660 43 50 49 00 EDA1 db "CPI",0 -0348+ B664 49 4E 49 00 EDA2 db "INI",0 -0349+ B668 4F55544900 EDA3 db "OUTI",0 -0350+ B66D 4C 44 44 00 EDA8 db "LDD",0 -0351+ B671 43 50 44 00 EDA9 db "CPD",0 -0352+ B675 49 4E 44 00 EDAA db "IND",0 -0353+ B679 4F55544400 EDAB db "OUTD",0 -0354+ B67E 4C44495200 EDB0 db "LDIR",0 -0355+ B683 4350495200 EDB1 db "CPIR",0 -0356+ B688 494E495200 EDB2 db "INIR",0 -0357+ B68D 4F54495200 EDB3 db "OTIR",0 -0358+ B692 4C44445200 EDB8 db "LDDR",0 -0359+ B697 4350445200 EDB9 db "CPDR",0 -0360+ B69C 494E445200 EDBA db "INDR",0 -0361+ B6A1 4F54445200 EDBB db "OTDR",0 -0362+ B6A6 -0363+ B6A6 -0385 B6A6 include "loadbin.asm" -0001+ B6A6 DD 21 F3 B7 LoadBinDialog ld ix,.LoadBinWnd -0002+ B6AA CD D5 B9 call DialogWindow -0003+ B6AD C9 ret -0004+ B6AE .LoadBinEditFN ;ld hl,.LoadBinFileName -0005+ B6AE ;ld c,20 -0006+ B6AE ;call InputLine.ToBuffer -0007+ B6AE 21 24 0F .L003 ld hl,#0f24 -0008+ B6B1 06 14 ld b,20 -0009+ B6B3 CD 9A 9C call InputLine1 -0010+ B6B6 38 EE jr c,LoadBinDialog -0011+ B6B8 79 ld a,c -0012+ B6B9 A7 and a -0013+ B6BA 28 F2 jr z,.L003 -0014+ B6BC 32 EE B7 ld (.filenamelen),a -0015+ B6BF C5 push bc -0016+ B6C0 11 12 B8 ld de,.LoadBinFileName -0017+ B6C3 CD 98 9E call InputLine.FromBuffer -0018+ B6C6 C1 pop bc -0019+ B6C7 3E 14 ld a,20 -0020+ B6C9 91 sub c -0021+ B6CA 28 07 jr z,.L001 -0022+ B6CC 47 ld b,a -0023+ B6CD 3E 20 ld a,32 -0024+ B6CF 12 .L002 ld (de),a -0025+ B6D0 13 inc de -0026+ B6D1 10 FC djnz .L002 -0027+ B6D3 18 D1 .L001 jr LoadBinDialog -0028+ B6D5 -0029+ B6D5 21 21 10 .EditAddres ld hl,#1021 -0030+ B6D8 06 05 ld b,5 -0031+ B6DA CD 9A 9C call InputLine1 -0032+ B6DD 38 C7 jr c,LoadBinDialog -0033+ B6DF C5 push bc -0034+ B6E0 CD 30 9C call PutAdres -0035+ B6E3 C1 pop bc -0036+ B6E4 38 EF jr c,.EditAddres -0037+ B6E6 22 EF B7 ld (.LoadToAdr),hl -0038+ B6E9 11 2F B8 ld de,.AdresTxt -0039+ B6EC CD 98 9E call InputLine.FromBuffer -0040+ B6EF 18 B5 jr LoadBinDialog -0041+ B6F1 21 31 10 .EditLenght ld hl,#1031 -0042+ B6F4 06 05 ld b,5 -0043+ B6F6 CD 9A 9C call InputLine1 -0044+ B6F9 38 AB jr c,LoadBinDialog -0045+ B6FB C5 push bc -0046+ B6FC CD 30 9C call PutAdres -0047+ B6FF C1 pop bc -0048+ B700 38 EF jr c,.EditLenght -0049+ B702 22 F1 B7 ld (.LoadLen),hl -0050+ B705 11 3F B8 ld de,.LenTxt -0051+ B708 CD 98 9E call InputLine.FromBuffer -0052+ B70B 18 99 jr LoadBinDialog -0053+ B70D .LoadBIN -0054+ B70D AF xor a -0055+ B70E 32 5D AA ld (ClockOn),a -0056+ B711 0E 11 ld c,Dss.Open -0057+ B713 21 12 B8 ld hl,.LoadBinFileName -0058+ B716 E5 push hl -0059+ B717 3A EE B7 ld a,(.filenamelen) -0060+ B71A 16 00 ld d,0 -0061+ B71C 5F ld e,a -0062+ B71D 19 add hl,de -0063+ B71E 22 2B B7 ld (.restadr+1),hl -0064+ B721 36 00 ld (hl),0 -0065+ B723 E1 pop hl -0066+ B724 3E 01 ld a,1 -0067+ B726 D7 rst DssRst -0068+ B727 DA CF B7 jp c,.Err1 -0069+ B72A 21 00 00 .restadr ld hl,0 -0070+ B72D 36 20 ld (hl),32 -0071+ B72F 32 ED B7 ld (.FMid),a -0072+ B732 2A EF B7 ld hl,(.LoadToAdr) -0073+ B735 3E 01 ld a,1 ;рфЁхё т юсырёЄш #0000-7fff? -0074+ B737 CB 7C bit 7,h -0075+ B739 28 08 jr z,.adr0000 -0076+ B73B 3C inc a ;#8000-#bfff? -0077+ B73C CB 74 bit 6,h -0078+ B73E 28 08 jr z,.adr -0079+ B740 3C inc a ;#c000-ffff !!! -0080+ B741 18 05 jr .adr -0081+ B743 CB 74 .adr0000 bit 6,h -0082+ B745 20 01 jr nz,.adr -0083+ B747 97 sub a -0084+ B748 32 EC B7 .adr ld (.bank),a -0085+ B74B CB F4 set 6,h ;рфЁхё чруЁєчъш =>#4XXX -0086+ B74D CB BC res 7,h -0087+ B74F 22 7D B7 ld (.LoadFirst+4),hl -0088+ B752 E5 push hl -0089+ B753 21 00 00 ld hl,0 ;╙чэрхь фышэє Їрщыр -0090+ B756 DD 21 00 00 ld ix,0 -0091+ B75A 06 02 ld b,2 -0092+ B75C 0E 15 ld c,Dss.Move_FP -0093+ B75E D7 rst DssRst -0094+ B75F 22 F1 B7 ld (.LoadLen),HL -0095+ B762 22 A5 B7 ld (.LoadEnd+1),hl -0096+ B765 E1 pop hl -0097+ B766 A7 .Load00 and a -0098+ B767 EB ex hl,de -0099+ B768 11 00 80 ld de,#8000 -0100+ B76B ED 52 sbc hl,de -0101+ B76D 22 7A B7 ld (.LoadFirst+1),hl -0102+ B770 ED 5B A5 B7 ld de,(.LoadEnd+1) -0103+ B774 A7 and a -0104+ B775 ED 52 sbc hl,de -0105+ B777 38 2B jr c,.LoadEnd -0106+ B779 11 00 00 .LoadFirst ld de,0 ;ъюышўхёЄтю срщЄ, ъюЄюЁ√х эрфю ёўшЄрЄ№ т яхЁтє■ срэъє -0107+ B77C 21 00 00 ld hl,0 ;рфЁхё, ъєфр ёърўрЄ№ -0108+ B77F CD DA B7 .LoadNext call .Bank1 -0109+ B782 0E 13 ld c,Dss.Read -0110+ B784 3A ED B7 ld a,(.FMid) -0111+ B787 D7 rst DssRst -0112+ B788 38 3D jr c,.Err -0113+ B78A 21 EC B7 ld hl,.bank -0114+ B78D 34 inc (hl) -0115+ B78E 2A A5 B7 ld hl,(.LoadEnd+1) -0116+ B791 11 00 40 ld de,#4000 -0117+ B794 A7 and a -0118+ B795 ED 52 sbc hl,de -0119+ B797 38 0B jr c,.LoadEnd ;╬ёЄрыюё№ ьхэ№°х 16╩с -0120+ B799 22 A5 B7 ld (.LoadEnd+1),hl -0121+ B79C 21 00 40 ld hl,#4000 -0122+ B79F 11 00 40 ld de,#4000 -0123+ B7A2 18 DB jr .LoadNext -0124+ B7A4 11 00 00 .LoadEnd ld de,0 ;ъюышўхёЄтю срщЄ, ъюЄюЁ√х эхюсїюфшью фюўшЄрЄ№ -0125+ B7A7 CD DA B7 call .Bank1 -0126+ B7AA 21 00 40 ld hl,#4000 -0127+ B7AD 3A ED B7 ld a,(.FMid) -0128+ B7B0 0E 13 ld c,Dss.Read -0129+ B7B2 D7 rst DssRst -0130+ B7B3 38 12 jr c,.Err -0131+ B7B5 3A ED B7 ld a,(.FMid) -0132+ B7B8 0E 12 ld c,Dss.Close -0133+ B7BA D7 rst DssRst -0134+ B7BB -0135+ B7BB 2A EF B7 ld hl,(.LoadToAdr) -0136+ B7BE 22 55 AB ld (ListAdr),hl -0137+ B7C1 3A 40 AB ld a,(WinPage+1) -0138+ B7C4 D3 A2 out (EmmWin.P1),a -0139+ B7C6 C9 ret -0140+ B7C7 F5 .Err push af -0141+ B7C8 3A ED B7 ld a,(.FMid) -0142+ B7CB 0E 12 ld c,Dss.Close -0143+ B7CD D7 rst DssRst -0144+ B7CE F1 pop af -0145+ B7CF FB .Err1 ei -0146+ B7D0 CD 12 95 call ErDss -0147+ B7D3 0E 5C ld c,Dss.PChars ;т√тюф ЄхъёЄр ю°шсъш ш юцшфрэш  any key -0148+ B7D5 D7 rst DssRst -0149+ B7D6 0E 30 ld c,Dss.WaitKey -0150+ B7D8 D7 rst DssRst -0151+ B7D9 C9 ret -0152+ B7DA -0153+ B7DA E5 .Bank1 push hl -0154+ B7DB D5 push de -0155+ B7DC 3A EC B7 ld a,(.bank) -0156+ B7DF 6F ld l,a -0157+ B7E0 26 00 ld h,0 -0158+ B7E2 11 3F AB ld de,WinPage -0159+ B7E5 19 add hl,de -0160+ B7E6 7E ld a,(hl) -0161+ B7E7 D3 A2 out (EmmWin.P1),a -0162+ B7E9 D1 pop de -0163+ B7EA E1 pop hl -0164+ B7EB C9 ret -0165+ B7EC -0166+ B7EC -0167+ B7EC -0168+ B7EC 00 .bank db 0 -0169+ B7ED 00 .FMid db 0 -0170+ B7EE 00 .filenamelen db 0 -0171+ B7EF 00 40 .LoadToAdr dw #4000 -0172+ B7F1 00 10 .LoadLen dw #1000 -0173+ B7F3 .LoadBinWnd db 2,23,13,36,6,7 -0173+ B7F3 02170D240607 -0174+ B7F9 db "Load BIN-file",0 -0174+ B7F9 4C6F61642042494E2D66696C6500 -0175+ B807 db "Filename: " -0175+ B807 46696C656E616D653A2020 -0176+ B812 20 .LoadBinFileName ds 20,32 -0177+ B826 0D db 0X0D -0178+ B827 db "Addres: " -0178+ B827 4164647265733A20 -0179+ B82F .AdresTxt db "#4000 Lenght: " -0179+ B82F 23343030302020204C656E6768743A20 -0180+ B83F 2331303030 .LenTxt db "#1000" -0181+ B844 db 0x16,10+23,4+13,"OK Cancel",0 -0181+ B844 1621114F4B2020202020202043616E63656C00 -0182+ B857 05 db 5 -0183+ B858 23 0F 16 02 db 35,15,22,2 ;Filename -0184+ B85C 00 00 AE B6 dw 0,.LoadBinEditFN -0185+ B860 20 10 07 02 db 32,16,7,2 ;Addres -0186+ B864 00 00 D5 B6 dw 0,.EditAddres -0187+ B868 30 10 07 02 db 48,16,7,2 ;Lenght -0188+ B86C 00 00 F1 B6 dw 0,.EditLenght -0189+ B870 1E 11 08 02 db 30,17,8,2 ;OK -0190+ B874 00 00 0D B7 dw 0,.LoadBIN -0191+ B878 29 11 08 02 db 41,17,8,2 ;Cancel -0192+ B87C 00 00 00 00 dw 0,0 -0386 B880 include "windows.asm" -0001+ B880 -0002+ B880 ;IX - WINDOW DESCRIPTOR -0003+ B880 ;+0 - FLAG: -0004+ B880 ; BITS: 0 - STANDART WINDOW -0005+ B880 ; 1 - 0 - WITHOUT HEADER / 1 - WITH HEADER -0006+ B880 ; 2 - 0 - ORDINARY FRAME / 1 - DOUBLE FRAME -0007+ B880 ;+1 - X COORD -0008+ B880 ;+2 - Y COORD -0009+ B880 ;+3 - LENGHT -0010+ B880 ;+4 - HEIGHT -0011+ B880 ;+5 - ATTR -0012+ B880 -0013+ B880 -0014+ B880 DD CB 00 46 Windows BIT 0,(IX+0) -0015+ B884 28 13 JR Z,NO_STAND_WIN -0016+ B886 DD 7E 01 LD A,(IX+1) -0017+ B889 11 FC FF LD DE,-4 -0018+ B88C DD 19 ADD IX,DE -0019+ B88E DD E5 PUSH IX -0020+ B890 DD 21 50 BA LD IX,STANDART -0021+ B894 DD 77 05 LD (IX+5),A -0022+ B897 18 02 JR STAND_WIN -0023+ B899 NO_STAND_WIN -0024+ B899 DD E5 PUSH IX -0025+ B89B STAND_WIN -0026+ B89B CD 09 B9 CALL Rectang -0027+ B89E CD 2E B9 CALL Frame -0028+ B8A1 DD CB 00 4E BIT 1,(IX+0) -0029+ B8A5 C4 EE B8 CALL NZ,WinHeader -0030+ B8A8 E1 POP HL -0031+ B8A9 ; PUSH HL -0032+ B8A9 11 06 00 LD DE,6 -0033+ B8AC 19 ADD HL,DE -0034+ B8AD DD CB 00 4E bit 1,(ix+0) -0035+ B8B1 DD 7E 05 ld a,(IX+5) -0036+ B8B4 28 23 jr z,WinNoHeader -0037+ B8B6 0F RRCA -0038+ B8B7 0F RRCA -0039+ B8B8 0F RRCA -0040+ B8B9 0F RRCA -0041+ B8BA E6 7F AND #7F -0042+ B8BC 32 5C 8E ld (PrnStrColor.L1+5),a -0043+ B8BF E5 push hl -0044+ B8C0 CD CC B9 call MenuItemLen -0045+ B8C3 DD 7E 03 ld a,(ix+3) -0046+ B8C6 98 sbc a,b -0047+ B8C7 DD 5E 01 ld e,(ix+1) -0048+ B8CA A7 and a -0049+ B8CB 1F rra -0050+ B8CC 83 add a,e -0051+ B8CD 5F ld e,a -0052+ B8CE DD 56 02 ld d,(ix+2) -0053+ B8D1 E1 pop hl -0054+ B8D2 CD 32 8E CALL PrnStrColor -0055+ B8D5 23 inc hl -0056+ B8D6 DD 7E 05 ld a,(IX+5) -0057+ B8D9 WinNoHeader -0058+ B8D9 32 5C 8E ld (PrnStrColor.L1+5),a -0059+ B8DC DD 56 02 ld d,(ix+2) ;╩ююЁфшэрЄ√ т юъэх -0060+ B8DF DD 5E 01 ld e,(ix+1) -0061+ B8E2 14 inc d -0062+ B8E3 14 inc d -0063+ B8E4 1C inc e -0064+ B8E5 1C inc e -0065+ B8E6 7B ld a,e -0066+ B8E7 32 66 8E ld (PrtXCoord),a -0067+ B8EA ; LD (WINDOW_TXT),HL -0068+ B8EA CD 32 8E CALL PrnStrColor -0069+ B8ED ; EX (DE),HL -0070+ B8ED C9 RET -0071+ B8EE -0072+ B8EE ;╨шёютрэшх чруюыютър юъэр -0073+ B8EE WinHeader -0074+ B8EE DD 5E 01 LD E,(IX+1) -0075+ B8F1 DD 56 02 LD D,(IX+2) -0076+ B8F4 DD 6E 03 LD L,(IX+3) -0077+ B8F7 26 01 LD H,1 -0078+ B8F9 DD 7E 05 LD A,(IX+5) -0079+ B8FC 0F RRCA -0080+ B8FD 0F RRCA -0081+ B8FE 0F RRCA -0082+ B8FF 0F RRCA -0083+ B900 E6 7F AND #7F -0084+ B902 47 LD B,A -0085+ B903 3E 20 LD A,#20 -0086+ B905 CD 1E B9 CALL FillBox -0087+ B908 C9 RET -0088+ B909 -0089+ B909 ;╧ЁюЎхфєЁр юётюсюцфхэш  яЁ ьюєуюы№эющ яыю∙рфш юъэр -0090+ B909 ;═р тїюф: IX - рфЁхё юяшёрЄхы  -0091+ B909 DD 5E 01 Rectang LD E,(IX+1) -0092+ B90C DD 56 02 LD D,(IX+2) -0093+ B90F DD 66 04 LD H,(IX+4) -0094+ B912 DD 6E 03 LD L,(IX+3) -0095+ B915 DD 46 05 LD B,(IX+5) -0096+ B918 3E 20 LD A,#20 -0097+ B91A CD 1E B9 CALL FillBox -0098+ B91D C9 RET -0099+ B91E -0100+ B91E E5 FillBox PUSH HL -0101+ B91F D5 PUSH DE -0102+ B920 0E 58 FillB1 LD C,Dss.WrChar -0103+ B922 D7 RST DssRst -0104+ B923 1C INC E -0105+ B924 2D DEC L -0106+ B925 20 F9 JR NZ,FillB1 -0107+ B927 D1 POP DE -0108+ B928 E1 POP HL -0109+ B929 14 INC D -0110+ B92A 25 DEC H -0111+ B92B 20 F1 JR NZ,FillBox -0112+ B92D C9 RET -0113+ B92E -0114+ B92E -0115+ B92E 21 56 BA Frame LD HL,FrameType1 -0116+ B931 DD CB 00 56 BIT 2,(IX+0) ;windows type flag -0117+ B935 28 03 JR Z,Frame1 -0118+ B937 21 5C BA LD HL,FrameType2 -0119+ B93A DD 56 02 Frame1 LD D,(IX+2) -0120+ B93D DD 5E 01 LD E,(IX+1) -0121+ B940 DD 46 05 LD B,(IX+5) -0122+ B943 D5 PUSH DE -0123+ B944 E5 PUSH HL -0124+ B945 ; PUSH BC -0125+ B945 7E LD A,(HL) -0126+ B946 0E 58 LD C,Dss.WrChar -0127+ B948 D7 RST DssRst -0128+ B949 ; POP BC -0129+ B949 E1 POP HL -0130+ B94A D1 POP DE -0131+ B94B DD 7E 03 LD A,(IX+3) -0132+ B94E 3D DEC A -0133+ B94F 83 ADD A,E -0134+ B950 5F LD E,A -0135+ B951 23 INC HL -0136+ B952 7E LD A,(HL) -0137+ B953 0E 58 LD C,Dss.WrChar -0138+ B955 D5 PUSH DE -0139+ B956 E5 PUSH HL -0140+ B957 D7 RST DssRst -0141+ B958 E1 POP HL -0142+ B959 D1 POP DE -0143+ B95A DD 7E 04 LD A,(IX+4) -0144+ B95D 3D DEC A -0145+ B95E 82 ADD A,D -0146+ B95F 57 LD D,A -0147+ B960 23 INC HL -0148+ B961 7E LD A,(HL) -0149+ B962 D5 PUSH DE -0150+ B963 E5 PUSH HL -0151+ B964 0E 58 LD C,Dss.WrChar -0152+ B966 D7 RST DssRst -0153+ B967 E1 POP HL -0154+ B968 D1 POP DE -0155+ B969 DD 5E 01 LD E,(IX+1) -0156+ B96C 23 INC HL -0157+ B96D 7E LD A,(HL) -0158+ B96E 0E 58 LD C,Dss.WrChar -0159+ B970 D7 RST DssRst -0160+ B971 ;HORIZONTAL LINES -0161+ B971 23 INC HL -0162+ B972 7E LD A,(HL) -0163+ B973 32 93 B9 LD (FramHor),A -0164+ B976 23 INC HL -0165+ B977 E5 PUSH HL -0166+ B978 DD 66 02 LD H,(IX+2) -0167+ B97B DD 7E 04 LD A,(IX+4) -0168+ B97E 3D DEC A -0169+ B97F 84 ADD A,H -0170+ B980 6F LD L,A -0171+ B981 DD 7E 03 LD A,(IX+3) -0172+ B984 D6 02 SUB 2 -0173+ B986 0E 58 LD C,Dss.WrChar -0174+ B988 DD 5E 01 LD E,(IX+1) -0175+ B98B 1C INC E -0176+ B98C DD 46 05 LD B,(IX+5) -0177+ B98F F5 FramHl1 PUSH AF -0178+ B990 E5 PUSH HL -0179+ B991 54 LD D,H -0180+ B992 3E 00 LD A,0 -0181+ B994 FramHor EQU $-1 -0182+ B994 F5 PUSH AF -0183+ B995 D7 RST DssRst -0184+ B996 F1 POP AF -0185+ B997 55 LD D,L -0186+ B998 D7 RST DssRst -0187+ B999 E1 POP HL -0188+ B99A F1 POP AF -0189+ B99B 1C INC E -0190+ B99C 3D DEC A -0191+ B99D 20 F0 JR NZ,FramHl1 -0192+ B99F E1 POP HL -0193+ B9A0 ;VERTICAL LINES -0194+ B9A0 7E LD A,(HL) -0195+ B9A1 32 BF B9 LD (FramVer),A -0196+ B9A4 DD 66 01 LD H,(IX+1) -0197+ B9A7 DD 7E 03 LD A,(IX+3) -0198+ B9AA 3D DEC A -0199+ B9AB 84 ADD A,H -0200+ B9AC 6F LD L,A -0201+ B9AD DD 7E 04 LD A,(IX+4) -0202+ B9B0 D6 02 SUB 2 -0203+ B9B2 0E 58 LD C,Dss.WrChar -0204+ B9B4 DD 56 02 LD D,(IX+2) -0205+ B9B7 14 INC D -0206+ B9B8 DD 46 05 LD B,(IX+5) -0207+ B9BB F5 FramVl1 PUSH AF -0208+ B9BC E5 PUSH HL -0209+ B9BD 5C LD E,H -0210+ B9BE 3E 00 LD A,0 -0211+ B9C0 FramVer EQU $-1 -0212+ B9C0 F5 PUSH AF -0213+ B9C1 D7 RST DssRst -0214+ B9C2 F1 POP AF -0215+ B9C3 5D LD E,L -0216+ B9C4 D7 RST DssRst -0217+ B9C5 E1 POP HL -0218+ B9C6 F1 POP AF -0219+ B9C7 14 INC D -0220+ B9C8 3D DEC A -0221+ B9C9 20 F0 JR NZ,FramVl1 -0222+ B9CB C9 RET -0223+ B9CC -0224+ B9CC ;╦╚╤╥└┼╥ ─╬ ╤╦┼─╙▐┘┼├╬ ╧╙═╩╥└ ╠┼═▐ -0225+ B9CC MenuItemLen -0226+ B9CC 06 00 LD B,0 -0227+ B9CE NextMnuItem -0228+ B9CE 7E LD A,(HL) -0229+ B9CF 23 INC HL -0230+ B9D0 A7 AND A -0231+ B9D1 C8 RET Z -0232+ B9D2 04 INC B -0233+ B9D3 18 F9 JR NextMnuItem -0234+ B9D5 -0235+ B9D5 -0236+ B9D5 ;╧ЁюЁшёютър юъэр ш юсЁрсюЄър фшрыюур -0237+ B9D5 DialogWindow -0238+ B9D5 CD 80 B8 call Windows -0239+ B9D8 23 inc hl -0240+ B9D9 ; jp WinDialog -0241+ B9D9 -0242+ B9D9 ;╧╧ юсЁрсюЄъш фшрыюуютюую юъэр -0243+ B9D9 ;Dialogs -0244+ B9D9 ;+0 (1) - Count of Items -0245+ B9D9 ;+1 (N) - Item Descriptor -0246+ B9D9 ;Descriptor -0247+ B9D9 ; +0 - X -0248+ B9D9 ; +1 - Y -0249+ B9D9 ; +2 - Len -0250+ B9D9 ; +3 - Attrib -0251+ B9D9 ; +4 (2) - Hot Key -0252+ B9D9 ; +6 (2) - Routine -0253+ B9D9 -0254+ B9D9 WinDialog: -0255+ B9D9 7E ld a,(hl) -0256+ B9DA 32 4E BA ld (DlgItemsCnt),a -0257+ B9DD 23 inc hl -0258+ B9DE 22 EF B9 ld (.DialogAdr),hl -0259+ B9E1 AF xor a -0260+ B9E2 32 4F BA ld (SelectedItem),a -0261+ B9E5 3A 4F BA .Lp1 ld a,(SelectedItem) -0262+ B9E8 6F ld l,a -0263+ B9E9 26 00 ld h,0 -0264+ B9EB 29 add hl,hl -0265+ B9EC 29 add hl,hl -0266+ B9ED 29 add hl,hl -0267+ B9EE 11 00 00 ld de,0 -0268+ B9F1 .DialogAdr equ $-2 -0269+ B9F1 19 add hl,de -0270+ B9F2 5E ld e,(hl) -0271+ B9F3 23 inc hl -0272+ B9F4 56 ld d,(hl) -0273+ B9F5 23 inc hl -0274+ B9F6 46 ld b,(hl) -0275+ B9F7 EB ex hl,de -0276+ B9F8 CD D3 91 call CursorSet -0277+ B9FB 0E 31 .Lp2 ld c,Dss.ScanKey -0278+ B9FD D7 rst DssRst -0279+ B9FE 28 FB jr z,.Lp2 -0280+ BA00 7A ld a,d -0281+ BA01 FE 52 cp #52 ; -0282+ BA03 20 13 jr nz,.Lp3 -0283+ BA05 3A 4E BA .LpDn ld a,(DlgItemsCnt) -0284+ BA08 47 ld b,a -0285+ BA09 3A 4F BA ld a,(SelectedItem) -0286+ BA0C 3C inc a -0287+ BA0D B8 cp b ;─юёЄшуыш ьръёшьры№эюую яєэъЄр -0288+ BA0E 28 EB jr z,.Lp2 -0289+ BA10 32 4F BA .Lp4 ld (SelectedItem),a -0290+ BA13 CD 35 92 call CursorRes -0291+ BA16 18 CD jr .Lp1 -0292+ BA18 FE 58 .Lp3 cp #58 ; -0293+ BA1A 20 09 jr nz,.Lp5 -0294+ BA1C 3A 4F BA .LpUp ld a,(SelectedItem) -0295+ BA1F A7 and a -0296+ BA20 28 D9 jr z,.Lp2 -0297+ BA22 3D dec a -0298+ BA23 18 EB jr .Lp4 -0299+ BA25 FE 54 .Lp5 cp #54 ; -0300+ BA27 28 F3 jr z,.LpUp -0301+ BA29 FE 56 cp #56 ; -0302+ BA2B 28 D8 jr z,.LpDn -0303+ BA2D .LpAscii -0304+ BA2D 7B ld a,e ;ASCII - ъюф -0305+ BA2E FE 0D cp #0D ; -0306+ BA30 20 C9 jr nz,.Lp2 -0307+ BA32 CD 35 92 call CursorRes -0308+ BA35 3A 4F BA ld a,(SelectedItem) -0309+ BA38 6F ld l,a -0310+ BA39 26 00 ld h,0 -0311+ BA3B 29 add hl,hl -0312+ BA3C 29 add hl,hl -0313+ BA3D 29 add hl,hl -0314+ BA3E ED 5B EF B9 ld de,(.DialogAdr) -0315+ BA42 19 add hl,de -0316+ BA43 11 06 00 ld de,6 -0317+ BA46 19 add hl,de -0318+ BA47 ifdef DEBUG -0319+ BA47~ push hl -0320+ BA47~ ld de,0 -0321+ BA47~ call PrintReg -0322+ BA47~ pop hl -0323+ BA47 endif -0324+ BA47 7E ld a,(hl) -0325+ BA48 23 inc hl -0326+ BA49 66 ld h,(hl) -0327+ BA4A 6F ld l,a -0328+ BA4B B4 or h -0329+ BA4C C8 ret z ;┼ёыш рфЁхё =0, Єю RET -0330+ BA4D ifdef DEBUG -0331+ BA4D~ push hl -0332+ BA4D~ ld de,8 -0333+ BA4D~ call PrintReg -0334+ BA4D~ pop hl -0335+ BA4D endif -0336+ BA4D E9 jp (hl) -0337+ BA4E DlgItemsCnt -0338+ BA4E 00 DB 0 -0339+ BA4F SelectedItem -0340+ BA4F 00 DB 0 -0341+ BA50 STANDART; TYPE, X, Y, L,H,COLOR -0342+ BA50 DEFB 5,10,13,#20,6,7 -0342+ BA50 050A0D200607 -0343+ BA56 -0344+ BA56 ;Ordinary frame -0345+ BA56 FrameType1 -0346+ BA56 DB #DA,#BF,#D9,#C0,#C4,#B3 -0346+ BA56 DABFD9C0C4B3 -0347+ BA5C ;Double frame -0348+ BA5C FrameType2 -0349+ BA5C DB #C9,#BB,#BC,#C8,#CD,#BA -0349+ BA5C C9BBBCC8CDBA -0387 BA62 -0388 BA62 EndOfDaemon -0389 BA62 savebin "demon.exe",STARTPRG,EndOfDaemon-STARTPRG - -Value Label ------- - ----------------------------------------------------------- -0x7F00 STARTPRG -0x8100 OrgAdr -0x00C2 EmmWin.P2 -0xAB1E BankDebug -0x0082 EmmWin.P0 -0xAB1F BankOS -0x8DAC SaveAllRegs -0xAB3F WinPage -0x8114 X CmdLine -0x8122 CmdLine.L1 -0x9480 FDebug -0x0043 Dss.GSwitch -0x0010 DssRst -0x92CE LoadFile -0x82AA Start -0x8128 HorizLine -0x8149 VerticalLine -0x815E Corner -0x81DA TextStrReg -0x8220 TextStrLogo -0x8270 TextStrWin -0x8289 TextStrRez -0x8290 DrawLine -0x829A DrawLine.L1 -0x0058 Dss.WrChar -0xAA62 Hello -0x005C Dss.PChars -0x0051 Dss.GetVMod -0x8809 Exit -0xAA60 OSGrafMode -0xAA5F OSScreen -0x003D Dss.GetMem -0xAA61 BufPage -0xAA5E DemonScreen -0x82DD StartNext -0x0059 Dss.WinCopy -0x0050 Dss.SetVMod -0x82E6 X StartNext.lp1 -0x8301 ClearScreen -0x830F DrawDemonScreen -0x8800 Start1 -0x82EF RefreshScreen -0x9235 CursorRes -0x883C Refresh -0x99B3 Cursor -0x91D3 CursorSet -0xAB11 Color.Screen -0x0089 Bios.Lp_Cls_Win -0x0008 BiosRst -0xAB12 Color.Border -0x8332 DrawCorner -0xAB13 Color.TextStrReg -0x8E57 PrnStrColor.L1 -0x8E32 PrnStrColor -0xAB14 Color.TextStrWin -0xAB18 Color.TextStrLogo -0xAB17 Color.RezArea -0x9EE4 PreparChar -0x9851 Keyb -0x9F30 Rst38.Vect -0x8837 ExitNext -0x005A Dss.WinRest -0x003E Dss.FreeMem -0x0041 Dss.Exit -0x883B X Return -0xAB25 Reg._IX -0x8F13 PrintStrReg -0xAB27 Reg._IY -0xAB29 Reg._HL -0xAB2B Reg._DE -0xAB2D Reg._BC -0xAB31 Reg._HL_ -0xAB33 Reg._DE_ -0xAB35 Reg._BC_ -0xAB2F Reg._AF -0x8E9D PrintStrAF -0xAB37 Reg._AF_ -0xAB3D Reg._PC -0x8E67 PrintReg -0xAB39 Reg._IR -0xAB3B Reg._SP -0x8FAE PrintSPDn -0xAB20 RezAdr -0x8F76 PrintStrWin -0x8FF5 PrintStrSP -0x9067 PrintDump -0x8954 DisAsm -0x88CB DemonHelp -0x88D5 HelpWnd -0xB9D5 DialogWindow -0x894B X HelpWndDlg -0x0000 X Dss.Version -0x0001 X Dss.ChDisk -0x0002 X Dss.CurDisk -0x0003 X Dss.DskInfo -0x0009 X Dss.BOOTDSK -0x000A Dss.Create -0x000B X Dss.Creat_N -0x000E X Dss.Delete -0x0010 X Dss.Rename -0x0011 Dss.Open -0x0012 Dss.Close -0x0013 Dss.Read -0x0014 Dss.Write -0x0015 Dss.Move_FP -0x0016 X Dss.Attrib -0x0017 X Dss.Get_D_T -0x0018 X Dss.Put_D_T -0x0019 X Dss.F_First -0x001A X Dss.F_Next -0x001B X Dss.MkDir -0x001C X Dss.RmDir -0x001D X Dss.ChDir -0x001E X Dss.CurDir -0x0021 Dss.SysTime -0x0022 X Dss.SetTime -0x0030 Dss.WaitKey -0x0031 Dss.ScanKey -0x0032 X Dss.EchoKey -0x0033 X Dss.CTRLKey -0x0035 X Dss.K_CLEAR -0x0036 X Dss.K_SETUP -0x0037 X Dss.TESTKEY -0x0038 X Dss.SetWin -0x0039 Dss.SetWin1 -0x003A X Dss.SetWin2 -0x003B Dss.SetWin3 -0x003C X Dss.INFOMEM -0x003F X Dss.SetMem -0x0040 X Dss.Exec -0x0042 X Dss.Wait -0x0044 X Dss.DosName -0x0045 X Dss.EX_Path -0x0046 X Dss.Environ -0x0047 X Dss.AppInfo -0x0052 X Dss.Locate -0x0053 X Dss.Cursor -0x0054 Dss.SelPage -0x0055 X Dss.Scroll -0x0056 X Dss.Clear -0x0057 Dss.RdChar -0x005B X Dss.PutChar -0x005F X Dss.Print -0x00C0 X Bios.Emm_Fn0 -0x00C1 X Bios.Emm_Fn1 -0x00C2 X Bios.Emm_Fn2 -0x00C3 X Bios.Emm_Fn3 -0x00C4 Bios.Emm_Fn4 -0x00C5 X Bios.Emm_Fn5 -0x00C6 X Bios.Emm_Fn6 -0x00C7 X Bios.Emm_Fn7 -0x00C8 X Bios.Emm_Fn8 -0x00C9 X Bios.Emm_Fn9 -0x00B0 X Bios.Win_Open -0x00B1 X Bios.Win_Close -0x00B2 X Bios.Win_Copy_Win -0x00B3 X Bios.Win_Restore_Win -0x00B4 Bios.Win_Get_Sym -0x00B5 Bios.Win_Put_Sym -0x00B6 Bios.Win_Set_ZG -0x00B7 X Bios.Win_Move_Win -0x00B8 Bios.Win_Get_ZG -0x0081 X Bios.Lp_Print_All -0x0082 X Bios.Lp_Print_Sym -0x0083 Bios.Lp_Print_Atr -0x0084 Bios.Lp_Set_Place -0x0085 X Bios.Lp_Print_Ln -0x0086 Bios.Lp_Print_Ln2 -0x0087 X Bios.Lp_Print_Ln3 -0x0088 X Bios.Lp_Print_Ln4 -0x008A X Bios.Lp_Scroll_Up -0x008B X Bios.Lp_Print_Ln5 -0x008C X Bios.Lp_Print_Ln6 -0x008D X Bios.Lp_Cls_Win2 -0x008E X Bios.Lp_Get_Place -0x0051 X Bios.Drv_Reset -0x0054 X Bios.Drv_Verify -0x0055 X Bios.Drv_Read -0x0056 X Bios.Drv_Write -0x0057 X Bios.Drv_Detect -0x0058 X Bios.Drv_Get_Par -0x0059 X Bios.Drv_Set_Par -0x005A X Bios.Ext_Version -0x005F X Bios.Drv_List -0x00A2 EmmWin.P1 -0x00E2 EmmWin.P3 -0xAB55 ListAdr -0x895A DisAsm.L1 -0x899B AttrList -0x8970 X DisAsm.L2 -0x8A42 List -0xAB7D ListFormat -0x8A0C LFormat -0x8D87 List.String -0x9BC3 KList.Descript -0x89AE AttrList.L2 -0xAB16 Color._PC -0x89CE AttrList.L0 -0xA664 Rezident.End -0xA5E7 Rezident -0x92C4 AdrArea -0x89CB AttrList.L3 -0x89D5 AttrList.L1 -0x89DF UpAdres -0x926C Ld_a_hl -0x89F8 UpAdres.L1 -0x8A13 LFormat.L2 -0x8A1F LFormat.Exit -0x8A21 LFormat.L1 -0x8A39 LFormat.L3 -0x8DA7 List.Byte -0x8A6B List.L43 -0x8B04 List.L30 -0x8A70 List.L42 -0x8D6A List.IRS1 -0x8BE8 List.L9 -0x8CA6 List.L13 -0x8AB1 List.L40 -0xB067 CodeDDFD -0x8AA5 List.L45 -0xB4DE ED00 -0xB0BC TablDDFD -0x8BD3 List.L_12 -0x8AE9 List.L44 -0x8CF7 List.ComCBBit -0x8AE4 List.L41 -0x8D1D List.NomBit -0x8D59 List.IndexRegSh -0x8AF8 List.L46 -0x8D04 List.ComCBSh -0x8D2C List.RegName -0x9174 ConvHexStr -0x8B3D List.L20 -0x8B23 List.L31 -0x8D4A List.HLReg -0x8B6E List.L10 -0x8B69 List.L21 -0xB428 TablED -0x8BDF List.L_2 -0xABCF Tabl00_3F -0xAE02 TablC0_FF -0x8BB0 List.L8 -0xB026 MHALT -0x8BFA List.L1 -0xB02B TablM -0x8DA8 List.TablAdr -0x8DAA List.StrAdr -0x8CB2 List.LE -0x8C1B List.L3 -0x8CB8 List.TwoByteCom -0x8C28 List.L4 -0x8CD0 List.ThreeByteCom -0x8C54 List.L7 -0x913D NumToStr16 -0x8C64 List.L5 -0x8C92 List.L6 -0x8C78 List.L11 -0x915E NumToStr8 -0xB41C CB40 -0x8D11 List.ComCBSh1 -0xB3EE TablCB -0x8D46 List.RN1 -0x8DF5 RestAllRegs -0x8E41 PrnStrColor.L2 -0x8E66 PrtXCoord -0x8E4C PrnStrColor.L3 -0x8E63 PrnStrColor.L4 -0xAB7E DecHex -0x8E7B PrintReg.Hex -0x8E98 PrintReg.String -0x9191 ConvDecStr -0x8E8F PrintReg.Print -0x8EFE PrintStrAF.String -0x8EAB PrintStrAF.L1 -0x9127 ReplSymNoPrint -0x8F0B PrintStrAF.Flags -0x8EC8 PrintStrAF.L2 -0x9247 Ld_a_bc -0x8F68 PrintStrReg.String -0x8F95 PrintStrWin.String -0x8F7E PrintStrWin.L1 -0xAB22 StackDown -0x8FBC PrintSPDn.L1 -0x8FF1 PrintSPDn.String -0x91AF ConvDecStr8 -0x9066 PrintStrSP.StrSp -0x9008 PrintStrSP.L4 -0xAB23 StackDump -0x9015 PrintStrSP.L3 -0x902E PrintStrSP.L2 -0xAB15 Color._SP -0x9038 PrintStrSP.L1 -0xAB43 Dump1 -0x9097 PrintStrDump -0xAB45 Dump -0x90EE PrintStrDump.String -0x90A6 PrintStrDump.L1 -0xAA5C SymbolNoPrint -0x912B ReplSymNoPrint.L1 -0x9165 X NumToStr8.Hex -0x91BE ConvDecStr8_1 -0x9209 CursorSet.Buffer -0x9242 CursorRes.L1 -0xAB19 Color.Cursor -0x91F8 CursorSet.L1 -0x925C Ld_a_bc.L1 -0x928F Ld_a_hl.L1 -0x9281 Ld_a_hl.L2 -0x9297 Ld_hl_a -0x92AF Ld_hl_a.L2 -0x92A4 Ld_hl_a.L1 -0x92BC Ld_hl_a.L3 -0xAA5D ClockOn -0xAAFE Str.Load -0x92EC LoadExe -0x00FF On -0x9505 PrErDss -0x947F FId -0x934A LoadExe.L1 -0x9503 FRam -0x9388 LoadExe.L2 -0x939D LoadExe.L6 -0x9452 NBank -0x947C MemId -0x93A8 LoadExe.L5 -0x93CE LoadExe.L4 -0x9478 BankP -0x9417 LoadExe.L7 -0x9436 LoadExe.L8 -0x9442 LoadExe.L9 -0x944E LoadExe.L10 -0x946C NBank.L5 -0x9464 NBank.L2 -0x9465 NBank.L1 -0x9475 NBank.L3 -0x9501 X FStart -0x9512 ErDss -0xAB0E Str.DA -0x0026 ErDss.MaxError -0x97C1 ErDss.Tabl -0x9527 ErDss.e01 -0x9538 ErDss.e02 -0x954D ErDss.e03 -0x955C ErDss.e04 -0x956B ErDss.e05 -0x957A ErDss.e06 -0x958E ErDss.e07 -0x95A2 ErDss.e08 -0x95B1 ErDss.e09 -0x95BF ErDss.e0A -0x95CD ErDss.e0B -0x95E1 ErDss.e0C -0x9600 ErDss.e0D -0x960E ErDss.e0E -0x9620 ErDss.e0F -0x9630 ErDss.e10 -0x9641 ErDss.e11 -0x9652 ErDss.e12 -0x9669 ErDss.e13 -0x9677 ErDss.e14 -0x9681 ErDss.e15 -0x968C ErDss.e16 -0x969D ErDss.e17 -0x96A7 ErDss.e18 -0x96B5 ErDss.e19 -0x96C0 ErDss.e1A -0x96CC ErDss.e1B -0x96DA ErDss.e1C -0x96ED ErDss.e1D -0x9700 ErDss.e1E -0x9712 ErDss.e1F -0x9727 ErDss.e20 -0x973A ErDss.e21 -0x974D ErDss.e22 -0x9760 ErDss.e23 -0x976F ErDss.e24 -0x979F ErDss.e25 -0x97AA ErDss.e26 -0x980D Clock -0x983E Clock.String -0x98CD Keyb.L100 -0x9877 Keyb.L1 -0x99B2 Keyb.WinScreen -0x9884 Keyb.L10 -0x99A0 Keyb.L0 -0x9897 Keyb.L11 -0x98BB Keyb.L12 -0x9CAA InputLine -0x9C30 PutAdres -0xA1E7 KReg.Rez -0x993B Keyb.L202 -0x9916 Keyb.L200 -0x994E Keyb.L203 -0x98CA X Keyb.L13 -0x98F9 Keyb.NoRest -0x9924 Keyb.L208 -0x991E Keyb.NoExit -0x992D Keyb.L207 -0xB6A6 LoadBinDialog -0x9935 Keyb.L201 -0x0000 Off -0xA97B Step.Flag -0xA664 Step -0x9974 Keyb.L204 -0x9BD1 AdrListTabl -0x9987 Keyb.L205 -0x9991 Keyb.L206 -0xA9FA SaveScr -0xAB7F ExitDlg -0x9A1C KList -0xA3FC KDump -0x9FAE KReg -0xA2A4 KStack -0x99D7 Cursor.L1 -0x99EF Cursor.L2 -0x9A07 Cursor.L3 -0xA3F3 KStack.Coordinate -0xA3F5 KStack.Descript -0xA3A4 KStack.L201 -0x9BC1 KList.Coordinate -0x9B43 KList.L201 -0xA5A0 KDump.Coordinate -0xA5A2 KDump.Descript -0xA4FA KDump.L201 -0xA206 KReg.DescCalc -0xA04A KReg.L201 -0x9A90 KList.L100 -0x9A28 KList.L10 -0x9A3C KList.L20 -0x9B9C KList.NewLA1 -0x9A5A KList.L21 -0x9BA3 KList.CtrlTabl -0x9BDF AdrCtrlTabl -0x9A79 KList.L22 -0x9BA2 KList.CtrlWin -0x9B8E KList.NewLA -0x9B3C KList.L200 -0x9AAC KList.L101 -0x9AC0 KList.L102 -0x9AD8 KList.L103 -0x9AD1 KList.L104 -0x9AF0 KList.L105 -0x9AE9 KList.L107 -0x9B05 KList.L108 -0x9AFE KList.L106 -0x9B23 KList.L110 -0x9B1C KList.L109 -0x9B2F KList.L111 -0x9B5A KList.NewPCAdr -0x9B83 KList.InAdres -0x9B68 KList.InCode -0x9BF1 PutCode -0x9C2C PutCode.Buffer -0x9EB8 InputLine.Buffer -0x9C1C PutCode.L3 -0x9C09 PutCode.L2 -0x9C4C PutHex -0x9C91 CapsLetter -0x9C6F PutDec -0x9C8A Numeric -0x9C5F PutHex.L1 -0x9C9A InputLine1 -0x9CA3 InputLineEd -0xAB1B Color.InLineEd -0xAB1A Color.InLine -0x9EB2 InputLine.EntEnd -0x9D34 InputLine.L15 -0x9FAA CursPos -0x9EB3 InputLine.Coordinate -0x9EB5 InputLine.Pos -0x9CCB InputLine.L1 -0x9E1C InputLine.PrintInLine -0x9E05 InputLine.EndString -0x9CDE InputLine.L100 -0x9FA6 CursOnOff -0x9D39 InputLine.L3 -0x9EB6 InputLine.Color -0x9E32 InputLine.ClearInLine -0x9DEA InputLine.HomeString -0x9E7A InputLine.NextPos -0x9D26 InputLine.L12 -0x9FA8 CursInsOvr -0x9EB7 InputLine.Len -0x9F85 ResCurs -0x9D4F InputLine.L14 -0x9D43 InputLine.L13 -0x9D54 InputLine.L2 -0x9E63 InputLine.EndPos -0x9D86 InputLine.L9 -0x9D66 InputLine.L11 -0x9D9F InputLine.L10 -0x9E4A InputLine.ColorInLine -0x9DAB InputLine.L5 -0x9DC4 InputLine.L6 -0x9DDD InputLine.L7 -0x9DF9 InputLine.L8 -0x9E8F InputLine.L16 -0x9E98 InputLine.FromBuffer -0x9E9D InputLine.FB1 -0x9EA6 X InputLine.ToBuffer -0x9EA9 InputLine.TB1 -0x9F09 Rst38 -0x9F33 CuttingCurs -0x9FA9 TimerFlash -0x9F3E CuttingCurs.L1 -0x9FA7 CursPutRes -0x9F99 ResCurs.L1 -0x9F5C CuttingCurs.L3 -0x9FAC CursSymb -0x001B SysSymb -0x0010 PauseFlash -0x9F7C CuttingCurs.L4 -0x0000 Ins -0x9FAE X KReg.L100 -0xA043 KReg.L200 -0x9FC7 KReg.L101 -0xA22C KReg.Coordinate -0x9FDC KReg.L102 -0xA22E KReg.Descript -0x9FF0 KReg.L103 -0x9FED KReg.L104 -0x9FFA KReg.L107 -0xA004 KReg.L105 -0xA017 KReg.L108 -0xA224 KReg.PgDown -0xA029 KReg.L110 -0xA228 KReg.PgUp -0xA035 KReg.L111 -0xA0DB KReg.L205 -0xA088 KReg.L207 -0xA0B2 KReg.L206 -0xA08E KReg.L208 -0xA12F KReg.L204 -0xA0F2 KReg.L209 -0xA13B KReg.L202 -0xA170 KReg.L203 -0xA17A KReg.L210 -0xA202 KReg.L211 -0xA1FE KReg.L212 -0xA24E KReg.DTabl -0xA25A KReg.D1 -0xA26D KReg.D2 -0xA282 KReg.D3 -0xA28F KReg.D4 -0xA294 KReg.D5 -0xA29D KReg.D6 -0xA2D1 KStack.L100 -0xA39D KStack.L200 -0xA2ED KStack.L101 -0xA301 KStack.L102 -0xA327 KStack.L103 -0xA320 KStack.L104 -0xA34D KStack.L105 -0xA346 KStack.L107 -0xA370 KStack.L108 -0xA369 KStack.L106 -0xA391 KStack.L110 -0xA38A KStack.L109 -0xA3E2 KStack.L202 -0xA3DB KStack.L203 -0xA431 KDump.L100 -0xA401 X KDump.L10 -0xA41A KDump.L11 -0xA4F3 KDump.L200 -0xA44D KDump.L101 -0xA461 KDump.L102 -0xA480 KDump.L103 -0xA479 KDump.L104 -0xA49E KDump.L105 -0xA497 KDump.L107 -0xA4BA KDump.L108 -0xA4B3 KDump.L106 -0xA4DA KDump.L110 -0xA4D3 KDump.L109 -0xA4E6 KDump.L111 -0xA528 KDump.L202 -0xA53D KDump.L203 -0xA58D KDump.L299 -0xA556 KDump.L204 -0xA57E KDump.L205 -0xFF00 AdrTmpBuf -0xA5F2 Rezident.Start -0xA609 Rezident.K2 -0xA612 Rezident.K3 -0xA60E Rezident.Start1 -0xA615 Rezident.Step -0xA618 Rezident.RetIn -0xA61B Rezident.K4 -0xA621 Rezident.K5 -0xA636 Rezident.BankD1 -0xA642 Rezident.Return1 -0xA64F Rezident.K6 -0xA655 Rezident.RetIn1 -0xA65A Rezident.K1 -0xA65D Rezident.BankD -0xA661 Rezident.Return -0xA960 Step.BankP -0xA8F5 Step.Run -0xA967 Step.SpdInc -0xA971 Step.SpdDec -0xA6AE Step.L7 -0xA7FF Step.L2 -0xA7EF Step.L8 -0xA7E2 Step.L9 -0xA748 Step.L6 -0xA6D1 Step.L18 -0xA6E8 Step.L10 -0xA6FD Step.L25 -0xA716 Step.L24 -0xA71E Step.L23 -0xA729 Step.L19 -0xA734 Step.L20 -0xA73F Step.L21 -0xA761 Step.L22 -0xA77C Step.L27 -0xA78E Step.L26 -0xA7B3 Step.L11 -0xA7B9 Step.L12 -0xA7BF Step.L13 -0xA7C5 Step.L14 -0xA7CB Step.L15 -0xA7D1 Step.L16 -0xA7D7 Step.L17 -0xA7DB Step.L5 -0xA817 Step.L1 -0xA83E Step.L30 -0xA97C Step.WRez -0xA895 Step.L31 -0xA8BD Step.L32 -0xA964 Step.Run1 -0xA8A1 Step.L33 -0xA8B6 Step.L34 -0xA97D Step.Buffer -0xA8D5 Step.L3 -0xAB1C StackDebug -0xA93E Step.L35 -0xA936 Step.L36 -0xA956 Step.L4 -0xAA5A SaveScr.Id -0xAA0F SaveScr.L1 -0xAA50 SaveScr.NameF -0xAA44 SaveScr.L2 -0xAAFE X Str -0xAB11 X Color -0xAB25 X Reg -0x00FF X Ovr -0xAC4F M00 -0xAC53 M01 -0xAC5A M02 -0xAC64 M03 -0xAC6B M04 -0xAC71 M05 -0xAC77 M06 -0xAC7D M07 -0xAC82 M08 -0xAC8C M09 -0xAC96 M0A -0xACA0 M0B -0xACA7 M0C -0xACAD M0D -0xACB3 M0E -0xACB9 M0F -0xACBE M10 -0xACC4 M11 -0xACCB M12 -0xACD5 M13 -0xACDC M14 -0xACE2 M15 -0xACE8 M16 -0xACEE M17 -0xACF2 M18 -0xACF6 M19 -0xAD00 M1A -0xAD0A M1B -0xAD11 M1C -0xAD17 M1D -0xAD1D M1E -0xAD23 M1F -0xAD27 M20 -0xAD2E M21 -0xAD35 M22 -0xAD3E M23 -0xAD45 M24 -0xAD4B M25 -0xAD51 M26 -0xAD57 M27 -0xAD5B M28 -0xAD61 M29 -0xAD6B M2A -0xAD74 M2B -0xAD7B M2C -0xAD81 M2D -0xAD87 M2E -0xAD8D M2F -0xAD91 M30 -0xAD98 M31 -0xAD9F M32 -0xADA7 M33 -0xADAE M34 -0xADB7 M35 -0xADC0 M36 -0xADC9 M37 -0xADCD M38 -0xADD3 M39 -0xADDD M3A -0xADE5 M3B -0xADEC M3C -0xADF2 M3D -0xADF8 M3E -0xADFE M3F -0xAE82 MC0 -0xAE89 MC1 -0xAE90 MC2 -0xAE97 MC3 -0xAE9B MC4 -0xAEA4 MC5 -0xAEAC MC6 -0xAEB3 MC7 -0xAEB9 MC8 -0xAEBF MC9 -0xAEC3 MCA -0xAEC9 MCC -0xAED1 MCD -0xAED7 MCE -0xAEDE MCF -0xAEE4 MD0 -0xAEEB MD1 -0xAEF2 MD2 -0xAEF9 MD3 -0xAF02 MD4 -0xAF0B MD5 -0xAF13 MD6 -0xAF18 MD7 -0xAF20 MD8 -0xAF26 MD9 -0xAF2A MDA -0xAF30 MDB -0xAF38 MDC -0xAF40 MDD -0xAF43 MDE -0xAF4A MDF -0xAF52 ME0 -0xAF59 ME1 -0xAF60 ME2 -0xAF67 ME3 -0xAF72 ME4 -0xAF7B ME5 -0xAF83 ME6 -0xAF88 ME7 -0xAF90 ME8 -0xAF97 ME9 -0xAF9F MEA -0xAFA6 MEB -0xAFAF MEC -0xAFB8 MEE -0xAFBD MEF -0xAFC5 MF0 -0xAFCB MF1 -0xAFD2 MF2 -0xAFD8 MF3 -0xAFDB MF4 -0xAFE3 MF5 -0xAFEB MF6 -0xAFEF MF7 -0xAFF7 MF8 -0xAFFD MF9 -0xB006 MFA -0xB00C MFB -0xB00F MFC -0xB017 MFD -0xB01A MFE -0xB01E MFF -0xB03B M80 -0xB042 M88 -0xB049 M90 -0xB04E M98 -0xB055 MA0 -0xB05A MA8 -0xB05F MB0 -0xB063 MB8 -0xB166 DD09 -0xB170 DD19 -0xB17A DD21 -0xB181 DD22 -0xB18A DD23 -0xB191 DD24 -0xB198 DD25 -0xB19F DD26 -0xB1A6 DD29 -0xB1B0 DD2A -0xB1B9 DD2B -0xB1C0 DD2C -0xB1C7 DD2D -0xB1CE DD2E -0xB1D5 DD34 -0xB1DB DD35 -0xB1E1 DD36 -0xB1E7 DD39 -0xB1F1 DD44 -0xB1F9 DD45 -0xB201 DD46 -0xB208 DD4C -0xB210 DD4D -0xB218 DD4E -0xB21F DD54 -0xB227 DD55 -0xB22F DD56 -0xB236 DD5C -0xB23E DD5D -0xB246 DD5E -0xB24D DD60 -0xB255 DD61 -0xB25D DD62 -0xB265 DD63 -0xB26D DD64 -0xB276 DD65 -0xB27F DD66 -0xB286 DD67 -0xB28E DD68 -0xB296 DD69 -0xB29E DD6A -0xB2A6 DD6B -0xB2AE DD6C -0xB2B7 DD6D -0xB2C0 DD6E -0xB2C7 DD6F -0xB2CF DD70 -0xB2D6 DD71 -0xB2DD DD72 -0xB2E4 DD73 -0xB2EB DD74 -0xB2F2 DD75 -0xB2F9 DD77 -0xB300 DD7C -0xB308 DD7D -0xB310 DD7E -0xB317 DD84 -0xB320 DD85 -0xB329 DD86 -0xB331 DD8C -0xB33A DD8D -0xB343 DD8E -0xB34B DD94 -0xB352 DD95 -0xB359 DD96 -0xB35F DD9C -0xB368 DD9D -0xB371 DD9E -0xB379 DDA4 -0xB380 DDA5 -0xB387 DDA6 -0xB38D DDAC -0xB394 DDAD -0xB39B DDAE -0xB3A1 DDB4 -0xB3A7 DDB5 -0xB3AD DDB6 -0xB3B2 DDBC -0xB3B8 DDBD -0xB3BE DDBE -0xB3C3 DDE1 -0xB3CA DDE3 -0xB3D5 DDE5 -0xB3DD DDE9 -0xB3E5 DDF9 -0xB3FE CB00 -0xB402 CB08 -0xB406 CB10 -0xB409 CB18 -0xB40C CB20 -0xB410 CB28 -0xB414 CB30 -0xB418 CB38 -0xB420 X CB80 -0xB424 X CBC0 -0xB4E4 ED40 -0xB4ED ED41 -0xB4F7 ED42 -0xB501 ED43 -0xB50A ED44 -0xB50E ED45 -0xB513 ED46 -0xB518 ED47 -0xB51F ED48 -0xB528 ED49 -0xB532 ED4A -0xB53C ED4B -0xB545 ED4D -0xB54A ED4E -0xB551 ED4F -0xB558 ED50 -0xB561 ED51 -0xB56B ED52 -0xB575 ED53 -0xB57E ED56 -0xB583 ED57 -0xB58A ED58 -0xB593 ED59 -0xB59D ED5A -0xB5A7 ED5B -0xB5B0 ED5E -0xB5B5 ED5F -0xB5BC ED60 -0xB5C5 ED61 -0xB5CF ED62 -0xB5D9 ED63 -0xB5E2 ED67 -0xB5E6 ED68 -0xB5EF ED69 -0xB5F9 ED6A -0xB603 ED6B -0xB60C ED6F -0xB610 ED70 -0xB619 ED71 -0xB623 ED72 -0xB62D ED73 -0xB636 ED78 -0xB63F ED79 -0xB649 ED7A -0xB653 ED7B -0xB65C EDA0 -0xB660 EDA1 -0xB664 EDA2 -0xB668 EDA3 -0xB66D EDA8 -0xB671 EDA9 -0xB675 EDAA -0xB679 EDAB -0xB67E EDB0 -0xB683 EDB1 -0xB688 EDB2 -0xB68D EDB3 -0xB692 EDB8 -0xB697 EDB9 -0xB69C EDBA -0xB6A1 EDBB -0xB7F3 LoadBinDialog.LoadBinWnd -0xB6AE LoadBinDialog.LoadBinEditFN -0xB6AE LoadBinDialog.L003 -0xB7EE LoadBinDialog.filenamelen -0xB812 LoadBinDialog.LoadBinFileName -0xB6D3 LoadBinDialog.L001 -0xB6CF LoadBinDialog.L002 -0xB6D5 LoadBinDialog.EditAddres -0xB7EF LoadBinDialog.LoadToAdr -0xB82F LoadBinDialog.AdresTxt -0xB6F1 LoadBinDialog.EditLenght -0xB7F1 LoadBinDialog.LoadLen -0xB83F LoadBinDialog.LenTxt -0xB70D LoadBinDialog.LoadBIN -0xB72A LoadBinDialog.restadr -0xB7CF LoadBinDialog.Err1 -0xB7ED LoadBinDialog.FMid -0xB743 LoadBinDialog.adr0000 -0xB748 LoadBinDialog.adr -0xB7EC LoadBinDialog.bank -0xB779 LoadBinDialog.LoadFirst -0xB7A4 LoadBinDialog.LoadEnd -0xB766 X LoadBinDialog.Load00 -0xB77F LoadBinDialog.LoadNext -0xB7DA LoadBinDialog.Bank1 -0xB7C7 LoadBinDialog.Err -0xB880 Windows -0xB899 NO_STAND_WIN -0xBA50 STANDART -0xB89B STAND_WIN -0xB909 Rectang -0xB92E Frame -0xB8EE WinHeader -0xB8D9 WinNoHeader -0xB9CC MenuItemLen -0xB91E FillBox -0xB920 FillB1 -0xBA56 FrameType1 -0xB93A Frame1 -0xBA5C FrameType2 -0xB993 FramHor -0xB98F FramHl1 -0xB9BF FramVer -0xB9BB FramVl1 -0xB9CE NextMnuItem -0xB9D9 X WinDialog -0xBA4E DlgItemsCnt -0xB9EF WinDialog.DialogAdr -0xBA4F SelectedItem -0xB9E5 WinDialog.Lp1 -0xB9FB WinDialog.Lp2 -0xBA18 WinDialog.Lp3 -0xBA05 WinDialog.LpDn -0xBA10 WinDialog.Lp4 -0xBA25 WinDialog.Lp5 -0xBA1C WinDialog.LpUp -0xBA2D X WinDialog.LpAscii -0xBA62 EndOfDaemon diff --git a/DEMON.TXT b/demon.txt similarity index 100% rename from DEMON.TXT rename to demon.txt diff --git a/demon.utf.txt b/demon.utf.txt new file mode 100644 index 0000000..541cf41 --- /dev/null +++ b/demon.utf.txt @@ -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................ тХС +тХС#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................ тХС +тХС #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 ╨┐╤А╨╡╨┤╤Б╤В╨░╨▓╨╗╨╡╨╜╨╕╤П + ╨┐╨░╨╝╤П╤В╨╕ ╨╜╨╡╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╛╤В╨╗╨╕╤З╨░╨╡╤В╤Б╤П - ╨║╤Г╤А╤Б╨╛╤А ╨┐╨╛╤Б╨╗╨╡ ╨▓╨▓╨╛╨┤╨░ ╨╛╤З╨╡╤А╨╡╨┤╨╜╨╛╨│╨╛ + ╨▒╨░╨╣╤В╨░ ╨░╨▓╤В╨╛╨╝╨░╤В╨╕╤З╨╡╤Б╨╕ ╨┐╨╡╤А╨╡╤Е╨╛╨┤╨╕╤В ╨║ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╝╤Г. diff --git a/disasm.asm b/disasm.asm new file mode 100644 index 0000000..6768ef2 --- /dev/null +++ b/disasm.asm @@ -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 + diff --git a/dss.asm b/dss.asm new file mode 100644 index 0000000..84f67df --- /dev/null +++ b/dss.asm @@ -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 \ No newline at end of file diff --git a/dss.inc b/dss.inc new file mode 100644 index 0000000..7435240 --- /dev/null +++ b/dss.inc @@ -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 + diff --git a/error.asm b/error.asm new file mode 100644 index 0000000..6755bd8 --- /dev/null +++ b/error.asm @@ -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 + diff --git a/file.asm b/file.asm new file mode 100644 index 0000000..257abb0 --- /dev/null +++ b/file.asm @@ -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 ; ╨░╨┤╤А╨╡╤Б ╤А╨░╤Б╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╤П ╨║╨╛╨┤╨░ ╨▓ ╨┐╨░╨╝╤П╤В╨╕ diff --git a/kdump.asm b/kdump.asm new file mode 100644 index 0000000..2f69d6d --- /dev/null +++ b/kdump.asm @@ -0,0 +1,260 @@ +;[]=========================================================================[] +;[] ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л ╨▓ ╨╛╨║╨╜╨╡ ╨┤╨░╨╝╨┐╨░ [] +;[] v0.10 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 31.03.2006 [] +;[]=========================================================================[] + + + MODULE KDUMP + +KDump: + ld a,b ; ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ + and 11110000b + jr z,.L100 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Ctrl + ╤Б╨╕╨╝╨▓╨╛╨╗ +.L10 cp 00100000b ; + jp nz,.L100 + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + + cp SHIFTED_KEY+END_KEY ; + + 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 ; + + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + jr nz,.L111 + ld a,1 + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp KEYB.Keyb_NC + +.L111 cp END_KEY ; + jr nz,.L200 + ld a,(.Descript+2) + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp KEYB.Keyb_NC + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ASCII ╨║╨╛╨┤╨╛╨▓ +.L200 ld a,0 ; ASCII ╨║╨╛╨┤ + cp ENTER_KEY ; + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 \ No newline at end of file diff --git a/keyb.asm b/keyb.asm new file mode 100644 index 0000000..04e831f --- /dev/null +++ b/keyb.asm @@ -0,0 +1,1297 @@ +;[]=========================================================================[] +;[] ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л [] +;[] v0.01 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 10.10.2004 [] +;[] v0.02 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 27.03.2005 [] +;[] v0.03 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 11.03.2006 [] +;[] v0.10 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 14.05.2006 [] +;[]=========================================================================[] + +; -- Key masks and flags +SHIFTS_MASK EQU 11110000b +LSHIFT_FLAG EQU 10000000b +RSHIFT_FLAG EQU 01000000b +SHIFT_FLAG EQU LSHIFT_FLAG + RSHIFT_FLAG +CTRL_FLAG EQU 00100000b +ALT_FLAG EQU 00010000b + +LCTRL_FLAG EQU 00001000b +LALT_FLAG EQU 00000100b +RCTRL_FLAG EQU 00000010b +RALT_FLAG EQU 00000001b + +SHIFTED_KEY EQU 0x80 + +; -- Key codes (Scancodes) +AST_KEY EQU 0x00 +ENTER_KEY EQU 0x0D +BKSP_KEY EQU 0x0E +TAB_KEY EQU 0x0F +E_KEY EQU 0x12 +R_KEY EQU 0x13 +ESC_KEY EQU 0x1B +Z_KEY EQU 0x2A +X_KEY EQU 0x2B +C_KEY EQU 0x2C +V_KEY EQU 0x2D +F1_KEY EQU 0x3B +F2_KEY EQU 0x3C +F3_KEY EQU 0x3D +F4_KEY EQU 0x3E +F5_KEY EQU 0x3F +F6_KEY EQU 0x40 +F7_KEY EQU 0x41 +F8_KEY EQU 0x42 +F9_KEY EQU 0x43 +F10_KEY EQU 0x44 +SLCK_KEY EQU 0x48 +DEL_KEY EQU 0x4F +INS_KEY EQU 0x50 +END_KEY EQU 0x51 +DN_KEY EQU 0x52 +PGDN_KEY EQU 0x53 +LEFT_KEY EQU 0x54 +RIGHT_KEY EQU 0x56 +HOME_KEY EQU 0x57 +UP_KEY EQU 0x58 +PGUP_KEY EQU 0x59 + + + MODULE KEYB + +Keyb_RF + call CursorRes ; ╨▓╤Л╨║╨╗ ╨║╤Г╤А╤Б╨╛╤А + call Refresh ; ╨╛╨▒╨╜╨╛╨▓╨╗╨╡╨╜╨╕╨╡ ╤Н╨║╤А╨░╨╜╨░ + jr Keyb +Keyb_NC + call CursorRes ; ╨▓╤Л╨║╨╗ ╨║╤Г╤А╤Б╨╛╤А +Keyb + call Cursor ; ╨▓╨║╨╗ ╨║╤Г╤А╤Б╨╛╤А + call CursorSet +!Keyb_L1 + ld c,Dss.ScanKey ; ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л + rst DssRst + jr z,Keyb_L1 + ld a,b ; ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ + and SHIFTS_MASK + jr z,.L100 + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Shift + ╤Б╨╕╨╝╨▓╨╛╨╗ + and SHIFT_FLAG ; + or a + jr z,.L1 + ld a,d + cp SHIFTED_KEY+TAB_KEY ; Shift+Tab + jr nz,Keyb_L1 + ld hl,Keyb.WinScreen + ld a,(hl) + dec a + jr nz,.Keyb_L4 + ld a,4 +.Keyb_L4 + ld (hl),a ; ╨╜╨╛╨╝╨╡╤А ╨╛╨║╨╜╨░ ╨┤╨░╨╝╨┐╨░ + jr Keyb_NC + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Alt + ╤Б╨╕╨╝╨▓╨╛╨╗ +.L1 ld a,b + and SHIFTS_MASK + cp ALT_FLAG ; + jr nz,.L10 + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + cp SHIFTED_KEY+X_KEY ; + + jr nz,.L10 + ret z ; ╨▓╤Л╤Е╨╛╨┤ + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Ctrl + ╤Б╨╕╨╝╨▓╨╛╨╗ +.L10 cp CTRL_FLAG ; + jp nz,.L0 + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + cp SHIFTED_KEY+E_KEY ; + (dEc/hEx) + jr nz,.L11 + ld a,(DecHex) + cpl + ld (DecHex),a + jr Keyb_RF + +.L11 cp SHIFTED_KEY+R_KEY ; + ╤А╨╡╨╖╨╕╨┤╨╡╨╜╤В + jr nz,.L12 + call CursorRes + ld b,5 ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld hl,0x1413 + push hl + push bc + call CursorSet + pop bc + pop hl + call InputLine + jp c,Keyb_NC + call PutAddress + jp c,Keyb_NC + call KREG.KReg.Rez ; ╨╜╨╛╨▓╤Л╨╣ ╨░╨┤╤А╨╡╤Б ╤А╨╡╨╖╨╕╨┤╨╡╨╜╤В╨░ + jr Keyb_RF + + +.L12 cp SHIFTED_KEY+Z_KEY ; + + jp z,.L202M2 ; ╨▓╤Л╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╨║╨╛╨╝╨░╨╜╨┤╤Л + cp SHIFTED_KEY+C_KEY ; + + jp z,.L200P5 ; ╨▓╤Л╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╨║╨╛╨╝╨░╨╜╨┤╤Л + cp SHIFTED_KEY+V_KEY ; + + jp z,.L9952 ; ╨┐╤А╨╛╨┐╤Г╤Б╨║ ╨║╨╛╨╝╨░╨╜╨┤╤Л + +; cp 0x80+0x48 ; +; call z,ScreenS ;╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤Н╨║╤А╨░╨╜╨░ ╨▓ ╤Д╨░╨╣╨╗ + +.L13 ;... + jp .L0 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ASCII ╨║╨╛╨┤╨╛╨▓ +.L100 ld a,e + cp ESC_KEY ; - ╨▓╨║╨╗.╤Б╨╕╤Б╤В╨╡╨╝╨╜╨╛╨│╨╛ ╤Н╨║╤А╨░╨╜╨░ + jr nz,.L200 + xor a ; ╨▓╤Л╨║╨╗ ╤З╨░╤Б╨╛╨▓ + ld (ClockOn),a + ld a,(OSScreen) + ld b,a + push bc + ld a,(OSGrafMode) + ld c,Dss.SetVMod ; ╤Б╨╕╤Б╤В╨╡╨╝╨╜╤Л╨╣ ╤Н╨║╤А╨░╨╜ + rst DssRst + pop bc + ld a,(DemonScreen) + cp b + jr nz,.NoRest + ld de,0 ; ╨Х╤Б╨╗╨╕ ╤Н╨║╤А╨░╨╜╤Л ╨Ю╨б ╨╕ ╨Ф╨╡╨╝╨╛╨╜╨░ ╤Б╨╛╨▓╨┐╨░╨┤╨░╤О╤В - + ld hl,#2050 ; ╨▓╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╨╝ ╤Б╨║╤А╨╕╨╜ + ld a,(BufPage) + ld b,a + ld c,Dss.WinRest + ld ix,#c000 + rst DssRst +.NoRest ld c,Dss.WaitKey + rst DssRst ; ╨╢╨┤╨╡╨╝ Any Key + ld a,(DemonScreen) + ld b,a + ld a,3 + ld c,Dss.SetVMod + push bc + rst DssRst + pop bc + ld a,(OSScreen) + cp b + call z,RefreshScreen ; ╨Х╤Б╨╗╨╕ ╤Н╨║╤А╨░╨╜╤Л ╤Б╨╛╨▓╨┐╨░╨┤╨░╤О╤В - ╨┐╨╡╤А╨╡╤А╨╕╤Б╨╛╨▓╤Л╨▓╨░╨╡╨╝ + ld a,On ; ╨▓╨║╨╗ ╤З╨░╤Б╨╛╨▓ + ld (ClockOn),a + jp Keyb_L1 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨┤╨░ +.L200 ld a,d + cp F1_KEY ; + jr nz,.L208 +.L200P5 + call DemonHelp +; ld c,Dss.WaitKey +; rst DssRst ; ╨╢╨┤╨╡╨╝ Any Key + +.NoExit call RefreshScreen + jp Keyb_L1 +.L208 cp F3_KEY + jr nz,.L207 + call LOADBIN.LoadBinDialog + jr .NoExit +.L207 + cp F8_KEY ; + jr nz,.L201 + ld a,Off ; ╤Д╨╗╨░╨│ ╨┐╤А╨╛╨┐╤Г╤Б╨║╨░ ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝ + jr .L202 + +.L201 cp F7_KEY ; + jr nz,.L203 +.L202M2 + ld a,On ; ╤Д╨╗╨░╨│ ╤В╤А╨░╤Б╤Б╨╕╤А╨╛╨▓╨║╨╕ ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝ +.L202 ld (STEP.Step.Flag),a + ld hl,PrintStrSP.StrSp + ld a,(hl) ; ╤Б╤В╤А╨╛╨║╨░ ╨▓╨╡╤А╤И╨╕╨╜╤Л ╤Б╤В╨╡╨║╨░ + inc a + jr nz,.L9948 + ld a,6 ; ╨▓╨╡╤А╨╜╤Г╤В╤М ╨▓╨╡╤А╤И╨╕╨╜╤Г ╤Б╤В╨╡╨║╨░ + ld (hl),a +.L9948 + call STEP.Step + jp Keyb_RF + +.L203 cp F9_KEY ; + jr nz,.L204 +.L9952 + ld hl,(Reg._PC) + call List ; ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨░╤П ╨║╨╛╨╝╨░╨╜╨┤╨░ + ld (Reg._PC),hl ; ╨╜╨╛╨▓╤Л╨╣ PC + push hl + ld a,(KList.Descript) ; ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + call AdrListTabl ; ╨╜╨╕╨╢╨╜╨╕╨╣ ╨░╨┤╤А╨╡╤Б ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + ld de,(ListAddr) ; ╨▓╨╡╤А╤Е╨╜╨╕╨╣ ╨░╨┤╤А╨╡╤Б ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + pop bc ; ╨╜╨╛╨▓╤Л╨╣ PC + call AdrArea + jp nc,Keyb_RF + ld (ListAddr),bc ; ╨╜╨╛╨▓╨░╤П ╤Б╤В╤А╨░╨╜╨╕╤Ж╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + jp Keyb_RF + +.L204 cp TAB_KEY ; + jr nz,.L205 + ld hl,Keyb.WinScreen + ld a,(hl) + inc a + cp 5 + jr nz,.L9983 + ld a,1 +.L9983 + ld (hl),a ; ╨╜╨╛╨╝╨╡╤А ╨╛╨║╨╜╨░ ╨┤╨░╨╝╨┐╨░ + jp Keyb_NC + +.L205 cp SLCK_KEY ; + jr nz,.L206 + call SaveScr ; ╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤Н╨║╤А╨░╨╜╨░ ╨▓ ╤Д╨░╨╣╨╗ + jp Keyb_L1 + +.L206 cp F10_KEY ; + jr nz,.L0 + ;╨▓╤Л╤Е╨╛╨┤ + ld ix,ExitDlg + call DialogWindow + ret + call ClearScreen +.L0 ld a,(.WinScreen) ; ╨░╨║╤В╨╕╨▓╨╜╨╛╨╡ ╨╛╨║╨╜╨╛ + dec a + jp z,KList + dec a + jp z,KDUMP.KDump + dec a + jp z,KREG.KReg + jp KStack + +.WinScreen db 1 ; ╨╜╨╛╨╝╨╡╤А ╨░╨║╤В╨╕╨▓╨╜╨╛╨│╨╛ ╨╛╨║╨╜╨░ + ; 1 - ╨╛╨║╨╜╨╛ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + ; 2 - ╨╛╨║╨╜╨╛ ╨┤╨░╨╝╨┐╨░ + ; 3 - ╨╛╨║╨╜╨╛ ╤А╨╡╨│╨╕╤Б╤В╤А╨╛╨▓ + ; 4 - ╨╛╨║╨╜╨╛ ╤Б╤В╨╡╨║╨░ + + ; ╨Я╤А╨╛╤А╨╕╤Б╨╛╨▓╨║╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ +Cursor: + ld a,(Keyb.WinScreen) ; ╨░╨║╤В╨╕╨▓╨╜╨╛╨╡ ╨╛╨║╨╜╨╛ + dec a + jr z,.L1 + dec a + jr z,.L2 + dec a + jr z,.L3 + + ; ╨Ю╨║╨╜╨╛ ╨┤╨░╨╝╨┐╨░ ╤Б╤В╨╡╨║╨░ + ld de,(KStack.Coordinate) ; ╤А╨░╤Б╤З╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ + ld hl,KStack.Descript+2 + ld b,e +.L99C7 + inc hl + inc hl + djnz .L99C7 + ld a,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ld (@KStack.ESTR_LEN),a + ld b,a + dec hl + ld e,(hl) ; X-╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ex de,hl + ld (@KStack.ESTR_POS),hl + ret + + ; ╨Ю╨║╨╜╨╛ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ +.L1 ld de,(KList.Coordinate) ; ╤А╨░╤Б╤З╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ + ld hl,KList.Descript+2 + ld b,e +.L99DF + inc hl + inc hl + djnz .L99DF + ld a,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ld (KList.L201+1),a + ld b,a + dec hl + ld e,(hl) ; X-╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ex de,hl + ld (KList.L201+3),hl + ret + + ; ╨Ю╨║╨╜╨╛ ╨┤╨░╨╝╨┐╨░ +.L2 ld de,(KDUMP.KDump.Coordinate) ; ╤А╨░╤Б╤З╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ + ld hl,KDUMP.KDump.Descript+2 + ld b,e +.L99F7 + inc hl + inc hl + djnz .L99F7 + ld a,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ld (KDUMP.KDump.ESTR_LEN),a + ld b,a + dec hl + ld e,(hl) ; X-╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ex de,hl + ld (KDUMP.KDump.ESTR_POS),hl + ret + + ; ╨Ю╨║╨╜╨╛ ╤А╨╡╨│╨╕╤Б╤В╤А╨╛╨▓ +.L3 call KREG.KReg.DescCalc + ld d,b + ld b,e ; ╨║╨╛╨╗╨╛╨╜╨╛╨║╨░ ╨▓ ╤Б╤В╤А╨╛╨║╨╡ +.L9A0C + inc hl + inc hl + djnz .L9A0C + ld a,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ld (KREG.KReg.ESTR_LEN),a + ld b,a + dec hl + ld e,(hl) ; X-╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ex de,hl + ld (KREG.KReg.ESTR_POS),hl + ret + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╤И ╨▓ ╨╛╨║╨╜╨╡ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ +KList: + ld a,b ; ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ + and SHIFTS_MASK + jr z,.L100 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Alt + ╤Б╨╕╨╝╨▓╨╛╨╗ + cp ALT_FLAG ; + jr nz,.L10 + jp Keyb_L1 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Ctrl + ╤Б╨╕╨╝╨▓╨╛╨╗ +.L10 cp CTRL_FLAG ; + jp nz,Keyb_L1 + + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + cp SHIFTED_KEY+X_KEY ; + + jp nz,.L20 + + call AdrListTabl-3 ; ╨▓╤Л╨▒╨╛╤А╨║╨░ ╨░╨┤╤А╨╡╤Б╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ ╨┐╨╛ N ╤Б╤В╤А╨╛╨║╨╕ + ld (Reg._PC),hl + jp .NewLA1+3 + +.L20 ld a,b + cp CTRL_FLAG+RCTRL_FLAG ; ╨┐╤А╨░╨▓╤Л╨╣ + jr nz,.L21 + ld bc,.CtrlTabl + call AdrCtrlTabl ; ╨▓╤Л╨▒╨╛╤А╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓ ╤В╨░╨▒╨╗╨╕╤Ж╨╡ + jp nc,Keyb_L1 ; ╨╜╨╡ ╤Ж╨╕╤Д╤А╨╛╨▓╤Л╨╡ ╨║╨╗╨░╨▓╨╕╤И╨╕ + + ld a,(.Coordinate+1) + ld (bc),a ; ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + inc bc + call AdrListTabl ; ╨▓╤Л╨▒╨╛╤А╨║╨░ ╨░╨┤╤А╨╡╤Б╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ ╨┐╨╛ N ╤Б╤В╤А╨╛╨║╨╕ + ld a,l + ld (bc),a + inc bc + ld a,h + ld (bc),a + jp Keyb_L1 + +.L21 cp CTRL_FLAG+LCTRL_FLAG ; ╨╗╨╡╨▓╤Л╨╣ + jp nz,Keyb_L1 + + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + cp SHIFTED_KEY+AST_KEY ; Ctrl+"`" + jp nz,.L22 + + ld a,(.CtrlWin) + ld h,a + ld l,0 + add a,0x40 ; ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╡ ╨╛╨║╨╜╨╛ + ld (.CtrlWin),a + ld a,(.Descript+1) + ld (.Coordinate+1),a + jp .NewLA1 + +.L22 ld bc,.CtrlTabl + call AdrCtrlTabl ; ╨▓╤Л╨▒╨╛╤А╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓ ╤В╨░╨▒╨╗╨╕╤Ж╨╡ + jp nc,Keyb_L1 + + ld a,(bc) ; ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + or a + jp z,Keyb_L1 ; ╨╜╨╡╤В ╨┤╨░╨╜╨╜╤Л╤Е + + inc bc + ld a,(bc) + ld l,a + inc bc + ld a,(bc) + ld h,a ; ╨░╨┤╤А╨╡╤Б ╨╕╨╖ ╨▒╤Г╤Д╨╡╤А╨░ + jp .NewLA + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨┤╨░ +.L100 ld a,e ; ASCII ╨║╨╛╨┤ + ld (.L200+1),a + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + + ld de,(.Coordinate) ; ╤В╨╡╨║╤Г╤Й╨╕╨╡ ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨║╤Г╤А╤Б╨╛╤А╨░ + cp RIGHT_KEY ; + jr nz,.L101 + ld a,(.Descript+2) ; ╨║╨╛╨╗-╨▓╨╛ ╨║╨╛╨╗╨╛╨╜╨╛╨║ + cp e + ld a,e + jr nz,.L9AA5 + xor a +.L9AA5 + inc a + ld (.Coordinate),a ; ╤В╨╡╨║╤Г╤Й╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp Keyb_NC + +.L101 cp LEFT_KEY ; + jr nz,.L102 + ld a,e ; ╤В╨╡╨║╤Г╤Й╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + cp 1 + jr nz,.L9AB9 + ld a,(.Descript+2) ; ╨║╨╛╨╗-╨▓╨╛ ╨║╨╛╨╗╨╛╨╜╨╛╨║ + inc a +.L9AB9 + dec a + ld (.Coordinate),a ; ╤В╨╡╨║╤Г╤Й╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp Keyb_NC + +.L102 ld hl,(.Descript) + cp DN_KEY ; + jr nz,.L103 + ld a,d ; ╤В╨╡╨║╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ + cp l + jr nz,.L104 + ld hl,(ListAddr+2) ; ╨░╨┤╤А╨╡╤Б ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╕ + jp .NewLA1 +.L104 inc a + ld (.Coordinate+1),a + jp Keyb_NC + +.L103 cp UP_KEY ; + jr nz,.L105 + ld a,d ; ╤В╨╡╨║╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ + cp h + jr nz,.L107 + ld hl,(ListAddr) ; ╨░╨┤╤А╨╡╤Б ╨▓╨╡╤А╤Е╨╜╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + call UpAddress ; ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╕╨╣ ╨░╨┤╤А╨╡╤Б + jp .NewLA1 +.L107 dec a + ld (.Coordinate+1),a + jp Keyb_NC + +.L105 cp PGDN_KEY ; + jr nz,.L108 + ld a,d ; ╤В╨╡╨║╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ + cp l + jr nz,.L106 + call AdrListTabl + jp .NewLA1 +.L106 ld a,l ; ╨╜╨░ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╤О╤О ╤Б╤В╤А╨╛╨║╤Г + ld (.Coordinate+1),a + jp Keyb_NC + +.L108 cp PGUP_KEY ; + jr nz,.L110 + ld a,d ; ╤В╨╡╨║╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ + cp h + jr nz,.L109 + dec l ; ╨║╨╛╨╗-╨▓╨╛ ╤Б╤В╤А╨╛╨║ - 1 + ld b,l + ld hl,(ListAddr) ; ╨░╨┤╤А╨╡╤Б ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ +.L9B12 + push bc + call UpAddress ; ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╕╨╣ ╨░╨┤╤А╨╡╤Б + pop bc + djnz .L9B12 + jp .NewLA1 +.L109 ld a,h ; ╨╜╨░ ╨┐╨╡╤А╨▓╤Г╤О ╤Б╤В╤А╨╛╨║╤Г + ld (.Coordinate+1),a + jp Keyb_NC + +.L110 cp HOME_KEY ; + jr nz,.L111 + ld a,1 + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp Keyb_NC + +.L111 cp END_KEY ; + jr nz,.L200 + ld a,(.Descript+2) ; ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╤П╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp Keyb_NC + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ASCII ╨║╨╛╨┤╨╛╨▓ +.L200 ld a,0 + cp ENTER_KEY ; + jp nz,.NewPCAdr ; Keyb+6 +.L201 ld b,0 ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld hl,0 ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld a,(.Coordinate) + dec a ; ╨║╨╛╨╗╨╛╨╜╨║╨░ ╨░╨┤╤А╨╡╤Б╨░ + jr z,.InAdres + dec a ; ╨║╨╛╨╗╨╛╨╜╨║╨░ ╨╝╨╡╤В╨║╨╕ + jr z,.L2P5 + dec a ; ╨║╨╛╨╗╨╛╨╜╨║╨░ ╨║╨╛╨┤╨░ ╨║╨╛╨╝╨░╨╜╨┤╤Л + jr z,.InCode +.L2P5 + call InputLine + jp Keyb_NC +.NewPCAdr cp "z" ; + jp nz,Keyb_L1 + call AdrListTabl-3 ; ╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨╜╨╛╨▓╤Л╨╣ PC + ld (Reg._PC),HL + jp Keyb_RF +.InCode call InputLine ; ╨▓╨▓╨╛╨┤ ╨║╨╛╨┤╨░ ╨▓ 3 ╨║╨╛╨╗╨╛╨╜╨║╨╡ + jp c,Keyb_NC ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + call PutCode + jr c,.L201 ; ╨╛╤И╨╕╨▒╨║╨░ ╨▓ ╨▓╨╡╨┤╨╡╨╜╨╜╤Л╤Е ╨┤╨░╨╜╨╜╤Л╤Е + call AdrListTabl-3 ; ╨░╨┤╤А╨╡╤Б ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╕ + ld de,PutCode.Buffer +.L2M6 + ld a,(de) ; ╨╖╨░╨┐╨╕╤Б╤М ╨║╨╛╨┤╨░ ╨▓ ╨┐╨░╨╝╤П╤В╤М + call Ld_hl_a + inc de + inc hl + djnz .L2M6 + jr .NewLA2 + +.InAdres call InputLine ; ╨▓╨▓╨╛╨┤ ╨░╨┤╤А╨╡╤Б╨░ ╨▓ 1 ╨║╨╛╨╗╨╛╨╜╨║╨╡ + jp c,Keyb_NC ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + call PutAddress + jr c,.L201 ; ╨╛╤И╨╕╨▒╨║╨░ ╨▓ ╨▓╨╡╨┤╨╡╨╜╨╜╤Л╤Е ╨┤╨░╨╜╨╜╤Л╤Е + +.NewLA ld a,(.Coordinate+1) + dec a + jr z,.NewLA1 + ld b,a +.L9B95 + push bc + call UpAddress ; ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╕╨╣ ╨░╨┤╤А╨╡╤Б + pop bc + djnz .L9B95 +.NewLA1 ld (ListAddr),hl +.NewLA2 + jp Keyb_RF + +.CtrlWin db 0 ; ╨╛╨║╨╜╨╛ ╨┤╨╗╤П Ctrl+"`" +.CtrlTabl ds 30 ; ╨▒╤Г╤Д╤Д╨╡╤А ╨┤╨╗╤П ╨░╨┤╤А ╨▒╤Л╤Б╤В╤А ╨┐╨╡╤А╨╡╤Е╨╛╨┤╨░ +.Coordinate dw 0x0201 ; ╨║╤Г╤А╤Б╨╛╤А (╤Б╤В╤А/╨║╨╛╨╗ ╨║╤Г╤А╤Б╨╛╤А╨░) +.Descript: + dw 0x0114 ; ╨┐╨╡╤А╨▓╨░╤П/╨┐╨╛╤Б╨╗╨╡╨┤╨╜╤П╤П ╤Б╤В╤А╨╛╨║╨░ ╨╛╨║╨╜╨░ + db 4 ; ╨║╨╛╨╗-╨▓╨╛ ╨║╨╛╨╗╨╛╨╜╨╛╨║ + + db 0x1A ; N ╤Б╤В╨╛╨╗╨▒╤Ж╨░ ╨║╨╛╨╗╨╛╨╜╨║╨╕ + db 5 ; ╤И╨╕╤А╨╕╨╜╨░ ╨║╨╛╨╗╨╛╨╜╨║╨╕ + db 0x20 + db 14 + db 0x2F + db 8 + db 0x38 + db 22 + +;[]=========================================================================[] +;[] ╨Т╤Л╨▒╨╛╤А╨║╨░ ╨░╨┤╤А╨╡╤Б╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л [] +;[] ╨Т╤Л╤Е╨╛╨┤: HL - ╨░╨┤╤А╨╡╤Б ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ ╨▓ ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╡ [] +;[]=========================================================================[] + ld a,(KList.Coordinate+1) ; ╨╜╨╛╨╝╨╡╤А ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ +AdrListTabl: + dec a + add a,a ; *2 + ld e,a + ld d,0 + ld hl,ListAddr ; ╤В╨░╨▒╨╗╨╕╤Ж╨░ ╨░╨┤╤А╨╡╤Б╨╛╨▓ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + add hl,de ; ╤Б╤В╤А╨╛╨║╨░ ╨▓ ╤В╨░╨▒╨╗╨╕╤Ж╨╡ + ld a,(hl) + inc hl + ld h,(hl) + ld l,a ; ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ + ret + +;[]=========================================================================[] +;[] ╨Т╤Л╨▒╨╛╤А╨║╨░ ╨░╨┤╤А╨╡╤Б╨░ ╤Ж╨╕╤Д╤А╨╛╨▓╤Л╤Е ╨║╨╗╨░╨▓╨╕╤И ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л [] +;[] ╨Т╤Е╨╛╨┤: D - ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ ╤Ж╨╕╤Д╤А╨╛╨▓╨╛╨╣ ╨║╨╗╨░╨▓╨╕╤И╨╕ [] +;[] BC - ╨░╨┤╤А╨╡╤Б ╨╜╨░╤З╨░╨╗╨░ ╤В╨░╨▒╨╗╨╕╤Ж╤Л [] +;[] ╨Т╤Л╤Е╨╛╨┤: BC - ╨░╨┤╤А╨╡╤Б ╨▓ ╤В╨░╨▒╨╗╨╕╤Ж╨╡ [] +;[] ╨д╨╗╨░╨│ NC - ╨╜╨░╨╢╨░╤В╨░ ╨╜╨╡ ╤Ж╨╕╤Д╤А╨╛╨▓╨░╤П ╨║╨╗╨░╨▓╨╕╤И╨░ [] +;[]=========================================================================[] +AdrCtrlTabl: + ld a,d + and 01111111b ; ╤Б╨▒╤А╨╛╤Б ╤Б╤В╨░╤А╤И╨╡╨│╨╛ ╨▒╨╕╤В╨░ + dec a + dec a + cp 0x0A ; ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╤Ж╨╕╤Д╤А╨╛╨▓╤Л╤Е ╨║╨╗╨░╨▓╨╕╤И ╨▓╨╡╤А╤Е╨╜╨╡╨│╨╛ ╤А╤П╨┤╨░ + ret nc + or a + scf + ret z ; ╨▓╤Л╤Е╨╛╨┤, ╨╡╤Б╨╗╨╕ "0" +.L9BEA + inc bc + inc bc + inc bc + dec a + jr nz,.L9BEA + ret + +;[]=========================================================================[] +;[] ╨Я╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╡ ╨║╨╛╨┤╨░ ╨╕╨╖ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[] ╨Т╤Е╨╛╨┤: C - ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[] ╨Т╤Л╤Е╨╛╨┤: .Buffer - ╨╖╨░╤Е╨▓╨░╤З╨╡╨╜╨╜╤Л╨╡ ╨▒╨░╨╣╤В╤Л [] +;[] B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╨╖╨░╤Е╨▓╨░╤З╨╡╨╜╨╜╤Л╤Е ╨▒╨░╨╣╤В [] +;[] ╤Д╨╗╨░╨│ C - ╨╛╤И╨╕╨▒╨║╨░ [] +;[]=========================================================================[] +PutCode + ld de,InputLine.Buffer + ld hl,.Buffer + ld a,c + dec a + ret c ; ╨╜╤Г╨╗╨╡╨▓╨░╤П ╤Б╤В╤А╨╛╨║╨░ + inc a + srl a + ld b,a + jr z,.L3 ; ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨╛╨┤╨╜╨╛╨│╨╛ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ + ld c,a + ld a,0xC9 ; RET + jr nc,.L9C06 + xor a ; NOP +.L9C06 + ld (.L3_RET),a + +.L2 push hl + ld hl,0 + ld a,2 + call PutHex + ld a,l + pop hl + ret c ; ╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣ + ld (hl),a + inc hl + dec c + jr nz,.L2 + or a +.L3_RET ret + +.L3 inc b + push hl + ld hl,0 + ld a,1 + call PutHex + ld a,l + pop hl + ret c ; ╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣ + ld (hl),a + or a + ret + +.Buffer ds 4 + +;[]=========================================================================[] +;[] ╨Я╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╡ ╨░╨┤╤А╨╡╤Б╨░ ╨╕╨╖ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[] ╨Т╤Е╨╛╨┤: C - ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[] ╨Т╤Л╤Е╨╛╨┤: HL - ╤З╨╕╤Б╨╗╨╛ [] +;[] ╤Д╨╗╨░╨│ C - ╨╛╤И╨╕╨▒╨║╨░ [] +;[]=========================================================================[] +PutAddress + ld a,c + dec a + ret c ; ╨╜╤Г╨╗╨╡╨▓╨░╤П ╤Б╤В╤А╨╛╨║╨░ + ld de,InputLine.Buffer + ld hl,0 + ld a,(de) + call CapsLetter + cp "X" ; hex-╤З╨╕╤Б╨╗╨╛ + jr z,.L9C43 + cp "#" ; hex-╤З╨╕╤Б╨╗╨╛ +.L9C43 + ld a,c + jr nz,PutDec + inc de + inc de + dec a + dec a + ret c + inc a + +PutHex exa + ld a,(de) + call Numeric ; ╤Ж╨╕╤Д╤А╨░? + jr c,.L1 + call CapsLetter ; ╨╗╨░╤В.╨▒╤Г╨║╨▓╤Л ╨▓ ╨▓╨╡╤А╤Е╨╜╨╕╨╣ ╤А╨╡╨│╨╕╤Б╤В╤А + cp "F"+1 + ccf + ret c ; ╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣ + cp "A" + ret c ; ╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣ + sub 0x07 +.L1 sub 0x30 + add hl,hl ; *16 + add hl,hl + add hl,hl + add hl,hl + or l + ld l,a + inc de + inc de + exa + dec a + jr nz,PutHex + or a ; ╤Б╨▒╤А╨╛╤Б ╤Д╨╗╨░╨│╨░ C + ret + +PutDec exa + ld a,(de) + call Numeric ; ╤Ж╨╕╤Д╤А╨░? + ccf + ret c ; ╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╜╨╡╤В + ld c,l + ld b,h + add hl,hl ; *10 + add hl,hl + add hl,bc + add hl,hl + ld b,0 + sub 0x30 + ld c,a + add hl,bc + inc de + inc de + exa + dec a + jr nz,PutDec + or a ; ╤Б╨▒╤А╨╛╤Б ╤Д╨╗╨░╨│╨░ C + ret + +;[]=========================================================================[] +;[] ╨Я╤А╨╛╨▓╨╡╤А╨║╨░ ╨║╨╛╨┤╨░ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ ╨╜╨░ ╨┐╤А╨╕╨╜╨░╨┤╨╗╨╡╨╢╨╜╨╛╤Б╤В╤М ╨║ ╤Ж╨╕╤Д╤А╨░╨╝ (╨║╨╛╨┤╤Л 0x30...0x39) [] +;[] ╨Т╤Е╨╛╨┤: A - ╨║╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ [] +;[] ╨Т╤Л╤Е╨╛╨┤: ╤Д╨╗╨░╨│ C - ╤Ж╨╕╤Д╤А╨░; ╨д╨╗╨░╨│ NC - ╨╜╨╡ ╤Ж╨╕╤Д╤А╨░ [] +;[]=========================================================================[] +Numeric cp "0" + ccf + ret nc + cp 3Ah + ret + +;[]=========================================================================[] +;[] ╨Я╨╡╤А╨╡╨▓╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨╗╨░╤В╨╕╨╜╤Б╨║╨╛╨│╨╛ ╨░╨╗╤Д╨░╨▓╨╕╤В╨░ a...z ╨▓ ╨▓╨╡╤А╤Е╨╜╨╕╨╣ ╤А╨╡╨│╨╕╤Б╤В╤А [] +;[] ╨Т╤Е╨╛╨┤: A - ╨║╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ [] +;[] ╨Т╤Л╤Е╨╛╨┤: A - ╨║╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ ╨▓ ╨▓╨╡╤А╤Е╨╜╨╡╨╝ ╤А╨╡╨│╨╕╤Б╤В╤А╨╡ [] +;[]=========================================================================[] +CapsLetter cp "a" ; <"a" + ret c + cp "z"+1 ; >"z" + ret nc + and 11011111b ; ╨┐╤А╨╡╨╛╨▒╤А╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ + ret + +InputLine1 push hl + push bc + call CursorSet + pop bc + pop hl + jr InputLine + +;[]=========================================================================[] +;[] ╨Т╨▓╨╛╨┤ ╤Б╤В╤А╨╛╨║╨╕ ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╤Б ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л [] +;[] ╨Т╤Е╨╛╨┤: B - ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[] HL - ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨║╤Г╤А╤Б╨╛╤А╨░ [] +;[] ╨Т╤Л╤Е╨╛╨┤: ╤Д╨╗╨░╨│ C - ╤Д╨╗╨░╨│ NC - [] +;[] C - ╨┤╨╗╨╕╨╜╨░ ╨▓╨▓╨╡╨┤╨╡╨╜╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕, ╨╡╤Б╨╗╨╕ [] +;[]=========================================================================[] +InputLineEd + ld a,(Color.InLineEd) ; ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld c,a + xor a + jr InputLine+6 +InputLine + ld a,(Color.InLine) ; ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld c,a + ld a,On +.L0 + ld (.EntEnd),a + ld a,0xC3 ; ╨║╨╛╨┤ JP + ld (.L15),a + ld (CursPos),hl + ld (.Coordinate),hl + ld hl,.Pos + xor a ; ╤В╨╡╨║╤Г╤Й╨░╤П ╨┐╨╛╨╖╨╕╤Ж╨╕╤П + ld (hl),a + inc hl + ld (hl),c ; ╤Ж╨▓╨╡╤В + inc hl + ld (hl),b ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╤А╨╡╨┤╨░╨║╤В╨╕╤А╨╛╨▓╨░╨╜╨╕╤П + inc hl ; ╨╜╨░╤З╨░╨╗╨╛ ╨▒╤Г╤Д╨╡╤А╨░ ╤А╨╡╨┤╨░╨║╤В╨╕╤А╨╛╨▓╨░╨╜╨╕╤П + ld de,CursorSet.Buffer ; ╨▒╤Г╤Д╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ ╨┐╨╛╨┤ ╨║╤Г╤А╤Б╨╛╤А╨╛╨╝ + ;ld c,a ; ╨╛╨║╤А╨░╤Б╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ ╤А╨╡╨┤╨░╨║╤В╨╕╤А╨╛╨▓╨░╨╜╨╕╤П +.L1 ld a,(de) + ld (hl),a + inc hl + inc de + ld (hl),c + inc hl + inc de + djnz .L1 + + call .PrintInLine ; ╨╜╨░╨┐╨╡╤З╨░╤В╨░╤В╤М ╤Б╤В╤А╨╛╨║╤Г + ld a,(.EntEnd) + or a + call nz,.EndString ; ╨║╤Г╤А╤Б╨╛╤А ╨▓ ╨║╨╛╨╜╨╡╤Ж ╤Б╤В╤А╨╛╨║╨╕ + +.L100 ld a,On ; ╨▓╨║╨╗╤О╤З╨╕╤В╤М ╨┐╤А╨╛╨│╤А╨░╨╝ ╨║╤Г╤А╤Б╨╛╤А + ld (CursOnOff),a + ld hl,.L100 + push hl ; ╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░ +.L9CE7 + ld c,Dss.ScanKey ; ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л + rst DssRst + jr z,.L9CE7 + + cp 0x20 ; ╨╡╤Б╤В╤М ASCII-╨║╨╛╨┤ + jr c,.L3 + + push af + ld a,(.Pos) + exa + ld hl,.Color ; ╤В╨╡╨║╤Г╤Й╨╕╨╣ ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld a,(Color.InLine) + cp (hl) + call z,.ClearInLine + call z,.HomeString + call .NextPos ; ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ ╨▓ HL ╨░╨┤╤А╨╡╤Б .Pos + jr z,.L12 + ld a,(CursInsOvr) ; ╤А╨╡╨╢╨╕╨╝ Ins/Ovr + or a + jr nz,.L12 ; ╨┐╨╡╤А╨╡╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ Ovr + ld a,(.Len) + ld e,a + dec a ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ - 1 + add a,a + ld b,0 + ld c,a + ld d,(hl) ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨┐╨╡╤З╨░╤В╨╕ ╤Б╨╕╨╝╨▓╨╛╨╗╨░ + ld hl,.Buffer + add hl,bc ; ╨║╨╛╨╜╨╡╤Ж ╨▒╤Г╤Д╨╡╤А╨░ + inc hl + ld a,e + sub d ; ╨║╨╛╨╗-╨▓╨╛ ╤Б╨┤╨▓╨╕╨│╨░╨╡╨╝╤Л╤Е ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ + add a,a + ld c,a + ld d,h + ld e,l + dec hl + dec hl + lddr ; ╤А╨░╨╖╨┤╨▓╨╕╨╢╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ +.L12 exa + add a,a + ld b,0 + ld c,a + ld hl,.Buffer + add hl,bc ; ╨░╨┤╤А╨╡╤Б ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡ + pop af + ld (hl),a ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨▓ ╨▒╤Г╤Д╨╡╤А + call ResCurs +.L15 jp .PrintInLine + jr .L14 + +.L3 cp ESC_KEY ; + jr nz,.L13 + call ResCurs + pop hl ; ╨▓╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨╡╨║ + scf + ret + +.L13 cp ENTER_KEY ; + jr nz,.L2 + ld a,On + ld (.EntEnd),a + call ResCurs +.L14 pop hl ; ╨▓╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨╡╨║ + call .EndPos ; ╨┤╨╗╨╕╨╜╨░ ╨▓╨▓╨╡╨┤╨╡╨╜╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ + ret + +.L2 ld a,d + cp DEL_KEY ; + jr nz,.L9 + call ResCurs + ld hl,.Color ; ╤В╨╡╨║╤Г╤Й╨╕╨╣ ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld a,(Color.InLine) + cp (hl) + call z,.ClearInLine +.L11 ld hl,.Pos + ld a,(hl) ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ + add a,a + ld e,a + inc hl + inc hl + ld a,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ + dec a + add a,a + sub e ; ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨║╨╛╨╜╤Ж╨░ ╤Б╤В╤А╨╛╨║╨╕ + ld c,a + ld b,0 + ld d,b + inc hl ; ╨╜╨░╤З╨░╨╗╨╛ ╨▒╤Г╤Д╨╡╤А╨░ + add hl,de ; ╨░╨┤╤А╨╡╤Б ╨║╤Г╤А╤Б╨╛╤А╨░ + push hl + pop de + inc hl + inc hl + jr z,.L9D80 ; ╨╡╤Б╨╗╨╕ ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╤Б╤В╤А╨╛╨║╨╕ + ldir +.L9D80 + ld a," " + ld (de),a ; ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ + jp .PrintInLine + +.L9 cp BKSP_KEY ; + jr nz,.L10 + call ResCurs + call .ColorInLine ; ╤Б╨╝╨╡╨╜╨╕╤В╤М ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ + ld hl,.Pos + ld a,(hl) ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ + or a + jp z,.PrintInLine ; ╨╡╤Б╨╗╨╕ ╨▓ ╨╜╨░╤З╨░╨╗╨╡ ╤Б╤В╤А╨╛╨║╨╕ + dec (hl) ; ╤Г╨╝╨╡╨╜╤М╤И╨╕╤В╤М ╨┐╨╛╨╖╨╕╤Ж╨╕╤О + ld hl,CursPos + dec (hl) ; ╨║╤Г╤А╤Б╨╛╤А ╨▓╨╗╨╡╨▓╨╛ + jr .L11 + +.L10 cp INS_KEY ; + jr nz,.L5 + ld a,(CursInsOvr) + cpl + ld (CursInsOvr),a + ret + +.L5 cp RIGHT_KEY ; + jr nz,.L6 + call ResCurs + call .ColorInLine ; ╤Б╨╝╨╡╨╜╨╕╤В╤М ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ + call z,.PrintInLine + call .EndPos + ret z + ld a,(.Pos) + cp c + ret nc + jp .NextPos + +.L6 cp LEFT_KEY ; + jr nz,.L7 + call ResCurs + call .ColorInLine ; ╤Б╨╝╨╡╨╜╨╕╤В╤М ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ + call z,.PrintInLine + ld hl,.Pos ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ + ld a,(hl) + or a + ret z + dec (hl) + ld hl,CursPos ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨┐╤А╨╛╨│╤А╨░╨╝ ╨║╤Г╤А╤Б╨╛╤А╨░ + dec (hl) + ret + +.L7 cp HOME_KEY ; + jr nz,.L8 + call ResCurs + call .ColorInLine ; ╤Б╨╝╨╡╨╜╨╕╤В╤М ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ + call z,.PrintInLine +.HomeString ld hl,.Pos ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ + ld a,(hl) + or a + ret z + ld a,(.Coordinate) ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨╜╨░╤З╨░╨╗╨░ ╤Б╤В╤А╨╛╨║╨╕ + ld (CursPos),a + xor a + ld (hl),a ; ╨╛╨▒╨╜╤Г╨╗╨╕╤В╤М ╨┐╨╛╨╖╨╕╤Ж╨╕╤О ╨┐╨╡╤З╨░╤В╨╕ + ret + +.L8 cp END_KEY ; + ret nz + call ResCurs + call .ColorInLine ; ╤Б╨╝╨╡╨╜╨╕╤В╤М ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ + call z,.PrintInLine +.EndString call .EndPos + ret z + ld a,(.Len) +; dec a ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ - 1 + sub c ; ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜╨░ ╨┐╨╛╨╗╨╜╨╛╤Б╤В╤М╤О? + jr nz,.L9E10 + dec c +.L9E10 + ld hl,.Pos + ld (hl),c ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╤Б╤В╤А╨╛╨║╨╕ + ld a,(.Coordinate) + add a,c + ld (CursPos),a ; ╨╜╨╛╨▓╨░╤П ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨┐╤А╨╛╨│╤А╨░╨╝ ╨║╤Г╤А╤Б╨╛╤А╨░ + ret + +.PrintInLine + ld ix,.Buffer ; ╨▒╤Г╤Д╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ + ld a,(.Len) + ld l,a + ld h,1 ; ╤А╨░╨╖╨╝╨╡╤А╤Л ╨▒╤Г╤Д╨╡╤А╨░ + ld de,(.Coordinate) ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨▓ ╤Н╨║╤А╨░╨╜╨╡ + IFDEF D_PRINTCH_BIOS + xor a + ld c,Bios.Win_Restore_Win ;╨▓╤Л╨▓╨╛╨┤ ╨▒╤Г╤Д╨╡╤А╨░ ╨╜╨░ ╤Н╨║╤А╨░╨╜ + di + rst BiosRst + ei + ELSE + ld a,(BankDebug) + ld b,a + ld c,Dss.WinRest + rst DssRst + ENDIF + ret + +.ClearInLine + ld hl,.Len ; ╨╛╤З╨╕╤Б╤В╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld b,(hl) ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld a," " ; ╨┐╤А╨╛╨▒╨╡╨╗ +.L9E38 + inc hl ; ╨╜╨░╤З╨░╨╗╨╛ ╨▒╤Г╤Д╨╡╤А╨░ ╤Б╤В╤А╨╛╨║╨╕ + ld (hl),a + inc hl + djnz .L9E38 + xor a ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨┐╨╡╤З╨░╤В╨╕ + ld (.Pos),a + exa + ld a,(.Coordinate) + ld (CursPos),a + jr .L9E52 + +.ColorInLine + ld hl,.Color ; ╨╛╨║╤А╨░╤Б╨║╨░ ╨▓ ╨╛╤Б╨╜╨╛╨▓╨╜╨╛╨╣ ╤Ж╨▓╨╡╤В + ld a,(Color.InLine) + cp (hl) + ret nz +.L9E52 + ld a,(Color.InLineEd) ; ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld (.Color),a + ld hl,.Len ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + ld b,(hl) + inc hl +.L9E5D + inc hl + ld (hl),a + inc hl + djnz .L9E5D + ret + +.EndPos ld hl,.Buffer ; ╨┐╨╛╨╕╤Б╨║ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ ╨┐╨╛╤Б╨╗╨╡╨┤. ╤Б╨╕╨╝╨▓╨╛╨╗╨░ + ld a,(.Len) + ld c,a + dec a + add a,a + ld e,a + ld d,0 + add hl,de +.L9E70 + ld a,(hl) + dec hl + dec hl + cp " " ; ╨╕╤Й╨╡╨╝ ╨║╨╛╨╜╨╡╤Ж ╤Б╤В╤А╨╛╨║╨╕ + ret nz + dec c + jr nz,.L9E70 + ret + +.NextPos ld hl,.Pos ; ╤А╨░╤Б╤З╨╡╤В ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╣ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ + ld a,(.Len) + dec a + cp (hl) + jr nz,.L16 + ld a,(.EntEnd) ; ╨╖╨░╨║╨░╨╜╤З╨╕╨▓╨░╤В╤М ╨┐╨╛ ENTER + inc a + ret z ; ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╤П╤П ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨▓ ╤Б╤В╤А╨╛╨║╨╡ + ld a,0xCD ; ╨║╨╛╨┤ CALL + ld (.L15),a + ret +.L16 inc (hl) ; ╤Г╨▓╨╡╨╗╨╕╤З╨╡╨╜╨╕╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ + ld a,(CursPos) ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨┐╤А╨╛╨│╤А╨░╨╝ ╨║╤Г╤А╤Б╨╛╤А╨░ + inc a + ld (CursPos),a + ret + +;[]=========================================================================[] +;[] ╨Ъ╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨╕╨╖ ╨▒╤Г╤Д╨╡╤А╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[]=========================================================================[] +;╨Т╤Е╨╛╨┤: +;DE - ╨░╨┤╤А╨╡╤Б ╨╜╨░╨╖╨╜╨░╤З╨╡╨╜╨╕╤П +;C - ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ + +.FromBuffer ld hl,.Buffer + ld b,0 +.FB1 ld a,(hl) + ld (de),a + inc hl + inc hl + inc de + dec c + jr nz,.FB1 + ret + +;[]=========================================================================[] +;[] ╨Ъ╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨▓ ╨▒╤Г╤Д╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ [] +;[]=========================================================================[] +;╨Т╤Е╨╛╨┤: +;HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕ +;C - ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ + +.ToBuffer + ld de,.Buffer +.TB1 ld a,(hl) + ld (de),a + inc de + inc de + inc hl + dec c + jr nz,.TB1 + ret + +.EntEnd DB On ; ╤Д╨╗╨░╨│ ╨╛╨║╨╛╨╜╤З╨░╨╜╨╕╤П ╤Б╤В╤А╨╛╨║╨╕ ENTER +.Coordinate DW 0 ; ╨╜╨░╤З╨░╨╗╨╛ ╤Б╤В╤А╨╛╨║╨╕ ╨▓ ╤Н╨║╤А╨░╨╜╨╡ +; ╨Я╨╛╤Б╨╗╨╡╨┤╨╛╨▓╨░╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╤М ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е ╨╜╨╡ ╨╕╨╖╨╝╨╡╨╜╤П╤В╤М! +.Pos DB 0 ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ ╨▓ ╤Б╤В╤А╨╛╨║╨╡ +.Color DB 0 ; ╤Ж╨▓╨╡╤В ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ +.Len DB 0 ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ +.Buffer DS 22*2 ; ╨▒╤Г╤Д╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + +;[]=========================================================================[] +;[] ╨Я╤А╨╛╨│╤А╨░╨╝╨╝╨╜╨╛╨╡ ╤Б╨╛╨╖╨┤╨╜╨╕╨╡ ╨╝╨╕╨│╨░╤О╤Й╨╡╨│╨╛ ╨║╤Г╤А╤Б╨╛╤А╨░ [] +;[]=========================================================================[] + +;======== ╨Я╨╛╨┤╨│╨╛╤В╨╛╨▓╨║╨░ ╨┤╨╛╨┐╨╛╨╗╨╜╨╕╤В╨╡╨╗╤М╨╜╨╛╨│╨╛ ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А╨░ ======== +PreparChar + ld de,OrgAdr-0x100 ; ╨▒╤Г╤Д╨╡╤А ╨┤╨╗╤П 2kB ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А╨░ + ld c,Bios.Win_Get_ZG ; ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╤Б╨╕╤Б╤В. ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А + rst BiosRst + ld hl,OrgAdr-0x100+7*256 + ld bc,0x00FF +.L9EF0 + ld (hl),c + inc hl + djnz .L9EF0 + + ld de,OrgAdr-0x100 ; ╤Г╤Б╤В.╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А 0x5B + ld c,Bios.Win_Set_ZG + ld a,0x5B + rst BiosRst + + ld hl,(0039h) ; ╤Г╤Б╤В╨░╨╜╨╛╨▓╨║╨░ ╨▓╨╡╨║╤В╨╛╤А╨░ (╨┤╨╗╤П ╨╝╨╕╨│╨░╨╜╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░) + ld (Rst38.Vect+1),hl + ld hl,Rst38 + ld (0039h),hl + ret + +Rst38 di ; ╨▓╨╡╨║╤В╨╛╤А ╨║╤Г╤А╤Б╨╛╤А╨░ + push iy + push ix + push hl + push de + push bc + push af + exx + exa + push hl + push de + push bc + push af + call Clock + ld a,(CursOnOff) + or a + call nz,CuttingCurs + pop af + pop bc + pop de + pop hl + exx + exa + pop af + pop bc + pop de + pop hl + pop ix + pop iy +.Vect jp 0x0000 ; ╨░╨┤╤А╨╡╤Б ╤Б╨╕╤Б╤В. ╨▓╨╡╨║╤В╨╛╤А╨░ RST 38 + +;======== ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╜╨╛╨│╨╛ ╨║╤Г╤А╤Б╨╛╤А╨░ ======== +CuttingCurs + ld a,(TimerFlash) ; ╨┐╨░╤Г╨╖╨░ ╨╝╨╕╨│╨░╨╜╨╕╤П + dec a + call z,.L1 + ld (TimerFlash),a + ret + +.L1 ld a,(CursPutRes) + cpl + ld (CursPutRes),a + + ld de,(CursPos) + ld (ResCurs.L1+1),de + or a ; ╤Д╨╗╨░╨│ Put / Res + jr z,.L3 ; ╤Г╤Б╤В╨░╨╜╨╛╨▓╨║╨░ ╨║╤Г╤А╤Б╨╛╤А╨░ + ; ╨╕╨╜╨░╤З╨╡ ╤Б╨▒╤А╨╛╤Б ╨║╤Г╤А╤Б╨╛╤А╨░ + ld hl,(CursSymb) ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨╕ ╨╡╨│╨╛ ╤Ж╨▓╨╡╤В + sub a ; ╤Б╨▒╤А╨╛╤Б id ╨╛╨║╨╜╨░ + ld b,SysSymb ; ╤Б╨╕╤Б╤В╨╡╨╝╨╜╤Л╨╣ ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А + ld c,Bios.Win_Put_Sym ; ╨┐╨╛╨╗╨╛╨╢╨╕╤В╤М ╤Б╨╕╨╝╨▓╨╛╨╗ + rst BiosRst + ld a,PauseFlash ; ╨┐╨░╤Г╨╖╨░ ╨╝╨╕╨│╨░╨╜╨╕╤П + ret + +.L3 ld c,Bios.Win_Get_Sym ; ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╤Б╨╕╨╝╨▓╨╛╨╗ + sub a ; ╤Б╨▒╤А╨╛╤Б id ╨╛╨║╨╜╨░ + rst BiosRst + ld (CursSymb),hl ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨╕ ╨╡╨│╨╛ ╤Ж╨▓╨╡╤В + + ld de,(CursPos) ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨┐╨╡╤З╨░╤В╨╕ + ld a,(CursInsOvr) ; ╤Д╨╗╨░╨│ ╤А╨╡╨╢╨╕╨╝╨░ Ins / Ovr + or a + jr z,.L4 ; ╤А╨╡╨╢╨╕╨╝ ╨▓╤Б╤В╨░╨▓╨║╨╕ + ; ╨╕╨╜╨░╤З╨╡ ╤А╨╡╨╢╨╕╨╝ ╨╖╨░╨╝╨╡╨╜╤Л + ld a,h + rlca + rlca + rlca + rlca + ld h,a + sub a ; ╤Б╨▒╤А╨╛╤Б id ╨╛╨║╨╜╨░ + ld b,SysSymb ; ╤Б╨╕╤Б╤В╨╡╨╝╨╜╤Л╨╣ ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А +; ld l,0xDC ; ╨║╤Г╤А╤Б╨╛╤А ╤А╨╡╨╢╨╕╨╝╨░ ╨╖╨░╨╝╨╡╨╜╤Л + ld c,Bios.Win_Put_Sym ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨╜╨░ ╤Н╨║╤А╨░╨╜ + rst BiosRst + ld a,PauseFlash ; ╨┐╨░╤Г╨╖╨░ ╨╝╨╕╨│╨░╨╜╨╕╤П + ret + +.L4 sub a ; ╤Б╨▒╤А╨╛╤Б id ╨╛╨║╨╜╨░ + ld b,0x5B ; ╨╝╨╛╨┤╨╕╤Д. ╨╖╨╜╨░╨║╨╛╨│╨╡╨╜╨╡╤А╨░╤В╨╛╤А + ld c,Bios.Win_Put_Sym ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨╜╨░ ╤Н╨║╤А╨░╨╜ + rst BiosRst + ld a,PauseFlash ; ╨┐╨░╤Г╨╖╨░ ╨╝╨╕╨│╨░╨╜╨╕╤П + ret + +;======== ╨Я╤А╨╕╨╜╤Г╨┤╨╕╤В╨╡╨╗╤М╨╜╤Л╨╣ ╤Б╨▒╤А╨╛╤Б ╨║╤Г╤А╤Б╨╛╤А╨░ ======== +ResCurs ld a,(CursOnOff) + or a + ret z ; ╨║╤Г╤А╤Б╨╛╤А ╨╜╨╡ ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜ + push hl + ld a,On + ld (CursPutRes),a + inc a + ld (CursOnOff),a + ld a,1 ; ╨┐╨░╤Г╨╖╨░ ╨╝╨╕╨│╨░╨╜╨╕╤П + ld (TimerFlash),a +.L1 ld de,0 ; ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨║╤Г╤А╤Б╨╛╤А╨░ + ld hl,(CursSymb) + ld bc,0x1B00+Bios.Win_Put_Sym + sub a ; ╤Б╨▒╤А╨╛╤Б╨╕╤В╤М id ╨╛╨║╨╜╨░ + rst BiosRst + pop hl + ret + +CursOnOff db Off ; ╤Д╨╗╨░╨│ ╨║╤Г╤А╤Б╨╛╤А╨░ 00-╨▓╤Л╨║╨╗/FF-╨▓╨║╨╗ +CursPutRes db On ; ╤Д╨╗╨░╨│ 00-Res/FF-Put +CursInsOvr db Ins ; ╤Д╨╗╨░╨│ 00-Ins/FF-Ovr +TimerFlash db 1 ; ╤В╨░╨╣╨╝╨╡╤А +CursPos dw 0 ; ╨┐╨╛╨╖╨╕╤Ж╨╕╤П ╨║╤Г╤А╤Б╨╛╤А╨░ +CursSymb dw 0 ; ╤Б╨╕╨╝╨▓╨╛╨╗ ╨┐╨╛╨┤ ╨║╤Г╤А╤Б╨╛╤А╨╛╨╝ + + ENDMODULE \ No newline at end of file diff --git a/kreg.asm b/kreg.asm new file mode 100644 index 0000000..17c86d5 --- /dev/null +++ b/kreg.asm @@ -0,0 +1,477 @@ +;[]=========================================================================[] +;[] ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л ╨▓ ╨╛╨║╨╜╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨╛╨▓ [] +;[] v0.03 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 11.03.2006 [] +;[] v0.10 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 14.05.2006 [] +;[]=========================================================================[] + MODULE KREG +KReg +; ld a,b ;╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ +; and 0b11110000 +; jr z,.L100 + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Shift + ╤Б╨╕╨╝╨▓╨╛╨╗ +; and 0b11000000 ; +; 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + jr nz,.L111 + ld a,1 + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp KEYB.Keyb_NC + +.L111 cp END_KEY ; + jr nz,.L200 + call .DescCalc + ld a,(hl) ; ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╤П╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + ld (.Coordinate),a ; ╨┐╨╡╤А╨▓╨░╤П ╨║╨╛╨╗╨╛╨╜╨║╨░ + jp KEYB.Keyb_NC + +;.L112 cp 0x0F ; +; jr nz,.L200 +; ld a,4 ; ╨╜╨╛╨╝╨╡╤А ╨╛╨║╨╜╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ +; ld (Keyb.WinScreen),a +; jp Keyb_NC + + ; ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ASCII ╨║╨╛╨┤╨╛╨▓ +.L200 +.ASC_COD+* ld a,0 ; ASCII ╨║╨╛╨┤ + cp ENTER_KEY ; + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 \ No newline at end of file diff --git a/kstack.asm b/kstack.asm new file mode 100644 index 0000000..2483ac7 --- /dev/null +++ b/kstack.asm @@ -0,0 +1,215 @@ +;[]=========================================================================[] +;[] ╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л ╨▓ ╨╛╨║╨╜╨╡ ╨┤╨░╨╝╨┐╨░ ╤Б╤В╨╡╨║╨░ [] +;[] v0.10 - ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П 18.03.2006 [] +;[]=========================================================================[] +KStack: + ld a,b ;╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ + and SHIFTS_MASK +; ld b,a + jr z,.L100 + + ;╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╛╨╝╨▒╨╕╨╜╨░╤Ж╨╕╨╕ Shift + ╤Б╨╕╨╝╨▓╨╛╨╗ +; and 11000000b ; +; 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 ; + jp nz,KEYB.Keyb_L1 + ld a,d ; ╨┐╨╛╨╖╨╕╤Ж╨╕╨╛╨╜╨╜╤Л╨╣ ╨║╨╛╨┤ + cp SHIFTED_KEY+X_KEY ; + + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + 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 ; + jr nz,.L200 + ld a,6 + ld (PrintStrSP.StrSp),a ; ╤Б╤В╤А╨╛╨║╨░ ╨▓╨╡╤А╤И.╤Б╤В╨╡╨║╨░ + jp KEYB.Keyb_RF + +;.L111 cp 0x0F ; +; jr nz,.L200 +; ld a,1 ; ╨╜╨╛╨╝╨╡╤А ╨╛╨║╨╜╨░ ╨╗╨╕╤Б╤В╨╕╨╜╨│╨░ +; ld (Keyb.WinScreen),a +; jp KEYB.Keyb_NC + + ;╨Ю╨▒╤А╨░╨▒╨╛╤В╨║╨░ ASCII ╨║╨╛╨┤╨╛╨▓ +.L200 ld a,0 ; ASCII ╨║╨╛╨┤ + cp 0x0D ; + jp nz,KEYB.Keyb_L1 +.L201 +.ESTR_LEN+* ld b,0 ; ╨┤╨╗╨╕╨╜╨░ ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ +.ESTR_POS+* ld hl,0 ; ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╤Б╤В╤А╨╛╨║╨╕ ╨▓╨▓╨╛╨┤╨░ + call KEYB.InputLine ; ╨▓╨▓╨╛╨┤ ╤З╨╕╤Б╨╗╨░ + jp c,KEYB.Keyb_NC ; ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╨╡ ╨▓╨▓╨╛╨┤╨░ ╨┐╨╛ + 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 + diff --git a/loadbin.asm b/loadbin.asm index 7d2ea23..a8f7cfe 100644 --- a/loadbin.asm +++ b/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 \ No newline at end of file + 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 \ No newline at end of file diff --git a/make.sh b/make.sh new file mode 100755 index 0000000..01bf169 --- /dev/null +++ b/make.sh @@ -0,0 +1,2 @@ +#! /bin/bash +sjasmplus --sld=demon.sld --sym=demon.labels --raw=demon.exe --fullpath demon.asm diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..2ad9530 --- /dev/null +++ b/readme.md @@ -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. diff --git a/readme.txt b/readme.txt deleted file mode 100644 index 77b80f1..0000000 --- a/readme.txt +++ /dev/null @@ -1,26 +0,0 @@ -╠юэшЄюЁ-юЄырфўшъ DemoN by Alpha Studio ё эхсюы№°шьш фюЁрсюЄърьш Hard/WCG - -DemoN v.0.11 - -b0003 20.02.2011 -+ ╧ю ъэюяъх PC яЁшётрштрхЄё  рфЁхё, эр ъюЄюЁюь єёЄрэютыхэ ъєЁёюЁ. - -+ ─юсртшы фшрыюу Load BIN-file, эю х∙х эх фютхы хую фю єьр. - -b0002 19.02.2011 -* ╚чьхэшы яЁюЎхфєЁ√ яхўрЄш ш яЁюЁшёютъш ъєЁёюЁр фы  ЁрсюЄ√ ўхЁхч DSS, Є.ъ. эр ¤ьєы ЄюЁх Demon эх -яюыэюЎхээю ЁрсюЄрхЄ. - -+ яЁш ёЄрЁЄх чряюьшэрхь Єхъє∙шщ Ёхцшь ¤ъЁрэр ш яЁш т√їюфх - тюёёЄрэртыштрхь. - -+ ёюїЁрэ хь т сєЇхЁ шэЇє ¤ъЁрэр ╬╤ш, хёыш ¤ъЁрэ фхьюэр эрїюфшЄё  эр Єющ цх ёЄЁрэшЎх, -яЁш т√їюфх - тюёёЄрэртыштрхь - -* шчьхэхэр ╧/╧ яЁюёьюЄЁр фЁєуюую ¤ъЁрэр, ЄхяхЁ№ юэр ё єўхЄюь Єюую, ўЄю фхьюэ ш ╬╤ ьюуєЄ с√Є№ эр юфэюь ¤ъЁрэх - -* шчьхэхэ юсЁрч "эхяхўрЄрхьюую" ёшьтюыр - -+ фюсртшы ╧╧ яЁюЁшёютъш юъюэ ш юсЁрсюЄъш фшрыюуют - эр сєфє∙хх - -b0001 18.02.2011 -* ╧хЁхфхыры шёїюфэшъ яюф ъЁюёёрёёхьсыхЁ sjasmplus. \ No newline at end of file diff --git a/rez.asm b/rez.asm new file mode 100644 index 0000000..2d85dd6 --- /dev/null +++ b/rez.asm @@ -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 + diff --git a/savescr.asm b/savescr.asm new file mode 100644 index 0000000..4f3b573 --- /dev/null +++ b/savescr.asm @@ -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" + diff --git a/sim/ports.js b/sim/ports.js new file mode 100644 index 0000000..9287bb0 --- /dev/null +++ b/sim/ports.js @@ -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; + } +} + diff --git a/step.asm b/step.asm new file mode 100644 index 0000000..7638786 --- /dev/null +++ b/step.asm @@ -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 \ No newline at end of file diff --git a/TABL.ASM b/tabl.asm similarity index 97% rename from TABL.ASM rename to tabl.asm index c12230f..18835bb 100644 --- a/TABL.ASM +++ b/tabl.asm @@ -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 diff --git a/UTIL.ASM b/util.asm similarity index 51% rename from UTIL.ASM rename to util.asm index ea75027..342e192 100644 --- a/UTIL.ASM +++ b/util.asm @@ -1,36 +1,36 @@ ;[]=========================================================================[] -;[] Подпрограммы-утилиты монитора-отладчика 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 ;[]=========================================================================[] -;[] Печать строки символов [] -;[] Вход: 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 ;[]=========================================================================[] -;[] Печать двухбайтового числа [] -;[] Вход: 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" ;[]=========================================================================[] -;[] Печать значения регистровой пары 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" ;[]=========================================================================[] -;[] Печать значений регистровых пар с адресуемыми байтами [] -;[] Вход: 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" ;[]=========================================================================[] -;[] Печать номеров банок в окнах [] -;[] Вход: 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 ;[]=========================================================================[] -;[] Печать глубины стека [] +;[] ╨Я╨╡╤З╨░╤В╤М ╨│╨╗╤Г╨▒╨╕╨╜╤Л ╤Б╤В╨╡╨║╨░ [] ;[]=========================================================================[] 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 ;[]=========================================================================[] -;[] Печать значений стека [] +;[] ╨Я╨╡╤З╨░╤В╤М ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╣ ╤Б╤В╨╡╨║╨░ [] ;[]=========================================================================[] 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 ;[]=========================================================================[] -;[] Печать дампа [] +;[] ╨Я╨╡╤З╨░╤В╤М ╨┤╨░╨╝╨┐╨░ [] ;[]=========================================================================[] 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 ;[]=========================================================================[] -;[] Печать строки дампа [] -;[] Вход: 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 ;[]=========================================================================[] -;[] Прорисовка курсора [] -;[] Вход: 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 diff --git a/windows.asm b/windows.asm index 2f40c3c..94fe957 100644 --- a/windows.asm +++ b/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 ; - 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 ; - jr nz,.Lp5 -.LpUp ld a,(SelectedItem) - and a - jr z,.Lp2 - dec a - jr .Lp4 -.Lp5 cp #54 ; - jr z,.LpUp - cp #56 ; - 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 ; + 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 ; + jr nz,.Lp5 +.LpUp ld a,(SelectedItem) + and a + jr z,.Lp2 + dec a + jr .Lp4 +.Lp5 cp LEFT_KEY ; + jr z,.LpUp + cp RIGHT_KEY ; + jr z,.LpDn .LpAscii - ld a,e ;ASCII - ъюф - cp #0D ; - 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 ; + 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 \ No newline at end of file + DB 0xC9,0xBB,0xBC,0xC8,0xCD,0xBA