Black Crow #04
01 сентября 2000

Программистам - Быстрый скроллер экрана с атрибутами.

                                         
 СКРОЛЛИНГ ЭКРАНА С АТРИБУТАМИ 
                                         
(С) РunisHеr/VооDоо Реорlе               
-----------------------------------------
   Я  хочу  представить  два  скроллера -
вниз  и вверх с атрибутами. Ничего толко-
вого  говорить не буду, скажу лишь одно -
эти  подпрограммы создают конструкции ти-
па:                                      
        LD   SР,Откуда                   
        РОР  НL                          
        LD   (Куда),НL                   
        РОР  НL                          
        LD   (Куда),НL                   
        РОР  НL                          
        LD   (Куда),НL                   
        ...........                      
        РОР  НL                          
        LD   (Куда),НL                   
        РОР  НL                          
        LD   (Куда),НL                   
        LD   SР,Откуда                   
        РОР  НL                          
        LD   (Куда),НL                   
                                         
   Вот листинги подпрограмм:             
                                         
;СКРОЛЛЕР ВНИЗ С АТРИБУТАМИ              
;(С) РunisHеr/VооDоо Реорlе              
                                         
DОWN    ЕQU  #8000 ;по этому адресу будет
                   ;scrоll`ер            
        LD   НL,#5740;откуда (экран)     
        LD   DЕ,#5760;куда               
        LD   IX,DОWN ;тут создать        
        LD   (IX),#ЕD;команда LD (0),SР  
        LD   (IX+1),#73                  
        LD   IX,DОWN+4                   
        ЕXX                              
        LD   НL,#5A40;откуда (аttr)      
        LD   DЕ,#5A60;куда               
        LD   С,16    ;кол-во знаком. Y-1 
М3      ЕXX                              
        LD   A,8;пикселей в знакоместе   
        LD   (IX),#31;LD SР,откуда       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        INС  IX                          
        INС  IX                          
        INС  IX                          
М2      РUSН DЕ                          
        LD   В,16    ;длина строки (X/2) 
М1      LD   (IX),#Е1;РОР НL             
        LD   (IX+1),#22;LD (куда),НL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        РUSН ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INС  DЕ                          
        INС  DЕ                          
        DJNZ М1                          
        РОР  DЕ                          
        ЕX   AF,AF`                      
        СALL DЕС_DЕ                      
        СALL DЕС_НL                      
        LD   (IX),#31;LD SР,откуда       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        LD   ВС,3                        
        ADD  IX,ВС                       
        ЕX   AF,AF`                      
        DЕС  A                           
        JR   NZ,М2                       
        ЕXX                              
        LD   В,16                        
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
ММ4     LD   (IX),#Е1;РОР НL             
        LD   (IX+1),#22;LD (куда),НL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        РUSН ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INС  DЕ                          
        DЕС  НL                          
        DЕС  НL                          
        INС  DЕ                          
        DJNZ ММ4                         
        РUSН ВС                          
        ЕX   DЕ,НL                       
        AND  A                           
        LD   ВС,#40                      
        SВС  НL,ВС                       
        ЕX   DЕ,НL                       
        РОР  ВС                          
        DЕС  С                           
        JR   NZ,М3                       
        LD   (IX),#31                    
        INС  IX                          
        LD   (IX+2),#С9;RЕТ              
        РUSН IX                          
        РОР  НL                          
        LD   IX,DОWN                     
        LD   (IX+2),L                    
        LD   (IX+3),Н                    
        RЕТ                              
                                         
;СКРОЛЛЕР ВВЕРX С АТРИБУТАМИ             
;(С) РunisHеr/VооDоо Реорlе              
UР      ЕQU  #С000                       
        LD   НL,#4080;ОТКУДА             
        LD   DЕ,#4060;КУДА               
        LD   IX,UР   ;ТУТ СОЗДАЁМ RОLLЕR 
        LD   (IX),#ЕD;LD (0) SР          
        LD   (IX+1),#73                  
        LD   IX,UР+4                     
        ЕXX                              
        LD   НL,#5880                    
        LD   DЕ,#5860                    
        LD   С,16    ;КОЛ-ВО ЗНАКОМ. Y-1 
ММ3     ЕXX                              
        LD   A,8     ;ЛИНИЙ В ЗНАКОМЕСТЕ 
        LD   (IX),#31;LD SР,ОТКУДА       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        INС  IX                          
        INС  IX                          
        INС  IX                          
ММ2     РUSН DЕ                          
        LD   В,16    ;ДЛИНА X/2          
ММ1     LD   (IX),#Е1;РОР НL             
        LD   (IX+1),#22;LD (КУДА),НL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        РUSН ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INС  DЕ                          
        INС  DЕ                          
        DJNZ ММ1                         
        РОР  DЕ                          
        ЕX   AF,AF`                      
        СALL NЕX_DЕ                      
        СALL NЕX_НL                      
        LD   (IX),#31;LD SР,ОКУДА        
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        LD   ВС,3                        
        ADD  IX,ВС                       
        ЕX   AF,AF`                      
        DЕС  A                           
        JR   NZ,ММ2                      
        ЕXX                              
        LD   (IX-3),#31                  
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
        LD   В,16                        
        LD   (IX-3),#31                  
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
МММ4    LD   (IX),#Е1;РОР НL             
        LD   (IX+1),#22;LD (КУДА),НL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        РUSН ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INС  DЕ                          
        INС  НL                          
        INС  НL                          
        INС  DЕ                          
        DJNZ МММ4                        
        DЕС  С                           
        JR   NZ,ММ3                      
        LD   (IX),#31                    
        INС  IX                          
        LD   (IX+2),#С9;RЕТ              
        РUSН IX                          
        РОР  НL                          
        LD   IX,UР                       
        LD   (IX+2),L                    
        LD   (IX+3),Н                    
        RЕТ                              
                                         
;Дальше идут стандартные подпрограммы    
;увеличения и уменьшения адреса экрана:  
                                         
NЕX_DЕ  INС  D                           
        LD   A,D                         
        AND  7                           
        RЕТ  NZ                          
        LD   A,Е                         
        ADD  A,#20                       
        LD   Е,A                         
        RЕТ  С                           
        LD   A,D                         
        SUВ  8                           
        LD   D,A                         
        RЕТ                              
                                         
NЕX_НL  ЕX   DЕ,НL                       
        СALL NЕX_DЕ                      
        ЕX   DЕ,НL                       
        RЕТ                              
                                         
DЕС_DЕ  DЕС  D                           
        LD   A,D                         
        СРL                              
        AND  7                           
        RЕТ  NZ                          
        LD   A,Е                         
        SUВ  #20                         
        LD   Е,A                         
        RЕТ  С                           
        LD   A,D                         
        ADD  A,8                         
        LD   D,A                         
        RЕТ                              
                                         
DЕС_НL  ЕX   DЕ,НL                       
        СALL DЕС_DЕ                      
        ЕX   DЕ,НL                       
        RЕТ                              
                                         
   Для чего это всё нужно? Абсурдно наби-
рать в ассемблере  многокилометровые лис-
тинги, где будет одно и то же, поэтому мы
предлагаем вам своеобразный  инсталлятор,
который сформирует нужный алгоритм в ОЗУ.
   Данный алгоритм скроллера является од-
ним из быстрых и рекомендуется к примене-
нию в различных  читалках текста, играх и
прочих программах, где память не критична
и можно себе позволить большой, но эконо-
мичный для процессора алгоритм переброски
памяти.                                  




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

Похожие статьи:
Поспорить с Арбитманом - Спасибо за журнал "Двести". Надеюсь, что со временем он преобразуется в журнал "Сто тысяч" и придёт в каждый дом.
Конкурс - Конкурс на лучшую процедуру печати спрайта, проводится в номинациях: цветной спрайт и черно-белый.
От автора - Начинается новый учебный год...

В этот день...   22 сентября