|
KrNews
#10
20 августа 1999 |
|
CODING - Intro в 256 байт?

_
CODING...
_
(c) Viper/TЁchno Lab'99
Intro в 256 байт?
В связи с номинацией 512 intro в CC999
у некоторых возник вопрос -возможно ли
написать интро в 256 байт? Ответ прост -
не только возможно, но и данная цифра
легко перекрывается. Примером может пос-
лужить Screen Saver для KrNews, которой
вы могли наблюдать в течение нескольких
номеров подряд. Причина такого постоянс-
тва - малый объем памяти, требуемый для
его работы. Он занимает всего 153 байта!
А если убрать опрос клавиатуры (нормаль-
ный Screen Saver ;), то 145 байт, что
приближает его уже к пределу 128 байт. И
это при том, что он активно использует
стек для своей работы. Данный Screen Sa-
ver - это полноэкранная (fullscreen)
программа, не требующая 128'ой памяти.
Необходима только таблица адресов экран-
ной памяти, располагающаяся с ровного
адреса, в данном варианте #C000. Естест-
венно, все realtime и ничего не режется.
Весь этот SS написан году так в 96,
если не раньше, так что не обессудьте.
Если кто не знает:
REPT 16
PUSH HL
ENDR
- директивы Zx Asm3.10, соответсвуют
DUP 16
PUSH HL ; в Alasm'е
EDUP
.16 PUSH HL ;- в Storm'е
-то бишь повторение PUSH 16 раз подряд
Итак:
BEG EQU 7 ;min- расстояние между
ENX EQU 63 ;max- линиями
GTAB EQU #C000 ;адрес таблицы
ORG #8000
FLIC LD DE,#401F ;построение
LD HL,GTAB ;таблицы
LD B,H
FLI INC DE
LD (HL),E
INC L
LD (HL),D
INC HL
DEC DE
INC D ;стандартный даун
LD A,D
AND 7
JR NZ,FL1
LD A,E
SUB #E0
LD E,A
JR NC,FL1
LD A,D
SUB 8
LD D,A
FL1 DJNZ FLI
EI
LD DE,GTAB
EXX
LD E,96 ;пол-экрана
SFX LD B,BEG
CYCLE1 LD HL,#FFFF ;страшное число
CALL CYC2
HALT
INC HL ;инверсия однако :)
CALL CYC2
INC B
LD A,B
CP ENX
JR C,CYCLE1
CYCLE2 DEC HL ;back to the Universe
CALL CYC2
HALT
INC HL
CALL CYC2
DEC B
LD A,B
CP BEG
JR NC,CYCLE2
JR SFX
CYC2 LD (OLDSP+1),SP
LD A,B
SRL A
CYC21 LD C,A
ADD A,E ;прибавили 96 для
;середины экрана
EXX
LD H,E ;в E -0
LD L,A
ADD HL,HL ;умножение на 2
ADD HL,DE ;адрес, в котором на-
;ходится экранный ад-
;рес (ну и сказал)
LD SP,HL ;в стекпойнт его
POP HL ;экранный адрес
LD SP,HL ;снова в стекпойнт
EXX
REPT 16
PUSH HL ;длинная линия
ENDR
SUB C ;или LD A,E -без
SUB C ; SUB C разницы
EXX
LD H,E ;симметрия все-таки
LD L,A
ADD HL,HL
ADD HL,DE
LD SP,HL
POP HL
LD SP,HL
EXX
REPT 16
PUSH HL
ENDR
LD A,C
ADD A,B
CP E;за экран
JP C,CYC21 ;не вылазит?
OLDSP LD SP,0 ;а что в стеке?
SUB A
IN A,(#FE) ;не трогай
CPL ;клавиши!
AND #1F
RET Z
POP HL
RET
_
Другие статьи номера:
Похожие статьи:
В этот день... 15 декабря