Asembler procesora 68000 Działa w systemie Workbench     ChkGFX           Kompilacja


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.