You are not logged in.

plus4fan

Unregistered

1

Thursday, September 8th 2011, 7:41pm

Grafikspeicher nach Hex E000 verlegen..., was muss da beachtet werden?

POKE(0xd011, 0x3b);
POKE(0xd018, 0x18);
POKE(0xdd00,(PEEK(0xdd00 ) & 252 | 3));

Das oben habe ich gefunden um den Speicher der Grafik nach Hex 2000 zu verlegen.
Wie sehen die Werte aus für die Adresse Hex E000 ?

Wo kann man das iin deutsch nachlesen?

danke.

gruss

hoogo

Eimergesicht mit Wurst

  • "hoogo" is male

Posts: 1,364

Date of registration: Jan 22nd 2005

Location: Mülheim/Ruhr

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

2

Thursday, September 8th 2011, 9:23pm

D011 ist nur zum Einschalten des Btmap-Modus, der Wert ist in allen Bereichen gleich.
DD00 wählt eine 16KB-Bank aus, der VIC kann nämlich nur innerhalb von 16KB sehen und arbeiten.
Für Deine einfache Frage musst Du also nur das "OR 3" bei $DD00 weglassen und die anderen Pokes unverändert ausführen, dann hast Du die Bitmap bei $E000 und den Screen dazu bei $C400.

Spannender ist $D018, aus der AAY64:

Source code

1
2
3
4
5
6
  +----------+---------------------------------------------------+
   | Bits 7-4 |   Video Matrix Base Address (inside VIC)          |
   | Bit  3   |   Bitmap-Mode: Select Base Address (inside VIC)   |
   | Bits 3-1 |   Character Dot-Data Base Address (inside VIC)    |
   | Bit  0   |   Unused                                          |
   +----------+---------------------------------------------------+

Das ist das eigentliche Register, mit dem Du Bildschirmspeicher, Zeichensatz- und Bitmap-Adresse festlegst.

Schritt für Schritt:
1) Die 16KB-Bank aussuchen. und nach $dd00 poken: $0000-$3fff=3, $4000-$7fff=2, $8000-$bfff=1, $c000-$ffff =0
2) Screenram innerhalb der Bank muß durch $0400=1024 teilbar sein. Adresse/1024*16 ergibt die oberen 4 Bits von $d018.
3) Zeichensatz muß durch 2048 teilbar sein, Adresse/1024*16 ergibt die unteren 4 Bits von $d018. Das ergibt sich dann von alleine, daß das unterste Bit keine Bedeutung hat.
4) Bitmap hat nur die Wahl zwischen oberen oder unteren 8KB, muß also durch 8192 teilbar sein, gleiche Formel wie beim Zeichensatz.

Wichtig für die Wahl ist noch, daß von $1000-$2000 und $9000-$A000 immer nur das Zeichensatz-ROM erreichbar ist, egal, ob für Bildschirm, Bitmap oder Sprites. Drum fährst Du mit den Bänken ab $4000 oder $C000 für Grafikzwecke ziemlich gut.
Vollmond war gestern!

plus4fan

Unregistered

3

Thursday, September 8th 2011, 10:50pm

Irgendwie kapier ich das nicht.
Was muss jetzt hier rein :
POKE(0xd018, 0x18); ???

Was mus hier rein :
z=0x400; ???
z1=0x800; ???
eswird dann da die Farbe 1 reingesetzt.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  POKE(0xd011, 0x3b);
  POKE(0xd018, 0x18);
  POKE(0xdd00,(PEEK(0xdd00) & 252 ));

  z=0x400;
  z1=0x800;

  for (x=z; x<z1; ++x) {
	POKE(x,1);
  }

  z=0xE000;
  z1=0xFFFF;

  for (x=z; x<z1; ++x) {
	POKE(x,129);
  }


danke.

gruss

TheRyk

KKK?! That's not good.

  • "TheRyk" is male
  • »TheRyk« is a verified user

Posts: 8,082

Date of registration: Mar 14th 2008

Location: Ostereierinsel

  • Send private message

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

4

Thursday, September 8th 2011, 10:53pm

Bänke und Link zu VIC-Register $D018 im Überblick

$4000 ist die einzig wirklich "reine" VIC-Bank, also für alles perfekt, weil da weder ROMs noch Zero-Page oder deren Erweiterung oder Basic-Start rumspuken normalerweise.

