kategoria: Asembler
[#1] Sprawdzanie modelu procesora 680x0
Zainteresowało mnie w jaki sposób można sprawdzić model procesora 680x0 zainstalowanego w Amidze. Najpierw próbowałem deasemblować systemowe polecenie CPU, ale dałem sobie z nim spokój, bo i tak nie rozpoznaje procesora 68060, a kodu jest w nim dosyć dużo. Później przyszła kolej na bootblock gry "Wacuś the Detective". Kod w nim zawarty jest krótki i rozpoznaje każdy procesor rodziny 680x0, ale korzysta z procedur systemu, a ja chciałem otrzymać kod, jak najbardziej niezależny od platformy sprzętowej. Więc wziąłem się do roboty i... W oparciu o to, co udało mi się znaleźć w internecie, napisałem poniższą procedurę.

CPUmodel:
move.l $10,A1

;Wektor wewnętrznego wyjątku procesora nr 4 (Illegal Instruction). Zawiera on adres kodu, który ma być
;wykonany po wystąpieniu tego wyjątku. Wyjątek nr 4 wystąpi, gdy procesor natrafi na kod nieobsługiwanej
;instrukcji.

lea CPUmodel0(pc),A0
move.l A0,$10 ;zmiana adresu wektora wyjątku nr 4
move.l $2C,A2

;Wektor wewnętrznego wyjątku procesora nr 11 (Line 1111 Emulator). Zawiera on adres kodu, który ma być
;wykonany po wystąpieniu tego wyjątku. Wyjątek nr 11 wystąpi, gdy procesor natrafi na kod nieobsługiwanej
;instrukcji, rozpoczynający się słowem $Fnnn.

lea CPUmodel2(pc),A0
move.l A0,$2C ;zmiana adresu wektora wyjątku nr 11
dc.w $4AFC ;ILLEGAL - instrukcja wywołująca wyjątek nr 4 na każdym procesorze z rodziny 680x0

CPUmodel0: ;kod obsługi wyjątku nr 4

;W tym miejscu procesor pracuje w trybie "nadzorcy" (Supervisor mode) i korzysta z oddzielnego stosu
;oraz jego wskaźnika (rejestr A7=SSP). Na stosie tym znajdują się odłożone wartości rejestrów SR i PC,
;jakie miały one przed wystąpieniem wyjątku.

move.l A7,D2 ;zapamiętanie adresu wskaźnika stosu (A7=SSP)
lea CPUmodel3(pc),A0
move.l A0,$02(A7) ;modyfikacja wartości rejestru PC, odłożonego na stosie
lea CPUmodel1(pc),A0
move.l A0,$10 ;zmiana adresu wektora wyjątku nr 4
moveq #$30,D1 ;procesor 68000
dc.l $4E7A1801 ;MOVEC VBR,D1 - instrukcja obsługiwana przez 68010/20/30/40/60
moveq #$31,D1 ;procesor 68010
dc.l $4E7A1002 ;MOVEC CACR,D1 - instrukcja obsługiwana przez 68020/30/40/60
moveq #$32,D1 ;procesor 68020/68030
dc.l $4E7A1004 ;MOVEC ITT0,D1 - instrukcja obsługiwana przez 68040/60
moveq #$34,D1 ;procesor 68040
dc.l $4E7A1808 ;MOVEC PCR,D1 - instrukcja obsługiwana przez 68060
moveq #$36,D1 ;procesor 68060
rte ;powrót z wyjątku

CPUmodel1: ;kod obsługi wyjątku nr 4
cmp.b #$32,D1
bne.s CPUmodel2

;rozpoznawanie procesora 68020/68030

dc.w $F02F,$6200,$FFFE

;PMOVE.W PSR,-2(A7) - instrukcja odkłada na stos (A7=SSP) wartość rejestru MMUSR (68030)
;lub ACUSR (68EC030). Na procesorze 68020 powoduje wystąpienie wyjątku nr 11.

moveq #$33,D1 ;procesor 68030
CPUmodel2: ;(kod obsługi wyjątku nr 11 dla procesora 68020)
move.l D2,A7 ;przywrócenie adresu wskaźnika stosu (A7=SSP)
rte ;powrót z wyjątku

;Po wykonaniu instrukcji RTE wartości rejestrów SR i PC, są przywracane ze stosu. Przywrócony rejestr SR
;wyłącza tryb "nadzorcy" (Supervisor mode). Przywrócony rejestr PC zawiera adres kodu, który zostanie
;wykonany po powrocie z wyjątku.

CPUmodel3:
move.l A1,$10 ;przywrócenie adresu wektora wyjątku nr 4
move.l A2,$2C ;przywrócenie adresu wektora wyjątku nr 11
lea textbuf,A0 ;adres wyjścia danych
lea CPUmodel5(pc),A1
CPUmodel4:
move.b (A1)+,(A0)+
bne.s CPUmodel4
subq.l #3,A0
move.b D1,(A0) ;wartość określająca model procesora: $30-$36 = model 68000-68060.
rts
CPUmodel5:
dc.b "680x0",0

;Rozmiar: 138 B, linii kodu: 38

Procedura działa prawidłowo tylko wtedy, gdy wartość rejestru VBR=0 (nie dotyczy to procesora 68000, który nie posiada tego rejestru). Procedurę testowałem fizycznie tylko na procesorze 68000 (mam A500 i A600), resztę procesorów sprawdzałem na emulatorze "WinUAE 2.4.1". Tylko na emulatorze "WinFellow 0.4.4 build 4" procesor 68030 jest rozpoznawany jako 68020 (moim zdaniem jest to błąd w emulacji, a właściwie brak emulacji instrukcji PMOVE.W PSR,-2(A7)).
W każdym razie procedura jest mała, szybka, niezależna od systemu i może się komuś przydać. Czekam na uwagi, komentarze, a może ktoś ma lepszy kod sprawdzający model procesora 680x0. Bardziej przejrzystą wersję kodu tej procedury, a także inne procedury w asemblerze 68000 można znaleźć na mojej stronie romanworkshop.zz.mu


Ostatnia aktualizacja: 24.05.2013 22:07:24 przez RomanWorkshop
[#2] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #1

Ponieważ nie mam dostępu do Amig ze wszystkimi modelami procesorów 680x0, prośba do chętnych. Jakby ktoś chciał mi pomóc w testowaniu tej procedury, to wystarczy ściągnąć ten program i uruchomić go pod Workbenchem przez dwuklik albo z CLI (działa pod systemem 1.3 lub nowszym). Powinien wyświetlić się tekst "CPU: 680x0" z modelem procesora, znajdującym się w naszej Amidze. Piszcie, czy program wykrywa (lub nie) dany model procesora 680x0. Z góry dzięki wszystkim za pomoc.
[#3] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #2

w winuae 2.3.3 wykrzacza się (procesor 040).
[#4] Re: Sprawdzanie modelu procesora 680x0

@simka113, post #3

Faktycznie program zawiesza się w sytuacji, gdy rejestr VBR procesora ma wartość inną niż 0 (można to sprawdzić programem CPU-Control i ewentualnie odznaczyć opcję "VBR in fast memory" ). Pracuje nad tym i niedługo to poprawie. Dzięki za odpowiedź.
[#5] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #1

moim zdaniem, cala procedura rozpoznawania procesora, czytajac od poczatku, nie jest napisana prawidlowo, a juz to:

move.l A0,$10

wola o litosc . prosta zasada. niczego nie zakladaj z gory, a tu ewidentnie zalozyles..
[#6] Re: Sprawdzanie modelu procesora 680x0

@gx, post #5

Zgadzam się z Tobą, ale jeśli rejestr VBR ma wartość 0 (moje założenie), to wektory wyjątków nr. 4 i 11 znajdują się pod stałymi adresami $0010 i $002C. Natomiast wiem, że rejestr VBR może mieć inną wartość i wtedy adresy te wynoszą: #$0010+VBR i #$002C+VBR, a moja procedura uruchomiona pod Workbenchem powoduje błąd systemu. I tu pojawia się problem, jak (albo skąd) odczytać wartość rejestru VBR, jeśli procesor pracuje w trybie użytkownika (instrukcja MOVEC działa tylko w trybie nadzorcy)? Albo, jak przełączyć procesor z trybu użytkownika do trybu nadzorcy, bez wywoływania wyjątku (bo nie znając uprzednio wartości VBR, nie znam adresu wektora danego wyjątku i nie mogę go obsłużyć)? Na tą chwilę nie potrafię tego rozwiązać, ale może ktoś jest chętny... :)
[wyróżniony] [#7] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #6

Masz tu przyklad z eab do odczytania VBR:
move.l a5,-(a7) ; store a5 on stack
moveq #0,d0 ; Put 0, which is the default offset for the vector jumps in d0
move.l $4.w,a6 ; something with exex.lib
btst #0,296+1(a6) ; Is it 68010+ machine?
beq.b .is68k ; nope, branch to end of this routine
lea .getit(pc),a5 ; If it is 68+, load address of the -getit routine in a5
jsr -30(a6) ; And enter SuperVisor mode. This does some thingemabobs, including jumping to the .getit code.
; Once where back here, d0 contains offset for vectors.

.is68k move.l (a7)+,a5 ; Restore a5 from stack
rts

.getit
movec vbr,d0 ; Vector Base register to d0
rte ; back to user state code

I za bardzo komplikujesz (byc moze nawet zle to robisz) rozpoznawanie 68030 i 68020 , z tego co wiem to 68020 ma dwie instrukcje ktorych nie ma zaden inny procesor, to jest CALLM i jeszcze jakas. Wiec te instrukcje sie sprawdza a nie MMU. Do tego lepiej jest uzyc MOVEP dla rozpoznania 68060.

Ostatnia aktualizacja: 26.05.2013 18:42:50 przez Don_Adan
[#8] Re: Sprawdzanie modelu procesora 680x0

@Don_Adan, post #7

Ciekawe, czy systemowe polecenie CPU lub ShowConfig korzysta z takich hacków ;) Moim zdaniem dość prostym rozwiązaniem byłoby uruchomić program CPU (z poziomu programu) z przekierowaniem wyjścia i sprawdzić wynik.
[#9] Re: Sprawdzanie modelu procesora 680x0

@Don_Adan, post #7

Dzięki Don_Adan za konkretną odpowiedź. Znalazłem też inny sposób na przejście do trybu nadzorcy i odczytanie VBR, niestety również zależny od systemu:

move.l 4,A6 ;adres bazowy biblioteki Exec
jsr -150(A6) ;włączenie trybu nadzorcy (funkcja SuperState)
move.l D0,BufSP ;aktualny adres wskaźnika stosu (SP)
;
;w tym miejscu procesor pracuje w trybie nadzorcy więc można odczytać rejestr VBR
MOVEC VBR,D3
;
move.l 4,A6 ;adres bazowy biblioteki Exec
move.l BufSP,D0 ;zapamiętany adres wskaźnika stosu (SP)
jsr -156(A6) ;wyłączenie trybu nadzorcy (funkcja UserState)
;
BufSP: dc.l 0

Jestem skomplikowany, ale nie na tyle żeby wiedzieć jak działają instrukcje CALLM i RTM procesora 68020, nawet po lekturze PRM, ale mniejsza z tym... Myślę, że sposób rozróżniania 68020 i 68030 z użyciem instrukcji PMOVE jest dobry, bo... działa na WinUAE, ale najlepiej gdyby to ktoś sprawdził na "żywym" sprzęcie. Co do instrukcji MOVEP, to mógłbym jej użyć gdybym chciał rozróżnić modele 68040 i 68060. W mojej procedurze sprawdzam wszystkie procesory w pewnej kolejności: od modelu 68000 do 68060, a instrukcja testująca dany model działa na każdym nowszym. Wbrew pozorom upraszcza to, trochę skomplikowany kod :)
[#10] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #6

Najprosciej gdyby kazdy model procesora mial swoje stale ID zawsze dostepne w jakims stalym miejscu, wtedy mialbys kod calkowicie niezalezny od platformy sprzetowej itd... pomarzyc mozna ;)...

----
Wyroznilbym tutaj kilka odmiennych przypadkow w ktorych taka informacje chcielibysmy uzyskac. Kazdy z tych przypadkow najlepiej obsluzyc odmienna metoda - niektore metody moga sie nieco pokrywac. Kolejnosc wg. skomplikowania, od najprostszego przypadku...

1. Program uruchomiony pod systemem z pliku wykonywalnego. Zalozenie. System w ROM dostarcza taka informacje.
2. Program uruchomiony pod systemem z pliku wykonywalnego. Zalozenie. System w ROM nie dostarcza takiej informacji.
3. Program nie uruchamiany z pliku wykonywalnego tj. wlasny bootblock itd. Zalozenie. System w ROM dostarcza taka informacje.
4. Program nie uruchamiany z pliku wykonywalnego tj. wlasny bootblock itd. Zalozenie. System w ROM nie dostarcza takiej informacji.
5. Dotyczy tylko tworcow systemu tj. Kickstartu itp.

Zdajesz sobie sprawe, ze tylko w przypadku 5 program bylby naprawde pierwszy ?. W przypadku 1,2,3 i 4 program jest zawsze najwyzej drugi. Sila rzeczy to wymusza uzycie procedur systemu - czyli dostepnych funkcji pierwszego programu np: procedur do wejscia w tryb nadzorcy (przypadek 2, 4 i ew. przypadek posredni, kiedy system dostarcza informacji niekompletnych...).

W przypadku 1 i 3 w ogole odpuscilbym sobie tryb nadzorcy jezeli system w ROM dostarcza potrzebnych informacji - dt. takze tzw. niesystemowych programow... w koncu robi sie to tylko raz na samym poczatku.

Przypadki 2 i 4 moga byc podobne. W przypadku 4 system ogranicza sie tylko do tego co jest w ROM... W przypadku 2 jest dodatkowa mozliwosc skorzystania np: z dodatkowej biblioteki funkcji na dysku, jezeli istnieja, jezeli chcemy...

Przypadek 5 to zupelnie inna bajka. Do tego mieli dostep tylko tworcy Amigi. Nam smiertelnikom nie wypada nawet o tym myslec .

---

Reasumujac. Innej mozliwosci nie widze na wejscie w tryb nadzorcy jak uzycie procedur systemu, a dopiero potem mozesz robic sobie wszystko po swojemu ok, racja . Od ukazania sie 68010, czyli od bardzo bardzo dawna, zakladanie adresu 0 dla tablicy wektorow nie jest dobra praktyka, chyba, ze zakladasz dzialanie programu tylko na 68000, ale wtedy po co sprawdzac model procesora ?;).

Ostatnia aktualizacja: 26.05.2013 20:48:31 przez gx
[#11] Re: Sprawdzanie modelu procesora 680x0

@gx, post #10

W którymś z Magazynów Amiga był opisany algorytm rozpoznawania CPU. Pamiętam, że był to jakis rejestr, w którym kazy bit odpowiadał za konkretny model 68k (z wyłączeniem 680600) i fpu/mmu. 68060 miał jakiś inny sposób identyfikacji (bo wg tego pierwszego spodobu był rozpoznawany jako 68040).
Jeśli ktoś ma zbiorcze spisy streści MA to niech poszuka.

Ostatnia aktualizacja: 26.05.2013 20:59:44 przez wali7
[#12] Re: Sprawdzanie modelu procesora 680x0

@Hextreme-Attic, post #8

W jakiś sposób procesory 680x0 są rozpoznawane, jeśli nie przez te właśnie systemowe programy, to na pewno przez Kickstart podczas uruchamiania Amigi. Nie ma innej metody na rozpoznanie danego modelu procesora, jak sprawdzenie jego specyficznych cech (obsługiwane instrukcje, wbudowane rejestry, czy nawet liczba bajtów odkładanych na stos, po wystąpieniu określonego wyjątku).
[wyróżniony] [#13] Re: Sprawdzanie modelu procesora 680x0

@wali7, post #11

Sprawdziłem, to jest AttnFlags w strukturze Execbase.
Przykładowy kod w C zamieszczony przez piru:
#include <exec/execbase.h>
#include <proto/dos.h>
extern struct ExecBase *SysBase;
const char *getcpu(void);
int main(void)
{
Printf("CPU: %s\n", getcpu());
return 0;
}
const char *getcpu(void)
{
UWORD attnflags = SysBase->AttnFlags;
if (attnflags & 0x80) return "68060";
if (attnflags & AFF_68040) return "68040";
if (attnflags & AFF_68030) return "68030";
if (attnflags & AFF_68020) return "68020";
if (attnflags & AFF_68010) return "68010";
return "68000";
}
Przerób sobie na asm.
A tu opis wykrycia 68060:
http://www.amiga.org/forums/archive/index.php/t-48600.html

Innymi słowy, rozpoznanie CPU w Amidze wykonywane jest przez system operacyjny w momencie otwierania biblioteki exec... czyli na samym początku. Wszystkie programy, nawet wyłaczające OS funkcją forbid() uruchamiane są juz po otwarciu execa, a więc mogą sobie tę informację z AttnFlags pobrać i dopiero potem ubić OS. Oczywiście tak sie dzieje w AmigaOS.


Ostatnia aktualizacja: 26.05.2013 21:13:36 przez wali7
[#14] Re: Sprawdzanie modelu procesora 680x0

@gx, post #10

Zgadza się, aby moja procedura rozpoznawała bezbłędnie procesory 680x0 na Amidze, muszę skorzystać z funkcji systemu operacyjnego.
[#15] Re: Sprawdzanie modelu procesora 680x0

@wali7, post #13

Dzięki za te informacje. Jednak pozostanę przy swojej procedurze. Wystarczy kilka przeróbek i będzie działać, aż miło. Myślę, że będzie przy tym mniejsza niż inne rozwiązania. Jak skończę to zamieszczę program do testów, oczywiście tylko dla odważnych :)
[wyróżniony] [#16] Re: Sprawdzanie modelu procesora 680x0

@wali7, post #13

dok. to nie rejestr tylko flaga w execbase, ktora wypelnia wczesniej system w ROM :)...

przyklad wyzej Don_Adan post#7:

dok.

btst #0,296+1(a6);

:)

sprawdza obecnosc 68010 (ustawione takze w przypadku pozniejszych modeli 020/30 itd.), jak nie ma to na 100% jest 68000, a wiec adres wektorow zaczyna sie od 0 i mozna walic bezposrednio.

Osobiscie sprawdzilbym jeszcze w dokumentacji..., czy aby na pewno jest dostepna taka flaga np: w Kickstart 1.0-1.2 (w 1.3 jest), bo w takim razie, najpierw wypada jeszcze sprawdzic wersje systemu, a dopiero potem w/w flage.
[#17] Re: Sprawdzanie modelu procesora 680x0

@gx, post #16

AttnFlags to nie jest jedna flaga, tylko każdy bit w AttnFlags jest osobną flagą (zresztą nazwę ma w liczbie mnogiej).
Wg mojej Amiga Developer CD V1.1 AttnFlags była obecna w execbase jeszcze przed zmianami wprowadzonymi w exec v36 (czyli Kick2.0). Całkiem prawdopodobne więc, że była obecna od samego początku.
[#18] Re: Sprawdzanie modelu procesora 680x0

@wali7, post #17

AttnFlags to nie jest jedna flaga, tylko każdy bit w AttnFlags


taka flaga z gwiazdkami ;).

W 1.3 jest na pewno (wyciete fragmenty):

**	$Filename: exec/execbase.h $
**	$Release: 1.3 $

**	(C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
**	    All Rights Reserved 

	UWORD	AttnFlags;	/* special attention flags */ 

/******* AttnFlags */
/*  Processors and Co-processors: */
#define AFB_68010	0	/* also set for 68020 */
#define AFB_68020	1
#define AFB_68881	4

#define AFF_68010	(1<<0)
#define AFF_68020	(1<<1)
#define AFF_68881	(1<<4)


W ogole dziwne, ze pozniejsze prodki w latach 90 jeszcze z tego nie korzystaly . Zamiast tego "walono" MOVE bezposrednio w adres, a potem TRAP... no coz, dwie magiczne instrukcje ktore wywalaly wiele nawet swietnych nonOS prodek scenowych, a tak niewiele potrzeba bylo zeby nie bylo problemu, tylko wystarczylo przejrzec NDK ;).

Ostatnia aktualizacja: 26.05.2013 23:10:18 przez gx
[#19] Re: Sprawdzanie modelu procesora 680x0

@gx, post #18

Może dlatego, że scenowcy mieli procedury OS w głębokiej pogardzie. Niektórzy chyba znali tylko forbid().
[#20] Re: Sprawdzanie modelu procesora 680x0

@gx, post #18

Sprawdziłem działanie bitu 0 z AttnFlags na emulatorze WinUAE pod systemem 1.3 (WB 34.34, KS 34.5) i na wszystkich modelach procesorów 680x0:

move.l 4.w,A6
btst #0,297(A6) ;wartość bitu określa procesor: 0=68000, 1=68010 lub nowszy

Działa bez zarzutu. Swoją drogą ciekawe jest to, że stary KS 1.3 działa na procesorze 68060, a nowsze kickstarty poniżej wersji 3.0 nie działają na tym procesorze (przynajmniej na emulatorze WinUAE).
[#21] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #20

Poprawiłem swój program sprawdzający model procesora 680x0 na Amidze, według kodu z postu od Don_Adan. Teraz program prawidłowo rozpoznaje każdy model 680x0, niezależnie od wartości rejestru VBR i działa na systemie 1.3 lub nowszym (testowałem na WinUAE i WinFellow). Zapraszam chętnych do przetestowania programu na prawdziwym sprzęcie (najbardziej ciekawi mnie, czy procesory 68020 i 68030/68EC030 będą prawidłowo wykrywane). Stąd można pobrać program, a tu znajduje się kod źródłowy.
[#22] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #21

W WB3.1 jest program CPU który wyświetla wersję procesora więc nie rozumiem po co wyważać otwarte drzwi?
[#23] Re: Sprawdzanie modelu procesora 680x0

@11111olo, post #22

Po prostu chciałem napisać swój własny algorytm, który będę mógł wykorzystać w innych programach. Poza tym z punktu widzenia programisty liczy się rozmiar, a mój program jest naprawdę niewielki (260 bajtów) w porównaniu do, np. wymienionego przez Ciebie polecenia CPU (3652 bajty). Oczywiście nie ma takich możliwości jak CPU, ale spełnia swoje zadanie.
[#24] Re: Sprawdzanie modelu procesora 680x0

@11111olo, post #22

Ponadto systemowe polecenie CPU i program ShowConfig nie wykrywają procesora 68060 (rozpoznają go jako 68040), a mój program wykrywa także 68060. Ale raczej ma to większe znaczenie tylko dla programistów. Tak, czy siak nie wyważam otwartych drzwi, tylko poszerzam ich futrynę (lub jak kto woli ościeżnicę) :)
[#25] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #21

ta procedura juz jest spoko OK . oczywiscie jest to temat adresowany do koderow, wiec porownywanie do komendy amigados nie ma sensu.
[#26] Re: Sprawdzanie modelu procesora 680x0

@gx, post #25

Tak więc moje boje z kodem do sprawdzania modelu procesora 680x0, chyba zakończyły się powodzeniem. Jestem tylko ciekawy, jakim kodem biblioteka Exec rozpoznaje procesory 680x0. Gdyby tak zdeasemblować Kickstart... (nikogo nie podpuszczam) :)
[#27] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #26

Jestem tylko ciekawy, jakim kodem biblioteka Exec rozpoznaje procesory 680x0.

Tutaj exec 1.3 znajdziesz. A dokładnie spójrz pod FC0546. W przypadku exec sprawa jest prosta z VBR, gdyż po uruchomieniu komputera motorola na dzień dobry jest w trybie nadzorcy i jak dobrze myśle VBR równy jest zero i dopiero program/rom go zmienia (to tylko moje domysły bo nie czytałem/nie znalazłem dokumentów na ten temat, ale by zachować kompatybilność procków ja bym tak zrobił). Zatem tu nie ma problemów że instrukcja wymagająca trybu nadzorcy wygeneruje wyjątek i nie masz wiedzy gdzie to może być. Czyli by sprawdzić jaki masz procek (zakładając że maszyna z 680x0 już działa i uruchamiasz to jako zwyczajowy program )to i tak w minimalnym stopniu trzeba się podeprzeć tym co daje OS, w przypadku Amigi to będzie Supervisor z exec.library a w przypadku Atair ST trzeba użyć funkcji Super z GEMDOS.
[#28] Re: Sprawdzanie modelu procesora 680x0

@asman, post #27

Jest to biblioteka Exec z Kickstartu 1.2 (33.180), ale poza tym wszystko się zgadza. Jak wynika z tego kodu, system 1.2 rozpoznaje tylko procesory do modelu 68020 włącznie. Natomiast wiem, że system 2.0 lub nowszy identyfikuje także modele 68030 i 68040 (procesory 68060 w ogóle nie są wykrywane). Używając mojego programu można rozpoznać każdy model 680x0, nawet na systemie 1.2. Może uda mi się zdeasemblować Kickstart 2.0 i znaleźć w nim instrukcje, którymi są rozpoznawane modele 68030 i 68040.
[wyróżniony] [#29] Re: Sprawdzanie modelu procesora 680x0

@RomanWorkshop, post #28

Ja przed chwilą zdeasemblowałem kawałek romu 3.1 i pod offsetem $c1c jest ta funkcja sprawdzająca model procka. W każdym razie wystarczy w ReSource wgrać obraz kickstarta ustawić kod na $f80000 i poszukać pierwszego wystąpienia VBR. W ten prosty sposób znalazłem tą funkcję. Z tego co widzę 68030 rozpoznawany jest za pomocą movec d1,dtt1 i tak dalej a 68040 za pomocą fsave -(sp) i frestore (sp)+ ale mogę się mylić bo to na szybko.
[#30] Re: Sprawdzanie modelu procesora 680x0

@asman, post #29

Ok, dzięki. Przyjże się temu dokładnie.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem