Tutorial compilación XBOX 360

Bueno como os prometi aqui teneis mi manual para compilar cosillas para nuestras maquinas, he tardardado un poco mas de la cuenta, porque estube entretenido pasado mi jasper a freeboot :-) y viciando un poco todo sea dicho.

Requisitos previos:
Una xbox xbox con jtag (obvio si queremos probar lo que compilemos)
Un pc con windows, yo use win7 64bit (jejejeje)
Microsoft Visual Studio 2005, muy importante que tenga instalada la actualización a SP1 sino el SDK no tirara
XBOX 360 SDK 7645.1 Bueno el unico al que tenemos acceso de hecho :-)


Este sera vuestro entorno de trabajo por muchas horas si decidis meteros en el tema, visual estudio 2005 sp1:

Imagen

He omito la instalación del visual studio, quizas tb habria que haber omitido la del SDK, pero gueno aqui teneis al pequeñin listo para q lo instalemos:

Imagen

Pantalla de bienvenida, explicando el contenido del paquete, y que nos ocupara unos 2,7gb en disco, no creo q sea un problema para nadie hoy en dia :-)

Imagen

Aqui unas explicaciones preciosas de que conectemos nuestro XDK a una television (Que mas quisieramos), gueno explica un poco los pasos a seguir para la isntalacion de to2.

Imagen

Aqui seleccionamos el tipo de instalación que queremos hacer, repito es muy importante tener instalado el visual studio 2005 sp1 antes de instalar el SDK sino no nos permitira hacer la instalación full que es la que de verdad nos interesa.

Imagen

Aqui otra captura ya en el proceso de instalación:

Imagen

Y ya a termiando, esta parte es graciosa porque hace referemcia a q veamos las notas de la versión del sdk pero solo estan disponibles online, con clave valida de desarrollador :-), microsoft haciendo imagen de marca, no podrian mandar las release notes tb, lo peor es q pasa lo mismo con la documentación, la mayor parte solo esta disponible online, en la versión que tenemos, la documentación es un fichero de ayuda de windows con 4 tips, asi que si queremos aprender a desarrollar para la 360 no nos queda otra que aprender con ejemplos y como se ha esho desde los inicios de la informatica, prueba y error.

Imagen

Aqui podemos ver lo que se nos instala con el sdk, algunos ya conocereis las utilidades para modificar skins, o crear archivos de audio, o modificar los marcadores de los xex, pero al ser la instalación completa esta lo mas importante, los ejemplos de desarrollo, muchos ejemplos de todo tipo y sobre todo, comentados en perfecto ingles eso si, pero muy bien comentados, yo no suelo comentar tanto mis codigos :-)

Imagen

Aqui podeis ver el source del freestyle 1.20, como veis esta desarrollado en c++ , o dicho de otro modo c orientado a objetos, pero conservando sus raices de programación estructurada.

Imagen

Aqui podeis verlo cargado en el entorno de trabajo de visual studio 2005:

Imagen

Bueno aqui definimos el entorno de compilación para nuestra aplicación, la mayor parte de programas de la scene se compilan como release ltcg, los ejemplos del sdk a mi me funcionan mejor compilados en modo debug, el freestyle 1.20 en modo debug no compila le fallan unas referencias que seguranmente sean muy sencillas de arreglar.

Imagen

Para compilar tan simple como elegir el modo release ltcg xbox 360, y darle a build solution, un apunte, si hemos compilado ya antes el programa en cuestión deberemos darle a Rebuild solution o sino solo compilara los cambios, en mi poca esperiencia con este entorno, esto no funciona demasiado bien asi que mejor compilarlo todo cada vez.

Imagen

Aqui podemos ver la carpeta del source, cada vez que compilamos se nos creara la carpeta con el modo en que estemos compilando con los archivos intermedios de la compilación, el archivo xex y los archivos indicados necesarios para la ejecución en sus carpetas, como podeis ver yo compile el freestyle 1.20 en modos debug, release y release LTCG, como os he dicho prueba y error :-)

Imagen

Aqui podemos ver la carpeta de compilacion del Freestyle 1.20, como veis solo estan los archivos xex, porque no se le han definido/metido los archivos que lleva la release ademas de el xex, deberiamos ponerlos nosotros cuando vallamos a ejecutarlo en nuestra blanquita/negrita.

Imagen

Bueno vamos ahroa a hablar un poco sobre los ejemplos del sdk que he comentado antes, este es el programa donde podemos verlos organizados por categorias, en este caso vamos a compilar como ejemplo el Advanced Lighting que podeis ver en la captura.

Imagen

Le damos al boton de install project y nos muestra la siguiente pantalla ya con la ruta de nuestro visual studio 2005 definida, podriamos ponerlo en otro sitio si queremos, gueno ya sabeis como va esto:

Imagen

Nos ofrece abrir la carpeta donde ha metido el source, podria ofrecernos cargarlo direcctamente en el visual studio, pero eso ya para otro siglo microsoft se dara cuenta que ahorrar pasos al usuario es un avance.

Imagen

Aqui podemos ver el source del ejemplo en cuestion, como veis esta codeado tambien el c++

Imagen

Aqui una capturita del programa ya compilado con la carpeta que necesita metido en un pendrive para cargarlo en nuestra maquina, yo lo he cargado desde el freestyle en la carpeta homebrew como podeis ver.

Imagen

Aqui os dejo un video, del ejemplo compilado corriendo en mi jasper 512mb con freeboot, lo siento por la calidad del video pero esta grabado con el movil y la tarjeta de memoria de este es bastante cutrilla de ahi las relentizaciones que podeis ver en el video, el ejemplo va completamente fluido.

