Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Pseudo-assembler interpreter (QPasm)  (gelezen 6190 keer)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Pseudo-assembler interpreter (QPasm)
« Gepost op: 2009/08/30, 15:16:23 »
In juni heb ik een pseudo-assembler interpreter library + bijpassend frontend geschreven voor het vak Microprocessoren in mijn 1e jaar aan de UHasselt. Ik heb dit programma onlangs uitgebreid en er een mini IDE van gemaakt voor deze simpele pseudo-assembler taal.

Ik heb het programma gereleased onder de LGPL v3 licentie.
Ik heb de code net geupload op Google Code: http://code.google.com/p/qpasm/



Enkele features:
  • Modulair UI ontwerp: C backend library met C++/Qt frontend
  • Pseudo-assembler programma's worden in virtueel statisch geheugen opgeslagen. Voor opslag van gegevens kan er virtueel dynamisch geheugen gebruikt worden, hoewel het geheugen volgens Von Neumann architectuur geïmplementeerd is en men dus bijvoorbeeld dynamisch instructies kan aanmaken of statische instructies kan overschrijven
  • Code editor met intelligente syntax highlighting, lijnnummering, visuele breakpoints en undo/redo functionaliteit
  • Debugging mogelijkheden: breakpoints, manual step, timed step, pause
  • On-the-fly aanpassen van gegevens in het register of het geheugen
  • On-the-fly symbol resolving: labels kunnen gebruikt worden in programma's, maar ook bij het on-the-fly aanpassen van het geheugen worden labels automatisch geresolved
  • Integreert automatisch met lichte en donkere thema's (syntax highlighter past zichzelf automatisch aan) maar indien gewenst kunnen de kleuren van de syntax highlighter ook manueel geconfigureerd worden
  • Gewenste layout, lettertype en kleuren worden lokaal opgeslagen in een config.ini bestand
  • Invoerformaat is erg flexibel: er mag witruimte voor, achter en tussen instructies staan, instructies zijn niet hoofdlettergevoelig, extra tekst achter een instructie wordt gezien als commentaar, ongeldige instructies worden behandeld als commentaar
  • Pseudo-assembler programma's die via de run-functie uitgevoerd worden draaien in een aparte thread waarin wordt voorkomen dat de GUI kan vastlopen door het aantal signalen naar de GUI te beperken. Assembler-programma's die een oneindige lus veroorzaken zullen hierdoor de GUI niet freezen

Het programma is niet nuttig voor de gemiddelde gebruiker, maar bepaalde onderwijsinstellingen kunnen het vast wel gebruiken om de basis van assembler aan de hand van een pseudo-assembler aan te leren aan studenten. Misschien ga ik de geïmplementeerde taal nog modulair maken zodat er meerdere talen geïmplementeerd kunnen worden indien hier interesse voor is.

edit: topic verplaatst naar Etalage omdat het nu een volledig afgewerkt product is
« Laatst bewerkt op: 2009/09/08, 01:24:24 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline track

  • Lid
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #1 Gepost op: 2009/08/30, 16:33:59 »
Zijn dat de commando's en structuur van een bestaande µC of van een imaginaire (van het instituut) ?

En, is dit commando/structuur set soms modulair geïntegreeerd ?  (dat je het kunt uitwisselen)

Dat zou heel interessant zijn voor echte ontwikkeling dan.

track

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #2 Gepost op: 2009/08/30, 16:37:06 »
Zijn dat de commando's en structuur van een bestaande µC of van een imaginaire (van het instituut) ?
Imaginaire. Het is een erg simpele µC met slechts 2 registers en de assemblertaal heeft slechts 19 instructies (meer indien je onderscheid maakt tussen adresseringswijzen)

En, is dit commando/structuur set soms modulair geïntegreeerd ?  (dat je het kunt uitwisselen)
Ik weet niet wat je precies bedoelt, maar de gebruikte instructies zijn gedefinieerd in een headerfile, en de interpreter file gebruikt de constanten hierin om instructies uit te voeren.
« Laatst bewerkt op: 2009/08/30, 16:39:15 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline track

  • Lid
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #3 Gepost op: 2009/08/30, 16:45:39 »
Dus is het eigenlijk bedoeld en geschikt voor opleidingsdoeleinden.

Bij de "real life" ontwikkelingsomgevingen (of cross-assembler) kun je het gehele blok van eigenschappen (commando's, registers ...)
via een confg-bestand uitwisselen.  Dat is bij jou dus niet de bedoeling.  Een ander doeleinde dus.

track

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #4 Gepost op: 2009/08/30, 16:51:55 »
Dus is het eigenlijk bedoeld en geschikt voor opleidingsdoeleinden.
Dat klopt. Het programma is opzich niet erg bruikbaar voor praktische doeleinden, daarom dat ik het ook niet in de Etalage plaats.
Maar de sourcecode bevat vast wel enkele dingen die interessant kunnen zijn voor programmeurs, daarom staat het hier :)
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline track

  • Lid
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #5 Gepost op: 2009/08/30, 17:00:50 »
Misschien is die ook bruikbaar voor ICTer elders ?  Of zijn de spec's van andere instituten te veel verschillend ?

Anders zou ik voorstellen dit (duidelijk met het label "opleiding") in een .deb-je te zetten ...
Dan pas is het echt beschikbaar.

track

Offline muksie

  • Lid
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #6 Gepost op: 2009/08/30, 20:41:31 »
Ziet er erg goed uit en ik denk dat dit zeker ook op andere instituten gebruikt kan worden. Ik was zelf vorig jaar studentassistent bij een vergelijkbaar vak van de Rijksuniversiteit Groningen, en daar gebruikten we ook een soortgelijk programma, alleen dan met de IJVM instructieset. Er zaten echter wat nare bugs in dat programma. Als ik dit jaar weer bij dat vak assisteer, zal ik eens even kijken of QPasm geen betere keuze is.

