Koala-Bilder und andere Formate

1, 2

Koala-Bilder und andere Formate

von mp-one » Mo 14. Mai 2007, 18:26
Hallo,

weiß evtl. jemand von Euch, ob es irgendwo Informationen über das Format (Aufbau, Kompressionsalgorithmus, etc.) der Koala-Bilder (und evtl. weiterer Formate: ATARI Artist/Micro-Illustrator/... komprimiert/umkomprimiert, ...) gibt? Einige davon sind ja auch kompatibel bzw. verwenden die gleichen Kompressionsverfahren.

Ich möchte die Bilder in eigenen Programmen (u.a. dem Pixlator) verwenden, finde aber nirgends Tipps, wie man die Dekompression durchführen kann. Umkomprimierte Bilder des Micropainter und reine GR8-Bilder sind ja kein Problem.

Evtl. hat ja jemand ein Listing oder einen Artikel in einer alten ATARI-Zeitschrift dazu gesehen...

Gruß,

Michael

von CharlieChaplin » Mo 14. Mai 2007, 22:49
Nun,
hier erst einmal die "Luser"-Info zu Micro-illustrator:

Das Grafikformat Micro-Illustrator gibt es unter versch. Namen, u.a. Koala (weil für das Koala-Pad), Atari Artist (für das Atari Touch Tablet, zu deutsch Atari Maltafel), und andere. Das format ist aber stets das gleiche, ergo koala-bilder sind gleichzusetzen mit atari-artist oder micro-illustrator bildern. man kann auch sagen micro-illustrator war die erfindung (oder grundform des formates) und wurde an viele versch. firmen lizensiert, die es dann nach Belieben umbenannt haben...

Allgemein gibt es das format a) unkomprimiert (63 sektoren, da 62 sektoren daten und 1 sektor für den header), b) vertikal komprimiert (beste komprimierung!) und c) horizontal komprimiert. die info ob die grafik komprimiert ist oder nicht (und wenn ja vertikal oder horizontal) ist im header enthalten. auf dem atari wird micro-illustrator fast ausschließlich für Gr. 15 verwendet (160x192), es wären aber auch andere grafikstufen möglich. wenn ich mich nicht irre, ist im header noch jede menge platz gelassen worden für zusätzliche infos (z.B. grafikstufe, auflösung in pixel, beschreibung des bildes, etc.), doch leider wurde dieser platz nie genutzt und es gibt auch kein viewer/loader der mit diesen infos etwas anzufangen wüßte...

Hoffe die Profis unter den Programmierern können dir die genauen infos zu micro-illustrator hier noch mailen (stand aber auch schonmal in einem alten abbuc-magazin drin, jedenfalls auf einer abbuc-disk, also disk-inhalte durchforsten). Auffallend ist, dass bei koala-bildern die Farbinfos immer am Anfang stehen, der viewer die bilder also sogleich mit den richtigen farben lädt, während sie bei micropainter immer erst am ende stehen. wenn allerdings bei koala-bildern 1-2 sektoren mal defekt sind führt dies meist zum totalen absturz des viewers/converters (und überflüssige Bytes am ende des bildes z.B. von Mailbox/Modem downloads wie Bobterm werden zumeist als datenmüll über das vorhandene bild geladen). bei micropainter-bildern hat man bei 1-2 defekten sektoren meist nur "kleine Fehler" im Bild die man via malprogramm ggf. korrigieren kann (und überflüssige Bytes am Ende werden in den viewern/konvertern fast immer ignoriert, da die länge von micropainter bildern ja stets gleich ist, für Gr. 15 sind es 7684 bytes)...

So, und nun sind die Assembler-Profis an der Reihe mehr über die De- / Komprimierung von Micro-Illustrator zu verraten... Gruß - Andreas Koch.

von HiassofT » Di 15. Mai 2007, 00:48
Uff, das ist lange her. Vor ca 20 Jahren hab' ich mal für ein Slideshow Programm Code geschrieben, der ein Koala Bild lädt. Genaue Details zum Format habe ich nicht mehr im Kopf, aber den Code habe ich noch gefunden.

Wenn ich das jetzt richtig verstehe wird die Adresse wo das unkomprimierte bin hin soll als Parameter vom Basic übergeben und nach $77FB kommen die Farb-Infos hin. Kanal 1 muss mit der Bilddatei geöffnet sein. Das ganze funktioniert wohl nur mit GR.15 Bildern, die Header-Infos werden so gut wie nicht ausgewertet (ausser der Modus Zeilen/Spalten).

