ZXNet эхоконференция «code.zx»


тема: Процедура цветной печати 8х4



от: Dmitry Grigoryev
кому: All
дата: 26 Mar 1999
Привет, All! Вот, может, кому пригодится... Откопал в исходниках. Интересен (на мой взгляд ;) алгоритм отслеживания адреса атрибутов, не знаю, применял ли кто похожий... Можно еще и оптимизировать :) ══════════╡ImportBegin DISNAME0.TXT╞════════════════════════════════ prpage LD (adrtxt+1),HL CALL clear ; вызов очистки экрана LD D,#58 EXX LD DE,#4000 adrtxt LD HL,0 prpage1 PUSH DE color LD C,0 ; здесь текущий цветовой атрибут INC HL CALL prline ; вызов печати строки POP DE LD A,E ADD A,#20 LD E,A JR NC,prpage1 EXX INC D EXX LD A,D ADD A,#08 LD D,A CP #58 ; если экран будет выводиться не до конца, здесь JR NZ,prpage1 ; придеться применить более гнилой ограничитель RET prline XOR A EX AF,AF' ; ставим флаг фазы (нужно для процедур окраски) LD A,(HL) ; берем код символа INC HL CP #21 ; если код меньше 21, то переход на обработку JP C,esc ; управляющих кодов PUSH HL PUSH DE LD L,A ; первая фаза фонта по адресу #9000 в формате экрана LD H,#90 ; а ты говоришь "вычисление адреса фонта" ;)) ; LD B,#F0 ; специально оставлю операции маскирования EX DE,HL BEGIN 7 ; это масмовский операнд, поймешь, думаю LD A,(DE) ; AND B LD (HL),A INC H INC D END LD A,(DE) ; AND B LD (HL),A EXX ; ставим цвет... LD A,D EXX LD H,A LD (HL),C ; вот и все! а ты "rra,rra,rra,rra,rra..." ;) POP DE POP HL prline2 EX AF,AF' ; флаг фазы (а здесь А не может равняться 0) LD A,(HL) ; берем код символа INC HL CP #21 ; если код меньше 21, то переход на обработку JP C,esc ; управляющих кодов PUSH HL PUSH DE LD L,A LD H,#98 ; адрес второй фазы фонта по адресу #9800 ; LD B,#0F BEGIN 7 LD A,(DE) ; AND B OR (HL) LD (HL),A INC H INC D END LD A,(DE) ; AND B OR (HL) LD (HL),A EXX LD A,D EXX LD H,A LD (HL),C POP DE POP HL INC E JP prline ; как видишь, убрав маскирование, мы сэкономили 39 тактов на символ! ; чем с запасом компенсировали затраты на окраску. esc CP #20 JP Z,space CP #0D RET Z CP #10 JR Z,paper CP #11 JR Z,ink CP #09 JP Z,tab LD A,#02 OUT (#FE),A JR $ ; ;~( paper LD A,(color+1) AND #B8 OR (HL) INC HL LD (color+1),A EX AF,AF' OR A JP Z,prline JP prline2 ink LD A,(HL) INC HL ADD A,A ADD A,A ADD A,A LD B,A LD A,(color+1) AND #C7 OR B LD (color+1),A EX AF,AF' OR A JP Z,prline JP prline2 space EX AF,AF' ; вот это сработало? Только что под пивом OR A ; набил ;) LD A,1 JP Z, prline2 INC E JP prline tab LD A,E AND #FC ADD A,#04 LD E,A JP prline ══════════╡ImportEnd DISNAME0.TXT╞════════════════════════════════ С уважением, Дмитрий (OLDMAN). 500:095/100.1@ZXNet oldman@i-connect.ru




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Презентация - новая игра Clickmania.
Смайлик - анекдоты про политику.
Новый фактор - Автор устами героя...
Новости - riskej, ADSL, Вasil/i8, Т(с)S/i8, Slash, Dissоnatоr, Ldir.
Реклама - Реклама и объявления ...

В этот день...   8 мая