Ввод строки символов с клавиатуры
Материал из SpeccyWiki
Ввод строки символов с клавиатуры - процедура опроса клавиатуры при вводе пользователем символьной ASCII-строки и вывод строки на экран. Символ курсора - нижнее подчеркивание. Реализовано также удаление последнего введенного символа клавишей BackSpace. При выводе символов строки на экран использована процедура вывода 64 символа в строке.
; чтение строки символов, введенных с клавиатуры
; вход: нет
; выход: (string_temp)=строка
read_key_string ld e,1
ld d,95
ld (string_temp),de
ld hl,string_temp
ld de,string_temp+1
ld bc,(col_screen)
ld (col_screen_temp),bc
ld a,(half_tile_screen)
ld (half_tile_screen_temp),a
push hl
push de
call print64
pop de
pop hl
read_key_string_01 xor a
ld (23560),a
read_key_string_02 ld a,(23560)
and a
jp z,read_key_string_02
ld b,a
cp 13
jp z,read_key_string_06
cp 12
jp nz,read_key_string_04
ld a,(hl)
cp 1
jp z,read_key_string_01
ld a,32
ld (de),a
ld bc,(col_screen_temp)
ld (col_screen),bc
ld a,(half_tile_screen_temp)
ld (half_tile_screen),a
push hl
push de
call print64
pop de
pop hl
dec (hl)
ld a,95
dec de
ld (de),a
jp read_key_string_05
read_key_string_04 cp 32
jp c,read_key_string_01
ld a,(hl)
cp 254
jp nc,read_key_string_01
ld a,b
cp 97
jp c,read_key_string_03
sub a,32
read_key_string_03 ld (de),a
inc de
ld a,95
ld (de),a
inc (hl)
read_key_string_05 ld bc,(col_screen_temp)
ld (col_screen),bc
ld a,(half_tile_screen_temp)
ld (half_tile_screen),a
push hl
push de
call print64
pop de
pop hl
jp read_key_string_01
read_key_string_06 ld a,32
ld (de),a
ld bc,(col_screen_temp)
ld (col_screen),bc
ld a,(half_tile_screen_temp)
ld (half_tile_screen),a
push hl
call print64
pop hl
dec (hl)
ret
string_temp defb 0 ; промежуточная переменная-строка (первый байт - длина строки, 255 байт - коды символов строки)
dup 255
defb 32
edup
col_screen defb 0 ; столбец экрана
row_screen defb 0 ; строка экрана
half_tile_screen defb 0 ; полузнакоместо (0=первое/1=второе)
attr_screen defb 56 ; атрибуты экрана
col_screen_temp defw 0 ; временные координаты на экране
half_tile_screen_temp defb 0 ; временное полузнакоместо