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