- 12V Akku mit 280 Ah bauen         
Seite 7 von 10 ErsteErste ... 56789 ... LetzteLetzte
Ergebnis 61 bis 70 von 94

Thema: GameBoy Programmierung

  1. #61
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Anzeige

    Praxistest und DIY Projekte
    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...

  2. #62
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    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
    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...
    Code:
    .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,$00,$0C,$00,$0D
    	DB	$00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
    	DB	$BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$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:
    Bild hier  
    Das kaputte (umgebaute) GB-Cartridge:
    Bild hier  
    Der Gameboy, welcher gerade ein Programm ausführt:
    Bild hier  
    Das komplett selbstgebaute Cartridge:
    Bild hier  

  3. #63
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    826
    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.

    Andun
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  4. #64
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    @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......

  5. #65
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    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?

  6. #66
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    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..

  7. #67
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    36
    Beiträge
    194
    wie ist denn die Pinbelegung von so einer Cartridge?

  8. #68
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    36
    Beiträge
    194
    hat sich schon erledigt
    ( http://marc.rawer.de/Gameboy/ )

  9. #69
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    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

  10. #70
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    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 wird der Aufbau der Memorymap des Gameboys beschrieben und hier gibts Infos zur programmierung und den MBCs, falls du dir nen Programmer selber bauen willst.

Seite 7 von 10 ErsteErste ... 56789 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress