Hallo, hab mal wieder ne Frage: Ich habe es endlich geschafft, eine Hard- und eine Softscroll-Routine zu schreiben. Funktioniert auch alles. Aber es ruckelt hin und wieder. Man kann fast sehen, wie der Rasterstrahl das Bild durchläuft. Aus dem C-64er Magazin weiß ich, das man das Scrolling mit dem Rasterstrahl synchronisieren muß. Darum die Frage: WIE??? Meine jetzige Routine verschiebt den ganzen Bildschirm, aber für mein eigentliches Ziel sind nur, sagen wir mal 20 Zeilen nötig, wobei die ersten 5 "ungescrollt" bleiben. Wie kopiert man hinter dem Rasterstrahl her?
Hallo Besucher, der Thread wurde 1,4k mal aufgerufen und enthält 7 Antworten
letzter Beitrag von tecM0 am
-
-
Das technisch simpelste ist, in den VIC-Registern 53265/53266 nachzusehen. Darin findest Du die Rasterzeile als 9-Bit-Zahl. Die Bits 0-7 der Rasterzeile sind in 53266, das höchste Bit ist in Bit 7 von 53265.
Ökonomischer ist es, sich durch Rasterinterrupte vom Erreichen einer bestimmten Zeile informieren zu lassen.Code- irr=53248+25
- irm=53248+26
- !to "rirq.prg"
- *=$c000
- sei
- lda#<i ; Interruptvektor verbiegen
- ldx#>i
- sta $314
- stx $315
- lda#1 ; Rasterinterrupte einschalten
- sta irm
- lda#100 ; Rasterzeile wählen
- sta 53266
- lda 53265
- and#127
- sta 53265
- cli
- rts
- i ; Bei jedem Interrupt wird diese Routine angesprungen,
- ; egal, ob von VIC oder CIA. Die Quelle stellt man fest, indem man in den
- ; Anzeigeregistern der verschiedenen Chips nachsieht, ob die einen IRQ melden.
- lda $dc0d ; Prüfen, ob der IRQ vielleicht von der CIA kam.
- bpl vicIRQ
- ; das lda $dc0d hat auch die Flagge in der CIA gelöscht. Somit kann man nun
- ; per CLI weitere Interrupte erlauben, ohne daß man sofort in eine Endlosschleife kommt.
- ; Interrupte dürfen durchaus geschachtelt werden
- cli
- jmp $ea31
- vicIRQ
- dec 53280
- ldx#0
- dex
- bne *-1
- inc 53280
- ; Auch VIC-IRQ's müssen bestätigt werden. Das passiert aber durch schreiben des passenden
- ; Bits, nicht einfach durch lesen wie in der CIA.
- lda#1
- sta irr
- jmp $ea81
-
hir mal eine TICTAC-routine. ich habe sie glabe ich vor 15
jahren aus der 64er abgetipptdarin ist alles zu finden was du brauchst:
- IRQ timen
-Softscrollen
-Hardscrollengruss,
tecM0Code- ;---------------------------------------
- ;TICTAC
- ;---------------------------------------
- TABCOUNT = $FB
- TICREG1 = $FC
- TICREG2 = $FD
- SCRREG = $FE
- ;---------------------------------------
- SEI
- LDX #<START
- LDY #>START
- STX $0314
- STY $0315
- LDA #$01
- STA $D01A
- LDA #$00
- STA TABCOUNT
- LDA $5096
- STA TICREG1
- CLI
- RTS
- START LDA #$00
- ST0 CMP $D012
- BNE ST0
- JSR TICTAC
- LDA #$36
- ST1 CMP $D012
- BNE ST1
- LDA SCRREG
- STA $D016
- JMP $EA31
- TICTAC LDA TICREG1
- STA TICREG2
- LSR A
- LSR A
- LSR A
- STA TICREG2
- LDA TICREG1
- AND #$07
- EOR #$07
- CLC
- ADC #$10
- STA SCRREG
- LDX TICREG2
- LDY #$00
- TIC1 LDA $3000,X
- STA $0400,Y
- LDA $3040,X
- STA $0428,Y
- LDA $3080,X
- STA $0450,Y
- LDA $30C0,X
- STA $0478,Y
- LDA $3100,X
- STA $04A0,Y
- LDA $3140,X
- STA $04C8,Y
- LDA $3180,X
- STA $04F0,Y
- LDA $31C0,X
- STA $0518,Y
- INX
- INY
- CPY #$27
- BNE TIC1
- LDX TABCOUNT
- LDA TICTAB,X
- STA TICREG1
- TXA
- BPL TIC2
- LDA #$00
- STA TABCOUNT
- TIC2 CLC
- ADC #$02
- STA TABCOUNT
- RTS
- TICTAB .BYTE $C7,$C6,$C6,$C6
- .BYTE $C5,$C4,$C3,$C1
- .BYTE $C0,$BE,$BC,$BA
- .BYTE $B7,$B5,$B2,$AF
- .BYTE $AC,$A9,$A5,$A2
- .BYTE $9E,$9B,$97,$93
- .BYTE $8F,$8B,$86,$82
- .BYTE $7E,$79,$75,$71
- .BYTE $6C,$68,$63,$5F
- .BYTE $5B,$56,$52,$4E
- .BYTE $4A,$46,$42,$3E
- .BYTE $3A,$37,$33,$30
- .BYTE $2D,$29,$27,$24
- .BYTE $21,$1F,$1D,$1B
- .BYTE $19,$18,$16,$15
- .BYTE $14,$13,$13,$13
- .BYTE $13,$13,$13,$14
- .BYTE $14,$15,$17,$18
- .BYTE $1A,$1B,$1D,$20
- .BYTE $22,$25,$27,$2A
- .BYTE $2D,$31,$34,$38
- .BYTE $3B,$3F,$43,$47
- .BYTE $4B,$4F,$53,$58
- .BYTE $5C,$60,$65,$69
- .BYTE $6D,$72,$76,$7B
- .BYTE $7F,$83,$88,$8C
- .BYTE $90,$94,$98,$9C
- .BYTE $9F,$A3,$A6,$AA
- .BYTE $AD,$B0,$B3,$B5
- .BYTE $B8,$BA,$BC,$BE
- .BYTE $C0,$C2,$C3,$C4
- .BYTE $C5,$C6,$C6,$C6
- .BYTE $C6
hier noch ein paar schlechte fotos des artikels aus meinem ordner:
und noch einer:
zeichensatz und scrolling_1
zeichensatz und scrolling_2und der noch:
scrolling und irq_1
scrolling und irq_2wenn dir das was hilft und du etwas nicht entziffern kannst, könnte ich es dir nochmal scannen.
viel spass :D,
tecM0 -
Mach doch mal n paar schönere Scans, dann kann man auch wat lesen...
DankeAchja und eine kleine Linkkorrektur:
-
jo, muss ich mal die treibers für den scanner installieren- wenn ich doch nicht immer sooo faus wäre
T.
-
Haste nich die Nummern der Ausgaben parat? Kann da leider auf den Scans nix erkennen. Falls ich die da hab, kann ich die auch mal eben drüberziehen.
-
Das mit dem scrolling ist so eine sache... Da so eine routine ja viel zeit frisst, ist es immer fraglich wie man es macht.
Wenn du die routine für ein spiel brauchts wäre eine alternative dir nen speed code generator zu schreiben der die schleifen ausrollt um dir die inx cpx bne oder bcc scheisse zu sparen.
Oder halt ueber nen blitter aber das habe ich zum screenscrollen auch noch nicht gemacht
@Tecmo:Ja die 64ér das waren noch zeiten es gab da ja einige gruppen die hatten in ihren neuen demos dann immer auch die neuen effekte die gerade im proficorner standen...
War natürlich zufall... ISt ja klar
-
Zitat
Original von 1582908
Meine jetzige Routine verschiebt den ganzen Bildschirm, aber für mein eigentliches Ziel sind nur, sagen wir mal 20 Zeilen nötig, wobei die ersten 5 "ungescrollt" bleiben. Wie kopiert man hinter dem Rasterstrahl her?"#" ist der border deines screens und das dazwischen der screen.
die "+" sind der bereich den du scrollen willst...oben ist was frei.
bei "(1)" ist der stahl an diesem bereich vorbei und du kopierst los.
da sollte nicht länger dauern als bis an die stelle an der der strahl beginnt deinen scrollbereich darzustellen. (ansonsten musst du "double buffering" anwenden).
bei "(2)" machst du dein softscrolling und hast jetzt bis der staht wieder bei "(1)" ist zeit...für musik und andere sachen.gruss,
tecM0Code- |
- |
- ......(kopier...kopier...kopier....)
- |
- ......(kopier...kopier...kopier....)
- |
- ......(kopier...kopier...kopier....)
- |
- ......(kopier...fertig...) (2) jetzt softscrollen
- |
- +
- |
- +
- |
- +
- |
- + ...hier sieht man deinen scrollbereich...
- |
- + ...wenn du jetzt kopierst sieht es "komisch" aus...
- |
- + ...also hier nur musik und anders zeug machen.........
- |
- +
- |
- +
- |
- ++++++++++++++++++++ab hier wird der scrollbereich nicht mehr abgezeigt
- |
- (1)...JETZT loskopieren
- |
- ......(kopier...kopier...kopier....)
- |
- \ /
- "the way of the strahl... .. .