http://www.youtube.com/watch?v=xHQGi1xCzxY



Bueno pues eso es todo lo que ha dado de si este manual por el momento, estare encantado de ayudaros con cualquier duda q podais tener y espero que os animeis a compilar vuestras propias cosillas o las de otros para vuestras maquinas :-), un saludo ELFCO
muy buena iniciativa....muchas gracias!!!! [oki]
La pua es el tener acceso al SDK compatible con el VS2005, y no al SDK compatible con VS2008...

P.D.: Un poco de texto aclarando pasos estaría bastante bien en lugar de tanto pantallazo :)

EDIT: El P.D. no era criticando XD, era una simple opinión personal ya que ví que ponía que lo tenías en construcción :)
tranquis tranquis que aun estoy en ello, de esta me empalais, no ser impacientes, q ya recibi mp y todo de cuando lo ponia, demomento el material visual, ire rellenando las lagunas con mi prosa de alcantarilla poco a poco :-), dadme un poco de tiempo

Edito: puntualizacion, tenemos acceso en este caso al sdk Software dev...., xdk hace referencia a la parte hardware en este caso yo no tengo una debug ni nada parecido :-)
Pero si en el titulo lo decía que estaba en construcción, ya nos tiramos a la yugular, denle tiempo xD
Gueno ya lo teneis, lo dicho si teneis dudas o cualquier cosa, pos eso q esto es un foro, a forear!!!!!!!!!!!!!!!!!!! [sonrisa]
bueno yo lo estoy instalando (que lo tenia por ahi guardado), tremendo tuto,......
A ver si conseguimos hacer algo juntos ehh? quien sabe quizas un FSD 3..jajaj
yo tengo en mente hacerme algo estilo coverflow, pero tiempo al tiempo, aun no se si sere capaz de hacerlo siquiera :-)
he estado probando el xuitool, pero no se como poner los cuadrados tipo: DVD, Juegos...

edito: no seria posible conectar el pc con la consola con el neighboorhod?
si consiguiesemos convertir nuestras blanquitas en xdk's :-), o q algun hacker se curre un neighboorhod hackeado para las retail, cosa extremadamente improbable
oye como has conseguido poner la barra "release ltcg" arriba ?, es que a mi no me aparece.
boton derecho encima de la barra y marcas estandar
Estupendo Tutorial!!! hace mucho que esperábamos un punto de partida para los que sabemos un poquillo (muy poquillo en mi caso :P) de programación pero no teníamos ni idea de por donde comenzar a hacer un misero hello world..

Entrando un poco al trapo:

- Para evitar la parte engorrosa de que para cada prueba hay que compilar, pasar a un usb y probar en la consola, se me ocurre que podríamos generar un bat en el pc o algo por el estilo que pase por ftp al hdd de la consola y lo ejecute en la misma pasando los comandos por ftp remoto, si no me equivoco el freestyle 1.20 permite el ftp más la ejeución de comandos en la consola desde el pc..

- El tema de ejecutar un xex, que se quede en memoria en segundo plano y poder seguir desde el dash haciendo otras cosas.. es viable???? Lo digo por que se me ocurre crear mini aplicaciones para capturar pantallazos, para apagar la consola si pasa de x temperatura, apagarla si lleva x minutos sin hacer nada, etc.. pero tienen que funcionar como aplicaciones en segundo plano y dejarte pasear por el dash o lanzar juegos mientras están monitorizando temperaturas, etc.. a mi entender el dashlaunch lo hace, monitoriza en segundo plano por si ejecutamos el emulador de xbox1..

Creo que si logramos hacer la aplicación que apague la consola por exceso de temperatura y/o por tiempo de inactividad, será muy bien recibida por la scene ya que puede salvar muchas jtags :D

Además debe ser relativamente fácil de programar... alguien se anima? hacemos ya el team? xDDD

Un saludo!
yo me animo pero no tengo casi ni idea de programar asi que como quieras.
Podiamos empezar por cosas facilillas para que coja base.
Es muy complicado programar en C++ sin ninguna base?
alvaro2 escribió:yo me animo pero no tengo casi ni idea de programar asi que como quieras.
Podiamos empezar por cosas facilillas para que coja base.
Es muy complicado programar en C++ sin ninguna base?


Hombre, lo primero es que te guste programar, si te gusta hay muchisimos tutoriales para ir aprendiendo y lo primero es ir compilando algo para el pc, probarlo, etc.. pero es algo que lleva su tiempo..

Realmente, lo que vamos a necesitar va a ser más bien documentación e investigar como utilizar las funciones y librerias que vienen con el sdk, ya que crear nuestras propias funciones y librerias requeriría un nivel bastante algo o un buen "copy paste" de sources ya hechas...jejeje ya sabeis un tijeretazo por aquí un poco de celo por allá para que se sujete en el sitio...más bien super glue...xDDD

Habrá que jugar bastante con el sdk y ver los ejemplos que vienen a ver que se puede aprovechar de ahí..

Por ejemplo, para el programa que apagaría la consola al pasar de xx grados, para obtener las lecturas de temperatura yo lo sacaría de las sources del xexmenu o del freestyle y el tema de apagar la consola de forma automática me fijé que el flash360 la apaga despues de flashear la nand, es decir, es coger esos 2 códigos y combinarlos, suena bastante sencillo.. no creo que lo sea, pero estructuralmente sería:

