Enterprise Forever
:HUN => Programozás => Topic started by: Povi on 2014.November.18. 18:32:32
-
legendás program EP-n!!!
A Microsoft első terméke, az ALTAIR 8800 (http://en.wikipedia.org/wiki/Altair_8800)-ra írt BASIC (http://en.wikipedia.org/wiki/Altair_BASIC)!
Sajnos a számok kiírása még nem működik... Valahol még van egy bug... :oops:
Az inspirációt ez az oldal adta:
http://altairbasic.org/
-
még a szinusz is működik:
a NEW parancsra még lefagy, valami verem-beállítási probléma lehet... :oops:
-
nem értem, hol lehet a hiba
a matek rész működik, csak a számok kiírása nem...
raktam egy RET-et a 0B37-re (PrintInt rutin eleje), így tudom csak használni egyelőre...
http://altairbasic.org/math_dis_10.htm
és azért nem értem, mert az eredeti bináris állomány van az EP-ben, tehát még az se lehet, hogy én gépeltem el valami (és egyébként a disassemblált kódban is vannak elütések...)
-
ejnye, ne fejlesszétek az EP-t visszafelé! :)
-
legendás program EP-n!!!
:smt026
Hopp, ez érdekes! Látom, még nincs kész, várjuk nagyon! (Na jó, legalábbis én)
-
Kéne egy Altair Basic topic, és átmozgatni a cuccokat...
Az az érdekes, hogy vajon hogyan oldották meg a programok kiírását / beolvasását? Mert nincs se LOAD, se SAVE parancs.
Bár nem ismerem az Altair-t közelről, de a mentésre még el tudom képzelni, hogy valahogy átkapcsolták a kimenetet a terminálról / teletype-ról stb.-ről lyukszalagra (?), aztán beírtak egy LIST parancsot.
-
Kéne egy Altair Basic topic, és átmozgatni a cuccokat...
Kész.
-
Nem lehet, hogy hardveresen oldották meg? Egy kapcsolóval lehetett adagolni az adatot, és az töltődött a memóriába, egy másik kapcsoló meg kimentette mondjuk lyukszalagra?
-
Kicsit utánaolvastam, úgy tűnik a teletype-on volt a lyukszalag olvasó is, tehát akkor így oldották meg:
http://en.wikipedia.org/wiki/Teletype_Model_33
-
Kicsit utánaolvastam, úgy tűnik a teletype-on volt a lyukszalag olvasó is, tehát akkor így oldották meg:
http://en.wikipedia.org/wiki/Teletype_Model_33
Ha jól nézem van benne hardveres CHR$(7) is :-D
-
Ha jól nézem van benne hardveres CHR$(7) is :-D
Kell, hogy legyen benne, mert az Altair Basic ki is használja! :-)
http://altairbasic.org/int_dis_5.htm#InputLine
-
Nem értem, mi a baja a számkiírással... :smt017
Valahol az FOut környékén egyszer csak végtelen ciklusba került...
http://altairbasic.org/math_dis_10.htm#FOut
Pedig a kód változatlan.
Ha a kiírandó szám nulla, akkor működik.
Ha túl nagy, (pl. 999999999999999999999999999999999999999999) akkor szépen megáll egy ?OV hibával.
Egyéb esetben odáig jut, hogy az FBUFFER (0x174) címre ír egy space-t, vagy '-', attól függően, hogy negatív, vagy pozitív számról van-e szó, majd a 0x175-re pedig eg 0x30-at. Aztán eltűnik a programfutás egy fekete lyukban.
-
közben azon gondolkodok, vajon befolyásolhatja-e a futást az, hogy nincs kikapcsolva a megszakítás? Ugyanis fut a megszakítás a háttérben (0x38), és EXOS bill. csatornát és video csatornát használok.
És pl. az FPush birizgálja a veremmutatót:
http://altairbasic.org/math_dis_6.htm
pl. ott az ex (sp),hl az 0xa06 és 0xa0b címen
bár akkor ennyi erővel a FOR ciklusnak se kéne működnie:
http://altairbasic.org/int_dis_8.htm
ott is vannak hasonló veremmutató piszkálások
-
itt a forrás is
a basic.asm a futtatható, a basic2.asm pedig a "b.dat" forrása
a forrásban lévő include-ok pedig az eredeti altair basic bináris állománya darabokra szedve
-
Mandelbrot-halmaz:
-
Mandelbrot-halmaz:
:-)
-
szerettem volna csinálni olyat, hogy fájlból lehessen betölteni:
ezért beleraktam a töltésre egy ilyen kódot:
;====================================================================
load_bas_file:
push bc
push de
push hl
; open BAS file
ld a,1
ld de, filename
call exos_fn
db 1
; read BAS file to memory
ld a,1
ld bc,1000h ; max file size is 4KiB
ld de, file_buffer
call exos_fn
db 6
; close basic file and return
ld a,1
call exos_fn
db 3
exx
ld hl, file_buffer
exx
pop hl
pop de
pop bc
ret
filename: db 8,"TEST.BAS"
;====================================================================
Az egyes lapon van a rutin.
Az exos_fn rutin pedig ez:
;====================================================================
exos_fn:
di
ld (005ah),a
or a
ex (sp),hl
jp 03fh
;====================================================================
Erre azért van szükség, mert a 0x30-as címen más van.
Viszont ez olyan szép fagyásokat produkál, hogy hihetetlen, és nem értem, mi a hiba...
-
szerettem volna csinálni olyat, hogy fájlból lehessen betölteni:
Igen, a kimentés, betöltés praktikus funkció lenne... :oops:
-
lehet vele játszadozni, induláskor betölti a memóriába a "TEST.BAS" fájlt, bármikor ALT-F-et nyomja pedig "begépeli"
a számkiírás még mindig nem működik... az LIST-nél kiírja a sorszámot, de azt is csak azért, mert saját rutinra cseréltem az egész szám kiírást.
a MEMORY SIZE? kérdésnél nem szabad 16384-nél többet írni. (nincs teszt, nem végleges verzió)
változónevek max. két karakter hosszúak lehetnek, az első karakter betű, a második (opcionális) karakter szám lehet
-
változónevek max. két karakter hosszúak lehetnek, az első karakter betű, a második (opcionális) karakter szám lehet
Ez valahonnan ismerős ... :D
-
Ez valahonnan ismerős ... :D
Ha a C64-re gondolsz, igen, a Commodre az MS-tol licencelte a basic interpretert, es csak par ponton modositott rajta (full screen editor, "ready." meg ilyenek). Sot, nem csak a Commodore:
http://www.pagetable.com/?p=43 (http://www.pagetable.com/?p=43)
http://www.pagetable.com/?p=46 (http://www.pagetable.com/?p=46)
Tenyleg, csak en nem olvastam utana, vagy tudja vki? Az IS-BASIC teljesen nullarol irt BASIC implementacio?
-
Az IS-BASIC teljesen nullarol irt BASIC implementacio?
Teljesen nulláról, de az ANSI X3J2/82-17 "Draft Proposal for Standard BASIC" szabvány alapján.
-
Biztos, hogy nulláról megírt, legalábbis semmi köze nincs a Microsoft BASIC-hez.
Ami érdekes még (az Altair Basic-ről van most szó), hogy pl. foglalt szó az "USR" (0xA2-nek tokeniálja), de híváskor 0x498-ra ugrik, ami egy hibaüzenet kiírása :-)
Meg vannak a kódban olyan részletek, amik nincsenek használva (ezt írják is a dissasm oldalon), valószínűleg egyszerre fejlesztették a 8K-s verzióval és onnét maradt benne.
-
Biztos, hogy nulláról megírt, legalábbis semmi köze nincs a Microsoft BASIC-hez.
Azt gondoltam, hogy ahhoz nincs koze. Viszont nem voltam biztos benne, hogy mashoz nincs-e ... Bar most olvastam Zozo valaszat eppen.
-
na, eddig jutottam a BASIC-kel
az első kérdésnél (MEMORY SIZE?) ha csak enter-t nyomunk akkor a maximális 16KiB memóriát fogjuk elérni :-)
kevesebbett persze lehet írni, nem sokkal kevesebb, mint 4KiB-tal elindul. Az egyes lapra egy ROM van belapozva, így a tesztnél, amikor megnézi, mennyi az elérhető max. memória, nem tud beleírni, így úgy veszi, mintha elérte volna a RAM tetejét 0x3fff-nél.
Az egyéb kiegészítő dolgok, a kettes lapon futnak.
Sajnos a számkiírás NEM MŰKÖDIK :smt013 :smt067 :smt071 és nem értem, miért!!! Ha valaki rájön, vendégem egy (vagy kettő) korsó sörre (vagy kólára).
Pedig minden trükköt bevettem: végig tiltott megszakítás alatt fut a program, még a 0x38-as címre is egy RET-et írtam (csak bill. olvasásnál állítja vissza, de utána rögtön le is tilt mindenféle megszakítást), ezzel is próbáltma minél jobban közelíteni az eredeti Altair állapotát.
F1-gyel lehet BASIC fájlt betölteni, ha valaki próbálkozni akar vele. Ha végre egyszer csak működne a szám kiírás, akkor majd foglalkozok tovább vele, jelenleg elment a kedvem tőle... :-)
-
ja, egyébként ha valaki még nem jött volna rá: a @ jellel sort töröl, a _ (aláhúzás) jel pedig a backspace
értelemszerűen a kurzorgombok nem csinálnak semmit, ekkoriban még teletype volt a leggyakoribb output eszköz :-)
-
Sajnos a számkiírás NEM MŰKÖDIK :smt013 :smt067 :smt071 és nem értem, miért!!! Ha valaki rájön, vendégem egy (vagy kettő) korsó sörre (vagy kólára).
És a számkiírás hogyan működne elvileg? Mármint az kiírandó adat hogyan jut el az EXOS-hoz?
Nem lehet, hogy az a baj, hogy az EXOS hívás elrontja a regisztereket?
-
És a számkiírás hogyan működne elvileg? Mármint az kiírandó adat hogyan jut el az EXOS-hoz?
Nem lehet, hogy az a baj, hogy az EXOS hívás elrontja a regisztereket?
Valahol az FOut nevű rutinban romlik el:
http://altairbasic.org/math_dis_10.htm#FOut
A lebegőpontos számot először egy FBUFFER nevű helyre teszi (0x174 címre), majd onnét írná ki a képernyőre.
Csak hogy már az FBUFFER-be írás közben elakad. A kezdő szóközt vagy '-' jelet beírja a bufferba, majd végtelen ciklusba kerül.
A számkiírás csak akkor működik, ha 0-át akarunk írni, vagy ha túl nagy számot. Akkor ?OV hibával megáll.
Az EXOS már karakterenként írja ki. De előtte mindent mentek a verembe, majd visszaállítom a regisztereket, szóval annak se kéne hibának lennie.
-
Pontosítok: az FBUFFER-be már a kiírandó karaktersorozat kerül, nem maga a lebegőpontos szám.
-
Valahol az FOut nevű rutinban romlik el:
http://altairbasic.org/math_dis_10.htm#FOut
Ebből a forrásból nincs emberi szintaxissal? :twisted:
-
Ebből a forrásból nincs emberi szintaxissal? :twisted:
Nekem nincs... :-) Ez egészen emberi, csak nem Z80, hanem 8080. :-D
-
Ez egészen emberi, csak nem Z80, hanem 8080. :-D
Hmmm... akkor nem lehet valami proci inkompatibilitás?
-
A neten talált bináris állományt használom az EP verzióban (az van egy kicsit szétdarabolva és include-olva az általam feltett asm fájlokban), és pl. Altair-emulátoron működik, szóval nem is értem, hol csúszhat el a dolog...
-
Hmmm... akkor nem lehet valami proci inkompatibilitás?
Jó kérdés...
Tudtommal teljesen kompatibilis, nem?
Egy érdekes hiba lehet itt, a lap alján:
http://altairbasic.org/int_dis_11.htm
"BUG: There is an interesting bug in this block, although it's harmless as by luck it's impossible to see it. The byte at 04F7 is 0x10, an illegal instruction, which is in turn followed by a NOP. "
A 0x10 utasítás egy DJNZ lenne Z80-on, itt viszont NOP-ként működik (mármint 8080-on). De ez a kódrészlet nem fut a számkiírásnál.
-
Maga a kifejezések értelmezése, és a számolás a lebegőpontos számokkal meg működik, lásd a mandelbrot halmaz rajzoló progit, az lefut gond nélkül.
-
Tudtommal teljesen kompatibilis, nem?
Vagy nem :-)
Itt találtam valamit: (http://www.classic-computers.org.nz/blog/2012-10-17-altair-emulator.htm)
"I needed to correct my approach dealing with the Parity flag difference between 8080 & Z80. Originally for any 8080 instruction that acted on the Parity flag, I merely did an OR A to set Parity. This it duly did, but I overlooked that OR also reset the Carry flag. The Parity flag is only used once in Altair 4K BASIC, which I could have worked-around, but in the interests of having a correct emulator, I did a proper fix by setting the Parity flag correctly when doing ADD, SUB, etc."
-
"Two known differences:
1) Parity flag is set on overflow in Z80.
2) DAA on Z80 works after subtraction."
-
Vagy nem :-)
Itt találtam valamit: (http://www.classic-computers.org.nz/blog/2012-10-17-altair-emulator.htm)
"I needed to correct my approach dealing with the Parity flag difference between 8080 & Z80. Originally for any 8080 instruction that acted on the Parity flag, I merely did an OR A to set Parity. This it duly did, but I overlooked that OR also reset the Carry flag. The Parity flag is only used once in Altair 4K BASIC, which I could have worked-around, but in the interests of having a correct emulator, I did a proper fix by setting the Parity flag correctly when doing ADD, SUB, etc."
Hm... Ez érdekes...
0xb66-on ott egy JP PO, PrepareToPrint, szóval akkor lehet, hogy itt csúszik el a dolog? :-)
-
0xb66-on ott egy JP PO, PrepareToPrint, szóval akkor lehet, hogy itt csúszik el a dolog? :-)
Elképzelhető :-)
-
na, végignéztem, összesen két helyen (0xb66 és 0xc07) van, ahol van JP PO
RET PO, és CALL PO sehol sincs
mindkét esetben az FCompare rutin fut le előtte.
http://altairbasic.org/math_dis_7.htm#FCompare
Az FCompare lefutása után az A=0xff, 0x00, vagy 0x01 lehet csak.
Ha jól sejtem, egy JP P utasításra cserélve működnie kell... :-) Mindjárt ki is próbálom.
-
ÉS IGEN!!!!!! MŰKÖDIK!!!!
Köszönöm Zozó!!!
Vendégem vagy egy kólára :-)
-
akkor ezek szerint egy újabb mítoszt(?) sikerült megdönteni?! Még se kompatibilis a Z80 a 8080-nal???
-
akkor ezek szerint egy újabb mítoszt(?) sikerült megdönteni?! Még se kompatibilis a Z80 a 8080-nal???
A 100% kompatibilitás ritkán szokott összejönni :-) még Z80-ok között is :-D
-
ÉS IGEN!!!!!!
Letölthető, kész verzió még nincs?
-
Letölthető, kész verzió még nincs?
Fölrakhatok egyet, ami működik, de még nem ezt szánom véglegesnek, akarok még bele FILE-bővítés kezelést is tenni, meg EXOS-parancs beírásának a lehetőségét. Legyen akkor már egy kicsit EP-sebb. Meg persze a legjobb az lenne, ha EDITOR-csatornán is menne, persze akkor már az eredeti "feeling"-et nem fogja vissza adni.
-
itt egy működő:
-
Ha jól látom, a memóriaméret megadásánál még nincs hibaellenőrzés.
A TERMINAL WIDTH kérdést nem lehetne kiszedni? Ha jól látom, nem csinál semmit.
A WANT SIN? kérdés mire vonatkozik?
-
akarok még bele FILE-bővítés kezelést is tenni, meg EXOS-parancs beírásának a lehetőségét. Legyen akkor már egy kicsit EP-sebb. Meg persze a legjobb az lenne, ha EDITOR-csatornán is menne, persze akkor már az eredeti "feeling"-et nem fogja vissza adni.
Ezek jó ötletek! (Főleg, hogy működő szerkesztő-billentyűket nem is találtam...) :smt026
-
Ha jól látom, a memóriaméret megadásánál még nincs hibaellenőrzés.
A TERMINAL WIDTH kérdést nem lehetne kiszedni? Ha jól látom, nem csinál semmit.
A WANT SIN? kérdés mire vonatkozik?
16KiB memória elérhető, ha annál többet írsz be (16384-nél nagyobbat), akkor nem fog működni. De ez az ALTAIR-en is így működött: ha többet írtál a kérdésre, mint amennyi RAM-od volt a gépben, akkor lefagyott. Ha ENTER-t ütsz, akkor ő maga "rájön", hogy mennyi RAM-od van, úgy, hogy elkezd írni a RAM-ba, aztán ha nem sikerül visszaolvasni, akkor az azt jelenti, hogy elérte a RAM tetejét. Az EP-n az 1-es lapra direkt egy ROM van belapozva, így 0x4000-től fölfelé már nem tud beleírni a "teszt" során.
A Terminal Width működik: ha ENTER-t nyomsz, akkor alapesetben 72 karakter lesz a szélesség (72 karakter elérése után automatikusan rak egy CR/LF-et, próbáld ki pl. 20 karakter szélességgel, működik az :-)
A Want SIN? It t Y-t vagy N-t lehet nyomni. Ha kevés a RAM (pl. 4096 byte), akkor lehet kérni, hogy ne töltse be a SIN, RND és SQR függvényeket, hogy több szabad RAM maradjon.
-
ilyen, ha 40-re állítom a TERMINAL WIDTH-t:
-
na, mondjuk ezze a memoria tesztben érdekes bug van:
0DCA LD HL,0EFCH
0DCD INC HL
0DCE LD A,37H
0DD0 LD (HL),A
0DD1 CP (HL)
0DD2 JP NZ,DoneMemSize
0DD5 DEC A
0DD6 LD (HL),A
0DD7 CP (HL)
0DD8 JP Z, 0DCDH
0DDB JP DoneMemSize
Vagyis ha véletlenül 64KiB RAM volt a gépben, akkor a RAM-méret megállapító rutin amikor eléri a RAM tetejét (amikor HL = 0xFFFF), akkor a következő lépésben HL = 0x0000 lesz, és fölülírja a program saját magát.
Bár az is igaz, 1975-ben megfizethetetlen kategória volt a 64KiB, szóval valószínüleg senkinek sem volt, és nem is jött elő ez a bug.
-
akkor a következő lépésben HL = 0x0000 lesz, és fölülírja a program saját magát.
De ez nem ROM-ban futott?
Amúgy 16K-nál több RAM-ot lehetne neki adni, vagy attól kiakadna?
-
De ez nem ROM-ban futott?
Amúgy 16K-nál több RAM-ot lehetne neki adni, vagy attól kiakadna?
Nem, RAM-ból. Lyukszalagról olvasták be.
Máshogy nem is indulna, mert vannak a kódban saját magát fölülíró részek.
Ha a kérdésre gondolsz, hogy lehet-e többet megadni, akkor lehet, de attól kiakadna. Ugyanis a RAM tetejére akarná tenni a veremmutatót, de az nem menne neki. (az 1-es lapon ROM van, a 2-esen pedig azok a rutinok, ami ahhoz kell, hogy fusson EP-n), szóval azt se lenne érdemes felülírni.
-
Nem, RAM-ból. Lyukszalagról olvasták be.
És a lyukszalagot mi olvasta be?
Ha a kérdésre gondolsz, hogy lehet-e többet megadni, akkor lehet, de attól kiakadna. Ugyanis a RAM tetejére akarná tenni a veremmutatót, de az nem menne neki. (az 1-es lapon ROM van, a 2-esen pedig azok a rutinok, ami ahhoz kell, hogy fusson EP-n), szóval azt se lenne érdemes felülírni.
Nem arra gondolok, hogy 3-as lapra teszed a rutinokat, 2-esre a ROM-ot, és 1-esre mehetne még ram.
-
http://randomthoughts.club/youtube.php?video=wALFrUd6Ttw (http://randomthoughts.club/youtube.php?video=wALFrUd6Ttw)
Azert volt ennek egy feelingje :)
-
És a lyukszalagot mi olvasta be?
Vagy egy ilyen teletype:
http://en.wikipedia.org/wiki/Teletype_Model_33
És itt egy video, ahogy a 4K BASIC-ot betöltik (ugyanarról a linkről, amit lgb küldött):
http://randomthoughts.club/youtube.php?video=qv5b1Xowxdk
Na ez a kemény, nem a CRT-terminál és a szupergyors lyukszalag-olvasó :-)
-
Nem arra gondolok, hogy 3-as lapra teszed a rutinokat, 2-esre a ROM-ot, és 1-esre mehetne még ram.
Ja, de, lehetne. :-) De még ezt a 16k-t is túlzásnak tartom :mrgreen:
-
Szerintem Zozo ugy ertette a kerdest, hogy van a RAM mellett ROM is, ami a beolvasast vezerli? Vagy en ertettem felre. Mondjuk modernebb idokben is van hogy nincs ROM csak RAM :) Pl amikor reset-ben tartja a CPU-t (ok manapsag pl AVR egyes hazi epitesu Z80 cuccon), es o szepen beleirja, aztan elengedi a reset-et, vagy hasonlo. Elvileg ilyet lehetne epiteni AVR/CPU stb nelkul is vmi egyszeru binaris szamlalo a cimzeshez, es kozben a szallagrol az input, azaz kozvetlenul a RAM-ba injektalja a kodot, utana mehet a CPU. Mondjuk nem tudom h az Altair 8800-on igy volt-e vagy van barmi ROM-ja ...
-
Szerintem Zozo ugy ertette a kerdest, hogy van a RAM mellett ROM is, ami a beolvasast vezerli? Vagy en ertettem felre. Mondjuk modernebb idokben is van hogy nincs ROM csak RAM :) Pl amikor reset-ben tartja a CPU-t (ok manapsag pl AVR egyes hazi epitesu Z80 cuccon), es o szepen beleirja, aztan elengedi a reset-et, vagy hasonlo. Elvileg ilyet lehetne epiteni AVR/CPU stb nelkul is vmi egyszeru binaris szamlalo, aztan kozvetlenul a RAM-ba injektalja a kodot, utana mehet a CPU. Mondjuk nem tudom h az Altair 8800-on igy volt-e vagy van barmi ROM-ja ...
Ha jól tudom, nem volt ROM az Altair-ban. Persze ez jó kérdés, hogy akkor hogyan is ment a beolvasás... :-) Még "új" vagyok az Altair témában, de baromira érdekes, hogy milyen is volt a 8bites mikró őskorszaka.
-
Ha jól tudom, nem volt ROM az Altair-ban. Persze ez jó kérdés, hogy akkor hogyan is ment a beolvasás... :-) Még "új" vagyok az Altair témában, de baromira érdekes, hogy milyen is volt a 8bites mikró őskorszaka.
ja erdekes, wikipedia szerint pl:
The front panel, which was inspired by the Data General Nova minicomputer, included a large number of toggle switches to feed binary data directly into the memory of the machine, and a number of red LEDs to read those values back out.
Programming the Altair was an extremely tedious process. The user toggled the switches to positions corresponding to an 8080 microprocessor instruction or opcode in binary, then used an 'enter' switch to load the code into the machine's memory, and then repeated this step until all the opcodes of a presumably complete and correct program were in place.
Ez alapjan tenyleg ugy tunik, hogy kozvetlenul a memoriat irtak kapcsolokkal es olvastak ki LED-ekkel, gondolom akkor talan a lyukszallag olvasas is mehetett ugy, hogy kozvetlenul a memoriaba irogatta bele egy egyszeru kis elektronika, es a CPU addig meg szoba sem jott, amig nem toltottek fel a RAM-ot, ahogy illik, utana johetett csak a CPU, hogy legyen kedves most mar futtatni a kodot ami a RAM-be kerult.
Mondjuk meg mindig erosen csak tippelgetek ;) Poenbol kene epiteni hasonlot Z80-al, kisebb meretekben es nem feltetlen lyukszallaggal, csak hogy "kezzel" lehessen programozgatni a RAM tartalmat mindenfele CPU nelkul, az erzes biztos erdekes lenne :)
-
na, ez tényleg jó ötletnek tűnik :-)
egyébként az is érdekes, hogy úgy írták ezt BASIC-et, hogy nem is volt Altair-ük, hanem egy PDP-10-re írtak egy 8080 emulátort, azon folyt a fejlesztés. :-)
"Gates and Allen had neither an interpreter nor even an Altair system on which to develop and test one. However, Allen had written an Intel 8008 emulator for their previous venture, Traf-O-Data, that ran on a PDP-10 time-sharing computer. He adapted this emulator based on the Altair programmer guide, and they developed and tested the interpreter on Harvard's PDP-10. Harvard officials were not pleased when they found out, but there was no written policy that covered the use of this computer.[2] Gates and Allen bought computer time from a timesharing service in Boston to complete their BASIC. They hired Harvard student Monte Davidoff to write floating-point arithmetic routines for the interpreter, a feature not available in many of its competitors."
http://en.wikipedia.org/wiki/Altair_BASIC
-
Ja, de, lehetne. :-) De még ezt a 16k-t is túlzásnak tartom :mrgreen:
De ha jól néztem a mindkét videóban 64K-s gép volt :-)
Amúgy lesz printer only verzió is? :-D
-
A videóban lévő "altair" csak egy ócska replika :-)
Egy 32 bites PIC mikrokontrollerre épül az egész.
http://altairclone.com/details.htm
Mit értesz a printer only verzión?
-
Mit értesz a printer only verzión?
Nem képernyőre ír, hanem nyomtatóra :-)
-
végül is, ha ez minden vágyad... :-)
de ha autentikusak akarnánk lenni, akkor a soros portra kéne küldeni a kimenetet, szerintem arra volt kötve a tty is
-
Vegulis Nick-2 helyett ENIAC-ot is lehet am epiteni :D
-
hát ja, azért az is vicces, hogy itt egy majdnem 40 éves szoftverről beszélünk, a szomszéd topicban pedg gőzerővel folyik a SymbOS fejlesztése... :-D
Mindenesetre technika- és számítógép-tudomány történeti érdekesség ez a Basic.
-
Elkezdtem nézegetni a 8K verzióját az Altair BASIC-nek.
Hát, marha jó eastern egg-et találtam benne :-)
Ha a kérdésnél "MEMORY SIZE?" egy "A" betűt ütünk, akkor az alábbi szöveget írja ki:
WRITTEN FOR ROYALTIES BY MICRO-SOFT
:-D
szerk: közben megtaláltam az eastern egg archivumban is, szóval nem én jöttem rá először...
de akkor is jó érzés volt "felfedezni" :-)
http://www.eeggs.com/tree/12288.html
-
Nagyon durva dolgok vannak itt a "D" (Space Hints) és "E" (Speed Hints) függelékben:
http://www.classiccmp.org/altair32/pdf/Altair_8800_BASIC_Reference_Manual_1975.PDF
Most már értem, miért annyira olvashatatlanok a régi BASIC kódok, és miért volt "divat" több sort egy sorba írni (kettősponttal elválasztva).
Csak néhány csemege:
Törölj ki minden felesleges space-t.
Töröld ki a REM-eket. (ezáltal gyorsabb lesz a program futása, és rövidebbb is lesz a kód)
Nem kell az END a program végére (akkor minek van definiálva a BASIC-ben???)
-
Nem kell az END a program végére (akkor minek van definiálva a BASIC-ben???)
Igen, az Ep BASIC-hez szokottak feltehetik ezt a kérdést. De gondolj csak bele: ahol csak GOSUB-bal lehet csinálni szubrutint, ott mindenképpen használni kell (általában a szubrutinokat a program végére rakták).
-
Nem kell az END a program végére (akkor minek van definiálva a BASIC-ben???)
Ha esetleg mashol akarod megallitani a programot mint az utolso sornal, gondolom, azert :)
-
igazatok van, erre nem gondoltam :-)
-
Elkészült a véglegesnek szánt verzió az ALTAIR BASIC-ből!
F1 - basic fájl betöltése (a forráskód sorvégi lezáró jelnek CR/LF-nek, vagy CR-nek kell lenni (igazából a CR a lényeg, az LF-et figyelmen kívül hagyja - igazából csak Linux környezetben kell erre figyelni).
F2- mentés
F8 - kilépés - vigyázat! nem kérdez rá mégegyszer, hogy biztos vagy-e benne, rögtön kilép!
Az elérhető memória végül 16KiB maradt (így autentikusabb), de Zozo kedvéért a CTRL + P gomb megnyomásával válthatjuk a kimenetet a nyomtató és a monitor között :-)
-
Elkészült a véglegesnek szánt verzió az ALTAIR BASIC-ből!
FILE-bővítő kezelés nincs? :oops: Praktikus lenne, mert, ha jól látom directory-t nem lehet kérni.
Illetve legalább a DEL billentyűt nem lehetne működővé tenni?
-
FILE-bővítő kezelés nincs? :oops: Praktikus lenne, mert, ha jól látom directory-t nem lehet kérni.
Illetve legalább a DEL billentyűt nem lehetne működővé tenni?
Azért nincs, mert a 0-ás lapra kéne tenni azt buffer-t, ahová beolvassa fájlnevet, és ott meg nincs hely... (legalábbis a leírás szerint 256 bájtnyi hely kell (de minek akkora?), és annyi nincs)
a DEL-t direkt hagytam így :-) csak a retro feeling miatt :-)
-
Lehet hosszú a PATH, meg szerintem munkaterületnek is használja.
256 bájtot elpakolsz valahova, aztán a FILE-zés után meg vissza.
-
üsse kő, akkor belerakom :-)
ha nem kéne mozgatni, akkor kb. +3 sor, így lehet, hogy +10 is lesz :-)
meg akkor még belerakok egy exos parancskezelést is, az is jól jön.
-
na, ebben van már FILE-bővítő kezelés
ami érdekes, hogy a régi PCK.EXT-es verzióval működik az emulátorban, az újabb FILE.EXT-tel nem igazán...
meg kéne nézni igazi gépen is
-
ami érdekes, hogy a régi PCK.EXT-es verzióval működik az emulátorban, az újabb FILE.EXT-tel nem igazán...
Véletlenül nem FILEIO-s konfigban próbáltad? Mert az már az egyel ezelőtti verzióban bele lett rakva, hogyha van FILE: akkor azt adja vissza, és így akkor az emulátor fájlválasztója működik.
-
Véletlenül nem FILEIO-s konfigban próbáltad? Mert az már az egyel ezelőtti verzióban bele lett rakva, hogyha van FILE: akkor azt adja vissza, és így akkor az emulátor fájlválasztója működik.
de igen :-) akkor ez volt a probléma :-)
-
a DEL-t direkt hagytam így :-) csak a retro feeling miatt :-)
Légyszi, légyszi...
Így üszkve használhatatlan. Egy 50 karakterből állós sorban elüt az ember egy billentyűt...
-
meg akkor még belerakok egy exos parancskezelést is, az is jól jön.
Ez hogy működik?
-
Ez hogy működik?
Még sehogy, de úgy tervezem, mint az IS-BASIC-ben. Ha kettösponttal kezdesz egy sort, akkor végrehajtja a megadott EXOS parancsot.
-
Légyszi, légyszi...
Így üszkve használhatatlan. Egy 50 karakterből állós sorban elüt az ember egy billentyűt...
A backspace helyett a z aláhúzás jellel tudsz most törölni.
Pl.:
PRN_INT 2+2
De akkor majd lehet, hogy teszek bele választó menüt (legyen-e "normál" backsapce, vagy maradjon minden az eredetiben).
De egyébként elég perverz dolog abban írni :-) Miért nem írod WP-ben, vagy PC-n bármelyik text editorban?
-
De egyébként elég perverz dolog abban írni :-) Miért nem írod WP-ben, vagy PC-n bármelyik text editorban?
WP-ben írom, de kisebb javításokat praktikus, ha el lehet végezni.
-
Na, ez tudja az ERASE (backspace) gombot kezelni. Figyeli, hogy a kimenet melyik csatornára van irányítva (printer, vagy video), ha printerre, akkor figyelmen kívül hagyja.
(Tudom, a DEL-t akartad, de ahhoz szerintem már egyszerűbb lenne az EDITOR: használata, az lehet a köv. fejlesztés...)
-
(Tudom, a DEL-t akartad, de ahhoz szerintem már egyszerűbb lenne az EDITOR: használata, az lehet a köv. fejlesztés...)
Tulajdonképpen pontosan ERASE-t akartam kérni, csak összekevertem, mert az nincs a PC billentyűzeten... :oops:
Szuper, ez is jó!
-
kíváncsi vagyok, milyen progikat írsz hozzá... :-)
-
kíváncsi vagyok, milyen progikat írsz hozzá... :-)
10 REM LEGNAGYOBB KOZOS OSZTO
20 REM LEGKISEBB KOZOS TOBBSZOROS
20 PRINT "A= ";:INPUT A
30 PRINT "B= ";:INPUT B
40 A=ABS(A):B=ABS(B):A1=A:B1=B
50 IF B>A THEN X=A:A=B:B=X
60 IF B=0 THEN 90
70 X=A-INT(A/B)*B:A=B:B=X
80 GOTO 60
90 PRINT "Legnagyobb kozos oszto: ";A
100 PRINT "Legkisebb kozos tobbszotos:";A1*B1/A
-
Ejjj, de szép program...
10 REM Gyufajatek
20 PRINT:PRINT " *** GYUFAJATEK ***"
30 LET X=21
40 PRINT :PRINT X;" szal gyufaval jatszunk."
50 PRINT "Felvaltva 1-3 szalat vehetunk el."
60 PRINT "Aki az utolso szalat huzza, veszit!":PRINT
100 REM Jatek
110 IF X=0 THEN GOTO 410
120 LET A=(X-1)/4-INT((X-1)/4)
130 IF A<>0 THEN 310
160 LET S=RND(X)
170 IF S<.33 THEN L=1:GOTO 210
180 IF S<.67 THEN L=2:GOTO 210
190 L=3
210 GOSUB 230
220 GOTO 100
230 X=X-L:G=1
240 IF X<0 THEN L=1:X=0
250 PRINT L;"szalat huztam. Maradt";X
255 IF X=0 THEN 290
260 PRINT "A huzasod:";:INPUT K
265 IF K<1 THEN 260
266 IF K>3 THEN 260
270 X=X-K:G=0
275 IF X<0 THEN PRINT "Nincs mar ennyi szal!":X=0
280 PRINT " Maradt";X
290 RETURN
310 IF A=.75 THEN L=3:GOTO 360
320 IF A=.5 THEN L=2:GOTO 360
330 L=1
360 GOSUB 230
380 L=4-K
390 IF X>0 THEN 360
410 IF G=1 THEN PRINT " VESZTETTEM...":GOTO 430
420 PRINT "Az utolso szalat vetted el. VESZTETTEL!"
430 END
-
A nálam letölthető csomagba beraktam a hibakódok jelentését. Ebben benne van mind a 12 hibakód... :ds_icon_cheesygrin:
Tulajdonképpen 4K-ban kunszt ez a BASIC.
-
Tulajdonképpen 4K-ban kunszt ez a BASIC.
Ami igazán kunszt benne, hogy lebegőpontos aritmetikája van. A kortársai többnyire csak az egész számokat tudta kezelni (ha jól tudom).
-
Ami igazán kunszt benne, hogy lebegőpontos aritmetikája van. A kortársai többnyire csak az egész számokat tudta kezelni (ha jól tudom).
Ok, tudom BASIC az ugye nem "profiknak" valo nyelv feltetlen, nem is arra talaltak ki. De pont ez zavart engem, es a BASIC lassusaganak egyik kulcsa is, hogy miert feltetlen a float tipus a default? Elvegre, egy csomo esetben szukseg sincs ra pl for a = 0 to 10, de persze az "a" ilyenkor float. Feleslegesen. Es igy persze joval lassabb, tobb memoriat is foglal stb. En tuti az int-et tettem volna alapnak, es a float-ot jeloltem volna kulon, ahhoz kepest, hogy ugye jelenleg az A% alak az int, es az A mint nelkul a float ...
-
Ok, tudom BASIC az ugye nem "profiknak" valo nyelv feltetlen, nem is arra talaltak ki. De pont ez zavart engem, es a BASIC lassusaganak egyik kulcsa is, hogy miert feltetlen a float tipus a default? Elvegre, egy csomo esetben szukseg sincs ra pl for a = 0 to 10, de persze az "a" ilyenkor float. Feleslegesen. Es igy persze joval lassabb, tobb memoriat is foglal stb. En tuti az int-et tettem volna alapnak, es a float-ot jeloltem volna kulon, ahhoz kepest, hogy ugye jelenleg az A% alak az int, es az A mint nelkul a float ...
Érdekes az Altair Basic esetében, hogy a sorszámokat ő "belül" word-ként tárolja, de LIST parancs futásakor előbb egy egész -> float konverzió fut le, és úgy írja ki a sorszámot. Persze ez is érthető, itt gondolom helyspórolás miatt csinálták így, rövidebb volt a konverziós rutin, mint egy külön integer-kiíró.
-
Érdekes az Altair Basic esetében, hogy a sorszámokat ő "belül" word-ként tárolja, de LIST parancs futásakor előbb egy egész -> float konverzió fut le, és úgy írja ki a sorszámot. Persze ez is érthető, itt gondolom helyspórolás miatt csinálták így, rövidebb volt a konverziós rutin, mint egy külön integer-kiíró.
Hmm, ezt nem is tudtam, pedig valoszinu hogy Commodore BASIC-ben is hasonlo, bar ott volt tobb helyuk a BASIC-re, es ugye az nem is 8080/Z80, megis MS-tol van, lehet nem kezdtek elolrol ott sem teljesen a dolgot ...
Amugy erdekes, mert egyes basic-ekben (Commodore-nal is) kifejezetten meno trukk, hogy gyakran hasznalt konstanst ami pl all 5 szamjegybol, tegyed csak szepen valtozoba, es ugy hivatkozz ra. Mivel a memoriaban szamjegyenkent van, ha leirod mint szamot allandoan, ami eleg lassu parse-olni mindig stb ... Pedig ha jol remlik IS-BASIC-ben is volt olyasmi, hogy a word ertekeket binarisan tarolja (legalabbis disk-en biztos, de gondolom akkor memoriaban is .... ?). Szoval fura ez, hogy BASIC kulcsszavak tokenizalva, a szamokat meg lehetett allandoan parse-olgatni.
-
Amugy erdekes, mert egyes basic-ekben (Commodore-nal is) kifejezetten meno trukk, hogy gyakran hasznalt konstanst ami pl all 5 szamjegybol, tegyed csak szepen valtozoba, es ugy hivatkozz ra. Mivel a memoriaban szamjegyenkent van, ha leirod mint szamot allandoan, ami eleg lassu parse-olni mindig stb ... Pedig ha jol remlik IS-BASIC-ben is volt olyasmi, hogy a word ertekeket binarisan tarolja (legalabbis disk-en biztos, de gondolom akkor memoriaban is .... ?). Szoval fura ez, hogy BASIC kulcsszavak tokenizalva, a szamokat meg lehetett allandoan parse-olgatni.
Ja, ezt a Reference Manual is írta (amit linkeltem pár napja), hogy érdemes a konstansokat is változóban tárolni, mert akkor nem kell futtatás közben állandóan string -> float konverziót csinálni, csak egyszer, amikor a változónak értéket adunk, onnantól kezdve a memóriában már 4 byte-on van float-ként eltárolva (ha jól értem erre gondolsz te is).
A másik tipp (ami a C=-nál is működik), hogy nem kell space-eket tenni, (tehát az IFA=10THENGOTO100 sok is oké), ezáltal kisebb helyet is foglal a progi, és gyorsabb lesz a futása is (nem kell az interpreternek figyelmen kívül hagynia a space-eket). Az más kérdés, hogy olvashatatlan lesz a kód, de basic-nél minden ezredmp számít, lehet hogy egy 10ezres ciklus belsejében már tényleg érezhető lenne, hogy nincs space használva.
-
Hmm, ezt nem is tudtam, pedig valoszinu hogy Commodore BASIC-ben is hasonlo, bar ott volt tobb helyuk a BASIC-re, es ugye az nem is 8080/Z80, megis MS-tol van, lehet nem kezdtek elolrol ott sem teljesen a dolgot ...
És tényleg! Ugyanúgy tokenizálja a sorokat a Commodore is, mint az Altair Basic (jó, maguk a tokenizált kódok nem feltétlenül ugyanazok, mert újabb kulcsszavak is vannak, de az első négy ugyanaz: END, FOR, NEXT, DATA):
egy pointer a következő sor elejére (2 byte)
a sorszám (2 byte)
tokenizált sor
\0 lezáró (1 byte)
és a program végén pedig két darab \0 \0 (2 byte)
http://www.c64-wiki.com/index.php/BASIC_token
-
Bruce találta ezt az archívumot. (http://www.americanradiohistory.com/Popular-Electronics-Guide.htm)
A 75 januári számban (PDF 16 oldaltól), és februári számban (PDF 27 oldaltól) arról van szó, hogyan építsünk Altair 8800-at, kevesebb mint 400 dollárból kijön :-) És a programozásáról is szó van.
-
Készül a 8K verzió.
Itt is paritás-bit problémák lesznek... :-)
Ez a változat már kezel string-eket is, van POKE, PEEK, IN, OUT, meg egy csomó új függvény is.
-
Povi, nálam a letölthető csomagban vannak hibakódik, arról a linkről, amit ebben a topicban megadtál. Az azért sokat segít a "használhatóságon". (Amennyiben van értelme ilyesimről beszélni egy 40 éves programozási nyelv esetében...)
A 8K-s verzióhoz tudsz linket adni? Gondolom hibaüzenetek nem fértek még a 8k-ba sem...
-
ebben benne van a 8k leírása is, és a hibaüzenetek is
http://www.classiccmp.org/altair32/pdf/Altair_8800_BASIC_Reference_Manual_1975.PDF
nézegetem most a CLOAD és CSAVE parancsokat, hátha lehet használni valamire...
az biztos, hogy tokenizált formában küldi ki a cuccot a szalagra, a 7-es portra.
A fájlnévnek megadott stringnek csak az első karakterét veszi figyelembe.
A formátum még érdekes: 0xd3 0x33 0x33 - ez valami fejléc lehet
aztán a fájlnév (egy karakter)
majd 0x46 0x19 - ez nem tudom, mi lehet (nem állandó, valami cím lehet?)
ezután pedig a tokenizált kód.
-
találtam egy jó kis összefoglalót a verziókról:
http://altairclone.com/downloads/basic/Basic%20Versions.pdf
-
majd 0x46 0x19 - ez nem tudom, mi lehet (nem állandó, valami cím lehet?)
Rájöttem, ez egy mutató a következő sor elejére. Ez már a tokenizált kód része...
-
tudom, hogy perverz vagyok, de este alvás előtt még olvasgattam az ágyban egy kicsit a C64 BASIC ROM-listáját a Data Becker könyvből, és meglepően (vagyis most már, hogy tudjuk, hogy ezt is a Microsoft írta, már nem) hasonló az Altair BASIC-hez. Mintha kézzel átírták volna a Z80 kódot 6510-re :-) Kiváncsi lennék, vajon a PC-n megjelent GW-BASIC és társai mennyire hasonlítanak az ős-basic-hez. Nem hinném, hogy alapjaiban más lenne, sőt mintha léteztek volna programok, amik 8080 assembly-t 8086 assembly-re konvertáltak (tehát magát a forráskódot, nem a binárist). :-)
-
http://en.wikipedia.org/wiki/Microsoft_BASIC (http://en.wikipedia.org/wiki/Microsoft_BASIC)
Elso korben talan ez is erdekes ...
-
Itt a 8K BASIC.
STOP bill. működik, CLOAD, CSAVE nem (vagyis a CSAVE egyelőre hexában teliírja a képernyőt), de a rendes mentés, töltés ugyanúgy működik, mint a 4k verzióban. Vicc egyébként, hogy binárisan már nem kompatibilis a két basic verzió (arra gondolok, hogy mások a tokenizált kódok), bár az is igaz, hogy a 4.32-ből nem is lehetett binárisan menteni.
elvileg hibátlan, de hátha belefut valaki valamilyen bug-ba
szerk.: ja, és itt már nem kell nagybetűvel írni...
-
Frissített verzió (kicsit összement, a fölösleges 00-kat kitöröltem).
A CLOAD és CSAVE parancs egyelőre kiiktatva (nem kerül végtelen ciklusba CLOAD parancs kiadásakor, amikor hiába várja az adatot a 6-os és 7-es porton).
-
Ebben van PRINT USING? A leírásban van róla szó, de nekem nem működik.
-
ebben nincs
nem az extended version-ban írják, hogy van?
-
egy kis promó az ITCafén:
http://itcafe.hu/hir/mar_40_eves_az_altair_8800.html
:-)
-
Kiralysag! Nekem a comment-ek voltak szomoruak, kb ilyesmi, hogy "hany FPS a unity rajta" (ok, nem gondolta komolyan nyilvan, csak eppen ugye szomoru, hogy neki a "szamtech" mar csak ennyi), meg hogy "nem is lettem volna informatikus, ha ilyen gepek lettek volna, amikor kezdtem". Szoval a sok mai ikon buzerator :) nem is erti tulkeppen a szakmai alapjait amivel foglalkozik pedig, hogy mi van mogotte ... Ezt tartom kicsit szomorunak.
-
Hát igen, a hozzászólásokon én is meglepődtem. A mennyiségén is. Persze nyilván van benne egy kis lájkvadász feeling is, hogy miért csak ennyi, de valahol mégis csak szomorúnak tartom, hogy kevesebb, mint 50 hozzászólás jött hozzá, miközben egy 486-os, vagy C64-es retro bemutatón több 100 is. Jó, elismerem, azoknál ott van a nosztalgia-faktor is, ez meg kb. olyan, mintha egy barkácsfórumon a szakócáról írtam volna egy bemutatót, a hozzászólok 99%-a szerintem nem is élt még 1975-be (én se).
Na mindegy, készül a folytatás, az még nehezebb olvasmány lesz, még 8086 és 8080 assembly is lesz benne :-)
-
Az eredeti 8080 asm syntaxtol en kiutest kapok. Probaltam mar megtalnulni, de szamomra total logikatlan es "alien". Inkabb Z80 asm-kent nezem, akkor ertem is :)
-
Az eredeti 8080 asm syntaxtol en kiutest kapok. Probaltam mar megtalnulni, de szamomra total logikatlan es "alien". Inkabb Z80 asm-kent nezem, akkor ertem is :)
Azt én is így csináltam, számomra olvashatatlan a 8080 asm :-)
-
Azt én is így csináltam, számomra olvashatatlan a 8080 asm :-)
Jol jartunk, ui vmi olyasmi remlik, hogy az Intel 8080 syntaxist a Zilog (bar kb 8080 compatible) nem vihette tovabb (jogi problemak, nem tudom), ezert kitalalt egy uj syntaxist. Szerintem jol jartunk vele, most gondoljunk bele, ha maradt volna a 8080 fele, es meg megturbositva - es ezaltal tovabb bonyolitva - a Z80 "boviteseivel" a 8080-hoz kepest :) Na az meg "szebb" lett volna ...
-
Szerintem ez úgy volt, mint anno a 6501 procinál: az lábkompatibilis volt a Motorola 6800-zal, szénné is peretle a MOS-t a Motorola. Itt is ez lehetett: a Zilog nem akart egy jó kis pert a nyakába venni. (az is érdekes számomra, hogy gépi kód szintjén miért lehet kompatibilis, asm szinten meg nem, de valahol érthető is, egy assembly kód "hordozhatóbb").
-
Erdekes tema ez. Ki lehet talalni Z80 gepi kodra is ujabb assembly szintaxist, attol, hogy egy tranzisztor is valtozna a Z80-ban :)
Peldaul, ha az ISA szintjen nezzuk, pl egy regiszter-regiszter kozotti adatatvitel nem igazan ugyanaz, mint amikor egy regisztert tarolni kell a memoriaban, vagy eppen onnan beolvasni. 65xx-en ezert asm-ban is tok mas neveket adtak neki (az A-val nezve most), pl LDA (LD A ..) ha memoriabol betolteni kell, STA (ST A, store), de pl TXA (transfer X->A) ha regiszterek kozott kell atvinni. Azt, hogy Z80 asm-ban ez mind "LD", az csak szintaxis kerdese, ettol meg Z80-ra is igaz lehet, hogy a sajat szintjen a "load", a "store" es a "transfer" jellegu utasitasok eleg nagy kulonbseget mutatnak, nyilvan. Vki egyszer poenkodott is vele, hogy 6502 asm-ot kb intel szintaxissal irta le, mov a,2 (LDA #2), mov a, x (TXA), es ilyesmik.
Amugy, az Z80 asm-ban (de intel is ...) mindig is zavart, hogy nincs tiszta jelzese annak, hogy most vmi konstans, vagy memoria, azaz pl:
LD A, valami
LD A, (valami)
Ok, itt a zerojel hivatott jelezni persze a dolgot, amde ott meg kifejezesekkel lehet zavar, ha pl egy nem tul fapados assembler-nel lehet azt is irni, pl:
LD A, (valami + 1) * 2
LD A, (valami + 1 * 2)
Ez most trukkos persze, de mondjuk elirtam hogy hova tegyem a zarojelet. A ketto igen mast jelent, az elsonel a zarojel csak matematikai szereppel bir, a masodiknal viszont nem, hanem az asm szintaxis resze.
En ezert szeretem 6502-nel a # jelet annak jelzesere, hogy konstans, es nem memoria:
LDA #2
LDA 2
Az elso a 2-ot, mint konstanst tolti az A-ba, a masodik a memoriacimet. Persze, biztos van olyan, akinek meg ez nem tetszik :)
Az mondjuk pedig meg tovabb keveri a dolgot, hogy a # sok pl Z80 assemblerben a hexadecimalis jeloles, de 6502-nel nem, ott erre a $ szokas, azaz az "LDA #$FF" az mint konstanst a hex FF-et tolti be. Ez is megerne egy miset, "$", "#", "12h", "$12", jo eg, mennyi kulonbozo modszer a 16-os szamrendszer jelzesere :-P
-
és akkor még ott van a hexa jelölésre a 0xff is a C-ből...
amin én meglepődtem, hogy Linux-on a disassembláló program (nem emlékszem a nevére) nem intel szintaktikával írja ki az x86 utasításokat, hanem AT&T-el (ugye?). Vagyis a mov utasításnál a célregiszter és a forrásregiszter fel van cserélve. Logikus ez is, hogy mov ax,bx azt jelenti, hogy ax-et töltsd bx-be, nem fordítva, mint az Z80-nál, vagy intelnél.
-
és akkor még ott van a hexa jelölésre a 0xff is a C-ből...
Ezt a formátumot elfogadja az sjasm is.
amin én meglepődtem, hogy Linux-on a disassembláló program (nem emlékszem a nevére) nem intel szintaktikával írja ki az x86 utasításokat, hanem AT&T-el (ugye?).
Az objdump -d -M intel AT&T helyett Intel szintaxist használ.
-
és akkor még ott van a hexa jelölésre a 0xff is a C-ből...
Igen, ezt kifelejtettem, ugy tunik ...
-
Logout-on megjelent cikkem az Altair BASIC-ről:
http://logout.hu/cikk/negyven_eves_az_altair_basic_a_microsoft_elso_term/bevezetes.html (http://logout.hu/cikk/negyven_eves_az_altair_basic_a_microsoft_elso_term/bevezetes.html)
-
Logout-on megjelent cikkem az Altair BASIC-ről:
http://logout.hu/cikk/negyven_eves_az_altair_basic_a_microsoft_elso_term/bevezetes.html (http://logout.hu/cikk/negyven_eves_az_altair_basic_a_microsoft_elso_term/bevezetes.html)
Jo cikk lett, gratula! Koszonet a "kedves szavakert" az JSep es szemelyem iranyaba :) Mondjuk meg mindig aggodom (mivel megemlitetted az JSep-t; hozzateszem a tobbiek kedveert, hogy amugy Povi megkerdezett errol engem, szoval nagyon korultekinto volt), hogy vmi lelkes JS programozo belenez az JSep-be es szornyethal ott menten ...
Amugy azt az okoskodot az egyik kommentben nem ertem mit akar, szerintem valamit nagyon kever emberunk ...
-
És mi van azzal a 65529-el?
-
nem semmi a bill gates által írt game, tisztára mint egy mai, mobilon divatos runner játék, csak ott a 3 sáv a divat! :)
amúgy ez most megihletett, lehet hogy a scrollos 256 színű basic programom ilyesmi lesz, azaz úton a tehenet (szamárt) kell kerülgetni :)
amúgy itt egy videó a bill gates féléből
http://youtu.be/05YI7BfmgPg
-
nem semmi a bill gates által írt game, tisztára mint egy mai, mobilon divatos runner játék, csak ott a 3 sáv a divat! :)
amúgy ez most megihletett, lehet hogy a scrollos 256 színű basic programom ilyesmi lesz, azaz úton a tehenet (szamárt) kell kerülgetni :)
amúgy itt egy videó a bill gates féléből
http://youtu.be/05YI7BfmgPg
PGyurinak volt egyszer kérdése az egyik budatétényi találkozón, hogy mondjuk példákat az egy gombos játékokra. Az egyik a Flapp Bird (bár akkor még nem létezett, amikor kérdezte), a másik a szőnyegbombázós BASIC játék a demo kazettáról, a harmadik pedig a Donkey. Persze van több is... :-)
-
És mi van azzal a 65529-el?
Szerintem ott nagyon félreértett valaki valamit... :-) Itt van az a rutin, ami string-ből alakítja át a sorszámot: http://altairbasic.org/int_dis_11.htm#LineNumberFromStr
Ebből a kódrészletből minden kiderül :-)
-
Jo cikk lett, gratula! Koszonet a "kedves szavakert" az JSep es szemelyem iranyaba :) Mondjuk meg mindig aggodom (mivel megemlitetted az JSep-t; hozzateszem a tobbiek kedveert, hogy amugy Povi megkerdezett errol engem, szoval nagyon korultekinto volt), hogy vmi lelkes JS programozo belenez az JSep-be es szornyethal ott menten ...
Amugy azt az okoskodot az egyik kommentben nem ertem mit akar, szerintem valamit nagyon kever emberunk ...
Nekem van egy olyan gyanúm, hogy még a linkre sem kattintanak rá, nem hogy a forráskódot megnézik :-D
-
Nekem van egy olyan gyanúm, hogy még a linkre sem kattintanak rá, nem hogy a forráskódot megnézik :-D
Szerintem okostojasunknak remlett valami, hogy kettes szamrendszerben mondjuk tizenhat biten abrazolhato legnagyobb szam decimalis alakban nem "kerek" (mino meglepetes ...), csak eppen az nem esett le neki, hogy a 65529 az nem eppen a 65535 ... Mondjuk az fura feltetelezes volt a reszerol, hogy egy ilyen cikk, forrasok, EP atirat stb utan esetleg te nem tudod, hogy miert van felso limit ...
-
Sok szo esett mar a Z80 vs 6502 dologrol. A ket CPU-t nehez osszehasonlitani ugye. Viszont, adott a lehetoseg, hogy Microsoft BASIC van ugye Z80/8080-ra es 6502-re is (ez utobbi pl maga mondjuk a Commodore 64 alap BASIC interpretere). Ha feltesszuk, hogy 'eleg jol' (nehezen lehetne jobban) optimalizalt a cucc 6502-re es Z80-ra is, akkor egy egyszeru BASIC program futasidejet felhasznalva osszehasonlithato a ket CPU teljesitmenye (nyilvan az orajel elterest figyelembe veve) amolyan "atlalanos celu felhasznalas" eseten (mivel azert egy BASIC interpreterben ugye eleg durvan van eleg sok minden keverve).
-
az a baj ezzel, hogy nem a C64 Basic-et kéne nézni, mert ott már más lebegőpontos számformátumot használnak, mint az eredeti Altair Basic-ben... Valami korai 6502-es BASIC-kel viszont nem lenne hülyeség megnézni. :-)
-
Ráadásul ugye a 6502-es BASIC-et a 8K BASIC alapján csinálták, de nem fért bele 8kB-ba, ezért, mivel akkoriban 4kB-os egységekben lehetett memóriát venni, már hosszú hibaüzeneteket tettek a legelső 6502-es BASIC-be is, hiszen bőven volt hely... Ugye az Altair esetében az Extended BASIC-ben jelentek meg a hosszú hibaüzenetek, de ott már véleményem szerint kettévált a 8080 és 6502-es vonal.
-
Hat lehet sakkozni, ez igaz (melyik verzio stb, Commodore-oknal is volt egy rakas ilyen-olyan) ... Es annak ellenere, hogy kb azonos a cel (BASIC interpreter hasonlo kepesegekkel), elkepzelheto, hogy tok mas modszerrel oldottak meg egy-egy szubrutint (ami lenyeges lehet) a ket CPU-n. Mindazonaltal akkor is erdekes teszt lenne, meg ha nem is teljesen objektiv :) Max pl lehetne integer szamokkal nezni, nem lebegopontossal, bar lehet akkor is konveralja idolegesen? A% es hasonlokra celzok, de mondjuk most neztem C64 emulatoron, ciklusvaltozonak FOR-ban igy pl nem engedi, de ossze lehet rakni ciklust IF/THEN-el is persze ha az ember nagyon akarja :)
-
És Z80-as változat létezik egyáltalán? Tehát nem Z80-on futó 8080 kód, hanem rendesen Z80-ra írt.
-
És Z80-as változat létezik egyáltalán? Tehát nem Z80-on futó 8080 kód, hanem rendesen Z80-ra írt.
Hmmm, ez mondjuk jogos kerdes. Mert a 8080-ra irt, az Z80-on nem teljesen hasznalja ki a Z80 kepessegeit ...
-
És Z80-as változat létezik egyáltalán? Tehát nem Z80-on futó 8080 kód, hanem rendesen Z80-ra írt.
Az Altair-ra írt BASIC nem is fut Z80-on, a hülye paritásbites vacakság miatt.
A CP/M-es BASIC már fut Z80-on is, de 8080-on is, szóval az új utasítások (pl. DJNZ) nincsenek kihasználva.
-
Inkabb az Off-topic/Commodore buheralas topic-ba tertem at ezzel :)
-
nem is tudom már, hova írjam, ide, vagy a Commodore off-topicba:
ugye írtam, hogy máshogy kezeli a 4k, 8k basic és az extended basic (és későbbi verziói) a tokeneket. Más a táblázat szerkezete is.
Az extended basic-ben (és a CP/M verzióban és az x86-os GW-BASIC-ben is) az alábbi:
; F
l019a: db "O","R"+128 ; FOR
db 0x82
db "N"+128 ; FN
db 0xd3
db "R","E"+128 ; FRE
db 0x0f
db "I","X"+128 ; FIX
db 0x1f
db 0
; G
l01a6: db "OT","O"+128 ; GOTO
db 0x89
db "O T","O"+128 ; GO TO
db 0x89
db "OSU","B"+128 ; GOSUB
db 0x8d
db 0
míg a 4k és 8k basic-ben és a C64 verzióban az alábbi:
l0073: db "EN","D"+128 ; 80
db "FO","R"+128 ; 81
db "NEX","T"+128 ; 82
db "DAT","A"+128 ; 83
db "INPU","T"+128 ; 84
stb.
-
Erdekes. Es az END token 0x80 is kozelebb all CBM basic es 4/8K basic tekinteteben? Mert akkor ez alapjan azt mondana az ember, hogy ott erdemes tovabb osszehasonlitgatni.
http://www.davidviner.com/cbm9.html?name=Basic+4%2B+Source+Code (http://www.davidviner.com/cbm9.html?name=Basic+4%2B+Source+Code)
Ez is erdekes, itt van nemi datum info, meg letoltheto cucc is. Mondjuk a CBM (aki nem tudna, az a Commodore Business Machine akar lenni) BASIC eseten en a Commodore logikajat soha nem ertettem. Volt ugye meg a "regebbi gep" vonalon BASIC 4 nekik. Aztan VIC20/C64 kapcsan BASIC 2 volt, a Commodore plus/4 gep eseten az a 3.5-os verzio ... A soha meg nem jelent Commodore LCD-n 3.6-os BASIC van, ami amugy majdnem uaz, mint a 7-es BASIC, ami a C128-on. A 10-es BASIC pedig a C65-e lett volna. Szoval szerintem ennek a szamozasnak total semmi ertelme, amit Commodore hasznal, foleg az elejen, hogy volt 4-es, aztan lett 2-es. WTF ...
Ez mondjuk egesz erdekes cikk (van benne jo sok mindenrol szo, nem csak amire a cim utal, es a cegen van egy kis timeline diagramm is): http://www.pagetable.com/?p=43 (http://www.pagetable.com/?p=43) itt meg az Altair BASIC-rol is van szo, hogy ne legyek teljesen off topic :)
"The BASIC V2 used on the VIC-20 and the C64 is actually a stripped-down version of PET BASIC 4.0 and not a ported version of PET BASIC V2."
Uh :) Logi-kuss ... Es akkor a cikkben kulon erdekesseg, hogy az ismert 8080 es 6502 vonal melle bejon meg a 6800 CPU vonal, arra is volt MS BASIC.
Illetve, amit most meg igy hirtelen talaltam a temaban: http://www.pagetable.com/?p=46 (http://www.pagetable.com/?p=46)
-
a Commodore BASIC-ben 0x80-nal kezdődik a tokenek számozása, az END-del
itt van egy eléggé alulkommentált disassembly:
http://www.ffd2.com/fridge/docs/c64-diss.html
sok hasonlóság van az altair BASIC-kel, kb. tényleg, mintha kézzel átírták volna a 8080 kódot 6502-re (természetesen a lebegőpontos rutinokra ez már nem igaz, mert a CB több digit-et tartalmaz).
-
a Commodore BASIC-ben 0x80-nal kezdődik a tokenek számozása, az END-del
itt van egy eléggé alulkommentált disassembly:
http://www.ffd2.com/fridge/docs/c64-diss.html
Koszi de ezeket tudom/ismerem, a kerdesem inkabb a 8080/Z80 vonalhoz hasonlitas kapcsan jott.
sok hasonlóság van az altair BASIC-kel, kb. tényleg, mintha kézzel átírták volna a 8080 kódot 6502-re (természetesen a lebegőpontos rutinokra ez már nem igaz, mert a CB több digit-et tartalmaz).
Elvileg abbol is volt ketfele verzio :) A CBM basicben a tobbes van az igaz.
-
És Z80-as változat létezik egyáltalán? Tehát nem Z80-on futó 8080 kód, hanem rendesen Z80-ra írt.
Hááát, pl. a TRS-80 (és a HT1080Z, ami ugyanaz) BASIC-jének is az Altair BASIC az alapja, bár tudtommal nem írták át a régi (8080-as) kódrészleteket Z80-ra, de az újabb funkciók már kihasználják a Z80-nal bevezetett utasításokat is.