3,401

(134 odpowiedzi, napisanych Bałagan)

Adamk: http://atariki.krap.pl/index.php/Atari_OS

3,402

(22 odpowiedzi, napisanych Software, Gry - 8bit)

Proszę, oto: http://82.210.159.30/65c816/fastfp.arc

Myślę, że problem leży w czym innym: TBXL najwyraźniej jakoś korzysta z pakietu FP znajdującego się w ROM-ie. Wild guess: przepisuje go do RAM-u, a potem w niektórych procedurach, np. logarytmowania, podmienia skoki JSR FMUL/FDIV/FADD/FSUB itp. na wywołania własnych procedur.

Przypuszczam tak na podstawie tego, że wypraktykowałem, iż nie można "zmieszać" procedur z pakietu oryginalnego oraz FASTCHIP-a - są jakoś niekompatybilne (jak - tego mi się nie chciało sprawdzać, mam wprawdzie pewne podejrzenie, ale...). Procedury FASTCHIPO-a w rodzaju logarytmowania, kiedy podstawi im się oryginalne procedury mnożenia, dzielenia itp. zamiast procedur Marsletta - po prostu przestają działać.

Jeszcze jedno: w docach jest napisane, że pakiet po skompilowaniu powinien mieć taką samą sumę kontrolną jak oryginał, w związku z czym podmiana ma być bezbolesna. Tak nie jest, sumy kontrolne różnią się i to dość drastycznie. Przy wymianie pakietu na FASTCHIP trzeba albo przeliczyć na nowo sumę kontrolną pierwszego bloku ROM-u (tę pod $C000), albo tak dobrać "filler bytes" w FASTCHIP-ie, żeby się zgadzało. Mi się tego ostatniego nie chciało robić.

3,403

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Szkoda, że liczby FP nie są little endian - można byłoby lepiej wykorzystać 816, a dla 6502 to chyba wszystko jedno.

3,404

(22 odpowiedzi, napisanych Software, Gry - 8bit)

Co do tematu: jednak chyba nie warto wrzucać tych procedur do ROM-u tak jak są. Właśnie odkryłem, że kiedy ROM ma FASTCHIP zaszyty w sobie, wtedy źle działa ... Turbo BASIC XL. Konkretnie objawem jest wadliwe działanie potęgowania i logarytmowania. Wychodzi na to, że TBXL jednak jakoś z pakietu FP korzysta ... :/

3,405

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Licencja jest zawarta w pliku źrodłowym. A co do udostępniania, to napisałem, że przy okazji.

PS. Przeczytaj punkt ósmy regulaminu, bo się któregoś dnia zdziwisz.

3,406

(44 odpowiedzi, napisanych Programowanie - 8 bit)

Po co "ripować"? Przecież pisałem, że procki pana Marsletta są dostępne w _postaci_źrodłowej_.

3,407

(9 odpowiedzi, napisanych Sprzęt - 8bit)

Indus GT jest z tego co mi wiadomo dość podobny do LDW - bo to jest w gruncie rzeczy to samo - przede wszystkim też ma czarną obudowę a zdjęcia są za słabe, żeby coś zdecydować.

3,408

(12 odpowiedzi, napisanych Bałagan)

lewiS napisał/a:

Mimo naprawde szczerych checi ja tam nie slysze motywu z Koziolka Matolka....

Jest, jest. Momentami :)

3,409

(53 odpowiedzi, napisanych Fabryka - 8bit)

Tia. Interpreter na szczęście jest - nieco - lepszy, dlatego się nadaje dobrze do pisania wspominanych przez piotrav programików na szybko itp. Zwłaszcza, że załadowanie Turbo BASIC-a z twardego dysku trwa ile - dwie sekundy?

No ale ja teraz uzywam TBXL z rzadka do tych celów, <commercial>MultiBASIC jest jednak wygodniejszy</commercial>. ;)

3,410

(53 odpowiedzi, napisanych Fabryka - 8bit)

piotrv napisał/a:

Dlatego jak dla mnie cc65 mógłby być stosowany na takich polach jak:
- sprytne programiki napisane "na szybko"
- programy złożone algorytmicznie (np. jakieś packery)
- generatory, parsery danych
- gry tekstowe
- programy rozwiązujące problemy matematyczne

Do tego - może oprócz "packerów" - jest BASIC, zwłaszcza Turbo BASIC XL. Ma tę przewagę nad CC65, że działa na Atari no i wystarczy RUN (nie trzeba kompilować, linkować itp.)

3,411