1 - Tomar lecturas con la rutina del freestyle
2 - Comparar el valor obtenido con el valor contenido en el fichero config.xml, o para no complicarnos con acceso a lecturas de ficheros, se pueden crear varias versiones del xex con apagado a 60 grados, 65, 70, 75, etc... y que el usuario se descargue la versión que le interese según la temperatura que quiera permitir..
3- Según el resultado de la comparación si la temperatura es mayor lanzar la subrutina que apaga la consola (la del flash360 si esta disponible, sino a buscar nos toca...xDDD) si es inferior, hacer que salte al punto uno nuevamente..

Para empezar que os parece este programilla?

un saludo!
si lo dificil seria que se quedase residente en memoria, eso ya seria harina de otro costal :-), tendriamos q desarrollar otro rebooter propio :-)
elfco escribió:si lo dificil seria que se quedase residente en memoria, eso ya seria harina de otro costal :-), tendriamos q desarrollar otro rebooter propio :-)


Saludos elfco! de nuevo te felicito por este tutorial tan interesante como necesario :D

ufff, desarrollar un rebooter propio son palabras mayores, pero creo que se pueden desarrollar plugins para el freeboot de hecho el "system ping check removal" es uno de ellos si no voy mal..

De todas formas debe ser más fácil encontrar una función que nos permita retornar al dash mientras deja nuestra app en ejecución en segundo plano.. no hay que preocuparse de volver a él mas tarde ni nada, basta con que quede ejecutado en memoria cada vez que arranque la consola, aunque eso nos lleva a la parte que tu dices de incorporarlo al rebooter..

En c++ había una función "system" si no recuerdo mal, en el pc te venía a dar una ventana de ms-dos desde la cual podrías lanzar cualquier otra cosa, en su caso en la xbox, quizás nos permita ejecutar un comando que nos devuelva al nxe o al freestyle.. todo esto como digo va a ser más investigar el sdk, sus funciones y ejemplos, que realmente la parte de programación..

Aunque pensándolo bien, quizás sea mucho más sencillo y haya una función "call" disponible o algo por el estilo.. quizás una librería ya preparada por alguien..

No estaría mal hacer una recopilación de foros de progrmación de xbox, por algún lado tengo apuntados un par que encontré en un hilo en esta misma subsección, seguro que estas preguntas ya estan formuladas y resueltas en alguno de esos foros.. o eso espero para nuestra facilidad ^_^ los pioneros siempre pagan el pato, los demás chupamos del bote de las "soluciones prefabricadas" ;)

Lo raro es que no hayan programado ya esa utilidad en esencia tan sencilla así como necesaria.. ¿no os escama un poco?

Por cierto, estamos en fase de "brainstorming"? jejeje

Saludos!
podriamos decir q es un shitstorming, las mejores ideas siempre surgen mientras uno mingita agusto :-), jejejeejejeje.

edito: ir buscando un paraguas, q no es lo mismo ca lluevan cerebros que.... lol
seria interesante eso del programilla apagara la consola a X temperatura, PERO (ojo que no tengo un carajo de idea de programacion xD) que hiciera que los ventiladores siguieran trabajando despues de apagada, algun estado de procesos minimo o algo asi (ahorita no se me ocurre como expresarlo xD, a ver si me entienden) durante unos 5-10 minutos para que se enfrie.

pero eso se los dejo para que lo maquinen un rato. Imagen

salu2
Hola a todos, quiero felicitar y agradecer a elfco el magnífico tutorial.

Por otro lado, si fueramos capaces de ejecutar un programa en segundo plano, creo que seria posible hacer un programa de debug que mandara por ethernet los valores de las variables en cada momento. Seguramente no permitiria hacer breaks, pero ya seria una ayuda... ;)
los breaks los podrias poner hardcodeados, me explico aprobechando que c++ conserva sus raices de programacion estructurada te haces un proceso q haga que hasta q no aprietes un boton no continue, y ya esta :-), claro suponiendo q se pudiese hacer claro esta :-?
seria una solución para los breaks. Ahora solo falta poderlo hacer correr en segundo plano y acceder a la region de memoria usada por otro programa!!! :P
rhoderik escribió:Hola a todos, quiero felicitar y agradecer a elfco el magnífico tutorial.

Por otro lado, si fueramos capaces de ejecutar un programa en segundo plano, creo que seria posible hacer un programa de debug que mandara por ethernet los valores de las variables en cada momento. Seguramente no permitiria hacer breaks, pero ya seria una ayuda... ;)


Esta bien pensado, pero el tema de levantar todas las funciones de red necesarias me da que es algo complejo.. En los foros veo que se manejan con un fichero debug..

El tema de tener en segundo plano el debug no será necesario pues al ser C++ esta orientado a objetos, basta con tratarlo como un objeto dentro del mismo programa (algo así como una subrutina debug creo) lo de dejarlo en memoria en segundo plano es para que se pueda hacer algo mientras el programa vigila las temperaturas y no quedarnos ahí viendo las temperaturas sin poder jugar ni hacer nada...xDDD
Tienes razón jouxer.

Pues habría que currarse unas "librerías de depuración" (o "debug libraries") para poder incluirlas en cada programa. Lo de levantar la red, creo que se podria coger código de otras aplicaciones como el freestyle por ejemplo.

Lo bueno de hacerlo por red es que podrias tener una especie de servidor telnet o ssh y con el hyperterminal de windows o con el putty ir recibiendo los valores de las variables en tiempo de ejecución. ;)
alguien me manda un privado con "info" del SDK?
karlos007 escribió:alguien me manda un privado con "info" del SDK?