$C000 ist perfekt für Grafik, eben weil der VIC (anders als beim Char-ROM) das Kernel-ROM automatisch ignoriert und aufs RAM zugreift. So kann man einen ohne ROM-Ausschalterei nicht nutzbaren Bereich wunderbar einsetzen.

Ich fand das hier immer hilfreich:
http://codebase64.org/doku.php?id=base:v…mory_organizing

Letztlich was Hoogo gesagt hat als Tabellen, natürlich HEX. ;)

PS: Bei der Tabelle immer daran denken, vom VIC-Bank-Start zu rechnen.

$E000 ist also in der fraglichen Tabelle $2000!

Source code

1
$D018 = %xxxx100x -> charmem is at $2000

Jetzt musst Du Dich nur noch entscheiden, wo das Screen-RAM (default $400/DEZ1024) in der Bank liegen soll, dann sollte das mit $D018 sich aus der Tabelle erklären.
Wenn Sie irgendwelche Satzzeichen in meinen Postings vermissen, bedienen Sie sich, bitte:
@!#?@! (Zitat Q*bert, Arcade Version, 1982)

5

Thursday, September 8th 2011, 11:43pm

Nochmal ganz langsam:
Also
1.) in $dd00 Vic-Bank 3 wählen -> die unteren zwei Bits löschen
2.) in $d011 Biimapmodus anschalten -> Bit 5 setzen
3.) in $d018 Position der Bitmap relativ zur Vicbank setzen -> Bit 3 setzen

Deinen Screen hast Du danach, wenn Du sonst nichts geändert hast bei $c400 (schätze mal, dass ist Dein erstes z)
z1 müsste dann $c800 sein, bzw eigentlich $c7e7 oder $c7e8 (schon wieder vergessen, was in C ++x oder x++ bedeutet) ... und "normalerweise" (Vic Bank I) gehört da $07e7/$07e8 rein ... sonst überschreibst Du Dir die Spritepointer. Ist zwar in dem Beispiel egal, aber vielleicht für die Zukunft wichtig.

hoogo

Eimergesicht mit Wurst

  • "hoogo" is male

Posts: 1,364

Date of registration: Jan 22nd 2005

Location: Mülheim/Ruhr

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

6

Thursday, September 8th 2011, 11:57pm

Bildschirm $0400 und Bitmap $E000 wie in Deinem Code geht technisch nicht. Beide müssen in der gleichen 16K-Bank liegen. Wie Spider sagt, mit Deinen Pokes hast Du den Bildschirm bei $c400 eingerichtet.
Vollmond war gestern!

TheRyk

KKK?! That's not good.

  • "TheRyk" is male
  • »TheRyk« is a verified user

Posts: 8,082

Date of registration: Mar 14th 2008

Location: Ostereierinsel

  • Send private message

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

7

Thursday, September 8th 2011, 11:59pm

Evtl. kann $d016 noch interessant werden, wenn zwischen Multi-Color und Text-Modus hin- und her geschaltet werden soll, $d012 falls man vorhat, das screen zu splitten in Text und Grafik.
http://codebase64.org/doku.php?id=base:built_in_screen_modes

Aber für reines Bankswitching und Einschalten eines Zeichensatzes sollten die zuvor erteilten Ratschläge und evtl. das hier genügen:
http://www.c64-wiki.com/index.php/VIC_bank (da sind auch Basic-Beispiele drin)
Wenn Sie irgendwelche Satzzeichen in meinen Postings vermissen, bedienen Sie sich, bitte:
@!#?@! (Zitat Q*bert, Arcade Version, 1982)

BASIC-FAN

Intermediate

  • "BASIC-FAN" is male

Posts: 398

Date of registration: Aug 7th 2011

  • Send private message

member since 18 member since

8

Friday, September 9th 2011, 2:49am

Grafik ab 57344

Hallo, hier Basicfan,

Hier der BAS-Code für das Umschalten in den Grafik-Modus unter dem Kernal-ROM.

Source code

1
20 :poke53265,11:poke56576,199-3:poke53272,56:poke53270,216:poke53265,59:return


Schönen Gruß, Dirk

plus4fan

Unregistered

9

Friday, September 9th 2011, 9:26am

Jup, danke. ^^ , ist sehr hilfreich für mein Entschluss.
Werde auch die Spritpointer usw nutzen und ein Multicolor Koalabild einladen.
Ich habe mich jetzt entschlossen den unteren 16kb Bereich zu nutzen bzw das Bild in $2000-$4000 und den Bildschirm bei $0400.
Danke.

Ich werde dann den Ram reservieren für den cc65:
RAM: start = $4000, size = $8fff , file = %O, define = yes;
Kann man jetzt den Ram benutzen bis von $4000 - $cfff ? :?:

Kann ich den Bereich im cc65 nutzen von $e000 - $ffff oder gibt es da einschränkungen vom c64 aus, das der C64 da irgendetwas reinmischt :?: umschaltet oder andere Dinge da macht :?:

danke.

gruss

10

Friday, September 9th 2011, 9:35am

Dafür musst Du halt das Kernal-ROM aus- und RAM einblenden. Einzustellen in Speicherstelle $01.
Hier eine Übersicht über mögliche RAM/ROM Kombinationen:

Source code

1
2
3
4
5
$01=$37 -> Basic Rom visible A000-C000, IO visible at D000-E000, Kernal Rom Visible at E000-FFFF
$01=$36 -> RAM       visible A000-C000, IO visible at D000-E000, Kernal Rom Visible at E000-FFFF
$01=$35 -> RAM       visible A000-C000, IO visible at D000-E000, RAM        Visible at E000-FFFF
$01=$34 -> RAM       visible A000-C000, RAM visible at D000-E000, RAM        Visible at E000-FFFF
$01=$33 -> RAM       visible A000-C000, CHAR ROM   at D000-E000, RAM        Visible at E000-FFFF

Quelle: http://codebase64.org/doku.php?id=base:memory_management

EDIT: die "gängigste" Variante, wenn man kein Kernal nutzt und möglichst viel RAM haben will, aber dennoch Zugriff auf VIC/SID-Register haben will ist wohl #$35.

plus4fan

Unregistered

11

Friday, September 9th 2011, 12:32pm

Jup, danke.

Was habe ich bei $35 für Einschränkungen beim Programieren bzw auf die Routinen die in D000 zb liegen?
Wenn Einschränkungen da sind, kann man diese Rom ein und ausblenden und der Ram bleibt immer erhalten.
Ich möchte da eigentlich nur Daten reinlegen.

danke.

gruss

12

Friday, September 9th 2011, 1:09pm

Kann man ein- und ausblenden wie man lustig ist :)
Von $d000-$dfff ist VIC/SID etc... also IO, keine ROM-Rountinen. Von $e000-$ffff ist ja das Kernal-ROM. Falls Du also hin und wieder mal ROM Routinen brauchst, kannst Du das kurz anschalten. Das Basic-ROM von $a000-$bfff braucht man logischerweise nur in Basic. Aber der cc65 spuckt doch ASM aus, oder? (wundere mich eh die ganze Zeit, dass der Thread hier im Basic-Bereich ist).

plus4fan

Unregistered

13

Friday, September 9th 2011, 2:37pm

...wundere mich eh die ganze Zeit, dass der Thread hier im Basic-Bereich ist....

Weil es mit dem Hires anfing und dieses Thema alle Sprachen betrifft.
Und wir haben das Thema dann von Frage zu Frage erweitert...

danke.

gruss

BASIC-FAN

Intermediate

  • "BASIC-FAN" is male

Posts: 398

Date of registration: Aug 7th 2011

  • Send private message

member since 18 member since

14

Friday, September 9th 2011, 10:52pm

Für Ladeaktionen ist es meist von Basic aus betrachtet am besten, wenn man die Grafik nach 40960, also unter das BASIC-ROM lädt.

So ist die Grafik-Bitmap gleich an der gewünschten Stelle und man muß lediglich die Farb-Bereiche am Ende an die richtige Stelle kopieren, wozu man allerdings ein Hilfsprogramm benötigt, welches das ROM während des Kopiervorganges ausblendet, da ein paar Speicherstellen am Ende sich noch im BASIC-ROM-Bereich befinden (192 Bytes).
Der Rest ist kein Problem, da er sich bereits im oberen RAM befindet, auf das man problemlos zugreifen kann.
Ansonsten ist es besser im Basic-Programm-RAM zu arbeiten, da man dort mit allen Basic-Befehlen zugreifen kann.