so long,

Hias

Code: Alles auswählen
CIOV    EQU $E456

ICCOM   EQU $342
ICBAL   EQU $344
ICBAH   EQU $345
ICBLL   EQU $348
ICBLH   EQU $349

CGBIN   EQU   7

KANNUM  MACRO KANAL
        LDX #KANAL*16
        MEND
       
GET     MACRO KANAL
        KANNUM KANAL
        LDA #0
        STA ICBLL,X
        STA ICBLH,X
        LDA #CGBIN
        STA ICCOM,X
        JSR CIOV
        MEND
       
BGET    MACRO KANAL,LAENGE,BUFFER
        KANNUM KANAL
        LDA #CGBIN
        STA ICCOM,X
        LDA #LAENGE
        STA ICBLL,X
        LDA #LAENGE/256
        STA ICBLH,X
        LDA #BUFFER
        STA ICBAL,X
        LDA #BUFFER/256
        STA ICBAH,X
        JSR CIOV
        MEND
       
ADD     MACRO WORD,IMM
        CLC
        LDA WORD
        ADC #IMM:L
        STA WORD
        LDA WORD+1
        ADC #IMM:H
        STA WORD+1
        MEND

* KOALA-PIC LADEN

ADR     EQU 203
BYTE    EQU 205
L       EQU 206
H       EQU 208
MODE    EQU 209
X88     EQU 212
X89     EQU 213
       
        ORG $7800,$A800
       
        PLA
        PLA
        STA X89
        PLA
        STA X88
        CLC
        LDA X88
        STA ADR
        ADC #7679:L
        STA END
        LDA X89
        STA ADR+1
        ADC #7679:H
        STA END+1
        LDA #0
        STA X
        STA Y
        BGET 1,13,BUFF
        LDA BUFF+7
        STA MODE
        BGET 1,5,$77FB
        BGET 1,9,BUFF
LOOP    LDA #0
        STA L+1
        GET 1
        STA H
        AND #127
        STA L
        BNE NOT0
        GET 1
        STA L+1
        GET 1
        STA L
NOT0    LDA H
        AND #128
        BNE BLOCK
        GET 1
        STA BYTE
        LDY #0
LOP1    LDA BYTE
        STA (ADR),Y
        JSR INCADR
        DEC L
        LDA L
        CMP #$FF
        BNE TST1
        DEC L+1
TST1    LDA L
        BNE LOP1
        LDA L+1
        BNE LOP1
        JMP LOOP
BLOCK   GET 1
        LDY #0
        STA (ADR),Y
        JSR INCADR
        DEC L
        LDA L
        CMP #$FF
        BNE TST2
        DEC L+1
TST2    LDA L
        BNE BLOCK
        LDA L+1
        BNE BLOCK
        JMP LOOP
INCADR  JSR TEST
        LDA MODE
        CMP #2
        BEQ ZEILE
        ADD ADR,80
        INC Y
        INC Y
        LDA Y
        CMP #192
        BNE NOTU
        CLC
        LDA X88
        ADC X
        STA ADR
        LDA X89
        ADC #0
        STA ADR+1
        ADD ADR,40
        LDA #1
        STA Y
ENDI2   RTS
NOTU    CMP #193
        BNE ENDI2
        LDA #0
        STA Y
        INC X
        CLC
        LDA X88
        ADC X
        STA ADR
        LDA X89
        ADC #0
        STA ADR+1
        RTS
ZEILE   INC ADR
        BNE NOI2
        INC ADR+1
NOI2    RTS
TEST    LDA END
        CMP ADR
        BNE ENDTST
        LDA END+1
        CMP ADR+1
        BEQ ENDE
ENDTST  RTS
ENDE    PLA
        PLA
        PLA
        PLA
        RTS

X       DFB 0
Y       DFB 0
END     DFW 0

BUFF    EQU *

von atarixle » Di 15. Mai 2007, 01:45
CharlieChaplin hat geschrieben:Allgemein gibt es das format a) unkomprimiert (63 sektoren, da 62 sektoren daten und 1 sektor für den header)


