Asembler procesora 68000 Działa w systemie Workbench     ChkKS           Kompilacja


Poniżej znajduje się kod źródłowy programu ChkKS, który sprawdza i wyświetla informacje
o wersji Kickstartu, zainstalowanego w Amidze. Rozpoznaje wszystkie Kickstarty od wersji
1.2 (33.166) do 3.1 (40.72). Starsze Kickstarty (0.7, 1.0, 1.1) zostaną rozpoznane jako
"Kickstart 1.x (xx.x)", natomiast nowsze (43+) jako "Kickstart 3.x (vv.rr)" z wersją i rewizją
podaną w nawiasie. Kickstart 1.2.1 (34.4) zostanie rozpoznany jako "Kickstart 1.3 (34.4)".
Kickstart 3.5 (40.71) zostanie rozpoznany jako "Kickstart 3.1 (40.71)". Program działa w sys-
temie Workbench 1.2 lub nowszym. Można go uruchomić przez dwukrotne kliknięcie jego
ikony lub wpisując jego nazwę w CLI.

Program rozpoznaje wersję Kickstartu na podstawie 16-bitowych wartości identyfikacyjnych,
które są w nim zapisane pod adresami: $F8000C (wersja) i $F8000E (rewizja):

$F8000C$F8000EWERSJA
FFFFFFFFKickstart 0.7
FFFFFFFFKickstart 1.0
FFFFFFFFKickstart 1.1 (31.34)
002100A6  Kickstart 1.2 (33.166)  
002100B4Kickstart 1.2 (33.180)
00220004Kickstart 1.2.1 (34.4)
00220005Kickstart 1.3 (34.5)
00240002Kickstart 1.4 (36.2)
00240003Kickstart 1.4 (36.3)
0024000FKickstart 1.4 (36.15)
00240010Kickstart 1.4 (36.16)
0024001CKickstart 2.0 (36.28)
00240041Kickstart 2.0 (36.65)
00240043Kickstart 2.0 (36.67)
00240048Kickstart 2.0 (36.72)
0024008DKickstart 2.0 (36.141)
0024008FKickstart 2.0 (36.143)
002400CAKickstart 2.0 (36.202)
002400CFKickstart 2.0 (36.207)
002400D1Kickstart 2.0 (36.209)
0025004AKickstart 2.0 (37.74)
0025005CKickstart 2.0 (37.92)
002500AFKickstart 2.0 (37.175)
002500D2Kickstart 2.0 (37.210)
0025012BKickstart 2.0 (37.299)
0025012CKickstart 2.0 (37.300)
0025015EKickstart 2.0 (37.350)
00270041Kickstart 3.0 (39.65)
0027006AKickstart 3.0 (39.106)
$F8000C$F8000EWERSJA
00280003Kickstart 3.1 (40.3)
00280009Kickstart 3.1 (40.9)
00280010Kickstart 3.1 (40.16)
00280037Kickstart 3.1 (40.55)
0028003CKickstart 3.1 (40.60)
0028003EKickstart 3.1 (40.62)
0028003FKickstart 3.1 (40.63)
00280044Kickstart 3.1 (40.68)
00280045Kickstart 3.1 (40.69)
00280046Kickstart 3.1 (40.70)
00280047Kickstart 3.1 (40.71)
00280047Kickstart 3.5 (40.71)
00280048Kickstart 3.1 (40.72)
002B0001  Kickstart 3.2 beta (43.1)  
002C0001Kickstart 3.5 (44.1)
002C0048Kickstart 3.x (44.72)
Vampire 600 v2
002D0039Kickstart 3.x (45.57)
002D003DKickstart 3.x (45.61)
002D003EKickstart 3.x (45.62)
002D0040Kickstart 3.x (45.64)
002D0042Kickstart 3.x (45.66)
002E000AKickstart AROS (46.10)
002E000BKickstart AROS (46.11)
002E000CKickstart AROS (46.12)
002E008FKickstart 3.1.4 (46.143)
002F0060Kickstart 3.2 (47.96)
002F0066Kickstart 3.2 (47.102)
002F006FKickstart 3.2 (47.111)

