01 сентября 2000

                                         
 СКРОЛЛИНГ ЭКРАНА С АТРИБУТАМИ 
                                         
(С) PunisHer/VooDoo People               
-----------------------------------------
   Я  хочу  представить  два  скроллера -
вниз  и вверх с атрибутами. Ничего толко-
вого  говорить не буду, скажу лишь одно -
эти  подпрограммы создают конструкции ти-
па:                                      
        LD   SP,Откуда                   
        РОР  HL                          
        LD   (Куда),HL                   
        РОР  HL                          
        LD   (Куда),HL                   
        РОР  HL                          
        LD   (Куда),HL                   
        ...........                      
        РОР  HL                          
        LD   (Куда),HL                   
        РОР  HL                          
        LD   (Куда),HL                   
        LD   SP,Откуда                   
        РОР  HL                          
        LD   (Куда),HL                   
                                         
   Вот листинги подпрограмм:             
                                         
;СКРОЛЛЕР ВНИЗ С АТРИБУТАМИ              
;(С) PunisHer/VooDoo People              
                                         
DOWN    EQU  #8000 ;по этому адресу будет
                   ;scroll`ер            
        LD   HL,#5740;откуда (экран)     
        LD   DE,#5760;куда               
        LD   IX,DOWN ;тут создать        
        LD   (IX),#ED;команда LD (0),SP  
        LD   (IX+1),#73                  
        LD   IX,DOWN+4                   
        EXX                              
        LD   HL,#5A40;откуда (attr)      
        LD   DE,#5A60;куда               
        LD   С,16    ;кол-во знаком. Y-1 
М3      EXX                              
        LD   A,8;пикселей в знакоместе   
        LD   (IX),#31;LD SP,откуда       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        INC  IX                          
        INC  IX                          
        INC  IX                          
М2      PUSH DE                          
        LD   В,16    ;длина строки (X/2) 
М1      LD   (IX),#Е1;РОР HL             
        LD   (IX+1),#22;LD (куда),HL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        PUSH ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INC  DE                          
        INC  DE                          
        DJNZ М1                          
        РОР  DE                          
        ЕХ   AF,AF`                      
        CALL DEC_DE                      
        CALL DEC_HL                      
        LD   (IX),#31;LD SP,откуда       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        LD   ВС,3                        
        ADD  IX,ВС                       
        ЕХ   AF,AF`                      
        DEC  A                           
        JR   NZ,М2                       
        EXX                              
        LD   В,16                        
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
ММЧ     LD   (IX),#Е1;РОР HL             
        LD   (IX+1),#22;LD (куда),HL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        PUSH ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INC  DE                          
        DEC  HL                          
        DEC  HL                          
        INC  DE                          
        DJNZ ММЧ                         
        PUSH ВС                          
        ЕХ   DE,HL                       
        AND  A                           
        LD   ВС,#40                      
        SBC  HL,ВС                       
        ЕХ   DE,HL                       
        РОР  ВС                          
        DEC  С                           
        JR   NZ,М3                       
        LD   (IX),#31                    
        INC  IX                          
        LD   (IX+2),#С9;RET              
        PUSH IX                          
        РОР  HL                          
        LD   IX,DOWN                     
        LD   (IX+2),L                    
        LD   (IX+3),Н                    
        RET                              
                                         
;СКРОЛЛЕР ВВЕРХ С АТРИБУТАМИ             
;(С) PunisHer/VooDoo People              
UP      EQU  #С000                       
        LD   HL,#4080;ОТКУДА             
        LD   DE,#4060;КУДА               
        LD   IX,UP   ;ТУТ СОЗДАЁМ ROLLER 
        LD   (IX),#ED;LD (0) SP          
        LD   (IX+1),#73                  
        LD   IX,UP+4                     
        EXX                              
        LD   HL,#5880                    
        LD   DE,#5860                    
        LD   С,16    ;КОЛ-ВО ЗНАКОМ. Y-1 
ММЗ     EXX                              
        LD   A,8     ;ЛИНИЙ В ЗНАКОМЕСТЕ 
        LD   (IX),#31;LD SP,ОТКУДА       
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        INC  IX                          
        INC  IX                          
        INC  IX                          
ММ2     PUSH DE                          
        LD   В,16    ;ДЛИНА X/2          
ММ1     LD   (IX),#Е1;РОР HL             
        LD   (IX+1),#22;LD (КУДА),HL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        PUSH ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INC  DE                          
        INC  DE                          
        DJNZ ММ1                         
        РОР  DE                          
        ЕХ   AF,AF`                      
        CALL NEX_DE                      
        CALL NEX_HL                      
        LD   (IX),#31;LD SP,ОКУДА        
        LD   (IX+1),L                    
        LD   (IX+2),Н                    
        LD   ВС,3                        
        ADD  IX,ВС                       
        ЕХ   AF,AF`                      
        DEC  A                           
        JR   NZ,ММ2                      
        EXX                              
        LD   (IX-3),#31                  
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
        LD   В,16                        
        LD   (IX-3),#31                  
        LD   (IX-2),L                    
        LD   (IX-1),Н                    
МММЧ    LD   (IX),#Е1;РОР HL             
        LD   (IX+1),#22;LD (КУДА),HL     
        LD   (IX+2),Е                    
        LD   (IX+3),D                    
        PUSH ВС                          
        LD   ВС,4                        
        ADD  IX,ВС                       
        РОР  ВС                          
        INC  DE                          
        INC  HL                          
        INC  HL                          
        INC  DE                          
        DJNZ МММЧ                        
        DEC  С                           
        JR   NZ,ММЗ                      
        LD   (IX),#31                    
        INC  IX                          
        LD   (IX+2),#С9;RET              
        PUSH IX                          
        РОР  HL                          
        LD   IX,UP                       
        LD   (IX+2),L                    
        LD   (IX+3),Н                    
        RET                              
                                         
;Дальше идут стандартные подпрограммы    
;увеличения и уменьшения адреса экрана:  
                                         
NEX_DE  INC  D                           
        LD   A,D                         
        AND  7                           
        RET  NZ                          
        LD   A,Е                         
        ADD  A,#20                       
        LD   Е,A                         
        RET  С                           
        LD   A,D                         
        SUB  8                           
        LD   D,A                         
        RET                              
                                         
NEX_HL  ЕХ   DE,HL                       
        CALL NEX_DE                      
        ЕХ   DE,HL                       
        RET                              
                                         
DEC_DE  DEC  D                           
        LD   A,D                         
        CPL                              
        AND  7                           
        RET  NZ                          
        LD   A,Е                         
        SUB  #20                         
        LD   Е,A                         
        RET  С                           
        LD   A,D                         
        ADD  A,8                         
        LD   D,A                         
        RET                              
                                         
DEC_HL  ЕХ   DE,HL                       
        CALL DEC_DE                      
        ЕХ   DE,HL                       
        RET                              
                                         
   Для чего это всё нужно? Абсурдно наби-
рать в ассемблере  многокилометровые лис-
тинги, где будет одно и то же, поэтому мы
предлагаем вам своеобразный  инсталлятор,
который сформирует нужный алгоритм в ОЗУ.
   Данный алгоритм скроллера является од-
ним из быстрых и рекомендуется к примене-
нию в различных  читалках текста, играх и
прочих программах, где память не критична
и можно себе позволить большой, но эконо-
мичный для процессора алгоритм переброски
памяти.                                  



Other articles:


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

Similar articles:
Spectrum programming - Modern methods of coding and modern ways of working with graphics.
Iron - Interview with Captain Nemo Company Logros during ENLiGHTa.
Championship VIRUS-2 - is declared the new championship viruses.

В этот день...   21 November