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). Program działa w systemie Workbench 1.0 lub nowszym.
Można go uruchomić przez dwukrotne kliknięcie jego ikony lub wpisując jego nazwę w CLI.

Najstarsze Kickstarty 0.7/1.0/1.1 zostaną rozpoznane jako "1.x (xx.x)", natomiast nowsze
(43+) jako "3.x (vv.rr)" z wersją i rewizją podaną w nawiasie. Kickstart 1.2.1 (34.4) zostanie
rozpoznany jako "1.3 (34.4)", a Kickstart 3.5 (40.71) jako "3.1 (40.71)".
Wyświetlona wersja Kickstartu może nie być tą, która jest aktualnie używana przez system
Amigi. Zwłaszcza, jeśli Kickstart został załadowany (relokowany/remapowany) do pamięci
RAM przez program (np. ReKick, SKick), funkcję maprom/fastrom karty turbo lub jednostkę
zarządzania pamięcią (MMU).

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)
00280003Kickstart 3.1 (40.3)
$F8000C$F8000EWERSJA
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)
002F0073Kickstart 3.2 (47.115)

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.0 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
 cmp.w    #$FFFF,D2
 beq.s    ChkKS3     ;Kickstart 1.x (0.7/1.0/1.1)
 lea      ChkKS9(pc),A0
 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 (1.2.1)
 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 (3.5)
 addq.b   #2,(A0)
 addq.l   #5,A0
 bra.s    ChkKS2     ;Kickstart 3.x
ChkKS1:
 lsl.w    #4,D1
 ror.b    #4,D1
 add.w    #$3030,D1
 move.b   D1,(A0)
 ror.w    #8,D1
 addq.l   #2,A0
 move.b   D1,(A0)
 addq.l   #3,A0
ChkKS2:
 bsr.s    ChkKS4
 move.w   D3,D2
 addq.l   #1,A0
 bsr.s    ChkKS4
 move.b   #")",(A0)
ChkKS3:
 move.l   4.w,A6     ;adres bazowy biblioteki Exec
 lea      ChkKS8(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      ChkKS10(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
ChkKS4:
 moveq    #$30,D1
 move.l   #$2710,D4
ChkKS5:
 move.b   #$2F,(A0)
ChkKS6:
 addq.b   #1,(A0)
 sub.w    D4,D2
 bcc.s    ChkKS6
 add.w    D4,D2
 cmp.b    (A0),D1
 beq.s    ChkKS7
 clr.b    D1
 addq.l   #1,A0
ChkKS7:
 divu     #$0A,D4
 bne.s    ChkKS5
 rts

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

;Rozmiar: 222 B, linii kodu: 73
Po kompilacji tego kodu, rozmiar programu wykonywalnego wynosi 260 B.