jAsm

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Re: jAsm

Inläggav bjonte » 28 februari 2016, 20:35

Här är ett exempel på problemet. Jag har en modul med kod och variabler (något krystat exempel för att illustrera):

Kod: Markera allt
section part, "main"
{
  // <- A: number of lives left
  subroutine lives_left
  {
    lda lives
    rts
  }
}

section part, "variables"
{
  reserve byte lives
}


I den här modulen vill jag att lives ska vara lokal inom modulen och inte global. Det går inte eftersom den här labeln definieras i en annan rymd än där den används. Visst går det att ha den global men stoppa in det i ett skumt namespace, men det löser inte riktigt problemet. Det jag vill kunna göra är att deklarera användandet av namnet och koppla samman detta till en rymd. Det skulle kunna se ut såhär.

Kod: Markera allt
// extra variabelrymd för att begränsa variabeln
{
  declare .lives

  section part, "main"
  {
    // <- A: number of lives left
    subroutine lives_left
    {
      lda .lives
      rts
    }
  }

  section part, "variables"
  {
    reserve byte .lives
  }
}


Det som inte är helt perfekt här är att det nu är möjligt att smyga in en till variabel med samma namn någon annanstans och hur det ska hanteras är inte helt klart. Risken är att programmet oväntat byter beteende helt med ett till synes oskyldigt variabeltillägg.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 3 mars 2016, 22:45

Jag har nu arbetat med att lösa detta. Jag har kastat fördeklarerade konstanter och infört declare-nyckelordet för fördeklarering av alla typer av lokala symboler. Det behövdes ingen specifik lösning på problemet med två definitioner för samma fördeklarerade symbol. Orsaken är att båda då kommer att tolkas som att ha samma namn och vara i samma rymd och det är redan förbjudet.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 10 mars 2016, 18:29

Jag har nu byggt om en massa kod i mitt kodbibliotek till moduler med bara en fil som innehåller både kod och minnesreserveringar. I den processen upptäckte jag problemet att det inte går att komma åt lokala variabler utanför ett macro. Det är lite irriterande eftersom det är precis så man vill göra när makrot är en del av det API som ska användas och variablerna kanske ska vara osynliga utåt. Jag ska försöka fixa detta innan Slaskhack.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 19 mars 2016, 21:14

Det här är fixat men jag har inte gjort en officiell release av det. Jag gör det i morgon.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 19 mars 2016, 21:18

Nu när jag satt och programmerade insåg jag att jag måste införa ett explicit modulkoncept i alla fall. Lokala variabler är trevligt för begränsade områden men det ser inte bra ut när lokala namn använda över längre avstånd. Jag tvingas deklarera hela tiden och deklarationer som jag tänkte att jag slapp för att exponera variabler utanför en tänkt modul sitter jag nu och gör för lokala variabler istället. Man måste ha valet att göra en modul som exponerar vissa "globala" variabler och att inte göra det och exponera alla globala variabler.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 5 maj 2016, 19:16

jAsm har legat lite på is under utveckling av annat, men under tiden har jag samlat ihop en lista på buggar och saker som behöver läggas till. Jag ska ta tag i den listan nu för att komma ikapp. Den stora förändringen är modulkonceptet som måste in.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav TBC » 8 maj 2016, 14:57

Satt och kollade på Hearthstone-turneringen på Dreamhack:
Bilagor
jasm.jpg
Användarvisningsbild
TBC
Erfaren mästare
Erfaren mästare
 
Inlägg: 306
Blev medlem: 4 september 2008, 16:44

Re: jAsm

Inläggav bjonte » 8 maj 2016, 15:50

Nu har visst assemblern fått eget liv och skriver egna bottar när jag sover. Jag måste förstöra programmet!
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 20 maj 2016, 18:47

Jag har börjat med modulkonceptet nu. Moduler kan skapas och variablerna inuti är privata. Nu måste jag bestämma hur man ska tala om att en variabel ska vara publik och åtkomlig utifrån. Antingen med ett separat nyckelord "export" såhär:

Kod: Markera allt
module test
{
  export a
  const a = 5
}


Eller så får varje uttryck som skapar variabler ha ett valbart extraargument för att styra exporten.

Kod: Markera allt
module test
{
  const export a = 5
}


Det är svårt att bestämma.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 20 maj 2016, 21:07

Jag röstar för alternativ två. Så slipper man skriva två rader för alla som man vill kunna exportera. Ser bättre ut i mina ögon, men jag har kodat för lite för att egentligen ha någon talan om detta.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1260
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: jAsm

Inläggav carlsson » 20 maj 2016, 21:20

Kan det finnas lägen där man definierar konstanter/variabler i ett skede, och sedan vill välja om de ska vara externa eller inte? Vilken sjuk människa har #ifdef runt exporten av variabler, vilket skulle tala för att hålla isär de bägge?
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2313
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: jAsm

Inläggav bjonte » 20 maj 2016, 22:02

Det finns faktiskt fördelar och nackdelar med båda.

Om de sitter ihop är det mindre att skriva men ganska många olika konstruktioner finns för att skapa symboler och alla skulle behöva denna extra exportfunktionalitet. Macro export, enum export, var export, reserve export, o s v. En label till exempel:

Kod: Markera allt
export a:



Om de inte sitter ihop så kommer alla export-deklarationer se likadana ut. Det kommer också att vara möjligt att lägga exporteringen i ett separat block där användaren av modulen kan få en överblick av vad som exponeras. Nackdelen är att det blir mer att skriva och att det är möjligt att klanta till det så att det blir svårare att se vad som exporteras.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 20 maj 2016, 22:11

carlsson skrev:Vilken sjuk människa har #ifdef runt exporten av variabler


Jag tänkte först att det var helt tokigt men sedan insåg jag att det inte är helt orimligt. Om ett system kan konfigureras att vara självgående eller manuellt triggat får man det behovet. Tänk att det är en modul som spelar musik till exempel. Den har en flagga som talar om ifall ett interrupt ska skapas när musiken initieras. Om interruptet ska initieras så vill man inte exportera updatefunktionen i musikrutinen, men om det inte ska initieras så måste updatefunktionen exporteras, annars går den inte att trigga utifrån.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav TBC » 21 maj 2016, 10:35

I sjasm som jag använder för Z80 finns inget export, man kan komma åt alla labels genom att skriva <modul>.<label>
Användarvisningsbild
TBC
Erfaren mästare
Erfaren mästare
 
Inlägg: 306
Blev medlem: 4 september 2008, 16:44

Re: jAsm

Inläggav bjonte » 21 maj 2016, 12:18

Det är ju exakt så namespaces funkar i jAsm. Modulerna tillför att kunna specificera vad som ska vara tillgängligt utifrån.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

FöregåendeNästa

Återgå till Programmering/prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst

Banners

BOA Japon Mediapalatset Nostalgibutiken
Quartex Retro Overlays Retroplay Spel och sånt
Super Motaro Söders Serie & Skivhandel vintagegames.se RG 2016