BH.COM jest to rezydent, który po załadowaniu się do pamięci najwyraźniej nie podnosi MEMLO
U mnie podnosił.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
TURGEN 9.3.0 Kolejna wersja multiplatformowego narzędzia do zarządzania obrazami taśm.
SV 2024 WE - program imprezy Już za tydzień odbędzie się zimowa edycja Silly Venture
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
atari.area forum » Posty przez Fox
BH.COM jest to rezydent, który po załadowaniu się do pamięci najwyraźniej nie podnosi MEMLO
U mnie podnosił.
Axel-F Husaka ? Perestroyka Liebicha? Nie widzę tam GTIA.
Sound in Stereo - dzięki!
Gdzie grała jednocześnie muzyka na POKEYu oraz GTIA ? :)
Dla kompletu: LSR $d40e włącza samo VBLKI.
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
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.
Loader Numena może zapisywać do pliku
Tak. Jest to używane do zapisywania konfiguracji banków.
i zmieniać nazwy plików?
Nie.
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.
nie uzywam rzeczy z my w nazwie
mysz?
Zależy od softu. Kiedyś używałem APE z SIO2PC bez COMMAND i działało.
ZTCP dwa bity CONSOL są tam używane do wyboru joysticka skanowanego przez POKEY. Nie pamiętam, co z pozostałymi dwoma bitami.
Mnie bardziej ciekawi, kto rozbudował 5200 o złącze SIO oraz PIA, żeby sterować linią COMMAND.
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.
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.
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
Za circa tydzień okaże się czy przejdzie
No i jak tam?
Spoko, tych dwóch rzeczy nie jestem pewien - najlepiej zrobić eksperymenty.
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).
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:
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.
> 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.
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ć.
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. ;)
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.
@mono: zobacz "Edit 2" z posta 16.
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.
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:
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. :)
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).
atari.area forum » Posty przez Fox
Wygenerowano w 0.061 sekund, wykonano 18 zapytań