PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GameBoy Programmierung



Thorsten
24.08.2005, 23:05
Hi,

nachdem ich hier ein- oder zwei Fragen zur Game Boy Programmierung
gelesen habe, hat mich, der uns Roboterbastlern so bekannte Forscherdrang
(oder Spieltrieb, kommt auf die Betrachtungsweise an *g*), gepackt und
ich hab mal ein bischen recherchiert:


Herausgekommen ist folgendes:

Yes, man kann einen GB relativ einfach in Assembler oder C Programmieren.
Man benötigt nur ein selbst programmiertes ROM, praktischerweise zum probieren
ein EEPROM.
Allerdings basiert ein GB Classic auf dem (lägendären) Z80 Prozessor. Das heißt
konkret:
Es gibt einen 16bit Adressbus, einen 8bit Datenbus einen Prozessor mit 4,19 MHz Taktfrequenz
(wobei der Prozessor für jeden Befehl mehr als einen Taktzyklus - anders als bei AVRs - braucht
(Typischerweise 4 pro Befehl)), keine AD - Wandler hat, kein UART (aber sowas
ähnliches) und einen! timer. Außerdem muss man sich extra einen EEPROM - Writer bauen.

Ein EEPROMs mit 512kByte gibt es für 3,50 bei Reichelt, ein AtMega16 kostet 3,95 und schlägt den
GameBoy um längen in der Rechenleistung und Peripherie.

Was macht den GB also interessant?
Er ist nicht billig, schnell oder klein - für solche Anwendungen kauft euch nen AVR- oder MSP-Board.
Aber es macht (mir zumindest) Spass mal ein richtiges Prozessorsystem mit Daten- und Adressbus
kennezulernen. Außerdem wird mindestens jeder zweite Roboter von einem AVR gesteuert, da ist ein GB
schon was besonderes. Vom Display (Der Color hat immerhin 32768 Farben) und WAF ganz zu schweigen :-)


Bevor ich jetzt aber einen Artikel über Programmierung und Hardware des Gameboys schreibe und ihn dann
keiner ließt, möchte ich erstmal wissen ob überhaupt Interesse an dem Thema besteht.

Also schreibt eure Meinung, selbst wenn ihr meint das so ein Teil niemad braucht (aber sowas würde doch niemad sagen, oder :-)


mfg
Thorsten

sep
24.08.2005, 23:41
wie schwierig ist es das ding dazu zu bringen etwas auf dem Display auszugeben? gibt es Mögliche Schnittstellen zur Aussenwelt?

Das Display würde mich wirklich interressieren, einen alten GB bekommt man doch recht günstig.

Madgyver
25.08.2005, 00:27
jupp mich würde das auch interessieren, weil GB besonders die classics bekommt man hinterher geschmießen.

Das Display würde mich am meisten interessieren.

James
25.08.2005, 06:53
Der entscheidende Vorteil von einem Gameboy im gegensatz zu nem AVR ist eben das Display und die teilweise vorhandene Tastatur. Damit kann man halt doch relativ einfach ein UserInterface machen. und vom Gameboy aus könnte man dann per I2C andere Controller vom Roboter steuern. also wenn du was über die Grafikansteuerung schreibst wär das schon super.

Bernhard

Psiyou
25.08.2005, 09:24
Hmmm,
evt keonnte man den GB als eine Art Fernbedienung fuer Befehle/Status nutzen...
Schoenes userinterface drauf und dann per Funk die Befehle zum Robie (da ist dann auch der WAF entsprechend hoch, wenn da nur ein GB im Wohnzimmer rum fligt und keine selbstgebastelte Fernsteuerung).

Rage_Empire
25.08.2005, 09:39
@PSiyou: Die idee ist klasse, gefällt mir. Vorallem wäre die fernbedienung universal:

einfach modul wechseln

gibts compiler (am besteb Basic-compiler ;-) ) und Rohmodule für das Ding?

James
25.08.2005, 09:47
Ein Modul könnten wir ja selbst entwickeln. muss ja nicht viel drauf sein. ein ROM reicht ja und dann eben noch die Übertragungshardware. funk würde ich aber erst mal außen vor lassen. für den anfang reicht auch RS232 oder I2C. das ist dann zwar mit kabel, aber um vieles einfacher.

Bernhard

Rage_Empire
25.08.2005, 09:52
Dachte an Ferbedienung über IR. Wäre doch gut realisierbar.

James
25.08.2005, 10:05
Dann geht aber auch nur sowas wie bei Fernseher. weil IrDa, womit auch bidirektionale Übertargung wie bei RS232 möglich wäre, erfordert einen sehr hohen Programmieraufwand.
man könnte allerdings schon irgendwie schaun, dass man mit IR irgendwas in beide richtungen übertragen kann, aber das wäre dann zu nix und niemanden kompatibel.
Aber ich denke, das Hauptproblem istdass man erst einmal ein vernünftiges Programm für den Gameboy schreibt. den rest kann man dann ja immer noch irgendwann implementieren.

Bernhard

Rage_Empire
25.08.2005, 10:16
Hm, Dachte an RC5 oder RC6 Codierung. Oder RS232 direkt per IR (Wäre am einfachsten). Vieleicht könnte man das SNAP dafür verwenden.
Naja, denke es wird aber nicht so einfach sein mit der Ansteuerung des Displays, da mich ich mir eher sorgen.

Hier gibts ja alles für das Ding: http://www.devrs.com/gb/software.php#appide

