Пришла в голову идея вызвать процедуру ввода текста ROM. Открыл дизассемблер с комментариями и получился некий код. Один недостаток - на экране появлялся мусор и никакой реакции:
org $6000 ;compile with pasmo
start
ld a,1
call $1601
LD (IY+$02),$01;Signal that the lower screen is being handled (set bit 0 of TV-FLAG and reset all other bits).
SET 7,(IY+$37);Signal 'using INPUT LINE' (set bit 7 of FLAGX).
ld hl,$5c71
res 6,(hl)
set 5,(hl)
ld hl,buf
ld ($5C5B),hl
;215E
call $0F2C
jr $
buf
db $0D
end start
start
ld a,1
call $1601
LD (IY+$02),$01;Signal that the lower screen is being handled (set bit 0 of TV-FLAG and reset all other bits).
SET 7,(IY+$37);Signal 'using INPUT LINE' (set bit 7 of FLAGX).
ld hl,$5c71
res 6,(hl)
set 5,(hl)
ld hl,buf
ld ($5C5B),hl
;215E
call $0F2C
jr $
buf
db $0D
end start
Решение подсказали на форуме ZXDB - нужно было вызвать rst $30 для отведения одного байта памяти. Только не удалось ограничить размер памяти для ввода текста. И после ввода текста в памяти остался сам текст. Поэтому после обработки данных нужен вызов еще одной процедуры:
org $6000
start
CALL $0D6E;CLS_LOWER
ld a,1
call $1601
LD (IY+$02),$01;Signal that the lower screen is being handled (set bit 0 of TV-FLAG and reset all other bits).
SET 7,(IY+$37);Signal 'using INPUT LINE' (set bit 7 of FLAGX).
ld hl,$5c71
res 6,(hl)
set 5,(hl)
ld bc,1
rst $30
ld (hl),$0D
ld ($5C5B),hl
;215E
push hl
call $0F2C
CALL $0D6E;CLS_LOWER
CALL $16BF;SET_WORK
pop de
jr $
end start
start
CALL $0D6E;CLS_LOWER
ld a,1
call $1601
LD (IY+$02),$01;Signal that the lower screen is being handled (set bit 0 of TV-FLAG and reset all other bits).
SET 7,(IY+$37);Signal 'using INPUT LINE' (set bit 7 of FLAGX).
ld hl,$5c71
res 6,(hl)
set 5,(hl)
ld bc,1
rst $30
ld (hl),$0D
ld ($5C5B),hl
;215E
push hl
call $0F2C
CALL $0D6E;CLS_LOWER
CALL $16BF;SET_WORK
pop de
jr $
end start
После обработки текста нужно вызвать процедуру $16BF. И все же жаль, что нет ограничения на длину текста.
Комментарии
Отправить комментарий