PDA

Просмотр полной версии : переменная BASIC 23681



White_Hunter
30.03.2011, 10:10
Ниже приведен текст программы, после выполнения которой в середине экрана очень крупным шрифтом появляется надпись: GOOD LUCK TO YOU

10 REM CRACKED BY MIHAILENKO VADIM MINSK 1991

20 FOR I=72 TO 79

25 POKE 23681, I

30 LPRINT "GOOD LUCK TO YOU"

40 NEXT I

В данном случае авторы используют команду вывода на печатающее устройство LPRINT для поэтапного высвечивания на экране вышеуказанной надписи.
Самым любопытным является то, что системная переменная, используемая в этой программе, в фирменном описании компьютера (автор - Виккерс) охарактеризована, как неиспользующаяся.

Вопрос, как оно работает ? :)

Titus
30.03.2011, 11:19
В этой переменной находится старший адрес буфера принтера. В этом цикле этот адрес подменяется на 0x48..0x4F, что соответствует средней трети экрана.

White_Hunter
30.03.2011, 11:48
Titus, ты гигамозг! :)

psb
30.03.2011, 13:07
ну и стоит сказать, что не на всех компах это работает (может зависнуть).
плюс, если будет ZX-Printer, то и на него напечатается это 8 раз...

ALKO
30.03.2011, 13:38
ну и стоит сказать, что не на всех компах это работает (может зависнуть).
зависнет,если зацепит адрес бейсик программы или стэк.

jerri
30.03.2011, 15:32
на скорпах просто виснет насмерть
почему?

ALKO
30.03.2011, 15:54
другая организация памяти.
23681, 64 до 88 (64*256=16384 начало экранной области)

вероятнее всего системные переменные иначе рассположены (у меня где-то брошура была с описанием всех переменных, но то для 48к)

Sinus
30.03.2011, 17:24
на кае виснет потому, что там есть драйвер принтера.
он ждёт ответа от принтера, но так как принтера нет, то и висит.
вроде если понажимать на пробел, то большие буквы всё-таки допечатаются.

думаю на скорпе тоже самое.

Titus
30.03.2011, 18:24
Titus, ты гигамозг! :)
Глупости. Я просто посмотрел в описание переменных бейсика)))

White_Hunter
31.03.2011, 14:08
Глупости. Я просто посмотрел в описание переменных бейсика)))

PR СС: адрес 23680 IY + 70 (5С80И)

Это младший байт используемого в данный момент адреса буфера
принтера. Идентична "DF СС: адреса 23684/5 IY + 48 (5С84/5Ю" и
для буфера принтера может быть смещена изменением так называе-
мого неиспользованного байта, описанного ниже, который на самом
деле является старшим байтом системной переменной "PR СС". К
сожалению он сбрасывается по окончании печати каждой строки,
чтобы указать начальный адрес. Поэтому необходима осторожность,
если он перемещался.

NOT USED: адрес 23681 IY + 71 (5C81h)

Обычно не используется, если буфер принтера на обычном месте
(см. "PR СС"). Может быть использована, но только как указано
выше.

В одном из номеров ZX-Review был этот пример под названием " Чтобы это значило". Походу так никто и не смог ответить :) кроме тебя.

Titus
31.03.2011, 19:54
В одном из номеров ZX-Review был этот пример под названием " Чтобы это значило". Походу так никто и не смог ответить :) кроме тебя.
Странно, я открыл книжку Ларченко и Родионова 'ZX Spectrum & TR-DOS' и сразу нашел)