(53 odpowiedzi, napisanych Fabryka - 8bit)

Ewentualnie można napisać własną funkcję printf, która co prawda nie będzie miała wszystkich bajerów, ale za to będzie 10x krótsza. Oczywiście jej wielkość i działanie zależy już w tym momencie od konkretnych potrzeb.

3,412

(53 odpowiedzi, napisanych Fabryka - 8bit)

W tych 90k jest przede wszystkim printf, a poza tym kod inicjujący libc, parsujący linię komend itp. Osobiście uważam, że rozmiar tego jest chory.

3,413

(53 odpowiedzi, napisanych Fabryka - 8bit)

piotrv napisał/a:

Tzn. że napiszesz "a = b;" i wielkość programu wynikowego idzie w setki lub tysiące bajtów.

A czasem w dziesiątki lub setki kilobajtów. Przyczyną jest linkowany do binarki kod startowy, który na wszelki wypadek robi masę rzeczy a na dodatek często dolinkowuje jeszcze funkcję printf (bo "nie ma takiego programu" - oczywiście - "który nie potrzebowałby funkcji printf" :D ), a ta stdio itd.

Jeśli jednak mamy do czynienia z programem - mimo że takie wg tuzów informatyki nie istnieją - który funkcji printf i tego całego badziewia nie potrzebuje, wystarczy podmienić moduł startowy programu. W takim gcc on się nazywa (IIRC, bo dawno nie zaglądałem) bodaj crt0. Jak by się jednak nie nazywał, linker powinien mieć opcję, za pomocą której automatyczne linkowanie tego się wyłącza. Na gcc pod MiNT-em to jest ... zapomniałem, może -nostartup, ale nic sobie nie dam uciąć. Oczywiście pominięcie kodu startowego powoduje, że w większości przypadków przestanie też działać libc, wobec tego nie ma sensu jej linkować (-nostdlib).

Dzięki stosowaniu tego oraz napisanego własnoręcznie w asemblerze kodu startowego o objętości 300 bajtów (zamiast 90k) udało mi się pod MiNT-em spokojnie pisać w C programy, które po zlinkowaniu - statycznym - miały 3-4k.

3,414

(22 odpowiedzi, napisanych Software, Gry - 8bit)

To nie ja robiłem, bo ja nie umiem. Skonstruował mi to Jacek Żuk, kiedy stracił cierpliwość do moich częstych wizyt w celu programowania EPROM-ów :-)

3,415

(22 odpowiedzi, napisanych Software, Gry - 8bit)

Rozumiem wasz problem, i moim zdaniem najlepszym rozwiązaniem jest flash. Ja tak mam zrobione, w jednej połówce zapisanej na stałe mam XL OS, drugą mogę sobie programować czym chcę. Jak coś spieprzę, przełączam pstryczkiem, naprawiam i przełączam z powrotem.

3,416

(72 odpowiedzi, napisanych Emulacja - 8bit)

nosty, to nie jest takie proste. W takim emulatorze atari800 większość mocy maszyny zżera prawdopodobnie nie tyle sama emulacja CPU, co fakt, że emulator musi też utrzymać proporcje czasowe rozkazów i w ogóle działania całości. Czyli, LDA #$02 / CLC / ADC #$02 nie ma tylko dodawać dwa do dwóch, ale jeszcze zrobić to w sześć cykli wirtualnego czasu. To tak tytułem prostego przykładu.

Poza tym faktem jest owszem, że dzisiejsze procesory są nowsze i lepsze, ale zwróć uwagę, że 6502 jest procesorem ośmiobitowym, a rozkazy operują na pojedynczych bajtach. W związku z tym spora część mocy obliczeniowej takiego 32-bitowego procesora jak Motorola 68030 się przy emulowaniu takiego LDA/STA po prostu marnuje, bo co z tego, że procesor jest w stanie machnąć 32-bitowe move, skoro to w normalnym silniku 6502 w zasadzie nie zachodzi (aczkolwiek można posztuczkować, pewnie, wszystko można). Itd.

3,417

(22 odpowiedzi, napisanych Software, Gry - 8bit)

Pecuś: ja mam te procedury, nawet w formie źrodłowej (i binarnej także). Mieszczą się w 2k. Wrzucę przy okazji.

3,418

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

Taką różnicę w przypadków programów na Atari "migających" bankami pamięci mogłoby tłumaczyć użycie sprzętowego mechanizmu stronicowania, zamiast przepisywania pamięci.

