Bill Gates släpper källkoden till Altair Basic

Permalänk
Medlem
Skrivet av Sidde:

Alltid kul med mer BASIC-nyheter eftersom jag som leker med BASIC 65 varje vecka.
BASIC 65 är en vidareutveckling av Commodore BASIC 10 till Commodore 65 som i sin tur var en vidareutveckling av BASIC 7 som finns i Commodore 128an. Alltså har man klart fler features att använda jämfört med Microsoft BASIC 2, som att t.ex. kommunicera med VIC och SID-chippen utan att behöva använda PEEK och POKE.

<Uppladdad bildlänk>

Är förövrigt halvvägs in i Bill Gates nya självbiografi som innehåller en hel del berättelser om äventyren med BASIC och PDP10.

Fanns Simon’s Basic till C64, som var en utökad BASIC-tolk. BASIC-tolkarna som följde med datorerna var oftast ganska usla. Just C64:s BASIC var extremt nedbantad – det fanns inte ens instruktioner för att rita grafik på skärmen, till skillnad från till exempel MSX-maskinerna.

Kanske var det just därför C64 blev så populär: eftersom man var tvungen att använda PEEK och POKE för att få något gjort, kom man nära maskinvaran.

Det fanns ett klassiskt programmeringsexempel i C64-manualen där man kunde rita en ballong-sprite. Den lekte man mycket med och gjorde förbättringar så det åkte i sinus kurva osv.

Skrev många program i GFA Basic till Atarin, där kunde man kompilera programmen och använde inte längre rad nummer.

Skrivet av Lussarn:

Denna bok var en stor del till hur jag lärde mig programmera i början av åttitalet. 8 år gammal satt jag och försökte översätta en basic-dialekt till en annan, på en ORIC 1 som var familjens val av hemdator (förutom en demokassett fanns 0 programvara om jag inte skrev den själv). Varierande resultat, men nu hade det ju varit en barnlek, så visst lärde man sig något.

ORIC-1 var ju en konkurrent till ZX Spectrum – en brittisk budgetdator. Det fanns många kloner av Sinclair-maskinerna; Lambda 8300 var en annan.

Sinclair-maskinerna ZX80 (kanske lite udda), ZX81, ZX Spectrum och Sinclair QL (också rätt udda) lärde en hel generation att programmera.

När Commodore 64 var för dyr för en vanlig statarfamilj i Olof Palmes Sverige, så fanns ZX81 och ZX Spectrum där som prisvärda alternativ.

Spelen – hur fixade man dem?
Man gick till OBS-varuhuset (dåtidens Coop), köpte det spel man ville ha, kopierade det på en dubbel kassettbandspelare, och gick sedan tillbaka och returnerade spelet med förklaringen:
"Morsan sa att jag inte fick köpa det."

Permalänk
Medlem
Skrivet av Nyhet:

Förkovra dig i 157 sidor datorhistoria och Microsofts allra första produkt.

Läs hela artikeln här

Ser ut att vara 4K och 8K versionen av basicen. Själv gjorde jag en disassemblering av 12K varianten på tiden när man var student för att kunna köra den under CP/M. Kände igen mycket då jag skrivit en liten heltalsbasic innan men samtligt så lärde man sig en hel del.

En av de snyggare funktionerna i 12K versionen är koden för att testa variabeltyp:
Finns 4 variabeltyper: integer, string, single och double och det finns 4 flaggor i 8080 processorn.

;**************************************************************** ;* ;* RST 6 Entry ;* ;* Test variable type ;* ;* Returns: CY reset if DBL ;* Z set if STR ;* P if SNG ;* M if INT ;* ;**************************************************************** RST6: LDA VARTYP ; Get variable type CPI 010 JMP A07305 PAGE %10 ;**************************************************************** ;* ;* RST 6 Entry (test variable type) ;* ;**************************************************************** A07305: DCR A DCR A ;007306 DCR A ; RET ;007310

Permalänk
Medlem
Skrivet av kelthar:

Jag hade nog aldrig orkat skriva något av det jag kodar idag i assembler. Vet inte ens om det finns en anledning att göra det.

