jAsm

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Re: jAsm

Inläggav bjonte » 12 februari 2020, 06:27

Om man pluggar in extraminne blir det aktuellt för adresser och i fysikkoden jag har används ibland 24 bitar för heltal och decimaler.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav TBC » 12 februari 2020, 09:15

En tetrahex kanske?
Användarvisningsbild
TBC
Erfaren mästare
Erfaren mästare
 
Inlägg: 313
Blev medlem: 4 september 2008, 16:44

Re: jAsm

Inläggav bjonte » 12 februari 2020, 15:09

TBC skrev:En tetrahex kanske?


Det blir kanske konstigt att associera med 4 och 6 men du är inne på ett intressant spår! ’tribyte’ känns inte helt knasigt.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

jAsm

Inläggav bjonte » 12 februari 2020, 18:41

’dubbeldussin’, haha!
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 12 februari 2020, 20:36

Kör på't ;)

Skickat från min ANE-LX1 via Tapatalk
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1316
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: jAsm

Inläggav bjonte » 15 februari 2020, 18:05

Nu kom jag på en till obskyr egenskap som jag vill ha. Jag vill kunna definiera ett block där det inte är tillåtet att använda stackoperationer. Det här blir användbart i C128-programmering när stacken har flyttats temporärt för att användas till att manipulera minne. Ett hopp till en subrutin kladdar ju ner området då så det kan inte tillåtas. Det vore fint att kunna uttrycka det och få assemblern att tvinga en att inte göra fel där. Typ såhär:

Kod: Markera allt
nostack {
  lda #0 // ok
  jsr test // error
  pha // error
  pla // error
  sta sak // ok
}
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 22 mars 2020, 10:56

Jag har nu börjat koda in nya saker i assemblern. Jag har funktioner för att ändra strängar till versaler eller gemener och jag har lagt till en logn-funktion. Nu går det också att adressera låg- och högbyte i ett ord genom att lägga på .lo eller .hi till variabelnamnet.

Kod: Markera allt
// dessa får samma resultat
lda addr.hi
lda addr + 1

define word addr = 1000


Ett kanske vanligare scenario om självmodifierande kod används:

Kod: Markera allt
lda #$00
sta .addr.lo
lda #$c0
sta .addr.hi

...

lda .addr:$ffff,x
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 22 mars 2020, 11:09

Jag klurar nu på hur jag ska lösa att hålla en bit kod inom ett 256-byte-block i minnet. Jag tänker att det finns potentiellt två fall att hantera. Dels att varna för att koden spiller över en block-kant och dels att fylla ut minnet med något tills koden ligger helt inom blocket.

Kod: Markera allt
no_crossing 256
{
   ... kod här ...
}

no_crossing_align 256, $ea
{
   ... kod här ...
}
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 22 mars 2020, 16:56

Något som jag alltid blandar ihop (av oerfarenhet) är
Lda #<label

där hade
lda #label. hi passat fint. Men jag är kanske ett undantag. Eller fungerar det att göra så?

Skickat från min ANE-LX1 via Tapatalk
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1316
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: jAsm

Inläggav bjonte » 22 mars 2020, 17:27

Bra fråga. Nej, det skulle inte funka just nu. Orsaken är att om label är en define som pekar på ett word så går det inte att skilja på label.hi som blir adressen till minnesplatsen för höga byte:n och label.hi som skulle vara höga delen av labeladressen.

Du kan komma runt detta genom att en gång för alla göra ett macro som hämtar rätt del av adressen.

Kod: Markera allt
macro low(.addr)
{
  return <.addr
}
macro high(.addr)
{
  return >.addr
}

lda #low(label)
ldx #high(label)
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 28 mars 2020, 15:58

Nu har jag släppt en ny version med en del av det som jag har pratat om redan. Nu går det att anropa en subrutin som om det vore ett macro utan argument.

Kod: Markera allt
subroutine test
{
    ...
}

test() // genererar ’jsr test’


Jag har också lagt till alias för bcs och bcc för att det lättare ska gå att fatta hur de ska användas i jämförelser.

Kod: Markera allt
bhs label // hoppa om högre eller lika med
blt label // hoppa om lägre än
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1781
Blev medlem: 17 april 2006, 23:12

Föregående

Å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
cron