1 Ostatnio edytowany przez piotrv (2005-12-16 00:33:34)

Znalazłem kawałek (chyba) swojego zaginionego kodu sprzed 12 lat. Czy ktoś może zajrzeć do niego i powiedzieć czy to jest to co myślę?

http://republika.pl/piotrek_home/files/c64_atari.txt

Wygląda że jest to kawałek oprogramowania do transmisji po porcie joy-a. Ale nie widze żadnej pętli, więc chyba jest to tylko transmisja pojedynczych bitów.

Kod związany jest z moim projektem łączenia C64 + Atari.

Pytania:
- czy na pewno nie jest to kawałek ROMu systemowego (?adres? C000)
- co robią procedury / wektory $EA81 / $EA31
- po co jest sekcja C000
- co to jest D012 (w jednym miejscu piszą coś o PMG, w drugim o nieużywanym porcie joy-a)

Oczywiście przeglądałem już książki, ale trochę mi się to nie zgadza z dokumentacją. Jeśli ktoś jest na bierząco z programowaniem na Atari, to zajmie mu to pewnie moment.

Znalazłem jeszcze dopisek:
bit 7 - clk wy
bit 6 - data wy

I'm not so bad, once you get to know me.

2

Kawałek ROMu systemowego nie jest to z całą pewnością. Kod wygląda, tak ogólnie, jak program na C-64, które pod adresem $C000 ma RAM.

KMK
? HEX$(6670358)

3

Możesz mieć rację. Pod $EA81 / $EA31 są sensowne wejścia na C64. A adres $DC0D pojawia się w procedurze transmisji w ROM. To kiepsko, myślałem, że znalazłem coś ciekawego...

I'm not so bad, once you get to know me.

4

Hmm, a może skontaktuj się z Zygą? (atari.online.pl) - jego After działał po porcie joya z ST - może coś pamioęta/pomoże/ma źródła?

Sikor umarł...

5

jest to przyklad zastosowania tzw. przerwania rastra. i z transmisja po joyu nie ma nic wspolnego.

piotrv, co ty chcesz laczyc?? no offence, ale sadzac po tresci twoich pytan, szybko ci sie to nie uda.
poszukaj w archiwum tajemnic atari artykulu, ktory opisuje takie rozwiazanie. mam byc moze w domu nawet zrodla...

drac030: znam dwa dema na komodora. jedno jest fajne a drugie ma fajna muzyke.

6 Ostatnio edytowany przez piotrv (2005-12-16 10:12:01)

Sikor: Nie, to raczej nic nie da. Po pierwsze to układ jest chyba dość specyficzny (partrz mój website), a po drugie to się komunikuje z C64 - symulując device C64. W sumie to proste, tylko trzeba by do tego usiąść i napisać od nowa (a skąd wziąść na to czas...).

Jad: Dużo już zapomniałem z Atari, ale na mój gust do obsługi przerwania brakuje CLD (mylę się?).

I'm not so bad, once you get to know me.

7

CLD jest potrzebne na Atari "normalnie", to znaczy jeśli poza takim handlerem jeszcze ma działać cały system (z pakietem matematycznym na czele). Być może kod powyższy zakłada, że procesor nigdy nie jest w trybie dziesiętnym, i na C-64 to może być nawet i prawda. Bo to jest kod z Commodora - nie, jad? ;)

KMK
? HEX$(6670358)

8 Ostatnio edytowany przez piotrv (2005-12-16 16:06:24)

Nie sądze, żebym robił takie udziwnione założenia.
Z drugiej strony jest to program z kartki (na drugiej stronie są jakieś całki z fizyki pierwszego roku studiów)...
Natomiast mogłem robić założenie, że wyłączam ROM, ale wtedy nie skakałbym do podanych adresów spoza programu.

A 6510 musi mieć CLD? (w handlerze)

I'm not so bad, once you get to know me.

9

