51

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

Fajnie by było gdyby działało :P - niestety albo wyrżneli albo już autor usunął, bo
mnie się ta stronka ekologiczna (kneko) to jeszcze zgłasza, ale tego katalogu
"/pliki/" to juz nie ma.

Nie zgodzę się z częścią dotyczącą "przestarzałej" wiedzy - co to niby gość
umiera na te 5 lat i konserwuje tylko to co go uczą ? Nie jest w stanie śledzić
zmian i np. na trzecim roku się dowiedzieć o jakichś nowych rozwiązaniach
w temacie, który np. był na roku pierwszym ? To biedak strasznie musi być
przytłoczony nauką :). A całkiem na serio to takie "przestarzałe" rzeczy
bardzo ułatwiają dalsze pojęcie tych nowszych, bo już coś wie w temacie,
więc nigdy za dużo :P.

53

(74 odpowiedzi, napisanych Sprzęt - 8bit)

No co ty Draco :), stare wygi piszą z prędkością karabinu maszynowego
i pewnie przekraczają 1000 znaków/sekundę :P oraz prędkość światła,
więc takie spowolnienie to udręka... :)

Nie wiem jak Atari -emu też się nie zawiesza, ale się zawiesza :). Znaczy łazi w kółko :P.
CMP #$02 u mnie pod adresem $9314, wiec dziwię się po co to tam - zmienilem $9315
na $05 i pewnie zawisnie po 50000 ;) na razie sobie gram.

(EDIT) Dolazłem, zwisło - zmieniłem na 9 i mam już czarny pas :P - do 90000 już
nie ciągnę, bo mi się nie chce. Nie wiem o co to chodzi, ale jeżeli tam miał być jakiś
przerywnik typu łamanie desek czy cuś to ma to jakis sens - inaczej nie za bardzo.
Tyle, że (na emu w każdym razie) nie działa :P.

W archiwum comp.sys.atari.8bit jeszcze znalazlem post
jednego grupowicza (kawałek zapodam):

"[...] there is most definitely a bug in the 6502 chip that causes the
BRK instruction to abort if another interrupt source is received at the
same time.  The interrupt will get processed, but the BRK will never pass
control through the IRQ vector, and will simply return to PC+2 as if the
BRK never happened.  I've proved this, and the bug has been described in
documentation for the 65C02 and 65816 processors, which don't have this
problem.
Though more obscure, I've also proved that the 6502 can skip both NMI's
and other IRQ's in a similar manner.  I have not seen this bug documented,
however it is also fixed in the design of the 65816 chip."

Drugi akapit jest bardziej istotny, bo: stratę IRQ w zasadzie można
olać, jako że i tak za chwilę znów zostanie ponowione - jest zależne od stanu,
a nie od zbocza, a POKEY będzie trzymał dopóki nie zresetuje mu się
odp. bitu. BRK też da się naprawić sprawdzając B we flagach na stosie
(a przynajmniej przy VBI bo przy DLI to nieopłacalne ze względu na czas),
albo mozna olać, bo za często ta instrukcja nie jest używana :P.
Natomiast strata NMI to juz przypadek dużo poważniejszy, co prawda
normalnie w Atarce dużo nie narobi, bo DLI normalnie nie wystepuja - najwyżej
timery beda zmniejszone pozniej o 1/50s czy tam cienie raz nie zostana przepisane,
ale mimo wszystko paprze to ogólny obraz takiego ładnego procka jak 6502.
Na tym bym zakończył rozpisywanie się na ten temat (przynajmniej moje) - w zasadzie
przeniósłbym to gdzieś indziej gdybym mógł :), ale że nie mogę, a ikplus stwierdzil,
że ten problem został juz rozwiązany to żeby nie było całkiem offtopicznie
pytanko do wyżej wymienionego odnośnie problemu nierozwiązanego:

Czy wiesz już dlaczego gierka się wiesza (przynajmniej w emu)
po przekroczeniu tych 20000 punktów ? Bo chętnie bym coś więcej pograł
w wolnym czasie :), a takie rąbanie do 20k i zwis to się trochę nudzi...

Tak z ciekawosci zaladowalem pod emu i wydaje mi sie ze po spelnieniu warunkow
1. przekroczenie 20000 2. punkty za uderzenia ktorejkolwiek z postaci
osiagna 6 ( ****** )  - to wtedy sie zawiesza - może miał być tam
jaki przerywnik, który pod emu nie działa ? Zielony pas raczej nic do tego nie ma
bo sprawdzilem na zasadzie osiagniecia go przy jakichs 17-18k punktow
i po osiagnieciu przez kogos pelnej szostki za uderzenia chodzi nadal
az do przekroczenia 20000 punktow. Wtedy zawiesza sie jezeli którakolwiek
postać dociagnie do ( ****** ) - niekoniecznie musi to byc gracz.