Det var kul att koda i asm på den tiden, men det är mest romantiserade över en svunnen tid när man var barn och hade all tid i världen, entusiasm i mängder och inget ansvar.

Jo, nu kan man ju göra det mesta i C vad gäller komma åt io-portar mm så behovet av assembler har ju minskat samt att kompilatorerna har blivit avsevärt bättre.

Permalänk
Medlem
Skrivet av klein:

Deras basic tolkar var inte mycket att hänga grannen. Den som fanns i C64 vara fruktsvärd. Dock var den bättre på MSX maskinerna.

ZX Spectrum basic var ljus år bättre än C64, även om C64 hade bättre hårdvara.

De var framförallt skrivna för att optimera minnesåtgången inte att vara snabbast.
Med lite kreativt användande av strängar kunde man får basicken hänga sig i upp till någon minut när den skulle göra garbage-colletion. Avser nu Altair, CP/M och tidiga IBM-PC versioner.

Permalänk
Medlem
Skrivet av SAFA:

De var framförallt skrivna för att optimera minnesåtgången inte att vara snabbast.
Med lite kreativt användande av strängar kunde man får basicken hänga sig i upp till någon minut när den skulle göra garbage-colletion. Avser nu Altair, CP/M och tidiga IBM-PC versioner.

Det finns en liknade bugg i ABC80 visa versioner. Skrev man DIM A$( $= är sol på abc80 av någon skumanledning ) , då fick man ett listskydd för sin program.

Permalänk
Datavetare
Skrivet av SAFA:

Ser ut att vara 4K och 8K versionen av basicen. Själv gjorde jag en disassemblering av 12K varianten på tiden när man var student för att kunna köra den under CP/M. Kände igen mycket då jag skrivit en liten heltalsbasic innan men samtligt så lärde man sig en hel del.

En av de snyggare funktionerna i 12K versionen är koden för att testa variabeltyp:
Finns 4 variabeltyper: integer, string, single och double och det finns 4 flaggor i 8080 processorn.

;**************************************************************** ;* ;* RST 6 Entry ;* ;* Test variable type ;* ;* Returns: CY reset if DBL ;* Z set if STR ;* P if SNG ;* M if INT ;* ;**************************************************************** RST6: LDA VARTYP ; Get variable type CPI 010 JMP A07305 PAGE %10 ;**************************************************************** ;* ;* RST 6 Entry (test variable type) ;* ;**************************************************************** A07305: DCR A DCR A ;007306 DCR A ; RET ;007310

Kändes lite knäppt att "double" är den typ man optimerar för, givet logiken måste man kolla carry-flaggan först för att reda ut "är det en double eller något annat".

Men det verkar vara vettigt givet att syntax:en i Altair Basic resulterade i att man i praktiken använde "double" by-default. Just det känns i sig som ett lite märkligt val, men BASIC handlade mer om att vara hyfsat enkelt än snabbt och för de som inte "tänker som en dator" är det i.o.f.s. mer logiskt att tal uppför sig som flyttal.

BTW: Borde ju gå att hyvla bort en instruktion om man bara vill reda ut vilken av de fyra typerna det handlar om. Kanske finns någon extra felhantering man kunde göra genom ovan?

Här ser man ändå ett bra exempel på hur CPU-design förändrats. ISA från 60/70-talen innehöll en den "smarta val", om förväntningen var att primära användaren var en människa som direkt skriver assembler.

Idag är flaggor och andra implicita effekter av instruktioner en sänke. Detta då primära användaren är nu en kompilator (vilket ändrar vilka instruktioner som är optimalt att inkludera) och effekter som flaggor skapar globalt synliga sidoeffekter som begränsar möjligheten att köra väldigt många instruktioner per cykel. I.e. flaggor blev en belastning när man började räkna "instruktioner per cykel" istället för "cykler per instruktion".

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Kändes lite knäppt att "double" är den typ man optimerar för, givet logiken måste man kolla carry-flaggan först för att reda ut "är det en double eller något annat".

Men det verkar vara vettigt givet att syntax:en i Altair Basic resulterade i att man i praktiken använde "double" by-default. Just det känns i sig som ett lite märkligt val, men BASIC handlade mer om att vara hyfsat enkelt än snabbt och för de som inte "tänker som en dator" är det i.o.f.s. mer logiskt att tal uppför sig som flyttal.

