hi leute ich wieder
ich weis das das thema schon oefters dranwar, leider finde ichs nich mehr.
ich moechte den screen komplett hoch/runter/rechts/links scrollen das ich dazu die register $d011 und $d016 manipulieren muss weis ich,
wenn mein scoll_y_counter dann wrapt muss ich ja den screen umkopieren.
dazu hab ich 4 hardscroll routinen geschrieben die wohl, soweit ich das mit inc/dec $d020 beurteilen kann, auch innerhalb eines frames
fertig wird. leider is dann keine/kaum noch zeit fuer andre sachen. daher dachte ich kannst ja die aufgaben aufteilen.
darum setze ich bei einem scroll offet von 5 die parameter, fuer eine routine die mir die neuen zeichen holt unst schreibt, neu.
IRQs moechte ich soweit erstmal vermeiden, da ich denke das das ja auch ohne fluessig gehen sollte und waerend des scrollens eh nix andres
passiert. wenn nich dann moege man mich steinigen.
hier mal der schnipsel um hoch zu scrollen, wenn da bitte jemanddrueberschaun kann und mir eventuelle fehler aufzeigen koennte waer ich dankbar.
- ; **** scroll up
- scroll_up:
- ; lda $d011
- ; and #%11111000
- ; ora #7
- ; sta $d011
- scroll_up_soft:
- jsr waitframe
- dec scrolly
- lda scrolly
- and #%00000111
- sta scrolly
- lda $d011
- and #%11111000
- ora scrolly
- sta $d011
- ; make_scroll:
- lda scrolly
- cmp #5
- beq update_parameters_up
- cmp #3
- beq copy_new_line_up
- cmp #7
- bne scroll_up_soft
- jmp copy_screen_lines_up
- update_parameters_up:
- lda tmp_src_chars_ptr
- sta src_chars_ptr
- lda tmp_src_chars_ptr+1
- sta src_chars_ptr+1
- lda tmp_src_color_ptr
- sta src_color_ptr
- lda tmp_src_color_ptr+1
- sta src_color_ptr+1
- lda tmp_msg_lenght
- sta msg_lenght_ptr
- lda tmp_msg_lenght+1
- sta msg_lenght_ptr+1
- ;set up parameters for print screen
- lda #$c0
- sta dst_chars_ptr
- lda #$07
- sta dst_chars_ptr+1
- ;set up parameters for set colors
- lda #$c0
- sta dst_color_ptr
- lda #$db
- sta dst_color_ptr+1
- ;update the chars pointers
- lda tmp_src_chars_ptr
- clc
- adc #40
- sta tmp_src_chars_ptr
- lda tmp_src_chars_ptr+1
- adc #0
- sta tmp_src_chars_ptr+1
- ;update the color pointers
- lda tmp_src_color_ptr
- clc
- adc #20
- sta tmp_src_color_ptr
- lda tmp_src_color_ptr+1
- adc #0
- sta tmp_src_color_ptr+1
- jmp scroll_up_soft
- copy_new_line_up:
- ;set msg lenght
- lda tmp_msg_lenght
- sta msg_lenght_ptr
- lda tmp_msg_lenght+1
- sta msg_lenght_ptr+1
- jsr print_screen
- ;set msg lenght again
- lda tmp_msg_lenght
- sta msg_lenght_ptr
- lda tmp_msg_lenght+1
- sta msg_lenght_ptr+1
- jsr set_colors
- jmp scroll_up_soft
- copy_screen_lines_up:
- jsr hard_scroll_screen_up
- inc scroll_count
- lda scroll_count
- cmp #25
- beq +
- jmp scroll_up
- +
- lda #0
- sta scroll_count
- rts
- scroll_count:
- !byte 0
- scrolly:
- !byte 7
- ; **** hardscroll up
- hard_scroll_screen_up:
- lda #$f8
- - cmp $d012 ; auf Rasterzeile 251 warten
- bne -
- ; inc $d020
- ldy #0
- ;zeile 1
- - lda $0400+40,y
- sta $0400,y
- lda $d800+40,y
- sta $d800,y
- ;zeile 2
- lda $0400+80,y
- sta $0400+40,y
- lda $d800+80,y
- sta $d800+40,y
- ;zeile 3
- lda $0400+120,y
- sta $0400+80,y
- lda $d800+120,y
- sta $d800+80,y
- ;zeile 4
- lda $0400+160,y
- sta $0400+120,y
- lda $d800+160,y
- sta $d800+120,y
- ;zeile 5
- lda $0400+200,y
- sta $0400+160,y
- lda $d800+200,y
- sta $d800+160,y
- ;zeile 6
- lda $0400+240,y
- sta $0400+200,y
- lda $d800+240,y
- sta $d800+200,y
- ;zeile 7
- lda $0400+280,y
- sta $0400+240,y
- lda $d800+280,y
- sta $d800+240,y
- ;zeile 8
- lda $0400+320,y
- sta $0400+280,y
- lda $d800+320,y
- sta $d800+280,y
- ;zeile 9
- lda $0400+360,y
- sta $0400+320,y
- lda $d800+360,y
- sta $d800+320,y
- ;zeile 10
- lda $0400+400,y
- sta $0400+360,y
- lda $d800+400,y
- sta $d800+360,y
- ;zeile 11
- lda $0400+440,y
- sta $0400+400,y
- lda $d800+440,y
- sta $d800+400,y
- ;zeile 12
- lda $0400+480,y
- sta $0400+440,y
- lda $d800+480,y
- sta $d800+440,y
- ;zeile 13
- lda $0400+520,y
- sta $0400+480,y
- lda $d800+520,y
- sta $d800+480,y
- ;zeile 14
- lda $0400+560,y
- sta $0400+520,y
- lda $d800+560,y
- sta $d800+520,y
- ;zeile 15
- lda $0400+600,y
- sta $0400+560,y
- lda $d800+600,y
- sta $d800+560,y
- ;zeile 16
- lda $0400+640,y
- sta $0400+600,y
- lda $d800+640,y
- sta $d800+600,y
- ;zeile 17
- lda $0400+680,y
- sta $0400+640,y
- lda $d800+680,y
- sta $d800+640,y
- ;zeile 18
- lda $0400+720,y
- sta $0400+680,y
- lda $d800+720,y
- sta $d800+680,y
- ;zeile 19
- lda $0400+760,y
- sta $0400+720,y
- lda $d800+760,y
- sta $d800+720,y
- ;zeile 20
- lda $0400+800,y
- sta $0400+760,y
- lda $d800+800,y
- sta $d800+760,y
- ;zeile 21
- lda $0400+840,y
- sta $0400+800,y
- lda $d800+840,y
- sta $d800+800,y
- ;zeile 22
- lda $0400+880,y
- sta $0400+840,y
- lda $d800+880,y
- sta $d800+840,y
- ;zeile 23
- lda $0400+920,y
- sta $0400+880,y
- lda $d800+920,y
- sta $d800+880,y
- ;zeile 24
- lda $0400+960,y
- sta $0400+920,y
- lda $d800+960,y
- sta $d800+920,y
- iny
- cpy #40
- beq +
- jmp -
- +
- ;dec $d020
- rts
ich vermute stark das ich innerhalb von scroll_up_soft: irgenwas falsch mach, hab da aber auch schon rumprobiert
ohne erfolg.
also hoffe ich das mir mal wieder wer auf die finger klopfen koennte
danke und gruesse