<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mariano Guerra's Log (Publicaciones sobre celulares)</title><link>http://marianoguerra.org/</link><description></description><atom:link href="http://marianoguerra.org/es/categories/celulares.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Mon, 18 Nov 2024 17:56:43 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Repiola 0.1</title><link>http://marianoguerra.org/es/posts/200905repiola-01/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;Despues de 2 dias de desarrollo sale a la luz repiola 0.1 en version desktop y mobile.&lt;br&gt;&lt;br&gt;screenshot del caso:&lt;br&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XkKIWh0VZYk/ShIp5cGX9nI/AAAAAAAAGL0/MkOHFzS_XsI/s1600-h/repiola-6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_XkKIWh0VZYk/ShIp5cGX9nI/AAAAAAAAGL0/MkOHFzS_XsI/s320/repiola-6.png" alt="" id="BLOGGER_PHOTO_ID_5337374575159670386" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XkKIWh0VZYk/ShIp5YlM7sI/AAAAAAAAGLs/uK3DuzVdnPo/s1600-h/repiola-5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_XkKIWh0VZYk/ShIp5YlM7sI/AAAAAAAAGLs/uK3DuzVdnPo/s320/repiola-5.png" alt="" id="BLOGGER_PHOTO_ID_5337374574215229122" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;eso es en emulacion, lo instale en mi celular (un misero alcatel 701a) y anda como piña, el unico drawback es que anda un poco lento la ejecucion, pero eso es porque no tengo en cuenta ninguna optimizacion, por ejemplo parseo la linea y genero el opcode cada vez que la ejecuta, eso dentro de un loop es muchas veces.&lt;br&gt;&lt;br&gt;features:&lt;br&gt;* version desktop (swing)&lt;br&gt;* version mobile (anda en cualquier cel con java que soporte MIDP 2.0, que es bastante comun)&lt;br&gt;* en la version mobile guarda el codigo entre ejecuciones (si no es un perno)&lt;br&gt;&lt;br&gt;una cosa que cambie desde el ultimo post es la sintaxis del lenguaje ya que escribir simbolos en un celular es mucho mas dificil que escribir palabras de diccionario, cambie las instrucciones por unas muy parecidas a las de asm de 80x86.&lt;br&gt;&lt;br&gt;las instrucciones ahora son p -&amp;gt; put, s -&amp;gt; get, = -&amp;gt; set, + -&amp;gt; add, - -&amp;gt; sub, * -&amp;gt; mul, / -&amp;gt; div, % -&amp;gt; mod, &amp;amp; -&amp;gt; and, | -&amp;gt; or, ^ -&amp;gt; xor, e -&amp;gt; eq, n -&amp;gt; ne, j -&amp;gt; jmp&lt;br&gt;&lt;br&gt;las otras quedan iguales.&lt;br&gt;&lt;br&gt;hostee el codigo en http://code.google.com/p/repiola/, estoy peleando con el svn de netbeans para que me deje comitear los proyectos, en un rato tendrian que estar hosteados.&lt;br&gt;voy a subir los dos jars como releases.&lt;br&gt;&lt;br&gt;para cerrar, un ejemplo con la nueva sintaxis, pinta una x en degrade y despues pinta pixeles aleatorios&lt;br&gt;&lt;br&gt;: begin&lt;br&gt;&lt;br&gt;put r2&lt;br&gt;add r0 1&lt;br&gt;add r1 1&lt;br&gt;add r2 1&lt;br&gt;&lt;br&gt;lt r0 200 begin&lt;br&gt;&lt;br&gt;# right to left line&lt;br&gt;&lt;br&gt;set r0 199&lt;br&gt;set r1 0&lt;br&gt;set r2 0&lt;br&gt;&lt;br&gt;: another&lt;br&gt;&lt;br&gt;put r2&lt;br&gt;sub r0 1&lt;br&gt;add r1 1&lt;br&gt;add r2 1&lt;br&gt;&lt;br&gt;lt r1 200 another&lt;br&gt;&lt;br&gt;# some random pixels&lt;br&gt;&lt;br&gt;set r3 0&lt;br&gt;&lt;br&gt;: random&lt;br&gt;&lt;br&gt;rnd r0&lt;br&gt;mod r0 200&lt;br&gt;rnd r1&lt;br&gt;mod r1 200&lt;br&gt;rnd r2&lt;br&gt;add r3 1&lt;br&gt;put r2&lt;br&gt;&lt;br&gt;lt r3 200 random&lt;br&gt;&lt;br&gt;# end!&lt;/p&gt;</description><guid>http://marianoguerra.org/es/posts/200905repiola-01/</guid><pubDate>Tue, 19 May 2009 04:07:00 GMT</pubDate></item><item><title>repiola (dibujando a lo logo en pc y celulares)</title><link>http://marianoguerra.org/es/posts/200905repiola-dibujando-lo-logo-en-pc-y/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XkKIWh0VZYk/ShCvcKmKV2I/AAAAAAAAGJs/i6LTxtOp_bc/s1600-h/repiola-2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 307px; height: 320px;" src="http://1.bp.blogspot.com/_XkKIWh0VZYk/ShCvcKmKV2I/AAAAAAAAGJs/i6LTxtOp_bc/s320/repiola-2.png" alt="" id="BLOGGER_PHOTO_ID_5336958456849651554" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Disclaimer: este post es para documentar lo que estoy haciendo y no olvidarme la proxima vez que mire el codigo, si no entendes nada no hay drama :)&lt;br&gt;&lt;br&gt;Este proyecto lo empece el sabado 16 de mayo hablando con un amigo de que a pesar de tener java en el celular no teniamos ninguna app copada para usar en esos momentos en los que no tenes nada que hacer (esperar a alguien, viaje eterno en colectivo etc etc).&lt;br&gt;&lt;br&gt;y se me ocurrio juntar algunas cosas que me gustan para hacer la primera version de "repiola", que todavia esta un poco en alpha pero que va queriendo.&lt;br&gt;&lt;br&gt;la cosa es asi:&lt;br&gt;&lt;br&gt;* tenemos una "maquina virtual" que intepreta opcodes de 32 bits, la maquina tiene 8 registros de uso general de 32 bits r1, r2..., r8 y dos registros especiales x, y&lt;br&gt;* la maquina tiene una "pantalla" de nxm pixels en donde puede escribir pixels RGB&lt;br&gt;* las operaciones basicas que la maquina puede interpretar son:&lt;br&gt;- aritmeticas (+, -, *, /, %)&lt;br&gt;- binarias (&amp;amp;, |, ^, !)&lt;br&gt;- de movimiento (ir n pixels arriba, abajo, izquiera, derecha, setear x a n, setear y an n)&lt;br&gt;- de pintado (pintar el pixel en (x, y) al valor n, almacenar el color en el pixel (x, y) en el registro r)&lt;br&gt;- de comparacion (==, !=, &amp;lt;, &amp;gt;, &amp;lt;= , &amp;gt;=)&lt;br&gt;- utiles (generar un entero aleatorio y guardarlo en el registro r, nop, salto incondicinal)&lt;br&gt;&lt;br&gt;pero como no todos escribimos en hexadecimal diseñe un lenguaje muy simple lo mas corto posible (para poder escribirlo en el cel sin morir en el intento) y que fuera bastante mnemonico para poder recordarlo mientras uno esta en el medio de la nada, el formato es muy parecido a assembler, pero como el compilador del lenguaje esta separado de la maquina virtual se pueden generar otros lenguajes que generen los opcodes.&lt;br&gt;&lt;br&gt;el formato general del lenguaje es algo asi:&lt;br&gt;&lt;br&gt;&amp;lt;operacion&amp;gt; &amp;lt;valor&amp;gt;&lt;br&gt;&amp;lt;operacion&amp;gt; &amp;lt;registro&amp;gt; &amp;lt;registro&amp;gt;|&amp;lt;valor&amp;gt;&lt;br&gt;&amp;lt;operacion&amp;gt; &amp;lt;registro&amp;gt; &amp;lt;registro&amp;gt;|&amp;lt;valor&amp;gt; &amp;lt;etiqueta&amp;gt;&lt;br&gt;&lt;br&gt;ejemplos:&lt;br&gt;&lt;br&gt;asignar al registro r1 el valor 10&lt;br&gt;&lt;br&gt;= r1 10&lt;br&gt;&lt;br&gt;asignar al registro r2 el valor de r1&lt;br&gt;&lt;br&gt;= r1 r2&lt;br&gt;&lt;br&gt;pintar el color 10 en la posicion actual de x, y&lt;br&gt;&lt;br&gt;p 10&lt;br&gt;&lt;br&gt;pintar el color almacenado en r1 en x, y&lt;br&gt;&lt;br&gt;p r1&lt;br&gt;&lt;br&gt;mover x a la derecha 10 pixels&lt;br&gt;&lt;br&gt;r 10&lt;br&gt;&lt;br&gt;mover y abajo la cantidad de pixels almacenado en r3&lt;br&gt;&lt;br&gt;d r3&lt;br&gt;&lt;br&gt;setear x a 5&lt;br&gt;&lt;br&gt;x 5&lt;br&gt;&lt;br&gt;setear y al valor almacenado en r4&lt;br&gt;&lt;br&gt;y r4&lt;br&gt;&lt;br&gt;mover y hacia arriba 3 pixels&lt;br&gt;&lt;br&gt;u 3&lt;br&gt;&lt;br&gt;almacenar en el registro 5 el color del pixel en x, y&lt;br&gt;&lt;br&gt;s r5&lt;br&gt;&lt;br&gt;guardar un valor aleatorio en el registro 6&lt;br&gt;&lt;br&gt;? r6&lt;br&gt;&lt;br&gt;definir una etiqueta llamada "aca"&lt;br&gt;&lt;br&gt;: aca&lt;br&gt;&lt;br&gt;saltar a la etiqueta llamada "aca"&lt;br&gt;&lt;br&gt;j aca&lt;br&gt;&lt;br&gt;algunas operaciones aritmeticas (supongo que ya entendieron el formato :D)&lt;br&gt;&lt;br&gt;+ r1 10&lt;br&gt;- r2 r1&lt;br&gt;* r3 10&lt;br&gt;/ r4 r3&lt;br&gt;% r5 2&lt;br&gt;&lt;br&gt;algunas operaciones binarias&lt;br&gt;&lt;br&gt;&amp;amp; r1 r2&lt;br&gt;| r2 1&lt;br&gt;^ r3 r2&lt;br&gt;! r4&lt;br&gt;&lt;br&gt;operaciones de comparacion&lt;br&gt;&lt;br&gt;si r1 es igual a 1337 entonces saltar a la etiqueta "aca"&lt;br&gt;&lt;br&gt;e r1 1337 aca&lt;br&gt;&lt;br&gt;el operador distinto&lt;br&gt;&lt;br&gt;n r1 1337 aca&lt;br&gt;&lt;br&gt;si r1 es mayor a r2 saltar a "alla"&lt;br&gt;&lt;br&gt;gt r1 r2 alla&lt;br&gt;&lt;br&gt;con mayor o igual&lt;br&gt;&lt;br&gt;ge r1 r2 alla&lt;br&gt;&lt;br&gt;menor y menor o igual&lt;br&gt;&lt;br&gt;lt r1 r2 alla&lt;br&gt;le r1 r2 alla&lt;br&gt;&lt;br&gt;muchos ejemplos? bueno, pero tengan en cuanta que cubri todos los operadores del lenguaje, los otros dos son "#" para comentario y "." para nooperation.&lt;br&gt;&lt;br&gt;actualmente estoy trabajando en una interfaz swing para probarlo y cuando todo ande bien hago la gui para celulares (no da para pasar un jar al celular para probar y teclear ahi :D)&lt;br&gt;&lt;br&gt;sobre el formato de los opcodes a grandes razgos es asi:&lt;br&gt;&lt;br&gt;voy a representar cada byte de instriccion con una i, byte de numeros con una n, byte de pixel con una p, bytes sin usar con una x, bytes de identificador de registro fuente con una s, de destino con una d.&lt;br&gt;&lt;br&gt;los operadores de movimiento que reciben un numero tienen el siguiente formato:&lt;br&gt;&lt;br&gt;ixnn&lt;br&gt;&lt;br&gt;los de movimiento que reciben un registro fuente&lt;br&gt;&lt;br&gt;isxx&lt;br&gt;&lt;br&gt;los operadores aritmeticos, binarios y de asignacion con registro fuente y un numero (el numero se almacena en el registro fuente):&lt;br&gt;&lt;br&gt;isnn&lt;br&gt;&lt;br&gt;los operadores aritmeticos, binarios y de asignacion con registro fuente y un registro destino (el valor de destino se almacena en fuente):&lt;br&gt;&lt;br&gt;isdx&lt;br&gt;&lt;br&gt;para el caso de poner un pixel de color en la posicion actual el formato es&lt;br&gt;&lt;br&gt;ippx&lt;br&gt;&lt;br&gt;para las operaciones de comparacion con numeros (llll es una direccion de 32 bits a la posicion a la que hay que saltar):&lt;br&gt;&lt;br&gt;isnn llll&lt;br&gt;&lt;br&gt;para operaciones de comparacion entre registros&lt;br&gt;&lt;br&gt;isdx llll&lt;br&gt;&lt;br&gt;el estado actual (domingo 17 de mayo es que anda todo menos la traduccion de etiquetas a direcciones de memoria) en modo interprete se puede ejecutar todo, pero si se compila los saltos no van a funcionar, sera para otra vez, por ahora con el interprete ando bien porque puedo hacer ejecucion paso a paso y debugear.</description><guid>http://marianoguerra.org/es/posts/200905repiola-dibujando-lo-logo-en-pc-y/</guid><pubDate>Sun, 17 May 2009 23:23:00 GMT</pubDate></item></channel></rss>