BTW: Borde ju gå att hyvla bort en instruktion om man bara vill reda ut vilken av de fyra typerna det handlar om. Kanske finns någon extra felhantering man kunde göra genom ovan?

Här ser man ändå ett bra exempel på hur CPU-design förändrats. ISA från 60/70-talen innehöll en den "smarta val", om förväntningen var att primära användaren var en människa som direkt skriver assembler.

Idag är flaggor och andra implicita effekter av instruktioner en rätt sänke. Detta då primära användaren är nu en kompilator och effekter som flaggor skapar globalt synliga sidoeffekter som begränsar möjligheten att köra väldigt många instruktioner per cykel. I.e. flaggor blev en belastning när man började räkna "instruktioner per cykel" istället för "cykler per instruktion".

Nej, man har inte optimerat mot double det man optimerat mot är kodstorlek. RST är en enbytes call instruktion, en vanlig call tar däremot 3 bytes. Om du tänker på den extra JMP instruktionen så beror det på att man bara har 8 bytes på sig innan man går in på RST 7-arean.
Default variabletyp är single: A = single, A% = 16 bit integer, A$ = sträng, A# double om jag minns rätt. Double är dessutom långsamt på en 8080 så används bara i nödfall.

Koden nedan är ett exempel på hur man använder RST 6 för att ta reda på tecken för en variabel:

;************************************************ ;* ;* Code to test sign of a variable ;* Note: RST5: Test sign of floating point number ,* ;************************************************ USGN: CALL SIGN ; Get sign of nr A16007: MOV L,A ; Set HL to 0 if Zero RAL ; to +1 if Positve SBB A ; to -1 if Negative MOV H,A ;016012 JMP SAVINT ; then save INT result ;************************************************ SIGN: RST 6 JZ TMERR ; Type Mismatch: String has no sign JP RST5 ; JMP if not integer LHLD A02051 ; get integer GSGNHL: MOV A,H ; and determine its sign ORA L ;016031 RZ ; MOV A,H ;016033 JMP A15731 ; Set sign flags

En annan optimering man gjort är att istället för att ha NULL-terminerade strängar för reserverade ord så har man satt 8:biten på sista byten i strängen.

Permalänk
Medlem
Skrivet av GuessWho:

Fake it till you make it.

Ja, och tvi satan vad jag hatar det, och alla som gör så.

Jag föredrar min alternativa: Fake it 'til you break it. För det är vad som inte sällan i slutändan händer. Det byggs ett fjärtfyllt luftslott som ser bra ut på utsidan, men så fort man går in i det så började det pysa, stinka och sedan rasar det ihop.

Visa signatur

9950X3D | 3090

Permalänk
Medlem
Skrivet av Lussarn:

Det finns ju något som heter risk/reward inom business

Ja, och det icke-sviniga sättet att implementera det: ta risken att bygga det, men ge fullständigt fan i att ljuga om att det redan finns innan det är klart eller ens påbörjat.

Nåja, nu är det ju inte det den här nyheten handlar om, så jag ska sluta OT:a.

Visa signatur

9950X3D | 3090

Permalänk
Datavetare
Skrivet av SAFA:

Nej, man har inte optimerat mot double det man optimerat mot är kodstorlek. RST är en enbytes call instruktion, en vanlig call tar däremot 3 bytes. Om du tänker på den extra JMP instruktionen så beror det på att man bara har 8 bytes på sig innan man går in på RST 7-arean.
Default variabletyp är single: A = single, A% = 16 bit integer, A$ = sträng, A# double om jag minns rätt. Double är dessutom långsamt på en 8080 så används bara i nödfall.

Koden nedan är ett exempel på hur man använder RST 6 för att ta reda på tecken för en variabel:

