26

(88 odpowiedzi, napisanych Zloty)

Termin pasuje mi idealnie. Będę na 100%

27

(83 odpowiedzi, napisanych Quast Rules)

Sikor napisał/a:

Jaskier: męczy mnie już pieprzenie niektórych, których należałoby odesłać do topiku: http://atariarea.krap.pl/forum/viewtopi … 85&p=2 . Ja ze swojej strony - jak obiecałem - postaram się coś zrobić. Ustalamy: zwykły Atari Basic, Twoja procedura Bget i CMC i regulamin jak napisałem. O.K.?

O.K.
Co najwyżej kompoty sami sobie zrobimy i sami między siebie nagrody porozdajemy.

28

(83 odpowiedzi, napisanych Quast Rules)

Tak właśnie chciałem zrobić. I pewnie tak zrobię. Jeszcze się tylko zastanowię nad tym czy wybrać atari basic czy turbo i zabieram się do roboty.

29

(83 odpowiedzi, napisanych Quast Rules)

To może poprostu napiszemy, że należy głównie pisać w basicu, a przed kompotami autor by się spowiadał z tego ile zakodował w innych językach. Jak powie, że 95% (syndrom Magnusa) to byśmy przesunęli demko do innej kategorii :)

30

(83 odpowiedzi, napisanych Quast Rules)

Gryzie się z punktem 1 (programujemy w Atari Basic, a w tym przypadku byłoby to programowanie w kodzie maszynowym).

31

(83 odpowiedzi, napisanych Quast Rules)

Niby też można bez regulaminu :)
Ja to w ogóle chciałem ze swoim demem wystartować razem z demami w asmie, licząc na to, że publicznośc "zrozumie" moje ograniczenia. To Sikor zaproponował oddzielny konkurs.

Pecus: ja jednak jestem przeciwko. W ten sposób doszlibyśmy do ogólnie znanych procedur na kopiowanie, przenoszenie itp. Jak basic to basic.
pr0be: piszemy w basicu. Jak napiszesz prockę w basicu do wsadzenia w DLI, to masz moje gratulacje :)

P.S. X-ie pamiętasz jeszcze jak się pisze pod CMC :) ???

32

(83 odpowiedzi, napisanych Quast Rules)

Witam,

Post o tym konkursie miałem zainicjować ja, ale niestety w trakcie długiego weekendu byłem w rozjazdach po rodzinie i znajomych i nie stało czasu...

Na początek krótkie wyjaśnienie. Na pomysł zrobienia dema w czystym atari basicu wpadłem ja i to już z jakiś miesiąc temu. Stwierdziłem po prostu, że chciałbym się sprawdzić w tym, w czym nigdy niczego nie napisałem. Od razu uprzedzam. Moje demo w atari basicu na Ornetę powstanie, a wszystkich trolli, jeleni i inną leśną zwierzynę płową mam w głebokim poważaniu.
W Opalenicy o swoim pomyśle powiedziałem Sikorowi i on się jemu bardzo spodobał. Stwierdził, że warto zrobić pod to osobną konkurencję. W sumie rozumiem dlaczego. Jest wiele osób, które chciałoby coś zrobić na atarkę, ale widząc dema z gatunku Reditusa czy Numena, wolą nic nie robić, chociażby dlatego, aby nie narazić się na drwiny z gatunku: a takiego torusa to my ze szwagrem w '45 zrobiliśmy.
Narzekacie, że jest mało dem na atarkę? No bo niewielu coś robi, większość nie umie, reszta nie ma czasu. Basic demo compo przeznaczone byłoby dla tych, co nie potrafią/nie umieją/nie chcą pisać super dem w assemblerze. Chcą po prostu coś stworzyć. Więcej osób programuje w Basicu niż w asmie. Literatury na ten temat jest w bród. Moja idea jest taka: niech każdy kto chce coś napisać na atari robi to. Program w Basicu wcale nie musi kojarzyć się z tandetą (i nie jest to wcale przytyk do różnych produkcji z ostatnich party).

