A Microsoft megnyitotta a GW-BASIC forrását

A Build2020 esemény- és bejelentéssorozat lezárásaként a Microsoft részéről Rich Turner bejelentette, hogy megnyitják a Microsoft GW-BASIC forráskódját. Elérhető MIT licenc a GitHub-on.

These sources, as clearly stated in the repo’s readme, are the 8088 assembly language sources from 10th Feb 1983, and are being open-sourced for historical reference and educational purposes. This means we will not be accepting PRs that modify the source in any way.

Hozzászólások

Azt a mindenit!

Jövőre jön a solitaire.exe forráskódja is?

Bizonyos értelemben hiánypótló - egy darabka történelem.

És ha nem is a 38 éves Code_of_Conduct.md file-ra gondolok (ha valami, akkor inkább ez a LOL), hanem arra, hogy megnézheted, miből lett a cserebogár.

Esetleg szemezhetsz az ilyenekből: "The quick and dirty solution is to copy the block into the code segment before doing anything else."

Üdv,
Marci

Eh, talán egy XT-n találkoztam ezzel először. Ha jól rémlik akkor még benne volt a ROM-ban.

Nem is tudtam, hogy volt már git és github 1983-ban is :-)

committed on Feb 10, 1983

Ezen én is röhögök, 83-ban git meg CoC. Én is ilyen korai XT-ken, AT-ken nyomtam vele, a ROM-ban lévőt BASIC-nek, meg BASICA-nak hívták, de ezek is ugyanazok voltak, mint a GW-BASIC, csak az utóbbinak nem kellett ROM. Nagy trógerség volt, teljesen lineáris volt, kötelező sorszámozás, stb..

Nem sok haszna van a forráskódnak, főleg, hogy platformfüggő ASM. Meg az egész annyira primitív mai szemmel, hogy iskolai proggyakorlatra kiadva specifikációk alapján újra lehetne implementálni az egészet, sokkal könnyebb lenne, mint meglévő ASM kódból kiindulni, eleve a fele 16 bites x86 és DOS hack.

“I didn’t start using Linux so I could have friends.” (Luke Smith, 2019) ?

Azokban is csak kb. AT-ig. De klónokhoz is lehetett kapni Basic ROM-ot, emlékszem is olyan gépre (nem saját), ami nem eredeti IBM volt, és ROM-ból futtatott BASIC-et. Persze sok jelentősége nem volt, mert DOS alatt futtatta az ember a GW-BASIC-et és nem kellett ROM. Ennek max. a korai gépeken volt értelme, hogy a kód nagyja ROM-ból menjen, meg ne foglaljon az OS, és több maradt a kicsi RAM-ból (64-256 KB) programozásra. Onnantól, hogy volt minden gépben 640-1024KB RAM, onnantól már kb. mindegy volt, hogy miből fut. Meg eleinte azért is volt fontos a ROM BASIC, hogy a Commodore-ral tudjanak versenyezni, és mindenféle OS nélkül lehessen programozásra használni azonnal a gépet, később ennek csökkent a jelentősége, ahogy az IBM PC elterjedt, és standard lett.

Ennek a forráskódnyitásnak sem volt sok értelme, max. viccnek jó. Főleg, hogy nem is az eredeti kód, hanem egy konverteren átküldött módosított. Így is voltak már a MS/GW/Q(uick)-Basic-kel kompatibilis free fordítók, QB64, FreeBasic, ezekben nincs már meg a 64 KB-os korlát, meg egyéb GW limitációk, használhat az ember hozzá akármilyen editort, IDE-t. Az eredeti GW-BASIC meg amúgy is abandonware már hosszú évek óta, és elfut DosBox-ban, dosemu-ban, akármiben, csak nem érte meg használni. Max. amíg az ember ki nem mentette benne a GW-s programjait binárisból plain text formátumban.

“I didn’t start using Linux so I could have friends.” (Luke Smith, 2019) ?

Én anno különféle 8 bites gépeken kezdtem, akkortájt a Commodore 64 is egy autó ára volt... És persze gépi kód, mert mire az iskolai HT-1080Z-k betöltöttek volna egy assembly fordítót a beépített kazettás magnóról vége a 10 perces szünetnek, így aztán hexában pötyögtük be a kódot.