;************************************************ ;* ;* Code to test sign of a variable ;* Note: RST5: Test sign of floating point number ,* ;************************************************ USGN: CALL SIGN ; Get sign of nr A16007: MOV L,A ; Set HL to 0 if Zero RAL ; to +1 if Positve SBB A ; to -1 if Negative MOV H,A ;016012 JMP SAVINT ; then save INT result ;************************************************ SIGN: RST 6 JZ TMERR ; Type Mismatch: String has no sign JP RST5 ; JMP if not integer LHLD A02051 ; get integer GSGNHL: MOV A,H ; and determine its sign ORA L ;016031 RZ ; MOV A,H ;016033 JMP A15731 ; Set sign flags

En annan optimering man gjort är att istället för att ha NULL-terminerade strängar för reserverade ord så har man satt 8:biten på sista byten i strängen.

Den instruktion jag menade är redundant, lite beroende på vad man vill optimera för, är sista DCR.

Och var med på poängen med RST, tänker nästan direkt "vad är detta i 68k" och RST är rätt mycket TRAP.

Ah, känns långt vettigare om "single" är standard. Men även det lär inte vara speciellt snabbt givet att man får emulera både FP32 och FP64 på en 8080. Hittade en referens som hävdar att heltalsaritmetik var ~10x snabbare jämfört med flyttal (FP32), medan FP32 var 2-3 gånger snabbare jämfört med FP64.

Så ändå lite "varför var flyttal, inte heltal, standard när man kör på 8080". Det måste ha handlat om att för en människa är nog resultaten man får med flyttal mer logiskt jämfört med heltal. Fråga är kanske: undrar hur många program som skrevs i Altair Basic där FP64 var ett krav?

Men som type funktionen fungerar så är det ju en enskild bit, CY, som säger om det är "double eller något annat".
En bit, Z, säger om det är en sträng eller inte.

Att P-biten är inte uppenbart unik, eller det kommer den inte vara då P kommer vara satt om Z är sätt så både strängar och FP32 kommer ha P satt (om FP64 sätter den beror på vilket värde som används, alla >=8 sätter CY rätt).

Att "klura" just på sådana här saker är rätt typiskt för den tidens CPUer, en kunskap som är väldigt passé idag och rent generellt inte speciellt användbar så fort man slutar använda assembler. Ändå kul att ha med sig, varit en hel del positiv utveckling för de som behöver skriva kod under dessa 50 år!

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av klein:

Fanns Simon’s Basic till C64, som var en utökad BASIC-tolk. BASIC-tolkarna som följde med datorerna var oftast ganska usla. Just C64:s BASIC var extremt nedbantad – det fanns inte ens instruktioner för att rita grafik på skärmen, till skillnad från till exempel MSX-maskinerna.

Kanske var det just därför C64 blev så populär: eftersom man var tvungen att använda PEEK och POKE för att få något gjort, kom man nära maskinvaran.

Det fanns ett klassiskt programmeringsexempel i C64-manualen där man kunde rita en ballong-sprite. Den lekte man mycket med och gjorde förbättringar så det åkte i sinus kurva osv.

Skrev många program i GFA Basic till Atarin, där kunde man kompilera programmen och använde inte längre rad nummer.

ORIC-1 var ju en konkurrent till ZX Spectrum – en brittisk budgetdator. Det fanns många kloner av Sinclair-maskinerna; Lambda 8300 var en annan.

Sinclair-maskinerna ZX80 (kanske lite udda), ZX81, ZX Spectrum och Sinclair QL (också rätt udda) lärde en hel generation att programmera.

När Commodore 64 var för dyr för en vanlig statarfamilj i Olof Palmes Sverige, så fanns ZX81 och ZX Spectrum där som prisvärda alternativ.

Spelen – hur fixade man dem?
Man gick till OBS-varuhuset (dåtidens Coop), köpte det spel man ville ha, kopierade det på en dubbel kassettbandspelare, och gick sedan tillbaka och returnerade spelet med förklaringen:
"Morsan sa att jag inte fick köpa det."

Åhh...

Där gav du en hel nostalgitripp

Har själv haft ZX81 (byggsats), ORIC 1, Lambda 8300, Dragon 32, Jupiter Ace, samt en med riktigt bra tangentbord vid namn Colour Genie (eller liknande).

Man lade oräkneliga timmar på dom maskinerna...

Korrigerade med länkar, samt konstaterade att namnet Colour Genie var korrekt...
Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Medlem
Skrivet av Yoshman:

Den instruktion jag menade är redundant, lite beroende på vad man vill optimera för, är sista DCR.

Och var med på poängen med RST, tänker nästan direkt "vad är detta i 68k" och RST är rätt mycket TRAP.

Ah, känns långt vettigare om "single" är standard. Men även det lär inte vara speciellt snabbt givet att man får emulera både FP32 och FP64 på en 8080. Hittade en referens som hävdar att heltalsaritmetik var ~10x snabbare jämfört med flyttal (FP32), medan FP32 var 2-3 gånger snabbare jämfört med FP64.

Så ändå lite "varför var flyttal, inte heltal, standard när man kör på 8080". Det måste ha handlat om att för en människa är nog resultaten man får med flyttal mer logiskt jämfört med heltal. Fråga är kanske: undrar hur många program som skrevs i Altair Basic där FP64 var ett krav?

Men som type funktionen fungerar så är det ju en enskild bit, CY, som säger om det är "double eller något annat".
En bit, Z, säger om det är en sträng eller inte.

Att P-biten är inte uppenbart unik, eller det kommer den inte vara då P kommer vara satt om Z är sätt så både strängar och FP32 kommer ha P satt (om FP64 sätter den beror på vilket värde som används, alla >=8 sätter CY rätt).

Att "klura" just på sådana här saker är rätt typiskt för den tidens CPUer, en kunskap som är väldigt passé idag och rent generellt inte speciellt användbar så fort man slutar använda assembler. Ändå kul att ha med sig, varit en hel del positiv utveckling för de som behöver skriva kod under dessa 50 år!

Tror inte det var många program som krävde double, 4K versionen hade vad jag minns bara single, och ingen stränghantering annat än att man kunde göra print "hej" etc. Listningen från artikeln är version 3.0, den jag disassemblerat var 3.2 och skiljer där så det var alltså en rätt sen "optimering". Med tanke på att de enda tillåtna invärdena är 8, 4, 3, 2 så blir det ju så här:

vartyp invärde resultat Cy P Z M double 8 5 0 0 0 0 single 4 1 1 1 0 0 string 3 0 1 0 1 0 int 2 ff 1 0 0 1

skrivit klart
Permalänk
Medlem
Skrivet av underd0g76:

Nu var det länge sedan man höll på med config.sys och autoexec.bat. Men känslan är att detta uttalande (myt eller inte) uppkommit i samband med att man började använda EMS och alltså började utnyttja >640kB minne.

https://en.wikipedia.org/wiki/Expanded_memory

Oj du väckte gamla minnen till liv. Minns att jag använde något program (?) som hette QEMM för att komma runt denna 640kB begränsning.

Visa signatur

Min hemsida - Min YouTube-kanal
[Ryzen 9 9900X] - [GIGABYTE X870E AORUS PRO] - [Corsair Vengeance DDR5-6000 128GB] - [Fractal Design North chassi] - [WD Black SN850X 4TB] - [be quiet! Platinum 850W] - [Noctua NH-D15S] - [Dell U4025QW] - [KFA2 RTX 4070 12GB]

Permalänk
Datavetare
Skrivet av SAFA:

Tror inte det var många program som krävde double, 4K versionen hade vad jag minns bara single, och ingen stränghantering annat än att man kunde göra print "hej" etc. Listningen från artikeln är version 3.0, den jag disassemblerat var 3.2 och skiljer där så det var alltså en rätt sen "optimering". Med tanke på att de enda tillåtna invärdena är 8, 4, 3, 2 så blir det ju så här:

vartyp invärde resultat Cy P Z M double 8 5 0 0 0 0 single 4 1 1 1 0 0 string 3 0 1 0 1 0 int 2 ff 1 0 0 1

Den tabellen ser ju fullt logisk ut. Men är då inte informationen på Wikipedia fel kring när P-flaggan sätts?
https://en.wikipedia.org/wiki/Intel_8080

Där står det "Parity (P), set if the number of 1 bits in the result is even.", vilket borde betyda att den är satt för 5 (b1001), 0 (b0000) och -1 (b1111_1111). Men inte satt för 1 (b0001), d.v.s. inverterat mot din tabell.

