Из журнала Deja Vu #0A, Кемерово, 2000 __________________________________________ (C) KAPsoft '2000 __________________________________________ К ВОПРОСУ ... ...О КОНВЕРСИИ В Deja Vu #08 была статья о конверсии SCREEN'ов в текстовые файлы. Идея была та- кова: подсчитываем количество включенных пикселов (точек) в блоке (8 на 4), и,в со- ответствии с их количеством,ставим тот или иной символ. Я предлагаю другой алгоритм. Опишу вкратце его суть. На рассматреваемый блок накладываем по очереди все символы загру- женного FONT'а. Подсчитываем количество совпадений (одинакого включенных или вык- люченных пикселов). Тот символ, у которого совпадений больше, ставим вместо блока. Повторяем все для остальных блоков. Да,это все будет работать довольно мед- ленно. Но и качество будет лучше. Вот листинг программы, выполняющей та- кую конверсию. DEMO CALL START LD A,2 CALL #1601 LD A,22 RST 16 XOR A RST 16 XOR A RST 16 LD BC,768 LD DE,TEXT JP #203C ; START LD HL,#4000 LD DE,TEXT CALL ST1 LD HL,#4800 CALL ST1 LD HL,#5000 JP ST1 ; ST1 LD BC,256 LOOP PUSH BC PUSH DE LD DE,15616 LD B,96 XOR A LD (NUM+1),A LD (NUP+1),A DEC A LD (RAZL+1),A N_4 PUSH BC LD C,0 PUSH HL LD A,8 N_2 PUSH AF LD A,(DE) XOR (HL) LD B,8 N_1 RRA JR NC,NO INC C NO DJNZ N_1 INC DE INC H POP AF DEC A JR NZ,N_2 LD HL,NUP+1 INC (HL) RAZL LD A,0 POP HL CP C JR C,N_3 NUP LD A,0 DEC A LD (NUM+1),A LD A,C N_3 POP BC LD (RAZL+1),A DJNZ N_4 NUM LD A,0 ADD A,32 POP DE LD (DE),A INC DE POP BC INC L DEC BC LD A,B OR C JR NZ,LOOP RET В программе есть некоторые интересные приемчики. Например, если у вас в прогах есть та- кие строки: LD (МЕТКА),A ... LD A,(МЕТКА) ... METKA DEFB 0, то их можно заменить на: LD (METKA+1),A ... METKA LD A,0 Т.е. хранить переменные в тексте самой программы. Сравнение происходит с помощью XOR'ива- ния байтов и подсчета включенных битов.Ес- ли биты одинаковы (1-1 или 0-0), то после XOR'ки получаются 0, а если разные, то 1. Т.к. нам нужны различия, то подсчитываем нули командой JR NC,S. В этой программе блоком является одно знакоместо,и сравнение происходит со стан- дартным SPECTRUM'овским FONT'ом, располо- женным в ПЗУ. Это лишь пример,серьезную программу на- до делать более универсально: различные размеры блока, подгружаемый FONT и т.п.