draco, caly ten watek mnie nieco 'drzazni'. ale byc moze dzis mam taki dzien.
zrodlo jest jak najbardziej z komody. wskazuja na to adresy zarowno kodu jak i rejestrow.
poza tym, draco. taki doswiadczony programista... pomysl... kiedy sie przelacza 6502 w tryb dziesietny...
ja widzialem tylko dwie procedury: jedna mnozyla liczbe 16-bitowa przez liczbe 8-bitowa, druga sluzyla do konwersji wartosci bajtu na jego hexadecymalny odpowiednik jako tekst. obie nie wykorzystywane przez kernel. moze w interpreterze bejzika sa takie miejsca, ze procesor przelacza sie w tryb dzisietny. ale basic jest dla mnie obszarem romu c64, w ktory malo sie wgryzalem. staram sie pisac uzytki, ktore dzialaja z wylaczonym interpreterem. mam wtedy wiecej ramu :-)
kiedys mi sie zdarzylo na komarze ustawic znacznik D w procedurze przerwania i go potem nie skasowalem. oj dzialo sie dzialo ;-)

piotrv, piszesz, ze to twoj kod sprzed 12 lat. chyba twoj kod. no offence, ale kuzwa mylic cld z cli... jesli kiedykolwiek kodowales w asmie?

http://tajemnice.atari8.info/9_93/9_93_joytrans.html

^^
masz tu link do wspomnianego przeze mnie artykulu. sa tam nawet zrodla procedur transmisji!!

drac030: znam dwa dema na komodora. jedno jest fajne a drugie ma fajna muzyke.

10

jad napisał/a:

poza tym, draco. taki doswiadczony programista... pomysl... kiedy sie przelacza 6502 w tryb dziesietny...

Przecież mówię, na C-64 nie wiem, czy i kiedy się to robi, dlatego napisałem, że CLD w procedurze obsługi przerwania może nie być potrzebne. Na Atari natomiast w trybie dziesiętnym działają procedury obliczeń zmiennoprzecinkowych, dlatego systemowe handlery przerwań zaczynają się od CLD.

KMK
? HEX$(6670358)

11

jad:   The Decimal flag controls how the 6502 adds and subtracts. If set, arithmetic is carried out in packed binary coded decimal. This flag is unchanged by interrupts and is unknown on power-up. The implication is that a CLD should be included in boot or interrupt coding.

I "do tego pije". A co do CLI to nie rozumiem po co o tym wspomniałeś. W każdym razie na mój gust to to z przerwaniami o których wspominałeś nie ma nic wspólnego (poza tym, że je blokuje).

Co do joytrans, to nie interesuje mnie interfejs, który wymaga softu na C64. Dlatego właśnie pisze, że jeśli to jest na C64 to bez sensu (niepotrzebne).

I'm not so bad, once you get to know me.

12

Wiesz, ja myślę, że jad świetnie wie, do czego jest flaga D.

Poza tym CLI nie blokuje przerwań, tylko je odblokowuje.

Poza tym zastanów się trochę nad tym, co piszesz: gdzie niby jest powiedziane, że ten kod ma cokolwiek wspólnego z transmisją przez joysticki? Znalazłeś kawałek listingu w asemblerze i przyjąłeś, że to jest na Atari i służy do transmitowania danych. No więc, w pierwszym przypadku się mylisz, to jest kod na C-64; ponieważ jad stwierdził, że to wygląda jak obsługa przerwania rastra (którego odpowiednikiem w Atari jest DLI), więc *zapewne* - jak również napisał jad - kod ten z żadną transmisją nie ma nic wspólnego.

KMK
? HEX$(6670358)

13

drac030: Co do CLI to źle mnie zrozumiałeś, albo źle się wyraziłem.

A co do reszty - jedno jest pewne - w Internecie podane adresy na pewno występują w temacie obsługi IRQ - oczywiście na C64. I jeśli to się zwie "przerwania rastra" na C64 - to OK, niech tak będzie.

W sumie temat się skończył na drugim poście, więc dzięki za uwagę i skończmy ten temat :)

I'm not so bad, once you get to know me.

14

jad napisał/a:

kiedy sie przelacza 6502 w tryb dziesietny...

w C64 nie ma 6502 :P o ile pamiętam tylko jakiś zamiennik bodajże 6510 ?
A może to w stacji commodorowskiej było ? Za dawno to było, żebym pamiętał,
zwłaszcza, że z C64 to dużo mniej się bawiłem niż z Atari, ale wydaje mi się
że tam cuś inszego było w bebechach.