Do użycia MMU w celu bankowania pamięci nigdy nie doszedłem, porzuciłem dalszą pracę nad tym programem sporo wcześniej, kiedy się przekonałem, że host jest za wolny na to, co chcę zrobić. Teraz (68060/66 MHz) jest prawdopodobnie wystarczająco szybki, no ale mi się już nie chce.

3,419

(72 odpowiedzi, napisanych Emulacja - 8bit)

Jellonek: tylko że Numen na ZX81 nie istnieje, a ja na poparcie moich słów mam działający program.

To, że mam rację, możesz łatwo sprawdzić wg mojej sugestii powyżej: wziąć maszynę o analogicznej mocy obliczeniowej (3,8 MIPS) i przy użyciu dowolnego kompilatora C zaimplementować w tym języku engine 6502 - jeśli osiągniesz w tym silniku 50% szybkości mojego, to osobiście Ci pogratuluję i odszczekam.

EDIT: Istnieje też alternatywa, emulec gdzieś tam się wala po sieci w postaci binarnej (o ile pamiętam 150k pliku wykonywalnego), możesz wziąć disasembler i zajrzeć.

Jeśli natomiast nie chce Ci się tego robić, ale za to wolisz twierdzenia o Numenie na ZX81, to - jak to już zresztą zostało dośc dawno temu powiedziane - dalsza dyskusja jest bezprzedmiotowa.

3,420

(72 odpowiedzi, napisanych Emulacja - 8bit)

Cieszę się, że nieporozumienie zostało wyjaśnione.

kompilator nie ma bladego pojęcia, co kompilowany program robi, oraz jak można wykorzystać architekturę danej maszyny do zrobienia tego lepiej.

Jest dokładnie odwrotnie. Program jest precyzyjnym zapisem algorytmu, więc kompilator dobrze go rozumie.

Zgadza się, o tyle o ile. Kompilator faktycznie "rozumie" program pod względem formalnym, "wie" co robią poszczególne instrukcje oraz złożone z nich wyrażenia. Nie rozumie jednak programu jako całości, nie wie, do czego on ma służyć i co W ISTOCIE robić. Nie może tego wiedzieć, bo jest tępym automatem o zerowej inteligencji i coś takiego jak "koncepcja" czy "idea" jest mu kompletnie obce.

W 9999 przypadków na 10000 ta wiedza nie jest mu do niczego potrzebna, a efekty i tak są zadowalające. Zachodzi jednak wyjątek, o którym tu mowa, przy którym kompilator nie jest w stanie wykorzystać zasobów maszyny, bo nie wie, że mogą być ewentualnie do tego przydatne. A nie wie tego, bo nie wie do czego mają być przydatne, a tego z kolei nie wie, bo nie rozumie, co program ma robić. Itd.

3,421

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

Jest mi ono niesłusznie przypisywane. :)

Jeśli niesłusznie, to uznaj aluzję za niebyłą.

3,422

(72 odpowiedzi, napisanych Emulacja - 8bit)

jellonek napisał/a:

drac030: przeslij foxowi swoj kod, a GWARANTUJE CI (gwarancja w postaci litra finlandii), ze jesli znajdzie czas i checi (to drugie bedzie pewnie motywowane mozliwoscia zastosowania twoich rozwiazan w atari800) to przeniesiony przez niego Twoj kod do postaci C, bedzie spelnial twoje wymagania.

Nie będzie. Język C nie pozwala na zastosowanie takiej konstrukcji. I wolałbym, żebyście jako ludzie inteligentni obaj czytali ze zrozumieniem to, co piszę.

3,423

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

drac030: Bardzo niegrzecznie z Twojej strony. Chwalisz się, że zrobiłeś coś lepszego niż grupa ludzi tworzących od 10 lat projekt Atari800 oraz sztab ludzi tworzących gcc, a nie pokazałeś nic konkretnego i sam twierdzisz, że nie masz ochoty pokazać. To nie ja, tylko Ty masz coś do udowodnienia.

Drogi Foxie, chyba niezbyt uważnie czytasz to, co napisałem. W takim wypadku na Twoim miejscu nie ośmielałbym się pisać odpowiedzi, że już nie wspomnę to nadaniu jej tonu nagany, jaki tu wyczuwam.

Osobiście nie uważam, żebym miał jakikolwiek - nawet moralny - obowiązek uczestniczenia w każdym będącym obecnie w toku projekcie na Ziemi. Dlatego też nie przypuszczam, żeby jakąkolwiek niegrzecznością z mojej strony było niepodzielenie się moim kodem z "grupą ludzi tworzących od 10 lat" coś tam. Jeśli jest to grupa ludzi, i pracuje od 10 lat, to spokojnie może się tego samego, co ja, dopracować sama, o ile składa się z ludzi myślących oraz o ile jej na tym zalezy i jej to jest potrzebne (podkreślam trzy warunki). Czy to nie aby Ty jesteś autorem powiedzenia "napisz se"? No.