Buscalo por torrent,no vas a encotrarlo por DD,por torrent lo pillarás enseguida...
Por cierto,yo era uno de los que te pedí el tuto,así que muchas gracias,voy a intentar portar un juego de naves bastante cutrillo que tengo echo por mi xDD.Gracias y saludos
yo sigo experimentando, jugando un poco con direct3d, ya os ire poniendo cositas :-)
Joker_21 escribió:
karlos007 escribió:alguien me manda un privado con "info" del SDK?

Buscalo por torrent,no vas a encotrarlo por DD,por torrent lo pillarás enseguida...
Por cierto,yo era uno de los que te pedí el tuto,así que muchas gracias,voy a intentar portar un juego de naves bastante cutrillo que tengo echo por mi xDD.Gracias y saludos

no si en torrent he encontrado de todo, pero descarga tan lento que me daba palo..
yo lo encontre en DD, si lo kieres me lo dices.

EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069
alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.

EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069


En que modificaciones habías pensado? es para hacerme una idea de si voy a poder ayudarte... ^_^
jouxter escribió:
alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.

EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069


En que modificaciones habías pensado? es para hacerme una idea de si voy a poder ayudarte... ^_^


Pues no se, yo trasteando con el xuitool he conseguido habilitar todas los opciones del Filemanger, opciones juegos, ventiladores (pero no funcionan), avatres (te deja entrar pero no salir).
alvaro2 escribió:
jouxter escribió:
alvaro2 escribió:yo lo encontre en DD, si lo kieres me lo dices.

EDITO: alguno se anima a modificar el FSD2, yo ya he empezado:
http://www.elotrolado.net/hilo_fsd-2-0-dashboard-alternativo-ultima-version-n-d_1458619_s230#p1721028069


En que modificaciones habías pensado? es para hacerme una idea de si voy a poder ayudarte... ^_^


Pues no se, yo trasteando con el xuitool he conseguido habilitar todas los opciones del Filemanger, opciones juegos, ventiladores (pero no funcionan), avatres (te deja entrar pero no salir).


Para modificarlo y compilarlo no se requiere el vs2008 + el último sdk????
Eso tengo entendido yo tambien...
jouxter escribió:
Para modificarlo y compilarlo no se requiere el vs2008 + el último sdk????

