Primaire labels

Converteren van grafische data naar C64-formaat

Meestal is de grootste uitdaging van het maken van een demo de grafische vormgeving. Wanneer je niet heel goed bent met mozaïeken of met het tekenen, in de demo-scene-volksmond: ‘pixelen’, op de computer is het ook mogelijk om zelf plaatjes om te zetten naar een formaat welke de Commodore computer wel snapt.

Welk type grafische modi zijn er? (Tip! Wiki-artikel)

  • bitmap, hi-res
  • bitmap, multi-color
  • karakterset, hi-res
  • karakterset, multi-color
  • karakterset, extended-color
  • sprites, hi-res
  • sprites, multi-color
  • Overige ingewikkelde hippe formaten, zie c64pixels.com

Voor de SX-64-party invitro zijn we uitgegaan van het originele Starbucks-logo en hebben dit naar Commodore 64 “bitmap, hi-res (monochroom per 8*8 bits)” formaat geconverteerd. De Commodore 64 heeft een andere beeldschermverhouding dan reguliere computers. Daarom geeft de Commodore 64 emulator VICE standaard een andere weergave. Tijdens het omzetten is het dus belangrijk om rekening te houden met deze afwijkende beeldverhouding zodat een cirkel wel een cirkel blijft.

We zijn begonnen met downloaden van een Starbucks-logo welke heel veel beeldpunten, pixels dus, bevat. Deze hoge resolutie, 932 * 972 = 905.904 pixels, is dus vele malen hoger dan de resolutie van de Commodore 64, welke maar 320 * 200 = 64.000 beeldpunten is. In dit geval is het belangrijk omdat je dan het beste eindresultaat kan halen, het is dan makkelijker te verkleinen zonder dat je rare verhoudingen krijgt. Je kan op de plaatjes klikken om de echte grootte te zien.

Originele logo, 935*972 pixels

Na het binnenhalen van het logo hebben we deze aangepast naar een groter formaat omdat dit wat makkelijker rekenen is. We moeten nu al rekening houden met wat we naast het logo nog meer op het scherm willen hebben. Onderin het scherm willen we ook een lichtkrant, wij noemen dit een ‘scroll’, maken van 2 karakters hoog, dat is 16 pixels. Deze 16 pixels moeten we dus aftrekken van het totaal van 200 pixels hoog. In dit geval zijn er dus maximaal (200-16 =) 184 pixels over voor het logo. Houd die gedachte vast!

Origineel logo, opgerekt naar 1804*1840 pixels

We hebben het logo dus opgerekt naar (200*10)-(16*10) = 1840 beeldpunten hoog. De breedte passen we later wel aan. Maar bedenk wel dat het logo gek genoeg breder moet worden om rond te blijven, dit leggen we later wel uit. Zo op het oog is er nog niets aan het logo veranderd maar de verhouding is al aardig bijgesteld voor de volgende bewerking. Nu is het zaak om het logo om te zetten naar de beeldverhouding op de Commodore C64. Eerst rekken we het spreekwoordelijke schildersdoek, de canvas-grootte, op van het kunstwerkje.

Originele logo, 2640*2000 pixels

Het logo is nu, verhoudingsgewijs op juiste *relatieve* grootte voor het C64 scherm. Om uit te leggen waarom de verhouding 264px. naar 320px. goed werkt op een Commodore C64/SX-64 is niet eenvoudig wiskundig te onderbouwen, en dat is eigenlijk ook niet nodig. Na wat passen en meten is dit een juiste verhouding althans op de SX-64, waar dit plaatje voor bedoeld is. Nu moeten we het plaatje oprekken naar een relatieve grootte voor de SX-64. Eerder is gesteld dat het plaatje tien maal zo groot is als het uiteindelijke resultaat dus er moeten nog 560 horizontale pixels bij.

Ovaal logo, opgerekt naar 3200*2000 pixels

Door het logo op te rekken van 2640 pixels breed naar 3200 pixels breed en dezelfde hoogte te behouden krijgt het logo een ovale vorm op een niet Commodore computer (PC/Mac etc). Dit is juist de bedoeling om dat de verhouding van de pixel op de Commodore 64 dus anders is. Je ziet dat het logo nu nog steeds links van het scherm staat. Dit moeten we nog rechtzetten of wellicht beter gesteld: centreren, maar eerst zetten we het logo om naar een kleinere vorm om makkelijker de centrale positie in het plaatje te bepalen.

Ovaal logo, 320*200 pixels

Nu het logo de juiste grootte en proportie heeft, kunnen we beginnen met het verkleinen van de afbeelding naar een C64 formaat. We hebben het logo dus 10 keer kleiner gemaakt. Het logo staat nu enkel nog aan de linkerkant van het scherm. Het centreren van het logo gaat het gemakkelijkst wanneer je de 320*200 pixel grootte aanhoudt. Nu is het makkelijker uitkienen waar het logo precies moet komen te staan.

Ovaal logo gecentreerd, 320*200 pixels