Nun, Header würde ich es nicht grad nennen :-) denn diese Zusatzinformationen sitzen so ziemlich am Ende der Datei. Es sind 7680 Byte Bildschirminhalt, danach 4 Farbbytes (712, 708, 709, 710 bzw. color 0, 1, 2, 3).

von PacMan » Di 15. Mai 2007, 15:16
Hallo,

Ob man die Bildinfo-Daten nun als Header oder anders bezeichnet ist doch unwichtig.
Peter Sabath hat im CSM 3/88 einen Artikel zur Datenkompression und auch zum Aufbau des Koala Formates einiges geschrieben.

Gruß,
Steffen

von mp-one » Di 15. Mai 2007, 17:14
Hallo,

@PacMan: 1000-Dank für Deine Hilfe! Auf der ABBUC PD #583A alias Compy-Shop Magazin 3/88 steht tatsächlich ein Artikel über das Format. Klasse! Da werde ich mich jetzt mal einlesen.

@alle Helfer: vielen Dank Euch allen für die Hilfe.

Beste Grüße,

Michael

von CharlieChaplin » Di 15. Mai 2007, 23:22
atarixle hat geschrieben:
CharlieChaplin hat geschrieben:Allgemein gibt es das format a) unkomprimiert (63 sektoren, da 62 sektoren daten und 1 sektor für den header)


Nun, Header würde ich es nicht grad nennen :-) denn diese Zusatzinformationen sitzen so ziemlich am Ende der Datei. Es sind 7680 Byte Bildschirminhalt, danach 4 Farbbytes (712, 708, 709, 710 bzw. color 0, 1, 2, 3).


------------------------------------------------------

Sorry Mirko,
aber du redest von micropainter, da sitzen diese (color-) infos tatsächlich am ende. bei koala/micro-illustrator sitzen sie am anfang !! und koala/micro-illustrator haben einen etwas "längeren" header (mehr als nur 4 bytes)... Gruß - Andreas Koch

P.S.: Habe auch schon Gr. 8 und Gr. 9 Bilder gehabt, die mit koala/micro-illustrator komprimiert waren. koala scheint also nicht absolut auf gr. 15 festgelegt zu sein...

von mp-one » Mi 16. Mai 2007, 09:40
CharlieChaplin hat geschrieben:
atarixle hat geschrieben:
CharlieChaplin hat geschrieben:Allgemein gibt es das format a) unkomprimiert (63 sektoren, da 62 sektoren daten und 1 sektor für den header)


Nun, Header würde ich es nicht grad nennen :-) denn diese Zusatzinformationen sitzen so ziemlich am Ende der Datei. Es sind 7680 Byte Bildschirminhalt, danach 4 Farbbytes (712, 708, 709, 710 bzw. color 0, 1, 2, 3).


------------------------------------------------------

Sorry Mirko,
aber du redest von micropainter, da sitzen diese (color-) infos tatsächlich am ende. bei koala/micro-illustrator sitzen sie am anfang !! und koala/micro-illustrator haben einen etwas "längeren" header (mehr als nur 4 bytes)... Gruß - Andreas Koch

P.S.: Habe auch schon Gr. 8 und Gr. 9 Bilder gehabt, die mit koala/micro-illustrator komprimiert waren. koala scheint also nicht absolut auf gr. 15 festgelegt zu sein...


@CharlieChaplin:

