C64Power Forum
Software => Programowanie => Wątek zaczęty przez: qus w 06 Lutego 2018, 10:10
-
Mam dla Was coś ekstra!
Po co pisać w BASICu, V2 w dodatku, skoro możecie od razu pisać w assemblerze?
No, prawie...
Jeśli macie kawałek Linucha albo przynajmniej Cygwin/MinGW, to zapraszam do zbudowania sobie fantastycznego języka programowania dla ośmiobitowych zabytków.
Język nazywa się Atalan (ATAri LANguage ;D) i przy umiejętnym pisaniu wypluwa kod assemblerowy zoptymalizowany tak dobrze, jakbyście pisali bezpośrednio w języku maszynowym.
Pełną specyfikację znajdziecie tu:
http://atalan.kutululu.org/
A dające się zbudować źródła - tu:
https://github.com/ssuukk/Atalan
Czemu o tym piszę? No cóż - to już prośba do zaawansowanych - przydałoby się trochę pomocy w ogarnięcu generatorów kodu dla naszego C64, ponieważ domyślnie Atalan generuje kod dla assemblera MADS pod Atari. Dla swoich projektów już częściowo przekonwertowałem instrukcje na ca65, odpowiadają za to pliki w katalogu:
cpu\m6502
m6502.asm - całkowicie przekonwertowany, jest OK, assembluje się. Ten plik zawiera kawałki "standardowej biblioteki Atalana", takie jak mnożenie, dzielenie, pisanie po ekranie.
m6502.atl - plik Atalana mówiący jak konwertować pośredni mikrokod atalana na assembler 6502 - tu jest trochę sałatki, ponieważ póki co tylko część instrukcji, tych, których potrzebowałem do moich projektów jest w formacie a65, reszta w MADS, co oczywiście może powodować że skompilowany plik assemblera też będzie zawierał mix mnemoników dla a65 i MADS (głównie chodzi o pseudokody dla rzeczy takich jak .byt, .word, tworzenie tablic itp.). Dodatkowo - w niektórych przypadkach brak tam konwersji mikrokodu na assembler i pewnych konstruktów, które Atalan teoretycznie ma, nie da się wykorzystać, DOPÓKI NIE DODA SIĘ ICH W TYM PLIKU w postaci kodu assemblerowego. Więc jest to dość łatwe, jak tylko rozkmini się minimalnie składnię tegoż pliku
I najfajniejsza chyba rzecz, którą ktoś miły mógłby chcieć pomóc rozwijać, to te pliki:
platform/c64/c64.atl i c64.asm
Pierwszy z nich zawiera np takie definicje:
borderColor @53280:color
backgroundColor @53281:color
Color: enum
black
white
red
cyan
purple
green
blue
yellow
orange
brown
lightred
garkgrey
grey
lightgreen
lightblue
lightgrey
Dzięki czemu potem w kodzie Waszego programu, kiedy chcecie czarną ramkę piszecie po prostu:
borderColor = Color.black
A Atalan, o ile w akumulatorze jest właśnie przypadkiem 0, podmieni tę linijkę na:
STA 53280
Fajnie?
Dalej w tymże pliku mamy definicję:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Ale co znaczą te wszystkie symbole?
KLoad to procedura zawarta w pamięci pod adresem$ffd5 - to chyba jasne. Przyjmuje ona dwa argumenty, pierwszy nazywa się "type" i przenoszony jest przez rejestr A procesora, a drugi nazywa się startAddr i umieszczony zostanie w rejestach X i Y procesora. Procedura zwraca trzy wartości (serio!) zawarte w rejestrze C, A oraz adres w X+Y. I wywołujecie ją w swoim kodzie np. tak:
stan,blad,koniec = KLoad 1,$0800
Tadam? Fajnie?
Ostatnie krzaczki w linii informują generator kodu Atalana, że wywołanie tej proceduy wymaże zawartość rejestrów X, Y i A (zaawansowanym nie muszę tłumaczyć, po co to...)
Ten plik zawiera jeszcze parę innych pożytecznych skrótów, ale możnaby go rozszerzyć o wiele, wiele więcej, np. zmiany trybu graficznego, operowanie duszkami itp.
Jak ktoś jest chętny do pomocy, to zapraszam...
-
Kiedyś już o tym pisałem na forum, doczekal się ten projekt bibliotek dla c64, czy wciąż tylko Atari?
-
Twierdzisz, ze:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Jest bardziej czytelne niz :
LDX #$08
LDY #$00
LDA #$01
JMP $FFD5
IMHO, Dla mnie to wyglada troche jak kolejne rozwiazanie do problemu, ktorego nie ma.
Pozdro.
-
Kiedyś już o tym pisałem na forum, doczekal się ten projekt bibliotek dla c64, czy wciąż tylko Atari?
Projekt jest martwy. Jedyne biblioteki dla c64, które są to uzupełniony przeze mnie plik c64.atl
Dalsze jego rozszerzenie nie jest niczym trudnym.
Twierdzisz, ze:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Jest bardziej czytelne niz :
LDX #$08
LDY #$00
LDA #$01
JMP $FFD5
Twierdzę że
stan,blad,koniec = KLoad 1,$0800 (1 - słownie: jedna linijka)
jest czytelniejsze niż:
LDX #$08
LDY #$00
LDA #$01
JMP $FFD5
STA blad
STX <koniec
STY >koniec
BCC obsluz_status
(8 - słownie OSIEM linijek)
I raczej nie jestem w tym odosobniony, jak sądzę...
-
W życiu nie zamienię:
LDX #$08
LDY #$00
LDA #$01
JMP $FFD5
na:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
-
No i słusznie, bo ta linijka:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Nic nie robi... To fragment pliku nagłówkowego atalana... Czytanie ze zrozumieniem nie boli...
-
Twierdzę że
stan,blad,koniec = KLoad 1,$0800
jest czytelniejsze niż:
LDX #$08
LDY #$00
LDA #$01
JMP $FFD5
I raczej nie jestem w tym odosobniony, jak sądzę...
Tylko tak sie sklada, ze :
stan,blad,koniec = KLoad 1,$0800Nie znaczy nic bez:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Co jeszcze bardziej komplikuje sprawe. Tutaj widac ewidentny brak doswiadczenia w programowaniu.
Znam magikow, ktorzy twierdzili, ze sie naucza "EF, Code First, LinQ" i wszystkiego wokolo, zeby sie nie musieli uczyc SQL. EF jest w miare swieze, pelne bledow i z brakiem wielu rzeczy, ktore dostepne sa tylko w SQL. Na koniec dnia nie mieli wyjscia musieli sie nauczyc SQL, ktory jest na rynku od ~40 lat, stabilny jak skala i nie bez powodu wciaz uzywany.
Teraz tu jest piekne rozwiazanie, ktore zmusza cie do nauki innego podejscia do assemblera, niz nauczenie sie assemblera, wiec zanim zaczniesz od razu powiem Ci co sie stanie :
Kiedy juz sie nauczysz Atalana od deski do deski i juz bedziesz wiedzial wszystko, co mozna wiedziec na tema atalana, to stanie sie to wtedy, gdy staniesz przed problemem, ktory mozna zalatwic tylko w assemblerze i wrocisz do punktu wyjscia.
Zaden kompiler nie da Ci dokladnej ilosci cykli potrrzebnych na wykonanie Twojego kodu takze cokolwiek potrzebuje byc bardzo dokladne w czasie, napisane w czymkolwiek innym niz assemblerze odpada.
Tak czy inaczej, jesli uwazasz, ze jest wart uwagi to prosze bardzo :)
Powodzenia :)
-
Zacząłem pisać posta ale gdzieś go wcieli a dotyczył tego, że debugować i tak trzeba w czystym asemblerze.
-
Zacząłem pisać posta ale gdzieś go wcieli a dotyczył tego, że debugować i tak trzeba w czystym asemblerze.
Dokladnie :)
Przypomina mi to tekst nauczycielki od matematyki w podstawowce :
Nie kombinuj, tylko wez sie bracie do roboty
Pozdrawiam :)
-
Tylko tak sie sklada, ze :
stan,blad,koniec = KLoad 1,$0800Nie znaczy nic bez:
KLoad@$ffd5: proc type:byte@cpu.a startAddr@(CPU.x,CPU.y):adr -> state@cpu.c error@cpu.a lastByte@(cpu.x,cpu.y):adr @cpu.a @cpu.x @cpu.y
Co jeszcze bardziej komplikuje sprawe.
To tak komplikuje sprawę, jak istnienie pliku stdio.h komplikuje programowanie w C...
Tutaj widac ewidentny brak doswiadczenia w programowaniu.
Nie przejmuj się, masz jeszcze dużo czasu żeby się nauczyć. Kiedyś było trudno, ale teraz jest dużo materiałów online. Programowanie może być naprawdę wielką frajda!
Teraz tu jest piekne rozwiazanie, ktore zmusza cie do nauki innego podejscia do assemblera, niz nauczenie sie assemblera, wiec zanim zaczniesz od razu powiem Ci co sie stanie :
Kiedy juz sie nauczysz Atalana od deski do deski i juz bedziesz wiedzial wszystko, co mozna wiedziec na tema atalana, to stanie sie to wtedy, gdy staniesz przed problemem, ktory mozna zalatwic tylko w assemblerze i wrocisz do punktu wyjscia.
...ponieważ kompilatory kompilują kod do magicznego zestawu instrukcji, który jest zupełnie inny od niemagicznego asemblera, w którym da się zrobić dosłownie wszystko.
Zaden kompiler nie da Ci dokladnej ilosci cykli potrrzebnych na wykonanie Twojego kodu takze cokolwiek potrzebuje byc bardzo dokladne w czasie, napisane w czymkolwiek innym niz assemblerze odpada.
Ooooj, mnie się nie sipieszy! Zawsze skłonny jestem poświęcić szybkość dla ekspresywności.
-
Ooooj, mnie się nie sipieszy! Zawsze skłonny jestem poświęcić szybkość dla ekspresywności.
Nie chodzi o szybkosc czy ekspresywnosc, tylko synchronizacje w czasie :)
Poprosze o przyklad programu napisanego w Atalanie, ktory wyswietli cokolwiek w gornej albo dolnej ramce obrazu :)
Pozdrawiam.
-
Słuchaj - jest tu cała masa osób, która chciałaby coś sobie napisać na C64 - a to "słówka", a to jakąś bazę danych, prostą grę czy "mój pierwszy program na c64". Trwa wątek o prostej podmiance polskich znaków...
I teraz pytanie - czy mają dłubać w Basicu V2 który umie dosłownie nic, flow kodu kontoluje poleceniem "goto" a zmieszczenie tego co po "then" w 80 znakach to czasem sztuka, czy może mogliby nauczyć się prostego i sympatycznego języka, który się kompiluje do źródła w assemblerze? PEEK, POKE, DATA, czy porządny język?
Poprosze o przyklad programu napisanego w Atalanie, ktory wyswietli cokolwiek w gornej albo dolnej ramce obrazu :)
Proszę o przykład gry z listy http://www.lemon64.com/games/votes_list.php, która wyświetla coś w górnej lub dolnej ramce, inaczej szkoda czasu na kodowanie czegoś tak bezużytecznego.
Jeśli znajdziesz przykład, to trudno - będę musiał spróbować...
-
https://www.youtube.com/watch?v=VfhJM2Gaeew
Nie wiem, czy jest na Twojej liscie, ale mysle, ze gre Bomb Jack chyba wiekszosc zna :)
Pozdro.
-
No, cóż. Słowo się rzekło :D A jak się uda, to co?
-
To wtedy porownamy Twoj super latwy, prosty i czytelny kod do tego w assemblerze tutaj:
http://codebase64.org/doku.php?id=base:removing_the_top_bottom_border
I werdykt zostawimy czytelnikom :)
-
Którzy wypowiedzą się oczywiście na temat czytelności kodu w atalanie i w assemblerze? :D
-
Na razie nie mamy co porownac :)
-
No ale wiesz - no risk no fun. Spodziewałem się jakiejś deklaracji typu - "to wtedy zjem swojego SIDa 6581 R4 AR z czosnkiem i cebulką".
-
A cc65 ujezdzaliscie?
-
A Ty nie miałeś przypadkiem pomóc mi z konfigiem ld65?
-
No ale wiesz - no risk no fun. Spodziewałem się jakiejś deklaracji typu - "to wtedy zjem swojego SIDa 6581 R4 AR z czosnkiem i cebulką".
Nie ma sensu skladac jakichkolwiek deklaracji :)
A cc65 ujezdzaliscie?
Nie i SDCC Tez nie :)
IMHO Jest tyle materialu dostepnego na Assembler w necie, ze atakowanie czegokolwiek innego mija sie z celem, skoro pewne rzeczy mozna zrobic tylko w assemblerze...
Pozdro.
-
Tchórz?
-
Tchórz?
Nie mam czego sie bac :)
Czekamy na program :)
-
A Ty nie miałeś przypadkiem pomóc mi z konfigiem ld65?
Jeszcze na to nie spojrzalem w praktyce, popatrzalme tylko na to co tam wkleiles :)
-
Tchórz?
Nie mam czego sie bac :)
Czekamy na program :)
No, cóż. Nikt nie powie, że nie dałem Ci szansy z tego wybrnąć.
Do zobaczenia jutro, miłych snów. ;D
-
No, cóż. Nikt nie powie, że nie dałem Ci szansy z tego wybrnąć.
Dobrze :):):)
Z niecierpliwoscia czekam, zeby sie przekonac jak bardzo mocno jestem pograzony :):):)
-
qus ja również uważam, że sajmosia ma rację . Mam wrażenie, że nie możesz do siebie dopuścić faktu, że nie masz racji, ale w prosty sposób sajmosia ci napisał, abyś poparł to przykładami. Myślę, że jak już tak bardzo chcesz programować "bejzikowym" stylem, to bym ci polecił np. KickAss IDE :)
-
Słuchaj - niestety, przeciw Samosiei jest matematyka.
No i kod.
Szkoda tylko, że nie brnął w to dalej, aby zrobić z siebie idiotę, bo przynajmniej ja bym nie musiał.
Kończę redagować właśnie post.
-
Zapraszam:
http://c64power.com/forumng/index.php?topic=8045.0
-
Ja miałem na myśli, że sajmosia raczej miał rację odnośnie cyklowania w assemblerze. Szczerze mówiąc to sam jestem ciekaw, bo nigdy wcześniej nie słyszałem o języku programowania Atelan, więc zaczynam czytać ten link do wątku, który podałeś :)
-
Jeżeli mał rację na temat cyklowania w asemblerze, to znaczy że musi istnieć coś innego niż assembler, do czego kompiluje się kod programu w języku wyższego poziomu. Trzeciej alternatywy nie ma...
-
Jest jakis problem z msvcr100.dll . Kompilator sie uruchamia wyskakuje komunikat o bledzie poczym kompilator konczy prace bez pliku wynikowego . Prosze o danie dzialajacej wersji tego pliku.
Jezyk jwwydaje sie ciekawy wiec chcialbym go potestowac.
-
Oj, ale z Windowsami to ja Ci nie pomogę (nie to żebym był jeden z tych, co się brzydzą Widnowsów), po prostu nic na nich nie budowałem. Nie możesz spróbować na Linuxie?
Ale pan Google mówi:
Problem MSVCR100.dll - brak Microsoft Visual C++ 2010 x86
Dodatkowo - jeśli chcesz bawić się Atalanem, przygotuj się na trochę segfaultów - to właśnie je chcę wyeliminować. Jednak zawsze da się napisać kod nieco inaczej, aby je ominąć.
Sprawdź zaktualizowaną dokumentację tu:
https://github.com/ssuukk/Atalan
A i jeszcze :D Jeśli niechcący pobierzesz nowe źródła z gita, to program z przykłądu z tamtego wątku się nie skompiluje, bo SEI robi się już inaczej.
-
Problem MSVCR100.dll - brak Microsoft Visual C++ 2010 x86
Problem w tym ze ta wersja przynajmniej u mnie nie dziala prawidlowo z kompilatorem (mam win 7) , znalazlem jeszcze z 5 innych i to samo.
Czytalem tu http://atarionline.pl/forum/comments.php?DiscussionID=595 (http://atarionline.pl/forum/comments.php?DiscussionID=595) ze ten problem jest/ byl dosc powszechny, niestety nikt nie podal informacji ktora wersja dll dziala.
-
A pod czym budujesz? Mingw? Cygwin? A mózg łatwiej jakimś visual studuo? Są darmowe wersje.
-
Skompilowalem za pomoca mingw.
https://drive.google.com/open?id=11F1lBxT_Q3bsuww0RFBTq_TZlkh7t6iT
Dajcie znac czy zadzialalo.
-
Jeśli planujecie się tym bawić, to dodatkowo pamiętajcie, że:
1) potrzeba Wam jeszcze assemblera ca65 (albo samodzielnie wyedytować wynikowy plik assemblerowy do Waszego ulubionego assemblera, pamiętając o .org albo *=)
2) aby załadować assemblowany plik na c64 potzebujecie dodać do wynikowej binarki przynajmniej dwa bajty adresu ładowania, takie jak podaliście w org
3) na linuksie wszystko zbuduje się samo, łącznie z dwoma bajtami adresu i linią SYS xxxx w BASICu, aczkolwiek jest problem z konfiguracją linkera, która powoduje jakieś dziwne przesunięcia w adresach, więc tak jakby nie działało :D
-
Skompilowalem za pomoca mingw.
https://drive.google.com/open?id=11F1lBxT_Q3bsuww0RFBTq_TZlkh7t6iT
Dajcie znac czy zadzialalo.
U mnie wyskakuje komunikat ze program jest niezgodny z moja wersja windows. Mam windows 7 32 bit UK
-
Zapomnialem dopisac ze build tylko 64bity.
-
Skopilowalem jeszcze na 32bity.
https://drive.google.com/open?id=11F1lBxT_Q3bsuww0RFBTq_TZlkh7t6iT
-
OK, dla próbująych Atalane - zassijcie sobie z gita nowe pliki z katalogów cpu, platform oraz przykład z katalogu test/c64. Jest tam pokazane jak w Atalanie zrobić procedurę na przerwaniach. Kod nie testowany, więc pewnie jeszcze nie zadziała. Ale jak kto zna assembler, to sobie poprawi wynikowy plik.
-
teaser !
Temat umarł czy jakiś hajden dra (g olo queen) gone ?
-
Nie mam na razie czasu na pisanie dalej, ale skoro sam Kisiel się domaga, to chyba będę musiał musieć.