Vertical Scrolling Techniques
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
;
; 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.