Rage_Empire
25.08.2005, 10:34
..sogar einen GB- Roboter:

http://www.devrs.com/gb/files/robottop.jpg

Thorsten
25.08.2005, 10:47
Ok, ich seh schon Interess besteht :-)

Werd mich mal daran machen und im Laufe des Tages mal nen Artikel
zu der benötigten Hardware beginnen. Am besten ich stell das Ding dann ins Wiki.

Vorweg:
Als Basispaltine hab ich nen Altes Spiel genommen und erstmal nen Flachbandkabel an die Kontakte gelötet, damit ich vernüftigt an den Bus komme.
Später könnte man einfach das Rom austauschen, zum basteln ist es so aber angenehmer.
Zum Display:
Es gibt nen recht ausgereiften C - Compiler.
http://gbdk.sourceforge.net/. Gibt sogar printf(), und scanf(). Also kann man das Display schon recht einfach im Textmodus ansteuern. Bei scanf() wird eine Tastatur auf dem Display angezeigt und man kann die Zeichen mit dem Joypad anwählen. Da ist die Arbeit also schon getan und man kann sich auf seine Projekte konzentrieren.
Els Einstieg dachte ich an so etwas wie Multimeter, Logicanalyzer.
Zuerst muss man aber ein Programmer für die Roms bauen, oder man bentutzt einen Simulator für die ersten Versuche.

Hier kann man sich mal die API anschauen:
http://gbdk.sourceforge.net/doc/html/files.html

mfg
Thorsten

Rage_Empire
25.08.2005, 11:20
Also programmer und Anleitungen zu den Cardrdidges gibts hier

http://www.reinerziegler.de/readplus.htm

James
25.08.2005, 12:24
Hallo!

Die seite is ja wirklich super, da findet man ja einiges. Da können wir dann ja auch selber was basteln mit den entsprechenden schnittstellen.

@Thorsten:
die idee is super. freu mich schon drauf ;-)

Bernhard

Rage_Empire
25.08.2005, 13:05
Bei Cadsoft gibts sogar ne Lib für GB-Karten. Leider habe ich nicht die neuste Eagle-vers. :-(

Psiyou
25.08.2005, 13:24
Hi,
mit Funk dachte ich eigentlich auch erst mal an RS232, und da koennen wir dann ja einfach das System von roboterhardware ranhaengen ;)
Nur mal schaun wie das mit den Platz hinhaut...
Aber Ihr habt schon recht, erst mal klein anfangen (aber man muss ja auch ein Ziel haben :) )
So werd mir jetzt erst mal Eure tollen Links anschauen....

25.08.2005, 15:51
Wieso nicht einen Gamboy Advanced?
Der hat wenigstens einen ARM drin und genügend Rechenpower, auch für Robotik. Und einen kostenlosen Gnu-C++-Compiler gibt es auch. Warum also mit dem alten Kram rumschlagen?

Rage_Empire
25.08.2005, 16:01
weils billiger ist aus schrott was zu machen. Große aufgaben kann man dem ding sowieso nicht stellen denke ich.

Rage_Empire
27.08.2005, 14:25
Habe mich mal mit dem gbdk rumgeschlagen. Ist nicht so mein fall. Ich finde Dragon Basic Besser.

Findet Ihr auf: http://db.zhilaware.starfusion.org/

...und es gibt sogar ein Forum dazu (english): http://forums.zhilaware.starfusion.org/

sebastian.heyn
29.08.2005, 10:09
Leider ist von der Seite nicht viel übrig, was dokumentation etc angeht. mir wäre basic schon lieber, weil C lernen ist auf die schnelle doch blöd. und was man mit so nem gameboy alles machen könnte ist schon geil und hat den WOW effekt, grins

Psiyou
29.08.2005, 20:07
Dann haben wir ein Problem, mir würde da C besser gefallen, hab nämlig keine Lust Basic zu lernen ;)

sebastian.heyn
30.08.2005, 09:19
im prinzip ist doch der compiler egal. der rom bzw die karte ist doch die selbe...

James
30.08.2005, 10:41
aber hier gehts ja gerade darum dass wir einen programmier kurs machen.

sebastian.heyn
30.08.2005, 10:43
OKAY, wenn wir bei null anfangen würden, dann wär ich bei C auch dabei

Rage_Empire
30.08.2005, 11:04
Hm, wenn wir von Grund auf anfangen, wäre das für mich auch kein Problem. Aber wie soll stellt ihr euch den Kurs den vor? Ein C Kurs oder ein Gameboykurs?

Psiyou
30.08.2005, 11:53
Hmm,
jetzt hab ich da wohl was losgetreten....
(Was ich eigentlich garnicht wollte).
Denke aber einen Kurs mit einfuehrung in die Programmiersprache ist nicht sinnvoll, das kostet zu viel Zeit und bring fuer das eigentliche Problem (GB) nicht wirklich was.
Wuerde halt C bevorzugen weil es Hardware naeher ist (was fuers Verstaendniss des GB ja auch nciht schlecht ist).
Wuerde vorschlagen, wir entscheiden uns entsprechend der Informationsverfuegbarkeit/Entwicklungsumgebung/Foren etc fuer ein Sprache, oder machen ein Umfrage/Abstimmung.

sebastian.heyn
30.08.2005, 13:11
also beides wäre schon cool. es gibt bestimmt viele die gerne mal c programmieren würden, aber nicht wissen wo sie anfangen sollte. könnten auch pascal nehmen, grins