Een .deb'je zou dan wel makkelijk zijn, dan kan systeembeheer het probleemloos installeren op alle practicumsystemen (Debian + KDE).

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #7 Gepost op: 2009/08/30, 21:04:41 »
In dat geval zul je wel een heel andere instructieset moeten maken (de huidige instructieset is volgens mij nog eenvoudiger dan IJVM) en de interpreter aanpassen. Dat is niet modulair geschreven. Neemt natuurlijk niet weg dat je het wel kan en mag aanpassen (of modulair mag maken). Ook mist het momenteel debugmogelijkheden.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline muksie

  • Lid
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #8 Gepost op: 2009/08/30, 21:51:12 »
IJVM is inderdaad stack-based en in bepaalde opzichten lastiger in gebruik. Veel mensen zoeken bijvoorbeeld de MUL en DIV instructies, maar die zul je toch echt zelf moeten implementeren =D.

Echter wordt bij dat vak niet exclusief met IJVM gewerkt, het was bij enkele opdrachten wel verplicht om te gebruiken, maar bij andere werd ook een pseudo-asm gebruikt of mocht men zelf kiezen welke instructieset gebruikt werd.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #9 Gepost op: 2009/09/01, 12:38:11 »
Ik heb beslist om QPasm toch nog een beetje uit te breiden zodat het volgend jaar gebruikt kan worden aan onze universiteit als alternatief voor een verouderd Qt3 based programma waar vele bugs in zitten (foute bestanden worden soms overschreven bij opslaan, crashes...)

Indien je interesse hebt kunnen we misschien een API ontwikkelen om meerdere talen te kunnen ondersteunen. In principe zou dit makkelijk doenbaar zijn via QtScript ofzo, maar aangezien de core library pure C is zullen we er wellicht iets meer moeite mee hebben.. laat me maar iets weten als je interesse hebt om dit te implementeren.

Het doel van het programma blijft wel om gebruikt te worden door educatieve instellingen zoals universiteiten voor het aanleren van basis assembler. Dit zal slechts een simpele interpreter (geen compiler die naar machinecode compileert) blijven die enkel relatief simpele assembler talen kan ondersteunen.

Features die ik zelf nog toe wil voegen:
  • Undo/redo
  • Verbeterde syntax highlighting
  • Verbeterde debugging features (timed step, breakpoints, on-the-fly editing)
  • Configuratiesysteem (highlighting schema, monospaced font, layout)
  • Verbeterde error handling (bij compile errors duidelijk aangeven waar de fout zit, robuuster maken)
  • Labeling support (zodat men regels kan labelen en men hiernaar kan verwijzen)
  • Line numbering / word wrapping
  • Case insensitivity

De laatste 3 features ben ik op dit moment mee bezig, alsook de verbeterde syntax highlighting.
So far, so good: http://wesley.vidiqatch.org/images/qpasm_1.1_alpha1.png
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #10 Gepost op: 2009/09/02, 10:35:55 »
Versie 1.1 alpha 3 ondersteunt nu: case insensitivity, undo/redo, verbeterde syntax highlighting, symbol resolving (zodat labels gebruikt kunnen worden), lijn nummers, en word wrapping :) ook een heleboel kleine bugfixes in LibPASM en usability verbeteringen in de frontend. http://wesley.vidiqatch.org/images/qpasm_1.1_alpha3.png

Voor alpha 4 ga ik aan debugging features werken (timed step, breakpoints, on-the-fly editing, visual debugging, backwards stepping) en ga ik een configuratieschermpje maken om kleuren, layout, debugging features in te stellen :) daarna de error handler nog wat verbeteren en wat mij betreft is het dan af :) (tenminste, voor het doel dat ik voor ogen heb)

edit: versienummers waren fout
« Laatst bewerkt op: 2009/09/04, 19:36:06 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #11 Gepost op: 2009/09/04, 19:40:13 »
Alpha 4 bevat vele verbeteringen en bugfixes en de genoemde debugging features zijn nu geïmplementeerd (breakpoints, on-the-fly editing, visuele weergave van plaats in programma) een andere grote verandering is dat LibPASM bij een "complete run" nu in een aparte thread gedraaid wordt waardoor de GUI niet kan vastlopen. Signalen vanuit LibPASM aan de GUI worden nu eveneens met een artificiële interval verstuurd om dit te voorkomen :) http://wesley.vidiqatch.org/images/qpasm_1.1_alpha4.png
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #12 Gepost op: 2009/09/08, 01:25:53 »
Heb dit topic toch maar verplaatst naar Etalage omdat ik de laatste dagen vrij hard aan het project gewerkt heb en het is nu volledig afgewerkt :) De eerste post bevat meer info over het project.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Re: Pseudo-assembler interpreter (QPasm)
« Reactie #13 Gepost op: 2009/09/12, 12:58:41 »
Is er een mogelijkheid tot vertalen, profoX?

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #14 Gepost op: 2009/09/12, 14:28:30 »
Is er een mogelijkheid tot vertalen, profoX?
Nog niet, maar het grootste stuk van de code is al wel van die mogelijkheid voorzien. Als je wil maak ik het vertaal-systeem even volledig af en dan kan de app vertaald worden aan de hand van Qt Linguist...
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Pseudo-assembler interpreter (QPasm)
« Reactie #15 Gepost op: 2009/09/12, 17:20:13 »
Code op SVN is nu volledig translation-aware.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)