<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://c64mags.untergrund.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://c64mags.untergrund.net/wiki/index.php?action=history&amp;feed=atom&amp;title=DT_85_15</id>
		<title>DT 85 15 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://c64mags.untergrund.net/wiki/index.php?action=history&amp;feed=atom&amp;title=DT_85_15"/>
		<link rel="alternate" type="text/html" href="http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;action=history"/>
		<updated>2026-06-11T23:48:23Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.0</generator>

	<entry>
		<id>http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;diff=5923&amp;oldid=prev</id>
		<title>Nyquist at 23:16, 17 January 2011</title>
		<link rel="alternate" type="text/html" href="http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;diff=5923&amp;oldid=prev"/>
				<updated>2011-01-17T23:16:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;amp;diff=5923&amp;amp;oldid=5437&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Nyquist</name></author>	</entry>

	<entry>
		<id>http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;diff=5437&amp;oldid=prev</id>
		<title>Nyquist at 11:39, 13 June 2010</title>
		<link rel="alternate" type="text/html" href="http://c64mags.untergrund.net/wiki/index.php?title=DT_85_15&amp;diff=5437&amp;oldid=prev"/>
				<updated>2010-06-13T11:39:49Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[http://translate.google.com/translate?hl=de&amp;amp;ie=UTF-8&amp;amp;sl=de&amp;amp;tl=en&amp;amp;u=http://c64mags.untergrund.net/wiki/index.php%3Ftitle%3DDT_85_15&amp;amp;prev=_t  English Translation]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          Hallo liebe DT-Leser,&lt;br /&gt;
         _______________________&lt;br /&gt;
&lt;br /&gt;
es ist mal wieder soweit, ein neues Pro-&lt;br /&gt;
gramm erwartet Euch in  der  DT  Ass-Ru-&lt;br /&gt;
brik.  Wie beim ersten Teil geht es auch&lt;br /&gt;
heute noch einmal  um  das  Thema  Lauf-&lt;br /&gt;
schrift.  Nur  unterscheidet  sich   die&lt;br /&gt;
Technik, die ich diesmal verwendet habe,&lt;br /&gt;
von  der aus dem ersten Teil nicht uner-&lt;br /&gt;
heblich. Heute will ich Euch mal zeigen,&lt;br /&gt;
wie man eine Laufschrift in einem Sprite&lt;br /&gt;
verarbeiten kann. Das Thema lautet somit&lt;br /&gt;
&lt;br /&gt;
            &amp;quot;SPRITE-SCROLLER&amp;quot;&lt;br /&gt;
            &amp;quot;SPRITE-SCROLLER&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Die  Technik,  die  dahinter steckt, ist&lt;br /&gt;
eigentlich  trivial,  vorausgesetzt, man&lt;br /&gt;
wei&amp;amp;szlig;,  wie ein Sprite aufgebaut  ist und&lt;br /&gt;
wie man Sprites anzeigen und  manipulie-&lt;br /&gt;
ren kann.  Eingefleischte  Basicprogram-&lt;br /&gt;
mierer werden hier keine Schwierigkeiten&lt;br /&gt;
haben.&lt;br /&gt;
&lt;br /&gt;
Dieser Effekt l&amp;amp;auml;sst sich jedoch nur  ra-&lt;br /&gt;
tional in Maschinensprache  realisieren,&lt;br /&gt;
Basic ist daf&amp;amp;uuml;r einfach zu langsam. Auch&lt;br /&gt;
diesmal l&amp;amp;auml;uft die Laufschrift im IRQ ab.&lt;br /&gt;
&lt;br /&gt;
Es ist ratsam, sich das Programm  vorher&lt;br /&gt;
mal anzusehen, damit Ihr auch wisst, wo-&lt;br /&gt;
von ich hier rede. ;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Gut,  die  Laufschrift  l&amp;amp;auml;uft  in  einem&lt;br /&gt;
Sprite bzw. &amp;quot;durch&amp;quot; mehrere Sprites.  Es&lt;br /&gt;
ist also nicht so, dass jedes Sprite ei-&lt;br /&gt;
nen  Buchstaben  darstellt und der Lauf-&lt;br /&gt;
schrift-Text  einfach durch diese durch-&lt;br /&gt;
gerollt wird (das ist eine weitere  M&amp;amp;ouml;g-&lt;br /&gt;
lichkeit f&amp;amp;uuml;r eine Laufschrift). Hier be-&lt;br /&gt;
nutzen wir einen  normalen  1x1-Zeichen-&lt;br /&gt;
satz, in diesem Fall den  des  C64,  den&lt;br /&gt;
ROM-Zeichensatz, den wir dann von rechts&lt;br /&gt;
nach  links  durch 8 Sprites durchrollen&lt;br /&gt;
lassen.&lt;br /&gt;
&lt;br /&gt;
Ein  Sprite  besteht aus 64 Bytes. F&amp;amp;uuml;llt&lt;br /&gt;
man ein Sprite mit z.B. dem Wert 255, so&lt;br /&gt;
geschieht das von links nach rechts (und&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nicht  wie  im Hires-Modus von oben nach&lt;br /&gt;
unten).  Um nun z.B. den  Buchstaben &amp;quot;A&amp;quot;&lt;br /&gt;
(Wert $01) in ein Sprite zu  &amp;amp;uuml;bertragen,&lt;br /&gt;
so geschieht dies folgenderma&amp;amp;szlig;en:&lt;br /&gt;
&lt;br /&gt;
Sprite liegt ab: $2000&lt;br /&gt;
Buchstabe A  ab: $3000 (nur Beispiele)&lt;br /&gt;
&lt;br /&gt;
        ldy #$00&lt;br /&gt;
        ldx #$00&lt;br /&gt;
a1      lda $3000,y&lt;br /&gt;
        sta $2000,x&lt;br /&gt;
        inx&lt;br /&gt;
        inx&lt;br /&gt;
        inx&lt;br /&gt;
        iny&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        cpy #$08&lt;br /&gt;
        bne a1&lt;br /&gt;
        rts&lt;br /&gt;
&lt;br /&gt;
Hier  seht  Ihr, dass man jedes Byte des&lt;br /&gt;
Buchstabens in jede dritte Speicherstel-&lt;br /&gt;
le  des  Sprites  schreiben muss, um den&lt;br /&gt;
Buchstaben  ordentlich  im Sprite darzu-&lt;br /&gt;
stellen.  Im  normalen Modus  sind nur 8&lt;br /&gt;
Sprites erlaubt, also verwenden wir auch&lt;br /&gt;
alle f&amp;amp;uuml;r die Laufschrift.&lt;br /&gt;
&lt;br /&gt;
In  jedes  Sprite passen jeweils 3 Buch-&lt;br /&gt;
staben.&lt;br /&gt;
Diese befinden sich  im  oberen  Bereich&lt;br /&gt;
der Sprites, den ersten 24 Bytes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sprite1 Sprite2 Sprite3 Sprite4 Sprite5&lt;br /&gt;
ABC     DEF     GHI     JKL     MNO&lt;br /&gt;
Sprite6 Sprite7 Sprite8&lt;br /&gt;
PQR     STU     VWX&lt;br /&gt;
&lt;br /&gt;
Der  Laufschrifttext  w&amp;amp;uuml;rde dann hier so&lt;br /&gt;
aussehen:&lt;br /&gt;
&lt;br /&gt;
ABCDEFGHIJKLMNOPQRSTUVWX&lt;br /&gt;
&lt;br /&gt;
Die  Laufschrift kann somit nur aus max.&lt;br /&gt;
24 sichtbaren Zeichen bestehen. Der Text&lt;br /&gt;
an sich kann so lang sein  wie  man  ihn&lt;br /&gt;
braucht.&lt;br /&gt;
&lt;br /&gt;
Dazu sp&amp;amp;auml;ter mehr im Code.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Das  Prinzip  dahinter  sollte jetzt ei-&lt;br /&gt;
gentlich  klar  sein, zumindest  wie die&lt;br /&gt;
Zeichen in den Sprites  erscheinen  sol-&lt;br /&gt;
len.&lt;br /&gt;
&lt;br /&gt;
Die  Technik,  die  dahinter steckt, ist&lt;br /&gt;
simpel:&lt;br /&gt;
Die  Zeichen  bzw. die  Bits der Zeichen&lt;br /&gt;
werden  mit dem  Befehl  ASL  von rechts&lt;br /&gt;
nach links einfach durch die Sprites ge-&lt;br /&gt;
rollt. Dabei muss auf das Carry-Flag ge-&lt;br /&gt;
achtet werden,  damit  die Bits auch or-&lt;br /&gt;
dentlich  transportiert werden. Dazu nun&lt;br /&gt;
im Programm mehr, dabei werde ich jedoch&lt;br /&gt;
nur im Kern des Programms etwas ausf&amp;amp;uuml;hr-&lt;br /&gt;
licher:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         *= $0810&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         lda #1&lt;br /&gt;
         sta $d011&lt;br /&gt;
         lda #0&lt;br /&gt;
         sta $d020&lt;br /&gt;
         sta $d021&lt;br /&gt;
         lda #15&lt;br /&gt;
         sta $0286&lt;br /&gt;
         lda #$93&lt;br /&gt;
         jsr $ffd2&lt;br /&gt;
         lda #26&lt;br /&gt;
         sta $d018&lt;br /&gt;
         lda #$08&lt;br /&gt;
         jsr $ffd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Bildschirmeinstellungen.&lt;br /&gt;
&lt;br /&gt;
         ldy #$00&lt;br /&gt;
a1       lda screen,y&lt;br /&gt;
         sta $0400,y&lt;br /&gt;
         lda screen+256,y&lt;br /&gt;
         sta $0500,y&lt;br /&gt;
         lda screen+512,y&lt;br /&gt;
         sta $0600,y&lt;br /&gt;
         lda screen+768,y&lt;br /&gt;
         sta $0700,y&lt;br /&gt;
         iny&lt;br /&gt;
         bne a1&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Der Bildschirm wird mit den Daten aus&lt;br /&gt;
&amp;amp;gt; dem Label &amp;quot;Screen&amp;quot; gef&amp;amp;uuml;llt.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ldy #$00&lt;br /&gt;
         lda #11&lt;br /&gt;
a2       sta $d800+(5*40)+9,y&lt;br /&gt;
         sta $d800+(6*40)+9,y&lt;br /&gt;
         sta $d800+(7*40)+9,y&lt;br /&gt;
         iny&lt;br /&gt;
         cpy #$16&lt;br /&gt;
         bne a2&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Das &amp;quot;Digital Talk&amp;quot;-Logo wird auf dem&lt;br /&gt;
&amp;amp;gt; Bildschirm positioniert.&lt;br /&gt;
&lt;br /&gt;
         ldy #$00&lt;br /&gt;
         lda #$ff&lt;br /&gt;
a3       sta $2ff8,y&lt;br /&gt;
         iny&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         cpy #$08&lt;br /&gt;
         bne a3&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Der Zeichensatz f&amp;amp;uuml;r das Logo steht ab&lt;br /&gt;
&amp;amp;gt; $2800 (s.u.). Hier wird ein Zeichen&lt;br /&gt;
&amp;amp;gt; gef&amp;amp;uuml;llt und zwar das letzte Zeichen&lt;br /&gt;
&amp;amp;gt; des Zeichensatzes.&lt;br /&gt;
&lt;br /&gt;
         sei&lt;br /&gt;
         lda #$33&lt;br /&gt;
         sta $01&lt;br /&gt;
         ldy #$00&lt;br /&gt;
a4       lda $d000,y&lt;br /&gt;
         sta $3000,y&lt;br /&gt;
         lda $d100,y&lt;br /&gt;
         sta $3100,y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         lda $d200,y&lt;br /&gt;
         sta $3200,y&lt;br /&gt;
         lda $d300,y&lt;br /&gt;
         sta $3300,y&lt;br /&gt;
         lda #0&lt;br /&gt;
         sta $2000,y&lt;br /&gt;
         sta $2100,y&lt;br /&gt;
         iny&lt;br /&gt;
         bne a4&lt;br /&gt;
         lda #$37&lt;br /&gt;
         sta $01&lt;br /&gt;
         cli&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Der ROM-Zeichensatz respektive ein&lt;br /&gt;
&amp;amp;gt; Teil davon wird nach $3000 kopiert.&lt;br /&gt;
&amp;amp;gt; Dieser wird f&amp;amp;uuml;r die Laufschrift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; ben&amp;amp;ouml;tigt. Die Sprites stehen ab $2000,&lt;br /&gt;
&amp;amp;gt; dieser Bereich wird mit #0 gef&amp;amp;uuml;llt.&lt;br /&gt;
&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $57&lt;br /&gt;
         sta $58&lt;br /&gt;
         sta $5a&lt;br /&gt;
         sta $5b&lt;br /&gt;
         sta $5c&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Speicherstellen und Z&amp;amp;auml;hler werden&lt;br /&gt;
&amp;amp;gt; freigemacht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         lda #255&lt;br /&gt;
         sta $d000+21&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ldy #$00&lt;br /&gt;
         ldx #128&lt;br /&gt;
a5       txa&lt;br /&gt;
         sta 2040,y&lt;br /&gt;
         lda #15&lt;br /&gt;
         sta $d000+39,y&lt;br /&gt;
         inx&lt;br /&gt;
         iny&lt;br /&gt;
         cpy #$08&lt;br /&gt;
         bne a5&lt;br /&gt;
&lt;br /&gt;
         ldx #87&lt;br /&gt;
         stx $d000&lt;br /&gt;
         ldx #87+(1*24)&lt;br /&gt;
         stx $d002&lt;br /&gt;
         ldx #87+(2*24)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         stx $d004&lt;br /&gt;
         ldx #87+(3*24)&lt;br /&gt;
         stx $d006&lt;br /&gt;
         ldx #87+(4*24)&lt;br /&gt;
         stx $d008&lt;br /&gt;
         ldx #87+(5*24)&lt;br /&gt;
         stx $d00a&lt;br /&gt;
         ldx #87+(6*24)&lt;br /&gt;
         stx $d00c&lt;br /&gt;
         ldx #87+(7*24)&lt;br /&gt;
         stx $d00e&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Bis hier werden die Sprites&lt;br /&gt;
&amp;amp;gt; eingeschaltet und auf dem Bildschirm&lt;br /&gt;
&amp;amp;gt; positioniert. Auch wird die Farbe auf&lt;br /&gt;
&amp;amp;gt; Hellgrau gesetzt ($0f = #15).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         jsr irq&lt;br /&gt;
&lt;br /&gt;
         jmp *&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Der IRQ wird angesprungen, danach wird&lt;br /&gt;
&amp;amp;gt; mit JMP * das Programm quasi&lt;br /&gt;
&amp;amp;gt; angehalten. Alles, was man dann sieht,&lt;br /&gt;
&amp;amp;gt; l&amp;amp;auml;uft ausschlie&amp;amp;szlig;lich im IRQ ab.&lt;br /&gt;
&lt;br /&gt;
irq      sei&lt;br /&gt;
         lda #$81&lt;br /&gt;
         sta $d01a&lt;br /&gt;
         lda #$7f&lt;br /&gt;
         sta $dc0d&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $d012&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ldx #&amp;amp;lt;irq1&lt;br /&gt;
         ldy #&amp;amp;gt;irq1&lt;br /&gt;
         stx $0314&lt;br /&gt;
         sty $0315&lt;br /&gt;
         cli&lt;br /&gt;
         lda #27&lt;br /&gt;
         sta $d011&lt;br /&gt;
         rts&lt;br /&gt;
&lt;br /&gt;
irq1     asl $d019&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Hier die bekannten Einstellungen f&amp;amp;uuml;r&lt;br /&gt;
&amp;amp;gt; den IRQ. Ich hoffe, da nichts mehr&lt;br /&gt;
&amp;amp;gt; erkl&amp;amp;auml;ren zu m&amp;amp;uuml;ssen.&lt;br /&gt;
&lt;br /&gt;
         jsr sprmove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Hier wird f&amp;amp;uuml;r die vertikale Bewegung&lt;br /&gt;
&amp;amp;gt; des Sprite-Scrollers eine kleine&lt;br /&gt;
&amp;amp;gt; Routine angesprungen, die f&amp;amp;uuml;r die&lt;br /&gt;
&amp;amp;gt; nette H&amp;amp;uuml;pfbewegung des Scrollers&lt;br /&gt;
&amp;amp;gt; verantwortlich ist. Dieser Sprite-&lt;br /&gt;
&amp;amp;gt; Sinus wurde mir von dflame zur&lt;br /&gt;
&amp;amp;gt; Verf&amp;amp;uuml;gung gestellt. Herzlichen Dank&lt;br /&gt;
&amp;amp;gt; nochmal!! :)&lt;br /&gt;
&lt;br /&gt;
irqq     lda $58&lt;br /&gt;
         bne irq2&lt;br /&gt;
&lt;br /&gt;
         ldy #$30&lt;br /&gt;
         ldx #$00&lt;br /&gt;
         stx $fa&lt;br /&gt;
         sty $fb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         inc $58&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $02&lt;br /&gt;
irq02    ldy $57&lt;br /&gt;
         lda txt,y&lt;br /&gt;
         bne irq01&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $57&lt;br /&gt;
         jmp irq02&lt;br /&gt;
irq01    inc $57&lt;br /&gt;
         asl&lt;br /&gt;
         rol $02&lt;br /&gt;
         asl&lt;br /&gt;
         rol $02&lt;br /&gt;
         asl&lt;br /&gt;
         rol $02&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         clc&lt;br /&gt;
         adc $fa&lt;br /&gt;
         sta $fa&lt;br /&gt;
         lda $02&lt;br /&gt;
         adc $fb&lt;br /&gt;
         sta $fb&lt;br /&gt;
&lt;br /&gt;
         ldy #$00&lt;br /&gt;
irq0     lda ($fa),y&lt;br /&gt;
         sta $02c0,y&lt;br /&gt;
         iny&lt;br /&gt;
         cpy #$08&lt;br /&gt;
         bne irq0&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Jetzt gehts ins Eingemachte. Hier&lt;br /&gt;
&amp;amp;gt; werden die Zeichen berechnet und&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; zwischengespeichert. Der Text der&lt;br /&gt;
&amp;amp;gt; Laufschrift steht ab Label &amp;quot;txt&amp;quot;.&lt;br /&gt;
&amp;amp;gt; Von dort wird ein Zeichen gelesen und&lt;br /&gt;
&amp;amp;gt; danach berechnet, wo dieses Zeichen&lt;br /&gt;
&amp;amp;gt; sich in unserem zuvor kopierten ROM-&lt;br /&gt;
&amp;amp;gt; Zeichensatz befindet. Daf&amp;amp;uuml;r muss man&lt;br /&gt;
&amp;amp;gt; den Wert des Zeichens * 8 nehmen und&lt;br /&gt;
&amp;amp;gt; den Wert zu $3000 rechnen ($fa/$fb).&lt;br /&gt;
&amp;amp;gt; Am Ende wird das aktuelle Zeichen nach&lt;br /&gt;
&amp;amp;gt; $02c0-$02c7 geschrieben. Dort kann es&lt;br /&gt;
&amp;amp;gt; dann gleich ver&amp;amp;auml;ndert werden. Diese&lt;br /&gt;
&amp;amp;gt; Zwischenspeicherung ist notwendig,&lt;br /&gt;
&amp;amp;gt; weil wir ja sonst nach jedem Zeichen&lt;br /&gt;
&amp;amp;gt; den ROM-Zeichensatz neu kopieren&lt;br /&gt;
&amp;amp;gt; m&amp;amp;uuml;ssten, weil jedes Zeichen durch den&lt;br /&gt;
&amp;amp;gt; ASL-Befehl gleich geleert wird.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Der Wert in $5a wird &amp;amp;uuml;brigens von 0&lt;br /&gt;
&amp;amp;gt; auf 1 gestellt, weil ja nicht nach&lt;br /&gt;
&amp;amp;gt; jedem Durchgang ein neues Zeichen&lt;br /&gt;
&amp;amp;gt; berechnet werden darf, sondern erst,&lt;br /&gt;
&amp;amp;gt; wenn alle 8 Bits eines Zeichens&lt;br /&gt;
&amp;amp;gt; abgearbeitet wurden.&lt;br /&gt;
&lt;br /&gt;
irq2     ldy #$00&lt;br /&gt;
         ldx #$00&lt;br /&gt;
irq4     asl $02c0,x&lt;br /&gt;
         bcc irq3&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8642,y&lt;br /&gt;
         sta 8642,y&lt;br /&gt;
irq3     iny&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         iny&lt;br /&gt;
         iny&lt;br /&gt;
         inx&lt;br /&gt;
         cpx #$08&lt;br /&gt;
         bne irq4&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Nun werden die ersten 8 Bits des&lt;br /&gt;
&amp;amp;gt; aktuellen Zeichens per ASL-Befehl in&lt;br /&gt;
&amp;amp;gt; die Sprites &amp;amp;uuml;bertragen. Genauer gesagt&lt;br /&gt;
&amp;amp;gt; in Sprite Nr. 8, das ganz rechts&lt;br /&gt;
&amp;amp;gt; steht. Dieses Sprite steht ab Adresse&lt;br /&gt;
&amp;amp;gt; 8640 (Hex $21c0, ich habe ausnahms-&lt;br /&gt;
&amp;amp;gt; weise mal mit dezimalen Adressen&lt;br /&gt;
&amp;amp;gt; gearbeitet). In Adresse 8642 beginnt&lt;br /&gt;
&amp;amp;gt; somit das erste Zeichen. Dort werden&lt;br /&gt;
&amp;amp;gt; die Bits einfach hinzuaddiert.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         inc $5a&lt;br /&gt;
         lda $5a&lt;br /&gt;
         cmp #$08&lt;br /&gt;
         bne irq5&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $58&lt;br /&gt;
         sta $5a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; $5a dient als Z&amp;amp;auml;hler f&amp;amp;uuml;r die Anzahl&lt;br /&gt;
&amp;amp;gt; der Durchg&amp;amp;auml;nge f&amp;amp;uuml;r ein Zeichen. Steht&lt;br /&gt;
&amp;amp;gt; dieser auf 8, so wurden alle 8 Bits&lt;br /&gt;
&amp;amp;gt; des aktuellen Zeichens verarbeitet und&lt;br /&gt;
&amp;amp;gt; beim n&amp;amp;auml;chsten Durchgang wird das&lt;br /&gt;
&amp;amp;gt; n&amp;amp;auml;chste Zeichen aus dem Laufschrift-&lt;br /&gt;
&amp;amp;gt; text genommen.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Was nun kommt (von Label &amp;quot;irq5&amp;quot; und&lt;br /&gt;
&amp;amp;gt; &amp;quot;irq27&amp;quot;), sollte klar sein. Jede&lt;br /&gt;
&amp;amp;gt; Stelle in den Sprites, von links nach&lt;br /&gt;
&amp;amp;gt; rechts gesehen, in die ein Zeichen&lt;br /&gt;
&amp;amp;gt; passt, wird per ASL-Befehl um ein Bit&lt;br /&gt;
&amp;amp;gt; nach links ger&amp;amp;uuml;ckt. Dabei wird jeweils&lt;br /&gt;
&amp;amp;gt; mit dem BCC-Befehl auf ein belegtes&lt;br /&gt;
&amp;amp;gt; Bit reagiert und dieses auf die Stelle&lt;br /&gt;
&amp;amp;gt; davor hinzuaddiert. Dies bewirkt am&lt;br /&gt;
&amp;amp;gt; Ende ein Durchrollen der jeweiligen&lt;br /&gt;
&amp;amp;gt; Bits und somit einen weichen Scroller.&lt;br /&gt;
&lt;br /&gt;
irq5     ldy #$00&lt;br /&gt;
         ldx #$00&lt;br /&gt;
&lt;br /&gt;
irq6     asl 8192,x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; 8192-8199 wird NUR nach links&lt;br /&gt;
&amp;amp;gt; geschoben. Hierbei ist es nicht&lt;br /&gt;
&amp;amp;gt; notwendig, auf die Bits zu achten,&lt;br /&gt;
&amp;amp;gt; weil hier der Scroller eh zu Ende ist&lt;br /&gt;
&amp;amp;gt; und die Bits einfach links&lt;br /&gt;
&amp;amp;gt; verschwinden k&amp;amp;ouml;nnen.&lt;br /&gt;
&lt;br /&gt;
         asl 8193,x&lt;br /&gt;
         bcc irq7&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8192,x&lt;br /&gt;
         sta 8192,x&lt;br /&gt;
&lt;br /&gt;
irq7     asl 8194,x&lt;br /&gt;
         bcc irq8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8193,x&lt;br /&gt;
         sta 8193,x&lt;br /&gt;
&lt;br /&gt;
irq8     asl 8256,x&lt;br /&gt;
         bcc irq9&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8194,x&lt;br /&gt;
         sta 8194,x&lt;br /&gt;
&lt;br /&gt;
irq9     asl 8257,x&lt;br /&gt;
         bcc irq10&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         adc 8256,x&lt;br /&gt;
         sta 8256,x&lt;br /&gt;
&lt;br /&gt;
irq10    asl 8258,x&lt;br /&gt;
         bcc irq11&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8257,x&lt;br /&gt;
         sta 8257,x&lt;br /&gt;
&lt;br /&gt;
irq11    asl 8320,x&lt;br /&gt;
         bcc irq12&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8258,x&lt;br /&gt;
         sta 8258,x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
irq12    asl 8321,x&lt;br /&gt;
         bcc irq13&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8320,x&lt;br /&gt;
         sta 8320,x&lt;br /&gt;
&lt;br /&gt;
irq13    asl 8322,x&lt;br /&gt;
         bcc irq14&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8321,x&lt;br /&gt;
         sta 8321,x&lt;br /&gt;
&lt;br /&gt;
irq14    asl 8384,x&lt;br /&gt;
         bcc irq15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8322,x&lt;br /&gt;
         sta 8322,x&lt;br /&gt;
&lt;br /&gt;
irq15    asl 8385,x&lt;br /&gt;
         bcc irq16&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8384,x&lt;br /&gt;
         sta 8384,x&lt;br /&gt;
&lt;br /&gt;
irq16    asl 8386,x&lt;br /&gt;
         bcc irq17&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         adc 8385,x&lt;br /&gt;
         sta 8385,x&lt;br /&gt;
&lt;br /&gt;
irq17    asl 8448,x&lt;br /&gt;
         bcc irq18&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8386,x&lt;br /&gt;
         sta 8386,x&lt;br /&gt;
&lt;br /&gt;
irq18    asl 8449,x&lt;br /&gt;
         bcc irq188&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8448,x&lt;br /&gt;
         sta 8448,x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
irq188   asl 8450,x&lt;br /&gt;
         bcc irq19&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8449,x&lt;br /&gt;
         sta 8449,x&lt;br /&gt;
&lt;br /&gt;
irq19    asl 8512,x&lt;br /&gt;
         bcc irq20&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8450,x&lt;br /&gt;
         sta 8450,x&lt;br /&gt;
&lt;br /&gt;
irq20    asl 8513,x&lt;br /&gt;
         bcc irq21&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8512,x&lt;br /&gt;
         sta 8512,x&lt;br /&gt;
&lt;br /&gt;
irq21    asl 8514,x&lt;br /&gt;
         bcc irq22&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8513,x&lt;br /&gt;
         sta 8513,x&lt;br /&gt;
&lt;br /&gt;
irq22    asl 8576,x&lt;br /&gt;
         bcc irq23&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         adc 8514,x&lt;br /&gt;
         sta 8514,x&lt;br /&gt;
&lt;br /&gt;
irq23    asl 8577,x&lt;br /&gt;
         bcc irq24&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8576,x&lt;br /&gt;
         sta 8576,x&lt;br /&gt;
&lt;br /&gt;
irq24    asl 8578,x&lt;br /&gt;
         bcc irq255&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8577,x&lt;br /&gt;
         sta 8577,x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
irq255   asl 8640,x&lt;br /&gt;
         bcc irq25&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8578,x&lt;br /&gt;
         sta 8578,x&lt;br /&gt;
&lt;br /&gt;
irq25    asl 8641,x&lt;br /&gt;
         bcc irq26&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8640,x&lt;br /&gt;
         sta 8640,x&lt;br /&gt;
&lt;br /&gt;
irq26    asl 8642,x&lt;br /&gt;
         bcc irq27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         lda #$01&lt;br /&gt;
         clc&lt;br /&gt;
         adc 8641,x&lt;br /&gt;
         sta 8641,x&lt;br /&gt;
&lt;br /&gt;
irq27    inx&lt;br /&gt;
         inx&lt;br /&gt;
         inx&lt;br /&gt;
         iny&lt;br /&gt;
         cpy #$08&lt;br /&gt;
         beq irqend&lt;br /&gt;
         jmp irq6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Diese ganze Prozedur muss nat&amp;amp;uuml;rlich&lt;br /&gt;
&amp;amp;gt; 8 mal durchlaufen werden, f&amp;amp;uuml;r jedes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Byte eines Zeichens, das aus 8 Bytes&lt;br /&gt;
&amp;amp;gt; besteht.&lt;br /&gt;
&lt;br /&gt;
irqend   jmp $ea31&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Ende der Irq-Routine.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;++++++++++++++++++++++++++++++++++++++&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
sprmove  lda #$5c&lt;br /&gt;
         ldy #$00&lt;br /&gt;
         ldx #$00&lt;br /&gt;
spr1     sta $d001,y&lt;br /&gt;
         iny&lt;br /&gt;
         iny&lt;br /&gt;
         inx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         cpx #$08&lt;br /&gt;
         bne spr1&lt;br /&gt;
spr2     ldx #$9f&lt;br /&gt;
         lda sinus,x&lt;br /&gt;
         cmp #$3c&lt;br /&gt;
         bne spr3&lt;br /&gt;
         lda #$ff&lt;br /&gt;
         sta $d01b&lt;br /&gt;
spr3     cmp #$80&lt;br /&gt;
         bne spr4&lt;br /&gt;
         lda #$00&lt;br /&gt;
         sta $d01b&lt;br /&gt;
spr4     lda sinus,x&lt;br /&gt;
         clc&lt;br /&gt;
         adc #$05&lt;br /&gt;
         sta sprmove+1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         inc spr2+1&lt;br /&gt;
         rts&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Dies ist die kleine Routine, die den&lt;br /&gt;
&amp;amp;gt; Scroller von oben nach unten &amp;quot;h&amp;amp;uuml;pfen&amp;quot;&lt;br /&gt;
&amp;amp;gt; l&amp;amp;auml;sst. Unter anderem sorgt diese&lt;br /&gt;
&amp;amp;gt; daf&amp;amp;uuml;r, dass sich der Sprite-Scroller&lt;br /&gt;
&amp;amp;gt; abwechselnd hinter bzw. vor dem&lt;br /&gt;
&amp;amp;gt; Digital Talk-Logo befindet. Dies wird&lt;br /&gt;
&amp;amp;gt; in der Adresse $d01b kontrolliert.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;--------------------------------------&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
txt      .byte $03,$08,$09,$03,$0f,$20&lt;br /&gt;
         .byte $0f,$06,$20,$03,$09,$16&lt;br /&gt;
         .byte $09,$14,$01,$13,$20,$00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;gt; Hier steht der kurze Laufschrifttext.&lt;br /&gt;
&amp;amp;gt; Dieser kann hier nur max. 255 Zeichen&lt;br /&gt;
&amp;amp;gt; lang sein. Man kann das Programm&lt;br /&gt;
&amp;amp;gt; jedoch so modifizieren, dass der Text&lt;br /&gt;
&amp;amp;gt; auch l&amp;amp;auml;nger sein kann. Vielleicht eine&lt;br /&gt;
&amp;amp;gt; kleine Aufgabe f&amp;amp;uuml;r Euch??? ;-)&lt;br /&gt;
&lt;br /&gt;
sinus    .byte $46,$45,$45,$44,$44,$43&lt;br /&gt;
         .byte $42,$41,$40,$3f,$3e,$3d&lt;br /&gt;
         .byte $3d,$3c,$3c,$3c,$3c,$3d&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Hier stehen die Werte f&amp;amp;uuml;r die Sinus-&lt;br /&gt;
&amp;amp;gt; Routine.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;--------------------------------------&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
logo     .byte $01,$02,$03,$04,$05,$06&lt;br /&gt;
         .byte $03,$07,$08,$09,$0a,$03&lt;br /&gt;
         .byte $0b,$00,$0c,$0d,$0e,$0f&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Hier stehen die Werte f&amp;amp;uuml;r das Logo.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;--------------------------------------&amp;amp;gt;&lt;br /&gt;
screen   .byte $ff,$ff,$ff,$ff,$ff,$ff&lt;br /&gt;
         .byte $ff,$ff,$ff,$ff,$ff,$ff&lt;br /&gt;
         .byte $ff,$ff,$ff,$ff,$ff,$ff&lt;br /&gt;
usw.&lt;br /&gt;
&amp;amp;gt; Hier stehen die Werte f&amp;amp;uuml;r den&lt;br /&gt;
&amp;amp;gt; Bildschirm.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;--------------------------------------&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         *= $2800&lt;br /&gt;
&lt;br /&gt;
         .byte $00,$00,$00,$00,$00,$00&lt;br /&gt;
         .byte $00,$00,$00,$7f,$7f,$7f&lt;br /&gt;
         .byte $7f,$7f,$7d,$7c,$00,$00&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt; Ab $2800 steht der Zeichensatz f&amp;amp;uuml;r das&lt;br /&gt;
&amp;amp;gt; Logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das war's dann soweit.&lt;br /&gt;
&lt;br /&gt;
Solltet  Ihr  Fragen, W&amp;amp;uuml;nsche oder Anre-&lt;br /&gt;
gungen haben, dann schreibt doch einfach&lt;br /&gt;
an die DT-Redaktion.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Auch  hoffe  ich,  dass auch dieser Ass-&lt;br /&gt;
Kurs ein wenig interessant f&amp;amp;uuml;r Euch war.&lt;br /&gt;
&lt;br /&gt;
Dann bis zum n&amp;amp;auml;chsten Mal...&lt;br /&gt;
&lt;br /&gt;
Euer&lt;br /&gt;
&lt;br /&gt;
XXXXXXXXXXXXXXXXXX&lt;br /&gt;
CHICO/CIVITAS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                       _&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nyquist</name></author>	</entry>

	</feed>