57

(89 odpowiedzi, napisanych Programowanie - 8 bit)

OK, znalazlem kwilke, aby pobieżnie przetestować i chyba działa jak w założeniach.

v8      dta b($00)
v16     dta a($0000)
res24   dta b($00),b($00),b($00)

mus8s16 lda #$80
        eor v8
        sta nfix0+1
        sta nfix2+1
        sta nfix4+1
        sta nfix6+1
        eor #$ff
        sta nfix1+1
        sta nfix3+1
        sta nfix5+1
        sta nfix7+1
        sec
        lda #$80
        eor v16+1
        tay
        ldx v16
nfix0   lda ustbl0,x
nfix1   sbc ustbl1,x
        sta res24
nfix2   lda ustbh0,x
nfix3   sbc ustbh1,x
nfix6   ldx sutbh0,y
        bcs *+4
        sec
        dex
nfix4   sbc sutbl0,y
        bcs *+4
        sec
        dex
nfix5   sbc sstbl1,y
        sta res24+1
        txa
nfix7   sbc sstbh1,y
        sta res24+2
        rts

To pojedyncze mnożenie - oczywiście dla wielokrotnego adresowanie ,ndx
jeszcze pare cykli (5+ -> 4+) zaoszczędzi na jedno mnożenie.

Fox napisał/a:

Coś nie bardzo wierzę w te rewelacje, więc nadmieniam tylko, że:
- obsługa przerwań przez 6502 nie wykonuje się w dowolnym momencie, tylko po skończonej instrukcji lub po skończonym odebraniu przerwania.

Toż doskonale o tym wiem - tak jest stwierdzone oficjalnie ze procesor kończy
bieżącą instrukcję. Tylko w takim razie wytlumacz na przykład czemu BRK się
nie wykonuje do końca jak przyjdzie NMI w tym czasie tylko skacze pod wektor NMI
i jednocześnie ustawia flagą B ? Skoro jest taki bug to może warto sprawdzić i inne ?
To nie moje rewelacje po prostu kiedyś czytałem o tym i też nie wiem czy to prawda.
Z tekstu który wtedy na sieci znalazłem wynikało ze właśnie może się zdarzyć
na początku obsługi przerwania NMI ze IRQ je "wywlaszczy" choc niby nie powinno.

Fox napisał/a:

- ustawiony znacznik I nie powoduje zgubienia przerwania, a tylko odwleczenie go do czasu skasowania I lub wyłączenia źródła przerwania (POKEY)

Nigdy nic podobnego nie twierdzilem :) mowilem o mozliwosci zgubienia NMI
przez IRQ, ktore przyszlo zaraz po starcie obslugi tego pierwszego. A NMI
że się tłumaczy Non Maskable Interrupt to też wiadomo.

Fox napisał/a:
tebe napisał/a:

widocznie Atari nie umozliwia przerwanie przerwania IRQ przez przerwanie NMI, najpierw aktualnie wykonywany program przerwania musi sie zakonczyc

Tebe, nie wierzę, że to napisałeś.

Może po prostu błąd logiczny przy sprawdzaniu - zrobił pewnie jakieś JMP * :) i procek
kazde przerwanie tak wykonywal to sie wydawalo, że następnych nie wywoluje. Albo żartowal.

W ogole dziwnie to odbieram - sam sie pytałeś "(...) Błąd ten polega na gubieniu niektórych zgłoszeń przerwań NMI gdy pojawiaja sie jednocześnie zgłoszenia IRQ." - ktokolwiek słyszał, ktokolwiek wie?", a gdy mowie co SLYSZALEM czy też CZYTALEM na sieci to sie rzucacie
jakbym to ja zaczal ten temat w ogóle wałkować. Podałem TEORIĘ, że MOŻE w czasie
obslugiwania NMI w trakcie wstawiania na stos flag i adresu powrotu procek nie ustawil
jeszcze I=1 i jezeli w tym krótkim okresie czasu przylezie żądanie IRQ to właśnie coś
takiego sie może stać. Może się wam wydawać idiotyczna, bo oficjalnie jest tak
że niby coś takiego nie ma prawa bytu, ale bugi się zdarzały i zdarzać mogą. Nastepnym
razem zamiast pytac czy ktos slyszal to google skoro chcesz poglosek a jednoczesnie
nie chcesz...  Np:

