Dyskusja:Biblioteczka kodera Atari XL/XE
From Atariki
proponuje dodać temat "Techniki skracania kodu" obok "Techniki przyspieszania kodu" - procedury optymalizowane nie na szybkość tylko na zajmowane miejsce. Xxl 21:56, 27 gru 2007 (CET)
silwuple ;) Mikey 22:03, 27 gru 2007 (CET)
nie wiem czy to się nadaje
1) szybkie mnożenie przez -1.
Z=A*(-1) to EOR #$ff STA Z INC Z
2) ujemne indeksowanie przy wyszukiwaniu rosnącym - oszczędzamy porównanie w rej. indeksowym np. szukamy wartości A w łańcuchu TAB o długości L.
LDY #$ff-L CMP TAB-($ff-L),Y BEQ _JEST INY BNE _DO_CMP
Xxl 20:21, 6 maj 2008 (CEST)
- Hm, to pierwsze to zwykłe uzupełnienie, p. każdy podręcznik programowania na 6502. Ale z drugiej strony, nie kazdy takowy ma (acz mozna od WDC ściągnąć), więc może... To drugie do technik skracania chyba wejdzie, tylko trzeba dodać etykietę :> KMK 16:14, 2 cze 2008 (CEST)
- do skracania kodu może coś takiego: jeśli mamy często wywoływany podprogram, któremu trzeba przekazać parametry to robimy to zazwyczaj tak:
1. zapisujemy w wydzielonym obszarze na którym operuje podprogram adres danych i robimy JSR do procedury.
proponuje:
2. wykonujemy JSR do podprogramu, podprogram zdejmuje ze stosu adres który można indeksować od 1 - tam znajdują się nasze dane.
Powrót jest też prosty - wystawiamy na stos adres powrotu (do zdjętego poprzednio adresu dodajemy stałą wartość) i RTS.
oznacza to że trzeba tak sobie zorganizować program:
JSR podprogram dta nasze dane ... dalsza część programu ... JSR podprogram dta nasze dane itd.
czym częściej używany podprogram tym więcej oszczędzamy - nie potrzeba:
lda <adres danych sta w ciele podprogramu lda >adres danych sta cialo podprogramu lub strona zero
czyli ok 10 bajtów na wywołanie. Xxl 13:14, 3 cze 2008 (CEST)
- Tak działa funkcja PRINTF w SpartaDOS X (opisana tutaj, str. 45-49). W sumie, czemu nie, tylko trzeba dodać zastrzeżenie, że liczba danych przekazywanych w ten sposób albo musi być stała, albo ciąg danych musi być jakoś wyraźnie zaterminowany wartością specjalną. W sumie, najwygodniej się w ten sposób posługiwać stałymi (np. tekstem do wypisania, jak we wspomnianym PRINTF-ie). KMK 14:28, 3 cze 2008 (CEST)
Nielegalne rozkazy
Proponuje również dodawać ciekawe procedury, które zawierają niepublikowane rozkazy. Xxl 17:58, 18 sty 2011 (CET)
- Domyślam się, że chodzi o niepublikowane rozkazy 6502? Ja jestem przeciw (jak łatwo się domyślić). KMK 00:58, 19 sty 2011 (CET)
- Uwazam jednak, ze temat jest wazny i przynajmniej lista rozkazow z podzialem na stabilne (dzialajace na wszystkich atari) i niestabilne (dziajalace na niektorych egzemplarzach) powinna byc opisana. Sama swiadomosc istnienia niepublikowanych rozkazow to za malo, trzeba opisac stan faktyczny a nie zastanawiac sie nad tym czy ten temat dotyczacy atari powinien byc opisany czy przemilczany. Xxl 10:33, 19 sty 2011 (CET)
- Częściowo wziąłbym stronę xxla - warto mieć nielegale zdokumentowane. Co do przykładów kodu - rzecz dyskusyjna (jestem zdecydowanie przeciwnikiem uzywania nielegali w swoim kodzie). Mono 12:57, 19 sty 2011 (CET)
- Rozumiem fascynację tematem, sam ją przeżywałem jakieś 20 lat temu. Ale: 1) nie widzę potrzeby dokumentowania w Atariki nielegalnych rozkazów 6502, skoro nie mamy opisu legalnych (a tego nie mamy, bo szkoda powtarzać to, co jest dostępne wszędzie w sieci, również u producenta); 2) opis nielegalnych rozkazów każdy, kto chce, może łatwo wygóglać (np. tu jest jeden, w "Bajtku" był też artykuł, mój zresztą); 3) nie nam się zastanawiać nad tym, co warto opisywać - racja, nie nam, bo zastanowił się już nad tym producent 6502 i nielegali nie opisał, najwyraźniej zamierzając je w przyszłości usunąć, co też uczynił; 4) moje prywatne zdanie: moim prywatnym zdaniem mamy dużo szczęścia, skoro udało się uniknąć sytuacji, w której nielegalne rozkazy nie są używane przez co drugi program, dzięki czemu podmianka 6502 na 65816 i zabawa tym procesorem jest prawie zupełnie bezbolesna; ewentualna "moda" na nielegale, jeśliby miała powstać, poważnie ograniczy tę możliwość, a chyba lepiej jest mieć możliwości więcej niż mniej. 5) w końcu: nie ma listy nielegalnych rozkazów "działających na wszystkich Atari", bo np. na XEGS Pinokia, XEGS krapa, XEGS laoo, na moim 65XE i na kompie Pasia, na 1200XL z XL7 i bógjedenraczywiedzieć ilu jeszcze komputerach z zamontowanym Sweet 16 żaden nielegal nie zadziała z powodów, jakich się łatwo domyślić. Chyba, że zamierzamy się bawić w dyskusję, czy Atari z jednym scalakiem wymienionym na nowszą wersję to jest jeszcze Atari, od ilu włosów zaczyna się łysina, albo uprawiać sofistykę w rodzaju, że do Atari 8-bit nie można wsadzić procesora 16-bit, bo przestanie być to komputer 8-bit (co wątpliwe, szyna danych pozostaje ośmiobitowa, podobnie o ST nikt nie twierdzi, że jest to komputer 32-bit). KMK 21:16, 19 sty 2011 (CET)
temat ktory powinien byc rzetelnie opisany - bo dotycza atari (o to w Atariki chyba chodzi nie?). osobiste preferencje nie powinny byc tu brane pod uwage.
ad 1. niestety nie ma dostepnej w sieci dokumentacji ktore nielegalne rozkazy sa przez atari wykonywane a ktore nie, a ktore tylko przez niektore modele. producent nie publikowal takich mozliwosci swojego czipa podobnie zreszta nie ma opublikowanych / udokumentowanych przez producenta mozliwosci generowania przez antica interlancu sprzetowego - co swoja droga tez by sie w atariki przydalo.
ad 2. kazdy kto chce moze rowniez wyguglac jakie byly modele atari co nie przeszkadza zgromadzic tej wiedzy w atariki. zreszta nie ma w sieci opisu stablnych i nie (w odniesieniu do atari) nielegalnych rozkazow.
ad 3. juz pisalem, ze producent wielu reczy nie opisuje, z czasem jednak okazuje sie ze pewne uklady wykazuja 'ukryte' mozliwosci. a producent nie usunal tych mozliwosci w modelach procesorow montowanych w atari. idac Twoim tokiem myslenia nalezalo by w atariki umiescic tylko dokumentacje producenta albo o zgrozo tylko linki gdzie ja znalezc...
ad 4. atariki to nie prywatne zdanie. ze zacytuje: "Atari Wiki, baza wiedzy i encyklopedia o Atari i sprawach pokrewnych, dostępna na zasadzie wolnej dokumentacji dla każdego. Każdy też może wnieść wkład w jej rozwój.". nie mozna omijac niektorych tematow dotyczacych atari w atariki bo sa dla kogos niewygodne. zreszta nie wpadalbym w megalomanie, nie sadze zeby artykul w atariki wywolal ewentualna 'mode' na nielegalne rozkazy albo zdusil ewentualna 'mode' na cos innego. jeszcze raz mowie - rzetelnie opisac rzeczywstosc.
ad 5. jest taka lista dzialajaca na wszystkich standardowych atari. komputery ktore wymieniles nie sa standardowymi komputerami atari. to sa komputery z wymienionym procesorem na 16 bitowa wersje (czy po pojawieniu sie VBXE, w atariki nie wolno zamieszczac artykolow np. o bledach GTIA bo potezniejsza wersja -VBXE- ich nie ma?). jasne jest wiec ze nielegalne rozkazy na takich maszynach nie beda dzialac (o konsekwencjach uzywania rozkazow nielegalnych tez powinno sie napisac)... co do wymiany cpu, bedzie to kolejny komputer o architekturze 8bitowej z 16 bitowym cpu, historia zna duzo 16bit cpu z 8bitowa szyna danych - i co to ma wspolnego z naszym tematem. Xxl 23:21, 19 sty 2011 (CET)
- Odpowiem tylko na to: "fascynacja tematem atari by sie jednak tu przydala ale jesli juz ja przezyles (...)". Otóż wrócimy do dyskusji, kiedy oduczysz się trollowania. Dziękuję, pozdrawiam i życzę owocnego stosowania takich chwytów w innych dziedzinach życia. KMK 00:04, 20 sty 2011 (CET)
zdanie wykasowalem, czy teraz mozna liczyc na merytoryczna odpowiedz? Xxl 08:47, 20 sty 2011 (CET)
- Ok, jutro, dobrze? KMK 01:04, 22 sty 2011 (CET)
Też fascynowałem się tematem 20 lat temu i ciągle uważam go za ciekawy. Widziałem dziesiątki artykułów na ten temat i nie znam ani jednego, który byłby dokładny i bez błędów. W zalinkowanym artykule Offengi jest np. "Exact operation unknown". Argumentacja, że to są błędy, że producent nie opisał, do mnie nie trafia. Równie dobrze należałoby zakazać trybów HIP, TIP, 9++, 480i. Zgadzam się z Xxlem, że jeden artykuł w Atariki nie spowoduje wysypu programów. A jeśli nawet - to przecież 8-bitowe Atari to raczej 6502 z nielegalnymi instrukcjami, niż 65816 z VBXE. Oczywiście najlepiej, gdyby program wykrywał procesor i dostosowywał się do niego, albo w ogóle nie musiał. Najlepiej też, żeby emulatory poprawnie wykonywały wszystkie rozkazy. Żaden emulator obecnie tego nie robi, łącznie z najnowszą Altirrą. --0xF 08:10, 24 sty 2011 (CET)
- No nie przekonaliście mnie. Podtrzymuję, że póki nie mamy opisu rozkazów legalnych, nie ma najmniejszego sensu opisywać (chociaż ciśnie mi się pod palce wyraz "promować") nielegalnych. Argument, że "producent wielu rzeczy nie opisuje" z powołaniem się na to, że wiele układów ma "ukryte możliwości" (np. 480i), jest żaden, bo w tym wypadku możliwości te były ukryte również dla producenta. W przypadku 6502 producent świetnie wiedział, że tabela legalnych opkodów nie pokrywa wszystkich możliwych kombinacji bitów - czyli świadomie zarezerwował pozostałe na przyszłość, po to, żeby procesor można było w przyszłości ulepszyć. Co też zrobiono: mamy 65C02 i 65C816. Analogicznie jest też gdzie indziej, o ile mi wiadomo, np. 80286 wykonuje tylko legalne rozkazy 8086, ktoś mógłby zatem powiedzieć, że PC AT "to już nie jest PC, bo PC to 8086 z nielegalami". Jak wiadomo, nie należę do tej partii. KMK 14:19, 2 lut 2011 (CET)
- P.S. Przepraszam za opóźnienie w odpowiedzi. KMK 14:21, 2 lut 2011 (CET)