You are not logged in.

1

Monday, September 28th 2009, 1:55pm

Farbpalette programmieren

Hallo,
Wie bekomme ich alle Farben des DTV's angesprochen ?
Aus dem Wiki-Artikel von Jeri werde ich nicht so ganz schlau.
Ich stelle mir das so vor, daß es ähnlich gelöst ist wie beim C16 z.B., also mit einem zusätzlichen Nibble für Luminanz.
Oder liege ich völlig daneben ?

peiselulli

Professional

  • "peiselulli" is male

Posts: 944

Date of registration: Sep 14th 2006

  • Send private message

member since 72 month member since 72 month member since 72 month member since 72 month

2

Monday, September 28th 2009, 3:48pm

Zuerst must du die erweiterten Register vom DTV freischalten :

Source code

1
2
LDA #$01
STA $D03F


Danach kannst Du die unteren 16 Farben (die auch die "normalen" 64er-Farben einstellen) neu schreiben.
Die Paletten-Register dazu liegen dann von $d200 bis $d20f
Dabei sind die oberen 4 Bit Chominanz und die unteren 4 Bit Luminanz.

Vorsicht, beim lesen dieser Register kreigt man leider immer nur Nullen zurückgeliefert.

3

Monday, September 28th 2009, 5:59pm

Super, vielen Dank für die Erklärung.
Dann war ich ja schon dicht dran ;)
Nur die Geschichte mit den erweiterten Register freischalten hatte ich übersehen.
Mal schauen ob ich das umgesetzt bekomme :)
:winke:
edit: habs gerade mal in Basic mit ein paar Pokes probiert und es funktioniert.
Danke nochmal :)

This post has been edited 1 times, last edit by "feuertonne" (Sep 28th 2009, 6:11pm)


4

Tuesday, September 29th 2009, 8:07pm

Ok, ich habe jetzt also 16 Farben die ich frei einstellen kann.
Wie bekomme ich jetzt alle 256 Farben gleichzeitig auf den Schirm (Normaler Text-Modus) ?
Ich bekomms irgendwie noch nicht hin. :wand
Edit: Die 8 Bit pro Zeichen im Farbram sollten doch langen um die 256 Farben zu codieren, oder ?

This post has been edited 1 times, last edit by "feuertonne" (Sep 29th 2009, 8:12pm)


peiselulli

Professional

  • "peiselulli" is male

Posts: 944

Date of registration: Sep 14th 2006

  • Send private message

member since 72 month member since 72 month member since 72 month member since 72 month

5

Wednesday, September 30th 2009, 12:21pm

Ne, so einfach läuft das nicht. Das Farbram hat leider nur 4 Bit, warum auch immer.
256 Farben im Zeichensatz-Modus gibt es nur, wenn man den sogenannten "8BPP Pixel Cell" Modus aktiviert. Dann ist der Zeichensatz aber anders organisiert. Du hast dann 64 BYTES (nicht Bits) pro Pixel, und jedes Pixel kann jede der 256 Farben annehmen. Dadurch is der Zeichensatz dann 16KB groß.

6

Wednesday, September 30th 2009, 2:14pm

Hehe, das war dann wohl mehr Wunschdenken von mir ;) Wäre ja auch zu schön gewesen um war zu sein.
Ok, ich dachte im Textmode würde das einfacher gehen.
Z.B. so wie im Slimintro die Paletten-Anzeige, da werden doch auch mehr als 16 Farben gleichzeitig angezeigt.
Ob ich mich an den 8BPP Pixel Cell Mode schon ranwagen soll ? Klingt ja irgendwie verdammt nach Amiga :)
Ich werde auf jeden Fall weiter experimentieren, das Ding ist irgendwie interessant.
Danke erstmal für Deine Ausführungen, das kann man jedenfalls nachvollziehen :bia

7

Wednesday, September 30th 2009, 3:17pm

erzähl keinen mist ulli ;)
klar geht das... man muss nur bit 2 von $d03c aktivieren. -> High color when set (Extended color decoder mode)


"Color/character line buffer is a 40 x 16 bit memory that stores the character and color data every bad line. This memory is read back over the next 8 lines and used with the color encoder."

