Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Koduj w Atalanie - Lekcja 1 - sajmosia edition  (Przeczytany 1622 razy)

0 użytkowników i 5 Gości przegląda ten wątek.

Offline qus

  • Level 3
  • ***
  • Wiadomości: 201
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #15 dnia: 08 Lutego 2018, 09:41 »
Mała popraweczka do kodu w Atalanie. Zamiast wywoływać procedurę do wyłączenia przerwań, można podstawić 1 do zmiennej osadzonej w CPU.i

Wyglądałoby to mniej więcej tak:

Kod atalana:

maska_przerwan@CPU.i
maska_przerwan = 1

wygeneruje taki assembler:

SEI

zamiast robić jsr disable_irq

(muszę tylko nanieść do backendu Atalana odpowiednie linijki, bo w chwili obecnej jeszcze to nie zadziała)

Offline KB777

  • Level 6
  • ******
  • Wiadomości: 2430
  • -profil nieaktywny-
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #16 dnia: 08 Lutego 2018, 10:04 »
jeśli ktoś tak zorientowany w elektronice jak Kisiel jest przekonywany przez kogoś, kto kopiuje schematy układów z sieci "bo jest ich tam pełno" że "dioda przewodzi w obie strony" i niech no mu tylko Kisiel udowodni, że nie, to myślę, że Kisiel ma prawo w takiej sytuacji zachować się brzydko.

Nie wiem jaki był kontekst cytatu - nie chce mi się szukać, czy tu ktoś tak powiedział a Kisiel twierdził, że "nie przewodzi" (cóż, technicznie - Kisiel jest mechanikiem, elektroniki się nauczył sam tyle ile mu było potrzeba - czyli "po łebkach", no i wygadywał tu już różne ciekawe rzeczy - np. te jego teorie dotyczące "SDBoxów psujących PLA w starych C64").

Ale tak generalnie... bach, yeboot, właśnie sobie strzeliłeś w stopę, kolano i jeszcze w cohones ;) Ktokolwiek zorientowany w elektronice wie jak wyglądają charakterystyki prądowo-napięciowe diody i że każda przewodzi w obie strony. To, że w jedną dobrze, w drugą źle - cóż, trzeba o tym wiedzieć. Tą właściwość się nawet wykorzystuje w przypadku "zwykłych" diód w fizycznych generatorach liczb losowych - źródłem szumu jest spolaryzowana zaporowo dioda (w pierwszej firmie, w której pracowałem na studiach - mieliśmy własne opracowanie RBG na tym bazujące; a i niektóre procesory mają RBG na pokładzie - korzystające z tego samego mechanizmu). A o tym jak używa się diód Zenera - w jakiej polaryzacji - chyba nie muszę mówić ? ;)

BTW - kto zauważył, że Atalanowa pętla jest "trochę nie ten-teges" ?
-profil nieaktywny-

Offline qus

  • Level 3
  • ***
  • Wiadomości: 201
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #17 dnia: 08 Lutego 2018, 10:14 »
Ale tak generalnie... bach, yeboot, właśnie sobie strzeliłeś w stopę, kolano i jeszcze w cohones ;)

Nie, no, wiem. Miałem zajęcia z półprzewodników. Szukałem po prostu łatwej do zrozumienia analogii.

BTW - kto zauważył, że Atalanowa pętla jest "trochę nie ten-teges" ?

Jeśli jest nie ten teges (źle skacze?) to dlatego, że kiedy dopisywałem do backendu poniższy kod, było już późno, z resztą nie chciało mi się tego sprawdzać. Poprawisz?

rule ifeq %A, %B$7, 0 = "   bit %B; dupa 1 bit 7 = 0" "   bpl %A"
rule ifne %A, %B$7, 0 = "   bit %B; dupa 2 bit 7 !=0" "   bmi %A"
rule ifeq %A, %B$7, 1 = "   bit %B; dupa 3 bit 7 = 1" "   bmi %A"
rule ifne %A, %B$7, 1 = "   bit %B; dupa 4 bit 7 !=1" "   bpl %A"
« Ostatnia zmiana: 08 Lutego 2018, 10:18 wysłana przez qus »

Offline sajmosia

  • Level 3
  • ***
  • Wiadomości: 194
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #18 dnia: 08 Lutego 2018, 10:48 »
Kod atalana:

maska_przerwan@CPU.i
maska_przerwan = 1

wygeneruje taki assembler:

SEI

To wystarczyloby jako przyklad, nie trzeba bylo otwierac ramek.

Dzieki :)

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #19 dnia: 08 Lutego 2018, 12:48 »
I tak dalej? I to będzie działać?

Odpowiadam: tak! Przy dobrze napisanym, i świetnie optymalizującym kod kompilatorze BASICa, nie istnieje w tej rzeczywistości jakikolwiek powód, dla którego to nie miałoby zadziałać!

No niestety, Basic w C64 nie ma kompilatora tylko interpreter - a ten tłumaczy na assembler (a w zasadzie na język maszynowy) tylko ostatni rozkaz, nie analizując programu w basic całościowo. Robi to w czasie rzeczywistym i niestety wtedy gdy analizuje składnię, ucieka mu czas potrzebny do otwarcia ramki [no może nie do końca, bo nie działa w idealnych odstępach czasowych, ale załóżmy że skuteczność tej metody byłaby w okolicach 1% czyli na sto ramek może by raz trafił i otworzył, czego na pewno nie można zaliczyć do udanego działania programu].
Są oczywiście kompilatory basica też i na c64, jako przyspieszacze kodu (Pirates ?), ale niestety żaden nie dba o śledzenie rastra, więc choćby i położyć pałac kultury w bramie, to kancelaria na 30.

Offline qus

  • Level 3
  • ***
  • Wiadomości: 201
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #20 dnia: 08 Lutego 2018, 12:54 »
Śmiem twierdzić, że nawet jakby wyposażyć C64 w pamięć zdolną pomieścić grafy przepływu potrzebne przy optymalizacji sporego programu w Basicu, to i tak czekanie, aż się taki program skompiluje mijałoby się z sensem.

Natomiast po raz kolejny powtarzam - nie ma fizycznych przeszkód, aby dobrze napisany kompilator basica v2 wyprodukował dokładnie ten sam kod, który mamy w tym wątku. No, może instukcją SEI, bo tej z basica v2 nie ma jak wywołać...

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #21 dnia: 08 Lutego 2018, 12:58 »
ale ciekawie się czyta, tak więc czekam na kolejne lekcje

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #22 dnia: 08 Lutego 2018, 13:08 »
Natomiast po raz kolejny powtarzam - nie ma fizycznych przeszkód, aby dobrze napisany kompilator basica v2 wyprodukował dokładnie ten sam kod, który mamy w tym wątku. No, może instukcją SEI, bo tej z basica v2 nie ma jak wywołać...

Oczywiście, wystarczy przepisać za pomocą poke dane z linii DATA, jak to niejednokrotnie wykorzystano w listingach z gazetek i na końcu dać sys, ale to już pobite gary.

Offline KB777

  • Level 6
  • ******
  • Wiadomości: 2430
  • -profil nieaktywny-
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #23 dnia: 09 Lutego 2018, 14:47 »
Ale tak generalnie... bach, yeboot, właśnie sobie strzeliłeś w stopę, kolano i jeszcze w cohones ;)

Nie, no, wiem. Miałem zajęcia z półprzewodników. Szukałem po prostu łatwej do zrozumienia analogii.

Czyli niepotrzebnie Kisiela do tego mieszałeś. Zresztą to nie pierwszy raz (bo wcześniej było coś w wątku o Reloaded MK2).
Więc wypadałoby wyprostować - Kisiel może i nie miał zajęć z półprzewodników, ale nadrobił sporo praktyką. A niektórzy zajęcia może mieli, ale jak widać na nich spali ;) Tu trzeba uważać z takimi analogiami, bo można trafić na ludzi, którzy na zajęciach z półprzewodników spali... tyle, że z nudów (bo np. mieli to już w szkole średniej).

A wracając do sedna (i naszej dyskusji na privie):

Mi się bardziej "naturalne na 6502" wydaje coś takiego:
lda #wartosc
loop1: cmp adres
bne loop1

niż
loop2: lda adres
cmp #wartosc
bne loop2

Ale to czepianie się o szczegóły w sumie ;)
-profil nieaktywny-

Offline sajmosia

  • Level 3
  • ***
  • Wiadomości: 194
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #24 dnia: 09 Lutego 2018, 15:00 »
Mi się bardziej "naturalne na 6502" wydaje coś takiego:
lda #wartosc
loop1: cmp adres
bne loop1

niż
loop2: lda adres
cmp #wartosc
bne loop2


Podzielam zwlaszcza, ze nie trzeba ladowac wartosci przy kazdej iteracji, przez co cala petla jest szybsza.

Pozdro.

Offline qus

  • Level 3
  • ***
  • Wiadomości: 201
Re: Koduj w Atalanie - Lekcja 1 - sajmosia edition
« Odpowiedź #25 dnia: 09 Lutego 2018, 16:07 »
To jest wysztko kwesita skonfigurowania backendu, ponieważ domyślnie autor zakodował np. skoki warunkowe w takim stylu (zapewne aby uniknąć sytuacji, w których branch byłby za długi):

rule ifeq %A, %B$7, 0 = "   bit %B" "   bmi *+5" "   jmp %A"
[format: ifeq dokąd, co, równe ile]

zamiast w takim (parę reguł musiałem przepisać właśnie tak, aby otrzymać wynikowy kod podobny do tego z przykładu):

rule ifeq %A, %B$7, 0 = "   bit %B" "   bpl %A"
« Ostatnia zmiana: 09 Lutego 2018, 16:09 wysłana przez qus »