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