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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 { § '' § '' § '' § '' § '' § '' § '' § '' § '' }
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.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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...
Partager