Poniżej znajduje się kod źródłowy programu Chk060, który sprawdza obecność procesora 68060
w Amidze i w razie jego wykrycia, wyświetla szczegółowe informacje o nim: wersję ("68060" - pełna,
"xx060" - EC/LC), rewizję ("rev X") oraz wartość rejestru PCR (Processor Configuration Register).
Program działa w systemie Workbench 1.2 lub nowszym. Można go uruchomić przez dwukrotne
kliknięcie jego ikony lub wpisując jego nazwę w CLI.
Procesory 68060 mogą mieć następujące wartości rejestru PCR:
$0430RRxx - pełna wersja 68060 (zawiera FPU i MMU)
$0431RRxx - wersja EC (bez FPU i MMU) lub LC (bez FPU)
RR - bajt z rewizją procesora (np. $01 = rev. 1, $06 = rev. 6)
Chk060:
;Zakładam, że w tym miejscu procesor pracuje w trybie użytkownika (User mode).
;Każdy procesor 680x0 pracuje w tym trybie, po uruchomieniu programu na Workbenchu.
;Program wyświetla informacje o procesorze 68060, zainstalowanym w Amidze.
;Działa w systemie 1.2 lub nowszym i można go uruchomić przez ikonę lub z CLI.
move.l 4.w,A6 ;adres bazowy biblioteki Exec
lea Chk060a(pc),A5 ;adres procedury, która zostanie wykonana w trybie nadzorcy
jsr -30(A6) ;przełącza procesor w tryb nadzorcy i wykonuje procedurę (funkcja Exec:Supervisor)
lea Chk060k(pc),A1 ;nazwa biblioteki DOS
jsr -408(A6) ;otwiera bibliotekę DOS (funkcja Exec:OldOpenLibrary)
move.l D0,A6 ;adres bazowy biblioteki DOS
jsr -60(A6) ;zwraca uchwyt okna CLI do wyświetlania danych. Jeśli nie ma
;takiego okna, to jest ono otwierane (funkcja DOS:Output).
move.l D0,D1 ;uchwyt okna CLI
jsr -48(A6) ;wyświetla dane w CLI (funkcja DOS:Write)
move.l A6,A1 ;adres bazowy biblioteki DOS
move.l 4.w,A6 ;adres bazowy biblioteki Exec
jsr -414(A6) ;zamyka bibliotekę DOS (funkcja Exec:CloseLibrary)
rts
Chk060a: ;procedura wykonywana przez funkcję Exec:Supervisor
moveq #$10,D2
move.l D2,A1
move.l (A1),D2 ;wektor wyjątku nr 4 (Illegal Instruction), który wystąpi gdy procesor
;natrafi na kod nieobsługiwanej instrukcji (prawidłowy tylko dla 68000).
lea Chk060g(pc),A0
move.l A0,(A1) ;zmiana wektora wyjątku nr 4 (prawidłowego tylko dla 68000)
move.l A7,A2 ;zapamiętanie wskaźnika stosu (A7=SSP)
btst #0,297(A6) ;wartość bitu określa procesor: 0=68000, 1=68010 lub nowszy (bit ten wchodzi
;w skład flag AttnFlags, wypełnianych przez bibliotekę Exec podczas startu Amigi).
beq.s Chk060b ;procesor 68000
;W tym miejscu procesor to 68010 lub nowszy
move.l D2,(A1) ;przywrócenie wektora wyjątku nr 4 (prawidłowego tylko dla 68000)
dc.l $4E7A3801 ;MOVEC VBR,D3 - instrukcja przenosi wartość rejestru VBR do rejestru D3.
;Jest obsługiwana przez procesory 68010/20/30/40/60.
add.l D3,A1
move.l (A1),D2 ;wektor wyjątku nr 4 (prawidłowy dla 68010+)
move.l A0,(A1) ;zmiana wektora wyjątku nr 4
Chk060b:
dc.l $4E7A1808 ;MOVEC PCR,D1 - instrukcja przenosi wartość rejestru PCR do rejestru D1.
;Na procesorze innym niż 68060 powoduje wystąpienie wyjątku nr 4.
;Konwersja 4-bajtów z rejestru D1 do systemu HEX-ASCII
lea Chk060j(pc),A0 ;adres wyjścia danych
moveq #$07,D4
Chk060c:
rol.l #4,D1 ;dane do konwersji
move.b D1,D3
lsl.b #4,D3
addq.b #3,D3
rol.b #4,D3
cmp.b #$3A,D3
bcs.s Chk060d
addq.b #7,D3
Chk060d:
move.b D3,(A0)+
dbf D4,Chk060c
lea Chk060i(pc),A0
move.w D1,D3
ror.w #8,D3
add.b #$30,D3
move.b D3,16(A0) ;numer rewizji procesora
btst #16,D1 ;wartość bitu określa wersję procesora: 0=68060, 1=68EC060/68LC060
beq.s Chk060e ;procesor 68060 w pełnej wersji
move.w #"xx",5(A0) ;procesor 68060 w wersji EC/LC (bez FPU)
Chk060e:
moveq #34,D3 ;liczba bajtów do wyświetlenia w CLI
Chk060f:
move.l D2,(A1) ;przywrócenie wektora wyjątku nr 4
move.l A2,A7 ;przywrócenie wskaźnika stosu (A7=SSP)
move.l A0,D2 ;adres danych do wyświetlenia w CLI
rte ;powrót z funkcji Exec:Supervisor
Chk060g: ;kod obsługi wyjątku nr 4
lea Chk060h(pc),A0
moveq #16,D3 ;liczba bajtów do wyświetlenia w CLI
bra.s Chk060f
Chk060h:
dc.b "68060 not found",10
Chk060i:
dc.b "CPU: 68060 (rev x)",10,"PCR: $"
Chk060j:
dc.b "xxxxxxxx",10
Chk060k:
dc.b "dos.library",0
;Rozmiar: 220 B, linii kodu: 59
Po kompilacji tego kodu, rozmiar programu wykonywalnego wynosi 256 B.