(znalesc dot. 6502)
czy tez tutaj lub tu

Jakoś nie mogę znaleźć tego artykułu który wtedy czytałem, a szkoda, bo tam było
trochę więcej napisane ogólnie na temat przerwań i związanych z tym bugów w 6502.

epi: HINT2: zeby zrozumiec trzeba czytac ze zrozumieniem :P
a żeby jeszcze bardziej zamotać chodziło o:
przerywanie procedury obsługi przerwania NMI
w poczatkowej fazie przez żądanie przerwania IRQ :) :P :)

Tak więc nie nęć przynęty przynętą gdy
przynęta przynętę przynentą nęci...  :P

Fox napisał/a:

Zgłoszenie IRQ przez POKEYa trwa dopóki się go nie wyczyści w IRQEN, więc nie widzę, w jaki sposób mogłoby być gubione.

No ja slyszalem jak to by sie niby mialo odbywac, ale tez slyszalem tylko o odwrotnej sytuacji
czyli podczas poczatku obslugi przerwania IRQ wcina sie NMI i podobno wektor jest gubiony
(tzn. wykonuje sie przerwanie to co przyjal ale przez wektor NMI nie jest zapamietywane ze bylo tez IRQ). Podobnie mialo niby byc z NMI jak przyjdzie IRQ w trakcie piewszych o ile pamietam dobrze 4 cykli czy cus obslugi NMI. Natomiast nie wiem jak to mialo by wygladac bo chyba
zaczyna sie od ustawienia flagi I ? To nie wiem jak by wtedy mialo byc wywlolane IRQ skoro
jest blokada na maskowalne ? ...

(EDIT) Ano glupoty gadam, przeciez na stos sa wystawiane flagi BEZ ustawionego I,
wiec jednak jest jakis odstep czasowy zanim wstawi procek dane na stos
i ustawi I=1 wiec jezeli w tym czasie dojdzie zadanie IRQ to w zasadzie...
moglo by byc NMI zgubione.

61

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Napisalem jeszce jedna procke ;), ale ze:
1. po wszystkim sie jej przyjrzalem i idea wyszla prawie identyko do tej eru
(takie tam male roznice - sbc w miejscu adc, adresowanie bez (),y
plus inne wartosci w tablicach)
2. jeszcze jej nie testowalem ;) choc w teorii wyglada OK :P
3. i tak ma to byc optymalizowane pod wielokrotne mnozenie
4. len jestem

wiec na jedno wyjdzie jak ten maly dopalek do eru procki dorzuce
dla wielkrotnego mnozenia - zamiast ladowac do Y 00
(zakladam ze to jest dey czy nie ma juz jest ustawione :P )
potem tya i i tak sumowac z tah,x to robimy

    lda (zch),y
    adc (zdh),y
iah    ldy tah,x
    dey (albo nop)
    tya
    clc
ibh    adc tbh,x

do pojedynczego w tej wersji niestety nie moge tego wsadzic bo przy
adc to czy bylo ujemne sygnalizuje flaga N ale nie C jak przy sbc
wiec ldy tah,x by ja tam "ubilo". No, ale nawet jeden cykl mniej dla
jednokrotnego to zawsze cos :), a dla wielokrotnego jak sie wszedzie
zrobi adresowanie Q,y w miejsce (Z),Y to tez pospada - niewiele
bo niewiele, ale zawsze.

62

(19 odpowiedzi, napisanych Emulacja - 8bit)

Stefan napisał/a:

Więc, przy okazji mówienia o mnie w trzeciej osobie

W trzeciej bo nie mam inaczej jak gdy komuś innemu odpowiadam :)

Stefan napisał/a:

"egzek" to dla mnie plik z prawani do wykonania i niekoniecznie binarny

Hm na atarce exekow jest mniej ;), raczej sa binarne a o prawach to z reguly ciezko mowic :P
No chociaz program w BASICu tez mozna jako exec traktowac ;)

epi napisał/a:

Hehe. Z mojego technikum (łączność) wychodzili księża, lekarze, aktorzy...

Hm czy to nie to technikum co to rzut beretem w prawo od wyjścia jest klasztor ?
Może dlatego ci księża :) ? No chyba, że to nie o to technikum biega...

64

(19 odpowiedzi, napisanych Emulacja - 8bit)