James
30.08.2005, 14:11
also von nem allgemeinen Programmier-Kurs halte ich nix, weil es da eh schon viel genug und gutes gibt.
aber ein kurs der speziell die programmierung von nem gameboy behandelt würde mich schon sehr interessieren. evtl auch mit beispielen wie man die hardware ansteuert (z.B. RS232) um mit nem roboter zu kommunizieren.

Cybrix
30.08.2005, 14:22
wir können uns doch erstmal auf die Hardware speziealisieren und danach vielleicht zwei neue themen aufbauen das eine Für C und das andere für Basic das wäre doch allgemien besser! weil die hardware bleibt bei beiden gleich!

Rage_Empire
30.08.2005, 15:09
Also, daß C hardwarebezogener ist würde ich nicht unbedingt sagen. Ehrlichgesagt ist es mir egal, ob c oder basic (obwohl ich kein c kann), will einfach was mit dem ding machen können.

sebastian.heyn
30.08.2005, 15:27
basic versteht halt vom syntax doch schon eher jemand
weiss nicht wie fähig die c compile sind bzw dragonbasic

Rage_Empire
30.08.2005, 15:48
wenns erklärt wird, ists doch egal denke ich

Andun
30.08.2005, 18:38
Also ich find auch C besser, da es einfach vielfältiger und besser auszubauen ist, meiner Meinung nach.

Und für Leute, die weder C noch Basic können, ist es besser, wenn sie gleich mit C einsteigen. Da muss man zwar mehr lernen, aber es ist mMn besser.

Andun

sebastian.heyn
31.08.2005, 07:28
Ich denke das man für den anfang schon nen compiler wählen sollte, der einiges an hardware unterstützt, ohne das großer programmieraufwand notwendig ist (display, tasten, sound etc)

Rage_Empire
31.08.2005, 07:58
ich hab irgendwie das gefühl, das dieser thread vom thema abkommt.

01.09.2005, 08:35
in der tat, aber vielleicht sollten wir erstmal anfangen eine platine mit dem rom zu bauen, bevor wir über den compiler diskutieren. im endeffekt kann ja jeder für sich entscheiden, wie ers macht aber auf gameboy hätte ich schon bock.

Rage_Empire
10.09.2005, 11:06
Wollte mal nachfragen, ob sich etwas in dem sektor tut? Wenn ja, was tutu sich? Hier ist es nämlich so still

Spion
10.09.2005, 13:30
Also ich Fände es auch ganz interesant so einen Game Boy als Steuerung zu benutzen. Vor allem das Display ist ganz interesant.

Gruss Luca

Rage_Empire
10.09.2005, 15:12
Ja, grad Messtechnisch kann man mit dem Display einiges machen: Oszi, Logic-Analyzer, Spectrum-Analyzer, Mehrkanalmultimeter.....

Andun
14.09.2005, 09:33
Und womit können wir jetzt anfangen?

java-robotik
15.09.2005, 16:22
Hab das Thema nur überfolgen, aber auf den ersten Blick nichts über den XBC gefunden, das ist ein Interface aus den USA mit dem man aus einem GBA einen 32bit microcontroller für einen Bot machen kann! Äusserst interessante sache! Kann auch direkt eine Farbkamera anschließen etc. Ist in den USA momentan der Renner!

Hier mal ein paar links:

http://www.kipr.org/papers/xbc-iros05.pdf

im shop vom botball.org findet man das Interface auch! oder einfach mal googlen! (botballsotre.org is die shop adi)

http://en.wikipedia.org/wiki/XBC

sebastian.heyn
25.09.2005, 11:26
wollen wir der einfachheithalber beim "alten" gameboy bleiben? wenn wir ne cartridge hätten mit nem ROM drauf könnte man ja auch rom images drauf schreiben, um mal zu testen obs überhaupt geht. wenn ich es richtig verstanden habe dann kann der prozessor mit standard roms umgehen?

http://www.reinerziegler.de/readplus.htm#4MBit%20home

joker89
25.09.2005, 18:49
ich find die Idee klasse, vor allem mit der Fernbedienung.
Hab aber zu dem Thema keinen blassen Schimmer... aber ich würde mich sehr freuen, wenn jemand eine ANFÄNGER-Bau/Programmier-Anleitung schreiben würde.

sebastian.heyn
25.09.2005, 22:48
habe diesen link gefunden

http://marc.rawer.de/Gameboy/

finde ich echt genial beschrieben

James
27.09.2005, 21:09
Hi!

Die seite is ja wirklich super!!!
muss i morgen gleich mal genauer durchlesen!!.

Bernhard

sebastian.heyn
28.09.2005, 07:36
Soweit wie ich das verstanden habe, und wie mir das der rene ziegler geschrieben hat gibts da auch keine großen probleme mit der speicherzuordnung, adressen etc. habe mir bei ebay nen gameboy ersteigert, werde ne cartridge umbauen und erstmal sehen, ob ich n rom drauf geschrieben krieg, und das spiel dann funzt.

Bastlwastl
06.10.2005, 09:34
Ich hab mir die Links durchgelesen und finde alles sehr interessant.

Aber eine Frage habe ich noch.

Gibt es irgend eine Möglichkeit den Gameboy ohne EEProm anzusteuern?

Ist es möglich den Gameboy als reines I/O Gerät eines Mikrokontrollers zu verwenden?

