
Сообщение от
Oleg N. Cher
Пример не помешает.
В первых версиях Sprite Graber'а имя файла (8 символов) с помощью ROM-editor'а запрашивалось вот так (в буфер по адресу Variables.input_buffer):
Код:
@chan_open equ #1601
@set_min equ #16b0
@editor equ #0f2c
@flagx equ #5c71
@k_cur equ #5c5b
@err_sp equ #5c2d
@worksp equ #5c61
input_line:
ld hl,flagx
set 7,(hl)
set 5,(hl)
call set_min
ld bc,#0001
rst #30
ld (hl),#0d
ld (k_cur),hl
ld hl,input_line_exit
push hl
ld (err_sp),sp
call editor
pop hl
ld hl,(worksp)
ld de,Variables.input_buffer
ld b,#08
input_line_copy:
ld a,(hl)
cp #0d
jr z,input_line_exit
ld (de),a
inc hl
inc de
djnz input_line_copy
input_line_exit:
ld a,2
call chan_open
jp set_min
- - - Добавлено - - -
UPD: процедура нещадно портит err_sp, надо сохранять и восстанавилвать, иначе после любого rst #08 в ПЗУ случится вылет в параллельную вселенную.
- - - Добавлено - - -
UPD2: Если случится переполнение буфера или всякое STOP in INPUT, буфер по адресу Variables.input_buffer не изменится. Все подобные спецэффекты можно обрабатывать в процедуре, адрес которой запоминается на стеке перед занесением sp в err_sp. set_min при любом исходе категорически рекомендуется во избежание зажора навсегда памяти в workspace Basic'а. chan_open - по вкусу