jAsm

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Re: jAsm

Inläggav bjonte » 7 november 2017, 21:20

Nu har jag rättat till den här fadäsen med a-registret och ett konstant värde i z80. Det är incheckat i develop-branchen. Jag gör en release senare när jag inte sitter på ett tåg.

Detta berör instruktionerna adc, add, sbc och sub. Nu kan alla ta antingen ett värde, eller ett a-register och ett värde som argument. Det stör mig att det inte har varit konsekvent från början i Zilogs syntax.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 7 november 2017, 21:26

Jag gjorde i samma veva så att ett oscillerande variabeltillstånd, där variablernas värden inte stabiliseras, till ett fel. Tidigare var det en varning, men sannolikheten för att ett oscillerande tillstånd ska kunna byggas till ett fungerande program är låg. Det resulterar oftast i ett program som är trasigt om de oscillerande variablerna används till något, vilket är vanligast.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 8 november 2017, 06:24

Oscillerande variabeltillstånd? Är det en typisk z80 term? Annars är minnen ofta initierade till vissa värden typ ff eller 00 vid start. Eller är det andra minnesrymder vi pratar om?
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1261
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: jAsm

Inläggav bjonte » 8 november 2017, 07:10

Det handlar om när assemblern försöker lista ut vad variabler och labels har för värde. I assembler är det ju tillåtet att använda dem var som helst i programmet och inte bara efter att de har definierats. Det gör att assemblern måste springa igenom källkoden flera varv innan alla variabler har fått ett vettigt värde. Det är då möjligt att skriva program som helt enkelt inte har en lösning. Det här till exempel.

Kod: Markera allt
section code, "main", $8000 {
   const jämn = a & 1 == 0
   // om a är jämn, gör udda, annars gör jämn
   if (jämn) {
      nop
   }
a:
}


Programmet försöker få a att både ligga på en jämn och en udda adress, vilket inte går. Då får man ett felmeddelande om ett instabilt variabeltillstånd. Det är inte vanligt att råka in i detta men det är möjligt att göra det.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav TBC » 13 februari 2018, 12:12

En sak som kanske är lite onödig är listan med möjliga adresseringmoder som listas när man skrivit nån felaktig instruktion.
Även med verbose=0 så skriver den ut en väldigt lång lista, borde väl räcka att man vet att det är fel där.
Användarvisningsbild
TBC
Erfaren mästare
Erfaren mästare
 
Inlägg: 306
Blev medlem: 4 september 2008, 16:44

Re: jAsm

Inläggav bjonte » 13 februari 2018, 18:50

Mmm, det där är för att nybörjare ska direkt se vilka möjligheter som finns istället för att bara få ett generiskt fel. Det hela ballade ju ur fullständigt när jag implementerade stöd för z80 eftersom den har en miljon varianter av ld. Kanske är det rimligt att begränsa listan om man sänker verbose-nivån.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav TBC » 13 februari 2018, 21:04

Hehe , jo, nu måste man scrolla upp några sidor för att se var felet var.
Användarvisningsbild
TBC
Erfaren mästare
Erfaren mästare
 
Inlägg: 306
Blev medlem: 4 september 2008, 16:44

Re: jAsm

Inläggav bjonte » 14 februari 2018, 22:11

Jag har lagt att se över det där på att-göra-listan.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 6 mars 2018, 20:41

Min kompis David hittade ett fel när han kollade hur jAsm funkar som referens till sin egen 68000-assembler. Det gick att komma åt lokala variabler från föregående pass. Detta vara alltså möjligt att göra.

Kod: Markera allt
var .a = .b
var .b = 0


Det ska såklart ge assembleringsfel så jag har lagat det i develop-branchen. Jag ska släppa en ny release nästa vecka någon gång. Det är så bökigt att kompilera till Windows så jag drar mig för det. Jag borde ta tag i att korskompilera egentligen, men det är jobbigt det med.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 1 augusti 2018, 07:06

Nu har jag sprungit på problem som gör att jag behöver en map/dictionary-datatyp (uppslagsdatatyp?). Jag satt och försökte skriva generiska makron för hoppa mellan banker på 128:an. Koden behöver hoppa via delat minne och jag försökte först att skriva en funktion som hanterade bankbytet och hoppet men antalet instruktioner exploderade av all stackhantering. Det bästa verkar vara att generera en hoppfunktion för varje adress som ska hoppas till. Då blev problemet att jag behöver samla in alla unika adresser som det ska hoppas till för att sedan generera koden i slutet av programkoden. En map-struktur skulle passa bra till detta.

Så nu är jag i valet och kvalet. Hur ska jag uttrycka infogande och uppslag?

Det finns ju två olika former av infogande.
  • sätt in ett nytt värde och att skriva över är inte tillåtet
  • sätt in ett nytt värde och skriv över eventuellt gammalt värde. Detta känns mest rimligt
Uppslag kan göras på flera olika sätt.
  • Hämta ett värde och falera om det inte finns
  • Hämta ett värde och returnera ett förinställt värde om det inte finns
  • Hämta en referens till ett värde och skapa ett förinställt värde om det inte finns

Jag är nog mest inne på att inte ha några förinställda värden och falera uppslag som inte hittar något. Det skulle kunna se ut såhär:

Kod: Markera allt
var objekt = map()
objekt.set("storlek", 43)
lda #objekt.get("storlek")
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 2 augusti 2018, 06:29

Andra syntaktiska problem är hur det ska se ut att iterera över en uppslagsdatatyp och om det ska gå att initiera den med förinställda värden.

Iterering skulle kunna se ut såhär:

Kod: Markera allt
for(.nyckel, .värde in objekt) {
    ...
}


Om den inte går att initiera med förinställda värden så går det inte att skapa den som ett const-objekt. Så det behövs någon form av initieringsmöjlighet. Kanske något i stil med detta?

Kod: Markera allt
const objekt = map("höjd" = 10, "bredd" = 11)
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 6 augusti 2018, 09:34

Jag implementerade map-typen på Datastorm och har nu släppt en ny version. I samma veva ändrade jag operatorprioriteringen för shift-operatorer. Jag hade härmat andra språk där och satt att +-*/ hade högre prioritet, men det är ju inte alls bra. Det är mest intuitivt att låta shift ha prioritet. 1<<4+1 betyder alltså nu (1<<4)+1 och inte 1<<(4+1).

Jag gjorde ett seriöst försök att bygga Windowbinärer i Linux också, men jag föll på mållinjen så jag får ha kvar Windows på en dator om det ska bli några sådana binärer byggda.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav Redreamer » 7 augusti 2018, 13:08

Oavsett vad som har prioritet så kan det ju vara bra att följa en standard... så det blir precis så omständigt som man förväntar sig.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1261
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: jAsm

Inläggav bjonte » 7 augusti 2018, 14:44

Redreamer skrev:Oavsett vad som har prioritet så kan det ju vara bra att följa en standard...

Ja, det finns definitivt en poäng med det. Men då blir det heller aldrig bättre. De jag har pratat med om det här operatorproblemet säger oftast ”jag minns aldrig hur det är, men det är något som är ologiskt, så jag gödslar med parenteser”. Det är ju inte vettigt då det verkar finnas en prioritet som faktiskt är intuitiv (det kan förstås ifrågasättas).
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1690
Blev medlem: 17 april 2006, 23:12

Re: jAsm

Inläggav bjonte » 11 augusti 2018, 21:26

Jag hittade en allvarlig bug när man har långa uttryck som kan orsaka krascher eller som i mitt fall konstiga typfel. Jag ska släppa en ny version när jag kommer hem i morgon för att rätta till detta.
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 0 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