Edit: vilket i.o.f.s. gör din tabell fullt relevant ändå bara man inverterar P-kolumnen. Är då bara kommentaren i koden som är fel. P-flaggan är inte satt om det är en "single", annars är den satt -> så unik!

Oavsett, varför "RST 6" är effektivt är uppenbart!

Var också tvungen att testa lite hur "smart" moderna kompilatorer är med avseende på att använda CPU-flaggor givet att de inte exponeras explicit i C, C++, Rust, etc. Kompilatorer är rejält smarta idag och de kan i stort sätt alltid göra de "smarta tricks" som tidigare krävde att man hackade assembler.

För att ta ett extremt simpelt fall: avgöra om addition av 32-bit unsigned gav overflow

pub fn uadd(a: u32, b: u32) -> (u32, bool) { let r = a + b; (r, r < a) }

x86_64

uadd: mov eax, edi add eax, esi ;; will set C-flag if overflows setb dl ;; set to 1 if C-flag is set, otherwise set to 0 ret ;; first return value in _ax, second in _dx

ARM64 (att använda flaggor är valbart här, instruktioner med "s" suffix sätter dem, Intel kommer "kopiera" detta i kommande APX)

uadd: adds w0, w1, w0 ;; will set C-flag if overflows cset w1, hs ;; set to 1 if C-flag is set, otherwise set to 0 ret ;; first return value in w0, second in w1

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Suveränt! Bara Windows nästa då

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Airikr:

Suveränt! Bara Windows nästa då

Delar av källkoden är iallafall ute i det fria https://www.sweclockers.com/nyhet/30485-lackt-kallkod-till-wi...

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Medlem
Skrivet av Bengt-Arne:

Bra, men jag menar att Microsoft gör hela Windows (11 inkluderad) till FOSS och även helt fri från spionering, spårning och kontrollerande (bland annat "Edge är avinstallerat, installerar i denna uppdatering"). Och om man vill ge dom pengar, sker det via prenumeration av Microsofts tjänster, precis som det är nu... fast noll spårning, spionering och andra liknande äckligheter.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Airikr:

Bra, men jag menar att Microsoft gör hela Windows (11 inkluderad) till FOSS och även helt fri från spionering, spårning och kontrollerande (bland annat "Edge är avinstallerat, installerar i denna uppdatering"). Och om man vill ge dom pengar, sker det via prenumeration av Microsofts tjänster, precis som det är nu... fast noll spårning, spionering och andra liknande äckligheter.

Okej!

Var väl inte riktigt vad man/jag uppfattade det.

Samtidigt så kommer säkert dom önskemålen aldrig att ske, främst för att en del av önskemålen är en del av Windows funktion.

Kanske dax för ett annat OS...

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Medlem
Skrivet av Bengt-Arne:

Okej!

Var väl inte riktigt vad man/jag uppfattade det.

Samtidigt så kommer säkert dom önskemålen aldrig att ske, främst för att en del av önskemålen är en del av Windows funktion.

Aha Nä, mina och väldigt många andras önskemål (jag är inte direkt ensam om det) lär aldrig hända, men drömma kan man ju.

Skrivet av Bengt-Arne:

Kanske dax för ett annat OS...

Om du menar mig, så har jag använt Linux som mitt huvudsystem sen 2016. Dual-boot'ade dock mellan Linux och Windows från 2016 till 2024 (direktlänk till mitt blogginlägg om det), för jag ville spela typ 1 spel som inte funkade helt i Linux. Nu funkar det inte alls på grund av EA.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Yoshman:

Den tabellen ser ju fullt logisk ut. Men är då inte informationen på Wikipedia fel kring när P-flaggan sätts?
https://en.wikipedia.org/wiki/Intel_8080

Där står det "Parity (P), set if the number of 1 bits in the result is even.", vilket borde betyda att den är satt för 5 (b1001), 0 (b0000) och -1 (b1111_1111). Men inte satt för 1 (b0001), d.v.s. inverterat mot din tabell.

Edit: vilket i.o.f.s. gör din tabell fullt relevant ändå bara man inverterar P-kolumnen. Är då bara kommentaren i koden som är fel. P-flaggan är inte satt om det är en "single", annars är den satt -> så unik!

