jAsm

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Re: jAsm

Inläggav bjonte » 1 juni 2016, 06:58

Jag har implementerat moduler nu. Jag valde varianten att exportera på stället där en symbol definieras för att det var enklast att implementera. Jag skulle kunna bygga ut det med den andra varianten med i framtiden om nu det kommer att kännas relevant.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 1 juni 2016, 08:37

Med tanke på allt arbete med assemblern så förväntar man ju sig att du kommer spotta ur dig ett riktigt herrejössesverk med den!
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 bjonte » 1 juni 2016, 09:41

Det blir ju definitivt inget gjort så länge jag sitter och filar på den. Men jag gör det i omgångar.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav carlsson » 1 juni 2016, 11:01

Bjonte är den raka motsatsen till TV-seriens MacGyver. 8)
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 » 1 juni 2016, 14:22

Haha, så jag tillverkar massor med kottgranater som jag aldrig får användning för?
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 1 juni 2016, 14:24

Jag har mekat med min musikspelarkod och under den perioden så hittade jag saker som jag kände behövde finnas för att det ska bli smidigt att programmera. De fixar jag nu. Efter det måste jag dra igång något igen.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 5 juni 2016, 22:30

Jag har äntligen fixat en printfunktion som är behändig för att skriva ut adresser och sådant som kan vara trevligt när man debuggar. Det var kanske det tråkigaste jag har gjort på länge.

Jag har ett par till grejor som jag känner bör fixas innan jag går vidare med annat. Jag vill kunna använda sizeof() på en subrutin och så har jag funderat på att stödja dynamiskt genererade symbolnamn. Jag vet bara inte alls hur det ska se ut syntaktiskt. Jag har sett detta förr men jag ha lyckats glömma bort vilken assembler det var som hade det. Säg gärna till om du råkar veta en som har stöd för detta.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 18 juni 2016, 20:00

Jag har börjat meka med dynamiskt genererade symbolnamn. Det finns egentligen flera olika lösningar på problemet som genererade symbolnamn försöker lösa. Problemet är om man har en meta-loop som genererar ett antal kodsnuttar där man måste referera till data som genereras i en annan loop.

Kickassembler löser detta genom att låta en definiera en lista av addresser på ena stället som kan indexeras på det andra men det förutsätter att data kommer före kod. Kickassembler ska tydligen utökas med möjligheten att indexera på en label som pekar på en for-loop. Det är en ganska fin lösning men jag tror inte att den är möjlig att göra med min syntax då jag skiljer på lokala och globala symboler.

Jag kommer att implementera listor senare men än så länge får man generera symboler. Såhär kan det se ut.

Kod: Markera allt
repeat 10
{
  const dynamic "label" + string(@i) = *
  // label0, label1, ... definieras
  // data här
}

repeat 10
{
  lda symbol("label" + string(@i))
  sta något
}
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

jAsm

Inläggav bjonte » 31 augusti 2016, 22:04

Jag har haft ett uppehåll då jag har mekat med andra saker ett tag och jag har inte postat någon statusrapport på ett tag. Det som har kommit in som är lite större är att det går att deklarera ett antal importvariabler i en modul. Det är ett sätt för en modul att specificera vad den behöver av omvärlden och så kan programmet ange vad den vill ge modulen.

Säg att en musikspelarmodul behöver veta om den kör på pal eller ntsc. Eftersom många moduler vill veta detta ligger den koden in separat modul också. Huvudprogrammet gör kopplingen mellan dessa moduler. Såhär ungefär:

Kod: Markera allt
section code, "main", 4096
{
  jsr ntscdetect::setup
  jsr music::setup
  ...
  rts
}

section bss, "variables", *
{
}

include "ntscdetect.jasm"
include "music.jasm"

// här tilldelas en importerad variabel ett värde
music::ntsc = ntscdetect::ntsc


Ntscdetect måste exportera sin ntsc-variabel.

Kod: Markera allt
module ntscdetect
{
  section part, "main"
  {
    ...
  }

  section part, "variables"
  {
     export reserve byte ntsc
  }
}


Musikspelaren måste importera ntsc.

Kod: Markera allt
module music
import ntsc
{
  subroutine setup
  {
    lda ntsc
    ...
  }
}
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

jAsm

Inläggav bjonte » 5 september 2016, 19:06

Jag har under utveckligen av min musikspelare fått anledning att fylla områden med samma värde. Det måste göras med en repeatloop och en define. Det kändes lite klumpigt så jag började implementera ett fillkommando som tog två argument, storlek i bytes och en byte att fylla med.

Tyvärr så kände jag att det här känns som en genväg och det känns inte som att det är så detta ska lösas i det här språket. Jag har ju redan en konstruktion för att definiera en mängd så det skulle kännas bra om samma konstruktion användes till detta. Då skulle minnet kunna fyllas med word eller long också. På köpet skulle det gå att fylla med ett mönster. Det enda kruxet är hur det skulle se ut syntaktiskt. Krullparenteser används ju för att ange en mängd och i det här fallet ska jag ange ett mönster (som också är en mängd). Kanske skulle det kunna se ut såhär:

Kod: Markera allt
define byte[42] stuff = { 1, 2, 3, ... }
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 26 september 2016, 21:13

Repeterande mönster har jag implementerat precis som jag tänkte att det skulle bli. Jag är rätt nöjd med resultatet för det passar språket väldigt bra.

Nu har jag implementerat en ny idé som jag tror att KickAssembler var först med. Det är att tillåta labels som pekar på argumentet i en instruktion. Det gör koden mindre grötig när man ska referera till en adress i en instruktion till exempel. Förr gjorde man såhär:

Kod: Markera allt
const .addr = * + 1
lda $ffff


Nu kan man sätta en label direkt i instruktionen.

Kod: Markera allt
lda .addr: $ffff
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav carlsson » 27 september 2016, 09:21

Skön syntax! Det tog mig några läsningar för att smälta den, men den är både logisk och praktisk.
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 » 27 september 2016, 17:22

carlsson skrev:Skön syntax!


Menar du label till argumentet?

Jag funderade i ett par sekunder hur immediate-adresseringen skulle hanteras. Labeln skulle ju kunna vara både till vänster och till höger om brädgården. Jag valde att vara konsekvent med att en label måste följa direkt efter instruktionsnamnet. Såhär:

Kod: Markera allt
lda #addr:0 // <- inte tillåtet
lda addr: #0 // <- tillåtet
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav carlsson » 28 september 2016, 09:00

Precis. Att sätta immediate före den lokala labeln hade sett märkligt ut. Det finns ju några ännu mer speciella fall, exempel:

loop: lda .addr: grafik,x
loop: lda .addr: #<grafik (vad hade syntax annars blivit, lda #<.addr grafik eller lda #.addr <grafik ??)

Möjligen har man ingen självmodifierande kod i samband med indirekt indexerad adressering, annars kan man också tänka sig:

loop: lda .addr: (zptr),y

där man alltså skulle byta 16-bitarspekare emellanåt, genom att ändra argumentet.
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 » 28 september 2016, 11:17

Själv använder jag de här varianterna frekvent.

Kod: Markera allt
lda .addr: #0
lda .addr: $ffff
bne .addr: jumptable
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 2 gäster

Banners

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