Jeśli chodzi o regulamin to są generalnie 2 pomysły:
1) Czysty basic - muzyka na SOUND i doczytywanie plików za pomocą GET #1,A:POKE 32768+I,A w pętli.
Wady: muzyka w ten sposób robiona będzie niestety bardzo słaaabiutka. Zerowa przyjemność dla uszu. Nieprzyjemność raczej. A co do doczytywania plików w ten sposób, to zwykłe wczytanie obrazka 8KB trwałoby z minutę. Też średnia przyjemność.
Dlatego opowiadamy się za pomysłem:
2) Muzyka w CMC. Dlatego, że player CMC ma od razu na starcie procedurkę odgrywania muzyki przeznaczoną do wywoływania z basic-a. Dlatego programista basicowy korzystając z tego playera nie musi znać ani jednego rozkazu w asmie. A takie było założenie tego konkursu.
Doczytywanie plików: też odpowiednia procedurka, ale krótka: A=USR(ADR("napis")), gdzie napis to: małe h, cudzysłów w negatywie, znak trefla, duże L, duże V, małe d w negatywie. Czyli na ludzkie: PLA, LDX #16, JMP E456. Blok danych IOCB przygotowywało by się już z basica.

A zatem ogólny regulamin (proszę poprawić jak coś jest nie tak):
1) Konkurs jest przeznaczony dla programistów w języku Atari Basicu znajdującym się w oryginalnym ROMie każdego Atari, programowanie w innych językach zabronione.
2) Program nie może zmieniać: stosu, obszaru DOS-u, obszaru programu w Basicu oraz obszaru od $a000 (poza rejestrami sprzętowymi)
3) Jedyne programy maszynowe, które program może wywoływać to player CMC (oryginalny z CMC lub poprawiony przeze mnie) oraz procedurkę wywołania CIO przedstawioną powyżej.
4) Cały program może się składać z kilku mniejszych programów uruchamiających się kolejno za pomocą RUN "D:PROG2.BAS". W takim jednak przypadku, trzeba wyraźnie określić, który plik trzeba uruchamiać jako pierwszy nazywając go START.BAS albo RUN.BAS albo nazwą dema.
5) Wczytywanie plików należy robić bez podawania numeru stacji, tak aby można było wszystkie pliki skopiować do jednego katalogu i uruchamiać stamtąd.
6) Zabroniona jest jakakolwiek modyfikacja plików programu. W szczególności taka, która prowadzi do niemożności wylistowania tekstu programu. Jest to bowiem konieczne do sprawdzenia zgodności z regulaminem.
7) Program musi się odpalić pod dowolnym DOS-em o memlo nie więcej niż $2000 oraz na oryginalnym Atari (jeden POKEY, RAM nie więcej niż 128KB).

Jakieś inne pomysły?

33

(3 odpowiedzi, napisanych Sprawy atari.area)

Popieram, ale weź to wytłumacz kierownictwu.

34

(9 odpowiedzi, napisanych Emulacja - 8bit)

Tę uwagę odrzucamy jako niezorganizowaną.

35

(9 odpowiedzi, napisanych Emulacja - 8bit)

Że nie gra sampli, to łatwo zauważyć. Ale jest jeszcze coś. Muzyka jest jakby inna (fałszuje?). Może jaki muzyk by popróbował posłuchać i ocenić co dokładnie tam nie gra?

36

(9 odpowiedzi, napisanych Emulacja - 8bit)

Cześć,

Spróbowałem połączyć jedno z drugim i okazało się, że Fox dotrzymał słowa (dzięki wielkie) i dopasował atari800 do PLus-a. Teraz wystarczy tylko zaciągnąć najnowsze źródła, wstawić do PLus-a i skomplikować.
Niestety nie wszystko działa. Na początek widzę, że nie zapamiętuje pomiędzy uruchomieniami podłączonych dysków i coś się dziwnego dzieje z dźwiękiem (ale nie jestem w stanie w pełni uchwycić co, coś dziwnego).
Jak by ktoś chciał pomóc mi w szukaniu, to tutaj jest zawsze ostatni build:
http://www.torun.mm.pl/~m_l/Atari800Win.exe