Oavsett, varför "RST 6" är effektivt är uppenbart!

Var också tvungen att testa lite hur "smart" moderna kompilatorer är med avseende på att använda CPU-flaggor givet att de inte exponeras explicit i C, C++, Rust, etc. Kompilatorer är rejält smarta idag och de kan i stort sätt alltid göra de "smarta tricks" som tidigare krävde att man hackade assembler.

För att ta ett extremt simpelt fall: avgöra om addition av 32-bit unsigned gav overflow

pub fn uadd(a: u32, b: u32) -> (u32, bool) { let r = a + b; (r, r < a) }

x86_64

uadd: mov eax, edi add eax, esi ;; will set C-flag if overflows setb dl ;; set to 1 if C-flag is set, otherwise set to 0 ret ;; first return value in _ax, second in _dx

ARM64 (att använda flaggor är valbart här, instruktioner med "s" suffix sätter dem, Intel kommer "kopiera" detta i kommande APX)

uadd: adds w0, w1, w0 ;; will set C-flag if overflows cset w1, hs ;; set to 1 if C-flag is set, otherwise set to 0 ret ;; first return value in w0, second in w1

Jo, det var fel på kommentaren angående P. Sen att kompilatorerna är bra numera, hade ett tag en beräkning där man ville få in alla variabler i flyttalsprocessorn (80387 osv) då det var dyrt flytta mellan den och minnet. Det grejade gcc galant så var inte behov av någon assemblerprogrammering där.

Permalänk
Medlem
Skrivet av Airikr:

Aha Nä, mina och väldigt många andras önskemål (jag är inte direkt ensam om det) lär aldrig hända, men drömma kan man ju.

Om du menar mig, så har jag använt Linux som mitt huvudsystem sen 2016. Dual-boot'ade dock mellan Linux och Windows från 2016 till 2024 (direktlänk till mitt blogginlägg om det), för jag ville spela typ 1 spel som inte funkade helt i Linux. Nu funkar det inte alls på grund av EA.

Jag får hoppas att du sitter ner när jag skriver detta

Jag började använda linux i mitten av 90-talet, första lnux var Suse som jag installerade från diskett, gick vidare med lite olika linux varianter som ex. RH.
I början så använde jag Gnome som skrivbord, testade lite med KDE men gick tillbaka till Gnome, senare lev jag fast i Enlightenment som var rätt annorlunda mot det mesta i skrivbordsväg. Det föll mig i smak

Ett tag så körde jag helt rent med Xubuntu på en äldre PC som främst användes för surfning och enklare sysslor, samt låne PC om någon som besökte mig behövde använda en PC.

Testade under perioden även lite andra OS som OS2 som då var år före vanliga Windows, samt ett väldigt speciellt OS som var skrivet av ryssar. Det var ett multitaskande dos kompatibelt OS som även hade ett grafiskt användargränssnitt, allt uppbyggt med moduler så bara det man behövde var installerat. Tyvärr så var det rätt behäftat med buggar samt minimalt med dokument, så det gällde att fritt gissa och testa sig fram. Det krävde 286 eller senare...

Slutade med linux runt 2010 eller kanske något tidgare, främst för att jag använde linux mindre och mindre. Mest då den programvara jag använde mest fanns under Windows, samt att jag använde samma programvara på mitt jobb. Ville helt enkelt inte ha en inkompatibilitet om jag behövde göra något på PC'n hemma och skicka till jobbet som ex.
Hade samtidigt en laserskrivare som inte stöddes under linux, även det var till viss del en bidragande orsak till att jag slutade med linux.

Förstår att linux haft en kraftig utveckling sen jag sist använde en distro, tanken finns att testa igen, däremot så har jag ännu inte kommit till skott.

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Medlem
Skrivet av Bengt-Arne:

Åhh...

Där gav du en hel nostalgitripp

Har själv haft ZX81 (byggsats), ORIC 1, Lambda 8300, Dragon 32, Jupiter Ace, samt en med riktigt bra tangentbord vid namn Colour Genie (eller liknande).

Man lade oräkneliga timmar på dom maskinerna...

Dragon 32 börja bli ett dyrt samla objekt och lika så Lamda 8300 . ZX81 är ganska billig fortfarande. Själv har jag bara haft ZX81, ZX Spectrum, C64C, Atari 520 ST, Atari PC1, Atari Portfolio, Amiga 500, Amiga 1200, CBM 8032 ( köptes för en krona på loppis och slängde den när jag flyttade )

Permalänk
Medlem
Skrivet av klein:

Dragon 32 börja bli ett dyrt samla objekt och lika så Lamda 8300 . ZX81 är ganska billig fortfarande. Själv har jag bara haft ZX81, ZX Spectrum, C64C, Atari 520 ST, Atari PC1, Atari Portfolio, Amiga 500, Amiga 1200, CBM 8032 ( köptes för en krona på loppis och slängde den när jag flyttade )

Tråkigt att dom en gång fick åka på soptippen

Fick en läcka, varvid det mesta förstördes, även alla datortidningar man fint packat ner, som kompletta årgångar av BYTE.

Hade även planscher med Dragon 32

Vi är säkert många i den sitsen, som av olika anledningar tänker tillbaka och ångrar en del val.

Lte av livet...

Visa signatur

Engineer who prefer thinking out of the box and isn't fishing likes, fishing likes is like fishing proudness for those without ;-)
If U don't like it, bite the dust :D
--
I can Explain it to you, but I can't Understand it for you!

Permalänk
Medlem
Skrivet av Bengt-Arne:

Jag får hoppas att du sitter ner när jag skriver detta

Jag började använda linux i mitten av 90-talet, första lnux var Suse som jag installerade från diskett, gick vidare med lite olika linux varianter som ex. RH.
I början så använde jag Gnome som skrivbord, testade lite med KDE men gick tillbaka till Gnome, senare lev jag fast i Enlightenment som var rätt annorlunda mot det mesta i skrivbordsväg. Det föll mig i smak

Ett tag så körde jag helt rent med Xubuntu på en äldre PC som främst användes för surfning och enklare sysslor, samt låne PC om någon som besökte mig behövde använda en PC.

Testade under perioden även lite andra OS som OS2 som då var år före vanliga Windows, samt ett väldigt speciellt OS som var skrivet av ryssar. Det var ett multitaskande dos kompatibelt OS som även hade ett grafiskt användargränssnitt, allt uppbyggt med moduler så bara det man behövde var installerat. Tyvärr så var det rätt behäftat med buggar samt minimalt med dokument, så det gällde att fritt gissa och testa sig fram. Det krävde 286 eller senare...

Slutade med linux runt 2010 eller kanske något tidgare, främst för att jag använde linux mindre och mindre. Mest då den programvara jag använde mest fanns under Windows, samt att jag använde samma programvara på mitt jobb. Ville helt enkelt inte ha en inkompatibilitet om jag behövde göra något på PC'n hemma och skicka till jobbet som ex.
Hade samtidigt en laserskrivare som inte stöddes under linux, även det var till viss del en bidragande orsak till att jag slutade med linux.

Förstår att linux haft en kraftig utveckling sen jag sist använde en distro, tanken finns att testa igen, däremot så har jag ännu inte kommit till skott.

Det gjorde jag

Det var då allt en trevlig resa du har gjort! Det har (som du skrev) dock skett en rejäl utveckling med Linux sen början av 10-talet Din laserskrivare har högst troligt stöd nu, så ta en titt på Linux Mint Cinnamon eller EndeavourOS. Linux är mest "sätt i, öppna mjukvara, använd hårdvara" nu för tiden (plug-n-play).

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth, Serenum & Enc.

Permalänk
Medlem
Skrivet av Bengt-Arne:

Tråkigt att dom en gång fick åka på soptippen

Fick en läcka, varvid det mesta förstördes, även alla datortidningar man fint packat ner, som kompletta årgångar av BYTE.

Hade även planscher med Dragon 32

Vi är säkert många i den sitsen, som av olika anledningar tänker tillbaka och ångrar en del val.

Lte av livet...

Råkade ut för något liknade, några pundar svin gjorde intjack i mitt källarförråd och tog med sej disketterna till Atari ST: Som dom dumpade ut regnet