Tuesday, June 06, 2006

Funderingar kring Det-ännu-inte-döpta-projektet

Har funderat lite mer kring spelet jag nämnde i förra posten. Det man egentligen behöver är:
En textruta, syntaxcoloring är en bonus men kommer sen, med stöd för den röda linjen.
En interpretator eller kompilator, klurar på UnderC.
Fönster där man kan se variabelinnehåll, stackinnehåll, callstack och andra debug-saker.
Ett system för "uppdrag", samt senare en editor för dessa.

GUI-system har man egentligen två val mellan, windows eller ogre(med Crazy Eddie´s Gui). Om man skriver allt i windows är nog C# enklare, och det vore trevligt att skriva något större i det för att lära sig. Grafiken blir något alla känner igen och det blir enkelt och grafikbjäffs-fritt. Det blir dock antagligen plattformslåst vilket jag tycker vore tråkigt.
Om man skriver allt i ogre+cegui så blir det betydligt snyggare, antagligen enklare att implementera den röda linjen också. Det blir i c++ isf, vilket jag ändå trivs med och kan bäst, men det kanske innebär mer arbete för att få igång gui-delen.

Ett sätt att lösa debug-fönstrena, men som förutsätter att vissa saker finns i UnderC, är att mellan att varje instruktion körs, den där röda linjen kan ju inte röra sig hur fort som helst, kolla vad alla variablar har för värden, och uppdatera dem efter det. borde knappt synas att det tar några millisekunder innan allt uppdaterats. Jag kommer ju ändå behöva upprätta ett stabilt strömsystem för in- och utmatning till och från interpretatorn.

Uppdragshanteringen vill jag ha helt datadrivet. En undermapp benämnd "missions" där man kan lägga till fler filer som sedan dyker upp(sen kanske man kan lägga till serier av uppdrag eller nåt sånt). Varje mission är nog enklast att ha som en xml-fil med en struktur som liknar nåt sånt här:

<mission>
   <code>
   int fak(int val)
   {
      return val+(val-1);
   }
   int main(int argc, char** argv)
   {
      int f = fak(5);
   }
   </code>
   <answer>
   <variable name="f" value="5" />
   </anser>
   <description text = "f ska innehålla den korrekta fakulteten av argumentet." />
   <enabled name="variables" name="callstack">
   <disabled name="stack">
</mission>

Allt som behövs för ett uppdrag ska finnas i den filen så att man kan lägga till nya utan att ändra i koden. Uppdragen kommer inte ha beskrivningar som "Variablen f ska ha värdet 50" utan mer inexakta som i exemplet ovan.

Har dock, som kan anas av titlen ett problem. Ett namn på det här skrället. Anders föreslog adhoc, som i en lösning som fungerar för det här just nu, en "pragmatisk adhoclösning" är ett fulhack :), det funkar men är lite småskeptisk. Det är inte många som vet att det kan betyda det, tror jag iaf, jag hade ingen aning om det innan Anders förklarade. Förslag mottages.

Angående något helt annat, låg o funderade lite inatt och en annan idé kom upp för hur man kan hantera kopplingen assemblerad kod<->källkod i högnivåspråk. Assemblerad kod är ju något i stil med:
push d0
mov #1, d1
asl.w d1
så om man i början av programmet har en lista med alla filnamn samt ett id:
main.cpp 1
foo.h 2
foo.cpp 3
så lägger man innan varje instruktion till filid samt radnummer, i stil med
2.1.push d0
3.4.mov #1,d1
3.4.asl.w d1
Visst det gör filen större men iom att det bara är i debug-buildar så är det ingen katastrof.

Var styrelsemöte idag, första med nya styrelsen. Tror det kommer bli ett lika trevligt år som förra. Och jag slapp skriva protokoll...wohoo.

1 comment:

Anders said...

En sak att fundera på är hur du ska lösa att det görs ändringar i koden medan den körs? Jag menar, en rad kan ju inte läsas in förrän precis när den "röda linjen" kommer dit och då först ska den interpreteras.... Blir ett intressant problem.