Programowanie: Przesuw poziomy z regulowaną prędkością
From Atariki
Revision as of 22:19, 5 sty 2015; view current revision
←Older revision | Newer revision→
←Older revision | Newer revision→
Poniższy kod źródłowy jest przykładem realizacji najpopularniejszego niegdyś "efektu" w programach demonstracyjnych, mianowicie poziomego przesuwu tekstu, zwanego popularnie scrollem.
Program wzbogacony jest o możliwość sterowania prędkością przepływu tekstu na ekranie, w zakresie 0 (najszybszy przesuw - pętla opóźniająca czeka jedną ramkę) do 7 (siedem ramek). Kod został przygotowany w makroasemblerze MADS.
opt h+
org $80
scroll_pos .ds 1 ; wartość przesuwu delikatnego
scroll_speed .ds 1 ; prędkość przesuwu
scroll_ptr .ds 2 ; wskaźnik do tekstu
scroll_buf .ds 2 ; wskaźnik do bufora na ekranie
org $2000
start lda #$0e
sta COLOR1
lda #$00
sta COLOR2
lda #00
sta scroll_speed
lda <display_list
sta SDLSTL
lda >display_list
sta SDLSTH
lda <scroll_text
sta scroll_ptr
lda >scroll_text
sta scroll_ptr+1
lda <scroll_screen
sta scroll_buf
lda >scroll_screen
sta scroll_buf+1
ldy #47
@ lda (scroll_ptr),y
sta (scroll_buf),y
dey
bne @-
lda #04
sta HSCROL
sta scroll_pos
loop dec scroll_pos
lda scroll_pos
sta HSCROL
jsr wait
bne loop
lda #04
sta scroll_pos
ldy #47
@ lda (scroll_ptr),y
bpl @+
and #$07
sta scroll_speed
lda #" "
@ sta (scroll_buf),y
dey
bne @-1
clc
inc scroll_ptr
bne @+
inc scroll_ptr+1
@ lda (scroll_ptr),y
cmp #$ef
bne loop
jmp (DOSVEC)
wait pha
ldx scroll_speed
@ lda RTCLOK+2
cmp RTCLOK+2
beq *-2
dex
bpl @-
pla
rts
.align $0400
display_list .he 70 70 70
.he 52
.wo scroll_screen
.he 41
.wo display_list
scroll_screen :48 .he 00
; prędkość regulowana w zakresie f0..f7
; f0 - najszybszy przesuw, f7 - najwolniejszy
; wskaźnik prędkości jest zamieniany na spację
scroll_text :48 .he 00
.sb 'Stand up, damned of the Earth'
.he f1
.sb 'Stand up, prisoners of starvation'
.he f4
.sb 'Reason thunders in its volcano'
.he f1
.sb 'This is the eruption of the end.'
.he f6
.sb 'Of the past let us make a clean slate'
.he f0
.sb 'Enslaved masses, stand up, stand up. '
.sb 'The world is about to change its foundation '
.sb 'We are nothing, let us be all. '
.sb 'This is the final struggle '
.sb 'Let us group together, and tomorrow '
.sb 'The Internationale '
.sb 'Will be the human race. '
.he ef
run start