Jak zapytalem to faktycznie powiedzial :), a w drugim poscie tylko wyjasnialem
dlaczego sie o to pytalem. Wczesniej pisal tylko ze skompilowal emu :) - wiec
mogl ladowac spod wszystkiego. Ja np. przewaznie jednak trzymam atry i
laduje standardowo jak z dyskietki, a dosc malo mam xexow osobnych
do traktowania "load executablem". Może mam skrzywienie jakies :).

65

(19 odpowiedzi, napisanych Emulacja - 8bit)

Neee :) chodzilo mi tylko o sposob ladowania pliku, żeby sprawdzic ewentualnie
czy może to coś psuć. W zasadzie spod DOS powinno się i tak wyłożyć :P,
ale są różne inicjalizery (Microdosy, Speedy i inne takie). W emulatorze
jeszcze można po prostu z funkcji ladowania exeka skorzystać.
Dlatego pytalem jak to uruchamiasz. No, ale skoro to złudzenie słuchowe to OK :).

66

(19 odpowiedzi, napisanych Emulacja - 8bit)

Hm a cos blizej ? Calkiem zle gra (totalna porazka) czy jest popsute czy jeszcze cos innego ?
Z Dartsow tam jest pare muzyczek - pod ktorym klawiszem konkretnie jest zle ?
Niestety u mnie gra wszystko w porzadku wiec nie wiem co to moze byc :).
No i jak to ladujesz ? Inicjalizer ? Spod DOSa ? Z emu load executable ?

67

(19 odpowiedzi, napisanych Emulacja - 8bit)

Z tym, że może ktoś by przerzucił tą wersje muada gdzieś na jakieś
bardziej "atarowskie" miejsce, bo ja nie wiem czy mi np. za 4 miesiace
nie wpadnie do glowy wyczyscic konta :) czy cuś. Obecna lokalizacja
jest na servku u mojego providera, więc jemu tez może coś głupiego
do łba strzelić.

68

(89 odpowiedzi, napisanych Programowanie - 8 bit)

eru napisał/a:

aaaa.... no tak. chytre :D

Chytre, ale:
- błędne - C MUSI być wyczyszczony przed następnym ADC, a tu tego nie gwarantujesz

akurat tak jest błedne :), ale mozna inna sztuczke zrobic tyle ze troche
durną jeżeli robić ją tylko po to zeby oszczedzic tam pare cykli :) a dokladniej 1
komórka na zerowej $a0 musi być = FF i nie bit a ldy :)
(mozna tą komorkę ustawic gdzies w init :P)

clc
bpl skok
opcode { ldy q}
skok ldy #00

8 lub 7 cykli :)

69

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Tam jest tylko opcode BIT Q po mojemu ;) wiec nie zawsze robi to ldy #0.
Czasem robi, a czasem traktuje ldy #$00 jako operand BIT Q.
(EDIT) Byłbym zapomniał :), aczkolwiek tutaj nie ma to znaczenia bo zaraz
potem jest ADC, ale  to jest to tez niezly hint jak znacznikiem V zapamietac
spelnienie jakiegos warunku na pozniej - pod $00a0 (chyba taki jest opcode ldy #)
ustawic 6 bit - w druga strone nie ma problema, bo clv jest a sev nie ma.

70

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Udało mi się udało dopalic to trochę, ale niestety nie pojdzie jako makro.
Jest to ok  jeżeli ktos nie chce miec zbyt duzego kodu (bo bydlaste macra troche zjadaja).
Wtedy moze cos takiego sobie użyć, ale niestety sekwencja jsr w kodzie plus
rts w procce i 11 cykli w plecy co zupelnie chrzani zysk. Tak więc nadaje się tylko jeżeli
ktoś miejsce też ceni :( oprocz prędkości. Ale jeszcze pomyśle choć wątpię, żeby się coś
jeszcze dało wycisnać - chociaż jest sposób na unikniecie takiej dużej straty jeżeli
robi się serie mnożeń i robi wyliczenia kolejnych adresów do mnożenia i składowania
w procce. BTW Pr0be te rewelacje o tym kodzie na C= co to ma duzo poniżej 100 cykli
(nie pamietam o ilu tam mowiles ale chyba o 80ciu czy coś) to raczej jakas ściema
niesamowita, a przynajmniej nie w tej formie :) co tu mamy - samo zaladowanie 3 wartosci
wejsciowych i zapisanie 3 wyjsciowych to 24 cykle i zostaje raptem +-56 na wykonanie.
No chyba zeby uzyc tablic troooszeczke większych (pewnie z 64k, co oczywiście mi się
nie podoba bo na "standardowym" Atari nie pojdzie :P - heheh znow zaczynam, wiem)
to dałoby się szybciej. No, ale na zwyklym C= tez nie ma 64k na tablice ot tak...

71

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Żeby mnie dely nie zjadl to poodpowiadam w jednym.

Jell:

1. Jell ja jestem sssssspokojny :P - a tak na serio to w ktorym miejscu ja sie denerwowalem  ?
Może odczytałeś emocje tam gdzie ich nie bylo ? Eru tez wywnioskowal ze krzyczysz,
choc ja takiego wniosku przyznam nie wysnułem. Jeżeli uważasz Fox'a za swojego guru
to rozumiem, że ktoś próbujący przynajmniej zrobić coś jeszcze bardziej wypaśnie
(w tym akurat przypadku szybciej) może cię denerwować, ale nie tak w błoto od razu :),
bo niewiele jak sądzę wiesz o mnie czy moich umiejętnościach kodowania, więc porównania
jakieś że co to ja nie jestem za krasnal :P przy Foxie czy Eru są raczej bez sensu.

