{"id":193,"date":"2020-08-16T21:01:26","date_gmt":"2020-08-17T00:01:26","guid":{"rendered":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/?p=193"},"modified":"2020-08-16T21:07:34","modified_gmt":"2020-08-17T00:07:34","slug":"milton-11","status":"publish","type":"post","link":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/2020\/08\/16\/milton-11\/","title":{"rendered":"Milton #11"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-content\/uploads\/2020\/08\/parser.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"815\" height=\"717\" src=\"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-content\/uploads\/2020\/08\/parser.png\" alt=\"\" class=\"wp-image-194\" srcset=\"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-content\/uploads\/2020\/08\/parser.png 815w, https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-content\/uploads\/2020\/08\/parser-300x264.png 300w, https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-content\/uploads\/2020\/08\/parser-768x676.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/a><figcaption>Interpretador e m\u00e1quina virtual &#8220;Adele VM-e&#8221; funcionais no Arduino UNO<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Com <strong>12.590 bytes<\/strong>, a vers\u00e3o simplificada da m\u00e1quina virtual (VM) de Adele est\u00e1 rodando no Arduino UNO. A expectativa \u00e9 manter a mem\u00f3ria RAM livre em torno de <strong>1.500 bytes<\/strong> que, em tese, ser\u00e3o suficientes para os programas que rodar\u00e3o em Milton. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A parte inferior da imagem exibe a <em>pilha<\/em> da VM, um dos recursos mais legais da linguagem. Quando elaborei o conceito de Adele, tinha em mente computadores antigos (386s), o que me obrigou a fazer escolhas minimalistas para o uso de mem\u00f3ria, flexibilizar a implementa\u00e7\u00e3o de instru\u00e7\u00f5es (API em C) e otimizar o m\u00e1ximo poss\u00edvel a execu\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por sorte ou coincid\u00eancia, o conceito se saiu bem no Arduino e seu teto de 2kb de mem\u00f3ria RAM. Obviamente precisarei decidir como resolver os demais gargalos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>Ponto flutuante<\/em>: na vers\u00e3o para PCs, a pilha de Adele usa <em>floats<\/em>. Os AVRs n\u00e3o s\u00e3o muito eficientes em opera\u00e7\u00f5es com esse tipo de dados, ent\u00e3o a primeira vers\u00e3o da pilha utiliza inteiros. Preciso estudar como \u00e9 a situa\u00e7\u00e3o nos Esp8266 e Esp32. <\/li><li><em>Imagens<\/em>: os editores <a rel=\"noreferrer noopener\" href=\".\/tag\/miltonp\/\" target=\"_blank\">milton:p<\/a> e <a rel=\"noreferrer noopener\" href=\".\/tag\/miltonu\/\" target=\"_blank\">milton:u<\/a> s\u00e3o bastante econ\u00f4micos no uso de mem\u00f3ria (16&#215;16 <em>pixels<\/em> por <em>sprite<\/em>), mas na pr\u00e1tica ainda terei o dilema de lidar com m\u00faltiplos <em>framebuffers<\/em> de 8&#215;5 para sa\u00edda de TV ou 20&#215;15 para sa\u00edda VGA via Esp8266. Penso em reduzir os <em>sprites<\/em> na TV para 8&#215;8, se for poss\u00edvel, subindo o <em>framebuffer<\/em> para 16&#215;10.<\/li><li><em>La\u00e7os e saltos<\/em>: Adele \u00e9 linguagem de montagem, de forma que o controle do programa \u00e9 feito por <em>repete<\/em> (la\u00e7os), <em>vaipara<\/em>, <em>vaisemenor<\/em>, <em>vaisemaior<\/em> (condicionais) e <em>executa <\/em>(fun\u00e7\u00f5es do usu\u00e1rio). Na vers\u00e3o PC, mantenho uma pilha do mesmo tamanho da principal para controlar a recurs\u00e3o. Nesta implementa\u00e7\u00e3o, a pilha j\u00e1 aloca preciosos 128 bytes.<\/li><li><em>Vari\u00e1veis<\/em>: penso em substitu\u00ed-las integralmente por 16 registradores de 8 bits e 16 de 32 bits. Nos PCs, s\u00e3o 256 inteiros, 256 em ponto flutuante e 256 para acesso a <em>strings<\/em> (ostenta\u00e7\u00e3o). N\u00e3o imagino o usu\u00e1rio comum programando em Adele e sim em <a rel=\"noreferrer noopener\" href=\"https:\/\/developers.google.com\/blockly\" target=\"_blank\">abstra\u00e7\u00f5es mais amig\u00e1veis<\/a> que gerem o <em>bytecode<\/em> que a m\u00e1quina interpreta (detalharei o formato em breve). Sendo assim, como as vari\u00e1veis ser\u00e3o resolvidas na camada da VM far\u00e1 pouca diferen\u00e7a.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sobre o \u00faltimo ponto, realmente penso em manter Lua (<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/daurnimator\/lua.vm.js\" target=\"_blank\">lua.vm.js<\/a>) e <a rel=\"noreferrer noopener\" href=\"https:\/\/developers.google.com\/blockly\" target=\"_blank\">Blocky<\/a> como op\u00e7\u00f5es para o usu\u00e1rio construir programas em Milton. Precisarei apenas oferecer interfaces para comunica\u00e7\u00e3o com a VM e as fun\u00e7\u00f5es dispon\u00edveis (pretendo implementar <a href=\"https:\/\/adele.loop-ufes.org\/#a-linguagem-adele-assembly\" target=\"_blank\" rel=\"noreferrer noopener\">todas<\/a>). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente, o pr\u00f3ximo passo consistir\u00e1 em preparar editores de c\u00f3digo em Adele Assembly para o servidor web e para as sa\u00eddas gr\u00e1ficas TV\/VGA. Depois disso ser\u00e1 poss\u00edvel come\u00e7ar a falar em Milton como <em>computador pessoal<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O funcionamento da VM resolve a parte mais irritante de desenvolver para AVRs &#8211; <em>carregar o sketch novamente para cada caractere alterado<\/em>. Poderei trabalhar diretamente na IDE web ou at\u00e9 no editor gr\u00e1fico, seja com arquivos, seja no <em>prompt<\/em> interativo de comando. Assim como no <a rel=\"noreferrer noopener\" href=\"https:\/\/nodemcu.readthedocs.io\/en\/master\/upload\/#initlua\" target=\"_blank\">NodeMCU<\/a>, haver\u00e1 um <em>script<\/em> de <em>boot<\/em> para Milton que ser\u00e1 carregado automaticamente, se existir no sistema de arquivos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com 12.590 bytes, a vers\u00e3o simplificada da m\u00e1quina virtual (VM) de Adele est\u00e1 rodando no Arduino UNO. A expectativa \u00e9 manter a mem\u00f3ria RAM livre em torno de 1.500 bytes que, em tese, ser\u00e3o suficientes para os programas que rodar\u00e3o em Milton. A parte inferior da imagem exibe a pilha da VM, um dos recursos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[38,9,40,42,41,39,16],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-atualizacoes","tag-adele-vm","tag-arduino","tag-avr","tag-blocky","tag-lua","tag-maquina-virtual","tag-uno"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":9,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"predecessor-version":[{"id":203,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/posts\/193\/revisions\/203"}],"wp:attachment":[{"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hugocristo.com.br\/projetos\/milton\/blog\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}