{"id":55,"date":"2023-06-16T16:59:06","date_gmt":"2023-06-16T16:59:06","guid":{"rendered":"https:\/\/www.darknd.net\/?p=55"},"modified":"2023-11-13T14:44:30","modified_gmt":"2023-11-13T14:44:30","slug":"1-ensamblador-msx","status":"publish","type":"post","link":"https:\/\/www.darknd.net\/?p=55","title":{"rendered":"#1 Ensamblador MSX (ld, add, equ)"},"content":{"rendered":"\n<p>Hace poco comentaba como el ensamblador es una de mis asignaturas pendientes, as\u00ed que con la excusa del blog, voy a obligarme un poco a retomarlo, a continuaci\u00f3n voy a exponer un programa sencillo, el cual me ayudo mucho a iniciarme con el ensamblador, grac\u00edas a los v\u00eddeos de Fernando Garc\u00eda de BitVision (<a href=\"http:\/\/z80st.es\/cursos\/bitvision-assembler\">BitVision &#8211; Curso Assembler R\u00e1pido para MSX (z80st.es)<\/a>).<\/p>\n\n\n\n<p>El c\u00f3digo es el siguiente:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"409\" src=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1-1024x409.jpg\" alt=\"\" class=\"wp-image-56\" srcset=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1-1024x409.jpg 1024w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1-300x120.jpg 300w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1-768x307.jpg 768w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1-720x288.jpg 720w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1.jpg 1489w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Descargar: <a href=\"https:\/\/www.darknd.net\/wp-content\/uploads\/prog1.asm\">https:\/\/www.darknd.net\/wp-content\/uploads\/prog1.asm<\/a><\/p>\n\n\n\n<p>Cosas a tener en cuenta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ld (destino, origen) : cargamos el valor de origen, en destino.\nadd (destino, origen): sumamos el valor de origen, con el valor de destino, y lo guardamos en este \u00faltimo.<\/code><\/pre>\n\n\n\n<p>Una vez escrito el programa, lo compilaremos con sjasm (<a href=\"http:\/\/www.xl2s.tk\/sjasm42c.zip\">http:\/\/www.xl2s.tk\/sjasm42c.zip<\/a>), y nos generar\u00e1 un fichero .bin, que podremos a\u00f1adir a un disquete virtual con Catapult de OpenMSX por ejemplo.<\/p>\n\n\n\n<p>Una vez hecho esto, arrancamos nuestro OpenMSX, y ejecutamos los siguientes comandos:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"250\" src=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_2.jpg\" alt=\"\" class=\"wp-image-57\" srcset=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_2.jpg 582w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_2-300x129.jpg 300w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/figure>\n<\/div>\n\n\n<p>Los comandos<strong> poke(direcci\u00f3n memoria, valor)<\/strong>, grabaran en las direcciones de memoria los valores asignados, en este caso (2 y 3, en <strong>h8600 <\/strong>y <strong>h8601 <\/strong>respectivamente).<\/p>\n\n\n\n<p>Luego cargaremos nuestro programa con bload, y se ejecutar\u00e1, la suma de los valores, que se guardar\u00e1 en la direcci\u00f3n <strong>h8602<\/strong>. Con <strong>print peek<\/strong> podremos ver el valor guardado en dicha direcci\u00f3n.<\/p>\n\n\n<figure class=\"wp-block-post-featured-image\"><img loading=\"lazy\" decoding=\"async\" width=\"402\" height=\"105\" src=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_3.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" style=\"object-fit:cover;\" \/><\/figure>\n\n\n<p>Algo interesante que podemos hacer, y que en un futuro nos vendr\u00e1 genial para las funciones de la BIOS, es a\u00f1adir un alias a diferentes valores de memoria.<\/p>\n\n\n\n<p>El MSX en su bios trae funciones predefinidas, las cuales podemos consultar en la siguiente web, <a href=\"https:\/\/map.grauw.nl\/resources\/msxbios.php\">MSX BIOS calls (grauw.nl)<\/a> .<\/p>\n\n\n\n<p>En este caso, vamos a asignarles a las direcciones <strong>h8600<\/strong> y <strong>h8601<\/strong> los alias, <strong>NUM1<\/strong> y <strong>NUM2<\/strong>, y a <strong>h8602<\/strong> el alias <strong>RESULT<\/strong>. Esto no cambiar\u00e1 el funcionamiento del programa, pero m\u00e1s adelante, nos puede ayudar a identificar direcciones que definamos para un uso concreto de una manera m\u00e1s agradable a la vista.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"493\" src=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4-1024x493.jpg\" alt=\"\" class=\"wp-image-64\" srcset=\"https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4-1024x493.jpg 1024w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4-300x145.jpg 300w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4-768x370.jpg 768w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4-720x347.jpg 720w, https:\/\/www.darknd.net\/wp-content\/uploads\/2023\/06\/prog1_4.jpg 1503w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Hace poco comentaba como el ensamblador es una de mis asignaturas pendientes, as\u00ed que con la excusa del blog, voy a obligarme un poco a retomarlo,&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":58,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4],"tags":[],"class_list":["post-55","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msx","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.darknd.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":8,"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":110,"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions\/110"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.darknd.net\/index.php?rest_route=\/wp\/v2\/media\/58"}],"wp:attachment":[{"href":"https:\/\/www.darknd.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.darknd.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.darknd.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}