GBA F2A Multiboot
Übersicht

![]() |
VertexBetreff: GBA F2A Multiboot |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Die wenigsten werden wissen, für was das sein soll. Nun wer für den GameBoy Advanced einen Flash2Advance USB Flash-Linker besitzt, sei es mit Cartride oder ohne, kann direkt per Multiboot, ROMs auf dem GBA ausführen lassen. Aufgrund dessen, dass ich schonmal Daten zum GBA transferieren kann, will ich versuchen, 2 GBAs per Internet zu verbinden. So das Multiplayerspiele weltweit möglich sind(unterstützen nicht einmal die Emulatoren). Naja jedenfalls braucht das ding den EZUSB Treiber von Cypress. EZUSB.bmx Code: [AUSKLAPPEN] Strict
Type TVendorRequestIn Field bRequest:Byte Field shValue:Short Field shIndex:Short Field shLength:Short Field bDirection:Byte Field bData:Byte End Type Type TBulkTransferControl Field iPipeNum:Int End Type Const GENERIC_READ = $80000000 Const GENERIC_WRITE = $40000000 Const FILE_SHARE_READ = $00000001 Const FILE_SHARE_WRITE = $00000002 Const OPEN_EXISTING = $00000003 Const INVALID_HANDLE_VALUE = -1 Const BULK_IN_PIPE = $00000002 Const BULK_OUT_PIPE = $00000003 Const COMMAND_SIZE = 13 Const IOCTL_EZUSB_BULK_READ = $0022204E Const IOCTL_EZUSB_BULK_WRITE = $00222051 Const TARGET_INIT = $000000FF Const TARGET_DOWNLOAD = $00000000 Const BLOCK_SIZE_ULA = $00000800 Extern "Win32" Function apiCreateFile:Int(sFileName$z, iDesiredAccess:Int, iShareMode:Int, .. pSecurityAttributes:Byte Ptr, iCreationDistribution:Int, .. iFlagAndAttributes:Int, iTemplateFile:Int) = "CreateFileA@28" Function apiDeviceIoControl:Byte(iDevice:Int, iIoControlCode:Int, pInBuffer:Byte Ptr, .. iInBufferSize:Int, pOutBuffer:Byte Ptr, iOutBufferSize:Int, .. ipByteReturned:Int Ptr, pOverlapped:Byte Ptr) = "DeviceIoControl@32" Function apiCloseHandle:Byte(iObject:Int) = "CloseHandle@4" End Extern Function SetCmdToULA:Int(iEZUSB, bCommand:Byte, iP1:Int, iP2:Int, iP3:Int) Local tBulkControl:TBulkTransferControl, tULABuffer:tBank, iBytes:Int tBulkControl = New TBulkTransferControl tBulkControl.iPipeNum = BULK_OUT_PIPE tULABuffer = CreateBank(COMMAND_SIZE) PokeByte tULAbuffer, 0, bCommand PokeInt tULABuffer, 1, iP1 PokeInt tULABuffer, 5, iP2 PokeInt tULABuffer, 9, iP3 Return apiDeviceIoControl(iEZUSB, IOCTL_EZUSB_BULK_WRITE, tBulkControl, SizeOf(tBulkControl), .. BankBuf(tULABuffer), COMMAND_SIZE, Varptr iBytes, Null) End Function Function SendULA:Int(iEZUSB, pBuffer:Byte Ptr, iSize:Int) Local tBulkControl:TBulkTransferControl, tULABuffer:tBank, iBytes:Int tBulkControl = New TBulkTransferControl tBulkControl.iPipeNum = BULK_OUT_PIPE Return apiDeviceIoControl(iEZUSB, IOCTL_EZUSB_BULK_WRITE, tBulkControl, SizeOf(tBulkControl), .. pBuffer, iSize, Varptr iBytes, Null) End Function GBANet.bmx Code: [AUSKLAPPEN] Strict
Import "EZUSB.bmx" Print "> Turn GBA off!" If Not DownloadFirm("boot.firm") Then Delay 2000 ; End EndIf Delay 2000 ; MultibootGBA("test.mb.gba") DownloadFirm("close.firm") Print "Finished" Delay 2000 ; End Function DownloadFirm:Int(sFile:String) Local iDevice:Int, iEZUSB:Int, tVReq:TVendorRequestIn, iBytes:Int Local bResult:Byte, tBuffer:TBank If FileType(sFile) <> 1 Then Return False For iDevice = 0 To 3 iEZUSB = apiCreateFile("\\.\ezusb-"+iDevice, GENERIC_WRITE, FILE_SHARE_WRITE, .. NULL, OPEN_EXISTING, 0, NULL) If iEZUSB <> INVALID_HANDLE_VALUE Then Exit Next If iEZUSB = INVALID_HANDLE_VALUE Then Print "Can't find EZUSB" Return False EndIf tVReq = New TVendorRequestIn tVReq.bRequest = $A0 tVReq.shValue = $7F92 tVReq.shIndex = $00 tVReq.shLength = $01 tVReq.bData = 1 tVReq.bDirection = $00 ' VendorRequestCode = $222014 bResult = apiDeviceIoControl(iEZUSB, $222014, tVReq, SizeOf(tVReq), Null, 0, .. Varptr iBytes, Null) If bResult = False Then apiCloseHandle(iEZUSB) Print "EZ-USB halt error" Return False EndIf ' AnchorDownloadCtl = $22201C tBuffer = LoadBank(sFile) bResult = apiDeviceIoControl(iEZUSB, $22201C, BankBuf(tBuffer), BankSize(tBuffer), .. Null, 0, Varptr iBytes, Null) If bResult = False Then apiCloseHandle(iEZUSB) Print "EZ-USB firmware download error" Return False EndIf ' VendorRequestCode = $222014 tVReq.bData = 0 bResult = apiDeviceIoControl(iEZUSB, $222014, tVReq, SizeOf(tVReq), Null, 0, .. Varptr iBytes, Null) If bResult = False Then apiCloseHandle(iEZUSB) Print "EZ-USB run error" Return False EndIf apiCloseHandle(iEZUSB) Return True End Function Function MultibootGBA(sFile:String) Local iDevice:Int, iEZUSB:Int, tBuffer:TBank, iSize:Int, iOffset:Int If FileType(sFile) <> 1 Then Return False Print "Connecting to GBA..." For iDevice = 0 To 3 iEZUSB = apiCreateFile("\\.\ezusb-"+iDevice, GENERIC_WRITE, FILE_SHARE_WRITE, .. NULL, OPEN_EXISTING, 0, NULL) If iEZUSB <> INVALID_HANDLE_VALUE Then If SetCmdToULA(iEZUSB, TARGET_INIT, 0, 0, 0) Then Exit Else apiCloseHandle(iEZUSB) EndIf EndIf Next If iEZUSB = INVALID_HANDLE_VALUE Then Print "Can't find EZUSB" Return False EndIf tBuffer = LoadBank(sFile) iSize = BankSize(tBuffer) Print "> Turn GBA on" Print "> Press Select+Start!" SetCmdToULA(iEZUSB, TARGET_DOWNLOAD, 0, iSize, 0) While iOffset < iSize If (iSize-iOffset) Mod BLOCK_SIZE_ULA = 0 Then SendULA(iEZUSB, BankBuf(tBuffer)+iOffset, BLOCK_SIZE_ULA) iOffset = iOffset+BLOCK_SIZE_ULA Else SendULA(iEZUSB, BankBuf(tBuffer)+iOffset, (iSize-iOffset) Mod BLOCK_SIZE_ULA) iOffset = iOffset+((iSize-iOffset) Mod BLOCK_SIZE_ULA) EndIf Print Int((Float(iOffset)/Float(iSize))*100.0)+"% sendet" Wend Delay 100 apiCloseHandle(iEZUSB) Return True End Function Die Dateien mit Beispiel gibt es unter http://vertex.art-fx.org/GBA-Net.zip mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Xenon |
![]() Antworten mit Zitat ![]() |
---|---|---|
nice work, werde mir das morgen ansehen (ok eigentlich nach dem schlafen halt) weils jetzt schon recht spät is, kann zwar kein bmax, aber das interessiert mich trotzdem, da ich die nötige hardware habe ![]() |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke!
Xenon: Wenn du Executables brauchst, kann ich sie dir hochladen. ShadowTurtle: Hmm wäre mir eigentlich neu, das der VBA Multiplayersupport hätte. Das GDB ist m. M. nach ein Debugger, aber ich kann mich natürlich auch irren. Ansonsten wird es natürlich Serverlisten geben. Mal schauen ob ich mal eine kleine Multiboot ROM programmiere, die sich selbst verschicken kann. Ein GBA kann ja auch mit Linkkabel einen anderen GBA, ohne PC, eine Multiboot-ROM ausführen lassen. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß jetzt, warum ich noch keine anderen ROMs senden konnte. Die, die ich ausprobiert hatte, hatten den GBA header schon drin. Wenn ich selber versuche eine ROM zu programmieren, fehlt dieser Header. Also mus sich noch etwas daran rumbasteln, damit alle ROMs versendet werden können.
mfg olli |
||
vertex.dreamfall.at | GitHub |
xperience2003Betreff: .... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] GBAs per Internet zu verbinden. So das Multiplayerspiele weltweit möglich sind(unterstützen nicht einmal die Emulatoren). ...vertex, du wirst immer krasser ![]() mach weiter so |
||
-digital art since 1990- |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
vertex is sowieso n kewler typ ^^
haut coole sachen raus und spammt nicht. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group