Commodore 16 V-Scroll
Suche
Index
FAQ
Kontakt
Zurück
!to "p4vscroll.prg",cbm
; Basicstart
*= $1001
!byte $0c,$10,$0a,$00,$9e,$34,$31,$30,$39,$00,$00,$00
; main
*=$100d
;--------------------------------------------------
; Commodore 16 Y-Scroll 
;--------------------------------------------------

                 sei
                 ldx #$00
                 txs  
                 lda #$93
                 jsr $ffd2    
                 ldx #$27  
-                lda text,x
                 sta $0fc0,x
                 dex
                 bpl -
                 lda #$00
                 sta $0f                
                 sta $0e
                 sta $10 
                 lda #$c0
                 sta $0a                  
                 sta $0c                  
                 lda #$0f
                 sta $0b                  
                 sta $0d
                 lda #$00
                 tax 
                 tay 
                 lda #<vscroll
                 sta $0314
                 lda #>vscroll
                 sta $0315
                 cli
                 jmp*  

vscroll:          
                 lda $10          ; direction 0: up ; 1:down   
                 bne ++
                 lda $0f
                 cmp #$14         ; upper line 
                 beq +                     
                 jmp up
+                inc $10
                 jmp ex_                  
++               lda $0f               
                 cmp #$04         ; lower line  
                 beq +
                 jmp down
+                dec $10
skip:            jmp ex_                   
up:          
  
-                lda $ff1d        ; Current position of vertical scanning. 
                 cmp #$ff         ; wait for rasterline , lower: faster
                 bne -             
++               lda $0e
                 and #$07
                 ora #%00010000   ; screen on, 24 lines
                 sta $ff06        ; write bit 0-2: Vertical smooth-scrolling
                 and #$07          
                 beq +                    
                 dec $0e          ; softscroll again
                 jmp ex_
+                inc $0f          ; 
                 sec   
                 lda $0c          ; sbc #40 for next line
                 sbc #$28
                 sta $0c
                 bcs +
                 dec $0d   
                 sec   
+                ldy #$27         ; hardscroll                      
-                lda ($0a),y      ; get old line 
                 sta ($0c),y      ; move up 
                 dey
                 bcs +
                 dec $0b
+                bpl -                   
                 lda #$20         ; delete old line 
                 ldy #$27                                
-                sta ($0a),y
                 dey
                 bpl - 
                 sec              ; calculate next line  
                 lda $0a
                 sbc #$28
                 sta $0a
                 bcs ++
                 dec $0b
++               jmp ex_

down:            

                 lda $ff1d       
                 cmp #$ff         ; wait for rasterline , lower: faster     
                 bne down             
                 lda $0e          ; softscroll-bits  
                 and #$07
                 sta $0e
                 ora #%00010000   ; screen on, 24 lines
                 sta $ff06        ; write bit 0-2: Vertical smooth-scrolling
                 and #$07
                 cmp #$07         ; 8 bits ? 
                 beq +            ; do hardscroll
                 inc $0e          ; softscroll again
                 jmp skip
+                dec $0f
                 clc  
                 lda $0c          ; adc #40 for next line
                 adc #$28
                 sta $0c
                 bcc +
                 inc $0d                  
+                sec                
                 ldy #$27         ; hardscroll                      
-                lda ($0a),y      ; get old line 
                 sta ($0c),y      ; move up 
                 dey
                 bcs +
                 dec $0b
+                bpl -                    
                 lda #$20         ; delete old line 
                 ldy #$27                                
-                sta ($0a),y
                 dey
                 bpl - 
                 clc              ; calculate next line  
                 lda $0a
                 adc #$28
                 sta $0a
                 bcc ex_
                 inc $0b

ex_:             pla
                 tay    
                 pla   
                 tax    
                 pla    
                 rti    

                            

text:
!scr "!!!! the crazy jumping plus/4 text !!!!!"

 

Letzte Änderung: 2020-12-28 20:52:17
  Rubrik:  C16
Rubriken-Übersicht
 6 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!