yo leí en el readme del código que necesitaba la versión 9199 del SDK así que no se para que dan código si no nos sirve de nada
solo sirve a los que se lo dieron :(

yo estuve armando un poco, traduciendolo, pero luego me di cuenta, y a parte no se como se compila todo [sonrisa]
Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..

La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..

El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje

A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..

Un saludo!
Mientras esta archivado el hilo del nxe2god, lo pongo aquí:

Se a liberado el codigo fuente de la ultima versión: http://pastebin.org/430362

Por si alguien quiere trastear y compilarla.
jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..

La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..

El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje

A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..

Un saludo!

solo que debería funcionar como parche del dash launcher para que funcione siempre incluso mientras juegas
por que no el de subirle la velocidad al llegar a cierta temperatura
de todas formas e leído que están programando un parche para el dash launcher que funcionen los leds como en el freestyle 1.20 pero siempre incluso mientra juegas
jouxter escribió:La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..


y porque no hablas con Redline? el es moderador de XboxHacker, le podrias preguntar por MP, o en el IRC (aunque no recuerdo si rondaba por ahi mucho, pero el q si es Arakon), talvez te lo pase (pero solo para vos obio) con tal de fomentar que se hagan cosillas.

oscarbuxan escribió:de todas formas e leído que están programando un parche para el dash launcher que funcionen los leds como en el freestyle 1.20 pero siempre incluso mientra juegas


donde leiste eso? (pasa el link que quiero ver Imagen )

salu2
algo sale en el hilo del freestyle 2
jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..

La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..

El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje

A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..

Un saludo!



Echate un ojo a esto http://www.xboxhacker.org/index.php?topic=14272.0 y en el freestyle busca smc.cpp y smc.h
Froggy__007 escribió:
jouxter escribió:Ya he empezado a juguetear con lo que has puesto en el tutorial por ahora he compilado un ejemplo que venía que reproducía sonido y la 360 se lo ha tragado sin ningún problema, así que me he animado y he seguido investigando..

La verdad que o no se buscar o hay muy poca información al respecto.. pero he intentado conseguir el código fuente del flash360 V1.0 para ver la parte en la que se "auto apaga" la consola, resulta que, el código fuente, su creador (creo que es redline99) no lo ha liberado por que dice que es un código fuente muy poco elegante.. es una lástima porque me habría venido de perlas para ver como manejar el tema del shutdown.. que no encuentro ningún sitio donde documentarme sobre una cosa tan sencilla.. supongo que tendré que hacer pruebas como si fuera el mismo comando shutdown para windows.. esto lo dejo para la última parte..

El siguiente paso es investigar el código fuente del fsd 1.20 o del xexmenu si esta disponible y sacarle la rutina que lee las temperaturas, en esto creo que no voy a tener ningún problema porque va a ser un super copy paste..fijo fijo.. jejeje

A ver si reflotamos el hilo y entre todos logramos programar algo.. yo sigo encabezonado en crear la función que apague la consola automáticamente al llegar a xx grados..

Un saludo!



Echate un ojo a esto http://www.xboxhacker.org/index.php?topic=14272.0 y en el freestyle busca smc.cpp y smc.h


Genial Froggy_007! esto me viene bastante bien para orientarme, me acabo de dar de alta en la page esa y pinta bastante bien, a ver si este fin de semana tengo un poco de tiempo y puedo ponerme de nuevo con ello ^_^

Las pruebas que he hecho hasta ahora, tengo problemas para generar un proyecto "limpio" he tenido que tomar uno de los de ejemplo e ir borrando.. pero no me da total confianza.. y lo otro que probé fue compilar el fsd 1.20 y se compiló con cero errores, pero al dejar solo la rutina de las temperaturas empezó a dar errores y warnings.. lo cual es normal, pero entre tantos includes me estaba volviendo loco, pondré especial atención al smc que me comentas a ver que encuentro... que rabia no tener más tiempo libre! arghhhh!

un saludo!
Para aplicaciones de interfaz grafica usa el XUITutorial y para aplicaciones en modo consola usa la plantilla Hello World http://dev360.wikia.com/wiki/Hello_World.
De todas formas aqui te dejo una app en modo consola que muestra las temperaturas es muy basico pero pa que lo entiendas vale.
Main.cpp
#include "stdafx.h"
#include <xtl.h>
#include <d3d9.h>
#include <xam.h>
#include <xui.h>
#include <xuiapp.h>
#include <iostream>
#include <fstream>
#include <string>
#include "AtgConsole.h"//simple text output to screen
#include "AtgFont.h"
#include "AtgInput.h"//get input from controler
#include "smc.h"
using std::string;
using std::ofstream;//needed for the debug log
//--------------------------------------------------------
//GLOBALS

ATG::Console g_console;


void debugLog(char* output)
{
   ofstream writeLog;

   writeLog.open("game:\\debug.log",ofstream::app);
   if (writeLog.is_open())
   {
     writeLog.write(output,strlen(output));
     writeLog.write("\n",1);
   }
   writeLog.close();



}

string sprintfaA(const char *format, ...)
{
   char temp[16384];

   va_list ap;
   va_start (ap, format);
   vsprintf_s (temp,16384, format, ap);
   va_end (ap);

   return temp;
}

void Temps(VOID)
{
   smc _smc;
   string temps = sprintfaA("SYSTEM TEMPERATURE:\n\nCPU: %0.1f C\n", _smc.GetTemperature(CPU,true));
   temps = temps + sprintfaA("GPU: %0.1f C\n",_smc.GetTemperature(GPU,true));
   temps = temps + sprintfaA("MEM: %0.1f C\n",_smc.GetTemperature(MEM,true));
   temps = temps + sprintfaA("BRD: %0.1f C\n",_smc.GetTemperature(BRD,true));
   g_console.Clear();
   g_console.Format (temps.c_str());
   g_console.Format( "PRESS A TO EXIT\n" );
}
void init(VOID)
{
    HRESULT hr = g_console.Create( "game:\\Media\\Fonts\\Arial_12.xpr", 0xff000000, 0xffffffff ); //create console
    if (FAILED (hr))
    {
      debugLog("creating console");// debuglog function
    }
    g_console.Format( "*** INITIALIZING ***\n" );//simple text output to screen
   

}

VOID __cdecl main()
{
    bool done =FALSE;
    init();
    while(!done)
    {
      ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();// get input from controlers
     Temps();
     Sleep(1000);
       if( pGamepad->wPressedButtons  & XINPUT_GAMEPAD_A)
       {
           done=true;
       }
   
    }
}

smc.cpp
#include "smc.h"
#include "stdafx.h"

void smc::PrepareBuffers()
{
   //Zero our mem
   ZeroMemory( m_SMCMessage, sizeof(m_SMCMessage) );
   ZeroMemory( m_SMCReturn, sizeof(m_SMCReturn) );
}


//Usage: command is one of the POWER_LED constants from smc_constant.h
//         animate is true for ring LED startup light sequence
void smc::SetPowerLED(unsigned char command, bool animate)
{
    PrepareBuffers();
   
    m_SMCMessage[0] = 0x8c;
    m_SMCMessage[1] = command;
    m_SMCMessage[2] = (animate ? 0x01 : 0x00);
   HalSendSMCMessage(m_SMCMessage, NULL);
}


//Usage: color is one of LED constants from smc_constant.h
void smc::SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight)
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x99;
    m_SMCMessage[1] = 0x01;

   m_SMCMessage[2] = ((unsigned char)(sTopLeft>>3) | (unsigned char)(sTopRight>>2) | (unsigned char)(sBottomLeft>>1) | (unsigned char)(sBottomRight));

   HalSendSMCMessage(m_SMCMessage, NULL);
}

float smc::GetTemperature(TEMP_INDEX sTempIndex, bool Celsius)
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TEMP;
    HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   float temp = (float)((m_SMCReturn[sTempIndex * 2 + 1] | (m_SMCReturn[sTempIndex * 2 +2] <<8)) / 256.0);

    if(!Celsius) temp = (9.0f/5.0f) * temp + 32.0f;
   
   return temp;
}

char* smc::GetSMCVersion()
{
   //dSMCMessage(m_SMCMessage, m_SMCReturn);
   
   static char version[5] = "";
   sprintf_s(version, sizeof(version), "%d.%d", m_SMCReturn[2], m_SMCReturn[3]);

    return version;
}
void smc::Shutdown()
{

   unsigned char tempin[0x10];

   memset(tempin,0,0x10);
   tempin[0] = 0x82;
   tempin[1] = 0x11;
   tempin[2] = 0x01;

   HalSendSMCMessage(tempin, m_SMCReturn);
}
TILT_STATE smc::GetTiltState()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TILT;
    HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   TILT_STATE sTiltState = ((m_SMCReturn[1] & 1) ? VERTICAL : HORIZONTAL);
   return sTiltState;
}

