501

(26 odpowiedzi, napisanych Programowanie - 8 bit)

drac030 napisał/a:

BH.COM jest to rezydent, który po załadowaniu się do pamięci najwyraźniej nie podnosi MEMLO

U mnie podnosił.

502

(34 odpowiedzi, napisanych Scena - 8bit)

Axel-F Husaka ? Perestroyka Liebicha? Nie widzę tam GTIA.

Sound in Stereo - dzięki!

503

(34 odpowiedzi, napisanych Scena - 8bit)

Gdzie grała jednocześnie muzyka na POKEYu oraz GTIA ? :)

Dla kompletu: LSR $d40e włącza samo VBLKI.

wieczor napisał/a:

Więc efektem INC $D01A będzie wpisanie tam $10.

Zgadza się. W związku z czym mamy do dyspozycji 8 kolorów:
Piksel 0, 1 = kolor $10
Piksel 2, 3 = kolor $30
Piksel 4, 5 = kolor $50
Piksel 6, 7 = kolor $70
Piksel 8, 9 = kolor $90
Piksel $a, $b = kolor $b0
Piksel $c, $d = kolor $d0
Piksel $e, $f = kolor $f0

506

(9 odpowiedzi, napisanych Emulacja - 8bit)

Dlaczego o tej drugiej można zapomnieć? Chyba w PC masz napęd 80-ścieżkowy, więc to kwestia oprogramowania.

Jak ja zgrywałem dyskietki WriteAtr-em, to często miałem błąd, ale stosując poślizg większość sektorów udało się odczytać po kilku próbach.

507

(116 odpowiedzi, napisanych Bałagan)

Vasco/Tristesse napisał/a:

Loader Numena może zapisywać do pliku

Tak. Jest to używane do zapisywania konfiguracji banków.

Vasco/Tristesse napisał/a:

i zmieniać nazwy plików?

Nie.

508

(116 odpowiedzi, napisanych Bałagan)

Pin napisał/a:

jak się ma brak możliwości zapisu nowego pliku w stosunku do definicji DOS?

Proste: to jest DOS bez możliwości tworzenia pliku.

W boot sectorach Numena jest taki DOS.

509

(116 odpowiedzi, napisanych Bałagan)

Candle napisał/a:

nie uzywam rzeczy z my w nazwie

mysz?

http://atarisucks.com/

511

(12 odpowiedzi, napisanych Konsole)

Zależy od softu. Kiedyś używałem APE z SIO2PC bez COMMAND i działało.

512

(12 odpowiedzi, napisanych Konsole)

ZTCP dwa bity CONSOL są tam używane do wyboru joysticka skanowanego przez POKEY. Nie pamiętam, co z pozostałymi dwoma bitami.

513

(12 odpowiedzi, napisanych Konsole)

Mnie bardziej ciekawi, kto rozbudował 5200 o złącze SIO oraz PIA, żeby sterować linią COMMAND.

514

(46 odpowiedzi, napisanych Programowanie - 8 bit)

Ja teoretyzuję tak:

    org    {nop}<<8    ; albo inaczej
nmi
    jsr    handle_nmi
    sta    $28c
    pla
    pha
    and    #$10
    beq    no_brk
    lda    $28c
    jmp    ($206)
no_brk
    lda    $28c
no_nmi
    rti

handle_nmi
    php
    asl    ^4f
    jcs    ($200)
    bpl    no_nmi
    cld
    pha
    txa:pha
    tya:pha
    jmp    ($222)

edit: literówka

Wydajnościowo odtwarzanie powinno dać radę. 2x 1 GHz, AOT to nawet z samplami stereo nie powinno obciążać więcej, niż 20% jednego rdzenia.

516

(46 odpowiedzi, napisanych Programowanie - 8 bit)

Jak już poprawiamy OS, możemy też zoptymalizować tę koszmarnie wolną procedurę rozpoznawania IRQ. Na pewno da się ją zrobić szybciej, niż w 250 cykli. Ale do szybkości tablicy skoków daleko.

