|
|
|
От редакции
Новости ПО Гуру ZX-Party Старина Z80 В Новый год |
|
Cегодня у нас открытие новой рубрики — подарок для людей (?), которых хлебом не корми, а дай создать в ассемблере какую-нибудь сногсшибательную процедуру. :)
Надеемся, этот раздел будет появляться в нашей газете достаточно часто, но гарантировать это, к сожалению, нельзя. Ведь кодеры привыкли изъясняться на машинном языке, и посему объяснить для смертных принцип какой-нибудь команды зачастую для них сложнее, чем исполнить на китайском языке русские народные песни. ;-)
А сейчас мы представляем вам Ивана Рощина (Москва), автора BestView и многочисленных публикаций в прессе, который, можно сказать, и открывает новую рубрику. :)
| П |
; Вход: с #4000 - экранный файл (ч/б)
; Выход: с #8000 - текстовый файл (длина #6100)
; Pазмер объектного кода: 103 байта.
DESTIN EQU #8000
LD DE,#00BF ;координаты
LD HL,DESTIN ;адрес txt
LD B,128
LP_MAIN PUSH BC ;главный цикл
LP_2 CALL GET_P
ADD A,A
LD B,A
INC D
CALL GET_P
DEC D
ADD A,B
EXX
LD HL,DECODE
LD D,0
LD E,A
ADD HL,DE
LD A,(HL)
EXX
LD (HL),A
INC HL
DEC E
LD A,E
CP -1
JR NZ,LP_2
INC D
INC D
LD E,191
LD (HL),13 ;код
INC HL ;перевода
LD (HL),10 ;строки
INC HL
POP BC
DJNZ LP_MAIN
RET
;-----------------------------------------
DECODE DB " ","~","~","~" ;символы
;-----------------------------------------
;Процедура GET_P - узнать цвет точки
;
;Вход: DE - координаты точки (X,Y)
;Выход: A - цвет (0 или 1)
;
;Значения других регистров не меняются.
GET_P PUSH HL
PUSH DE
PUSH BC
LD A,E
AND A
RRA
SCF
RRA
AND A
RRA
XOR E
AND #F8
XOR E
LD H,A
LD A,D
RLCA
RLCA
RLCA
XOR E
AND #C7
XOR E
RLCA
RLCA
LD L,A
LD A,D
AND 7
LD B,A
INC B
LD A,1
LOOP RRCA
DJNZ LOOP
LD B,(HL)
AND B
POP BC
POP DE
POP HL
CP 0
RET Z
LD A,1
RET
|
|