ecrire une page html avec fasm
bonjour, vous qui êtes désireux de coder en assembleur quoi qu'il arrive, j'ai une bonne nouvelle pour vous.
à force de jouer avec le compilo fasm et ses multiples facettes de la prog bas niveau, il est apparu nettement qu'il est très facile de construire des macros destinées à compiler un peu tout et n'importe quoi, en utilisant la syntaxe légère de fasm.
et au final, ça m'a donné l'occasion de tester une théorie selon laquelle il est possible d'écrire du html avec fasm, de sorte à enlever cette satanée syntaxe html qui à le don d'être très fatigante à lire et à écrire.
concrètement, ça donne du code qui à cette tête:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
include 'mhtml.inc'
header '-FOOL-','EDFED0'
center
§ '<h1>fool, the edfeds website.</h1>'
db '<embed src="http://fool.asm4u.net/asmx86/le%20reste/xfiles-s3e6-20m20s.mp3" autostart=true loop=false hidden=true></embed>'
§ '<span style="color: #201088"><FONT SIZE=1>'
link '#kaya',img 'http://fool.asm4u.net/kaya-icon-80.png'
link '#fool',img 'http://fool.asm4u.net/fool-icon-80.png'
link '#pic',img 'http://fool.asm4u.net/pic-icon-80.png'
empty
§ 'Hello world, welcome in my site, it is a very simple site writen with fasm using macros'
§ 'here, you can read and download some stuff about some of my passions'
§ ''
§ 'then, click and enjoy the first version of my website'
empty
anchor 'kaya',img 'http://fool.asm4u.net/kaya-icon-80.png'
link 'http://fool.asm4u.net/draw/', db 'click here to see draw folder'
file 'kaya.inc'
empty
anchor 'fool',img 'http://fool.asm4u.net/fool-icon-80.png'
file 'fool.inc'
empty
anchor 'pic',img 'http://fool.asm4u.net/pic-icon-80.png'
file 'pic14.inc'
empty
link 'http://fool.asm4u.net/index.html',img 'http://fool.asm4u.net/fool-icon-80.png'
§ 'return to HOME'
footer |
bon, rien de bien transcendant, mais ça marche, et le résultat est intéressant, ça donne cet embryon (plein de w3c errors) fonctionnel de mon site.
http://fool.asm4u.net
l'utilisation des directives include, file, db, etc... permet de manipuler des octets sans difficultés, c'est en quoi fasm permet de compiler tout et n'importe quoi avec la même syntaxe que lors de l'écrire de code asm.
les expressions numériques, combinées à des directives, permettent de générer des octets de manière mathématique, logique, prédéfinie, etc.
l'utilisation de la directive file permet d'inclure des fichiers binaire dans le fichier final, sans traitement aucun. du pur flat assembler, et ça permet de composer des briques html, de les agencer, de les manipuler.
l'utilisation de la directive include permet de manipuler des blocs de macros et de directives, de sorte à avoir des codes toujours plus comprimés. en partant d'une suite d'includes, de macros et de file, il est possible de générer n'importe quel type de compilation.
les macros sont là pour aider à l'écriture, ça permet de simplifier encore la syntaxe en limitant les paramètres, en les factorisant, en manipulant des file et des includes avec une seule macro.
voici le fichier macro "mhtml.inc', à include à la première ligne de tout fichier source.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
format binary as 'html'
org 0
crlf equ 10,13
macro header title,color
{
db '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">',crlf
db '<HTML>',crlf
db '<HEAD>',crlf
db ' <TITLE>',title,'</TITLE>',crlf
db ' </HEAD>',crlf
db ' <BODY bgcolor="',color,'">',crlf
}
macro footer
{
db '</BODY></HTML>',0
}
macro § text
{
db '<br>'
db text
}
macro img i
{
db '<IMG SRC="',i,'" ALT="',i,'">'
}
macro link l,t
{
db '<a href="',l,'">'
t
db '</a>'
}
macro anchor l,t
{
db '<a name="',l,'">'
t
db '</a>'
}
macro center
{
db '<center>'
}
macro empty
{
§ ''
§ ''
§ ''
§ ''
§ ''
§ ''
§ ''
§ ''
§ ''
} |
vu le fonctionnement de fasm, fermement lié aux services du système de fichiers, il est surement avantageux d'inventer une extension nouvelle, juste pour signifier un code source du type macro html. disons qu'une extension du style ".hsm" pourrait convenir, ou tout simplement, utiliser l'extension ".asm", mais uniquement dans un dossier dédié aux source html compilés par fasm.
le fait d'utiliser la directive file permet de composer en html pur des blocs, comme par exemple le bloc 'pic14.inc', qui est un fragment de fichier html, un bout de page qui peut être mis n'importe où dans le corps du document.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
<FONT SIZE=4>
<H1>-PIC14-</H1>
<br>
<br>
</FONT>
<FONT SIZE=1>
pic14 is an include file,some macro files, and lets you compile code in binary.
<br>
PIC14 means 14 bits instruction set, the instruction set of PIC12fxx and pic16fxx series.
<br>
for PIC18fxx series, instruction set is in 16 bits, then, need an other macro, that will be named PIC16. :) to be continued
<br>
i test it on a minimal circuit board, with a pic 12f 675, i choose this chip because of:
<br>
only 8 pins
<br>
low price
<br>
analog conversion
<br>
ease to program
<br>
pic family that share the same instuction set and internals.
<br>
<br>
<br>
<A HREF="http://fool.asm4u.net/pic14bit.zip">click here to download the PIC macro project</A>
<br>
this file contains:
<br>
<br>
</span>
<span style="color: #202020">
pic14.inc ;macros to compile pic14 instructions set
<br>
blinkled.asm ;test code for the connection diagram below
<br>
RCD.png ;JDM compatible programmer connection diagram, to use with ICPROG or compatible
<br>
sprint.zip ;tool to draw PCB, RCD programmer is "sprint/macro/interface/ICSP.lay"
<br>
pic12f675.pdf ;datasheet for the Pic 12f675 device
</span>
<span style="color: #008800">
<br>
<br>
<br>
to flash a PIC with blinkled.pic:
<br>
<br>
</span>
<span style="color: #202020">
open icprog
<br>
select pic 12f675 device
<br>
open blinkled.pic, the first word in program memory should be 2804
<br>
reverse byte order >> YES
<br>
connect RCD programmer, if not still done.
<br>
program all
<br>
wait a little (approximately 10 seconds), power down and up, or reset
<br>
the led blinks, the microcontroler Hello world.
<br>
<br>
</span>
<span style="color: #880000">
<br>
if the device don't program, check icprog setings.
<br>
vcc control enable for JDM
<br>
verify during programming
<br>
com1
<br>
direct I/O
<br>
delay 4
<br>
<img src="http://fool.asm4u.net/RCD.png" alt="rcd programmer">
<br>
</span>
<span style="color: #DD2000">
<b>
if the device don't program, check that the device is readable, if it don't read at all, check your connections.
</b>
</FONT> |
au final, je pense qu'il sera possible de coder de très beaux site, à la main, avec un code source assez petit et sympa à éditer.
pour l'instant, cette solution (loin d'être parfaite) me convient parfaitement. il sera nécessaire par la suite de gérer la création dynamique de pages, le compilo fasm étant assez rapide pour être exécuté en tant que script cgi ou batch s'il est chargé en mémoire en tant que dll.
j'espère que cette petite démo vous à donné envie d'approfondir le sujet, de jouer avec et, pourquoi pas, aider à augmenter cette contribution avec des macros plus abouties et des tests de viabilité.
vous aurez toutefois besoin d'un niveau non négligeable en écriture de macros, et une bonne compréhension de ce que sont les octets, les fichiers, le code html et la compilation. sans quoi vous aurez du mal à cerner en quoi c'est intéressant.
bonne journée à bientôt pour une suite...
:)