37

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Tak na oko, to trzeba zrobić mniej więcej to:

ldx #kanal
lda #instrument
asl @
tay
lda adres_muzyczki,y
sta adrinl,x
lda adres_muzyczki+1,y
sta adrinh,x
lda #nuta
jsr q5+4 <- warto to miejsce w playerze jakoś ładnie nazwać. A w ogóle może być q5+2 i wywalić sta przech, które do niczego nie służy, widać zapomniałem usunąć 10 lat temu.

38

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

W TMC 2.0 jest już jedna tablica od świętego. Miałabyż być i druga?

39

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

Pewnie by się dało. A skąd taką tablicę wytrzasnąć?

40

(33 odpowiedzi, napisanych Programowanie - 8 bit)

marok napisał/a:

Metoda z zastosowaniem tablic fixup'ow, rozumiem, ze rozwiazuje problem niemozliwosci korzystania z konstrukcji typu:

lda <adres
sta addr
lda >adres
sta addr

Nie tylko ten problem. Generalnie nie masz ograniczeń co do tworzenia programu. Możesz dowolnie umieszczać tablice, wskaźniki itp.

marok napisał/a:

Fajnie, tylko dzieje sie to kosztem raczej sporego nakladu dodatkowych danych stanowiacych zawartosc tych tablic. Interesowaloby mnie na ile statystycznie mozna ocenic procentowy udzial tej tablicy w stosunku do calosci ladowanego pliku.
Na szczescie, obszar pamieci zajmowany przez te tablice po ich wykorzystaniu zostaje zwolniony, wiec jest to "problem" tylko dla pamieci zewnetrzenej.

Player CMC z 2019 bajtów rozrósł się do 3503 (wliczając kod relokatora) :)

41

(33 odpowiedzi, napisanych Programowanie - 8 bit)

Oj narzekasz. Masz gotowe rozwiązanie. Tylko brać i używać :)
A tak właściwie nie wiem, czy zdajesz sobie sprawę, ale przez ciebie spędziłem 3 niedzielne godziny na kodowaniu zamiast na słodkim nieróbstwie :)

42

(33 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:
Jaskier napisał/a:

Dziwne, a mi się udało :D

Tak? A nie wykłada się aby na kombinacjach typu:

Nie widzę powodu aby miałby się wykładać. Nigdzie nie zakładam, że rozkazy następują w określonej kolejności. Właściwie nigdzie nie zakładam, że jakiekolwiek rozkazy występują :)
Tablica fixupów jest generowana na podstawie wzorca skompilowanego pod $8000 oraz 256 próbek testowych skompilowanych pod adresy od $4000 do $40ff.

43

(33 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:

Nie możesz tak zrobić dla pełnych adresów (kompilując np. jedną kopię pod $2000, a drugą pod $3001), bo fixupowanie musiałoby być dodawaniem z przeniesieniem, a nie jesteś w stanie zagwarantować, że dwa kolejne bajty, które dla generatora fixupów wyglądają na młodszy i starszy (z różnic adresów j.w.), należą rzeczywiście do tego samego adresu, a nie do dwóch różnych.

Dziwne, a mi się udało :D

http://jaskier.atari8.info/Relocator.zip

W katalog Program wsadzasz dowolny program do przerelokowania. Jedyne ograniczenie to kompilacja w jednym bloku, czyli brak rozkazów ORG (za wyjątkiem pierwszego oczywiście). Ten pierwszy też jest zresztą specjalny bo musi wyglądać tak:

    org ADDR

a wartość ADDR będzie już automatycznie wsadzana przez generator fixupów.

No i teraz przechodzimy do katalogu Generator i go uruchamiamy. Spowoduje to stworzenie w katalogu Program końcowego exeka zawierającego kompilowany program wraz z odpowiednim relokatorem i tablicą fixupów. Relokator przepisuje program pod memlo i uruchamia go od jego pierwszego bajtu.

Sprawdzałem go kilka razy na prostym przykładowym programie (wypisującym na ekranie kropkę) i działa z różnymi wartościami memlo. Wszelkie zauważone błędy prosze jednak natychmiast zgłaszać. Dziękuję za uwagę :)