2. Hackorskiej ksywki nie mam :) - taką zawsze miałem - jako, że za dużo było wszelkiej
maści Scorpiów, Scorpionów czy Skorpionów to zrobiłem sobie X lat temu wymyśliłem Sc0rpi0
i mam święty spokój - takich nie ma, choć nie wiem dlaczego :). Może cię drażnić - trudno.

Eru:

1. O programowaniu wiem sporo, bo się tym zajmuje choć co prawda teraz w 6502 za wiele
nie robię :) jak łatwo się domyślić. Pierwsze 6502'owe kroki stawialem okolo 15 lat temu :),
a z wiekiem człowiek się (przeważnie) bardziej rozwija niż zwija :P, więc myślę, że
mam jakieś szanse w tego typu zabawach :P.

2. Co do umieszczania kodu to owszem byłby to niezły pomysł. Jak ktoś będzie potrzebował
jakiejkolwiek procki do czegoś to będzie mógł sięgnąć sobie do gotowców.

(EDIT)
PS. A jeżeli chodzi o emotikony (zwłaszcza usmieszki wszelkiego rodzaju) to wiem, wiem,
za dużo tego używam ale  no cóż - jakoś mi to w nawyk weszło i nie jestem się w stanie
pozbyć tej maniery.

72

(89 odpowiedzi, napisanych Programowanie - 8 bit)

jellonek napisał/a:

scorpio: z foxem probowales sie mierzyc? :D
w dziedzinie 6502 to tylko chyba eru potrafi "próbować" sie mierzyc z 0xf'em :]

pfff jellonek, zapewniam cie ze nie tylko eru moze :)- ty też byś mógł
tylko masz złe nastawienie (pesymistyczne) :P. Jak na razie bawilem sie
tylko z pr0be procedurkami mnozenia :P. Gdybyś dokładnie przeczytał to
zauważyłbyś, że próbowałem innej metody :P niz metoda ćwierćkwadratów,
co nie zmienia faktu że nie zdaje ona egzaminu :P.

73

(27 odpowiedzi, napisanych Bałagan)

Pogratulować!

A co do pierwszego slowa to bym raczej stawial na jakies starsze konsole :) np.:

-MAME...

:P

74

(89 odpowiedzi, napisanych Programowanie - 8 bit)

No nic - sprobowac warto bylo, ale jednak wersja nybblasta sie nie sprawdza :P.
Za duzo machania danymi w fazie przygotowawczej - wszystkie z tablic, a niestety
ciezko je umiescic na zerowce zeby szybciej sie dalo pobrac. Tak, że Pr0be jedyne
chyba co mozna to wrocic do wersji z kwadratami i ja dopalic :) co tez teraz bede
uskuteczniac :P. Dam znac jak cos powychodzi. Co prawda ja troche innych tablic
uzywam niz te twoje/Foxa, ale chyba wychodzi na to samo - sprawdze to.

75

(170 odpowiedzi, napisanych Bałagan)

Potoki to akurat mial i DOS 6.22 :P panie specu - marne bo marne, ale mial.
A ten protekcjonalny ton to wiesz gdzie sobie mozesz wsadzić. Jak sam mówisz
krytykować może każdy. Samego systemu nie znam moze wlasnie dlatego,
że widzialem wystarczająco wiele jego "akcji" u innych, a w zasadzie same skutki,
żeby go sobie obrzydzić i nie używać :P. A jak już się czegoś nie używa to cięzko
poznawać :P nieprawdaż ?