.charmap $41,$01 ;A .charmap $42,$02 ;B .charmap $43,$03 ;C .charmap $44,$04 ;D .charmap $45,$05 ;E .charmap $46,$06 ;F .charmap $47,$07 ;G .charmap $48,$08 ;H .charmap $49,$09 ;I .charmap $4a,$0a ;J .charmap $4b,$0b ;K .charmap $4c,$0c ;L .charmap $4d,$0d ;M .charmap $4e,$0e ;N .charmap $4f,$0f ;O .charmap $50,$10 ;P .charmap $51,$11 ;Q .charmap $52,$12 ;R .charmap $53,$13 ;S .charmap $54,$14 ;T .charmap $55,$15 ;U .charmap $56,$16 ;V .charmap $57,$17 ;W .charmap $58,$18 ;X .charmap $59,$19 ;Y .charmap $5a,$1a ;Z ;------------------------------------------------------------------------------- lda #$00 ;schwarz sta $D021 ;für Rahmen sta $D020 ;und Hintergrund lda #$01 ;weiß sta $0286 ;für Schrift jsr $e544 ;lösche BS ldx #$27 ;Laufschrift Färbung 1 fill3: lda #$0e ;Hellblau sta $db70,x dex bpl fill3 ldx #$27 ;Laufschrift Färbung 2 fill4: lda #$06 ;Dunkelblau sta $db6f,x dex dex bpl fill4 ;------------------------------------------------------------------------------- Alien: ldx #$e6 ;Schleifenzähler (230 Zeichen) bsloop: ;Male Alien Körper lda data,x sta $0400,x dex bne bsloop ldx #$13 ;Schleifenzähler (20 Zeichen) bsloop2: ;Schreibe Credit lda text2,x sta $0523,x dex bpl bsloop2 ldx #$a0 ;Male Alien Farben fill1: ;Alien lda #$05 ;for i=55296+(3*40) to 55296+(6*40):poke i,5:next i sta $d878,x dex bne fill1 ldx #$27 ;Credit Schrift fill2: lda colors,X ;Farbe holen sta $D918,X ;und ins FarbRAM dex ;Schleifenzähler verringern bne fill2 ;solange positiv > @loop lda #$07 sta $d83c ;40 poke 55296+40+20,7 sta $d83d ;50 poke 55296+40+21,7 sta $d863 ;70 poke 55296+40+40+19,7 sta $d866 ;95 poke 55296+40+40+22,7 lda #$04 sta $d862 ;60 poke 55296+40+40+18,4 sta $d867 ;100 poke 55296+40+40+23,4 lda #$02 sta $d864 ;80 poke 55296+40+40+20,2 sta $d865 ;90 poke 55296+40+40+21,2 sta $d88c ;130 poke 55296+40+40+40+20,2 sta $d88d ;140 poke 55296+40+40+40+21,2 lda #$03 sta $d8d7 ;150 poke 55296+40+40+40+40+40+15,3 sta $d8e2 ;160 poke 55296+40+40+40+40+40+26,3 ;------------------------------------------------------------------------------- start: sei ldx #$00 loop: lda label,x ;Koordinatenliste in Zero Page Kassettenadressen kopieren sta $ac,x lda label+1,x sta $ad,x inx cpx #$14 ;sonst #$0a = 5 Sterne, jetzt #$14 = 10 Sterne bne loop ldx #$12 ;Zähler für 10 Sterne lda #$2a ;Stern-Petscii loop2: sta ($ac,x) ;gib Zeichen an Koordinate aus dex dex bpl loop2 lda #text sta $fc ;------------------------------------------------------------------------------- c010: jsr doColorCycle ;Farben umkopieren jsr setColor ;und ins FarbRAM kopieren lda $d016 ;Scrollregister sichern! sta $fa w81: lda $d012 cmp #$32 bne w81 lda #$c0 ;; Raumschiff am Bewegen hindern sta $d016 ;; c011: lda $d012 ;Lade akt. Raserzeile cmp #$72 ;;Raumschiff aussparen bne c011 lda $fa ;Scrollregister wiederherstellen! sta $d016 ldx $d016 ;lade hierzu Vorgabe-Config aus Scroll-Reg. in x-Register (111 aus Zeile c03b) - ganz nach rechts, d.h. normal ldy #$00 dex ;erniedrige x-Register ab 1100 0111 cpx #$bf ;bis 1011 1111 erreicht, d.h. 8 weniger nach links. inx wäre scrolling nach rechts bei aktivem 38 Zeichen-Modus. bne c03b ;so lange nicht 8 weniger frage wieder Tastatur ab und scrolle 1 weiter nach links ;------------------------------------------------------------------------------- ldx #$12 ;Zähler für 10 Sterne lda #$20 ;Space-Petscii loop3: sta ($ac,x) ;gib Zeichen an Koordinate aus dex dex bpl loop3 ;------------------------------------------------------------------------------- ldx #$12 ;Verschiebe alle Koordinaten nach links lsbmin: lda $ac,x sec sbc #$01 sta $ac,x cmp #$8f beq grenztest cont: dex dex bpl lsbmin jmp nextpos grenztest: lda $ad,x cmp #$05 bne cont lda #$1f sta $ac,x lda #$06 sta $ad,x jmp cont ;------------------------------------------------------------------------------- nextpos: ldx #$12 ;Zähler für 10 Sterne lda #$2a ;Stern-Petscii print2: sta ($ac,x) ;gib Zeichen an neuer Koordinate aus dex dex bpl print2 ;------------------------------------------------------------------------------- ldx #$00 ;Neuer x-Wert 0 als Kopier-Offset - alle Zeichen eins nach links bis ganz rechts letztes frei und alle Zeichen da wo Scrolloffset ist c01f: lda $0771,x ;1905 sta $0770,x ;1904 inx cpx #$27 ; verschiebe 39 Zeichen von rechts nach links in selber Zeile bne c01f lda ($fb),y ;$fb Zeropage Lowbyte zeigt auf Textbeginn; y fasst 255 Zeichen, durch High Byte Berücks. in $fc -> 65.536 Zeichen möglich. cmp #$00 ;0 = Stringende!!!! beq c004 sta $0797 ; gib nächstes Zeichen am rechten BS-Rand aus inc $fb ; Zeige auf nächstes Zeichen bne c039 ; so lange kein Überlauf mach weiter mit Tastaturabfrage inc $fc ;sonst erhöhe High Byte ;------------------------------------------------------------------------------- c039: ldx #$c7 ;Abschnitt Tastaturabfrage Start. Lade 1100 0111 in x c03b: stx $d016 ;Speichere 11000111 in x-Register, d.h. Scroll-Offset 7, Multicolor aus, 38 Zeichen Modus aus, Rest unbenutzt ldx #$00 ldy #$08 ;;sonst #$08/#$7f c042: dex ;Zähle 255 Mal 8 ins Leere (Scrollgeschwindigkeit) bne c042 dey bne c042 lda #$00 ; Lade 0 in den Akku sta $dc00 ; Schreibe 0 in cia-a für Tastaturabfrage lda $dc01 ;Lade cia-b Inhalt in Akku und vergleiche auf 255 cmp #$ff bne exit jmp c010 ;wenn ja keine Taste gedrückt mach weiter exit: lda #$06 ;hellblau sta $D021 ;für Rahmen lda #$0e ;dunkelblau sta $D020 ;für Hintergrund lda #$0e ;hellblau sta $0286 ;für Schrift jsr $e544 ;lösche BS lda #$c7 ;Reset Scrollregister sta $d016 rts c004: lda #text sta $fc jmp c010 ;------------------------------------------------------------------------------- doColorCycle: ldy colors+$27 ;letzte Farbe 'retten' ldx #$27 ;Schleifenzähler (40 Zeichen) @loop: lda colors-1,X ;Farbe 'links' von X holen sta colors,X ;und nach X kopieren dex ;Schleife verringern bne @loop ;solange größer null > @loop sty colors ;sonst, gerettete Farbe an die erste Pos. rts setColor: ldx #$27 ;Schleifenzähler für 40 Zeichen @loop: lda colors,X ;Farbe holen sta $D918,X ;und ins FarbRAM dex ;Schleifenzähler verringern bpl @loop ;solange positiv > @loop rts ;sonst, zurück ;------------------------------------------------------------------------------- label: .BYTE $da,$05,$a2,$05,$da,$06,$6d,$06,$f5,$06 .BYTE $e1,$05,$a7,$05,$a5,$06,$ad,$06,$85,$06 text: .asciiz "DIESER TEXT KANN 65535 ZEICHEN FASSEN. SO WEIT KOMMEN WIR IN DIESEM SCROLLER SICHER NICHT ABER ES IST SCHOEN DASS ES MOEGLICH IST. DANKE MACBACON, HEXWORX, MIKE, TALE-X, REALWANDERER, DATA-LAND, SOKRATES UND ALLEN ANDEREN FORUM64 CODERN FUER EURE HILFE. DEN PREIS FUER SPEED UND KONTROLLE DES C64 ZAHLT DER ASM-CODER MIT QUAELENDER DETAILARBEIT. DER C64 UND SEINE REGISTER SIND ROH, STARK UND UNBEQUEM WIE EIN MUSCLE CAR OHNE EINGEBAUTE DROSSELUNG DAS AUF TUNING SEINER PS-KRAFT WARTET. ANDERE 8 BITTER WIE DER CPC FAHREN SICH WIE EIN BEQUEMER BENTLEY, ABER ES FEHLT DIE PROTZ-POWER (SID UND SPRITES) DIE DER UNKOMFORTABLE 64ER AUF DEM KASTEN HAT. VIELE GRUESSE AN DAS FORUM64.DE MIT ALL SEINEN FREUNDLICHEN EXPERTEN UND RETRO BEKLOPPTEN. TEXT RESTARTS ... " text2: .asciiz "(C) BYTEBREAKER 2016" colors: .BYTE $01,$01,$03,$03,$0E,$0E,$06,$06 .BYTE $06,$06,$0E,$0E,$03,$03,$01,$01 .BYTE $03,$03,$0E,$06,$06,$0E,$03,$03 .BYTE $01,$01,$03,$03,$0E,$0E,$06,$06 .BYTE $06,$06,$0E,$0E,$03,$03,$01,$01 cycleCnt: .BYTE $02 data: .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,78,77,96,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96 .BYTE 32,32,32,32,32,32,88,78,87,87,77,88,32,32,32,32,32,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,233,224,224,224 .BYTE 224,224,223,82,82,233,224,224,224,224,224,223,96,96,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,233,224,224,224,224,224 .BYTE 224,224,224,224,224,224,224,224,224,224,224,223,96,96,96,96,96,96,96 .BYTE 96,96,96,96,96,96,96,96,96,96,96,96,96,96,233,224,105,96,86,96,95,105 .BYTE 96,95,105,96,95,105,96,86,96,95,224,223