517

(46 odpowiedzi, napisanych Programowanie - 8 bit)

xxl doczytał Altirra Hardware Reference Manual, który twierdzi, że BRK może wejść w procedurę NMI zamiast IRQ, ale B zawsze ustawi.

W związku z tym proponuję poniższe:

Procedura obsługi IRQ:
1. zawsze sprawdza (ASL NMIST) i obsługuje NMI
2. zawsze sprawdza i obsługuje BRK
3. sprawdza i obsługuje IRQ (*)

Procedura obsługi NMI:
1. zawsze sprawdza i obsługuje NMI
2. zawsze sprawdza i obsługuje BRK

Kolejność:
- najpilniejsze jest DLI (VBLKI też bym zrobił najpierw)
- potem IRQ
- na końcu BRK, bo z tym się raczej nie spieszy

(*) można rozwiązać na trzy sposoby:
a. jeśli obsłużyliśmy NMI lub BRK, to nie sprawdzamy IRQ
b. jeśli obsłużyliśmy NMI lub BRK, przed sprawdzeniem IRQ sprawdzamy znacznik I na stosie
c. zawsze sprawdzamy znacznik I, potem IRQ

grzybson napisał/a:

Za circa tydzień okaże się czy przejdzie

No i jak tam?

519

(46 odpowiedzi, napisanych Programowanie - 8 bit)

Spoko, tych dwóch rzeczy nie jestem pewien - najlepiej zrobić eksperymenty.

520

(46 odpowiedzi, napisanych Programowanie - 8 bit)

mono napisał/a:

W atariki stoi: "Wystąpienie przerwania podczas wykonywania rozkazu BRK spowoduje, że zostanie on zignorowany". Tylko co to znaczy? Czy to, że błąd leży w procedurze obsługi IRQ, czy że jest to własność processora?

Jeden błąd leży w procedurze obsługi IRQ (powinna sprawdzać BRK najpierw), a drugi w procesorze (BRK razem z NMI wykona NMI, a nie wykona IRQ).

xxl napisał/a:

czy bit B w rejestrze stanu podczas jednoczesnego wystapienia IRQ i BRK jest ustawiany tak jak podczas wystapienia IRQ czy tak jak podczas wystapienia BRK.

Trochę wcześniej odpowiedziałeś na swoje pytanie:

xxl napisał/a:

problem jest taki ze jesli wystapi przerwanie IRQ i przerwanie BRK JEDNOCZESNIE to bit B jest ustawiany nieprawidlowo

Ale skoro pytasz, to chyba nie jesteś pewien. ;) I mi się wydaje, że jest odwrotnie: tj. bit B z BRK się nie gubi, nawet jeśli procek skoczy pod NMI.

521

(46 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

> Ten SEI nic nie daje.

tego nie rozumiem, jesli cpu nie reaguje na IRQ natomiast reaguje na BRK to moze wystapic sytuacja ze IRQ zamaskuje BRK?

Chyba jesteśmy zgodni co do tego, że procka powinna sprawdzać BRK na początku.

Jeśli tego nie robi (a nie robi), to robiąc BRK skaczemy do ogólnej procedury IRQ niezależnie od znacznika I. I ta procedura sprawdza źródła przerwania IRQ i może np. zawołać przerwanie klawiatury.

522

(46 odpowiedzi, napisanych Programowanie - 8 bit)

mono napisał/a:

A nie wynika to z tego, że przerwanie jest przyjmowane po zakończeniu bieżącego cyklu rozkazowego więc mając np LDA NMIST i NMI, które wystąpi po prefetchu a przed 4 cyklem rozkazu w A dostaniemy info o NMI?

Ma to sens. Z głównego wątku zapalony status NMI jest widoczny przez dokładnie jeden cykl.

Natomiast ANTIC sygnalizuje 6502 NMI przez dokładnie 2 cykle, więc 6502 musi tę informację buforować.

523

(46 odpowiedzi, napisanych Programowanie - 8 bit)

mono napisał/a:

ASL ładne, ale to i tak nie załatwia całkowicie sprawy - trzeba by poprawić w ROMie procedurę NMI, bo tam nie mamy już takiego fajnego wektora VIMNMI (z NMIVEC możemy wszystko). Inaczej problem będzie z pierwszym IRQ wykonywanym po NMI.

ASL rozwiązuje problem: IRQ i NMI występują kolejno i obsługują to samo NMI. Trzeba dodać STA NMIRES w DLI oraz sprawdzenie b6 NMIST w VBLKI - czy na pewno mamy obsługiwać VBLKI, czy może IRQ już się tym zajmuje - czyli inne punkty wejścia do VBLKI z NMI, niż IRQ. Da się to zrobić bez wymiany ROMu.

Zakładam, że w obsłudze NMI nie robimy BRK, przynajmniej nie dopóki nie zrobimy STA NMIRES. ;)

