:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №27 (05.08.2006) Просмотров: 4130
Рубрика: Этюды. Номер: №27 (05.08.2006). ЭтюдыВладислав Ювженко, г. Красноярск№ 1. Быстрая переброска байт между страницами. На входе: HL - адрес «откуда» DE - адрес «куда» BC - какие страницы переключать A - сколько байт перебросить. Например, необходимо перебросить блок размером 6144 байта, тогда A = 12. Вычисляется по Формуле: 6144/2/256. Можно перебрасывать только «круглые» и четные числа. ;41 байт EXX LD B,A LD C,0 EXX LD A,B EX AF,AF LD A,C LD BC,#7ffd DI LD (stak+1),SP LD SP,HL EX DE,HL EXX EXX EX AF,AF OUT (C),A EX AF,AF POP DE OUT (C),A LD (HL),E INC HL LD (HL),D INC HL EXX DEC C JR NZ,$-14 DJNZ $-16 stak LD SP,0 EI № 2. Обмен байтами между страницами. На входе: HL - откуда DE - страницы BC - куда A - сколько (только «круглые» числа) ;35 байт. PUSH BC EXX POP HL LD B,A LD C,0 EXX LD BC,#7ffd OUT (C),D EXX EXX LD A,(HL) EX AF,AF OUT (C),E EXX LD A,(HL) EX AF,AF LD (HL),A INC HL EXX OUT (C),D EX AF,AF LD (HL),A INC HL EXX DEC C JR NZ,$-18 DJNZ $-20 № 3. Быстрая печать текста на 32 символа в строке. На входе: DE - куда печатать (адрес экрана) BC - адрес текста (конец 0) ;49 байт DI LD (stk+1),SP print LD A,(BC) OR A JR Z,stk LD L,A ADD HL,HL LD H,15 ADD HL,HL ADD HL,HL LD SP,HL EX DE,HL !ASSM 4 POP DE LD (HL),E INC H LD (HL),D INC H !CONT ORG $-1 EX DE,HL LD A,D SUB 7 LD D,A INC BC INC E JR print stk LD SP,0 EI № 4. Процедура предназначена для распаковки картинок формата multi studio 2. 1 (с расширением «p») в более приемлемый вид. На авторство я не претендую, процедуру написал Disabler/OHG/DPL, но я неплохо ее оптимизировал. ;44 байта. LD HL,адрес пакованной картинки LD B,L EXX LD HL, куда распаковывать (буфер размером 12288 байт (3 RGB спрайта размером 4096 байт.) LD C,6 mu02 PUSH HL LD B,8 mu03 EXX DEC B INC B JR NZ,mu04 LD A,(HL) CP 154 INC HL JR NZ,mu05 LD C,(HL) INC HL LD B,(HL) INC HL mu04 DEC B LD A,C mu05 EXX LD (HL),A INC H DJNZ mu03 LD D,H POP HL INC L JR NZ,mu02 LD H,D DEC C JR NZ,mu02 * * * Максим Торгунаков (TMA), г. Красноярск № 1. Обмен байтов между областями памяти. Без учета страниц. На входе: HL - откуда DE - куда BC - сколько ;9 байт. LD A,(DE) LDI DEC HL LD (HL),A INC HL JP PE,$-6 № 2. Заполнение памяти, произвольным байтом. На входе: DE - адрес конца области + 1 B - длинна области*256 C - байт заполнения ;144 байта. DI LD HL,0 ADD HL,SP EX DE,HL LD SP,HL EX DE,HL LD D,C LD E,C !ASSM 128 PUSH DE !CONT DEC B JP NZ,$-129 LD SP,HL EI № 3. Генератор случайных чисел. На один байт больше чем в «Абзаце» #26 и медленнее работает, зато лучше «перемешивает». ;11 байт rnd LD A,53 ADD A,A JR NC,$+5 LD C,51 XOR C LD (rnd+1),A № 4. Быстрое рисование окружности. Сначала декранч. LD HL, адрес килобайтной таблички. LD DE,#57e0 LD BC,#80 l0 LD (HL),E INC H LD (HL),D DEC H LD A,D DEC D AND 7 JR NZ,l1 LD A,E ADD A,#e0 LD E,A SBC A,A AND 8 ADD A,D LD D,A l1 INC L LD A,L XOR #c0 JR NZ,l0 l2 LD (HL),A INC H LD (HL),A DEC H INC L JR NZ,l2 INC H INC H l3 LD (HL),A INC H LD (HL),C RRC C ADC A,B DEC H INC L JR NZ,l3 Сама процедура. На входе: HL - координаты Y,X A - радиус (нельзя задавать 0) EXX LD B,#60 EXX LD B,A LD C,0 RRA loop EX AF,AF LD A,H ADD A,B JR C,skip0 CP #c0 JR NC,skip0 LD LX,A LD A,L ADD A,C CALL NC,plot LD A,L SUB C CALL NC,plot skip0 LD A,H SUB B JR C,skip1 LD LX,A LD A,L ADD A,C CALL NC,plot LD A,L SUB C CALL NC,plot skip1 LD A,H ADD A,C JR C,skip2 CP #c0 JR NC,skip2 LD LX,A LD A,L ADD A,B CALL NC,plot LD A,L SUB B CALL NC,plot skip2 LD A,H SUB C JR C,skip3 LD LX,A LD A,L ADD A,B CALL NC,plot LD A,L SUB B CALL NC,plot skip3 EX AF,AF INC C SUB C JR NC,loop DEC B ADD A,B EX AF,AF LD A,B CP C JR NC,loop+1 RET plot EXX LD E,A LD D,LX LD H,B LD L,D LD A,(HL) INC H LD D,(HL) INC H LD L,E OR (HL) LD E,A INC H LD A,(DE) OR (HL) LD (DE),A EXX RET Совокупный размер декранча и процедуры 166 байт. * * * ;by Axor ;HL=HL*128, 35 тактов LD A,L RRC H RRA LD H,A LD L,0 RR L |