Patent nr 1 i zarazem propozycja do dyskusji, gdyż wpadłem na to dopiero parę dni temu (lepiej późno niż wcale).

Mianowicie istnieje pewien problem z szybkim łatwym i przyjemnym wykryciem, że aktywny w danej chwili OS zawiera procedury obsługi przerwań trybu natywnego. Gdyby natomiast taki sposób istniał, wtedy każdy program aplikacyjny mógłby w takowy tryb przełączyć CPU szybko, łatwo, przyjemnie, bez rzeźbienia i obawy, że nastąpi zwis.

Takich OS-ów może być milion, można napisać procedurę, która je oddzielnie rozpoznaje, ale żeby każdy ewentualnie nowy wymagał jej poprawienia, to kiepska perspektywa. Potrzebna jest uniwersalna i w miarę prosta metoda szybkiego sprawdzenia, czy ta możliwość istnieje. Kontrolowanie wszystkich wektorów po kolei na okoliczność, czy ich wartości mieszczą się się w zakresie $C000-$CFFF oraz $E400-$FFDF, mimo że może działać, dobre nie jest.

Zatem wymyśliłem coś takiego: ponieważ WDC definiuje obszar wektorów przerwań CPU jako $FFE0-$FFFF, zatem, gdyby bezpśrednio przedtem, tj. pod $FFDD-$FFDF, znajdowała się konkretna wartość magiczna, której odczytanie walidowałoby wektory trybu natywnego $FFE0-$FFEF, wtedy mielibyśmy uniwersalny i prosty sposób rozpoznania, czy w OS-ie istnieje wsparcie dla trybu natywnego. Wystarczyłoby odczytać 3 bajty ROM spod $FFDD, $FFDE, $FFDF, porównać z wzorcem, i z prawdopodobieństwem 1/16777216 zyskać pewność, że można się spokojnie przełączyć w tryb natywny bez dodatkowych zmartwień, albo że nie.

Jako wartość magiczną proponuję:

$00FFDD: $65
$00FFDE; $C8
$00FFDF: $16

KMK
? HEX$(6670358)

2

Jeśli już takie coś jest konieczne, i tych osów może być milion, to ja bym proponował nakazać tym milionom zaimplementowanie funkcji get_os_features który by zwracał np wskażnik na rekord z bitmapą zaimplementwanych ficzerów.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

3 Ostatnio edytowany przez pajero (2016-04-17 11:12:02)

$FFDD-$FFDF

QMEG 4.04   $00
QMEG 5.01   $EA


a myślałem, że vectors są od $FFE4 ?

Tak, czy siak, raczej uniwersalna procka testująca będzie lepsza.



jakieś tam dane ... http://sbc.bcstechnology.net/65c816interrupts.html

4

@willy: też początkowo wyszedłem z tego założenia, i jest to jedyne rozwiązanie w sytuacji, kiedy istnieje ochrona pamięci, ale póki ona efektywnie nie istnieje i nie ma widoków na to, że zaistnieje kiedykolwiek w takiej postaci, może lepiej jest procedurę uprościć.

@pajero: to prawda, ale ten dokument http://www.westerndesigncenter.com/wdc/ … 5c816s.pdf na stronie 32 mówi, że obszar wektorów zaczyna się na adresie $00FFE0. Przy czym dwa pierwsze wektory są zarezerwowane, więc pierwszy rzeczywisty istotnie znajduje się pod $00FFE4.

KMK
? HEX$(6670358)

5

Patrząc na romy OSów (np. MageXE.rom; atari os v4 87.07.05.rom; Atari OS XE.rom) , ciekawe dlaczego powtarzają się adresy w notacji Hi-Lo

$FFD8 $C0,$00
$FFDA $D0,$00
$FFDC $50,$00
$FFDE $58,$00
$FFE0 $D8,$00
$FFE2 $E0,$00

?
Coś mi uleciało z mojego ROM?

6

To wygląda na adresy bloków dla procedury, która oblicza sumę kontrolną. Raczej są w notacji lo/hi, pewnie pod $FFD7 będzie $02.

KMK
? HEX$(6670358)

7 Ostatnio edytowany przez drac030 (2017-07-20 17:52:59)

EDIT: tebe zwrócił mi uwagę, że zamieszczona tu wersja nie działa (wielkie dzięki). Po powrocie do domu porównałem listing z oryginałem i, oczywiście, wyszło na to, że zrobiłem błąd przy przepisywaniu listingu.

Poprawiona wersja tutaj: http://atariki.krap.pl/index.php/Policz … _adresowej

KMK
? HEX$(6670358)

8 Ostatnio edytowany przez tebe (2017-07-16 19:10:44)

co oznacza ?

lda    !$0000

:)

lda.b $00 = lda <$00
lda.w $00 = lda !$00
lda.l $00 = lda >$00

dzięki Tebe :)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

9

Tak, to jest składnia z datashitu od 65C816, używa jej np. MAE.

KMK
? HEX$(6670358)

10

Następny patent: http://atariki.krap.pl/index.php/Oblicz … i_liniowej

KMK
? HEX$(6670358)

11

Dorzuciłem ogólny schemat pamięci Rapidusa i Antonii: http://atariki.krap.pl/index.php/Mapa_pami%C4%99ci

KMK
? HEX$(6670358)