Следующий момент, позаимство-
ванный в программе ROCKSTAR -
"выбегающая строка". Это не сов-
сем "бегущая строка", поскольку
она никуда не убегает, а только
выбегает справа и останавливает-
ся, достигнув середины экрана.
Именно так выводятся две строки,
которые Вы видели на предыдущем
рисунке. При этом горизонтальный
скроллинг - плавный, выполняется
не по знакоместам, а по пиксе-
лам.
Листинг "выбегающей" строки:
1420.
622B D9 EXX
622C E5 PUSH HL
622D D9 EXX
------------------------------
622E 21B262 LD HL,#62B2
6231 CD3E62 CALL #623E
------------------------------
6234 21D562 LD HL,#62D5
6237 CD3E62 CALL #623E
------------------------------
623A D9 EXX
623B E1 POP HL
623C D9 EXX
623D C9 RET
------------------------------
623E 7D LD A,L
623F 32B062 LD (#62B0),A
6242 7C LD A,H
6243 32B162 LD (#62B1),A
6246 3E02 LD A,#02
6248 CD0116 CALL #1601
624B 2AB062 LD HL,(#62B0)
624E 7E LD A,(HL)
624F 32AC62 LD (#62AC),A
6252 23 INC HL
6253 7E LD A,(HL)
6254 32AD62 LD (#62AD),A
6257 23 INC HL
6258 7E LD A,(HL)
6259 32AE62 LD (#62AE),A
625C 23 INC HL
625D 3E1F LD A,#1F
625F 32AF62 LD (#62AF),A
6262 3E16 LD A,#16
6264 D7 RST #10
6265 3AAC62 LD A,(#62AC)
6268 D7 RST #10
6269 3E1F LD A,#1F
626B D7 RST #10
626C 7E LD A,(HL)
626D D7 RST #10
626E CD7F62 CALL #627F
6271 23 INC HL
6272 3AAF62 LD A,(#62AF)
6275 3D DEC A
6276 32AF62 LD (#62AF),A
6279 FE00 CP #00
627B 00 NOP
627C 20E4 JR NZ,#6262
627E C9 RET
------------------------------
627F 0608 LD B,#08
6281 D9 EXX
6282 2AAD62 LD HL,(#62AD)
6285 0608 LD B,#08
6287 0E20 LD C,#20
6289 7E LD A,(HL)
1420.628A CB27 SLA A
628C 77 LD (HL),A
628D 23 INC HL
628E 0D DEC C
628F 7E LD A,(HL)
6290 CB27 SLA A
6292 77 LD (HL),A
6293 DCA562 CALL C,#62A5
6296 23 INC HL
6297 0D DEC C
6298 00 NOP
6299 20F4 JR NZ,#628F
629B 11E000 LD DE,#00E0
629E 19 ADD HL,DE
629F 10E6 DJNZ #6287
62A1 D9 EXX
62A2 10DD DJNZ #6281
62A4 C9 RET
------------------------------
62A5 2B DEC HL
62A6 7E LD A,(HL)
62A7 CBC7 SET 0,A
62A9 77 LD (HL),A
62AA 23 INC HL
62AB C9 RET
2
Старт процедуры - с адреса
загрузки: RANDOMIZE USR 25131.
Собственно процедура "выбе-
гающая строка", непосредствен-
но заимствованная из программы
ROCKSTAR, начинается с адреса
623EH. Однако при своей работе
она коррумпирует альтернативный
регистр HL, из-за этого не про-
исходит корректного завершения
процедуры при вызове ее из Бей-
сика. Для устранения этого неп-
риятного явления было предусмот-
рено сохранение значения альтер-
нативного регистра HL на стеке и
восстановление его при заверше-
нии процедуры.
Вызывающая программа располо-
жена с адреса 622BH (25131).
Здесь процедура вызывается дваж-
ды для печати двух строк текста.
Перед каждым вызовом процедуры в
регистре HL задается адрес в па-
мяти, где располагается информа-
ция для "выбегающей" строки.
Формат этой информации следую-
щий. Сначала идет число, опреде-
ляющее строку на экране для пе-
чати "выбегающей" строки. Затем
следует двухбайтный адрес, он
определяет в дисплейном файле
верхнюю пиксельную линию, начи-
ная с которой надо выполнять го-
ризонтальный скроллинг строки.
Это верхняя пиксельная линия са-
мого левого знакоместа заданной
строки. Далее в памяти располо-
жено само текстовое сообщение,
длина которого должна быть 32
байта вместе с пробелами слева и
справа.
Печать очередного символа
текста выполняется в 31-й пози-
ции экрана, затем выполняется
скроллинг влево на 8 пикселов,
после чего происходит печать
следующего символа. При работе
процедура использует 6 служебных
ячеек в адресах 62ACH...62B1H.
Для получения блока кодов
"выбегающая строка" можно вос-
пользоваться Бейсик-программой:
1 READ ram: CLEAR ram: READ f
$: READ st: READ len: FOR a=st T
O st+len-1: READ b: POKE a,b: NE
XT a: SAVE f$CODE st,len
10 DATA 25130,"ro2",25131,205
100 DATA
217,229,217,033,178,098,205,062,
098,033,213,098,205,062,098,217,
225,217,201,125,050,176,098,124,
050,177,098,062,002,205,001,022
110 DATA
042,176,098,126,050,172,098,035,
126,050,173,098,035,126,050,174,
098,035,062,031,050,175,098,062,
022,215,058,172,098,215,062,031
120 DATA
215,126,215,205,127,098,035,058,
175,098,061,050,175,098,254,000,
000,032,228,201,006,008,217,042,
173,098,006,008,014,032,126,203
130 DATA
039,119,035,013,126,203,039,119,
220,165,098,035,013,000,032,244,
017,224,000,025,016,230,217,016,
221,201,043,126,203,199,119,035
140 DATA
201,001,032,064,000,213,098,012,
128,072,032,032,032,032,082,079,
067,075,032,083,084,065,082,032,
065,084,069,032,077,089,032,072
150 DATA
065,077,083,084,069,082,032,032,
032,032,001,032,064,032,068,073,
083,075,069,068,032,066,089,032,
086,065,076,069,078,084,073,078
160 DATA
032,079,090,069,082,079,086,032,
049,057,057,050,032
Ниже приведена Бейсик-прог-
рамма, демонстрирующая "выбегаю-
щую строку".
10 BORDER 0: PAPER 0: INK 7: C
LEAR 25011
20 LOAD "ro1"CODE
30 LOAD "ro2"CODE
40 BRIGHT 1: CLS : RANDOMIZE U
SR 25012: RANDOMIZE USR 25131: B
RIGHT 0