Co do "sztabu ludzi tworzących gcc", napisałem chyba wyraźnie wyżej, że to ani gcc ani języka C jako takiego nie dotyczy - sprecyzuję może: trzeba byłoby zmienić definicję języka C. Ani mi to na myśl nie przyjdzie.

Żeby wszystko było zupełnie jasne, ja nie mam nic do udowadniania, ja wiem swoje. Co więcej, koncepcję, o której mowa, zrealizowałem w postaci działającego kodu. Mój emulator jest niedokończony, zgadza się, ale akurat silnik 6502 w nim działa dobrze.

3,424

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox, zgodzę się z Twoimi twierdzeniami zawartymi powyżej bardzo chętnie, jeśli siądziesz do gcc i napiszesz silnik 6502, który po skompilowaniu z dowolnymi opcjami optymalizacji będzie na tej samej maszynie (68030/16 MHz) działał chociaz o połowę wolniej niż mój silnik asemblerowy.

I póki to nie nastąpi, może zawieśmy tę dyskusję, bo niestety ja wiem, co mówię, a Ty nie (oczywiście, bo nie znasz mojego kodu, a ja owszem).

3,425

(72 odpowiedzi, napisanych Emulacja - 8bit)

jellonek napisał/a:

pamietaj ze C to wlasciwie tylko nieco bardziej przenosny assembler, tak wiec jesli dobrze zaprojektuje sie kod C - wynik w assemblerze, przy dobrym kopulatorze, niewiele sie bedzie roznil od perfekcyjnie napisanego recznie.

Pamiętam. Jednak podtrzymuję, że zachodzi tu wyjątek, mianowicie w postaci programu, który jest silnikiem emulacji innego CPU. Tutaj C niestety polegnie, bo jest JEDNAK językiem stosunkowo wysokiego (za wysokiego) poziomu.

gcc dla m68k to było kolejno 2.7.2, 2.8.1, 2.95.2. Wszystkie wersje generują dość przyzwoity kod wynikowy, zresztą chyba nie może być inaczej, skoro gcc przeprowadza optymalizację jeszcze na etapie niezależnym od maszyny, a dopiero to co mu wychodzi przekłada na mnemoniki. Podejrzewam, że na innych platformach z jakością kodu jest dokładnie tak samo.

Pytanie jest idiotyczne z dwóch względów:

a) masz wyżej napisane, że silnik asemblerowy jest szybszy od ANALOGICZNEGO kodu w C (czyli: algorytm ten sam)

b) asembler to jednak nie jest C, więc wymyślenie programu w C, a potem przełozenie go ręczne na asembler nie może dawać wyników znacząco lepszych niz w przypadku produktu kompilatora; implementacja algorytmu musi być nie tylko w asemblerze napisana, ale tez w asemblerze wymyślona.

Dla ułatwienia dodam, że ten program chodzi na procesorach od 68020 do 68060 i nie zawiera nieczystych sztuczek w rodzaju samomodyfikującego się kodu (bo to na Motorolach powoduje problemy z cache'em).

Cały program z gcc nie ma nic wspólnego, poza tym, że gcc występuje tu jako wartość porównawcza. Ale twierdzę, że to jest właśnie taki przypadek, gdzie nie tylo gcc, ale dokładnie każdy kompilator zawiedzie. A to z tego powodu, że kompilator jest bezmyślnym automatem. Może optymalizowac znane sobie (czyli swoim twórcom) konstrukcje pod względem formalnym, oraz dokonywac analizy programu na np. częstotliwośc użycia pewnych zmiennych, żeby zdecydować, które zmienne umieścić w rejestrach, które na stosie a które gdzie tam. Oraz dysponuje repertuarem tym podobnych chwytów.

To wszystko jednak nie zmienia faktu, że kompilator nie ma bladego pojęcia, co kompilowany program robi, oraz jak można wykorzystać architekturę danej maszyny do zrobienia tego lepiej. To wie tylko człowiek, bo tylko człowiek jest w stanie zrozumieć algorytm.

Fox: zagadnienie nie ma nic wspólnego z opcjami optymalizacji kompilatora C, a raczej z tym, jak kompilator w ogóle działa, no i jak jest zdefiniowany język C jako taki.