Schönen Gruß, Dirk

TheRyk

KKK?! That's not good.

  • "TheRyk" is male
  • »TheRyk« is a verified user

Posts: 8,082

Date of registration: Mar 14th 2008

Location: Ostereierinsel

  • Send private message

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

15

Friday, September 9th 2011, 11:18pm

Unters Kernel-ROM geht genauso gut, auch in Basic.
Wenn Sie irgendwelche Satzzeichen in meinen Postings vermissen, bedienen Sie sich, bitte:
@!#?@! (Zitat Q*bert, Arcade Version, 1982)

BASIC-FAN

Intermediate

  • "BASIC-FAN" is male

Posts: 398

Date of registration: Aug 7th 2011

  • Send private message

member since 18 member since

16

Saturday, September 10th 2011, 1:40am

Mit Grafik-Anwendungen ja, aber das Laden ist besser unter das BASIC-ROM, da sich die Farb-DATEN hinter der Grafik befinden.
Beim Laden ans Kernal-ROM würde vermutlich dann die Zero-Page mit den Farbdaten überschrieben werden.

Schönen Gruß, Dirk

TheRyk

KKK?! That's not good.

  • "TheRyk" is male
  • »TheRyk« is a verified user

Posts: 8,082

Date of registration: Mar 14th 2008

Location: Ostereierinsel

  • Send private message

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

17

Saturday, September 10th 2011, 11:29am

Aber nein!

Ich weiß nicht, wie oft ich schon darauf verlinkt habe:
http://www.c64-wiki.de/index.php/kernel#…g_von_BASIC_aus

Das hier

Source code

1
SYS 57812 "DATEINAME",8,0:POKE780,0:POKE781,0:POKE782,64:SYS 65493

funktioniert auch tadellos unter dem Kernel-ROM ohne die ZP irgendwie zu beeinträchtigen. EInfach statt 64 mal 224 ($e0) oder Höheres probieren. Lässt sich zwar nicht PEEKen ohne Kernel abzuschalten, aber der VIC sieht dort nur RAM, egal ob da nun Zeichensatz oder Bitmap liegen.
Wenn Sie irgendwelche Satzzeichen in meinen Postings vermissen, bedienen Sie sich, bitte:
@!#?@! (Zitat Q*bert, Arcade Version, 1982)

18

Saturday, September 10th 2011, 11:52am

Mit Grafik-Anwendungen ja, aber das Laden ist besser unter das BASIC-ROM, da sich die Farb-DATEN hinter der Grafik befinden.
Beim Laden ans Kernal-ROM würde vermutlich dann die Zero-Page mit den Farbdaten überschrieben werden.

Was ist das denn für eine verschrobene Theorie?!? =)

Colt Seavers

Blödmann

  • "Colt Seavers" is male

Posts: 1,735

Date of registration: Jan 17th 2008

Location:

  • Send private message

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

19

Saturday, September 10th 2011, 11:53am

Das nützt aber doch nichts, wenn die nachzuladende Datei zu groß ist um unter das Kernel zu passen :)

Allerdings spricht auch nichts dagegen, Bitmap und Farbdaten in seperaten Dateien unterzubringen.

Edit: das war auf TheRyks Beitrag bezogen.
Es haben bereits 28 registrierte Benutzer Bedenken.

TheRyk

KKK?! That's not good.

  • "TheRyk" is male
  • »TheRyk« is a verified user

Posts: 8,082

Date of registration: Mar 14th 2008

Location: Ostereierinsel

  • Send private message

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

20

Saturday, September 10th 2011, 11:55am

@Colt: Ehhh? :) Etwas, was größer ist als 8 kb, sollte man natürlich nicht nach $e000 laden, nein, aber ich dachte, das versteht sich von selbst. ;)
Wenn Sie irgendwelche Satzzeichen in meinen Postings vermissen, bedienen Sie sich, bitte:
@!#?@! (Zitat Q*bert, Arcade Version, 1982)

This post has been edited 1 times, last edit by "TheRyk" (Sep 10th 2011, 2:31pm)