44

(33 odpowiedzi, napisanych Programowanie - 8 bit)

A gdyby było do wyboru tylko starszy bajt adresu lub nie adres to można się bez kompilatora obyć?
Innymi słowy:
Pokaż mi jaka jest twoja metoda relokacji, która działa przy przesunięciach o x*256 bajtów a nie działa przy innych.

45

(33 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:
Jaskier napisał/a:

A jak generujesz tablicę fixupów?

Banalnie prosto.

b) wymaga, żeby tąż tablicę fixupów generował kompilator

Dlaczego tablica starszych bajtów generuje się banalnie prosto, a do obu musi być zaprzęgnięty kompilator?

46

(33 odpowiedzi, napisanych Programowanie - 8 bit)

Tobie chodzi chyba nie o ładowanie do granicy strony, a o relokację o wielokrotność 256 bajtów.
A jak generujesz tablicę fixupów?
No i dlaczego nie może ona obejmować zarówno starszych jak i młodszych bajtów adresów?
A w ogóle to ja proponuję zrobić relokator na podstawie źródeł QA. Ładujemy plik .asm i go assemblujemy od MEMLO.

47

(33 odpowiedzi, napisanych Programowanie - 8 bit)

Pytał się o ograniczenia kodu relokacyjnego to odpowiadam :)

A mnie interesuje co innego:

Najpierw piszesz:
Wystarczy wyrównać adres ładowania do granicy strony i już można (bo zmieniają się tylko starsze bajty takich adresów).
A potem:
A starszy traktuje się tak samo, jak wszystkie inne starsze bajty wewnętrznych adresów tego pliku.

To w końcu można czy nie można???

No bo skąd relokator napotykając na rozkaz:
lda #$84
ma wiedzieć, że to nie jest takie zwykłe $84, ale starszy bajt jakiegoś adresu wewnątrz programu?

48

(33 odpowiedzi, napisanych Programowanie - 8 bit)

Kurcze pieczone, kolejny po chińsku gada.

Po pierwsze, to lda $ff,x da tryb zerostronicowy i nic ze stosu nie przeczytasz.
Wymuszenie trybu długiego też nie jest w pełni poprawne, bo stos mógł się nam "zawinąć".
A najbardziej prawidłowo jest zapewne:
dex
lda $100,x
...
inx
lda $100,x
Po drugie, to przesunięcie może być większe od 255.
No i szybkość i czytelność tego rozwiązania jest dyskusyjna (lekko mówiąc).

Metoda użyta przez gości z Avalonu jest całkiem sensowna, bo zamiast stosowania takich karkołomnych sztuczek wystarczy pisać:
lda dane_addr
sta vec
lda dane_addr+1
sta vec+1

bądź:
mwa dane_addr vec
:D

Oczywiście to nie wystarczy aby program po zrelokowaniu dobrze działał. Musi być napisany tak, aby nigdzie nie zakładał, że np. jakaś tablica zaczyna się od początku strony. Trzeba też uważać na program Antica. No i pamięci ekranu w trybie graficznym praktycznie nie można relokować (chyba, że z wyrównaniem do 4KB). Ciekawe też rzeczy będą się działy jeśli program załadowany pod $8000 zrelokuje się pod $4000 i zacznie korzystać z banków. A jeśli stosujemy zmiany kolorów w linii za pomocą cyklowania, to też trzeba uważać, bo rozkazy skoku warunkowego i ładowanie indeksowe mogą się nagle wydłużyć o 1 cykl :)

49

(33 odpowiedzi, napisanych Programowanie - 8 bit)

No a co ze starszym???

50

(33 odpowiedzi, napisanych Programowanie - 8 bit)

Przychodzi żaba do lekarza:
-panie doktorze, nie kumam.

Co zmienia wyrównanie adresu przy rozkazie
lda >adres
gdzie adres wskazuje na wnętrze relokowanego obszaru.