Ich besitze nämlich nur einen ISP Programieradapter und möchte mir für Basteleien nicht umbedingt ein teures Programiergerät kaufen.

mfg Bastlwastl

sebastian.heyn
06.10.2005, 09:40
im prinzip schon. aber ich glaube nicht von extern.
da müsstest du an die schnittstelle zum grafiktreiber rangehen, und rausfinden, wie der angesteuert ist. passender wär jetzt wenn man über ne i/o karte mit nem kleinen programm im eeprom ne rs232 softwaremäßig emuliert und dann über rs232 ausgaben auf dem bildschirm macht. sozusagen terminal auf gameboy

Bastlwastl
06.10.2005, 10:36
Weist du eventuell ob jemand sowas schon mal gemacht hat?

mfg Bastlwastl

Rage_Empire
06.10.2005, 18:05
Ich finde auch, daß die Seite eine von den besten ist, die ich je zu diesem Thema gesehen habe.
Aber zu den Roms:
Ich habe mir schon gedacht nen Adapter vom GB-Slot zu CF-Karten zu bauen. Wäre doch dann viel besser als ständiges gebastel.

sebastian.heyn
06.10.2005, 22:06
mmhh cf karten haben ja auch daten und adressleitungen.
wie willst du denn eine cf karte beschreiben? raw mit dd unter linux?

Rage_Empire
07.10.2005, 06:42
Beschreiben kann man die über jeden Kartenslot, den es für PCs gibt. Das Problem sehe ich eher darin, die CF nicht in einem Dateisystemformat zu beschreiben, wie es Windows eben macht. Vieleicht ist hier was mit VB möglich.
Unter Linux kenne ich mich leider nicht so gut aus.

sebastian.heyn
07.10.2005, 08:04
mit dd hast du die möglichkeit rohdaten auf nen speicher zu schreiben/ zu lesen. also zb dd if=/dev/hda1 of=dateiname liesst dir die erste partition auf der ersten platte, und schreibt sie in die datei "dateiname" umgedreht geht das natürlich auch.

wenn ich das richtig verstanden habe, manipuliert dieses schreibprogramm was auf der seite benutzt wird das rom fileirgendwie beim beschreiben auf nen rom. deshalb bin ich mir nicht ganz sicher ob das auch mit ner cf karte geht. das gebamsel wird das selbe sein, ob du dir ne hardware baust oder ewig mit software rumprobierst, kommt da glaub ich aufs selbe raus. wenn ihc meinen gameboy bekommen habe werd ichs erstmal mit roms probieren, wenn das läuft kann man mit cf karten rumspielen. sonst suchst du dich dämlich nach nem fehler...

Rage_Empire
07.10.2005, 08:25
also, wenn es ein rom-file wäre, wäre es schon das richtige. und notfalls kann man noch nen avr einbringen, welcher das filesystem ausliest (AVR-DOS...gibts schon fix und fertig)

sebastian.heyn
07.10.2005, 08:47
mit filesystem würde ich nicht arbeiten, das macht alles viel komplizierter, es sollte hier eigentlich darum gehen, eigene programme für den gameboy zu schrieben, keine ansteuerung der roms.

Rage_Empire
07.10.2005, 09:48
Programme schreiben ist ja auch gut. Und dann? Willsts ja irgendwie in den GB bekommen, oder? Und da willst wirklich für jede Programmänderung ein eprom schießen? Oder mit nem Proggerät rumfummeln um nen Flash zu proggen? Sorry, aber da vergeht mir der Spaß am Coden. Epromsimulator, ok... aber den mußt auch erst mal bauen, es sei denn, du hast den schotter dafür. Und davon abgesehen, sind CF klein und recht günstig.
Nur so ne Idee von mir. Wem das zu komplex ist und lieber gefummel will, bitte. Soll ja Leute geben die lieber mit dem Lötkolben arbeiten, statt Tastatur.

sebastian.heyn
07.10.2005, 10:20
also über nen flash mach ich mir keine sorgen.
steckst die fertig aufgebaute karte in nen adapter (bei ebay - wo man GB spiele auf nem NES spielen kann) und dann gehts los mit dem flashen. das ist nicht umständlicher als die CF rauszuziehen, und irgendwo zu beschreiben.

Rage_Empire
07.10.2005, 15:01
Auch ne gute Seite:

http://www.console-dev.de/

11.10.2005, 07:17
Leute, lernt auf jeden Fall aus der Erfahrung anderer gemeinschaftlicher Projekte.
Die meisten werden nie was, weil nur gelabert wird. Klar möchte jeder seine Ideen berücksichtigt haben, aber zu den meisten lassen sich pro und contra Argumente finden.
Deshalb setzt Euch lieber einen Stichtag, zu dem die erste Bastelei stehen muß. Hinterher kann man immer noch vieles oder gar alles ändern, wenn die ersten Erfahrungen vorhanden sind.
Bedenkt immer, daß das kein Industrieprojekt ist, bei dem im ersten Anlauf möglichst alles stimmen muß!

11.10.2005, 07:19
Achja, macht das so rechtzeitig, daß die Weihnachtsferien für die Experimente genutzt werden können ;)

sebastian.heyn
11.10.2005, 08:36
habe mir erstmal bei €bay nen gameboy ersteigert. da bist de mit 15euronen schon dabei... Bin ihc mal gespannt. werde mir bei der nächsten reichelt-bestellung nen flash mitbestellen und dann mal probieren...
Sollte es laufen, werde ich mal ne platine entwerfen... die idee mit dem i/o controller drauf gefällt mir zunehmend...

