╔═───────────────════════───────────────═╗
│ Старина Z80 │
╚═──────────══════════════════──────────═╝
Сегодня у нас открытие новой рубрики -
подарок для людей (?), которых хлебом не
корми, а дай создать в ассебмлере какую-
нибудь сногсшибательную процедуру. :)
Надеемся, этот раздел будет появляться
в нашей газете достаточно часто, но гаран-
тировать это, к сожалению, нельзя. Ведь
кодеры привыкли изъясняться на машинном
языке, и посему объяснить для смертных
принцип какой-нибудь команды зачастую для
них сложнее, чем исполнить на китайском
языке русские народные песни. ;-)
А сейчас мы представляем вам Ивана Ро-
щина (Москва), автора BestViev и многочис-
ленных публикаций в прессе, который, можно
сказать, и открывает новую рубрику. :)
__________________________________________
(C) Иван Pощин, 1999
Предлагаю вашему вниманию программу,
которая очень пригодится в случае, когда
нужно напечатать копию спектрумовского эк-
рана в сильно увеличенном виде. Эта прог-
рамма перекодирует экранный файл в тексто-
вый псевдографический файл, а его легко
можно распечатать на принтере. После печа-
ти как раз получится изображение формата
А2. Впрочем, изображение можно порезать на
куски в текстовом редакторе и печатать по
частям, если принтер не поддерживает фор-
мат А2.
__________________________________________
; Вход: с #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
__________________________________
───══════════════════───