Hetzelfde logo maar dan zonder pixel breedte correctie ziet er niet zo breed uit. We willen deze brede ‘look’ juist omdat de pixels op de Commodore SX-64 kennelijk hoger zijn dat breed. Het uiteindelijke resultaat zal dus op de echte hardware er dus wel rond uit zien.

GangEd

Nu we het logo in het juiste formaat hebben kunnen het omzetten naar een bitmap welke door de Commodore 64 te begrijpen is. Een Commodore kent geen .JPG, .PNG of .BMP bestanden dus we moeten het converteren naar een, voor de Commodore 64, logische indeling. Hiervoor gebruiken we GangEd. Dit programma kan veel meer maar voor het logo is er niet meer dan eenkleurige hi-res bitmap conversie nodig.

Het importeren van een PC afbeelding naar een begrijpbaar formaat voor de Commodore 64 is redelijk eenvoudig. Echter moeten we wel goed weten wat we als uitgangspunt willen hebben. Eerder hebben we het over de verschillende grafische layouts gehad. Dit komt nu weer van pas. In dit geval gaan we een monochroom, éénkleurig, .BMP plaatje omzetten naar een C64 monochroom hi-res bitmap formaat. We openen een .BMP bestand in ‘GangEd2 v2.0.0.0 beta‘ met File ->  Load -> Import PC image. Selecteer een .BMP,.JPG of .JPEG bestand.

Het plaatje is nu geladen in het conversie programma. Je kan nu nog wat instellingen doen om te zorgen dat je zo een goed mogelijk resultaat kan verkrijgen. Voor  het SB-logo kiezen we voor Resolution: Hires, Dither method: None, Colors: Monochrome en Palette: Default. Voor andere plaatjes kan je een beetje spelen met de instellingen voor het beste resultaat, wat je direct kan zien.

Nu staat het plaatje mooi in het midden en geeft je een goed beeld voor de vlakverdeling van het scherm. Echter blijft het scherm een ietwat vertekend beeld geven van de realistische situatie. Het is nu wel erg makkelijk om dit plaatje op de echte hardware te krijgen. Je kan nu het plaatje wegschrijven naar een formaat welke je op de Commodore 64 kan inlezen.

Het formaat van een bitmap staat altijd vast, het is echter wel zo dat je deze in verschillende VIC banken kan laden. Het opslaan van enkel de bitmap als .PRG file is handig. Gebruik dan File -> Save -> Bitmap data $2000 – $3FFF. Dit bestand kan je met een ‘include’ functie inladen in de cross assembler. Let wel op dat de hi- en low-bytes van het bestand de het geheugen adres ($2000) staan van het bestand. De eerste twee bytes zijn dan in dit geval $00, $20. Je moet in dit geval wel zelf je viewer maken in je demo.

Je kan ook het bestand opslaan als een executable .PRG. Kies dan File -> Save -> Executable (.prg). Dit bestand is dus opstartbaar en laat na het starten direct het plaatje zien op de  Commodore 64. Dit is erg handig om snel te kunnen zien hoe dit bestand er uit ziet op de Commodore 64.

Je kan zelf de .PRG bestanden hier downloaden en zelf het verschil zien op in VICE C64 emulator en op de echte C64 computer. Je ziet dat in, met de standaard VICE instellingen het plaatje nog steeds de brede vorm heeft. Echter is ziet hetzelfde bestand op de SX-64/C-64 er anders uit. Dit komt door de pixel-verhouding waar we het eerder over gehad hebben.

Recht is een niet-verbreed logo afgebeeld op de Commodore SX-64. Je ziet direct dat het logo niet mooi rond oogt maar eerder als een ovale vorm. Uiteraard is dit niet de bedoeling en strookt een beetje tegen het gevoel in als je kijkt naar de versies in GangEd op de PC. Dus het is dus wel van belang dat je goed kijkt wanneer je iets omzet van de PC naar de Commodore of de verhoudingen nog wel kloppen.

Hier links zie je het ‘brede’ logo op de monitor van de SX-64. In GangEd ziet het logo er als een hamburger uit maar in de Commodore is het anders.  Zoals je ziet is het logo aardig rond en past precies op het scherm en er is nog ruimte over voor de split-screen scroller. We moeten dit uiteraard zelf programmeren. Dit is dus het resultaat dat we willen bereiken.

Vanuit een andere hoek bekeken, kun je ook nog goed zien dat het logo een ovaal uiterlijk heeft. Wanneer je schuin naar de monitor kijkt lijkt het logo nog smaller. Om de executable .PRG op de Commodore SX-64 te krijgen zet ik het .PRG bestandje op een µSD kaart. Dit kaartje gaat weer in de 1541Ultimate-II cartridge en zo kunnen we snel testen zonder gedoe met floppy disks.

Het uiteindelijke resultaat op de SX-64 zit er prima uit en de grafische conversie is geslaagd en we kunnen verder met het gebruiken van de binaire ‘bitmap data $2000-$3FFF’ in de assembler. Lukt het niet, kijk dan eventjes op gesprek.6510.nl (vooralsnog offline).

%d bloggers liken dit: