PDA

Просмотр полной версии : Основной экран в 24 строки



Den Zurin
12.12.2010, 07:26
Здраствуйте!
При написании программы для ZX Spectrum у меня возник такой вопрос.
По умолчанию в ZX Spectrum основной экран использует только 22 строки, нижние 2 строки используются под служебный экран (сообщения об ошибках и др.).
Можно увеличить размер основного экрана до 24 строк?
В литературе по ZX Spectrum описывается системная переменная DF_SZ (адрес 23659), задающая число строк в служебном экране. Я попробовал записать туда 0, но основной экран от этого не увеличился - при выводе в нижние 2 строки программа зависает. Вот текст программы на ассемблере:

ORG 60000
; POKE 23659, 0
LD A,0
LD (IY+49),A
; clear screen
CALL 3435
; select channel #2
LD A, 0
CALL 5633
; PRINT AT 23,0; "*";
LD A,#16
RST 16
LD A,23
RST 16
LD A,0
RST 16
LD A,"*"
RST 16
; wait key pressed
RES 5,(IY+1)
LOOP BIT 5,(IY+1)
JR Z,LOOP
; POKE 23659,2
LD A,2
LD (IY+49),A
; clear screen
CALL 3435
; select channel #2
LD A,2
CALL 5633
; return
RET

null_device
12.12.2010, 07:35
На бесике (либо используя процедуры печати ПЗУ), "влоб", увеличить основной экран на все 24 строки не получится, точнее, не получится напечатать что-либо в 23 строке (максимум в 22) - это раз. Второй момент, если вы увеличиваете основной экран на 24 строки, для служебного экрана строк совсем не остается, а значит вывод любого сообщения (даже ОК), приведет к зависанию.
Eсли выполнить такую строку:
POKE 23659,0: PRINT AT 22,0;"тут могут быть любые 64 символа": POKE 23659,2
в двух служебных строках будут напечатаны символы набранные внутри кавычек. Нечто подобное описано в книжке, Как написать игру (на бейсике) (http://vtrdos.ru/book/WGBAS.ZIP).
Кстати, печать в служебных строках решается в бейсике командой типа:
PRINT #0; AT 0,0;"любой текст"; для второй строки служебного экрана Y-координата равна 1. Раз вы работаете с каналами, задайте канал 0 и скорректируйте координаты печати..

Den Zurin
12.12.2010, 07:46
Ну, я читал про каналы, #0 используется для служебного экрана, #2 для основного.


Eсли выполнить такую строку:
POKE 23659,0: PRINT AT 22,0;"тут могут быть любые 64 символа": POKE 23659,2
в двух служебных строках будут напечатаны символы набранные внутри кавычек.

Хорошо, с текстом понятно.
А рисовать как? Выводить пиксели, линии? Нельзя?

null_device
12.12.2010, 07:58
Дело в том, что стандартный процедуры из ПЗУ, для рисования линии и точек "не умеют" рисовать в служебных строках. И уменьшение количества служебных строк на это никак не влияет.

---------- Post added at 11:58 ---------- Previous post was at 11:56 ----------

Для вывода текста\графики, во весь экран придется писать программу для обработки и вывода на экран (либо брать готовую реализацию, если она есть). Мне, лично это только так видится.

Den Zurin
12.12.2010, 08:38
Понятно.
И еще вопрос: возможен ли вертикальный скроллинг (построчный) стандартными средствами?

null_device
12.12.2010, 09:07
По команде CALL 3582 лежит процедура скроллинга основного экрана на одну символьную строку.
----
В принципе можно взять готовые процедуры из пакета Supercode\NEW Supercode. Там они есть, для кролирования в разные стороны.