unsigned char smc::GetAVPack()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_AV_PACK;
   HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   return m_SMCReturn[1];
}

TRAY_STATE smc::GetTrayState()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TRAY_STATE;
   HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   return (TRAY_STATE)((m_SMCReturn[1] & 0xF) % 5);
}
void smc::OpenTray()
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x8b;
   m_SMCMessage[1] = 0x60;
   HalSendSMCMessage(m_SMCMessage, NULL);
//   DebugMsg("Open tray");
   
}
void smc::CloseTray()
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x8b;
   m_SMCMessage[1] = 0x62;
   HalSendSMCMessage(m_SMCMessage, NULL);
//   DebugMsg("Close tray");
}
void smc::SetFanSpeed(int fan, int speed)
{
   PrepareBuffers();
   m_SMCMessage[0] = fan ? 0x94 : 0x89;

   // Fail safe to keep a speed set above 100 in the xml from
   //  stopping the fans.
   if (speed > 100)
      speed = 100;

   if (speed < 45)
   {
      m_SMCMessage[1] = 0x7F;
   }
   else
   {
      m_SMCMessage[1] = (unsigned char)speed | 0x80;
   }


   HalSendSMCMessage(m_SMCMessage, NULL);
}

// Thanks goto Aaron for this
// Setting Names to AV Packs
const char* smc::GetAVPackName()
{
   switch (GetAVPack()) {
      case AV_HDMI: return "HDMI";
      case AV_COMPONENT: return "Component";
      case AV_VGA: return "VGA";
      case AV_COMPOSITETV: return "Composite TV";
      case AV_COMPOSITEHD: return "Composite HDTV";
      case AV_HDMIAUDIO: return "HDMIw/Opt";
      default: return NULL;
   }
}

smc.h
//Thanks to www.free60.org/SMC for helping me get front LEDs right
#pragma once
#ifndef _SMC__H
#define _SMC_H

#include <string.h>

//sorry for the extreme amount of constants trying to make functions
//easier to use

//Power LED
#define POWER_LED_BLINK            0x10
#define POWER_LED_DEFAULT        0x02
#define POWER_LED_ON            0x01
#define POWER_LED_OFF            0X03

//Quadrant LEDs
//NOTE: LED constants are determined with console laying down
//        with LED color bits being, starting from tope left 1, 2, 4, 8

//Thanks to unknown v2 for the following
typedef enum _LEDState
{
    OFF        = 0x00,
    RED        = 0x08,
    GREEN    = 0x80,
    ORANGE    = 0x88
}LEDState;

typedef enum _TEMP_INDEX
{
    CPU,
    GPU,
    MEM,
    BRD
}TEMP_INDEX;

typedef enum _TILT_STATE
{
    VERTICAL,
   HORIZONTAL
}TILT_STATE;

/* MATTIE: WRONG INFO?
typedef enum _TRAY_STATE
{
   OPEN,
   OPENING,
   CLOSED,
   CLOSING,
   PUSHED
}TRAY_STATE;
*/

typedef enum _TRAY_STATE
{
   OPEN,
   UNKNOWN,
   CLOSED,
   OPENING,
   CLOSING
}TRAY_STATE;

// Thanks goto Aaron for this
// Setting Names to AV Packs
typedef enum _AV_PACK {
   AV_HDMI = 0x1F,
   AV_COMPONENT = 0x0F,
   AV_VGA = 0x5B,
   AV_COMPOSITETV = 0x43,
   AV_COMPOSITEHD = 0x4F,
   AV_HDMIAUDIO = 0x13
} AV_PACK;


#define REQUEST_TEMP      0x07   //SMC message to request temperature
#define REQUEST_TILT      0x17   //SMC message to request tilt
#define REQUEST_SMC_VERSION   0x12   //SMC message to request the smc version
#define   REQUEST_TRAY_STATE   0x0A   //SMC message to request the tray state
#define   REQUEST_AV_PACK      0x0F   //SMC message to request the AV-Pack type


//Thanks to tmbinc for smc.c


//Call to SMC message function in xboxkrnl.lib
extern "C" void __stdcall HalSendSMCMessage(void* input, void* output);

class smc
{
    public:
        void SetPowerLED(unsigned char command, bool animate);
        void SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight);
      void SetFanSpeed(int fan, int speed);
      void Shutdown();
        float GetTemperature(TEMP_INDEX sTempIndex, bool Celsius);
      char* GetSMCVersion();
      TILT_STATE GetTiltState();
      unsigned char GetAVPack();
      const char* GetAVPackName(); // Thanks goto Aaron for this
      TRAY_STATE GetTrayState();
      void OpenTray();
      void CloseTray();
    private:
      //This is used to store our SMC data
      unsigned char m_SMCMessage[16];
      unsigned char m_SMCReturn[16];
      void PrepareBuffers();
};

#endif

Hola!

Estoy intentando compilarlo y empezar a hacer pruebas con ello, pero tengo un montón de dificultades para crear un proyecto limpio para xbox 360 que permita compilarse..

Por ahora lo que estoy haciendo es coger un proyecto existente e ir borrando todo lo que puedo, pero me da que no es la forma correcta de hacerlo..

Alguien sabe como crear un proyecto limpio que permita compilar el xex?

Saludos!


Froggy__007 escribió:Para aplicaciones de interfaz grafica usa el XUITutorial y para aplicaciones en modo consola usa la plantilla Hello World http://dev360.wikia.com/wiki/Hello_World.
De todas formas aqui te dejo una app en modo consola que muestra las temperaturas es muy basico pero pa que lo entiendas vale.
Main.cpp
#include "stdafx.h"
#include <xtl.h>
#include <d3d9.h>
#include <xam.h>
#include <xui.h>
#include <xuiapp.h>
#include <iostream>
#include <fstream>
#include <string>
#include "AtgConsole.h"//simple text output to screen
#include "AtgFont.h"
#include "AtgInput.h"//get input from controler
#include "smc.h"
using std::string;
using std::ofstream;//needed for the debug log
//--------------------------------------------------------
//GLOBALS

ATG::Console g_console;


void debugLog(char* output)
{
   ofstream writeLog;

   writeLog.open("game:\\debug.log",ofstream::app);
   if (writeLog.is_open())
   {
     writeLog.write(output,strlen(output));
     writeLog.write("\n",1);
   }
   writeLog.close();



}

string sprintfaA(const char *format, ...)
{
   char temp[16384];

   va_list ap;
   va_start (ap, format);
   vsprintf_s (temp,16384, format, ap);
   va_end (ap);

   return temp;
}

void Temps(VOID)
{
   smc _smc;
   string temps = sprintfaA("SYSTEM TEMPERATURE:\n\nCPU: %0.1f C\n", _smc.GetTemperature(CPU,true));
   temps = temps + sprintfaA("GPU: %0.1f C\n",_smc.GetTemperature(GPU,true));
   temps = temps + sprintfaA("MEM: %0.1f C\n",_smc.GetTemperature(MEM,true));
   temps = temps + sprintfaA("BRD: %0.1f C\n",_smc.GetTemperature(BRD,true));
   g_console.Clear();
   g_console.Format (temps.c_str());
   g_console.Format( "PRESS A TO EXIT\n" );
}
void init(VOID)
{
    HRESULT hr = g_console.Create( "game:\\Media\\Fonts\\Arial_12.xpr", 0xff000000, 0xffffffff ); //create console
    if (FAILED (hr))
    {
      debugLog("creating console");// debuglog function
    }
    g_console.Format( "*** INITIALIZING ***\n" );//simple text output to screen
   

}

VOID __cdecl main()
{
    bool done =FALSE;
    init();
    while(!done)
    {
      ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();// get input from controlers
     Temps();
     Sleep(1000);
       if( pGamepad->wPressedButtons  & XINPUT_GAMEPAD_A)
       {
           done=true;
       }
   
    }
}

smc.cpp
#include "smc.h"
#include "stdafx.h"

void smc::PrepareBuffers()
{
   //Zero our mem
   ZeroMemory( m_SMCMessage, sizeof(m_SMCMessage) );
   ZeroMemory( m_SMCReturn, sizeof(m_SMCReturn) );
}


//Usage: command is one of the POWER_LED constants from smc_constant.h
//         animate is true for ring LED startup light sequence
void smc::SetPowerLED(unsigned char command, bool animate)
{
    PrepareBuffers();
   
    m_SMCMessage[0] = 0x8c;
    m_SMCMessage[1] = command;
    m_SMCMessage[2] = (animate ? 0x01 : 0x00);
   HalSendSMCMessage(m_SMCMessage, NULL);
}


//Usage: color is one of LED constants from smc_constant.h
void smc::SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight)
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x99;
    m_SMCMessage[1] = 0x01;

   m_SMCMessage[2] = ((unsigned char)(sTopLeft>>3) | (unsigned char)(sTopRight>>2) | (unsigned char)(sBottomLeft>>1) | (unsigned char)(sBottomRight));

   HalSendSMCMessage(m_SMCMessage, NULL);
}

float smc::GetTemperature(TEMP_INDEX sTempIndex, bool Celsius)
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TEMP;
    HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   float temp = (float)((m_SMCReturn[sTempIndex * 2 + 1] | (m_SMCReturn[sTempIndex * 2 +2] <<8)) / 256.0);

    if(!Celsius) temp = (9.0f/5.0f) * temp + 32.0f;
   
   return temp;
}

char* smc::GetSMCVersion()
{
   //dSMCMessage(m_SMCMessage, m_SMCReturn);
   
   static char version[5] = "";
   sprintf_s(version, sizeof(version), "%d.%d", m_SMCReturn[2], m_SMCReturn[3]);

    return version;
}
void smc::Shutdown()
{

   unsigned char tempin[0x10];

   memset(tempin,0,0x10);
   tempin[0] = 0x82;
   tempin[1] = 0x11;
   tempin[2] = 0x01;

   HalSendSMCMessage(tempin, m_SMCReturn);
}
TILT_STATE smc::GetTiltState()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TILT;
    HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   TILT_STATE sTiltState = ((m_SMCReturn[1] & 1) ? VERTICAL : HORIZONTAL);
   return sTiltState;
}

unsigned char smc::GetAVPack()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_AV_PACK;
   HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   return m_SMCReturn[1];
}

TRAY_STATE smc::GetTrayState()
{
   PrepareBuffers();
    m_SMCMessage[0] = REQUEST_TRAY_STATE;
   HalSendSMCMessage(m_SMCMessage, m_SMCReturn);
   
   return (TRAY_STATE)((m_SMCReturn[1] & 0xF) % 5);
}
void smc::OpenTray()
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x8b;
   m_SMCMessage[1] = 0x60;
   HalSendSMCMessage(m_SMCMessage, NULL);
