Poniżej znajduje się kod źródłowy programu ChkGFX, który sprawdza i wyświetla model układu
graficznego, zainstalowanego w Amidze. Rozpoznaje następujące układy: OCS, ECS i AGA oraz
standard ich pracy: PAL lub NTSC. 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.
Program rozpoznaje układ graficzny na podstawie wartości identyfikacyjnej,
która jest zapisana w jego 16-bitowym rejestrze VPOSR (bity nr 8-14):
$00 - OCS PAL Agnus (8367 lub 8371)
$10 - OCS NTSC Agnus (8361 lub 8370)
$20, $21 - ECS PAL Agnus (8372)
$30, $31 - ECS NTSC Agnus (8372)
$22, $23 - AGA PAL Alice (8374)
$32, $33 - AGA NTSC Alice (8374)
ChkGFX:
;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 układzie graficznym, zainstalowanym w Amidze.
;Działa w systemie 1.2 lub nowszym i można go uruchomić przez ikonę lub z CLI.
clr.l D1
move.w $DFF004,D1 ;odczyt rejestru VPOSR z układu Agnus/Alice
lsr.w #8,D1
bclr #7,D1 ;wyodrębnienie wartości identyfikacyjnej
btst #4,D1 ;wartość bitu określa standard układu: 0=PAL, 1=NTSC
beq.s ChkGFX0 ;układ PAL
lea ChkGFX5(pc),A0
lea ChkGFX6(pc),A1
bsr.s ChkGFX2
sub.b #$10,D1
ChkGFX0:
tst.b D1
beq.s ChkGFX1 ;układ OCS
sub.b #$20,D1
lsr.b #1,D1
rol.b #2,D1
lea ChkGFX4(pc),A0
lea ChkGFX7(pc),A1
add.l D1,A1 ;wartość określa model układu: 0=ECS, 4=AGA
bsr.s ChkGFX2
ChkGFX1:
move.l 4.w,A6 ;adres bazowy biblioteki Exec
lea ChkGFX3(pc),A0
move.l A0,D2 ;adres danych do wyświetlenia w CLI
moveq #14,D3 ;liczba bajtów do wyświetlenia w CLI
lea ChkGFX8(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
ChkGFX2:
move.b (A1)+,(A0)+
tst.b (A1)
bne.s ChkGFX2
rts
ChkGFX3:
dc.b "GFX: "
ChkGFX4:
dc.b "OCS "
ChkGFX5:
dc.b "PAL ",10
ChkGFX6:
dc.b "NTSC",0
ChkGFX7:
dc.b "ECS",0,"AGA",0
ChkGFX8:
dc.b "dos.library",0
;Rozmiar: 150 B, linii kodu: 43
Po kompilacji tego kodu, rozmiar programu wykonywalnego wynosi 188 B.