xxl napisał/a:

a takie cos zalatwi sprawe?
SEI
BRK
.byte cokolwiek
CLI
? (pod warunkiem ze wlasna procka IRQ bedzie sprawdzac B wczesniej)

Ten SEI nic nie daje. Natomiast procka IRQ powinna sprawdzać BRK najpierw, a sprawdza na końcu.

Jeszcze trzeba obsłużyć BRK skaczące pod wektor NMI. W NMI trzeba obsłużyć kolejno oba te przerwania.

524

(46 odpowiedzi, napisanych Programowanie - 8 bit)

@mono: zobacz "Edit 2" z posta 16.

mono napisał/a:

CLD sobie trzeba dodać przed obsługą IRQ, bo SIO liczy np. sumę kontrolną.

Rozwijając wypowiedź: przerwanie transmisji SIO aktualizuje sumę kontrolną używając ADC, więc D=1 robi kuku. Z drugiej strony, czy ktoś robi SED w czasie transmisji SIO?

Nie było mowy o tym, gdzie wpinamy poprawione IRQ. Być może pod wektor systemowy, więc OS zrobił już za nas CLD.
Nie pamiętam natomiast, gdzie powinno być CLD dla VBLKI.

Co do BRK, to nie jest czasem tak, że jak wykona się razem z IRQ lub NMI, to jednak znacznik B na stosie jest ustawiony i trzeba go sprawdzić na początku w przypadku IRQ oraz sprawdzić w ogóle w przypadku NMI.

mono napisał/a:

Jump if MInus: bmi albo jeśli za daleko to spl + jmp; analogicznie Jump if V Clear.

Rozwijając wypowiedź: to pseudorozkazy xasm (ale widziałem je też w innym asemblerze, chyba ca65), np.

 jmi target

to

 bpl skip
 jmp target
skip

Edit:

xxl napisał/a:

czy moze wystapic problem ze przy ustawionym I po rozkazie BRK procedura przejdzie do wykonywania jakiegos zasygnalizowanego przerwania IRQ?

Tak jest.

Nie używam BRK w produkcyjnym kodzie. :)

525

(46 odpowiedzi, napisanych Programowanie - 8 bit)

Dla pewności przerobiłbym jeszcze procedurę NMI, bo ZTCP w XL/XE działa ona na zasadzie "jeśli nie DLI, to VBLKI". Natomiast istnieje możliwość odczytania NMIST z zapalonym statusem przerwania, zanim odpali się obsługa NMI. Edit: i tu widzę problem: co zrobić, żeby to samo NMI nie obsłużyło się dwa razy: raz na IRQ, drugi raz na NMI.

Edit 2:

  asl NMIST ; strobes NMIRES
  jcs (VDLST)
  jpl (VIMIRQ)

W 400/800 klawisz Reset jest podpięty pod NMI (bit 5 w NMIST, ZTCP NMIEN na niego nie działa).