Stimmt genau, lt. Artikel aus dem CSM 3/88 sind die Infos über die Kompression und die Farben alle in einem 26 Byte-Header zu finden. Bytes 14 bis 17 bestimmen die Farben (Reihenfolge der Farbregister: 4,0,1,2,). Headerbyte 8 gibt die Art der Kompression an: 1=spaltenweise, 2=zeilenweise (0 vermutlich ohne Kompression). Danach folgen die Bildbytes. Die Art der Kompression läuft im Prinzip so ab, dass immer Blöcke gleicher Bytes zusammengefasst werden und dann nur gespeichert wird, wie viele Bytes der gleichen Art folgen. Jeder Block wird von einem sog. Mode-Byte eingeleitet. Ist dessen Bit 7 = 0 wird bei der Dekompression ein Block n gleicher (Füll-)Bytes ausgegeben. Die Länge dieses Blocks ergibt sich aus den Bits 0-6 des Mode-Bytes. Sollte der Block jedoch länger sein als 127, steht hier eine 0 und die Angabe der Länge des Blocks folgt in den zwei folgenden Bytes im Format HIGH/LOW. Danach folgt dann das eigentliche Füllbyte, das n-mal ausgegeben wird. Ist Bit 7 des Mode-Bytes = 1, folgt nur ein einziges Füll-Byte, d.h. es konnte kein Block gleicher Bytes zusammengefasst werden. Danach folgt dann der nächste Block usw.. Bei der vertikalen Kompression (lt. Artikel CSM die weitaus häufigste Methode) wird das Ganze dann vertikal für jede zweite Zeile gemacht, weil die schachbrettartigen Füllmuster, die in diesen Programmen oft verwendet werden, sich in jeder zweiten Zeile wiederholen. Man kann mit diesem Verfahren theoretisch beliebige Inhalte komprimieren, es ist aber auf diese Art von Malprogrammen zugeschnitten. Für genauere Infos bitte den Artikel aus dem CSM lesen ("Die Datenkompression", CSM 3/88). Die obigen Angaben sind erstmal ohne Gewähr, da ich das demnächst erst programmieren werde und dann sehe, ob es im Detail stimmt.

@atarixle: Hast Du nicht bei der ABBUC-Toolsuite die Bild-Lade-Routinen gebastelt? Da müsstest Du doch auch Infos über das Koala-Format haben. Oder wird das noch nicht unterstützt?

Gruß,

Michael

von atarixle » Mi 16. Mai 2007, 18:37
CharlieChaplin hat geschrieben:P.S.: Habe auch schon Gr. 8 und Gr. 9 Bilder gehabt, die mit koala/micro-illustrator komprimiert waren. koala scheint also nicht absolut auf gr. 15 festgelegt zu sein...


Ja, klar, das ist kein Problem. Gr.15 und Gr.8 unterscheiden sich nur in der Interpretation des genau gleichgroßen Bildschirmspeichers.

Dass das Koala-Format den Header am Anfang der Datei hat, weiß ich. Ich habe in irgendeinem ANTIC-Magazin mal einen Action(?)-Quellcode zur Dekodierung gesehen, den habe ich in BASIC(!) abgetippt und er hat funktioniert ... ich werd mal schauen, ob diese Ausgabe online ist...

PS: Nein, scheint sie nicht zu sein.

von CharlieChaplin » Mi 16. Mai 2007, 21:50
Nun,
bei den Koala-Bildern scheinen nach den 26 Bytes für den header auch noch einige "Leerzeichen" bzw. mehrere Leerzeilen zu folgen, die man mit weiteren Infos über die Grafik hätte füllen können. Die Anzahl der Leerzeichen scheint bei jedem Koala-Bild genau gleich lang zu sein (habe sie aber nicht gezählt)... wie schonmal erwähnt hätte man dort wohl die grafikstufe, Auflösung in Pixel, Bildbeschreibung (titel oder sowas) und dergleichen unterbringen können - allerdings wurde es nie genutzt und so sind halt in allen Koala-bildern nur diese "Leerzeichen" nach dem header drin...

Stimmt, vertikale komprimierung ist die am häufigsten genutzte Methode für die Koala-Bilder und auch die beste Kompressionsart (atari artist und koala-pad cart. nutzen sie). Lustigerweise benutzt das Pd-Programm "Pixel Artist Deluxe" (Abbuc PD 271 und 473) die horizontale koala-Komprimierung. Alle mir bekannten Konverter aus Compute, Analog und Antic können zwar beide koala-komprimierungen laden, aber sie speichern koala nur unkomprimiert. Der Piccon 2.0 (Picture-Konverter aus Happy-Computer) lädt nur vertikal komprimierte Koala-bilder, mit unkomprimierten kann er nix anfangen (hier erscheint datenmüll) und bei horizontal komprimierten koala-bildern stürzt er ab; immerhin speichert er koala mit vertikaler komprimierung...

Genug der verwirrung, wenn man koala routinen einbaut, dann bitte so, dass zumindest alle drei arten/varianten geladen werden können; speichern kann man dann ja standardmäßig mit vertikaler komprimierung... Gruß - Andreas Koch.

von cas » Fr 25. Mai 2007, 11:26
CharlieChaplin hat geschrieben:Genug der verwirrung, wenn man koala routinen einbaut, dann bitte so, dass zumindest alle drei arten/varianten geladen werden können; speichern kann man dann ja standardmäßig mit vertikaler komprimierung... Gruß - Andreas Koch.