//   DebugMsg("Open tray");
   
}
void smc::CloseTray()
{
   PrepareBuffers();
    m_SMCMessage[0] = 0x8b;
   m_SMCMessage[1] = 0x62;
   HalSendSMCMessage(m_SMCMessage, NULL);
//   DebugMsg("Close tray");
}
void smc::SetFanSpeed(int fan, int speed)
{
   PrepareBuffers();
   m_SMCMessage[0] = fan ? 0x94 : 0x89;

   // Fail safe to keep a speed set above 100 in the xml from
   //  stopping the fans.
   if (speed > 100)
      speed = 100;

   if (speed < 45)
   {
      m_SMCMessage[1] = 0x7F;
   }
   else
   {
      m_SMCMessage[1] = (unsigned char)speed | 0x80;
   }


   HalSendSMCMessage(m_SMCMessage, NULL);
}

// Thanks goto Aaron for this
// Setting Names to AV Packs
const char* smc::GetAVPackName()
{
   switch (GetAVPack()) {
      case AV_HDMI: return "HDMI";
      case AV_COMPONENT: return "Component";
      case AV_VGA: return "VGA";
      case AV_COMPOSITETV: return "Composite TV";
      case AV_COMPOSITEHD: return "Composite HDTV";
      case AV_HDMIAUDIO: return "HDMIw/Opt";
      default: return NULL;
   }
}

smc.h
//Thanks to www.free60.org/SMC for helping me get front LEDs right
#pragma once
#ifndef _SMC__H
#define _SMC_H

#include <string.h>

//sorry for the extreme amount of constants trying to make functions
//easier to use

//Power LED
#define POWER_LED_BLINK            0x10
#define POWER_LED_DEFAULT        0x02
#define POWER_LED_ON            0x01
#define POWER_LED_OFF            0X03

//Quadrant LEDs
//NOTE: LED constants are determined with console laying down
//        with LED color bits being, starting from tope left 1, 2, 4, 8

//Thanks to unknown v2 for the following
typedef enum _LEDState
{
    OFF        = 0x00,
    RED        = 0x08,
    GREEN    = 0x80,
    ORANGE    = 0x88
}LEDState;

typedef enum _TEMP_INDEX
{
    CPU,
    GPU,
    MEM,
    BRD
}TEMP_INDEX;

typedef enum _TILT_STATE
{
    VERTICAL,
   HORIZONTAL
}TILT_STATE;

/* MATTIE: WRONG INFO?
typedef enum _TRAY_STATE
{
   OPEN,
   OPENING,
   CLOSED,
   CLOSING,
   PUSHED
}TRAY_STATE;
*/

typedef enum _TRAY_STATE
{
   OPEN,
   UNKNOWN,
   CLOSED,
   OPENING,
   CLOSING
}TRAY_STATE;

// Thanks goto Aaron for this
// Setting Names to AV Packs
typedef enum _AV_PACK {
   AV_HDMI = 0x1F,
   AV_COMPONENT = 0x0F,
   AV_VGA = 0x5B,
   AV_COMPOSITETV = 0x43,
   AV_COMPOSITEHD = 0x4F,
   AV_HDMIAUDIO = 0x13
} AV_PACK;


#define REQUEST_TEMP      0x07   //SMC message to request temperature
#define REQUEST_TILT      0x17   //SMC message to request tilt
#define REQUEST_SMC_VERSION   0x12   //SMC message to request the smc version
#define   REQUEST_TRAY_STATE   0x0A   //SMC message to request the tray state
#define   REQUEST_AV_PACK      0x0F   //SMC message to request the AV-Pack type


//Thanks to tmbinc for smc.c


//Call to SMC message function in xboxkrnl.lib
extern "C" void __stdcall HalSendSMCMessage(void* input, void* output);

class smc
{
    public:
        void SetPowerLED(unsigned char command, bool animate);
        void SetLEDS(LEDState sTopLeft, LEDState sTopRight, LEDState sBottomLeft, LEDState sBottomRight);
      void SetFanSpeed(int fan, int speed);
      void Shutdown();
        float GetTemperature(TEMP_INDEX sTempIndex, bool Celsius);
      char* GetSMCVersion();
      TILT_STATE GetTiltState();
      unsigned char GetAVPack();
      const char* GetAVPackName(); // Thanks goto Aaron for this
      TRAY_STATE GetTrayState();
      void OpenTray();
      void CloseTray();
    private:
      //This is used to store our SMC data
      unsigned char m_SMCMessage[16];
      unsigned char m_SMCReturn[16];
      void PrepareBuffers();
};

#endif

Que no se archive [sonrisa]
He probado algunas de las demos técnicas y algunas muy wapas.

Me a vuelto a entrar gusanillo por aprender algo de programación, pero requiere demasiado tiempo y empezar es dificil, por lo que paso, lo que si me gustaría es ver si alguno de los que sabeis algo, podéis hacer algun port rápido con la libreria sdl, pues parece bastante "sencillo", en xbins esta la librería para la 360, para compilarla con el vs2005.
Hola!,

Nadie sabrá si existe por los mundos de dios accesible a los mortales un sdk superior al listado en el hilo verdad? Es que el vs 2005 tiene bugs q tiran para atrás ... El compatible con el 2008 seria crema.

Un saludo,
Notbad.
Han sacado la libreria SDL_mixer, que complementa a la libSDLx360.
http://code.google.com/p/libsdl360x/downloads/list
46 respuestas