jad napisał/a:

ja widzialem tylko dwie procedury: jedna mnozyla liczbe 16-bitowa przez liczbe 8-bitowa, druga sluzyla do konwersji wartosci bajtu na jego hexadecymalny odpowiednik jako tekst. obie nie wykorzystywane przez kernel. moze w interpreterze bejzika sa takie miejsca,

Nie wiem jak w C64, ale w Atarce to BASIC wykorzystuje tryb DCB non stop praktycznie.

jad napisał/a:

kiedys mi sie zdarzylo na komarze ustawic znacznik D w procedurze przerwania i go potem nie skasowalem. oj dzialo sie dzialo ;-)

Heh, chyba, że w samym przerwaniu, albo nie wracałeś przez RTI - inaczej nie widzę,
jak mogłoby się cokolwiek dziać po powrocie :).

jad napisał/a:

9_93_joytrans.html

uuuu, późnawo -  to ja z kumplem już chyba
w jakimś 89-90 roku spaliłem porty Comciowi ;), bo ta franca miała zero zabezpieczeń
na portach i głownie pierwsze co się tam paliło to porty. Ale kabelek i transmisja
ładnie działały dopóki przy ntym z kolei przepięciu kabelków (na żywca oczywiście,
bo kto by tam wyłączał :P) nie poszedł port w C64 i zabawa się skończyła, jako
że to na wczasach było i cięzko było w miejscowej melinie zamiast picia
dostać lutownicę :D .

---==<<Sc0rpi0>>==---

15 Ostatnio edytowany przez piotrv (2005-12-18 11:06:51)

(Pisze tylko po to, żeby czytających nie wprowadzano w błąd, jak powiedziałem, dla mnie osobiście temat zamknięty)

Sc0rpi0 napisał/a:

w C64 nie ma 6502 :P o ile pamiętam tylko jakiś zamiennik bodajże 6510 ?

Tak, to fakt, z którym trudno się spierać. W C64 jest 6510. Ale to tutaj nie ma znaczenia.

Sc0rpi0 napisał/a:

Nie wiem jak w C64, ale w Atarce to BASIC wykorzystuje tryb DCB non stop praktycznie.

Jesli chodzi o SED, to jest w Atari Basic słownie "raz".
W systemie (Atari OS) występuje tylko w pakiecie matematycznym - jak to już wspomniał drac030.

Wniosek: jeśli w BASICu cokolwiek liczysz (dzielenie, konwersje int-float), to masz spore szanse na korzystanie z "DCB".

Sc0rpi0 napisał/a:
jad napisał/a:

kiedys mi sie zdarzylo na komarze ustawic znacznik D w procedurze przerwania i go potem nie skasowalem. oj dzialo sie dzialo ;-)

Heh, chyba, że w samym przerwaniu, albo nie wracałeś przez RTI - inaczej nie widzę,
jak mogłoby się cokolwiek dziać po powrocie :).

Tu niestety Sc0rpi0 ma racje. Po RTI rejestr znaczników jest odtwarzany ze stosu. Dlatego na początku IRQ robi się bez ogródek CLD.

I'm not so bad, once you get to know me.

16

piotrv napisał/a:

Dlatego na początku IRQ robi się bez ogródek CLD.

... jeśli zachodzi taka potrzeba.

KMK
? HEX$(6670358)

17 Ostatnio edytowany przez piotrv (2005-12-18 11:18:19)

drac030 napisał/a:
piotrv napisał/a:

Dlatego na początku IRQ robi się bez ogródek CLD.

... jeśli zachodzi taka potrzeba.

Mam taką dewizę, którą ładnie ujeła bohaterka Alien vs Predator (wolny cytat): lepiej się zabezpieczyć i nie mieć okazji z tego skorzystać, niż mieć potrzebę i nie mieć zabezpieczenia.

Czyli jeśli pisze coś co ma więcej niż 3 linijki, to się zabezpieczam.

I'm not so bad, once you get to know me.

18 Ostatnio edytowany przez drac030 (2005-12-18 11:30:42)

No, tak, tylko że, nawiązując do poprzednich treści wątku, na C-64 wyraźnie taka potrzeba nie zachodzi.

