Jump to content
  • entries
    36
  • comments
    18
  • views
    33,676

Vertical Scrolling Techniques


tschak909

379 views

I've done the first little test of some vertical scrolling techniques using a moving ANTIC JMP instruction, so far it works, i just need to alter the counter on the up cycle slightly, but one question.. how do I make the scrolling completely smooth, with no jumps?

 

-Thom

 

Source Code: post-2394-1083265146_thumb.jpg

 

;

; TEST PROGRAM TO TRY MY DISPLAY LIST THEORY.

;

 

; NOTES

;

; 5 INVADERS LINES OF 8 PIXELS HIGH

; 2 BLANK LINES BETWEEN EACH SEGMENT

;

; USING ANTIC MODE 2 TO SEE THE LINE DIVISIONS

;

 

.INCLUDE atariequ.asm

 

UPCTRL = $80 ; UP LINE COUNTER

UPCTRH = $81 ;

DNCTRL = $82 ; DOWN LINE COUNTER

DNCTRH = $83 ;

UPDOWN = $84 ; GOING UP OR DOWN?

 

*=$2000

JMP START

 

;

; DISPLAY LIST

;

 

DLIST .BYTE $70 ; 3 BLANK 8-LINES

.BYTE $70 ; FOR THE

.BYTE $70 ; BORDER

UPJMP .BYTE $01,<UPBOT,>UPBOT

UPBLNK .BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

UPBOT .BYTE $00 ; 1 BLANK LINE

.BYTE $55,$00,$49 ; BONUS DISPLAY

.BYTE $40 ; 5 BLANK LINES

.BYTE $52,$00,$50 ;

.BYTE $20 ; 3 BLANK LINES

.BYTE $52,$00,$51 ;

.BYTE $20 ;

.BYTE $52,$00,$52 ;

.BYTE $20 ;

.BYTE $52,$00,$53 ;

.BYTE $20 ;

.BYTE $52,$00,$54 ;

DNJMP .BYTE $01,<DNTOP,>DNTOP ; JUMP INSTRUCTION FOR MIDDLE OF SCREEN

DNTOP .BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

.BYTE $00 ; 1 BLANK LINE

DNBOT .BYTE $00 ; 1 BLANK LINE

.BYTE $41,<DLIST,>DLIST ; JUMP BACK TO BEGINNING OF DLIST AT VBLANK

 

;

; MAIN PROGRAM

;

START CLD

SCTR LDA #<UPBOT ; SET INITIAL COUNTERS

STA UPCTRL ;

LDA #>UPBOT ;

STA UPCTRH ;

LDA #<DNTOP ;

STA DNCTRL ;

LDA #>DNTOP ;

STA DNCTRH ;

LDA #$01 ;

STA UPDOWN ;

SDMA LDA #$3D ;

STA SDMCTL ; SET UP PLAYFIELD

SDLS LDA #<DLIST ; SET UP DISPLAY LIST

STA SDLSTL ;

LDA #>DLIST ;

STA SDLSTL+1 ;

SVBI LDA #$06 ; IMMEDIATE VBI

LDY #$00 ;

LDX #$06 ;

JSR SETVBV ;

LOOP JMP LOOP

 

 

;

; VBI ROUTINE

;

*=$0600

VBI TXA ; PUSH EVERYTHING ONTO STACK

PHA ;

TYA ;

PHA ;

LDA #67

STA COLOR2

LDA RTCLOK+2 ; GRAB REALTIME CLOCK VAL

AND #$0 ; EIGHT VBI

BNE VBDON ; SKIP IF THIS ISN'T OUR TIME.

LDA #$00 ; ARE WE GOING UP OR DOWN?

CMP UPDOWN ;

BEQ GOUP ;

GODOWN LDA #39

STA 712

DEC UPCTRL ; UPDATE COUNTERS FOR THE MOVE.

INC DNCTRL ;

LDA UPCTRL ;

CLC ;

ADC <UPJMP ; ADD THE LO BYTE OFFSET OF THE JMP INSTRUCTION

STA UPJMP+1 ; UPDATE THE DLIST

LDA DNCTRL ;

CLC ;

ADC <DNJMP ; AND AGAIN....

STA DNJMP+1 ; UPDATE THE DLIST

LDA #$00 ; 124 LINES PASSED?

CMP DNCTRL

BEQ SETUP ; FLIP THE FLAG TO UP

JMP VBDON

GOUP LDA #23

STA 712

INC UPCTRL ;

DEC DNCTRL ;

LDA UPCTRL ;

CLC ;

ADC <UPJMP ;

STA UPJMP+1 ;

LDA DNCTRL ;

CLC ;

ADC <DNJMP ;

STA DNJMP+1 ;

LDA #$00 ;

CMP UPCTRL ;

BEQ SETDN ;

JMP VBDON

SETUP LDA #$00 ; SET FLAG TO UP

STA UPDOWN ;

JMP VBDON ;

SETDN LDA #$01 ; SET FLAG TO DOWN

STA UPDOWN ;

JMP VBDON ;

VBDON PLA ; TAKE EVERYTHING OFF OF STACK

TAY ;

PLA ;

TAX ;

JMP SYSVBV ; AND JUMP TO THE DEFERRED VBI VECTOR

;

; SCREEN MEMORY

;

 

*=$4900

.SBYTE " () "; BONUS DISPLAY

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

 

*=$5000

.SBYTE " !! !! !! !! !! !! !! !! "; INVADERS LINE 1

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

 

*=$5100

.SBYTE " @@ @@ @@ @@ @@ @@ @@ @@ "; INVADERS LINE 2

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

 

*=$5200

.SBYTE " ## ## ## ## ## ## ## ## "; INVADERS LINE 3

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

 

*=$5300

.SBYTE " $$ $$ $$ $$ $$ $$ $$ $$ "; INVADERS LINE 4

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

 

*=$5400

.SBYTE " %% %% %% %% %% %% %% %% "; INVADERS LINE 5

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " "

.SBYTE " &nb

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...