Programmers - Fast screen scroller with attributes.

Black Crow #04
                                         
 SCROLLING SCREEN WITH ATTRIBUTES 
                                         
(C) PunisHer/VooDoo People               
-------------------------------------------------------
 I want to present two scrollers -
down and up with attributes. Nothing really
I won’t say anything, I’ll just say one thing -
these subroutines create constructions
pa:                                      
        LD SP,From                   
        POP HL                          
        LD (Where),HL                   
        POP HL                          
        LD (Where),HL                   
        POP HL                          
        LD (Where),HL                   
        ..........                      
        POP HL                          
        LD (Where),HL                   
        POP HL                          
        LD (Where),HL                   
 LD SP,From                   
        POP HL                          
        LD (Where),HL                   
                                         
   Here are the subroutine listings:             
                                         
;SCROLLER DOWN WITH ATTRIBUTES              
;(C) PunisHer/VooDoo People              
                                         
DOWN EQU #8000 ;at this address there will be
                   ;scroller            
        LD HL,#5740;from (screen)     
        LD DE,#5760;where               
        LD IX,DOWN ;create here        
        LD (IX),#ED;command LD (0),SP  
        LD (IX+1),#73                  
        LD IX,DOWN+4                   
        EXX                              
        LD HL,#5A40;from (attr)      
        LD DE,#5A60;where               
        LD С,16 ;number of signs. Y-1 
M3 EXX                              
 LD A,8;pixels in familiarity   
        LD (IX),#31;LD SP,from       
        LD (IX+1),L                    
        LD (IX+2),H                    
        INC IX                          
        INC IX                          
        INC IX                          
M2 PUSH DE                          
        LD В,16 ;line length (X/2) 
M1 LD (IX),#E1;POP HL             
        LD (IX+1),#22;LD (where),HL     
        LD (IX+2),E                    
        LD (IX+3),D                    
        PUSH Sun                          
        LD Sun,4ADD IX,VS                       
        ROR VS                          
        INC OF                          
        INC OF                          
        DJNZ M1                          
        ROR OF                          
        EX AF,AF`                      
 CALL DEC_DE                      
        CALL DEC_HL                      
        LD (IX),#31;LD SP,where       
        LD (IX+1),L                    
        LD (IX+2),H                    
        LD VS,3                        
        ADD IX,VS                       
        EX AF,AF`                      
        DEC A                           
        JR NZ,M2                       
        EXX                              
        LD B,16                        
        LD (IX-2),L                    
        LD (IX-1),H                    
MMCH LD (IX),#E1;ROR HL             
        LD (IX+1),#22;LD (where),HL     
        LD (IX+2),E                    
        LD (IX+3),D                    
        PUSH VS                          
        LD VS,4                        
        ADD IX,VS                       
        ROR VS                          
 INC DE                          
        DEC HL                          
        DEC HLINC DE                          
        DJNZ MMC                         
        PUSH Sun                          
        EX DE,HL                       
        AND A                           
        LD Sun,#40                      
        SBC HL,VS                       
        EX DE,HL                       
        ROR Sun                          
        DEC C                           
        JR NZ,M3                       
        LD (IX),#31                    
        INC IX                          
        LD (IX+2),#С9;RET              
        PUSH IX                          
        POP HL                          
        LD IX,DOWN                     
        LD (IX+2),L                    
        LD (IX+3),H                    
 RET                              
                                         
;SCROLLER UP WITH ATTRIBUTES             
;(C) PunisHer/VooDoo People              
UP EQU #C000                       
        LD HL,#4080;WHERE             
        LD DE,#4060;WHERE               
        LD IX,UP ;HERE WE CREATE ROLLER 
        LD (IX),#ED;LD (0) SP          
        LD (IX+1),#73                  
        LD IX,UP+4EXX                              
        LD HL,#5880                    
        LD DE,#5860                    
        LD C,16 ;QUANTITY OF SIGNS. Y-1 
MMZ EXX                              
        LD A,8 ;LINES IN A SIGNAL PLACE 
        LD (IX),#31;LD SP,FROM       
        LD (IX+1),L                    
        LD (IX+2),H                    
        INC IX                          
        INC IX                          
INC IX                          
MM2 PUSH DE                          
        LD B,16 ;LENGTH X/2          
MM1 LD (IX),#E1;POP HL             
        LD (IX+1),#22;LD (WHERE),HL     
        LD (IX+2),E                    
        LD (IX+3),D                    
        PUSH Sun                          
        LD Sun,4                        
        ADD IX,Sun                       
        ROR Sun                          
        INC DE                          
        INC DE                          
        DJNZ MM1                         
        POP DE                          
        EX AF,AF`                      
        CALL NEX_DE                      
        CALL NEX_HL                      
        LD (IX),#31;LD SP,OKUDA        
        LD (IX+1),L                    
        LD (IX+2),H                    
        LD Sun,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                          
        РОР  HLLD IX,UP                       
        LD (IX+2),L                    
        LD (IX+3),H                    
        RET                              
                                         
;Next are the standard subroutines    
;increase and decrease screen address:  
                                         
NEX_DE INC D                           
        LD A,D                         
        AND 7                           
        RET NZ                          
 LD A,E                         
        ADD A,#20                       
        LD E,A                         
        RET C                           
        LD A,D                         
        SUB 8                           
        LD D,A                         
        RET                              
                                         
NEX_HL EX DE,HL                       
        CALL NEX_DE                      
        EX DE,HL                       
        RET                              
                                         
DEC_DE DEC D                           
        LD A,D                         
        CPL                              
        AND 7                           
        RET NZ                          
        LD A,E                         
        SUB #20LD E,A                         
 RET C                           
        LD A,D                         
        ADD A,8                         
        LD D,A                         
        RET                              
                                         
DEC_HL EX DE,HL                       
        CALL DEC_DE                      
        EX DE,HL                       
        RET                              
                                         
   What is all this for? Absurdly filled
army in assembler, many kilometers of foxes
tings, where it will be the same thing, so we
We offer you a kind of installer,
which will generate the required algorithm in RAM.
   This scroller algorithm is one-
one of the fastest and recommended for use -
knowledge in various text readers, games and
other programs where memory is not critical
and you can afford a big one, but it’s economical
processor-friendly transfer algorithm
memory.                                  

Share your thoughts about the article