Poza tym na Atari we własnych handlerach IRQ też nie ma potrzeby stosowania CLD, bo ten rozkaz wykonuje system. Oczywiście, jeśli podmieniasz cąły handler systemowy, to owszem, ale wtedy też raczej zadbasz, żeby CLD nie było potrzebne.

KMK
? HEX$(6670358)

19 Ostatnio edytowany przez piotrv (2005-12-18 13:33:25)

drac030 napisał/a:

No, tak, tylko że, nawiązując do poprzednich treści wątku, na C-64 wyraźnie taka potrzeba nie zachodzi.

Poza tym na Atari we własnych handlerach IRQ też nie ma potrzeby stosowania CLD, bo ten rozkaz wykonuje system. Oczywiście, jeśli podmieniasz cąły handler systemowy, to owszem, ale wtedy też raczej zadbasz, żeby CLD nie było potrzebne.

No chyba pierwszy raz się z tobą zgodzę w 100% :) Właśnie to można było jeszcze dodać.

Dokładnie tak jest w Atari - CLD + skok do wektora:

        ; ********************************************
        ; **                                        **
        ; **  6502 Interrupt Request (IRQ) handler  **
        ; **                                        **
        ; ********************************************

IRQ_Handler:    cld            ; clear decimal flag
        jmp    (VIMIRQ)    ; engage immediate IRQ handler

W C64 nic takiego nie widzę, dodatkowo w Internecie ludzie piszą, że na C64 albo trzeba było robić swoją obsługę IRQ (poprzez wektor) albo blokować przerwania w trakcie używania BCD (oczywiście nie działa z NMI), bo w standardowej obsłudze IRQ - $FF48/$EA31 rozkazu CLD nie ma.

I'm not so bad, once you get to know me.

20

piotrv napisał/a:

blokować przerwania w trakcie używania BCD (oczywiście nie działa z NMI)

W C-64 nie ma NMI, z tego co mi wiadomo.

KMK
? HEX$(6670358)

21

drac030 napisał/a:
piotrv napisał/a:

blokować przerwania w trakcie używania BCD (oczywiście nie działa z NMI)

W C-64 nie ma NMI, z tego co mi wiadomo.

Nie znam się na C64 prawie w ogóle - nigdy na nim nic nie zakodowałem, ale na mój gust to by było spore marnotrastwo, gdyby w ROM tego kompa wstawiano bez powodu bloki kodu:
- $FE43..$FEC1 (główne NMI)
- $FED6..$FF2D (NMI ala RS-232)

Poza tym NMI jest na złączu carta C64...

I'm not so bad, once you get to know me.

22

Ja też się nie znam, ale pamiętam, że coś takiego o C-64 czytałem. Może źle pamiętam, wobec tego.

KMK
? HEX$(6670358)

23 Ostatnio edytowany przez jellonek (2005-12-18 22:49:15)

o ile pamietam to piotrv ma racje i glupota bylo by nie obslugiwanie mozliwego do zaistnienia na zlaczu carta przerwania...

btw. "c64 nmi" w google daje sporo wynikow, co za soba daje sporo do myslenia nie wgladajac do przytoczonych przez google kodow...

edited
polecam http://www.tkk.fi/Misc/cbm/docs/c64-rom.html
dla bardziej zainteresowanych: fe43 - 65091 - NMI Transfer Entry

jesli cos popierdolilem - wybaczcie... po wodce rozne rzeczy przychoza do glowy...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

24 Ostatnio edytowany przez drac030 (2005-12-19 02:18:46)

Wierzę, wolałbym jednak, żeby wypowiedział się ktoś kompetentny w temacie - czyli: koder działający na C-64.

BTW. tablica skoków nie robi pozytywnego wrażenia - zwłaszcza w porównaniu z atarowską, gdzie dwoma adresami - JSR JSIOINT i JSR JCIOMAIN - da się opędzić w zasadzie wszystko oprócz przerwań.

KMK
? HEX$(6670358)

25

drac030 napisał/a:

W C-64 nie ma NMI, z tego co mi wiadomo.

draco, a co przez to rozumiesz??

drac030: znam dwa dema na komodora. jedno jest fajne a drugie ma fajna muzyke.