Из журнала Deja Vu #09, Кемерово, 1999 (C) Death MoroZ __________________________________________ Всем привет, кто про chunky-bump'ы, а я про быструю печать спрайта 2х2 знакоместа, которая расчитана на фиксированное положе- ние спрайта, например, это может быть пе- чать карты. Итак, нижеследующую процедуру необходи- мо вызвать перед запуском основной прог- раммы. Процедура CREAT несколько изменяет фор- мат спрайтов, а именно: оставляя без изме- нения первые 2 знакоместа, со вторыми про- исходит следующее: до вызова: после: 16 17 30 31 18 19 28 29 20 21 26 27 .. .. .. .. Для чего это надо? А вот для чего: нап- ример, в HL у нас задан адрес в экране,ку- да идет печать, при печати первых 2-х зна- комест проблем нет, но как с наименьшими потерями перейти ко второй паре? Например, можно сохранять до изменения адрес:LD A,H, а потом востановить: LD H,A, можно исполь- зовать стек, установив его на таблицу ад- ресов, но есть способ лучше. Для перехода к следующим знакоместам просто сделать INC H, а затем продолжать выводить снизу вверх, именно для этого и предназначена нижеприведенная процедура. CREAT LD HL,адрес спрайтов+16 LD DE,адрес спрайтов+30 DCR LD B,число спрайтов M1_ PUSH BC,HL,DE LD B,4 M2_ LD A,(HL) EX AF,AF' LD A,(DE) LD (HL),A EX AF,AF' LD (DE),A INC HL INC DE LD A,(HL) EX AF,AF' LD A,(DE) LD (HL),A EX AF,AF' LD (DE),A INC HL DEC DE DEC DE DEC DE DJNZ M2_ POP DE EX DE,HL LD BC,32 ADD HL,BC EX DE,HL POP HL ADD HL,BC POP BC DJNZ M1_ RET Пример процедуры вывода: LD (SP_+1),SP LD IX,OUTS LD DE,АДРЕС В КАРТЕ EXX LD BC,#6000;АДРЕС БУФЕРНОГО EXX ;ЭКРАНА LD IX,OUTS LD B,ЧИСЛО СПРАЙТОВ ПО Y LOOP LD HL,$+3 !ASSM ЧИСЛО СПРАЙТОВ ПО X JP (IX) !CONT ;ВАША ПРОЦЕДУРА ПЕРЕХОДА К СЛЕД.ГОРИЗОН- ;ТАЛЬНОЙ ЛИНИИ,И ПЕРЕХОДА К СЛЕД.ПАРЕ ЗНА- ;КОМЕСТ ЭКРАНА DJNZ LOOP SP_ LD SP,0 RET OUTS LD A,(DE) EXX ADD A,A LD L,A LD H,SPR_TBL&H;СТАРШИЙ БАЙТ ;ЗАРАНЕЕ ПОДГОТОВЛЕННОЙ ТАБЛИЦЫ АДРЕСОВ ;(ДЛЯ СОЗДАНИЯ СТАТИЧНОЙ АНИМАЦИИ ДОСТА- ;ТОЧНО ЛИШЬ МЕНЯТЬ ЕГО СНАЧЕНИЕ) LD SP,HL POP HL LD SP,HL;ВЗЯЛИ АДРЕС СПРАЙТА LD H,B LD L,C;В HL-АДРЕС ДЛЯ ПЕЧАТИ ; !ASSM 3 POP DE LD (HL),E INC L LD (HL),D INC H POP DE LD (HL),D DEC L LD (HL),E INC H !CONT POP DE LD (HL),E INC L LD (HL),D INC H POP DE LD (HL),D DEC L LD (HL),E;НАПЕЧАТАЛИ ВЕРХНЮЮ ; ПОЛОВИНУ LD A,#20 ADD A,L LD L,A;ПЕРШЛИ К НИЖНЕЙ !ASSM 3;ПЕЧАТАЕМ НИЗ... POP DE LD (HL),E INC L LD (HL),D DEC H POP DE LD (HL),D DEC L LD (HL),E DEC H !CONT POP DE LD (HL),E INC L LD (HL),D DEC H POP DE LD (HL),D DEC L LD (HL),E INC C;НЕОБХОДИМЫЕ INC C;КОРРЕКТИРОВКИ... EXX INC E INC HL INC HL JP (HL);ВЫХОД ------------------------------------------