{"id":14,"date":"2009-10-30T11:17:00","date_gmt":"2009-10-30T11:17:00","guid":{"rendered":"http:\/\/rockbot.upperland.net\/?p=14"},"modified":"2009-10-30T11:17:00","modified_gmt":"2009-10-30T11:17:00","slug":"desenvolvendo-para-playstation-2-round-2-fight","status":"publish","type":"post","link":"https:\/\/rockbot.upperland.net\/?p=14","title":{"rendered":"Desenvolvendo para Playstation 2 &#8211; ROUND 2, FIGHT!"},"content":{"rendered":"<p>Cerca de um ano e meio atr\u00e1s eu brinquei um pouco de converter um pequeno game que estou desenvolvendo, parecido com Rockman (Megaman) para o Playstation 2 usando o SDK PS2DEV dispon\u00edvel em &nbsp;<a href=\"http:\/\/www.ps2dev.org\/\">http:\/\/www.ps2dev.org<\/a>. Este SDK, al\u00e9m de um toolkit pr\u00f3prio, chamado gsKit, tem suporta a uma biblioteca gr\u00e1fica, muito utilizada para jogos em Linux mas tamb\u00e9m utilizada em Windows e Mac, chamada SDL, e para o qual eu j\u00e1 havia desenvolvido pequenos games.&nbsp;Ap\u00f3s ligar com diversos problemas de compila\u00e7\u00e3o, consegui instalar todo o ambiente em meu Duron 1.6\/512MB RAM rodando Ubuntu Linux e comecei a desenvolver.<\/p>\n<p>O problema \u00e9 que, do modo como eu estava desenvolvendo, eu tinha que copiar o execut\u00e1vel (.elf) para um memory card ou pendrive USB, e toda vez ir5 do computador em um quarto, at\u00e9 o PS2 na sala. Isso at\u00e9 n\u00e3o era o maior problema, o problema \u00e9 que desta forma, voc\u00ea n\u00e3o tem a m\u00ednima id\u00e9ia se o seu programa deu um erro, voc\u00ea simplesmente fica olhando para uma tela escura, ou a tela do seu jogo travado. Utilizando c\u00f3digos de cores para debugar (desenhando ret\u00e2ngulos coloridos como forma de indicar por onde o programa passou), consegui algum sucesso, mas a dificuldade acabou me fazendo desistir.<\/p>\n<p>Chegamos ao presente. Agora com um computador bem mais r\u00e1pido (Core 2 Duo 2.2\/2GB RAM), l\u00e1 fui eu tentar um segundo m\u00e9todo: rodar o programa via emulador de Playstation 2, chamado PCSX2. No linux este emulador mostra as mensagens de output (printf para quem sabe C) do processador IOP (entrada e sa\u00edda do PS2), e ent\u00e3o eu poderia finalmente debugar e corrigir os problemas do jogo, certo? Errado! O emulador simplesmente quebra com o OpenGL da minha m\u00e1quina&#8230;<\/p>\n<p>Bom, nesse ano e meio que se passou, eu adquiri um eeePC 701 e um roteador wifi. Com isso, um segundo m\u00e9todo se abriu para mim: programar para o PS2 via rede. Na verdade sem o roteador eu poderia ter feito o trabalho usando um cabo USB ou um cabo cross ethernet, mas nunca me dispus, j\u00e1 com o cabo de rede e o roteador, eu posso tamb\u00e9m colocar o PS2 em rede, o que \u00e9 um grande incentivo.<\/p>\n<p>O sistema funciona basicamente assim, voc\u00ea grava um CD com um programa chamado ps2link e um arquivo de configura\u00e7\u00e3o que determina o endere\u00e7o IP quie o PS2 ir\u00e1 requisitar ao seu roteador, e depois um cliente no Windows ou Linux, para acessar o PS2 e enviar para ele o seu programa via rede, ou seja, nada mais de atravessar a sala com o pendrive. Tamb\u00e9m permite dar um soft-reset &#8211; que j\u00e1 descobri n\u00e3o funciona direito com a SDL por alguma raz\u00e3o que ainda n\u00e3o tive tempo de achar.<\/p>\n<p>Mas enfim, comprei um CD para gravar o programa e um cabo de rede de 6 metros, que se mostrou um metro mais curto do que seria recomend\u00e1vel&#8230; ningu\u00e9m manda eu n\u00e3o usar o metro apra medir a dist\u00e2ncia antes. Gravei o programa, liguei o PS2 com ele e foi pura emo\u00e7\u00e3o no momento que consegui dar um ping ao endere\u00e7o 192.168.1.10 e obeter respota! \ud83d\ude00<br \/>A seguir comecei a fu\u00e7ar no c\u00f3digo, recolocando todos os printfs que eu havia retirado j\u00e1 que n\u00e3o apareciam mesmo, e rodar. Em uma hora eu consegui consertar o meu embri\u00e3o de jogo, adicionei suporte ao joystick direito (esse era um dos bugs, o outro era ter muitos acessos aos arquivos, no PS2 ele tem poucos file pointers simult\u00e2neos) e unifiquei o sistema de sprites em uma vari\u00e1vel \u00fanica, otimizando a execu\u00e7\u00e3o um bocado.<br \/>O resultado est\u00e1 nesta screenshot abaixo:<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"http:\/\/3.bp.blogspot.com\/_4uOzK_Wwrz0\/SurLCSDFkLI\/AAAAAAAAQrk\/ZLpVh6ImZ4E\/s1600-h\/100_1844_resized.JPG\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" src=\"http:\/\/3.bp.blogspot.com\/_4uOzK_Wwrz0\/SurLCSDFkLI\/AAAAAAAAQrk\/ZLpVh6ImZ4E\/s400\/100_1844_resized.JPG\" \/><\/a><\/div>\n<p>Os gr\u00e1ficos est\u00e3o com alguns bugs porque eu n\u00e3o tive tempo de arrumar o mapa ap\u00f3s criar o novo sistema de tiles\/sprites, mas d\u00e1 para ter uma id\u00e9ia vendo o protoman l\u00e1 na parte superior esquerda da tela.<br \/>Resumindo, se voc\u00ea tem paci\u00eancia para fazer as configura\u00e7\u00f5es iniciais do SDK, programar para o Playstation 2 usando a SDL \u00e9 uma grande barbada, e altamente recomend\u00e1vel pela divers\u00e3o Nerd que ir\u00e1 gerar \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cerca de um ano e meio atr\u00e1s eu brinquei um pouco de converter um pequeno game que estou desenvolvendo, parecido com Rockman (Megaman) para o Playstation 2 usando o SDK PS2DEV dispon\u00edvel em &nbsp;http:\/\/www.ps2dev.org. Este SDK, al\u00e9m de um toolkit pr\u00f3prio, chamado gsKit, tem suporta a uma biblioteca gr\u00e1fica, muito utilizada para jogos em Linux mas tamb\u00e9m utilizada em Windows e Mac, chamada SDL, e para o qual eu j\u00e1 havia desenvolvido pequenos games.&nbsp;Ap\u00f3s ligar com diversos problemas de compila\u00e7\u00e3o, consegui instalar todo o ambiente em meu Duron 1.6\/512MB RAM rodando Ubuntu Linux e comecei a desenvolver. O problema \u00e9 que, do modo como eu estava desenvolvendo, eu tinha que copiar o execut\u00e1vel (.elf) para um memory card ou pendrive USB, e toda vez ir5 do computador em um quarto, at\u00e9 o PS2 na sala. Isso at\u00e9 n\u00e3o era o maior problema, o problema \u00e9 que desta forma, voc\u00ea n\u00e3o tem a m\u00ednima id\u00e9ia se o seu programa deu um erro, voc\u00ea simplesmente fica olhando para uma tela escura, ou a tela do seu jogo travado. Utilizando c\u00f3digos de cores para debugar (desenhando ret\u00e2ngulos coloridos como forma de indicar por onde o programa passou), consegui algum sucesso, mas a dificuldade acabou me fazendo desistir. Chegamos ao presente. Agora com um computador bem mais r\u00e1pido (Core 2 Duo 2.2\/2GB RAM), l\u00e1 fui eu tentar um segundo m\u00e9todo: rodar o programa via emulador de Playstation 2, chamado PCSX2. No linux este emulador mostra as mensagens de output (printf para quem sabe C) do processador IOP (entrada e sa\u00edda do PS2), e ent\u00e3o eu poderia finalmente debugar e corrigir os problemas do jogo, certo? Errado! O emulador simplesmente quebra com o OpenGL da minha m\u00e1quina&#8230; Bom, nesse ano e meio que se passou, eu adquiri um eeePC 701 e um roteador wifi. Com isso, um segundo m\u00e9todo se abriu para mim: programar para o PS2 via rede. Na verdade sem o roteador eu poderia ter feito o trabalho usando um cabo USB ou um cabo cross ethernet, mas nunca me dispus, j\u00e1 com o cabo de rede e o roteador, eu posso tamb\u00e9m colocar o PS2 em rede, o que \u00e9 um grande incentivo. O sistema funciona basicamente assim, voc\u00ea grava um CD com um programa chamado ps2link e um arquivo de configura\u00e7\u00e3o que determina o endere\u00e7o IP quie o PS2 ir\u00e1 requisitar ao seu roteador, e depois um cliente no Windows ou Linux, para acessar o PS2 e enviar para ele o seu programa via rede, ou seja, nada mais de atravessar a sala com o pendrive. Tamb\u00e9m permite dar um soft-reset &#8211; que j\u00e1 descobri n\u00e3o funciona direito com a SDL por alguma raz\u00e3o que ainda n\u00e3o tive tempo de achar. Mas enfim, comprei um CD para gravar o programa e um cabo de rede de 6 metros, que se mostrou um metro mais curto do que seria recomend\u00e1vel&#8230; ningu\u00e9m manda eu n\u00e3o usar o metro apra medir a dist\u00e2ncia antes. Gravei o programa, liguei o PS2 com ele e foi pura emo\u00e7\u00e3o no momento que consegui dar um ping ao endere\u00e7o 192.168.1.10 e obeter respota! \ud83d\ude00A seguir comecei a fu\u00e7ar no c\u00f3digo, recolocando todos os printfs que eu havia retirado j\u00e1 que n\u00e3o apareciam mesmo, e rodar. Em uma hora eu consegui consertar o meu embri\u00e3o de jogo, adicionei suporte ao joystick direito (esse era um dos bugs, o outro era ter muitos acessos aos arquivos, no PS2 ele tem poucos file pointers simult\u00e2neos) e unifiquei o sistema de sprites em uma vari\u00e1vel \u00fanica, otimizando a execu\u00e7\u00e3o um bocado.O resultado est\u00e1 nesta screenshot abaixo: Os gr\u00e1ficos est\u00e3o com alguns bugs porque eu n\u00e3o tive tempo de arrumar o mapa ap\u00f3s criar o novo sistema de tiles\/sprites, mas d\u00e1 para ter uma id\u00e9ia vendo o protoman l\u00e1 na parte superior esquerda da tela.Resumindo, se voc\u00ea tem paci\u00eancia para fazer as configura\u00e7\u00f5es iniciais do SDK, programar para o Playstation 2 usando a SDL \u00e9 uma grande barbada, e altamente recomend\u00e1vel pela divers\u00e3o Nerd que ir\u00e1 gerar \ud83d\ude09<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-rockbot"],"_links":{"self":[{"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":0,"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=\/wp\/v2\/posts\/14\/revisions"}],"wp:attachment":[{"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rockbot.upperland.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}