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