ПРОГРАММА "ЖИЗНЬ"
ИФК: На крик о помощи по программе "LIFE" (ZX РЕВЮ 96/1-2), откликнулся Анисимов Денис и прислал свой вариант этой программы. Максимальное время сканирования всего жрана составляет около 4.5 секунд.
КОРР# Программа написана в формате GENS'a, и владельцам других ассемблеров придется изменить текст, особенно в области макросов. Макрос DWHL я переписал из описания MASM-128 (ИФК: ZX РЕВЮ 96/1-2), DWDE является переделкой DWHL, а UPHL я сделал сам. Счастливые пользователи MASM'a могут эти макросы не определять, а воспользоваться готовыми DOWN HL, DOWN DE и UP HL из этого ассемблера.
Изобразите на экране необходимую комбинацию точек и на-
шшшшшшш
чинаите вызывать программу на исполнение, например так:
10 randomize usr adr : go to 10,
где adr - это адрес ассемблирования. Если запускать не через randomize..., а через let а=... то в це-ременной будет находится количество включенных пикселов. Это можно испльзовать так:
10 let a=usr adr : if a>0 then go to 10
или проще:
10 if usr adr then go to 10
Если какой-нибудь индивидуум в процессе передвижения подойдет к краю экрана, то он появится с другой стороны. И еще: у программы есть один недостаток для ее работы необходим буфер с адреса #С000 (49152) длиной #1800 (6144). Текст программы "Жизнь": Program 'Life' (С) Anisimow Den 1996
DWHL
UPHL
TS1
TS2
TS3
L1
DWDE
|
MAC | |
|
INC |
H |
|
LD |
A.H |
|
AND |
#07 |
|
JR |
NZ,$+12 |
|
LD |
A,L |
|
SUB |
#E0 |
|
LD |
L,A |
|
JR |
NC.S+6 |
|
LD |
A,H |
|
SUB |
#08 |
|
LD |
H,A |
|
ENDM | |
|
MAC | |
|
INC |
D |
|
LD |
A,D |
|
AND |
#07 |
|
JR |
NZ,$+12 |
|
LD |
A,E |
|
SUB |
#E0 |
|
LD |
E.A |
|
JR |
NC,$+6 |
|
LD |
A,D |
|
SUB |
#08 |
|
LD |
D,A |
|
ENDM | |
|
MAC | |
|
DEC |
H |
|
LD |
A,H |
|
CPL | |
|
AND |
#07 |
|
JR |
NZ.$+12 |
|
LD |
A,L |
|
SUB |
#20 |
|
LD |
L.A |
|
JR |
C,$+6 |
|
LD |
A,H |
|
ADD |
A,#08 |
|
LD |
H.A |
|
ENDM | |
|
MAC | |
|
RRA | |
|
JR |
NC.S+3 |
|
INC |
В |
|
ENDM | |
|
MAC | |
|
RLA | |
|
JR |
NC,$+3 |
|
INC |
С |
|
ENDM | |
|
MAC | |
|
OR |
С |
|
INC |
A |
|
JR |
NZ.S+3 |
|
INC |
В |
|
ENDM | |
|
ORG |
40000 |
|
ENT |
$ |
|
Dl | |
|
EXX | |
|
PUSH |
HL |
|
PUSH |
IX |
|
LD |
HL,#C000 |
|
LD |
DE,#C001 |
|
LD |
BC,# 17FF |
|
LD |
(HL).L |
|
LDIR | |
|
LD |
HL,#4000 |
|
LD |
B,#20 |
|
LD |
A,(HL) |
|
OR |
A |
шшшяшш
L2
L3 L4
L5
L6
L7
L8 L9
форум
|
JR |
NZ.L8 |
PUSH |
HL | |
|
INC |
L |
LD |
BC,# 1F00 | |
|
DJNZ |
L1 |
PUSH |
DE | |
|
LD |
HL,#57E0 |
L10 |
LD |
D,#20 |
|
LD |
B,#20 |
L11 |
LD |
A,(HL) |
|
LD |
A,(HL) |
RLCA | ||
|
OR |
A |
JR |
C.L12 | |
|
JR |
NZ.L8 |
OR |
A | |
|
INC |
L |
JR |
NZ.L13 | |
|
DJNZ |
L2 |
INC |
L | |
|
LD |
HL,#56E0 |
DEC |
D | |
|
LD |
E,#BE |
JR |
NZ.L11 | |
|
LD |
B,#20 |
LD |
A,L | |
|
LD |
C,L |
SUB |
#20 | |
|
LD |
A,(HL) |
JR |
L21 | |
|
OR |
A |
L12 |
DEC |
L |
|
JR |
NZ.L5 |
LD |
A,L | |
|
INC |
L |
CPL | ||
|
DJNZ |
L4 |
AND |
#1F | |
|
LD |
L,C |
JR |
Z.L17 | |
|
UPHL |
L13 |
LD |
A,L | |
|
DEC |
E |
AND |
#1F | |
|
JR |
NZ.L3 |
CP |
В | |
|
LD |
C.B |
JR |
NC.L14 | |
|
EXX |
LD |
B,A | ||
|
El |
L14 |
LD |
A,L | |
|
JP |
L34 |
OR |
#1F | |
|
LD |
HL,#4000 |
LD |
L.A | |
|
PUSH |
HL |
L15 |
LD |
A,(HL) |
|
INC |
H |
RRCA | ||
|
INC |
E |
JR |
C.L16 | |
|
INC |
E |
OR |
A | |
|
LD |
B,#20 |
JR |
NZ.L18 | |
|
LD |
C,L |
DEC |
L | |
|
LD |
A,(HL) |
JR |
L15 | |
|
OR |
A |
L16 |
INC |
L |
|
JR |
NZ.L9 |
LD |
A,L | |
|
INC |
L |
AND |
#1F | |
|
DJNZ |
L7 |
JR |
NZ.L19 | |
|
LD |
L.C |
L17 |
POP |
DE |
|
POP |
AF |
LD |
D,#20 | |
|
PUSH |
HL |
EXX | ||
|
DWHL |
POP |
HL | ||
|
DEC |
E |
JR |
L22 | |
|
JR |
L6 |
L18 |
LD |
A,L |
|
LD |
HL,#4000 |
AND |
#1F | |
|
LD |
E,#C0 |
L19 |
CP |
С |
|
PUSH |
HL |
JR |
C.L20 | |
|
POP |
HL |
LD |
С,A |
форум
L20
L22
L23
L24
L25
|
XOR |
L |
LD |
A.(HL) | |
|
LD |
L,A |
TS1 | ||
|
DWHL |
LD |
A,(DE) | ||
|
DEC |
E |
TS1 | ||
|
JR |
NZ.L10 |
POP |
DE | |
|
POP |
DE |
POP |
HL | |
|
LD |
А,С |
L26 |
LD |
A,(IX) |
|
SUB |
В |
TS2 | ||
|
INC |
A |
LD |
A,(HL) | |
|
LD |
D,A |
TS2- | ||
|
LD |
A,B |
LD |
A,(DE) | |
|
EXX |
TS2 | |||
|
POP |
HL |
PUSH |
ВС | |
|
OR |
L |
EXX | ||
|
LD |
L.A |
POP |
HL | |
|
PUSH |
HL |
EXX | ||
|
UPHL |
LD |
А,С | ||
|
LD |
A.H |
LD |
(DAT+1),A | |
|
CP |
#40 |
PUSH |
HL | |
|
JR |
NC.L23 |
PUSH |
DE | |
|
LD |
H,#57 |
LD |
C,#7F | |
|
EX |
(SP).HL |
L27 |
BIT |
6,C |
|
POP |
IX |
JR |
NZ.L28 | |
|
EXX |
LD |
A.(DE) | ||
|
LD |
ВС,#0000 |
OR |
(HL) | |
|
PUSH |
DE |
OR |
(IX) | |
|
EXX |
JR |
NZ.L28 | ||
|
LD |
D.H |
LD |
C,#FE | |
|
LD |
E,L |
L28 |
PUSH |
HL |
|
DWDE |
RRC |
С | ||
|
LD |
A.D |
JR |
C.L30 | |
|
CP |
#58 |
LD |
A,L | |
|
JR |
C.L25 |
OR |
#E0 | |
|
LD |
D,#40 |
INC |
A | |
|
LD |
ВС,#0000 |
JR |
NZ.L29 | |
|
EXX |
DAT |
LD |
A, #00 | |
|
BIT |
5,D |
JR |
L31 | |
|
EXX |
L29 |
DEFB |
#DD | |
|
JR |
Z.L26 |
INC |
L | |
|
PUSH |
HL |
INC |
L | |
|
PUSH |
DE |
INC |
E | |
|
LD |
A,L |
L30 |
LD |
B,#00 |
|
OR |
#1F |
LD |
A,(IX) | |
|
LD |
L.A |
TS3 | ||
|
LD |
A,E |
LD |
A,(HL) | |
|
OR |
#1F |
TS3 | ||
|
LD |
E,A |
LD |
A,(DE) | |
|
LD |
A,(IX+#1F) |
TS3 | ||
|
TS1 |
LD |
А,В |
|
EX |
AF.AF' |
|
ЕХХ | |
|
LD |
A,H |
|
LD |
H,L |
|
ADD |
AtL |
|
EX |
AF.AF' |
|
LD |
L,A |
|
EX |
AF.AF' |
|
ADD |
A,L |
|
EXX | |
|
LD |
B.A |
|
EX |
(SP).HL |
|
CP |
#05 |
|
JR |
NC.L33 |
|
CP |
#03 |
|
JR |
Z.L32 |
|
LD |
A,(HL) |
|
RRCA | |
|
OR |
С |
|
INC |
A |
|
JR |
NZ.L33 |
|
LD |
А, В |
|
CP |
#04 |
|
JR |
NZ.L33 |
|
LD |
А,С |
|
RLCA | |
|
CPL | |
|
SET |
7,H |
|
OR |
(HL) |
|
LD |
(HL),A |
|
EXX | |
|
INC |
ВС |
|
EXX | |
|
POP |
HL |
|
BIT |
7,С |
|
JR |
NZ.L27 |
|
EXX | |
|
DEC |
D |
|
EXX | |
|
JR |
NZ.L27 |
|
POP |
HL |
|
POP |
IX |
|
EXX | |
|
POP |
DE |
|
DEC |
E |
|
JP |
NZ.L24 |
|
EXX | |
|
LD |
HL,#C000 |
|
LD |
DE,#4000 |
LD ВС,# 1800
El
HALT LDIR
L34 POP IX POP HL EXX RET
ИФК: Дмитрий прислал еще одну процедуру.
КОРР: Программа не является полностью моей, т.к. идею я взял из программы Кривцова А.Н. в ZX-РЕВЮ 94/4, стр 34.
Процедура выводит на экран стандартную картинку (6912), которую необходимо загрузить по адресу #С000 (49152).
(С) Anisimov Den 1996
|
ORG |
40000 | |
|
ENT |
$ | |
|
LD |
DEt#0000 | |
|
S1 |
PUSH |
DE |
|
HALT | ||
|
S2 |
PUSH |
DE |
|
LD |
A,#7F | |
|
S3 |
LD |
C,A |
|
LD |
A,D | |
|
CP |
#20 | |
|
JR |
NC.S6 | |
|
LD |
A,E | |
|
ADD |
A,A | |
|
ADD |
A,A | |
|
ADD |
A,A | |
|
LD |
L,A | |
|
LD |
H,# 16 | |
|
ADD |
HL.HL | |
|
ADD |
HL.HL | |
|
LD |
A,L | |
|
ADD |
A,D | |
|
LD |
L,A | |
|
LD |
А,С | |
|
CP |
#40 | |
|
JR |
NZ.S5 | |
|
PUSH |
DE | |
|
PUSH |
HL |
S4
55
56
|
LD |
A,H |
|
ADD |
A,A |
|
ADD |
A,A |
|
ADD |
A,A |
|
AND |
#7F |
|
LD |
H,A |
|
LD |
D,H |
|
LD |
E,L |
|
SET |
7,H |
|
LD |
B,#08 |
|
LD |
A,(HL) |
|
LD |
(DE).A |
|
INC |
H |
|
INC |
D |
|
DJNZ |
S4 |
|
POP |
HL |
|
LD |
B,H |
|
LD |
DE,#8000 |
|
ADD |
HL.DE |
|
LD |
A,(HL) |
|
LD |
H.B |
|
POP |
DE |
|
LD |
(HL),A |
|
DEC |
D |
|
LD |
A,C |
|
SUB |
#09 |
|
CP |
#37 |
|
JR |
NZ.S3 |
|
POP |
DE |
|
DEC |
D |
|
INC |
E |
|
LD |
A,E |
|
CP |
#18 |
|
JR |
NZ.S2 |
|
POP |
DE |
|
INC |
D |
|
LD |
A,D |
|
CP |
#3F |
|
JR |
NZ.S1 |
|
RET |
**************************************