enoritz
30.10.2005, 09:19
Hallo Leute,

ich arbeite momentan an einem Projekt, welches mit dem Gameboy zu tun hat. An diesem Projekt arbeite ich jetzt seit ca. 2 Monaten (BLL im Fach Informatik) und da ich jetzt erst auf diese Thema hier gestoßen bin wollte ich jetzt einfach mal meine Erfahrungen zum Thema hier schreiben.

Ich habe damit angefangen mich über die Gameboy-Hardware schlau zu machen. Dabei waren die meisten hier aufgezählten Seiten, die bisher echt hilfreich waren. Das Ergebnis war, wie hier auch schon bemerkt, die eingeschränkte Rechenleistung des Classic-GBs, allerdings auch der enorme Vorteil eines Timers, eines Displays, eines parallelen und seriellen Ports, die schon vorhandene (Mini-)Tastatur und einiges mehr.
Die meisten Spiele des Gameboys basieren auf einen (von Nintendo entwickelten) Memory Bank Controller, bei dem es gar nicht so leicht ist ihn anzusteuern (Vorteil ist natürlich die Anhebung der ROM-Größe von 32KB auf bis zu 2MB, sowie auch des RAM).

Meine bisherige Hardware zum auslesen bestand daher aus einem AT90S2313 der mittels zweier 8Bit-Datenlatches den Address-Bus setzen und den Daten-Bus direkt über einen 8Bit-Port am Controller auslesen kann.
Damit habe ich es dann schonmal geschafft ein altes Gameboy-Cartridge auszulesen (Kwirk, Snoopy's Magic Show, ...).
Probleme gabs wie gesagt, bei dem MBC auf den Cartridges (Einteilung in 16KB-Speicherblöcke). Bei den MBC-Karten hab ich immer nur den ersten Speicherblock auslesen können. Die nächsten Blöcke waren nur Wdh. des ersten Blocks. (Wird wohl irgendwann noch klappen - Falls es bei einem von euch klappt bitte schreien und bescheid sagen...).

Beflügelt von diesem Erfolgsergebnis hab ich mir dann mein erstes GB-Modul selbst gebastelt: Ein altes Spiel auseinander genommen, Litze an die Kontakte gelötet und daran ein 32KB-EEPROM angeschlossen, weil ich dies komplett durchaddressieren kann ohne einen anderen IC benutzen zu müssen - Problem: Dieses Modul ist mir komplett auseinander gefallen...(Bild davon folgt)
Es scheint mir also nur sinnvoll (allein) das ROM zu ersetzen und den Rest beizubehalten - mehr RAM ist ja auch sehr praktisch....
Da ich meine weiteren Spiele also nicht auch noch zerhacken wollte hab ich mir Eagle geschnappt und mir ne eigene kleine Platine zusammengeklickt - zwar eher schlecht als recht aber sie funktioniert - und ausgefräst (Das war bisher die erste Platine bei der es richtig funktioniert hat ... noch ein Erfolg...).. Naja mehr brauch ich dazu nicht sagen... Bilder sind unten weiter...

Also hab ich den AVR-Controller so umprogrammiert, damit er jetzt auch ROMs beschreiben kann. Ein ausgelesenes ROM (Kwirk) aufgespielt und siehe da.. es funktioniert....


Jetzt kommt mein Projekt für die Schule: (eine Entwicklungsumgebung für den GB)
Der Assembler (bisher von der E. fertig)... Hmm, da ihr ja auf bestehende Software zurückgreifen wollt vlt. nicht ganz so interessant aber ich will jetzt ja auch ein bisschen angeben :cheesy: :cheesy: :cheesy:
Ohne genug Planung wird so etwas natürlich nichts... Das musste ich selbst auch merken, deswegen ist die erste Version komplett in den Papierkorb geflogen und wurde komplett neu aufgesetzt (Mit nem ausreichenden Konzept, usw.). Damit hab ich dann immerhin schon mein erstes Programm geschrieben...


.CODEDEFINITION "GB.inc"

.equ StackTop = $FFFE

RST_00:
jp Main
DS 5
RST_08:
jp Main
DS 5
RST_10:
jp Main
DS 5
RST_18:
jp Main
DS 5
RST_20:
jp Main
DS 5
RST_28:
jp Main
DS 5
RST_30:
jp Main
DS 5
RST_38:
jp Main
DS 5
jp irq_VBlank
DS 5
jp irq_LCDC
DS 5
jp irq_Timer
DS 5
jp irq_Serial
DS 5
jp irq_HiLo
DS 5

.org $100


nop
jp Main

DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$0 0,$0C,$00,$0D
DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$D D,$DD,$D9,$99
DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$B B,$B9,$33,$3E

;0123456789ABCDEF
DB " "
DB 0,0,0 ;SuperGameboy
DB 0 ;CARTTYPE
;--------
;0 - ROM ONLY
;1 - ROM+MBC1
;2 - ROM+MBC1+RAM
;3 - ROM+MBC1+RAM+BATTERY
;5 - ROM+MBC2
;6 - ROM+MBC2+BATTERY

DB 0 ;ROMSIZE
;-------
;0 - 256 kBit ( 32 kByte, 2 banks)
;1 - 512 kBit ( 64 kByte, 4 banks)
;2 - 1 MBit (128 kByte, 8 banks)
;3 - 2 MBit (256 kByte, 16 banks)
;3 - 4 MBit (512 kByte, 32 banks)

DB 0 ;RAMSIZE
;-------
;0 - NONE
;1 - 16 kBit ( 2 kByte, 1 bank )
;2 - 64 kBit ( 8 kByte, 1 bank )
;3 - 256 kBit (32 kByte, 4 banks)

DW $0000 ;Manufacturer

DB 0 ;Version
DB 0 ;Complement check
DW 0 ;Checksum

; --
; -- Initialize the Gameboy
; --

main:
di ;Disable Interrupts
.wait: ;Wait for V_Blank
ld a,[$FF44] ;LY LCDC compare
cp a,144
jr nc,.wait

ld a,0
ld [$FF40],a ;lcdc

ld a,%11100100 ;set palette to normal
ld [$FF47],a

ld a,0
ld [$FF42],a ;set the scrollx and scrolly
ld [$FF43],a

call clearscreen

ld hl,tiledata
ld de,$8000
ld bc,4096
call ldir ;defined lower in the source..

ld hl,tilemap ;tile map
ld de,$9800
ld bc,1024 ;size of the tilemap
call ldir

ld a,%00000001 ;Enable VBlank-Interrupt
ld [$FFFF],a

ld a,%10010001
ld [$FF40],a ;turn the screen on
ei ;Enable Interrupts
; --
; -- mainloop does nothing
; --
mainloop:
jp mainloop ;neverending loop


; --
; -- clearscreen emties the gb-screen
; --
clearscreen:
ld hl, emptyspace
ld de,$9800
ld bc, 1024
call ldir
ret


; --
; -- ldir - Copies a specified memory-location to another location
; -- Parameters:
; -- - hl: Source
; -- - de: Destination
; -- - bc: Count
ldir:;there is no ldir command
.ldir:
ld a,[hl]
inc hl
ld [de],a
inc de
dec bc
ld a,c
or a,b
jr nz,.ldir
ret

tilemap:
;.include "fontmap.inc"
db "Hallo Roboternetz..............."
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"
db "................................"

tiledata:
.include "ibmfont.inc"

; --
; -- Some interrupts
; --

irq_VBLANK:
;ld a,[$FF43]
;inc a
;ld [$FF42],a ;set the scrollx and scrolly
;ld a,104
;ld [$FF43],a
reti
irq_LCDC:
reti
irq_Timer:
reti
irq_Serial:
reti
irq_HiLo:
reti

emptySpace:
ds 1024


Ich weiß ja nicht genau inwieweit ihr euch mit dem GB beschäftigen wollt, aber die Hardware ist echt faszinierend. Steuerungstechnisch auch: Es gibt echt viel Zusatzhardware mit der man super am GB arbeiten kann (z.b. eine Tastatur am seriellen Port des GBs). Am parallelen Port kann man eigentlich soviel machen wie man will.(Ein Software-I2C Bus sollte ja nicht allzuschwer sein...) Von den erweiterung ganz zu schweigen... man muss nur die Ideen alle umsetzen können. Wem der Classic-GB zu langsam ist, kann ja auf den GBA ausweichen. Der ist um einiges schneller und hat ein super Display...

Soviel erstmal von mir... Wer fragen hat kann sie stellen...

Hier mal einige Bilder:

Der Schreiberling:
http://www.friseurtebbe.de/historie-Dateien/gameboy001.jpg
Das kaputte (umgebaute) GB-Cartridge:
http://www.friseurtebbe.de/historie-Dateien/gameboy002.jpg
Der Gameboy, welcher gerade ein Programm ausführt:
http://www.friseurtebbe.de/historie-Dateien/gameboy003.jpg
Das komplett selbstgebaute Cartridge:
http://www.friseurtebbe.de/historie-Dateien/gameboy004.jpg

Andun
30.10.2005, 17:48
Woooow. Krass!

Du hast ja wirklich schon was geschafft! Das ist echt mal ein guter Antrieb . . .

Also wenn ich dann mal irgendwann Zeit habe, ein neues Projekt anzufangen, dann wird auf jeden Fall der GB ausgebuddelt. :D

Andun

sebastian.heyn
01.11.2005, 11:13
@enoritz: weisst du ob man die rom files die man im netz findet einfach in ein rom programmieren kann? (oder sind die anders adressiert irgenwie?)ich habe einen Flash-Hoschi der die roms beschreiben kann. (standard eeprom programmer) aber bevor ich anfange an der falschen stelle nach fehlern zu suchen......

enoritz
01.11.2005, 13:58
Also wenn du ein simples 32KB-ROM auf ein ROM schreiben willst, ist das gar kein Problem. Bei den MBC-Cartridges (ROM>32KB) bin ich mir nicht ganz sicher, sollte allerdings auch funktionieren. Ich würds mal in nem Emulator (no$gmb z.B.) testen. Wenns dort fehlerfrei läuft, wird es wohl auch auf nem GB funktionieren.
Wie groß ist denn das ROM, dass du aufspielen möchtest?

sebastian.heyn
01.11.2005, 14:53
habe ein 512k eeprom (29f040b-90) das werde ich auf ein Marioland-2 cartridge bauen.

die größe des roms wiss ich ned, müsst ich mal schauen, habe einige liegen. auf der cartridge ist ein MBC drauf. der neue rom wird anstelle des alten 1zu1 montiert (reinerziegler.de) ich frage mich halt nur, ob ich die roms auch auf nem stino-progger brennen kann, oder ob ich einen brauche der mit dem mbc umgehen kann..

skillii
01.11.2005, 22:12
wie ist denn die Pinbelegung von so einer Cartridge?

skillii
01.11.2005, 22:33
hat sich schon erledigt :)
( http://marc.rawer.de/Gameboy/ )

PICture
01.11.2005, 23:11
Hallo!
Ich will auch dabei sein. Möchte handheld Speicherosci bauen, also wegen Display und RAM. Kann den Z80 in ASM programmieren, was für schnelle Bildschirmausgaben nutzlich wäre.
MfG

enoritz
02.11.2005, 17:55
Also wenn das Cartridge von Marioland2 benutzt wirst du wohl nich umhin kommen einen Programmer dafür zu verwenden, der mit den MBCs umgehen kann.

Hier (http://fms.komkon.org/GameBoy/Tech/Software.html) wird der Aufbau der Memorymap des Gameboys beschrieben und hier (http://www.emulatronia.com/doctec/consolas/gameboy/gameboy.txt) gibts Infos zur programmierung und den MBCs, falls du dir nen Programmer selber bauen willst.

bug_er
05.12.2005, 17:28
nabbend habe das hier mal ganz genau verfolgt
erstens existiert diese projekt noch ?????
zweitens wäre es möglih mit einem gameboy temperaturen auszulesen ??? und auf dem display anzuzeigen ???
hate da an einen DS1621 mikrokontroler gedacht
http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/176150-da-01-en-DS1621_Temperatursensor.pdf<-schaut ihr hier[/url]
der vorteil bei einem solchen kontroler
er brauch keinen a/d wandler
er besitzt einen speicher
der temperaturmessbereich entspicht meinen wünschen =P~

mfg bug_er

enoritz
05.12.2005, 18:50
Also für mich existiert das Projekt noch. Ich bin momentan dabei einen Pascal-Slang für den Gameboy zu entwickeln. Bin nur momentan noch am überlegen, wie ich am besten Code-Erzeugung/-Optimierung realisiere (Einen höchst unoptimierten Code kann schon erzeugt werden).

Naja...
Temperaturen messen ist möglich. Soweit es scheint kann der von dir genannte Controller mit dem geeigneten Programm über die serielle Schnittstelle mit dem Gameboy kommunizieren. Das größere Problem ist, ein Cartridge zu basteln. Das ist bei der ganzen Geschichte die größte Arbeit....

bug_er
05.12.2005, 19:29
ahja
was willst du mit dem gb steuern ????
ist es möglich motoren zu steuern ???

welchen serial port meinst du
weis irgendwer wieviel bit übertargung das teil hat ??

enoritz
05.12.2005, 19:49
Der Gameboy hat einen parallelen und einen seriellen Port. Mit dem seriellen Port kannst du z.b. über nen konverter eine verbindung zum pc aufbauen....

Ansteuern kann man mit dem gameboy ja eigentlich alles... ist halt abhängig davon wie leistungsfähig das ganze sein soll... der gb hat nämlich nur eine 8bit-Architektur mit 4MHz Taktfrequenz... Für spielereien ausreichend. Motoren sollten auch gehn....

Es gibt ja ne Menge Beispiele für die Anwendung ... Bei Google findet sich da einiges....

bug_er
05.12.2005, 20:41
das bedeutet wenn der gameboy ne 8 bit strucktur hat das er aufgebaut ist in dem sinne eine parallelports ???
das bedeutet ich werde mich mal dransetzten und einen Cartridge basteln
(ich versuche es aufjeden fall)

bug_er
05.12.2005, 21:25
ok fal es wen interessiert ich habe zu meinem temperatursensor ne andere anleitunge gefunden
zu finden ist die hier
http://home.wtal.de/Mischka/Temperaturschreiber/

kann ich die auf meinem ds1621 kontroler umschreiben ?????
oder ist dies nicht möglich ??

sebastian.heyn
06.12.2005, 07:41
hast du schonmal was programmiert?

also erstmal bevor du anfängst mit dem gameboy und temperatursensoren rumzufuchteln kannst du ja mal nen gameboy emulator ziehen und versuchen ein programm drauf zum laufen zu bringen
(und bring zeit mit, grins)

bug_er
06.12.2005, 16:30
jop programmiert habe ich schon allerdings nur mit labview sonst html und ein bischen VB
das ich zeit brauche das ist mir klar ;)
aber von nichts komt nichts

wollte es jetzt mal mit C probieren

skillii
14.12.2005, 15:49
weiß jemand ob das mit einem GB-Color auch so einfach geht?

Bastlwastl
15.12.2005, 09:37
Mich würde interresieren was ich machen muß um mit einem AVR(z.Bm ATmega8) direkt den Gameboy ansteuern zu können.

Denn um sich in die Rom-programiererei einzuarbeiten und sich die ganze Hardware dafür zu besorgen fehlt mir irgendwie der notwendige Entsiassmus.

skillii
15.12.2005, 20:03
genau so gehts mir auch...

Ich werde es jetzt einmal mit einem SRAM statt einem ROM probieren, weil ich daheim kein Eprom-Schreibgerät habe und EEPROMS mit 32kx8 sind mir zu teuer (die kosten ja über 4 €) und ich bin leider nur ein armer Schüler :(.
mit SRAMS könnte es zwar sein, dass es etwas unpraktisch wird aber funktionieren wirds schon :)

Bastlwastl
16.12.2005, 11:44
Kannst du deine Ergebnisse bekannt geben?

Dass würde sicher mehrere Leute interessieren.

skillii
16.12.2005, 15:27
Ich komme erst frühestens in den Weihnachtsferien dazu...
Heute ist noch eine gröbere Vernichtung angesagt! :D (Weihnachtsfeier)

aber ich kann die Ergebnisse gerne posten...

tamp
16.12.2005, 16:05
Ich habe auch interesse, aber nur wenn wir c benutzen

War-Tux
16.12.2005, 20:34
hihi

skillii hab ich dich wieder auf was gebracht :P
hmm mal suchn aber ich hab da irgendwo ein projekt mit compiler ! meld dich mal ich geb ihn dir dann

War-Tux
17.12.2005, 14:28
http://gbdk.sourceforge.net/

damit ihn alle haben :)[/fliph]

