Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   переменная BASIC 23681 (http://zx-pk.ru/showthread.php?t=15494)

White_Hunter 30th March 2011 11:10

переменная BASIC 23681
 
Ниже приведен текст программы, после выполнения которой в середине экрана очень крупным шрифтом появляется надпись: 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 30th March 2011 12:19

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

White_Hunter 30th March 2011 12:48

Titus, ты гигамозг! :)

psb 30th March 2011 14:07

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

ALKO 30th March 2011 14:38

Quote:

Originally Posted by psb (Post 371036)
ну и стоит сказать, что не на всех компах это работает (может зависнуть).

зависнет,если зацепит адрес бейсик программы или стэк.

jerri 30th March 2011 16:32

на скорпах просто виснет насмерть
почему?

ALKO 30th March 2011 16:54

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

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

Sinus 30th March 2011 18:24

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

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

Titus 30th March 2011 19:24

Quote:

Originally Posted by White_Hunter (Post 371014)
Titus, ты гигамозг! :)

Глупости. Я просто посмотрел в описание переменных бейсика)))

White_Hunter 31st March 2011 15:08

Quote:

Originally Posted by Titus (Post 371175)
Глупости. Я просто посмотрел в описание переменных бейсика)))

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

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

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

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

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


All times are GMT +4. The time now is 21:01.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.