Ein Programm sollte beide komprimierungsarten (vertikal und horizontal) im Speicher ausprobieren und dann die Version mit der besten Komprimierung speichern.

Nach meinem Wissen macht das AtariArtist so. Bei den meisten Bildern komprimiert vertikale Programmierung besser, aber wenn man viel mit Muster-Farben (Mischfarben) (besonders im Hintergrund), dann ist horizontale Komprimierung manchmal besser.

Ciao

Carsten

von mp-one » Fr 25. Mai 2007, 11:43
cas hat geschrieben:Ein Programm sollte beide komprimierungsarten (vertikal und horizontal) im Speicher ausprobieren und dann die Version mit der besten Komprimierung speichern.


Hallo,

das ist eine gute Idee, man sollte das allerdings optional machen, weil nicht alle Viewer alle Kompressionsarten verstehen.

Michael

von mp-one » Fr 25. Mai 2007, 11:48
Hallo noch mal,

könnte mir evtl. jemand je ein unkomprimiertes, ein vertikal und ein horizontal komprimiertes Koala Bild zukommen lassen? Ich möchte die Sache demnächst mal ausprobieren. Ich schicke die Mailadresse dann per PN.

Gruß und danke,

Michael

von mp-one » Di 12. Jun 2007, 17:28
CharlieChaplin hat geschrieben:Nun, bei den Koala-Bildern scheinen nach den 26 Bytes für den header auch noch einige "Leerzeichen" bzw. mehrere Leerzeilen zu folgen, die man mit weiteren Infos über die Grafik hätte füllen können. Die Anzahl der Leerzeichen scheint bei jedem Koala-Bild genau gleich lang zu sein (habe sie aber nicht gezählt)... wie schonmal erwähnt hätte man dort wohl die grafikstufe, Auflösung in Pixel, Bildbeschreibung (titel oder sowas) und dergleichen unterbringen können - allerdings wurde es nie genutzt und so sind halt in allen Koala-bildern nur diese "Leerzeichen" nach dem header drin...


Hallo Andreas,

bisher konnte ich diese Leerzeilen bei keinem Koala-Bild finden. Mir ist es mittlerweile gelungen, die vertikale sowie die horizontale Kompression zu dekomprimieren und im Pixlator anzuzeigen. Dabei habe ich einiges an Koala-Bildern zum Test benutzt. Der Aufbau ist immer so, dass ab dem 27. Byte die Bilddaten beginnen. Aber vielleicht gibt es ja noch eine weitere Spezifikation für den Koala-Header!?

Was ich bis jetzt rausgefunden habe ist folgendes:

Header (Zählung ab 0!):
=================
- Bytes 0-6: FF 80 C9 C7 1A 00 01
- Byte 7: Modus 0=unkomprimiert, 1=vertikal, 2=horizontal
- Bytes 8-12: 0E 00 28 00 C0
- Bytes 13-17: Farben Register 708,709,710,711,712
- Bytes 18-19: verschiedene Inhalte, unbekannt
- Bytes 20-25: 00 00 9B 9B 9B 9B
- Bytes 26... : Bilddaten in "Blocks"

Daten-Blocks:
=========

Jeder Block wird von einem "Blockbyte" eingeleitet, das die Art und Länge des folgenden Datenblocks angibt:

Bit 6-0: die Länge des Blocks
- steht hier 0, so ist der Datenblock länger als 127 und die
Länge steht in den beiden folgenden Bytes (Hi/Lo)

Bit 7 = 0 : es folgt genau ein Byte, das n-mal kopiert wird
Bit 7 = 1 : es folgen n Datenbytes, die einfach übernommen werden

Dekompression:
===========
Die Kompression eines Koala-Bildes ist also im Grunde recht einfach. Das Verfahren merkt sich einfach, wieviele gleiche Bytes "vertikal in jeder zweiten Zeile" oder "horizontal nacheinander" folgen. Diese werden dann bei der Dekompression aufeinanderfolgend gezeichnet. Ist Bit 7 des Blockbytes=0 bedeutet das also, das mehrere gleiche Bytes im Bild gefunden wurden. Ist das Bit=1 enthält das Bild eine Folge von jeweils verschiedenen Bytes, die sich nicht zusammen fassen lassen.