Amúgy az első PC sem volt sokkal különb szerkezet: 256 kilobyre RAM volt az alaplapon, amit kártyával 512-re lehetett bővíteni. Volt neki is kazettás magnós csatlakozója, és persze floppy, sőt később akár 10MB-os winchester... Ha pedig semmiről nem tudott oprendszert betölteni, akkor nem a No system disk or disk error jött, hanem a beépített basic indult el. És a korai DOS-okban még volt olyan utasítás (már nem emlékszem mi) amivel a beépített magnót kapcsolhattad ki/be. Persze a későbbi XT-ken ez már nem csinált semmit, de az eredeti PC-ben lehetett hallani a relé kattogását.

Végre ! Éppen egy több ezer soros régi programmal küzdünk, ami a mai napig operatív használatban van. Mondtam a kollégámnak, hogy éppen csak megszületett, amikor ennek kiadták az utolsó verzióját!

Szerkesztve: 2020. 05. 23., szo - 12:05

Retró kedvelőknek: http://www.retroarchive.org/dos/docs/ibm5160techref.pdf
Teljes kapcsolási rajz, klasszikus 8086 még könnyen tanulható mennyiségű assembly utasításának alapos ismertetése.
Ne feledjük, akkoriban a lebegőpontos utasítások valójában csak akkor álltak rendelkezésre, ha a 8088 mellé belenyomtad a 8087-es coprocesszort.

Amikor 83-ben ez a könyv készült, már 13 éve volt AT&T-féle UNIX, amely - mint az köztudott - korai szakaszában meglehetősen komoly nyomdai előkészítőrendszer volt, itt említeném meg az ed, és az nroff / troff kifejezéseket. (73-tól: https://en.wikipedia.org/wiki/CAT_(phototypesetter) )

Szerkesztve: 2020. 05. 24., v - 17:53

oh, wow, de rendesek! MS truly loves open source <3

Donald E. Knuth egy könyvében (Structured Programming with Goto Statements) rávilágított arra, hogy a "goto" utasítás használata veszélyes, és ezért ezt kerülni kell.

Ugyanebben a könyvében azonban egy vicces történetet is közöl:
"1971-ben, az IFIP konferenciáján volt szerencsém összefutni a japán Dr. Eiichi Goto nevű úrral, aki tréfásan panaszkodott, hogy őt mindenki kerülni igyekszik."

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Dijsktra híres ember, gráfelméleti algoritmusait már életében tanították az egyetemeken. De a GOTO-val kapcsolatban tévedett. Ahogy a Linux-ban használjuk a GOTO-t, és csak az az egy mód szerintem teljesen jó.

Mellesleg Linus véleménye az ügyről még a régi Linus-t idézi: "Of course, in stupid languages like Pascal, where labels cannot be descriptive, goto's can be bad. But that's not the fault of the goto, that's the braindamage of the language designer."

Nem, Dijsktra nem tévedett, csak sokan félreértik, amit mondott. Azért van a Goto ellen, mert sokan ilyen lineáris programozásból átmentett begyöpösödésből még használják, ciklusokból, loopokból való kiugrásos gányolásra, meg spagettikódosításra oda-visszaugrálással, olyan nyelveken, amik rendesen támogatnak magasabb szintű struktúrákat is, ezekben strukturálisan érdemes mindent megoldani, rugalmasabb és könnyebben olvashatóbb/értelmezhető lesz a kód. Teljesen egyetértek vele, ilyen magasabb szintű strukturális nyelveknél, ha egy mód van rá, kerülni kell. Nem azért, mert ez a szakmai közösség elvárása, hanem mert az ember magának tesz vele szívességet, ha ilyen régi gyöpös-elavult berögződéseket levetkőzik, ezek nem fogják a szakmai fejlődését korlátozni.

Low level nyelveken viszont a Goto elkerülhetetlen, és ott használják is, semmi baj nincs vele. Ez a GW Basic is ilyen, nem strukturális még, teljesen lineáris, kötelező sorszámozással, ebben pl. elkerülhetetlen, ahogy ASM-ben, gépi kódban is.

Amit meg Trovalds mond, az is teljesen elfogadható, hogy attól még hogy kerülendő, néha optimálisabb lehet mégis használni, nem annyira az ördög műve a Goto, hogy ha használod, akkor a géped átmegy feketelyukba és beszippant. Tehát ő pragmatikusan közelíti meg, nem elvi síkon.

Amit még látni kell, hogy gyakran elmosódik a Goto és nem-Goto között a különbség. Pl. C-ben a break utasítás is lényegében egy bújtatott Goto, csak nem annak hívják.

“I didn’t start using Linux so I could have friends.” (Luke Smith, 2019) ?