Programowanie: Przesuw poziomy z regulowaną prędkością
From Atariki
(Różnice między wersjami)
Wersja z dnia 22:19, 5 sty 2015 Daniel Koźmiński (Dyskusja | wkład) ← Previous diff |
Aktualna wersja Daniel Koźmiński (Dyskusja | wkład) |
Aktualna wersja
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