1. Vertikal: die vertikale Kompression arbeitet spaltenweise. Dabei wird immer jede zweite Zeile gezeichnet. D.h. es werden zuerst die Bytes der Zeilen 0,2,4, ... bearbeitet. Danach folgen die Zeilen 1,3,5,... der gleichen Spalte, so dass schließlich 2x96=192 Zeilen (=eine Spalte) gezeichnet ist. Dann folgt die nächste Spalte, bis der Bildschirmspeicher voll ist.

2. Horizontal: hier werden einfach nur die Bytes entsprechend den Angaben des Blockbytes aufsteigend hintereinander in den Bildschirmspeicher kopiert.

Jetzt fehlt nur noch das unkomprimierte Format. Vermutlich ist es einfach nur der Header von 26 Byte + 7680 Datenbytes für GR. 15. Wäre klasse, wenn mir da noch jemand ein Testbild schicken könnte. PacMan hat sich ja schon ordentlich ins Zeug gelegt und mir mit Bildern sehr geholfen, vielen Dank noch mal dafür!!!

Gruß,

Michael

von robbifan » Di 12. Jun 2007, 20:29
http://www.thegang.nu/releases.php?type ... s&nomenu=1

ganged ist ein programm um bilder für den c64 in verschiedenen formaten herzustellen unter anderem auch koala unkromprimiert. mal testen.

ist eigentlich super.
mfg

von mp-one » Di 12. Jun 2007, 21:08
robbifan hat geschrieben:http://www.thegang.nu/releases.php?type=4&year=all&headline=Utils&nomenu=1

ganged ist ein programm um bilder für den c64 in verschiedenen formaten herzustellen unter anderem auch koala unkromprimiert. mal testen.

ist eigentlich super.
mfg


Hi, danke, werds mal probieren.

Michael

von PacMan » Mi 13. Jun 2007, 12:12
Hallo Michael,

Ich habe Dir auch vier unkomprimierte Bilder gemailt. Es sind 7680 Bytes für die Bilddaten und 4 Bytes für die Farbinfos.

Gruß,
Steffen

von mp-one » Do 14. Jun 2007, 14:01
mp-one hat geschrieben:
robbifan hat geschrieben:http://www.thegang.nu/releases.php?type=4&year=all&headline=Utils&nomenu=1

ganged ist ein programm um bilder für den c64 in verschiedenen formaten herzustellen unter anderem auch koala unkromprimiert. mal testen.

ist eigentlich super.
mfg


Hi, danke, werds mal probieren.

Michael


Hi robbifan,

hab das jetzt mal getestet, scheint aber nicht kompatibel zu sein. Es erscheint nur Gepixel auf dem Bildschirm. Der C64 nutzt ja 200 Zeilen vertikal. Das sollte zwar im Prinzip kein Problem sein, aber der Header scheint auch noch unterschiedlich zu sein...

Gruß,

Michael

von mp-one » Do 14. Jun 2007, 14:05
PacMan hat geschrieben:Hallo Michael,

Ich habe Dir auch vier unkomprimierte Bilder gemailt. Es sind 7680 Bytes für die Bilddaten und 4 Bytes für die Farbinfos.

Gruß,
Steffen


Hi Steffen,

jau, besten Dank dafür. Ich denke aber, dass das unkomprimierte Koala Format nicht genau das gleiche ist, wie das "normale" Micropainter Format mit 7680+4 Bytes. Die unkomprimierten Bilder, die Du geschickt hattest, haben ja das "Micropainter" Format. Ich meine, dass beim Koala-Format noch der 26 Byte Header zu finden ist und diese Bilder daher 63 Sektoren brauchen (siehe auch Bericht von Andreas weiter oben). Man müsste mal ein Programm für den ATARI finden, dass sowas schreibt. Es wäre zwar kein so effizientes Format, aber man hätte dann alles komplett.

Gruß,

Michael

von mp-one » Do 14. Jun 2007, 14:38
... so, ich habe was dazu gefunden:

Der "Rapid Graphics Konverter" aus ANTIC scheint Koala unkomprimiert zu schreiben.

Hier Links dazu:

http://gury.atari8.info/details_source_code/279.htm
http://www.atarimagazines.com/v4n7/rapidgraphicsconverter.html

Michael
1, 2