|  
 
Этюды - процедура SPRITE OUT для вывода спрайтов с маской с точностью до пикселя. 
  
 |   
Вторая процедура это SPRITE OUT для спрайтов с маской с точностью до пикселя. Она очень быстрая, хотя и учитывает переход через границу экрана. Если Вам этого не надо, ее можно ускорить. Даже применяя таблицы, увеличить ее скорость нельзя. 
И еще у меня обращение к авторам "Этюдов" Если Вы начинающий, то не спешите в ZX РЕВЮ с первым же вариантом Вашей процедуры, оптимизируйте ее, думайте над ней так, чтобы голова трещала. Только так Вы станете человеком, который пишет отличные программы. 
И еще пара слов об Ассемблерах. В частности, о MASM 1.1. Это очень удобный, очень быстрый любительский ассемблер, но не профессиональный. Профессио- 
LD HL,#52E0 ; адрес линейки в экране 
LD С, #80 ЕХХ 
LD D.A ; в DE - остаток от 
SUB 1 ; деления длины/256 
EX AF.AF' CALL #562 ЕХХ 
LOADL LD A,(HL) заполнение линейки 
этюды 
нальным является GENS (может быть GENIUS, но я не видел его), а MASM это лишь нечто вроде ZEUS для 128 кб. Профессиональный ассемблер должен иметь следующие качества: 
• макросы (полноценные, а не как в MASM); 
• условия трансляции; 
• работа с принтером; 
• обработка текста в один проход; 
• и безусловно, родственный монитор с возможностью получе-  
OR LD INC 
С 
(HL),A Н 
| 
 ния исходного текста.  | 
 LD  | 
 (hl),A  |  
| 
 Теперь сама процедура:  | 
 INC  | 
 Н  |  
| 
 ; (с) 1996 MAXIM LUPAN  | 
 LD  | 
 (HL),A  |  
| 
 LOADER Dl  | 
 | 
 INC  | 
 Н  |  
| 
 CALL  | 
 3435  | 
 LD  | 
 (HL),A  |  
| 
 очистка экрана  | 
 | 
 RRC  | 
 С  |  
| 
 LD  | 
 HL.MES  | 
 JR  | 
 NC,LNEXT  |  
| 
 ; текст по каналу # FD  | 
 ; следующее знакоместо  |  
| 
 PRLOOP LD  | 
 a;(hl>  | 
 INC  | 
 L  |  
| 
 RST  | 
 #10  | 
 LNEXT LD  | 
 H,#52  |  
| 
 INC  | 
 HL  | 
 LD  | 
 A,E  |  
| 
 LD  | 
 A,(HL)  | 
 EXX  | 
 |  
| 
 INC  | 
 A  | 
 LD  | 
 E.A  |  
| 
 JR  | 
 NZ, PRLOOP  | 
 LD  | 
 (IX),L  |  
| 
 LD  | 
 DE.17  | 
 сокращенный вариант ПЗУ  |  
| 
 ; загрузка заголовка  | 
 | 
 INC  | 
 IX  |  
| 
 LD  | 
 IX.LOADBF  | 
 DEC  | 
 DE  |  
| 
 SCF  | 
 | 
 LD  | 
 A,(#5C7)  |  
| 
 INC  | 
 D  | 
 ; коррекция задержки,  |  
| 
 ех  | 
 AF.AF'  | 
 INC  | 
 A  |  
| 
 DEC  | 
 D  | 
 ; может быть и излишняя осторож  |  
| 
 CALL  | 
 #562  | 
 ность?  | 
 |  
| 
 JR  | 
 NC,ERROR  | 
 LD  | 
 B.A  |  
| 
 можно изменить  | 
 | 
 CALL  | 
 #5C8  |  
| 
 LD  | 
 IX,(LOADBF+13)  | 
 ехх  | 
 |  
| 
 LD  | 
 DE,(LOADBF+11)  | 
 DJNZ  | 
 LOADL  |  
| 
 LD  | 
 A,D  | 
 ERROR LD  | 
 HL, 10072  |  
| 
 ехх  | 
 ; выход в BASIC  | 
 |  
| 
 LD  | 
 E.A  | 
 ехх  | 
 |  
| 
 в E - длина/256  | 
 | 
 EI  | 
 |  
| 
 XOR  | 
 A  | 
 RET  | 
 |  
| 
 LD  | 
 B,A  | 
 MES DB  | 
 22,0,12,"LOADIN  |  
 
в В - счетчик на 256 блоков 
GM3f6,6,255 
этюды 
LOADBF DS 17 
LENGTH OF OBJECT: #0082 (130) 
SPROUT (с) 1996 MAXIM LUPAN в HL - адрес спрайта с чередованием маски данных в В - ширина в С - высота в D - Y (в пикселях) в Е - X (в пикселях) 
| 
 SPROUT PUSH  | 
 HL  |  
| 
 CALL  | 
 ADRPIX  |  
| 
 вычесления адреса  | 
 |  
| 
 PUSH  | 
 HL  |  
| 
 в экране  | 
 |  
| 
 LD  | 
 HL,0  |  
| 
 очистка участков  | 
 |  
| 
 LD  | 
 (SOROL1 ),HL  |  
| 
 ролирования  | 
 |  
| 
 LD  | 
 (SOROL1+2),HL  |  
| 
 LD  | 
 (SOROL2),HL  |  
| 
 LD  | 
 (SOROL2+2),HL  |  
| 
 SOFORM1 SCF  | 
 |  
| 
 создание маски  | 
 |  
| 
 RR  | 
 L  |  
| 
 INC  | 
 H  |  
| 
 RLCA  | 
 |  
| 
 JR  | 
 NC.SOFORM1  |  
| 
 DEC  | 
 H  |  
| 
 LD  | 
 A,L  |  
| 
 OR  | 
 A  |  
| 
 RLA  | 
 |  
| 
 LD  | 
 (SOMAS1 + 1),A  |  
| 
 LD  | 
 (SODAT2+1 ),A  |  
| 
 CPL  | 
 |  
| 
 LD  | 
 (SOMAS2+1),A  |  
| 
 LD  | 
 (SODAT1 + 1),A  |  
| 
 LD  | 
 A,#0F  |  
| 
 код команды RRCA  | 
 |  
| 
 BIT  | 
 2,H  |  
| 
 JR  | 
 Z.SORI6H  |  
| 
 LD  | 
 A,H  |  
| 
 XOR  | 
 7  |  
| 
 INC  | 
 A  |  
| 
 LD  | 
 H,A  |  
| 
 LD  | 
 A,7  |  
| 
 ; код команды RLCA  | 
 |  
| 
 SORI6H PUSH  | 
 ВС  |  
 
; создание роллирующих 
| 
 LD  | 
 DE.SOROL1  |  
| 
 участков  | 
 |  
| 
 LD  | 
 BC.SOROL2  |  
| 
 INC  | 
 Н  |  
| 
 SOFORM2 DEC  | 
 Н  |  
| 
 JR  | 
 Z.SOEXIT  |  
| 
 LD  | 
 (ВС),А  |  
| 
 LD  | 
 (DE),A  |  
| 
 INC  | 
 ВС  |  
| 
 INC  | 
 DE  |  
| 
 JR  | 
 SOFORM2  |  
| 
 SOEXIT POP  | 
 ВС  |  
| 
 POP  | 
 HL  |  
| 
 POP  | 
 DE  |  
| 
 SOEI6H PUSH  | 
 ВС  |  
| 
 PUSH  | 
 HL  |  
| 
 SOLOOP LD  | 
 A,(DE)  |  
| 
 SOROL1 NOP  | 
 |  
| 
 ролирование маски  | 
 |  
| 
 NOP  | 
 |  
| 
 NOP  | 
 |  
| 
 NOP  | 
 |  
| 
 LD  | 
 С,А  |  
| 
 PUSH  | 
 HL  |  
| 
 SOMAS 1 OR  | 
 0  |  
| 
 AND  | 
 (HL)  |  
| 
 ; левая часть маски  | 
 |  
| 
 LD  | 
 (HL),A  |  
| 
 LD  | 
 А,# 1F  |  
| 
 INC  | 
 L  |  
| 
 AND  | 
 L  |  
| 
 JR  | 
 NZ.SOCONT1  |  
| 
 оценка перехода через  |  
| 
 LD  | 
 A.L  |  
| 
 границу экрана с  | 
 |  
| 
 SUB  | 
 #20  |  
| 
 возвратом с другой  | 
 |  
| 
 LD  | 
 L.A  |  
| 
 ; стороны  | 
 |  
| 
 SOCONT1 LD  | 
 А,С  |  
| 
 SOMAS2 OR  | 
 0  |  
| 
 AND  | 
 (HL)  |  
| 
 правая часть маски  | 
 |  
| 
 LD  | 
 (HL),A  |  
| 
 INC  | 
 DE  |  
| 
 POP  | 
 HL  |  
| 
 LD  | 
 A.(DE)  |  
| 
 SOROL2 NOP  | 
 |  
 
ролирование данных 
| 
 | 
 NOP  | 
 |  
| 
 | 
 NOP  | 
 |  
| 
 | 
 NOP  | 
 |  
| 
 | 
 LD  | 
 C,A  |  
| 
 S0DAT1  | 
 AND  | 
 0  |  
| 
 | 
 OR  | 
 (HL)  |  
| 
 | 
 LD  | 
 (HL),A  |  
| 
 | 
 LD  | 
 A,#1F  |  
| 
 | 
 INC  | 
 L  |  
| 
 | 
 AND  | 
 L  |  
| 
 | 
 JR  | 
 NZ.SOCONT2  |  
| 
 | 
 LD  | 
 A,L  |  
| 
 | 
 SUB  | 
 #20  |  
| 
 | 
 LD  | 
 L.A  |  
| 
 S0C0NT2  | 
 LD  | 
 А,С  |  
| 
 S0DAT2  | 
 AND  | 
 0  |  
| 
 | 
 OR  | 
 (HL)  |  
| 
 | 
 LD  | 
 (HL),A  |  
| 
 | 
 INC  | 
 DE  |  
| 
 | 
 DJNZ  | 
 SOLOOP  |  
| 
 переход к следующему  |  
| 
 | 
 POP  | 
 HL  |  
| 
 ; знакоместу  | 
 |  
| 
 | 
 POP  | 
 ВС  |  
| 
 | 
 CALL  | 
 DOWNHL  |  
| 
 | 
 LD  | 
 A,H  |  
| 
 ; если вышел из экрана  |  
| 
 | 
 CP  | 
 #58  |  
| 
 , возврат  | 
 | 
 |  
| 
 | 
 RET  | 
 NC  |  
| 
 | 
 DEC  | 
 С  |  
| 
 | 
 JR  | 
 NZ.SOEI6H  |  
| 
 ; цикл по высоте  | 
 |  
| 
 | 
 RET  | 
 |  
| 
 ADRPIX  | 
 LD  | 
 A.E  |  
| 
 вычесление по  | 
 |  
| 
 | 
 RLCA  | 
 |  
| 
 координатам D-y Е-х  |  
| 
 | 
 RLCA  | 
 |  
| 
 ; адреса HL  | 
 |  
| 
 | 
 RLCA  | 
 |  
| 
 и бита его положение  |  
| 
 | 
 LD  | 
 C,A  |  
| 
 в байте)в А  | 
 |  
| 
 | 
 CPL  | 
 |  
| 
 | 
 OR  | 
 #C7  |  
| 
 | 
 LD  | 
 (MODPIX+1),A  |  
| 
 | 
 LD  | 
 A,L  |  
 
XOR D 
AND #С7 
XOR D RLCA RLCA 
LD L.A 
LD A.D 
RRA 
RRA 
RRA 
AND #18 
XOR D 
AND #F8 
XOR D 
ADD A, #40 
LD H,A 
XOR A 
MODPIX SET 0,A RET 
; подпрграмма DOWNHL стандартная 
длина SPROUT #A1 (161) 
длина ADRPIX #24 (36) 
 
СОДЕРЖАНИЕ: 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 Форум-Игры - в разделе рассмотрены: Dun Darach, Murray Mause (Supercop), Wild West Seymour, Sim City, Hero Quest, Dizzy-Y, Apollo, Cliffhanger, Laser Squad, Movie, Elite, Where Time Stood Still, Sceptre, Carrier Command, Math Day.
 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
 
 
  
 |  
 
 
 
 |