[net.micro.atari] 50 Line Screen

stone@calgary.UUCP (Glen Stone) (02/21/86)

These routines are taken from Comp-U-Serve. They allow you
to put a mono-system into 50 line mode and back again.

Question: How do they work ??? They index in the negative direction
from the pointers received in the line A call. My line A documentation
says nothing about anything in the negative direction.

Note: the fifty lines are quite nice... for those who are writing terminal
programs, editors, etc. this would be I nice option. I've modified some
of the public domain stuff to include this.

Note1: You can also have a 4x4 font but that hurts.
                                                                          
*  Make hi rez screen bios handle 25 lines of 8x16 characters                
*                                                                            
*                                                                            
* author:                                                                    
*               j d eisenstein                                                
*                                                                           
* date:                                                                      
*               15-aug-85                                                    
*                                                                            

		.text
		.global _hi25                                    

LINEA_INIT      equ     $A000                                                 
GET_REZ         equ     4               ; extended bios resolution inquiry    
                                                                             
                                                                          
_hi25:                                                                       
                                                                            
        lea     stack,sp                                                 
                                                                          
        move.w  #GET_REZ,-(sp)          ; get screen resolution              
        trap    #14                                                         
        addq.w  #2,sp                                                      
                                                                           
        cmp.w   #2,d0                   ; only execute if already in hi rez  
        bne     exit                                                         
                                                                           
                                                                          
        dc.w    LINEA_INIT              ; get the important pointers       
                                                                             
                                                                          
        move.l  08(a1),a1               ; a1 -> 8x16 font header           
                                                                          
        move.l  72(a1),-$0A(a0)         ; v_off_ad <- 8x16 offset table ad
        move.l  76(a1),-$16(a0)         ; v_fnt_ad <- 8x16 font data addr 
                                                                            
        move.w  #0016,-$2E(a0)          ; v_cel_ht <- 16    8x16 cell heigh
        move.w  #0024,-$2A(a0)          ; v_cel_my <- 24    maximum cell "Y" 
        move.w  #1280,-$28(a0)          ; v_cel_wr <- 1280  vertical byte offset
                                                                             
exit:   clr.w   -(sp)                   ; back to the os                     
        trap    #1                                                         
                                                                           
                                                                            
        ds.l    $10                                                          
stack:  ds.l    $01                     ; hey chef, gimme a short stack      
                                                                            
                                                                           
        end                                                                
                                              
                                                                             
*  Make hi rez screen bios handle 50 lines of 8x8 characters               
*                                                                           
*                                                                           
* author:                                                                    
*               j d eisenstein                                              
*                                                                            
* date:                                                                      
*               15-aug-85                                                   
*                                                                            
             .text
             .global _hi50                                                                             
LINEA_INIT      equ     $A000                                               
GET_REZ         equ     4               ; extended bios resolution inquiry 
                                                                            
                                                                            
_hi50:                                                                        
                                                                              
        lea     stack,sp                                                     
                                                                            
        move.w  #GET_REZ,-(sp)          ; get screen resolution               
        trap    #14                                                         
        addq.w  #2,sp                                                        
                                                                             
        cmp.w   #2,d0                   ; only execute if already in hi rez   
        bne     exit                                                         
                                                                            
                                                                              
        dc.w    LINEA_INIT              ; get the important pointers         
                                                                            
        move.l  04(a1),a1               ; a1 -> 8x8 font header              
                                                                            
        move.l  72(a1),-$0A(a0)         ; v_off_ad <- 8x8 offset table addr  
        move.l  76(a1),-$16(a0)         ; v_fnt_ad <- 8x8 font data addr  
                                                                           
        move.w  #008,-$2E(a0)           ; v_cel_ht <- 8    8x8 cell height   
        move.w  #049,-$2A(a0)           ; v_cel_my <- 49   maximum cell "Y
        move.w  #640,-$28(a0)           ; v_cel_wr <- 640  offset to cell Y+
                                                                            
exit:                                                                        
        clr.w   -(sp)                   ; back to the os                     
        trap    #1                                                          
                                                                             
                                                                             
        ds.l    $10                                                          
stack:  ds.l    $01                     ; stack em up an blow em out         
                                                                           
        end