as504 - een alternatieve assembler voor de Siemens SAB-C504
View this page in English.
Direct doorgaan naar de download sectie.
Features
- Open source (C met yacc), dus:
- Cross platform (win32 binary beschikbaar, anderen op aanvraag)
- Simpele interface
- Directe foutmeldingen (niet via listfile)
- Lange bestandsnamen en identifiers mogelijk
- Grotendeels compatibel met ASM504 en standaard assembly (met bijv. punten voor de assembler directives), dus:
- Ondersteuning voor: USING, AR0..7, INCL, IF, ELSE, ENDIF, EQU, BYTE, DS (=SKIP), etc.
Gebruik
Assembleren van test.asm kan met:
as504 test.asm
In windows kan de .asm file dus gewoon op de as504 executable gedropped worden
om hem te assembleren. In het ge-opende DOS-venstertje verschijnen evt.
foutmeldingen. Om te voorkomen dat het venster meteen weer afsluit, moet eerst
op enter gedrukt worden (deze melding kan uitgeschakeld worden door voor het
compileren "-D WIN32
" uit de Makefile te verwijderen).
Eventueel kunnen op de commandline de opties -l
en -d
meegegeven worden, die resp. staan voor listfile (ongeveer hetzelfde als die
van ASM504) en debug (print extra debug-informatie voor de compiler).
as31
as504 is een uitbreiding van as31, de 8031/8051 assembler van
Ken Stauffer. Naast een aantal
bugfixes zijn er voornamelijk compiler directives en aliases toegevoegd om
de assembler compatibel te maken met ASM504. Achteraf bleek er nog een
tweede versie van as31 met een aantal bugfixes te bestaan, zie de download
sectie.
Problemen met ASM504
Ik ben ertoe gekomen om met as504 te beginnen omdat er geen Linux
assembler was voor de SAB-C504. Het bleek dat dit een 8051 variant was en
dus kon ik de open source as31 gebruiken, maar deze was niet compatibel
met ASM504 code. Verder bleek tijdens het testen dat ASM504 een aantal fouten
bevat (o.a. m.b.t. de foutafhandeling), het gaat om de volgende problemen:
- Regels met alleen een onbekend woord erop worden geaccepteerd, terwijl
dit syntactisch incorrect is. Hierdoor kan een fout als
ORG 20h
H0: DS 1
H1: DS 1
H2: DS 1
H3; DS 1
ongezien blijven (;
na H3).
- De regels
ORG 80h
MOV A, #0
ORG 80h
NOP
worden geaccepteerd. Alhoewel dit niet direct fout is, wordt
op deze manier wel code overgeschreven, terwijl dat nooit de bedoeling
kan zijn.
label: ORG 80h
wordt zo geinterpreteerd dat het label
eerst gedefinieerd wordt (op de vorige geheugenlocatie) en daarna de ORG
gedaan wordt. Dit is echter vrijwel altijd een nutteloze operatie en
de meeste assemblers doen danook eerst de ORG en geven het label vervolgens
de waarde 80h (in dit geval).
Deze problemen heb ik bij toeval ontdekt en sluiten niet uit dat er meer fouten
in ASM504 zitten die tot vervelende debug-sessies kunnen leiden.
Verschillen van as504 met ASM504
Voordelen:
- Wel open source, dus uitbreidbaar en aanpasbaar
- Cross platform (getest in Windows en Linux)
- Simpele interface (drag&drop in Windows)
- Foutmeldingen direct op het scherm (niet via listfile)
- Lange bestandsnamen en identifiers mogelijk
- Vaak betere foutafhandeling en warnings
Belangrijkste verschillen in implementatie:
- Compiler directives SET, SEG en OFFS zijn niet geimplementeerd
- END, FOLD, LIST, LMARG, NOFLD, NOLST, PAGE, PGLEN en TABS worden genegeerd.
- $IDEF, $PASS en $USR1..9 zijn niet geimplementeerd ($ wel, dus
SJMP $
is mogelijk)
- String constanten werken standaard zoals in C:
- Strings beginnen en eindigen met " (dubbel)
- Escapen van karakters met backslash: \n, \r, \t, \b, \", \' en \\
- Een enkel karakter kan als getal behandeld worden als deze tussen
enkele '-s staat.
- Als bij het compileren
-D WINDOWS_QUOTING
is meegegeven
kunnen strings echter wel met ' beginnen, maar hierdoor werkt de
enkel-karakter functie dus niet meer. Bij het compileren van
onderstaande Win32 binary is deze define aangezet.
Download
Zie de ChangeLog voor een lijst van wijzigingen per versie-datum.
Compileren
Op een standaard UNIX systeem met een C compiler, make en yacc zou het mogelijk
moeten zijn as504 als volgt te bouwen (aangenomen dat as504 in de CWD staat):
tar -xvjf as504*.tar.bz2
cd as504*/
make
make man
as504
is dan de assembler en as504.cat
de manpage.
Eventueel kunnen in de Makefile compiletime opties meegegeven worden, het gaat
om:
-D OS_linux
, vervang dit door -D WIN32
om voor
windows te compileren.
-D WINDOWS_QUOTING
, haal dit weg om enkel-karakter functionaliteit
te kunnen gebruiken.
License
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
See http://www.gnu.org/copyleft/gpl.html
Bugs/Contact
Bekende bug: geïnclude files moeten afgesloten worden met een regeleinde (wordt gefixt als de assembler nog gebruikt gaat worden door anderen, graag melden dus...).
Bugs melden bij mij: freek -at- vanwal -dot- nl.