Source code

1
2
3
4
10 POKE 53311,1:POKE 53308,4:POKE 53280,0:POKE53281,0
20 FOR Y=0TO15:FOR X=0TO15
30 POKE 1024+X+(Y*40),160:POKE 55296+X+(Y*40),X+Y*16:NEXT
40 POKE 53760+Y,Y:NEXT


regards
foo

peiselulli

Professional

  • "peiselulli" is male

Posts: 944

Date of registration: Sep 14th 2006

  • Send private message

member since 72 month member since 72 month member since 72 month member since 72 month

8

Wednesday, September 30th 2009, 3:40pm

ups, das kannte ich noch nicht ...

9

Wednesday, September 30th 2009, 3:44pm

Oh, super !
Genau das habe ich gesucht. Besten Dank :bia
Nachtrag: Habe gerade rausgefunden, das man den poke in zeile 40 weglassen kann, da die palette ja eh schon vorhanden ist.
;)
Hier mal das Ergebnis auffm Emu:
Schon recht bunt aber zuwenig rot ;)
feuertonne has attached the following image:
  • dtvpalette.png

This post has been edited 3 times, last edit by "feuertonne" (Sep 30th 2009, 7:12pm)


10

Wednesday, September 30th 2009, 11:02pm

die palette ist aber auch nur da, wenn man das slimintro oder dtv-boot oder ullis kernal oder einen eigenen kernal flasht ;)

ansonsten sind das eher die schlecht als rechten original c64 farben aus dem kernal von jeri.

11

Wednesday, September 30th 2009, 11:13pm

aha, alles klar. ich probiere das mal durch.
Theorethisch könnte man jetzt ja sehr einfach einen eigenen Fix machen um z.B. das grottige
Display von meinem Mini-Arcade etwas anzupassen. Interessant :)

12

Thursday, October 1st 2009, 12:14pm

So, ich habe heute mal versucht, das erlernte Wissen in Assembler anzuwenden.
Dabei ist mir beim Anpassen meiner Rasterbar-Routine (erweiterter Mode an) etwas aufgefallen:
Man muss nicht mehr $d020 und $d021 verändern, sondern dafür $D200-$D20f.
Naja, ist ja auch logisch irgendwie :)

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
		ldx #100
loop:	        lda $d012
		and #$07
		ora #$18
		sta $d011
		
		lda buffer,x
		;sta $d020
		;sta $d021
		sta $d200
		sta $d201
		sta $d202
		sta $d203
		sta $d204
		sta $d205
		sta $d206
		sta $d207
		sta $d208
		sta $d209
		sta $d20a
		sta $d20b
		sta $d20c
		sta $d20d
		sta $d20e
		sta $d20f
		
		dex
		bne loop


Hier mal ein Bild im Anhang, wie sowas aussehen kann ;)
feuertonne has attached the following image:
  • dtvpalette_raster.png

peiselulli

Professional

  • "peiselulli" is male

Posts: 944

Date of registration: Sep 14th 2006

  • Send private message

member since 72 month member since 72 month member since 72 month member since 72 month

13

Thursday, October 1st 2009, 12:39pm

Damit stellst Du aber alle 16 Farben auf den gleichen Farbwert. Es hätte gereicht, wenn Du vorher $d020 und $d021 auf Farbe 0 setzt, dann bräuchtest Du in deiner Schleife nur $d200 zu setzen.

14

Thursday, October 1st 2009, 1:46pm

Upps, warum einfach wenns auch kompliziert geht :D
Ich ändere das gleich mal. Danke :winke:

lubber

...sollte mal schlafen

  • "lubber" is male

Posts: 210

Date of registration: Dec 31st 2007

Location: Berlin

  • Send private message

member since 54 month member since 54 month member since 54 month

15

Wednesday, October 7th 2009, 11:26pm

:thumbsup:

Leute, danke für diesen Thread! Das ist genau etwas einfach und schnell erklärt was ich immer gesucht habe,um auf dem dtv mal schnell zu 'nem ergebnis zu kommen. Schon erstaunlich wie ein paar bunte Farben hier einen Motivationsschub bewirken können :)