snatcher
19.12.2005, 17:01
wir hier irgendwann weitergemacht ?
das gameboy - zeugs würde mich sehr interessieren :)

shuttlesn85g4
15.01.2006, 11:58
Kling ja sehr interessant das Ganze.
Hat schon jemand mit dem Gameboy was gemacht?

Zum glück habe ich meinen GB Pocket noch :)

Wer sich für ie GB Programmierung interessier sollte mal Folgende Seite ansehen :
RobSite (http://www.robsite.de/tutorials.php?tut=gameboy)

enoritz
24.02.2006, 19:16
So, hier nochmal ein wenig zum Angeben: O:) O:)


program test;

procedure move(src, dst, count: Integer); {$ filename='move.gbasm' $};
procedure fillchar(dst: Integer; chr: byte; count: Integer); {$ filename='fillchar.gbasm' $};
procedure waitforvblank; {$ filename='waitforvblank.gbasm' $};
function buttonstate: Integer; {$ filename='buttons.gbasm' $};
procedure rs232send(b: Char); {$ filename='rs232_send.gbasm' $};
function rs232read: Byte; {$ filename='rs232_read.gbasm' $};
procedure IntToStr(pValue, pOffset: Integer); {$ filename='inttobcd.gbasm' $};

var sec,min,hou,cnt: byte;

procedure inttimer; interrupt = 'TIMER';
begin cnt:=cnt+1; end;

procedure intvblank; interrupt = 'V-BLANK';
begin IntToStr(hou,$9883); IntToStr(min,$9886); IntToStr(sec,$9889); end;

begin
cnt:=0;
sec:=50; min:=43; hou:=19;
mem[$FFFF]:=%00000101;
mem[$FF06]:=-250;
mem[$FF07]:=4;
waitforvblank;
fillchar($9800,32,1024);
mem[$9884]:=':'; mem[$9887]:=':';
mem[$988A]:='U'; mem[$988B]:='h'; mem[$988C]:='r';
while true do
begin
if cnt = 16 then begin cnt:=0; sec:=sec+1; end;
if sec = 60 then begin sec:=0; min:=min+1; end;
if min = 60 then begin min:=0; hou:=hou+1; end;
if hou = 24 then begin hou:=0; end;
end;
end.

Folgendes Bild verdeutlicht den Sinn des Programms vlt. mehr als der Pascal-Code. Jedenfalls hab ich es mit meinem Pascal-Compiler geschrieben, wofür ich gerade einige Funktionen schreibe um das Programmieren zu vereinfachen.
Was leider noch nicht funktioniert sind Strings (wird aber bald auch unterstützt), wie man unschwer am Wort "Uhr" erkennen kann.

Ist vieleicht ne Motivation für andere Leute sich näher mit dem Gameboy zu beschäftigen, man hat hier ja leider schon etwas länger nichts mehr gehört...

Hat jemand vlt. noch ein par Ideen, was man mit dem seriellen Port so machen könnte? Ich bin noch auf der Suche nach fuchsigen Schaltungen...

super_castle
25.02.2006, 20:15
ist ja nicht viel was da rauskommt..he

sebastian.heyn
27.02.2006, 08:13
He geil,
was für einen Pascal compiler nutzt du? einen selbst programmierten??

enoritz
01.03.2006, 21:10
Ja. Den Compiler schreibe ich momentan selbst (ist ein Schulprojekt).

Momentan bin ich dabei einen Messvorsatz für den Gameboy zusammenzulöten. Nur leider funktioniert der Mega8 nicht so recht (jedenfalls das Programmieren per ISP), ein AT90S2313 kann allerdings schon mit dem GB reden.

sebastian.heyn
02.03.2006, 07:25
mmhh, hat es schonmal funktioniert (mega8) oder will er auf einmal nicht mehr? wie hast du den reset eingang beschalten? mit nem RC glied? wenn ja wie dimensioniert?

spider84
20.06.2006, 19:06
ich interessier mich auch für GB-Programmierung mit dem Hintergedanken irgendwann halt auch mal Robots oder externe Dinge damit ansteuern zu können. Für den Anfang würds mir aber reichen wenn ich einfach Spiele auf n Flash machen könnt und wie in den guten alten Zeiten spielen...
Meiner Meinung nach müsste mit dem GB auch noch einiges gehn wenn ich dran denke was sich in Super Mario alles bewegt (+Hintergrund+Musik).

C lern ich grad, VB und Delphi kann ich schon.
also interesse is da. - wollt's nur gesagt haben, bevor das hier noch ganz ausstirbt.