Kolorem czerwonym są oznaczone wersje, które zostaną rozpoznane jako "Kickstart 1.x (xx.x)".
Kickstart 1.2.1 (34.4) oznaczony kolorem pomarańczowym, zostanie rozpoznany jako "Kickstart 1.3 (34.4)".
Kickstart 3.5 (40.71) oznaczony kolorem pomarańczowym, zostanie rozpoznany jako "Kickstart 3.1 (40.71)".
Kolorem zielonym są oznaczone wersje, które zostaną rozpoznane jako "Kickstart 3.x (vv.rr)".


ChkKS:
;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 wersji Kickstartu, zainstalowanego w Amidze.
;Działa w systemie 1.2 lub nowszym i można go uruchomić przez ikonę lub z CLI.

 move.w   $F8000C,D2 ;odczyt wersji Kickstartu
 move.w   $F8000E,D3 ;odczyt rewizji Kickstartu
 moveq    #$F1,D1
 cmp.w    #$FFFF,D2
 beq.s    ChkKS1     ;Kickstart 1.x
 moveq    #$21,D1
 cmp.w    D1,D2
 beq.s    ChkKS1     ;Kickstart 1.2
 moveq    #$31,D1
 cmp.w    #$22,D2
 beq.s    ChkKS1     ;Kickstart 1.3
 moveq    #$02,D1
 cmp.w    #$24,D2
 bne.s    ChkKS0
 cmp.w    #$10,D3
 bhi.s    ChkKS1     ;Kickstart 2.0
 moveq    #$41,D1
 bra.s    ChkKS1     ;Kickstart 1.4
ChkKS0:
 cmp.w    #$25,D2
 beq.s    ChkKS1     ;Kickstart 2.0
 moveq    #$03,D1
 cmp.w    #$27,D2
 beq.s    ChkKS1     ;Kickstart 3.0
 moveq    #$13,D1
 cmp.w    #$28,D2
 beq.s    ChkKS1     ;Kickstart 3.1
 moveq    #$F3,D1    ;Kickstart 3.x
ChkKS1:
 lsl.w    #4,D1
 ror.b    #4,D1
 add.w    #$3030,D1
 lea      ChkKS10(pc),A0
 move.b   D1,(A0)
 ror.w    #8,D1
 addq.l   #2,A0
 cmp.b    #$2F,D1
 bne.s    ChkKS2
 cmp.w    #$312F,D1
 beq.s    ChkKS4     ;Kickstart 1.x
 bra.s    ChkKS3     ;Kickstart 3.x
ChkKS2:
 move.b   D1,(A0)
ChkKS3:
 addq.l   #3,A0
 bsr.s    ChkKS5
 move.w   D3,D2
 addq.l   #1,A0
 bsr.s    ChkKS5
 move.b   #")",(A0)
ChkKS4:
 move.l   4.w,A6     ;adres bazowy biblioteki Exec
 lea      ChkKS9(pc),A0
 move.l   A0,D2      ;adres danych do wyświetlenia w CLI
 moveq    #17,D3     ;liczba bajtów do wyświetlenia w CLI
 lea      ChkKS11(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

;Konwersja 2-bajtów z rejestru D2 do systemu DEC-ASCII
ChkKS5:
 moveq    #$30,D1
 move.l   #$2710,D4
ChkKS6:
 move.b   #$2F,(A0)
ChkKS7:
 addq.b   #1,(A0)
 sub.w    D4,D2
 bcc.s    ChkKS7
 add.w    D4,D2
 cmp.b    (A0),D1
 beq.s    ChkKS8
 clr.b    D1
 addq.l   #1,A0
ChkKS8:
 divu     #$0A,D4
 bne.s    ChkKS6
 rts

ChkKS9:
 dc.b     "KS: "
ChkKS10:
 dc.b     "x.x (xx.x)  ",10
ChkKS11:
 dc.b     "dos.library",0

;Rozmiar: 234 B, linii kodu: 77
Po kompilacji tego kodu, rozmiar programu wykonywalnego wynosi 272 B.