Charon
Moderator: Rockford
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Charon
Ich möchte mein erstes Projekt "Charon" nennen! Charon ist der erste Mond von Pluto - also ganz ähnlich wie Phobos der erste Mond vom Mars ist.
Hier werde ich nun pö a pö das Spiel entwickeln. Es wird also ein Shooter und soll dem Spiel Phobos sehr angelehnt werden.
Ich möchte es hier im Forum posten - wenn es erwünscht ist und niemanden nervt - und es soll komplett in Assembler programmiert werden.
Der Code wird komplett offen liegen und über einen regen Austausch mit Tips, Verbesserungen, Ideen bin ich dankbar... also wer Lust hat, der kann sich sehr gerne rege beteiligen.
Das Spiel möchte ich Schritt für Schritt entwickeln, alle Programmierklippen sollen dabei gelöst werden.
Ich programmiere auf meinem Mac unter Eclipse und WUDSN / MADS-Assembler.
Folgende Schritte stelle ich mir vor:
1. Ich nehme Graphics 0 mit 16 Farben. Dazu bearbeiten wir die Charakter entsprechend.
2. Eine erste Landschaft mit Feinscrolling wird erstellt.
3. Die Landschaft wird komplexer, verschiedene Items werden eingebunden.
4. PM kommt dazu (Raumschiff, Schüsse werden simuliert)
5. Kollisionsabfragen mit entsprechenden Aktionen
6. Die Landschaften werden komplexer - verschiedene Level mit Endgegner.
7. Evt. Sonderlevel, geheime Level etc.
8. Sound / Highscore
9. Evt. 2 Spieler-Modus
10. ....
Liebe Grüße
Peter
Hier werde ich nun pö a pö das Spiel entwickeln. Es wird also ein Shooter und soll dem Spiel Phobos sehr angelehnt werden.
Ich möchte es hier im Forum posten - wenn es erwünscht ist und niemanden nervt - und es soll komplett in Assembler programmiert werden.
Der Code wird komplett offen liegen und über einen regen Austausch mit Tips, Verbesserungen, Ideen bin ich dankbar... also wer Lust hat, der kann sich sehr gerne rege beteiligen.
Das Spiel möchte ich Schritt für Schritt entwickeln, alle Programmierklippen sollen dabei gelöst werden.
Ich programmiere auf meinem Mac unter Eclipse und WUDSN / MADS-Assembler.
Folgende Schritte stelle ich mir vor:
1. Ich nehme Graphics 0 mit 16 Farben. Dazu bearbeiten wir die Charakter entsprechend.
2. Eine erste Landschaft mit Feinscrolling wird erstellt.
3. Die Landschaft wird komplexer, verschiedene Items werden eingebunden.
4. PM kommt dazu (Raumschiff, Schüsse werden simuliert)
5. Kollisionsabfragen mit entsprechenden Aktionen
6. Die Landschaften werden komplexer - verschiedene Level mit Endgegner.
7. Evt. Sonderlevel, geheime Level etc.
8. Sound / Highscore
9. Evt. 2 Spieler-Modus
10. ....
Liebe Grüße
Peter
- Kveldulfur
- Beiträge: 844
- Registriert: 17.08.2021 02:32
- Has thanked: 357 times
- Been thanked: 290 times
- Kontaktdaten:
Re: Charon
Hallo!
Kling sehr interessant. Also ich würde mich freuen, wenn man hier im Forum die Entwicklung miterleben kann und so selber ein wenig Assembler lernt. Gerade das Feinscrolling insteressiert mich... Naja, eigentlich alles
Grüße
Kling sehr interessant. Also ich würde mich freuen, wenn man hier im Forum die Entwicklung miterleben kann und so selber ein wenig Assembler lernt. Gerade das Feinscrolling insteressiert mich... Naja, eigentlich alles
Grüße
Meine Projekte findest Du hier...
- Sleeπ
- Beiträge: 1799
- Registriert: 18.06.2021 20:58
- Has thanked: 195 times
- Been thanked: 397 times
- Kontaktdaten:
Re: Charon
Ich bin jetzt keine Leuchte in Assembler, würde mich aber trotzdem freuen die Entstehung hier verfolgen zu können (und etwas davon zu lernen)
Sleeπ
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
... es dauert ein wenig, da ich viel auf der Arbeit zu tun habe...
Ich habe jetzt neben der Arbeit versucht dieses kleine Basic-Programm:
In Assembler umzusetzen... das ist gar nicht so einfach wegen der Schleifen und der Multiplikationen usw.!!!!
Mein erster Ansatz (wirkt recht umständlich muss ich zugeben) war jetzt folgender:
leider tut sich noch nichts... liegt es daran, daß ich keinen Graphics 0-Befehl eingebracht habe? Muss ich erst noch die DL konfigurieren?
Wahrscheinlich hat der Code irgendein Denkfehler... am Sonntag gehe ich ihn nochmal konzentriert durch!
Ich habe jetzt neben der Arbeit versucht dieses kleine Basic-Programm:
Code: Alles auswählen
10 POKE 106,PEEK(106)-4
20 CB=PEEK(106)
30 GRAPHICS 0
40 CHRSET = CB*256
50 DIM CT(16)
60 FOR I=0 TO 15: CT(I)=17*I:NEXT I
70 FOR I=0 TO 15
80 FOR J=0 TO 7
90 POKE CHRSET+I*8+J,CT(I)
100 NEXT J: NEXT I
110 SCREEN=PEEK(88)+PEEK(89)*256
120 FOR I=0 TO 15: POKE SCREEN+I,I:NEXT I
130 POKE 756,CB
140 POKE 623,192
150 POKE 712,8
160 GOTO 160
Mein erster Ansatz (wirkt recht umständlich muss ich zugeben) war jetzt folgender:
Code: Alles auswählen
org $4000
cb = 106
chrset = 180
ct .by 0,17,34,51,68,85,102,119,136,153,170,187,204,221,238,255
ch .by 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120
var1 = 182
start clc
lda cb
sbc #4
sta cb
sta chrset+1
ldy#0
lp1 ldx#0
clc
lp2 lda ch,y
sty var1
adc var1
tay
lda ct,y
sta (chrset),y
inx
cpx #7
bne lp2
iny
cpy #15
bne lp1
ldy #0
ldx #0
clc
lp3 tya
sta (88),y
iny
cpy #15
bne lp3
lda cb
sta 756
lda #192
sta 623
lda #8
sta 712
lp4 jmp lp4
run start
leider tut sich noch nichts... liegt es daran, daß ich keinen Graphics 0-Befehl eingebracht habe? Muss ich erst noch die DL konfigurieren?
Wahrscheinlich hat der Code irgendein Denkfehler... am Sonntag gehe ich ihn nochmal konzentriert durch!
- Irgendwer
- Beiträge: 101
- Registriert: 25.08.2021 19:05
- Has thanked: 16 times
- Been thanked: 51 times
- Kontaktdaten:
Re: Charon
... ein erster Hinweis (habe mir nur ganz flüchtig eben Deinen Beitrag angeschaut):
Für die Subtraktion "brauchst Du was zum Borgen". Die typische Sequenz sieht so aus:
Code: Alles auswählen
sec
sbc #value
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Danke für den Hinweis "sec" !!!
... ein wenig verschlankt, ein paar weitere Fehler noch korrigiert...
läuft
ein paar Erklärungen:
Tatsächlich musste ich statt 4, 16 subtrahieren, um Chaos im Charakterset zu vermeiden. Die 3 ASL bedeuten Multiplikation mit 8. Wer die Multiplikation der um 16 Subtrahierten Speicherstelle mit 256 (siehe Basic-Programm) sucht, der findet sie in dem Ausdruck: sta chrset+1 ... denn mit x256 spreche ich ja das Hi-Byte an - also packe ich den Werte einfach in chrset+1 rein und nutze dann später die indirekt indizierte Speicherstelle sta (chrset),y
LG Peter
Als nächstes werden wir damit die Landschaft erstellen und das Feinscrolling aufsetzen...
... ein wenig verschlankt, ein paar weitere Fehler noch korrigiert...
läuft
Code: Alles auswählen
org $4000
cb = 106
chrset = 180
var1 = 182
start lda cb
sec
sbc #16
sta cb
sta chrset+1
ldx #0
lp1 txa
asl
asl
asl
sta chrset
lp2 lda var1
sta (chrset),y
iny
cpy #7
bne lp2
ldy #0
clc
lda var1
adc #17
sta var1
inx
cpx #16
bne lp1
lp3 tya
sta (88),y
iny
cpy #16
bne lp3
lda cb
sta 756
lda #192
sta 623
lda #8
sta 712
lp4 jmp lp4
run start
ein paar Erklärungen:
Tatsächlich musste ich statt 4, 16 subtrahieren, um Chaos im Charakterset zu vermeiden. Die 3 ASL bedeuten Multiplikation mit 8. Wer die Multiplikation der um 16 Subtrahierten Speicherstelle mit 256 (siehe Basic-Programm) sucht, der findet sie in dem Ausdruck: sta chrset+1 ... denn mit x256 spreche ich ja das Hi-Byte an - also packe ich den Werte einfach in chrset+1 rein und nutze dann später die indirekt indizierte Speicherstelle sta (chrset),y
LG Peter
Als nächstes werden wir damit die Landschaft erstellen und das Feinscrolling aufsetzen...
- pps
- Beiträge: 644
- Registriert: 18.06.2021 23:05
- Has thanked: 147 times
- Been thanked: 272 times
- Kontaktdaten:
Re: Charon
Da Du ja WUDSN nutzt...
Wie wäre es, wenn Du Deine einzelnen Routinen ein wenig eingrenzt mit .PROC oder .LOCAL?
Unten habe ich das mal für start gemacht. Was das bringt, siehst Du spätestens, wenn das Programm größer wird und mehrere Sprunglabels hat. Man kann im Outline und im Editor deutlich besser und schneller zu den einzelnen Teilen gehen.
Die loops habe ich auch mal etwas angepasst. Die @loops machen auch die outline etwas schmaler. @- springt zurück zum vorherigen @loop, @+ zum nächsten. Das lp1 könnte man auch mit einem @ nutzen, muss dann aber beim bne @-2 schreiben, @- würde nur zum alten lp2 springen.
Was auch sehr sinnvoll ist...
Einzelne Bereiche des Programms in eigene sources zu legen und in einem "Projekt-File" diese dann zusammenzufassen und dann dieses zu assemblieren. So kann man Grafik, Spiellogik, Arithmetik etc. in getrennten und kürzeren Dateien haben und auch einfacher in anderen Projekten wieder verwenden.
Wie wäre es, wenn Du Deine einzelnen Routinen ein wenig eingrenzt mit .PROC oder .LOCAL?
Unten habe ich das mal für start gemacht. Was das bringt, siehst Du spätestens, wenn das Programm größer wird und mehrere Sprunglabels hat. Man kann im Outline und im Editor deutlich besser und schneller zu den einzelnen Teilen gehen.
Die loops habe ich auch mal etwas angepasst. Die @loops machen auch die outline etwas schmaler. @- springt zurück zum vorherigen @loop, @+ zum nächsten. Das lp1 könnte man auch mit einem @ nutzen, muss dann aber beim bne @-2 schreiben, @- würde nur zum alten lp2 springen.
Was auch sehr sinnvoll ist...
Einzelne Bereiche des Programms in eigene sources zu legen und in einem "Projekt-File" diese dann zusammenzufassen und dann dieses zu assemblieren. So kann man Grafik, Spiellogik, Arithmetik etc. in getrennten und kürzeren Dateien haben und auch einfacher in anderen Projekten wieder verwenden.
Prodehl hat geschrieben: ↑08.10.2021 22:36Danke für den Hinweis "sec" !!!
... ein wenig verschlankt, ein paar weitere Fehler noch korrigiert...
läuft
Code: Alles auswählen
org $4000 cb = 106 chrset = 180 var1 = 182 .proc start lda cb sec sbc #16 sta cb sta chrset+1 ldx #0 lp1 txa asl asl asl sta chrset @ lda var1 sta (chrset),y iny cpy #7 bne @- ldy #0 clc lda var1 adc #17 sta var1 inx cpx #16 bne lp1 @ tya sta (88),y iny cpy #16 bne @- lda cb sta 756 lda #192 sta 623 lda #8 sta 712 lp4 jmp lp4 .endp run start
ein paar Erklärungen:
Tatsächlich musste ich statt 4, 16 subtrahieren, um Chaos im Charakterset zu vermeiden. Die 3 ASL bedeuten Multiplikation mit 8. Wer die Multiplikation der um 16 Subtrahierten Speicherstelle mit 256 (siehe Basic-Programm) sucht, der findet sie in dem Ausdruck: sta chrset+1 ... denn mit x256 spreche ich ja das Hi-Byte an - also packe ich den Werte einfach in chrset+1 rein und nutze dann später die indirekt indizierte Speicherstelle sta (chrset),y
LG Peter
Als nächstes werden wir damit die Landschaft erstellen und das Feinscrolling aufsetzen...
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Hey lieben Dank!
Die Anpassungen habe ich gleich mal übernommen. Komischerweise läuft der Loop nicht mit @-2 sondern mit @-1 ... nicht ganz logisch aber dann vielleicht doch, denn nach bne @- kommt wahrscheinlich für das Programm logisch bne @-1 und dann bne @-2 etc.
Mit den Proceduren und einzelnen Projekten ist sicherlich höchst sinnvoll, um Redundanzen zu vermeiden und den Code übersichtlicher zu gestalten - natürlich wird es dann für jemand, der den Code ganz normal im Atari Assembler nachvollziehen will schwieriger... außerdem programmiere ich erst seit der Fujiyama mit WUDSN und es gibt. wenig Dokumentation oder Beispielcodes wo man lernen kann... ich muss mir fast alles selber beibringen, daher ist es echt toll, daß einige Profis mich hier ein wenig begleiten... Danke dafür!! Danke für den Austausch!!
Ichdenke mit der Zeit werde ich mehr und mehr auf die Möglichkeiten des WUDSN zurückgreifen... vielleicht bekomme ich ja auf der JHV noch ein paar Anregungen und Nachhilfestunden
An dieser Stelle ganz liebe Grüße auch. an Peter alias JAC
P.s. meine Tastatur prellt manchmal
Die Anpassungen habe ich gleich mal übernommen. Komischerweise läuft der Loop nicht mit @-2 sondern mit @-1 ... nicht ganz logisch aber dann vielleicht doch, denn nach bne @- kommt wahrscheinlich für das Programm logisch bne @-1 und dann bne @-2 etc.
Mit den Proceduren und einzelnen Projekten ist sicherlich höchst sinnvoll, um Redundanzen zu vermeiden und den Code übersichtlicher zu gestalten - natürlich wird es dann für jemand, der den Code ganz normal im Atari Assembler nachvollziehen will schwieriger... außerdem programmiere ich erst seit der Fujiyama mit WUDSN und es gibt. wenig Dokumentation oder Beispielcodes wo man lernen kann... ich muss mir fast alles selber beibringen, daher ist es echt toll, daß einige Profis mich hier ein wenig begleiten... Danke dafür!! Danke für den Austausch!!
Ichdenke mit der Zeit werde ich mehr und mehr auf die Möglichkeiten des WUDSN zurückgreifen... vielleicht bekomme ich ja auf der JHV noch ein paar Anregungen und Nachhilfestunden
An dieser Stelle ganz liebe Grüße auch. an Peter alias JAC
P.s. meine Tastatur prellt manchmal
- Kveldulfur
- Beiträge: 844
- Registriert: 17.08.2021 02:32
- Has thanked: 357 times
- Been thanked: 290 times
- Kontaktdaten:
Re: Charon
Hallo!
Als ich das erste Script von Dir, was nicht lief, nachprogrammieren wollte, ist mir aufgefallen dass Du die Speicherzellen Dezimal schreibst. Ausserdem haben bestimmte Speicherzellen wohl feste Namen. 106 ist RAMTOP und wäre Hexadezimal $6A
Also wäre besser
RAMTOP EQU $6A
Desweiteren nutzt Du die Adresse 88, das wäre SAVMSC $58.
Ich denke, dass man die festen Namen zur besseren Lesbarkeit nutzen sollte.
Als letztes wäre es sehr gut, wenn man sich von Anfang an angewöhnt immer Kommentare im Quellcode zu schreiben.
Je größer und länger ein Programm wird, desto schwerer findet man sich sonst zurecht.
Grüße
Als ich das erste Script von Dir, was nicht lief, nachprogrammieren wollte, ist mir aufgefallen dass Du die Speicherzellen Dezimal schreibst. Ausserdem haben bestimmte Speicherzellen wohl feste Namen. 106 ist RAMTOP und wäre Hexadezimal $6A
Also wäre besser
RAMTOP EQU $6A
Desweiteren nutzt Du die Adresse 88, das wäre SAVMSC $58.
Ich denke, dass man die festen Namen zur besseren Lesbarkeit nutzen sollte.
Als letztes wäre es sehr gut, wenn man sich von Anfang an angewöhnt immer Kommentare im Quellcode zu schreiben.
Je größer und länger ein Programm wird, desto schwerer findet man sich sonst zurecht.
Grüße
Meine Projekte findest Du hier...
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
danke für die Hinweise, ich werde das zu berücksichtigen versuchen... sicherlich alles sinnvoll was du sagst, mit Hexadezimalist für mich. schon eher gewöhnungsbedürftig!
Ich hoffe morgen ein wenig Zeit fürs Feinscrolling zu finden...
Ich hoffe morgen ein wenig Zeit fürs Feinscrolling zu finden...
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
ich habe das entsprechend des kleinen Rüffels angepasst:
Es macht Sinn gleich von Anfang an zu dokumentieren und ein paar Remarks in den Programmcode einzubinden. Man kann es ja durchaus sparsam aber effektiv gestalten.
Die Systemvariablen zu benennen mach Sinn, da der Code sich dann ebenfalls klarer und verständlicher liest. Warum in Haxedezimal? Gerade bei Adressen über 255 (also 16 Bit) läßt sich damit viel besser arbeiten, da in Hexadezimal hier gleich das Hi / Low-Byte angezeigt werden.
Sinnvoll bzw. unabdingbar für jeden Programmierer erscheint mir "Das Atari Profibuch", was mir glücklicherweise (neu) vorliegt!
Allen einen schönen Sonntag!
Gruß Peter
Code: Alles auswählen
org $4000
ramtop = $6a
savmsc = $58
chbas = $2f4
gprior = $26f
color4 = $2c8
chrset = 180
var1 = 182
start lda ramtop ;Ramtop verändern
sec
sbc #16
sta ramtop
sta chrset+1
ldx #0
lp1 txa ;Charakter neu definieren
asl
asl
asl
sta chrset
lp2 lda var1
sta (chrset),y
iny
cpy #7
bne lp2
ldy #0
clc
lda var1
adc #17
sta var1
inx
cpx #16
bne lp1
lp3 tya ;Die ersten 16 Charakter auf den Bildschirm bringen
sta (savmsc),y
iny
cpy #16
bne lp3
lda ramtop ;Basisadresse Zeichensatz neu festlegen
sta chbas
lda #$c0 ;GTIA Modus 3 (16 Farben) initialisieren
sta gprior
lda #8 ;Hintergrundfarbe / Helligkeit festlegen
sta color4
lp4 jmp lp4
run start
Die Systemvariablen zu benennen mach Sinn, da der Code sich dann ebenfalls klarer und verständlicher liest. Warum in Haxedezimal? Gerade bei Adressen über 255 (also 16 Bit) läßt sich damit viel besser arbeiten, da in Hexadezimal hier gleich das Hi / Low-Byte angezeigt werden.
Sinnvoll bzw. unabdingbar für jeden Programmierer erscheint mir "Das Atari Profibuch", was mir glücklicherweise (neu) vorliegt!
Allen einen schönen Sonntag!
Gruß Peter
- pps
- Beiträge: 644
- Registriert: 18.06.2021 23:05
- Has thanked: 147 times
- Been thanked: 272 times
- Kontaktdaten:
Re: Charon
Noch ein Vorschlag zu den Systemvariablen.
Um nicht alles selbst immer wieder neu machen zu müssen, kann man auch eine "header" Datei einbinden, die schon jemand gemacht hat. Ich persönlich nutze da eine von Graph2Font erzeugte "header" Datei, die ich mittlerweile um einige Adressen ergänzt und auch einige angepasst habe. Diese Datei binde ich immer in meine Quellcodes mit ein.
Dies geschieht am besten gleich am Anfang des Quellcodes via:
Wenn Du Deinen Code auf mehrere Dateien aufteilst, bindest Du sie dann so ein:
Dies ist ein Teil aus dem Source meines Spiels, das demnächst bei SikorSoft erscheint.
Damit Du auch beim Editieren dieser "Unter Dateien" mal eben schnell den gesamten Code assemblieren kannst, muss der WUDSN die "Haupt Datei" kennen. Direkt am Anfang jeder dieser eingebundenen Sources einfach den Link zur "Haupt Datei" schreiben und man kann immer den kompletten Code assemblieren ohne erst zu dieser Datei wechseln zu müssen:
Die erste Zeile ist nur eine Kurze Beschreibung, was die Datei halt so macht und kann natürlich auch weggelassen werden., das @com ist die wichtige Zeile für WUDSN.
Um nicht alles selbst immer wieder neu machen zu müssen, kann man auch eine "header" Datei einbinden, die schon jemand gemacht hat. Ich persönlich nutze da eine von Graph2Font erzeugte "header" Datei, die ich mittlerweile um einige Adressen ergänzt und auch einige angepasst habe. Diese Datei binde ich immer in meine Quellcodes mit ein.
Dies geschieht am besten gleich am Anfang des Quellcodes via:
Code: Alles auswählen
icl '../atari.hea'
Code: Alles auswählen
icl 'display/showmenu.asm' ;ingame menu
icl 'display/copyrestore.asm' ;copy and restore routines
icl 'calc/arithmetics.asm' ;arithmetics
icl 'calc/leveltables.asm' ;create level tables
icl 'logic/throwout.asm' ;trow someone out
icl 'sound/sound.asm' ;sound routines
icl 'display/gamemenu.asm' ;gamemenu
Damit Du auch beim Editieren dieser "Unter Dateien" mal eben schnell den gesamten Code assemblieren kannst, muss der WUDSN die "Haupt Datei" kennen. Direkt am Anfang jeder dieser eingebundenen Sources einfach den Link zur "Haupt Datei" schreiben und man kann immer den kompletten Code assemblieren ohne erst zu dieser Datei wechseln zu müssen:
Code: Alles auswählen
;arithmetics and conversations2screen of "runfast"
; @com.wudsn.ide.asm.mainsourcefile=../runfast_disc.asm
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
folgendes Problem bzw. Überlegungen:
Mit relativ viel Aufwand habe ich jetzt ein altes Listing von BASIC auf Assembler konvertiert, wo man mit GR.0 16 Farben darstellen kann.
Dies wollte ich für die Erstellung von Landschaften und anderen Charaktern nehmen, das Raumschiff und die Schüsse wollte ich mit PM-Grafik erstellen.
Nun habe ich gesehen, daß Thomas Schulz in seinem tollen Vortrag vor ein paar Jahren sich wohl einen eigenen Bitmap Editor programmiert hat, in einen der schönen Tutoriels von Peter Dell sah ich, wie er virtuos mit Eclipse (was ich ja auf Mac auch nutze) und GrafX2 Bitmap-Grafiken erstellt... diesen Weg kann ich mit meinem Mac so nicht gehen. Ich bekomme zwar GrafX2 mit CrossOver auf meinem Mac zum laufen, aber es ist kompliziert und schlecht zu nutzen... wie das in Eclipse eingebunden werden soll... keine Ahnung. Es bleibt fast nur per Hand die Bitmaps selber zu programmieren oder ich programmiere mir auch direkt eine Art Bitmap Editor selber... gibt es noch alternativer Ideen ????
Bin für alle Vorschläge sehr offen!
Gruß Peter
Mit relativ viel Aufwand habe ich jetzt ein altes Listing von BASIC auf Assembler konvertiert, wo man mit GR.0 16 Farben darstellen kann.
Dies wollte ich für die Erstellung von Landschaften und anderen Charaktern nehmen, das Raumschiff und die Schüsse wollte ich mit PM-Grafik erstellen.
Nun habe ich gesehen, daß Thomas Schulz in seinem tollen Vortrag vor ein paar Jahren sich wohl einen eigenen Bitmap Editor programmiert hat, in einen der schönen Tutoriels von Peter Dell sah ich, wie er virtuos mit Eclipse (was ich ja auf Mac auch nutze) und GrafX2 Bitmap-Grafiken erstellt... diesen Weg kann ich mit meinem Mac so nicht gehen. Ich bekomme zwar GrafX2 mit CrossOver auf meinem Mac zum laufen, aber es ist kompliziert und schlecht zu nutzen... wie das in Eclipse eingebunden werden soll... keine Ahnung. Es bleibt fast nur per Hand die Bitmaps selber zu programmieren oder ich programmiere mir auch direkt eine Art Bitmap Editor selber... gibt es noch alternativer Ideen ????
Bin für alle Vorschläge sehr offen!
Gruß Peter
- Mathy
- Beiträge: 1451
- Registriert: 18.06.2021 11:13
- Wohnort: Heerlen, NL
- Has thanked: 652 times
- Been thanked: 334 times
- Kontaktdaten:
Re: Charon
Hallo Peter
Frag doch mal den Thomas ob Du dir seinen Source Code mal kurz borgen kannst...
Tschüß
Mathy
Frag doch mal den Thomas ob Du dir seinen Source Code mal kurz borgen kannst...
Tschüß
Mathy
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Jetzt habe ich ein wenig überlegt und echt gezaudert wie ich es am besten mache... und mich entschieden den eingeschlagenen Weg für dieses erste Projekt beizubehalten nach dem Motto: Die Grafik muss noch nicht perfekt sein!! GTIA Modus 4 mit Farben und höherer Auflösung etc. mache ich später.
Ich bleibe bei GTIA 3 mit 16 Farben und habe dann nicht die perfekte Auflösung, aber für den Start hier wird es mehr als ausreichen. Rom ist auch nicht an einem Tag erbaut worden und es bleibt viel Zeit für die Lernkurve und für weitere Projekte....
Auch wie ich die Charakter umbiege und umändere... ich mache das jetzt direkt per Hand und bringe es direkt in den Assemblercode rein, um Platz zu sparen:
Entsprechend fahre ich jetzt fort und werde noch etliche weitere Charakter definieren für die Landschaft in noch weiteren Farben und für Gebäude bzw. Items. Das Raumschiff und die Schüsse werden mittels PM definiert.
Dann kommt ein Programmblock Feinscrolling, dann ein größerer Block für die Landschaft damit man das Feinscrolling testen kann und die Steuerung der PM mit Kollisionsabfragen usw...... so die nächsten Schritte!
Gruß Peter
Ich bleibe bei GTIA 3 mit 16 Farben und habe dann nicht die perfekte Auflösung, aber für den Start hier wird es mehr als ausreichen. Rom ist auch nicht an einem Tag erbaut worden und es bleibt viel Zeit für die Lernkurve und für weitere Projekte....
Auch wie ich die Charakter umbiege und umändere... ich mache das jetzt direkt per Hand und bringe es direkt in den Assemblercode rein, um Platz zu sparen:
Code: Alles auswählen
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
org $2000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %11110000
.byte %11110000
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11110000
.byte %11110000
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %00001111
.byte %00001111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %11111111
.byte %00001111
.byte %00001111
.byte %11110000
.byte %11110000
.byte %11110000
.byte %11110000
.byte %11110000
.byte %11110000
.byte %11110000
.byte %11110000
.byte %00001111
.byte %00001111
.byte %00001111
.byte %00001111
.byte %00001111
.byte %00001111
.byte %00001111
.byte %00001111
.proc main
lda #32 ;HighByte Character Pointer auf $2000 setzen
sta ch
ldy #5
loop tya ;Die ersten 6 Charakter printen
sta (savmsc),y
dey
bpl loop
lda #192 ;GTIA Modus 3 (16 Farben) initialisieren
sta gprior
lda #8 ;Hintergrundfarbe / Helligkeit festlegen
sta color4
jmp *
.endp
run main
Entsprechend fahre ich jetzt fort und werde noch etliche weitere Charakter definieren für die Landschaft in noch weiteren Farben und für Gebäude bzw. Items. Das Raumschiff und die Schüsse werden mittels PM definiert.
Dann kommt ein Programmblock Feinscrolling, dann ein größerer Block für die Landschaft damit man das Feinscrolling testen kann und die Steuerung der PM mit Kollisionsabfragen usw...... so die nächsten Schritte!
Gruß Peter
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
... jetzt habe ich es noch ein wenig "eleganter" gemacht und vor die erste .byte %....... Definition das "label" chr vorgesetzt und unten dann die direkte lda #32 durch lda #>chr ersetzt! Das liest sich besser und ich werde das so auch später für die Landschaften so verwenden. Wichtig dabei ist allerdings, dass die neuen Charakter an $2000 anfangen - also an einer Speicherstelle die gerade durch 256 teilbar ist. Alles andere macht "Salat"!
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
... mit copy / paste und finden / ersetzen war das jetzt recht schnell erledigt und ich habe insgesamt 128 Charakter neu definiert in 16 Farben.
Zur besseren Übersicht habe ich das jetzt tatsächlich von binär in hexa umgeschrieben!
Damit baue ich jetzt die Landschaft.... falls die Charakter nicht reichen definiere ich mir einfach noch ein paar weitere
Zur besseren Übersicht habe ich das jetzt tatsächlich von binär in hexa umgeschrieben!
Code: Alles auswählen
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
org $2000
chr .byte 0,0,0,0,0,0,0,0
.byte $f0,$f0,$ff,$ff,$ff,$ff,$f0,$f0
.byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
.byte $0f,$0f,$ff,$ff,$ff,$ff,$0f,$0f
.byte $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
.byte $0,$0,$0,$0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,0,0,0,0
.byte $f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f
.byte $b0,$b0,$bb,$bb,$bb,$bb,$b0,$b0
.byte $bb,$bb,$bb,$bb,$bb,$bb,$bb,$bb
.byte $0b,$0b,$bb,$bb,$bb,$bb,$0b,$0b
.byte $b0,$b0,$b0,$b0,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
.byte $0,$0,$0,$0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,0,0,0,0
.byte $b0,$b0,$b0,$b0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$0b,$0b,$0b,$0b
.byte $e0,$e0,$ee,$ee,$ee,$ee,$e0,$e0
.byte $ee,$ee,$ee,$ee,$ee,$ee,$ee,$ee
.byte $0e,$0e,$ee,$ee,$ee,$ee,$0e,$0e
.byte $e0,$e0,$e0,$e0,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.byte $0,$0,$0,$0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,0,0,0,0
.byte $e0,$e0,$e0,$e0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$0e,$0e,$0e,$0e
.byte $d0,$d0,$dd,$dd,$dd,$dd,$d0,$d0
.byte $dd,$dd,$dd,$dd,$dd,$dd,$dd,$dd
.byte $0d,$0d,$dd,$dd,$dd,$dd,$0d,$0d
.byte $d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d
.byte $0,$0,$0,$0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,0,0,0,0
.byte $d0,$d0,$d0,$d0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$0d,$0d,$0d,$0d
.byte $c0,$c0,$cc,$cc,$cc,$cc,$c0,$c0
.byte $cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc
.byte $0c,$0c,$cc,$cc,$cc,$cc,$0c,$0c
.byte $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c
.byte $0,$0,$0,$0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,0,0,0,0
.byte $c0,$c0,$c0,$c0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$0c,$0c,$0c,$0c
.byte $a0,$a0,$aa,$aa,$aa,$aa,$a0,$a0
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
.byte $0a,$0a,$aa,$aa,$aa,$aa,$0a,$0a
.byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$0a,$0a,$0a,$0a
.byte $0,$0,$0,$0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,0,0,0,0
.byte $a0,$a0,$a0,$a0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$0a,$0a,$0a,$0a
.byte $90,$90,$99,$99,$99,$99,$90,$90
.byte $99,$99,$99,$99,$99,$99,$99,$99
.byte $09,$09,$99,$99,$99,$99,$09,$09
.byte $90,$90,$90,$90,$90,$90,$90,$90
.byte $09,$09,$09,$09,$09,$09,$09,$09
.byte $0,$0,$0,$0,$99,$99,$99,$99
.byte $99,$99,$99,$99,0,0,0,0
.byte $90,$90,$90,$90,$99,$99,$99,$99
.byte $99,$99,$99,$99,$90,$90,$90,$90
.byte $09,$09,$09,$09,$99,$99,$99,$99
.byte $99,$99,$99,$99,$09,$09,$09,$09
.byte $80,$80,$88,$88,$88,$88,$80,$80
.byte $88,$88,$88,$88,$88,$88,$88,$88
.byte $08,$08,$88,$88,$88,$88,$08,$08
.byte $80,$80,$80,$80,$80,$80,$80,$80
.byte $08,$08,$08,$08,$08,$08,$08,$08
.byte $0,$0,$0,$0,$88,$88,$88,$88
.byte $88,$88,$88,$88,0,0,0,0
.byte $80,$80,$80,$80,$88,$88,$88,$88
.byte $88,$88,$88,$88,$80,$80,$80,$80
.byte $08,$08,$08,$08,$88,$88,$88,$88
.byte $88,$88,$88,$88,$08,$08,$08,$08
.byte $70,$70,$77,$77,$77,$77,$70,$70
.byte $77,$77,$77,$77,$77,$77,$77,$77
.byte $07,$07,$77,$77,$77,$77,$07,$07
.byte $70,$70,$70,$70,$70,$70,$70,$70
.byte $07,$07,$07,$07,$07,$07,$07,$07
.byte $0,$0,$0,$0,$77,$77,$77,$77
.byte $77,$77,$77,$77,0,0,0,0
.byte $70,$70,$70,$70,$77,$77,$77,$77
.byte $77,$77,$77,$77,$70,$70,$70,$70
.byte $07,$07,$07,$07,$77,$77,$77,$77
.byte $77,$77,$77,$77,$07,$07,$07,$07
.byte $60,$60,$66,$66,$66,$66,$60,$60
.byte $66,$66,$66,$66,$66,$66,$66,$66
.byte $06,$06,$66,$66,$66,$66,$06,$06
.byte $60,$60,$60,$60,$60,$60,$60,$60
.byte $06,$06,$06,$06,$06,$06,$06,$06
.byte $0,$0,$0,$0,$66,$66,$66,$66
.byte $66,$66,$66,$66,0,0,0,0
.byte $60,$60,$60,$60,$66,$66,$66,$66
.byte $66,$66,$66,$66,$60,$60,$60,$60
.byte $06,$06,$06,$06,$66,$66,$66,$66
.byte $66,$66,$66,$66,$06,$06,$06,$06
.byte $50,$50,$55,$55,$55,$55,$50,$50
.byte $55,$55,$55,$55,$55,$55,$55,$55
.byte $05,$05,$55,$55,$55,$55,$05,$05
.byte $50,$50,$50,$50,$50,$50,$50,$50
.byte $05,$05,$05,$05,$05,$05,$05,$05
.byte $0,$0,$0,$0,$55,$55,$55,$55
.byte $55,$55,$55,$55,0,0,0,0
.byte $50,$50,$50,$50,$55,$55,$55,$55
.byte $55,$55,$55,$55,$50,$50,$50,$50
.byte $05,$05,$05,$05,$55,$55,$55,$55
.byte $55,$55,$55,$55,$05,$05,$05,$05
.byte $40,$40,$44,$44,$44,$44,$40,$40
.byte $44,$44,$44,$44,$44,$44,$44,$44
.byte $04,$04,$44,$44,$44,$44,$04,$04
.byte $40,$40,$40,$40,$40,$40,$40,$40
.byte $04,$04,$04,$04,$04,$04,$04,$04
.byte $0,$0,$0,$0,$44,$44,$44,$44
.byte $44,$44,$44,$44,0,0,0,0
.byte $40,$40,$40,$40,$44,$44,$44,$44
.byte $44,$44,$44,$44,$40,$40,$40,$40
.byte $04,$04,$04,$04,$44,$44,$44,$44
.byte $44,$44,$44,$44,$04,$04,$04,$04
.byte $30,$30,$33,$33,$33,$33,$30,$30
.byte $33,$33,$33,$33,$33,$33,$33,$33
.byte $03,$03,$33,$33,$33,$33,$03,$03
.byte $30,$30,$30,$30,$30,$30,$30,$30
.byte $03,$03,$03,$03,$03,$03,$03,$03
.byte $0,$0,$0,$0,$33,$33,$33,$33
.byte $33,$33,$33,$33,0,0,0,0
.byte $30,$30,$30,$30,$33,$33,$33,$33
.byte $33,$33,$33,$33,$30,$30,$30,$30
.byte $03,$03,$03,$03,$33,$33,$33,$33
.byte $33,$33,$33,$33,$03,$03,$03,$03
.byte $20,$20,$22,$22,$22,$22,$20,$20
.byte $22,$22,$22,$22,$22,$22,$22,$22
.byte $02,$02,$22,$22,$22,$22,$02,$02
.byte $20,$20,$20,$20,$20,$20,$20,$20
.byte $02,$02,$02,$02,$02,$02,$02,$02
.byte $0,$0,$0,$0,$22,$22,$22,$22
.byte $22,$22,$22,$22,0,0,0,0
.byte $20,$20,$20,$20,$22,$22,$22,$22
.byte $22,$22,$22,$22,$20,$20,$20,$20
.byte $02,$02,$02,$02,$22,$22,$22,$22
.byte $22,$22,$22,$22,$02,$02,$02,$02
.byte $10,$10,$11,$11,$11,$11,$10,$10
.byte $11,$11,$11,$11,$11,$11,$11,$11
.byte $01,$01,$11,$11,$11,$11,$01,$01
.byte $10,$10,$10,$10,$10,$10,$10,$10
.byte $01,$01,$01,$01,$01,$01,$01,$01
.byte $0,$0,$0,$0,$11,$11,$11,$11
.byte $11,$11,$11,$11,0,0,0,0
.byte $10,$10,$10,$10,$11,$11,$11,$11
.byte $11,$11,$11,$11,$10,$10,$10,$10
.byte $01,$01,$01,$01,$11,$11,$11,$11
.byte $11,$11,$11,$11,$01,$01,$01,$01
.proc main
lda #>chr ;HighByte Character Pointer auf $2000 setzen
sta ch
ldy #127
loop tya ;Die Charakter printen
sta (savmsc),y
dey
bpl loop
lda #192 ;GTIA Modus 3 (16 Farben) initialisieren
sta gprior
lda #8 ;Hintergrundfarbe / Helligkeit festlegen
sta color4
jmp *
.endp
run main
Damit baue ich jetzt die Landschaft.... falls die Charakter nicht reichen definiere ich mir einfach noch ein paar weitere
- pps
- Beiträge: 644
- Registriert: 18.06.2021 23:05
- Has thanked: 147 times
- Been thanked: 272 times
- Kontaktdaten:
Re: Charon
Damit es noch übersichtlicher wird, kann man auch so schreiben:
Es gibt auch:
und auch
Code: Alles auswählen
.he 00 fe fc fd 01 0a
Code: Alles auswählen
.by $ff
Code: Alles auswählen
.wo $e477
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
ich habe jetzt nochmal ein wenig mit dem Aufbau von WUDSN /MADS experimentiert und entsprechend den Code angepasst:
die Charachterdatei sieht dann so aus:
und die Headerdatei:
Dabei nutze ich jetzt mehr die Möglichkeiten dieses Systems! Die Headerdatei habe ich ins Hauptverzeichnis geschoben und als txt abgespeichert - diese werde ich noch erweitern und sie steht allen Programmen dann zur Verfügung.
Die ganzen Characterdaten und später auch die Daten für die Landschaft kommen in eigene Dateien, damit der eigentliche Code besser lesbar und programmierbar wird.
Ich möchte zunehmend die Möglichkeiten von MADS nutzen, da die Befehle sinnvoll sind. Falls Fragen sind... einfach raus damit! Falls Verbesserungsvorschläge und Anregungen unserer "Profis" kommen... sehr sehr gerne!!
Damit habe ich jetzt Punkt 1 fertig und gehe direkt zu Punkt 2 über!!
LG und einen schönen Sonntag
Peter
Code: Alles auswählen
org $2000
icl '../header.txt'
icl 'character.asm'
.proc main
mva #>chr ch ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #8 color4 ;Hintergrundfarbe / Helligkeit festlegen
;Die Charakter printen
ldy #127
@ tya
sta (savmsc),y
dey
bpl @-
jmp *
.endp
run main
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=charon.asm
chr .byte 0,0,0,0,0,0,0,0
.byte $f0,$f0,$ff,$ff,$ff,$ff,$f0,$f0
.byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
.byte $0f,$0f,$ff,$ff,$ff,$ff,$0f,$0f
.byte $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
.byte $0,$0,$0,$0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,0,0,0,0
.byte $f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f
.byte $b0,$b0,$bb,$bb,$bb,$bb,$b0,$b0
.byte $bb,$bb,$bb,$bb,$bb,$bb,$bb,$bb
.byte $0b,$0b,$bb,$bb,$bb,$bb,$0b,$0b
.byte $b0,$b0,$b0,$b0,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
.byte $0,$0,$0,$0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,0,0,0,0
.byte $b0,$b0,$b0,$b0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$0b,$0b,$0b,$0b
.byte $e0,$e0,$ee,$ee,$ee,$ee,$e0,$e0
.byte $ee,$ee,$ee,$ee,$ee,$ee,$ee,$ee
.byte $0e,$0e,$ee,$ee,$ee,$ee,$0e,$0e
.byte $e0,$e0,$e0,$e0,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.byte $0,$0,$0,$0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,0,0,0,0
.byte $e0,$e0,$e0,$e0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$0e,$0e,$0e,$0e
.byte $d0,$d0,$dd,$dd,$dd,$dd,$d0,$d0
.byte $dd,$dd,$dd,$dd,$dd,$dd,$dd,$dd
.byte $0d,$0d,$dd,$dd,$dd,$dd,$0d,$0d
.byte $d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d
.byte $0,$0,$0,$0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,0,0,0,0
.byte $d0,$d0,$d0,$d0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$0d,$0d,$0d,$0d
.byte $c0,$c0,$cc,$cc,$cc,$cc,$c0,$c0
.byte $cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc
.byte $0c,$0c,$cc,$cc,$cc,$cc,$0c,$0c
.byte $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c
.byte $0,$0,$0,$0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,0,0,0,0
.byte $c0,$c0,$c0,$c0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$0c,$0c,$0c,$0c
.byte $a0,$a0,$aa,$aa,$aa,$aa,$a0,$a0
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
.byte $0a,$0a,$aa,$aa,$aa,$aa,$0a,$0a
.byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$0a,$0a,$0a,$0a
.byte $0,$0,$0,$0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,0,0,0,0
.byte $a0,$a0,$a0,$a0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$0a,$0a,$0a,$0a
.byte $90,$90,$99,$99,$99,$99,$90,$90
.byte $99,$99,$99,$99,$99,$99,$99,$99
.byte $09,$09,$99,$99,$99,$99,$09,$09
.byte $90,$90,$90,$90,$90,$90,$90,$90
.byte $09,$09,$09,$09,$09,$09,$09,$09
.byte $0,$0,$0,$0,$99,$99,$99,$99
.byte $99,$99,$99,$99,0,0,0,0
.byte $90,$90,$90,$90,$99,$99,$99,$99
.byte $99,$99,$99,$99,$90,$90,$90,$90
.byte $09,$09,$09,$09,$99,$99,$99,$99
.byte $99,$99,$99,$99,$09,$09,$09,$09
.byte $80,$80,$88,$88,$88,$88,$80,$80
.byte $88,$88,$88,$88,$88,$88,$88,$88
.byte $08,$08,$88,$88,$88,$88,$08,$08
.byte $80,$80,$80,$80,$80,$80,$80,$80
.byte $08,$08,$08,$08,$08,$08,$08,$08
.byte $0,$0,$0,$0,$88,$88,$88,$88
.byte $88,$88,$88,$88,0,0,0,0
.byte $80,$80,$80,$80,$88,$88,$88,$88
.byte $88,$88,$88,$88,$80,$80,$80,$80
.byte $08,$08,$08,$08,$88,$88,$88,$88
.byte $88,$88,$88,$88,$08,$08,$08,$08
.byte $70,$70,$77,$77,$77,$77,$70,$70
.byte $77,$77,$77,$77,$77,$77,$77,$77
.byte $07,$07,$77,$77,$77,$77,$07,$07
.byte $70,$70,$70,$70,$70,$70,$70,$70
.byte $07,$07,$07,$07,$07,$07,$07,$07
.byte $0,$0,$0,$0,$77,$77,$77,$77
.byte $77,$77,$77,$77,0,0,0,0
.byte $70,$70,$70,$70,$77,$77,$77,$77
.byte $77,$77,$77,$77,$70,$70,$70,$70
.byte $07,$07,$07,$07,$77,$77,$77,$77
.byte $77,$77,$77,$77,$07,$07,$07,$07
.byte $60,$60,$66,$66,$66,$66,$60,$60
.byte $66,$66,$66,$66,$66,$66,$66,$66
.byte $06,$06,$66,$66,$66,$66,$06,$06
.byte $60,$60,$60,$60,$60,$60,$60,$60
.byte $06,$06,$06,$06,$06,$06,$06,$06
.byte $0,$0,$0,$0,$66,$66,$66,$66
.byte $66,$66,$66,$66,0,0,0,0
.byte $60,$60,$60,$60,$66,$66,$66,$66
.byte $66,$66,$66,$66,$60,$60,$60,$60
.byte $06,$06,$06,$06,$66,$66,$66,$66
.byte $66,$66,$66,$66,$06,$06,$06,$06
.byte $50,$50,$55,$55,$55,$55,$50,$50
.byte $55,$55,$55,$55,$55,$55,$55,$55
.byte $05,$05,$55,$55,$55,$55,$05,$05
.byte $50,$50,$50,$50,$50,$50,$50,$50
.byte $05,$05,$05,$05,$05,$05,$05,$05
.byte $0,$0,$0,$0,$55,$55,$55,$55
.byte $55,$55,$55,$55,0,0,0,0
.byte $50,$50,$50,$50,$55,$55,$55,$55
.byte $55,$55,$55,$55,$50,$50,$50,$50
.byte $05,$05,$05,$05,$55,$55,$55,$55
.byte $55,$55,$55,$55,$05,$05,$05,$05
.byte $40,$40,$44,$44,$44,$44,$40,$40
.byte $44,$44,$44,$44,$44,$44,$44,$44
.byte $04,$04,$44,$44,$44,$44,$04,$04
.byte $40,$40,$40,$40,$40,$40,$40,$40
.byte $04,$04,$04,$04,$04,$04,$04,$04
.byte $0,$0,$0,$0,$44,$44,$44,$44
.byte $44,$44,$44,$44,0,0,0,0
.byte $40,$40,$40,$40,$44,$44,$44,$44
.byte $44,$44,$44,$44,$40,$40,$40,$40
.byte $04,$04,$04,$04,$44,$44,$44,$44
.byte $44,$44,$44,$44,$04,$04,$04,$04
.byte $30,$30,$33,$33,$33,$33,$30,$30
.byte $33,$33,$33,$33,$33,$33,$33,$33
.byte $03,$03,$33,$33,$33,$33,$03,$03
.byte $30,$30,$30,$30,$30,$30,$30,$30
.byte $03,$03,$03,$03,$03,$03,$03,$03
.byte $0,$0,$0,$0,$33,$33,$33,$33
.byte $33,$33,$33,$33,0,0,0,0
.byte $30,$30,$30,$30,$33,$33,$33,$33
.byte $33,$33,$33,$33,$30,$30,$30,$30
.byte $03,$03,$03,$03,$33,$33,$33,$33
.byte $33,$33,$33,$33,$03,$03,$03,$03
.byte $20,$20,$22,$22,$22,$22,$20,$20
.byte $22,$22,$22,$22,$22,$22,$22,$22
.byte $02,$02,$22,$22,$22,$22,$02,$02
.byte $20,$20,$20,$20,$20,$20,$20,$20
.byte $02,$02,$02,$02,$02,$02,$02,$02
.byte $0,$0,$0,$0,$22,$22,$22,$22
.byte $22,$22,$22,$22,0,0,0,0
.byte $20,$20,$20,$20,$22,$22,$22,$22
.byte $22,$22,$22,$22,$20,$20,$20,$20
.byte $02,$02,$02,$02,$22,$22,$22,$22
.byte $22,$22,$22,$22,$02,$02,$02,$02
.byte $10,$10,$11,$11,$11,$11,$10,$10
.byte $11,$11,$11,$11,$11,$11,$11,$11
.byte $01,$01,$11,$11,$11,$11,$01,$01
.byte $10,$10,$10,$10,$10,$10,$10,$10
.byte $01,$01,$01,$01,$01,$01,$01,$01
.byte $0,$0,$0,$0,$11,$11,$11,$11
.byte $11,$11,$11,$11,0,0,0,0
.byte $10,$10,$10,$10,$11,$11,$11,$11
.byte $11,$11,$11,$11,$10,$10,$10,$10
.byte $01,$01,$01,$01,$11,$11,$11,$11
.byte $11,$11,$11,$11,$01,$01,$01,$01
Code: Alles auswählen
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
sdlstl = $230 ;Start DisplayList
vscrol = $d405 ;vertikal scrol
wsync = $d40a
Die ganzen Characterdaten und später auch die Daten für die Landschaft kommen in eigene Dateien, damit der eigentliche Code besser lesbar und programmierbar wird.
Ich möchte zunehmend die Möglichkeiten von MADS nutzen, da die Befehle sinnvoll sind. Falls Fragen sind... einfach raus damit! Falls Verbesserungsvorschläge und Anregungen unserer "Profis" kommen... sehr sehr gerne!!
Damit habe ich jetzt Punkt 1 fertig und gehe direkt zu Punkt 2 über!!
LG und einen schönen Sonntag
Peter
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
es geht weiter...
Ich habe lange rumüberlegt wie ich das scrolling mache... so wie in meinem Basic-Listing mit 2 Bildschirmen und dann entsprechend umschalten der Displaylist - oder einfach den Bildschirm komplett grobscrollen um jeweils eine Zeile nach oben und dann das Feinscrolling dazu reinbauen... ich habe mich jetzt mal zunächst für Variante 2 entschieden und zuerst eine Routine fürs Grobscrollen des gesamten Bildschirmes nach oben um eine Zeile (und dann die Wiederholungen) geschrieben. Der Code ist relativ simple und bedarf noch der eleganten Anpassung wenn alles läuft.
Danach habe ich mir überlegt, wie ich die Landschaft aufbaue. Ich benötige 7 Bytes für eine Zeile und arbeite das dann im Code ab: Charakter xy x mal printen, Randcharakter xy 1 mal printen, 0 (also leer) x mal printen, Randcharakter yx 1 mal printen, Charakter yx y mal printen! Also 5 Schritte. Diese Routine bedarf sicherlich noch der Verfeinerung, läuft aber jetzt.
Dazu kommt die erste Landschaft für einen kompletten Bildschirm (muss noch schöner gemacht werden) und das wiederhole ich jetzt unendlich mal...
Listing:
und hier noch der code für lands:
der Header:
character bleibt gleich...
kommende Probleme:
Die Daten der Landschaft bei >255 abrufen - da muss ich etwas tricksen
Feinscrolling reinmachen (als nächstes)
Ich habe lange rumüberlegt wie ich das scrolling mache... so wie in meinem Basic-Listing mit 2 Bildschirmen und dann entsprechend umschalten der Displaylist - oder einfach den Bildschirm komplett grobscrollen um jeweils eine Zeile nach oben und dann das Feinscrolling dazu reinbauen... ich habe mich jetzt mal zunächst für Variante 2 entschieden und zuerst eine Routine fürs Grobscrollen des gesamten Bildschirmes nach oben um eine Zeile (und dann die Wiederholungen) geschrieben. Der Code ist relativ simple und bedarf noch der eleganten Anpassung wenn alles läuft.
Danach habe ich mir überlegt, wie ich die Landschaft aufbaue. Ich benötige 7 Bytes für eine Zeile und arbeite das dann im Code ab: Charakter xy x mal printen, Randcharakter xy 1 mal printen, 0 (also leer) x mal printen, Randcharakter yx 1 mal printen, Charakter yx y mal printen! Also 5 Schritte. Diese Routine bedarf sicherlich noch der Verfeinerung, läuft aber jetzt.
Dazu kommt die erste Landschaft für einen kompletten Bildschirm (muss noch schöner gemacht werden) und das wiederhole ich jetzt unendlich mal...
Listing:
Code: Alles auswählen
org $2000
icl '../header.txt'
icl 'character.asm'
icl 'lands.asm'
.proc main
mva #>chr ch ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #8 color4 ;Hintergrundfarbe / Helligkeit festlegen
ldx #0
lp1 mva savmsc var1
mva savmsc+1 var1+1
;Die letzte Reihe printen
lda var1
adc #32
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy lands,x ;Boarder1 holen
sty var4
inx
lda lands,x
iny
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
inx
lda lands,x ;Rand Boarder1 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder1 printen
inx
clc
lda lands,x ;leer holen
sta var3
dec var3
adc var4
sta var4
lda #0
@ ldy var4 ; leer printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
lda lands,x ;line counter refresh
adc var4
sta var4
inx
lda lands,x ;Rand Boarder2 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder2 printen
inx
lda lands,x ;Boarder2 holen
sta var3
dec var3
adc var4
sta var4
inx
lda lands,x
@ ldy var4 ; Boarder2 printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
stx var3
bs mva savmsc var1
mva savmsc var2
mva savmsc+1 var1+1
mva savmsc+1 var2+1
;Den Bildschirm um eins hoch
ldx #21
@ mva var1+1 var2+1
clc
lda var1
sta var2
adc #$28
sta var1
bcc @+
inc var1+1
@ ldy #$28
@ mva (var1),y (var2),y
dey
bpl @-
dex
bpl @-2
ldx var3
inx
cpx #147
bne lp3
jmp main
lp3 jmp lp1
.endp
run main
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test1.asm
lands .byte 9,2,3,20,6,9,2
.byte 9,2,8,18,10,11,2
.byte 9,2,8,17,10,12,2
.byte 9,2,8,16,10,13,2
.byte 9,2,8,15,10,15,2
.byte 9,2,8,14,10,16,2
.byte 9,2,8,13,10,17,2
.byte 10,2,8,12,10,17,2
.byte 11,2,8,11,10,18,2
.byte 12,2,8,10,10,17,2
.byte 13,2,8,10,10,15,2
.byte 14,2,8,10,10,14,2
.byte 14,2,8,10,10,14,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
Code: Alles auswählen
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
sdlstl = $230 ;Start DisplayList
vscrol = $d405 ;vertikal scrol
wsync = $d40a
var1 = $a0
var2 = $a2
var3 = $a4
var4 = $a6
kommende Probleme:
Die Daten der Landschaft bei >255 abrufen - da muss ich etwas tricksen
Feinscrolling reinmachen (als nächstes)
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Chaos
jetzt habe ich gestern den ganzen Abend vergeblich versucht das Feinscrolling zu fixen... und entweder es geht gar nicht oder es macht Chaos... noch habe ich keine Idee warum!! Vielleicht vertragen sich die beiden Routinen (Grobscrolling - eine Zeile hoch / Feinscrolling nicht).
Ich habe die Displaylist aufgebaut für Graphics 0 - die Zeilen auf 50 gesetzt damit Feinscrolling geht .... dann kommt aber Chaos! Noch weiss ich nicht, wo der Denkfehler ist....
Ich denke der Code muss komplett überarbeitet werden und vielleicht muss ich doch mit zwei Bildschirmen arbeiten und den Bildschirm über die Daten scrollen lassen...
puhhhh
hier der nicht funktionierende Code:
die Displaylist:
vielleicht hat ja irgendeiner die zündende Idee...
LG
Peter
Ich habe die Displaylist aufgebaut für Graphics 0 - die Zeilen auf 50 gesetzt damit Feinscrolling geht .... dann kommt aber Chaos! Noch weiss ich nicht, wo der Denkfehler ist....
Ich denke der Code muss komplett überarbeitet werden und vielleicht muss ich doch mit zwei Bildschirmen arbeiten und den Bildschirm über die Daten scrollen lassen...
puhhhh
hier der nicht funktionierende Code:
Code: Alles auswählen
org $2000
icl '../header.txt'
icl 'character.asm'
icl 'lands.asm'
icl 'dlist.asm'
.proc main
mva sdlstl var5
mva sdlstl+1 var5+1
ldy #0
clc
@ lda dlist,y
sta (var5),y
iny
cpy #32
bne @-
mva #>chr ch ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #8 color4 ;Hintergrundfarbe / Helligkeit festlegen
start ldx #0
clc
lp1 mva savmsc var1
mva savmsc+1 var1+1
;Die letzte Reihe printen
lda var1
adc #32
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy lands,x ;Boarder1 holen
sty var4
inx
lda lands,x
iny
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
inx
lda lands,x ;Rand Boarder1 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder1 printen
inx
clc
lda lands,x ;leer holen
sta var3
dec var3
adc var4
sta var4
lda #0
@ ldy var4 ; leer printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
lda lands,x ;line counter refresh
adc var4
sta var4
inx
lda lands,x ;Rand Boarder2 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder2 printen
inx
lda lands,x ;Boarder2 holen
sta var3
dec var3
adc var4
sta var4
inx
lda lands,x
@ ldy var4 ; Boarder2 printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
stx var3
mva savmsc var1
mva savmsc var2
mva savmsc+1 var1+1
mva savmsc+1 var2+1
;Feinscroll
ldx #0
@ stx vscrol
inx
cpx #7
bne @-
;Den Bildschirm um eins hoch
ldx #21
@
mva var1+1 var2+1
clc
lda var1
sta var2
adc #$28
sta var1
bcc @+
inc var1+1
@ ldy #$28
@ mva (var1),y (var2),y
dey
bpl @-
dex
bpl @-2
ldx var3
inx
cpx #147
bne lp3
jmp start
lp3
jmp lp1
.endp
run main
Code: Alles auswählen
; Displaylist Graphics 0
dlist .byte 112,112,112,114,64,156
.byte 50,50,50,50,50,50,50,50,50,50,50,50
.byte 50,50,50,50,50,50,50,50,50,50,50
.byte 65,32,156
LG
Peter
- pps
- Beiträge: 644
- Registriert: 18.06.2021 23:05
- Has thanked: 147 times
- Been thanked: 272 times
- Kontaktdaten:
Re: Charon
Also gerade bei DL ist es einfacher in HEX zu arbeiten.
Man sieht da deutlich, ob man spezielle Befehle oder einfache Grafikzeilen setzt.
z. B. :
$02 für Gfx 0 Zeile
$42 LMS +Gfx 0
$12 Hscrol + Gfx 0
$22 Vscrol + Gfx 0
$52 LMS + Hscrol + Gfx 0
$4F LMS + Gfx 8
$5E LMS + Hscrol + Gfx 15
$10 2 leere scan lines
$70 8 leere scanines
$F0 DLI + 8 leere scan lines
$80 DLI + 1 leere scan line
$C2 DLI + LMS + Gfx 0
etc.
... hoffe ich habe da jetzt aus dem Gedächtnis heraus nix vertauscht
Man sieht da deutlich, ob man spezielle Befehle oder einfache Grafikzeilen setzt.
z. B. :
$02 für Gfx 0 Zeile
$42 LMS +Gfx 0
$12 Hscrol + Gfx 0
$22 Vscrol + Gfx 0
$52 LMS + Hscrol + Gfx 0
$4F LMS + Gfx 8
$5E LMS + Hscrol + Gfx 15
$10 2 leere scan lines
$70 8 leere scanines
$F0 DLI + 8 leere scan lines
$80 DLI + 1 leere scan line
$C2 DLI + LMS + Gfx 0
etc.
... hoffe ich habe da jetzt aus dem Gedächtnis heraus nix vertauscht
- Kveldulfur
- Beiträge: 844
- Registriert: 17.08.2021 02:32
- Has thanked: 357 times
- Been thanked: 290 times
- Kontaktdaten:
Re: Charon
Hallo!
Ich habe folgendes geändert, damit eine Ausgabe kommt:
In charon.asm
und in dlist.asm
Ist aber immer noch ein Grobscrolling...
Ich habe folgendes geändert, damit eine Ausgabe kommt:
In charon.asm
Code: Alles auswählen
.proc main
mva sdlstl var5
mva sdlstl+1 var5+1
mva savmsc smemory ; Bildschirmspeicheradresse in Displaylist eintragen
mva savmsc+1 smemory+1
und in dlist.asm
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=charon.asm
; Displaylist Graphics 0
dlist .byte $70,$70,$70,$62
smemory .word $0000
.byte $22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22
.byte $22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22
.byte $41
.word dlist
Meine Projekte findest Du hier...
- pps
- Beiträge: 644
- Registriert: 18.06.2021 23:05
- Has thanked: 147 times
- Been thanked: 272 times
- Kontaktdaten:
Re: Charon
Für das Feinscrollen muss natürlich auch an der richtigen Stelle (DLI am besten) das passende Hscrol oder Vscrol Register verändert werden ($D404 bzw. $D405).
Das geht auch und macht den Source kürzer.
Code: Alles auswählen
.proc main
mwa sdlstl var5
mwa savmsc smemory ; Bildschirmspeicheradresse in Displaylist eintragen
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Lieben Dank für die interessanten Anregungen, die ich ab Montag in den Code einzubauen versuche.
Inzwischen habe ich den Fehler im Code gefunden (ein # fehlte) und die Displaylist entsprechend auch geändert (die Zeilen müssen von 2 auf $20 gesetzt werden) - damit wird dann der Vertikalfeinscroll aktiviert. Danach kann man im Register $d405 Werte von 0-7 eintragen, was den Feinscroll dann auslöst.
Den Code habe ich jetzt und es funktioniert... recht gut ... aber.... nicht perfekt. Feinscroll und Grobscroll laufen zeitlich ganz unterschiedlich und so musste ich Warteschleifen fürs Feinscroll einbauen, da das viel schneller abläuft. Dann geht es wirklich schön flüssig... leider... auch nicht perfekt. Ab und zu ruckelt es im Bildschirm.... ich optimiere den Code noch ein wenig und stelle es mal hier rein. Ich denke es ist. ein Zeitproblem und die Lösung wird folgende sein:
Ich arbeite doch mit zwei Bildschirmen, jede Scrollausführung passiert im nicht sichtbaren Bildschirm, sobald die Aktion vollendet ist, wird umgeschaltet in den sichtbaren Bereich usw. - ich denke das löst das kleine Ruckelproblem!
Vielleicht probiere ich den Code fürs Grobscrolling auch in den VBI zu packen, das könnte allerdings zeitkritisch werden...
LG
Peter
Inzwischen habe ich den Fehler im Code gefunden (ein # fehlte) und die Displaylist entsprechend auch geändert (die Zeilen müssen von 2 auf $20 gesetzt werden) - damit wird dann der Vertikalfeinscroll aktiviert. Danach kann man im Register $d405 Werte von 0-7 eintragen, was den Feinscroll dann auslöst.
Den Code habe ich jetzt und es funktioniert... recht gut ... aber.... nicht perfekt. Feinscroll und Grobscroll laufen zeitlich ganz unterschiedlich und so musste ich Warteschleifen fürs Feinscroll einbauen, da das viel schneller abläuft. Dann geht es wirklich schön flüssig... leider... auch nicht perfekt. Ab und zu ruckelt es im Bildschirm.... ich optimiere den Code noch ein wenig und stelle es mal hier rein. Ich denke es ist. ein Zeitproblem und die Lösung wird folgende sein:
Ich arbeite doch mit zwei Bildschirmen, jede Scrollausführung passiert im nicht sichtbaren Bildschirm, sobald die Aktion vollendet ist, wird umgeschaltet in den sichtbaren Bereich usw. - ich denke das löst das kleine Ruckelproblem!
Vielleicht probiere ich den Code fürs Grobscrolling auch in den VBI zu packen, das könnte allerdings zeitkritisch werden...
LG
Peter
- Mathy
- Beiträge: 1451
- Registriert: 18.06.2021 11:13
- Wohnort: Heerlen, NL
- Has thanked: 652 times
- Been thanked: 334 times
- Kontaktdaten:
Re: Charon
.
Hallo Leute
Ich kenne mich mit Assembler nicht aus, kann mich aber aus Magazine aus USA erinnern das man beim Feinscrolling immer sieben (bin mir nicht ganz sicher, scheint mir aber Sinn zu machen) mal fein scrollen sollte und dann ein Mal grob. Ob das bei horizontales oder vertikales Scrolling oder beides gilt, kann Ich mich leider nicht erinnern. Ich vermute mal für beides.
Tschüß
Mathy
Hallo Leute
Ich kenne mich mit Assembler nicht aus, kann mich aber aus Magazine aus USA erinnern das man beim Feinscrolling immer sieben (bin mir nicht ganz sicher, scheint mir aber Sinn zu machen) mal fein scrollen sollte und dann ein Mal grob. Ob das bei horizontales oder vertikales Scrolling oder beides gilt, kann Ich mich leider nicht erinnern. Ich vermute mal für beides.
Tschüß
Mathy
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Hallo Mathy,
das ist ganz korrekt.
Im Register $D405 (für vertikal Feinscrolling) steht normalerweise 0. Ein normaler Character hat ja 8x8 Bit, wenn du nun z.B. eine 1 in das Register schreibst, dann scrolled der Rechner alle Zeichen einer Bildschirmzeile um ein Bit hoch... das macht man 7 x und dann setzt man es wieder auf 0 - damit fliegt wieder alles runter auf die Normalposition, wenn man jetzt ein Grobscrolling ausführt, ist der Ablauf einmal durchgeführt und fertig.
Das geht aber nur, wenn man vorher die DL ändert:
Wenn man sich jetzt die Displaylist für z.B. Gr.0 anschaut, dann startet die mit 3x 112 (Dezimal) - also 3 Leerzeilen mit der Höhe 8 Scanlines. Danach kommt 66,64,156
66 ist zusammengesetzt aus 64+2 - dabei bedeutet 64 Sprungbefehl und 2 bedeutet eine normale 8 Scanline Textzeile mit 8 Bit. Nach dem Sprungbefehl kommt 64,156 = 64+256*156 = 40000 --> hier steht der physikalische Ort der Bildschirmadresse. Änder ich diesen Sprungvektor, biege ich den Bildschirmstart woanders hin. Mit Änderung der Speicherstellen DL+5 und DL+6 (DL ist der Start der Displaylist) kann ich also in quasi Echtzeit zwischen beliebigen Bildschirmen wechseln. Nun kommen in der DL 23x die 2 - für die restlichen Zeilen und dann der Rücksprungbefehl zum Anfang der Displayliste (64,32,156 = 39968).
Die verschiedenen möglichen Anweisungen sind quasi in diesem einen Byte codiert, wobei hier Bit 6 wenn es gesetzt wird (64 Dezimal) bedeutet es wird ein Sprung ausgeführt zum nachfolgeden Vektor. In Bit 5 z.B. codiert man VSCROL - also wenn es gesetzt wird (Dezimal 32) kann dies Zeile mit Änderung des VSCROL-Register D405 fein gescrolled werden. Wenn ich jetzt also z.B. alle Zeile von Gr.0 von 2 auf 32+2 (also34) setze (DL+4 muss auf 64+2+32=98 Dezimal), dann kann ich alle 24 Zeile auf einmal scrollen. Das geht auch in Basic und hat nichts mit Assembler primär zu tun.
das ist ganz korrekt.
Im Register $D405 (für vertikal Feinscrolling) steht normalerweise 0. Ein normaler Character hat ja 8x8 Bit, wenn du nun z.B. eine 1 in das Register schreibst, dann scrolled der Rechner alle Zeichen einer Bildschirmzeile um ein Bit hoch... das macht man 7 x und dann setzt man es wieder auf 0 - damit fliegt wieder alles runter auf die Normalposition, wenn man jetzt ein Grobscrolling ausführt, ist der Ablauf einmal durchgeführt und fertig.
Das geht aber nur, wenn man vorher die DL ändert:
Wenn man sich jetzt die Displaylist für z.B. Gr.0 anschaut, dann startet die mit 3x 112 (Dezimal) - also 3 Leerzeilen mit der Höhe 8 Scanlines. Danach kommt 66,64,156
66 ist zusammengesetzt aus 64+2 - dabei bedeutet 64 Sprungbefehl und 2 bedeutet eine normale 8 Scanline Textzeile mit 8 Bit. Nach dem Sprungbefehl kommt 64,156 = 64+256*156 = 40000 --> hier steht der physikalische Ort der Bildschirmadresse. Änder ich diesen Sprungvektor, biege ich den Bildschirmstart woanders hin. Mit Änderung der Speicherstellen DL+5 und DL+6 (DL ist der Start der Displaylist) kann ich also in quasi Echtzeit zwischen beliebigen Bildschirmen wechseln. Nun kommen in der DL 23x die 2 - für die restlichen Zeilen und dann der Rücksprungbefehl zum Anfang der Displayliste (64,32,156 = 39968).
Die verschiedenen möglichen Anweisungen sind quasi in diesem einen Byte codiert, wobei hier Bit 6 wenn es gesetzt wird (64 Dezimal) bedeutet es wird ein Sprung ausgeführt zum nachfolgeden Vektor. In Bit 5 z.B. codiert man VSCROL - also wenn es gesetzt wird (Dezimal 32) kann dies Zeile mit Änderung des VSCROL-Register D405 fein gescrolled werden. Wenn ich jetzt also z.B. alle Zeile von Gr.0 von 2 auf 32+2 (also34) setze (DL+4 muss auf 64+2+32=98 Dezimal), dann kann ich alle 24 Zeile auf einmal scrollen. Das geht auch in Basic und hat nichts mit Assembler primär zu tun.
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Danke für den Link! Ich hatte mir die Seite vor Wochen schon mal angeschaut und war beeindruckt davon… leider findet man viele wichtigen include- Dateien nicht und dann läuft der Code natürlich nicht, was echt schade ist!!
LG Peter
LG Peter
Re: Charon
Hi Peter,
hattest du mal die GitHub-Repos dazu gecheckt?
https://github.com/playermissile
Unter "scrolling_tutorial -> View Code" sollten die Sourcen zu finden sein.
Grüße,
Michael
hattest du mal die GitHub-Repos dazu gecheckt?
https://github.com/playermissile
Unter "scrolling_tutorial -> View Code" sollten die Sourcen zu finden sein.
Grüße,
Michael
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Danke Michael... gefunden!
Die Beispiele dort sind echt super und umfassend... eigentlich findet man da fast alles, was man für so einen Shooter braucht.... aber.... ich habe jetzt ja meinen eigenen Code geschrieben und möchte den auch primär verwenden. Das Feinscrolling läuft auch schon ganz gut und die Ruckler muss ich jetzt noch entfernen. Bislang habe ich auch alles hinbekommen und daraus lernt man ja immer am meisten!!
Meine Erkenntnis jetzt und hier: Das Feinscrolling ganz sauber zu programmieren ist ganz nicht so einfach und bedarf eines echt sauberen Codes mit gutem und richtigen Timing, ich denke die Ruckler kommen dadurch zustande, da mein Scrolling noch nicht mit dem VBI syncronisiert ist... so passiert es halt, daß das Programm auch mal scrollen will, während der VBI läuft und den Bildschirm kurz ausschaltet... also Lösung:
Entweder die Routine komplett während des VBI laufen lassen (wahrscheinlich zu lang), oder das ganze Scrolling im Hintergrund laufen zu lassen und den Bildschirm einfach umschalten wenn das Scrolling fertig ist. Das versuche ich als nächstes... jedenfalls ist es echt echt viel leichter ein Spiel zu programmieren, wo der Bildschirm fix ist
Die Beispiele dort sind echt super und umfassend... eigentlich findet man da fast alles, was man für so einen Shooter braucht.... aber.... ich habe jetzt ja meinen eigenen Code geschrieben und möchte den auch primär verwenden. Das Feinscrolling läuft auch schon ganz gut und die Ruckler muss ich jetzt noch entfernen. Bislang habe ich auch alles hinbekommen und daraus lernt man ja immer am meisten!!
Meine Erkenntnis jetzt und hier: Das Feinscrolling ganz sauber zu programmieren ist ganz nicht so einfach und bedarf eines echt sauberen Codes mit gutem und richtigen Timing, ich denke die Ruckler kommen dadurch zustande, da mein Scrolling noch nicht mit dem VBI syncronisiert ist... so passiert es halt, daß das Programm auch mal scrollen will, während der VBI läuft und den Bildschirm kurz ausschaltet... also Lösung:
Entweder die Routine komplett während des VBI laufen lassen (wahrscheinlich zu lang), oder das ganze Scrolling im Hintergrund laufen zu lassen und den Bildschirm einfach umschalten wenn das Scrolling fertig ist. Das versuche ich als nächstes... jedenfalls ist es echt echt viel leichter ein Spiel zu programmieren, wo der Bildschirm fix ist
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
... jetzt habe ich den eigenen Code mit Feinscrolling fertig und eigentlich läuft er... manchmal perfekt ganz ohne Ruckler, dann wieder kommen gleichmäßige Ruckler rein... kann mir das nicht erklären!!
Ich stelle mal den kompletten Code rein mit "includes" und zwei mov. Dateien wo man den Unterschied sieht. Vielleicht hat ja einer ne Idee... mit wsync bekomme ich es nicht gelöst!!
der Hauptcode:
der Header im Oberverzeichnis:
die "dlist":
lands:
character:
Ich stelle mal den kompletten Code rein mit "includes" und zwei mov. Dateien wo man den Unterschied sieht. Vielleicht hat ja einer ne Idee... mit wsync bekomme ich es nicht gelöst!!
der Hauptcode:
Code: Alles auswählen
org $2000
icl '../header.txt'
icl 'character.asm'
icl 'lands.asm'
icl 'dlist.asm'
.proc main
mva sdlstl var5
mva sdlstl+1 var5+1
ldy #0
clc
@ lda dlist,y
sta (var5),y
iny
cpy #34
bne @-
mva #>chr ch ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #8 color4 ;Hintergrundfarbe / Helligkeit festlegen
start ldx #0
clc
lp1 mva savmsc var1
mva savmsc+1 var1+1
;Die letzte Reihe printen
lda var1
adc #152
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy lands,x ;Boarder1 holen
sty var4
inx
lda lands,x
iny
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
inx
lda lands,x ;Rand Boarder1 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder1 printen
inx
clc
lda lands,x ;leer holen
sta var3
dec var3
adc var4
sta var4
lda #0
@ ldy var4 ; leer printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
lda lands,x ;line counter refresh
adc var4
sta var4
inx
lda lands,x ;Rand Boarder2 holen
ldy var4
iny
sty var4
sta (var1),y ;Rand Boarder2 printen
inx
lda lands,x ;Boarder2 holen
sta var3
dec var3
adc var4
sta var4
inx
lda lands,x
@ ldy var4 ; Boarder2 printen
sta (var1),y
dey
sty var4
ldy var3
dey
sty var3
bpl @-
stx var3
mva savmsc var1
mva savmsc var2
mva savmsc+1 var1+1
mva savmsc+1 var2+1
;Feinscroll
mva #4 delay
jsr wartes
mva #1 vscrol
mva #2 delay
jsr wartes
mva #2 vscrol
mva #2 delay
jsr wartes
mva #3 vscrol
mva #2 delay
jsr wartes
mva #4 vscrol
mva #2 delay
jsr wartes
mva #5 vscrol
mva #2 delay
jsr wartes
mva #6 vscrol
mva #2 delay
jsr wartes
mva #7 vscrol
mva #2 delay
jsr wartes
mva #0 vscrol
;Den Bildschirm um eins hoch
ldx #22
@
mva var1+1 var2+1
clc
lda var1
sta var2
adc #$28
sta var1
bcc @+
inc var1+1
@ ldy #$28
@ mva (var1),y (var2),y
dey
bpl @-
dex
bpl @-2
ldx var3
inx
cpx #147
bne lp3
jmp start
lp3
jmp lp1
.endp
wartes
clc
ldx delay ; Warteschleife
st lda RTCLOK+2
wa cmp RTCLOK+2
beq wa
dex
bpl st
rts
run main
der Header im Oberverzeichnis:
Code: Alles auswählen
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
sdlstl = $230 ;Start DisplayList
vscrol = $d405 ;vertikal scrol
wsync = $d40a
RTCLOk = $0012
var1 = $a0
var2 = $a2
var3 = $a4
var4 = $a6
var5 = $a8
delay = $b0
Code: Alles auswählen
dlist
.byte 112,112,112,98,64,156
.byte 34,34,34,34,34,34,34,34,34,34,34,34
.byte 34,34,34,34,34,34,34,34,34,34,2
.byte 65,32,156
Code: Alles auswählen
lands .byte 9,2,2,20,6,9,2
.byte 9,2,8,18,10,11,2
.byte 9,2,8,17,10,12,2
.byte 9,2,8,16,10,13,2
.byte 9,2,8,15,10,15,2
.byte 9,2,8,14,10,16,2
.byte 9,2,8,13,10,17,2
.byte 10,2,8,12,10,17,2
.byte 11,2,8,11,10,18,2
.byte 12,2,8,10,10,17,2
.byte 13,2,8,10,10,15,2
.byte 14,2,8,10,10,14,2
.byte 14,2,8,10,10,14,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
.byte 13,2,8,11,10,14,2
.byte 13,2,8,11,10,14,2
.byte 12,2,8,12,10,14,2
.byte 11,2,8,12,10,15,2
Code: Alles auswählen
chr .byte 0,0,0,0,0,0,0,0
.byte $f0,$f0,$ff,$ff,$ff,$ff,$f0,$f0
.byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
.byte $0f,$0f,$ff,$ff,$ff,$ff,$0f,$0f
.byte $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
.byte $0,$0,$0,$0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,0,0,0,0
.byte $f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$f0,$f0,$f0,$f0
.byte $0f,$0f,$0f,$0f,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f
.byte $b0,$b0,$bb,$bb,$bb,$bb,$b0,$b0
.byte $bb,$bb,$bb,$bb,$bb,$bb,$bb,$bb
.byte $0b,$0b,$bb,$bb,$bb,$bb,$0b,$0b
.byte $b0,$b0,$b0,$b0,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$0b,$0b,$0b,$0b
.byte $0,$0,$0,$0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,0,0,0,0
.byte $b0,$b0,$b0,$b0,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$b0,$b0,$b0,$b0
.byte $0b,$0b,$0b,$0b,$bb,$bb,$bb,$bb
.byte $bb,$bb,$bb,$bb,$0b,$0b,$0b,$0b
.byte $e0,$e0,$ee,$ee,$ee,$ee,$e0,$e0
.byte $ee,$ee,$ee,$ee,$ee,$ee,$ee,$ee
.byte $0e,$0e,$ee,$ee,$ee,$ee,$0e,$0e
.byte $e0,$e0,$e0,$e0,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.byte $0,$0,$0,$0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,0,0,0,0
.byte $e0,$e0,$e0,$e0,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$e0,$e0,$e0,$e0
.byte $0e,$0e,$0e,$0e,$ee,$ee,$ee,$ee
.byte $ee,$ee,$ee,$ee,$0e,$0e,$0e,$0e
.byte $d0,$d0,$dd,$dd,$dd,$dd,$d0,$d0
.byte $dd,$dd,$dd,$dd,$dd,$dd,$dd,$dd
.byte $0d,$0d,$dd,$dd,$dd,$dd,$0d,$0d
.byte $d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d
.byte $0,$0,$0,$0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,0,0,0,0
.byte $d0,$d0,$d0,$d0,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$d0,$d0,$d0,$d0
.byte $0d,$0d,$0d,$0d,$dd,$dd,$dd,$dd
.byte $dd,$dd,$dd,$dd,$0d,$0d,$0d,$0d
.byte $c0,$c0,$cc,$cc,$cc,$cc,$c0,$c0
.byte $cc,$cc,$cc,$cc,$cc,$cc,$cc,$cc
.byte $0c,$0c,$cc,$cc,$cc,$cc,$0c,$0c
.byte $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c
.byte $0,$0,$0,$0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,0,0,0,0
.byte $c0,$c0,$c0,$c0,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$c0,$c0,$c0,$c0
.byte $0c,$0c,$0c,$0c,$cc,$cc,$cc,$cc
.byte $cc,$cc,$cc,$cc,$0c,$0c,$0c,$0c
.byte $a0,$a0,$aa,$aa,$aa,$aa,$a0,$a0
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
.byte $0a,$0a,$aa,$aa,$aa,$aa,$0a,$0a
.byte $a0,$a0,$a0,$a0,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$0a,$0a,$0a,$0a
.byte $0,$0,$0,$0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,0,0,0,0
.byte $a0,$a0,$a0,$a0,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$a0,$a0,$a0,$a0
.byte $0a,$0a,$0a,$0a,$aa,$aa,$aa,$aa
.byte $aa,$aa,$aa,$aa,$0a,$0a,$0a,$0a
.byte $90,$90,$99,$99,$99,$99,$90,$90
.byte $99,$99,$99,$99,$99,$99,$99,$99
.byte $09,$09,$99,$99,$99,$99,$09,$09
.byte $90,$90,$90,$90,$90,$90,$90,$90
.byte $09,$09,$09,$09,$09,$09,$09,$09
.byte $0,$0,$0,$0,$99,$99,$99,$99
.byte $99,$99,$99,$99,0,0,0,0
.byte $90,$90,$90,$90,$99,$99,$99,$99
.byte $99,$99,$99,$99,$90,$90,$90,$90
.byte $09,$09,$09,$09,$99,$99,$99,$99
.byte $99,$99,$99,$99,$09,$09,$09,$09
.byte $80,$80,$88,$88,$88,$88,$80,$80
.byte $88,$88,$88,$88,$88,$88,$88,$88
.byte $08,$08,$88,$88,$88,$88,$08,$08
.byte $80,$80,$80,$80,$80,$80,$80,$80
.byte $08,$08,$08,$08,$08,$08,$08,$08
.byte $0,$0,$0,$0,$88,$88,$88,$88
.byte $88,$88,$88,$88,0,0,0,0
.byte $80,$80,$80,$80,$88,$88,$88,$88
.byte $88,$88,$88,$88,$80,$80,$80,$80
.byte $08,$08,$08,$08,$88,$88,$88,$88
.byte $88,$88,$88,$88,$08,$08,$08,$08
.byte $70,$70,$77,$77,$77,$77,$70,$70
.byte $77,$77,$77,$77,$77,$77,$77,$77
.byte $07,$07,$77,$77,$77,$77,$07,$07
.byte $70,$70,$70,$70,$70,$70,$70,$70
.byte $07,$07,$07,$07,$07,$07,$07,$07
.byte $0,$0,$0,$0,$77,$77,$77,$77
.byte $77,$77,$77,$77,0,0,0,0
.byte $70,$70,$70,$70,$77,$77,$77,$77
.byte $77,$77,$77,$77,$70,$70,$70,$70
.byte $07,$07,$07,$07,$77,$77,$77,$77
.byte $77,$77,$77,$77,$07,$07,$07,$07
.byte $60,$60,$66,$66,$66,$66,$60,$60
.byte $66,$66,$66,$66,$66,$66,$66,$66
.byte $06,$06,$66,$66,$66,$66,$06,$06
.byte $60,$60,$60,$60,$60,$60,$60,$60
.byte $06,$06,$06,$06,$06,$06,$06,$06
.byte $0,$0,$0,$0,$66,$66,$66,$66
.byte $66,$66,$66,$66,0,0,0,0
.byte $60,$60,$60,$60,$66,$66,$66,$66
.byte $66,$66,$66,$66,$60,$60,$60,$60
.byte $06,$06,$06,$06,$66,$66,$66,$66
.byte $66,$66,$66,$66,$06,$06,$06,$06
.byte $50,$50,$55,$55,$55,$55,$50,$50
.byte $55,$55,$55,$55,$55,$55,$55,$55
.byte $05,$05,$55,$55,$55,$55,$05,$05
.byte $50,$50,$50,$50,$50,$50,$50,$50
.byte $05,$05,$05,$05,$05,$05,$05,$05
.byte $0,$0,$0,$0,$55,$55,$55,$55
.byte $55,$55,$55,$55,0,0,0,0
.byte $50,$50,$50,$50,$55,$55,$55,$55
.byte $55,$55,$55,$55,$50,$50,$50,$50
.byte $05,$05,$05,$05,$55,$55,$55,$55
.byte $55,$55,$55,$55,$05,$05,$05,$05
.byte $40,$40,$44,$44,$44,$44,$40,$40
.byte $44,$44,$44,$44,$44,$44,$44,$44
.byte $04,$04,$44,$44,$44,$44,$04,$04
.byte $40,$40,$40,$40,$40,$40,$40,$40
.byte $04,$04,$04,$04,$04,$04,$04,$04
.byte $0,$0,$0,$0,$44,$44,$44,$44
.byte $44,$44,$44,$44,0,0,0,0
.byte $40,$40,$40,$40,$44,$44,$44,$44
.byte $44,$44,$44,$44,$40,$40,$40,$40
.byte $04,$04,$04,$04,$44,$44,$44,$44
.byte $44,$44,$44,$44,$04,$04,$04,$04
.byte $30,$30,$33,$33,$33,$33,$30,$30
.byte $33,$33,$33,$33,$33,$33,$33,$33
.byte $03,$03,$33,$33,$33,$33,$03,$03
.byte $30,$30,$30,$30,$30,$30,$30,$30
.byte $03,$03,$03,$03,$03,$03,$03,$03
.byte $0,$0,$0,$0,$33,$33,$33,$33
.byte $33,$33,$33,$33,0,0,0,0
.byte $30,$30,$30,$30,$33,$33,$33,$33
.byte $33,$33,$33,$33,$30,$30,$30,$30
.byte $03,$03,$03,$03,$33,$33,$33,$33
.byte $33,$33,$33,$33,$03,$03,$03,$03
.byte $20,$20,$22,$22,$22,$22,$20,$20
.byte $22,$22,$22,$22,$22,$22,$22,$22
.byte $02,$02,$22,$22,$22,$22,$02,$02
.byte $20,$20,$20,$20,$20,$20,$20,$20
.byte $02,$02,$02,$02,$02,$02,$02,$02
.byte $0,$0,$0,$0,$22,$22,$22,$22
.byte $22,$22,$22,$22,0,0,0,0
.byte $20,$20,$20,$20,$22,$22,$22,$22
.byte $22,$22,$22,$22,$20,$20,$20,$20
.byte $02,$02,$02,$02,$22,$22,$22,$22
.byte $22,$22,$22,$22,$02,$02,$02,$02
.byte $10,$10,$11,$11,$11,$11,$10,$10
.byte $11,$11,$11,$11,$11,$11,$11,$11
.byte $01,$01,$11,$11,$11,$11,$01,$01
.byte $10,$10,$10,$10,$10,$10,$10,$10
.byte $01,$01,$01,$01,$01,$01,$01,$01
.byte $0,$0,$0,$0,$11,$11,$11,$11
.byte $11,$11,$11,$11,0,0,0,0
.byte $10,$10,$10,$10,$11,$11,$11,$11
.byte $11,$11,$11,$11,$10,$10,$10,$10
.byte $01,$01,$01,$01,$11,$11,$11,$11
.byte $11,$11,$11,$11,$01,$01,$01,$01
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
die beiden mov
- Dateianhänge
-
- IMG_3876.MOV
- (11.39 MiB) 114-mal heruntergeladen
-
- IMG_3874.MOV
- (20.13 MiB) 124-mal heruntergeladen
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
Ich habe jetzt versucht den Code etwas zu verschlanken beim Grobscroll in der Hoffnung, daß es nicht mehr ruckelt... ohne Erfolg.
Die mögliche Lösung, den Grobscroll in einem nicht sichtbaren 2. Bildschirm zu machen und dann die Displaylist einfach jeweils umzuschalten, wäre wohl die Lösung und wollte ich heute umsetzen - da fiel mir aber zufällig auf, daß ich in den Einstellungen des Emulators NTSC 60 Hz eingestellt habe - also die etwas zeitaufwendigere Version des Bildschirmaufbaus - umgestellt auf PAL 50 Hz... und schon ist das gelegentliche Flackern komplett weg. Der Atari hat jetzt einfach etwas mehr Zeit und Power für den Code...
Nun kann ich weitermachen!
Zunächst werde ich jetzt den Aufbau der letzten Reihe - also der Landschaft komplett umprogrammieren, da ich ja aktuell nur 255 Informationen lesen kann (7 pro Zeile - also ca. 36 Zeilen) ... das würde ja nur für 1,5 Bildschirmlängen reichen und ich plane ein Landschaft mit 120-150 Bildschirmlängen - also ein Spiel, was ca. 10-15 Minuten am Stück durchscrollen könnte. Das ist auch der Grund, warum ich den Aufbau der letzten Zeile so "kompliziert" mache... einfach um Informationen / Platz zu sparen. Ich brauche so nur 7 statt 40 Byte pro Zeile. Später wird noch etwas dazukommen wegen der PM.
Danach programmiere ich den ersten Player - also das Raumschiff mit entsprechender Joystickabfrage, Steuerung und Kollisionsabfrage... mal sehen was da so alles an "Problemen" auf mich zukommt
LG Peter
update: Theorie und Praxis... was auf dem iMac funktioniert hat auf dem MacBook keinen positiven Einfluss... trotz 50 Hz ruckelt es noch... ich muss es wohl doch mit 2 Bildschirmen machen ...
Die mögliche Lösung, den Grobscroll in einem nicht sichtbaren 2. Bildschirm zu machen und dann die Displaylist einfach jeweils umzuschalten, wäre wohl die Lösung und wollte ich heute umsetzen - da fiel mir aber zufällig auf, daß ich in den Einstellungen des Emulators NTSC 60 Hz eingestellt habe - also die etwas zeitaufwendigere Version des Bildschirmaufbaus - umgestellt auf PAL 50 Hz... und schon ist das gelegentliche Flackern komplett weg. Der Atari hat jetzt einfach etwas mehr Zeit und Power für den Code...
Nun kann ich weitermachen!
Zunächst werde ich jetzt den Aufbau der letzten Reihe - also der Landschaft komplett umprogrammieren, da ich ja aktuell nur 255 Informationen lesen kann (7 pro Zeile - also ca. 36 Zeilen) ... das würde ja nur für 1,5 Bildschirmlängen reichen und ich plane ein Landschaft mit 120-150 Bildschirmlängen - also ein Spiel, was ca. 10-15 Minuten am Stück durchscrollen könnte. Das ist auch der Grund, warum ich den Aufbau der letzten Zeile so "kompliziert" mache... einfach um Informationen / Platz zu sparen. Ich brauche so nur 7 statt 40 Byte pro Zeile. Später wird noch etwas dazukommen wegen der PM.
Danach programmiere ich den ersten Player - also das Raumschiff mit entsprechender Joystickabfrage, Steuerung und Kollisionsabfrage... mal sehen was da so alles an "Problemen" auf mich zukommt
LG Peter
update: Theorie und Praxis... was auf dem iMac funktioniert hat auf dem MacBook keinen positiven Einfluss... trotz 50 Hz ruckelt es noch... ich muss es wohl doch mit 2 Bildschirmen machen ...
- Kveldulfur
- Beiträge: 844
- Registriert: 17.08.2021 02:32
- Has thanked: 357 times
- Been thanked: 290 times
- Kontaktdaten:
Re: Charon
Hallo!
Wenn das ganze so zeitkritisch ist, würde ich es auch einmal auf echter Hardware testen. Nicht das Du nachher ein Spiel rein für den Emulator geschrieben hast.
Grüße
Janko
Wenn das ganze so zeitkritisch ist, würde ich es auch einmal auf echter Hardware testen. Nicht das Du nachher ein Spiel rein für den Emulator geschrieben hast.
Grüße
Janko
Meine Projekte findest Du hier...
- Dr. Irata
- Beiträge: 1047
- Registriert: 24.08.2021 14:40
- Has thanked: 145 times
- Been thanked: 309 times
- Kontaktdaten:
Re: Charon
neues update:
Ich habe jetzt wegen der Probleme mit dem Grobscroll (also Verschieben des kompletten Bildschirmes um eine Zeile nach unten) die Routine umprogrammiert bzw. erweitert:
Ich nutze jetzt 2 Bildschirme - die letzte Zeile und das feinscroll geschieht auf dem sichtbaren Bildschirm, dann wird alles auf den unsichtbaren Bildschirm kopiert und zwar so, daß automatisch auch der grobscroll mit drin ist, anschließend schalte ich den unsichtbaren Bildschirm in der Displaylist auf sichtbar und das wiederholt sich dann ...
Das hat mich den halben Montag gekostet und funktioniert jetzt sauber und ganz ohne "ruckeln".
Ich werde jetzt den Code noch verfeinern und dann hier reinsetzen, wenn erwünscht!
LG
Peter
Ich habe jetzt wegen der Probleme mit dem Grobscroll (also Verschieben des kompletten Bildschirmes um eine Zeile nach unten) die Routine umprogrammiert bzw. erweitert:
Ich nutze jetzt 2 Bildschirme - die letzte Zeile und das feinscroll geschieht auf dem sichtbaren Bildschirm, dann wird alles auf den unsichtbaren Bildschirm kopiert und zwar so, daß automatisch auch der grobscroll mit drin ist, anschließend schalte ich den unsichtbaren Bildschirm in der Displaylist auf sichtbar und das wiederholt sich dann ...
Das hat mich den halben Montag gekostet und funktioniert jetzt sauber und ganz ohne "ruckeln".
Ich werde jetzt den Code noch verfeinern und dann hier reinsetzen, wenn erwünscht!
LG
Peter
- Kveldulfur
- Beiträge: 844
- Registriert: 17.08.2021 02:32
- Has thanked: 357 times
- Been thanked: 290 times
- Kontaktdaten:
Re: Charon
Ja, natürlich. Sonst kann man ja den Fortschritt nicht nachvollziehen.
Meine Projekte findest Du hier...
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast