Tajemnice ATARI

RAMDisk


    Prócz standardu modelu 130XE istnieje wiele innych roszerzeń pamięci, montowanych do ATARI. Często oferują one więcej niż 64K w dodatkowych bankach, jednak niewiele programów potrafi wykorzystać tę pamięć. Najpowszechniejszym jej zastosowaniem jest założenie w niej ramdysku, niestety DOS 2.5 potrafi to zrobić tylko w 130XE, a COS w ogóle. Prezentowany program dostosowuje się do każdego typu rozszerzenia pamięci - z pewnym jednak zastrzeżeniem. Otóż banki muszą mieć po 16K i być podłączane w obszar $4000-$7FFF poprzez zmianę bitów 2-6 rejestru PORTB (adres $D301). Jest to standard, któremu jest wierna większość rozwiązań, w tym 130XE.

    Na początku trzeba zadbać o sposób, w jaki zmiany stanu PORTB wpływają na banki pamięci. Jest to zadaniem programu CHKMEM.COM (listing trzeci). Sprawdza on wszelkie możliwe kombinacje bitów i patrzy, czy ujawniła się jakaś dodatkowa pamięć. Wyniki badań są obwieszczane światu za pomocą kodów literowych, których znaczenie chciałbym wyjaśnić dokładnie - może się to komuś przydać.

    Rejestr PORTB jest od czasów ATARI 800XL przeznaczony do zarządzania pamięcią. Umieszczone w komputerze 64K RAM wypełnia całą przestrzeń, którą jest w stanie zaadresować procesor. Tak więc część tej pamięci musi pokrywać się adresami z pamięcią ROM, w której zapisany jest system operacyjny, interpreter ATARI BASIC i program testujący (SELF TEST). W celu skorzystania z całej pamięci RAM trzeba mieć możliwość wyłączenia ROM-ów. Temu celowi służą odpowiednio bity 0, 1 i 7 PORTB. Skasowanie bitu 0 powoduje odłączenie systemu, ustawienie tego bitu na 1 - przyłączenie. Dla pozostałych dwu obszarów jest odwrotnie: 1 - odłącza, 0 - przyłącza. Tymi bitami zarządza system operacyjny.

    Do sterowania dodatkowymi bankami zostają bity 2-6. Po włączeniu komputera wszystkie są ustawione na 1 i wtedy w obszarze $4000-$7FFF jest widoczny podstawowy bank pamięci. Inne wartości mogą już spowodować podstawienie w ten obszar jednego z dodatkowych banków. Przyporządkowanie kodów znakowych kombinacjom bitów przedstawia tabelka.

65432
A 11110
.
.
Z 00101
a 00100
b 00011
c 00010
d 00001
e 00000

    Ponieważ dodatkowych banków jest przeważnie mniej niż możliwych kombinacji bitów, często dostęp do danego banku jest możliwy za pomocą kilku różnych kodów. CHKMEM wykrywa takie sytuacje i wyświetla obok numeru porządkowego banku wszystkie kody dające dostęp do niego, Kody, które się nie pojawiły obok żadnego banku powodują podłączenie banku podstawowego.

    CHKMEM spełnia jeszcze dwie dodatkowe funkcje: testuje rozszerzoną pamięć będąc w ten sposób dopełnieniem SELF TEST-u oraz może wygenerować standardowy plik konfiguracyjny dla sterownika ramdysku.

    Obsługę ramdysku zapewnia program RAMDISK.COM (listing pierwszy). W czasie instalacji odczytuje on plik testowy RAMDISK.SET, który określa konfigurację sterownika. Plik .SET można przygotować za pomocą dowolnego edytora. Pierwsza linia tego pliku określa nazwę i numer, jaki chcemy nadać ramdyskowi. Może to być D8:, może też i coś innego. Sterownik jest w stanie wykryć fakt obecności w systemie innego urządzenia o tej samej nazwie i nie odcina dostępu do niego - jest "przezroczysty" dla wszystkich odwołań do innego numeru urządzenia niż jego własny.

    Druga linia zawiera kody banków, które sterownik ma wykorzystywać. Nie muszą to być, oczywiście wszystkie banki, część z nich można pozostawić wolną do innych celów. Należy uważać, aby przez przypadek nie podać dwu kodów, dających dostęp do tego samego banku, a tym bardziej nie podać kodu banku podstawowego! Nie jest to wykrywane, a spowoduje zawieszenie komputera.

    Z punktu widzenia użytkownika ramdysk jest dodatkową stacją dysków i potrafi wykonać wszystkie jej komendy. Małe ostrzeżenie - komendy NOTE i POINT operują nie kolejnymi numerami sektorów, tylko dość dziwnymi kilkunastotysięcznymi liczbami. Nie jest to oznaką żadnych błędów, po prostu dzięki temu program jest krótszy i szybszy.

    Sterownik ramdysku instaluje się w pamięci jako nakładka, zajmując około 6 stron. Pojemność katalogu wynosi 32 wpisy. MEMLO przed instalacją musi być na tyle niskie, aby cały sterownik zmieścił się poniżej adresu $4000. Plik konfiguracyjny jest odczytywany z tego samego urządzenia, z którego wczytywano RAMDISK.COM. Powtórne uruchomienie programu usuwa sterownik z pamięci, o ile nie został przygnieciony innymi nakładkami.

    W czasie przełączania banków sterownik nie dezaktywuje przerwań. Może to spowodować zawieszenie się komputera, o ile w tym czasie działają jakieś przerwania, a ich procedury obsługi leżą w obszarze $4000-$7FFF. Taka sytuacja może zajść przy korzystaniu z niektórych programów użytkowych. Wtedy trzeba dołączyć (np. za pomocą programu APPEND) do programu RAMDISK.COM plik RAMINTR.OBJ (listing drugi). Zawiera on dodatkowy kod, obsługujący włączanie i wyłączanie przerwań w czasie transmisji.

    Ponieważ nie można rozpoznać, czy przerwanie DLI było aktywne przed odwołaniem się do ramdysku, na wszelki wypadek jest ono wyłączane przy powrocie z jego procedury obsługi. Gdyby było to dla kogoś niewygodne, niech zmieni 19 bajt pliku RAMINTR.OBJ z $40 na $C0 i tak spreparowany plik dołączy do RAMDISK.COM - wtedy DLI będzie zawsze uaktywniane po skorzystaniu z ramdysku.

    W programach wykorzystałem kilka procedur autorstwa Janusza B. Wiśniewskiego. O przerwaniach można więcej przeczytać w jego artykule w TA 10/92.
1000 REM *--------------------------*
1002 REM : RAMDisk                  :
1004 REM :  autor: Wojciech Palacz  :
1006 REM : (c) 1993 Tajemnice ATARI :
1008 REM *--------------------------*
1010 DATA ffff0090b090a005980a0a0a0a
1020 DATA aabd4003100c88d0f2ad0103d0
1030 DATA 0ea901d00aa8b91a038da290bd
1040 DATA 410309308da390a200203e90a2
1050 DATA 01203e90a92da21e9d6c90cad0
1060 DATA faa201a000ca300ab96c90c8c9
1070 DATA 9bd0f8f0f38aa2009d48031898
1080 DATA 696c9d4403a9009d490369909d
1090 DATA 4503a9099d42034c56e49b5261
1100 DATA 6d4469736b20312e3020627920
1110 DATA 576f6a63696563682050616c61
1120 DATA 637a9bfd4572726f7220647572
1130 DATA 696e672072656164696e672044
1140 DATA 313a52414d4449534b2e534554
1150 DATA 9be202e30200900080db852000
1160 DATA 00add6858de702add7858de802
1170 DATA a22fa9859ded85ca10fa20f584
1180 DATA a244acd485add58520bcee9009
1190 DATA 30079d1b03989d1a0360a421c0
1200 DATA 00f00238608dd9858edc858a4a
1210 DATA 6ddc854a4aaaad01d38dd88518
1220 DATA 60200000200000aed8858e01d3
1230 DATA 60200000200000a0a060203380
1240 DATA 90034c64808edd85209080aedd
1250 DATA 85989ded85d001c84c578020eb
1260 DATA 40aedd85a9119dee85a0016020
1270 DATA 2d85b069a52a29fec906f0e520
1280 DATA c640aedd85a9009df0859df185
1290 DATA a9fd9def859df285989dee85a5
1300 DATA 2a901ac908d03fa000b90343f0
1310 DATA 08206241d0f6a0a960989dee85
1320 DATA 4c0040c904f019b903431003a0
1330 DATA a760a52ac908f018c909f01ac9
1340 DATA 0cf003a0a860b90443f005a9ff
1350 DATA 9df285a000602083844c104020
1360 DATA bc84f0f29df085ad01d39df185
1370 DATA 20b584b906439def859df285a0
1380 DATA 006020338090034c6480bced85
1390 DATA d02dbdef85ddf285b021c9fdd0
1400 DATA 0320db83feef85bdf1858d01d3
1410 DATA bdf0858d5281bcef85b90040a0
1420 DATA 014c5780a088d0f930f720b584
1430 DATA feee85bcee85c012f008901fc0
1440 DATA 91905cb0e520d640b01ca9009d
1450 DATA ee8520bc8420b584aee285ade1
1460 DATA 85202340b9b941a0014c5780a9
1470 DATA 809dee85a9008de1858de28520
1480 DATA d58120f584200685f0128db181
1490 DATA adff40d0f3eee185d0eeeee285
1500 DATA d0e920b58420d581aee285ade1
1510 DATA 85204b40b94b41a0014c5780a2
1520 DATA 02bdde85bce3859de385989dde
1530 DATA 85ca10f06020338090034c6480
1540 DATA bced85d035bdef85c9fdd011bd
1550 DATA f285c9fff0072026849005b01d
1560 DATA 20db83feef85bdf1858d01d3bd
1570 DATA f0858d2482bcef85add9859900
1580 DATA 40a0014c57803002a087602033
1590 DATA 8090034c648020b584bded85d0
1600 DATA 03204c82a9859ded85a0014c57
1610 DATA 80bdef85ddf2859006bcee8599
1620 DATA 06436020338090034c6480202d
1630 DATA 85b00f20c640b00aa901be0343
1640 DATA 1002a9a7a84c5780a000a90099
1650 DATA 0343206241d0f620f584200685
1660 DATA f0718d98828d9b82a9008dfe40
1670 DATA 8dff40f0eb9848a00a20b14068
1680 DATA a8204485b0582061404c578020
1690 DATA 338090034c648020b584a522c9
1700 DATA fef0b7c925f077c926f056202d
1710 DATA 85b034a522c920f0c820c640b0
1720 DATA 29a522c921f00cc923f026c924
1730 DATA f026a0a8d017b9034330152083
1740 DATA 84a90099034320cd4090ee20f5
1750 DATA 84a0014c5780a0a7d0f9a981d0
1760 DATA 02a9018deb41adeb4199034320
1770 DATA cd4090f5b0e1bced85d020acdc
1780 DATA 85bdef85994e03bdf085994d03
1790 DATA bdf185994c034c02838edd85bc
1800 DATA ed85f004a0abd0ba204c82acdc
1810 DATA 85a200bd1d86f066d94c03f003
1820 DATA e8d0f3b94d033054c9409050e0
1830 DATA 00d004c94490488d7e83b94c03
1840 DATA 8d01d3aedd85adff40f037100c
1850 DATA a9fdd94e03902e9df285d01420
1860 DATA b584bcee85b90643acdc85d94e
1870 DATA 0390189df285b94e039def85b9
1880 DATA 4d039df085b94c039df1854c02
1890 DATA 83a0a64c5780b94c03194d03d0
1900 DATA f3b94e03c9fdd0ecaedd85bdf0
1910 DATA 85f0cfa9ff9df285d0c8a9ff9d
1920 DATA ef85bcee85bdf085f0308df683
1930 DATA 8dfc83bdf1858d01d3adff409d
1940 DATA f185adfe409df0858d0b84bdf1
1950 DATA 858d01d3adff40300920b584b9
1960 DATA 06439df2856020b584b905439d
1970 DATA f185b90443d0d7200685d004a0
1980 DATA a238608d3484acff40d0ef8d3c
1990 DATA 84eeff40a9ff9def85a9009df2
2000 DATA 85bdf085f0238d5d848d6384bd
2010 DATA f1858d01d3adde858dfe40addf
2020 DATA 858dff409df185adde859df085
2030 DATA 186020b584bcee85adde859904
2040 DATA 43addf85990543d0e1b905438d
2050 DATA 9b84b90443f0278da1848da584
2060 DATA 8dad848db084a9008d01d3adfe
2070 DATA 4048adff408d9b84a9008dfe40
2080 DATA 8dff40684c8c84ad1d868d01d3
2090 DATA 60a9008de7848de1858de285b9
2100 DATA 05438de184b90443f01f8de784
2110 DATA 8ded84eee185d003eee285a900
2120 DATA 8d01d3adff408de184adfe404c
2130 DATA d084ade78460a9438dde85a900
2140 DATA 8de085ad1d868ddf8560addf85
2150 DATA f021eede851013a9408dde85ee
2160 DATA e085ace085b91d868ddf85f009
2170 DATA addf858d01d3adde8560add885
2180 DATA 8d01d3a002b124c93af0098810
2190 DATA f7a0a5384cb584add8858d01d3
2200 DATA a20ba9209de085cad0fac8b124
2210 DATA c92ed008e008b033a208d0f1c9
2220 DATA 3fd004a900f014c92af010c941
2230 DATA 9004c95b9008c9309017c93ab0
2240 DATA 139de185e8e00cf00be008d0c9
2250 DATA c8b124c92ef0c2a200bde185c9
2260 DATA 2af01ce8e00bd0f4ade185c920
2270 DATA f09720b584a20abde1859ddc41
2280 DATA ca10f71860a9009de185e8e008
2290 DATA f0d3e00bf0dbd0f20066802e82
2300 DATA 2181e7815a82b182c8853d8600
2310 DATA 0000000088db89a20abddc41d0
2320 DATA 03a0a560ca10f5202a41a90199
2330 DATA 0343a900990443990543990643
2340 DATA a00060488a48204841a20abddc
2350 DATA 419dbb41ca10f7a220b9034310
2360 DATA 02a22a8eb941a00068aa682068
2370 DATA 41a00060a004206841adea41c9
2380 DATA 10a9209002a92b8dce41a08060
2390 DATA a00a20b14020c640b0458cfd41
2400 DATA b903431003a0a760a01520b140
2410 DATA acfd41204841a20abde741f003
2420 DATA 9ddc41ca10f520c640b008ccfd
2430 DATA 41f003a0ae60acfd41202a41a0
2440 DATA 1520b140acfd4120cd4090bda0
2450 DATA 0160a20abddc4148b9e7419ddc
2460 DATA 416899e74188ca10ee60a00020
2470 DATA ff409008206241d0f6a0aa3860
2480 DATA a000b90743d007206241d0f638
2490 DATA 60a9009907431860a00020ff40
2500 DATA a900b002a901990743206241d0
2510 DATA ef60b90343f023a200bddc41f0
2520 DATA 05d90042d017e003b00abde441
2530 DATA f005d90043d009c8e8e008d0e2
2540 DATA 18901b38b019a200bddc419900
2550 DATA 42e003b006bde441990043e8c8
2560 DATA e008d0ea889829f8a860a200b9
2570 DATA 00429ddc41e003b006b900439d
2580 DATA e441e8c8e008d0eaf0e0981869
2590 DATA 08a8608de7418ee841f8a9008d
2600 DATA e9418dea41a2100ee7412ee841
2610 DATA ade9416de9418de941adea416d
2620 DATA ea418dea41cad0e5d8c9109008
2630 DATA a9998de9418dea4120b041ade9
2640 DATA 41484a4a4a4a20b04168290f09
2650 DATA 3099c741c860202046494c454e
2660 DATA 414d45455854203030309b3030
2670 DATA 30204652454520534543544f52
2680 DATA 539bb1908c9448616e646c6572
2690 DATA 20696e7374616c6c65642e9b52
2700 DATA 65666f726d6174206f6c642072
2710 DATA 616d6469736b3f2028592f4e29
2720 DATA 9b48616e646c65722072656d6f
2730 DATA 7665642e9b43616e2774207265
2740 DATA 6d6f76652068616e646c657221
2750 DATA fd9b4d454d4c4f20746f6f2068
2760 DATA 69676821fd9b53796e74617820
2770 DATA 6572726f7220696e2073657475
2780 DATA 702066696c6521fd9b20c091a9
2790 DATA c3cde702a939ede802b008a207
2800 DATA 203e906c0a00208a92205893a5
2810 DATA 0c8d0180a50d8d028020a19320
2820 DATA e09318ade702850c69038d7991
2830 DATA ade802850d69008d7a91200000
2840 DATA a203203e90a5d8d017a204203e
2850 DATA 90adfc02c9fff0f9a2ff8efc02
2860 DATA 293fc92bd022ad1d808da290ad
2870 DATA 368009308da390a210a9fe9d42
2880 DATA 03a9a29d4403a9909d45032056
2890 DATA e46c0a00ade702e90985d0ade8
2900 DATA 02e90685d1a016b92480f004d1
2910 DATA d0d0058810f4300fa5d0d002c6
2920 DATA d1c6d0a5d1c907b0e26038a5d0
2930 DATA e92485d2a5d1e90085d3a50cc5
2940 DATA d2d019a50dc5d3d01318a5d269
2950 DATA 3da8a5d36906cde802d06d98cd
2960 DATA e702d067a01db1d2a200dd1a03
2970 DATA f009e8e8e8e024d0f4f01518a5
2980 DATA d269c8a8a5d36905dd1c03d044
2990 DATA 98dd1b03d03ea002b1d2990b00
3000 DATA b9d10099e60288d0f2e024f022
3010 DATA 18a5d269da85d0a5d3690585d1
3020 DATA a000b1d09d1b03c8b1d09d1c03
3030 DATA 1d1b03d0039d1a03a205203e90
3040 DATA 6c0a00a206203e906c0a002039
3050 DATA 93a9039d4203a9a29d4403a990
3060 DATA 9d4503a9049d4a03a900aca290
3070 DATA c043d002a9809d4b032056e430
3080 DATA 7a2043938d1d8020439338e930
3090 DATA 8d3680204393c99bd0f9a90085
3100 DATA d0a01f991d868810fa204393c9
3110 DATA 9bf00ba4d0e6d0991d86c01ed0
3120 DATA ee203993ad1d80c9419034c95b
3130 DATA b030ad3680f02bc90ab027a4d0
3140 DATA f02388b91d86201393b01a991d
3150 DATA 868810f2603849ff695f100318
3160 DATA 6906c91fb0040a0a098360a208
3170 DATA 203e906c0a00203993a202203e
3180 DATA 906c0a00a210a90c9d42034c56
3190 DATA e4a210a9079d4203a9009d4803
3200 DATA 9d49032056e430d760ae1d8020
3210 DATA bcee9040303ebd1a038dda8585
3220 DATA d4bd1b038ddb8585d5a90a85d0
3230 DATA a4d018b9c885690785d6b9c985
3240 DATA 690085d718b1d4690148c8b1d4
3250 DATA 6900a00191d6688891d6c6d0c6
3260 DATA d010d660ad01d34820b584a900
3270 DATA 85d885d485d6a98885d5a94085
3280 DATA d7a000b1d4d1d6f006c070b002
3290 DATA e6d891d6c0dbd006a5d7c941f0
3300 DATA 09c8d0e5e6d5e6d7d0df688d01
3310 DATA d360a90085cfade70285d4ade8
3320 DATA 0285d538a90085d2e5d485d0a9
3330 DATA 8085d3e5d585d1a000f0033866
3340 DATA cfa5d2c941a5d3e98690016024
3350 DATA cf70613025b1d291d4208094aa
3360 DATA f0e2c920f017c940f0ddc960f0
3370 DATA d9290dc908f0d390418a291fc9
3380 DATA 09f03ab1d2c8c900b1d288e980
3390 DATA 9012b1d2c8c941b1d288e986b0
3400 DATA 06a5d0a6d1900724cf30a5a900
3410 DATA aa85d686d738b1d2e5d691d420
3420 DATA 8094b1d2e5d74c7894b1d291d4
3430 DATA 2080944c0694e6d2d002e6d3e6
3440 DATA d4d002e6d560e002e1023691

1000 REM *--------------------------*
1002 REM : RAMDisk - dodatek        :
1004 REM :  autor: Wojciech Palacz  :
1006 REM : (c) 1993 Tajemnice ATARI :
1008 REM *--------------------------*
1010 DATA ffff5080568078a9008d0ed460
1020 DATA 5d806380a2408e0ed45860

1000 REM *--------------------------*
1002 REM : Check Memory             :
1004 REM :  autor: Wojciech Palacz  :
1006 REM : (c) 1993 Tajemnice ATARI :
1008 REM *--------------------------*
1010 DATA ffff0090b090a005980a0a0a0a
1020 DATA aabd4003100c88d0f2ad0103d0
1030 DATA 0ea901d00aa8b91a038d9b90bd
1040 DATA 410309308d9c90a201203c90a9
1050 DATA 2da21f9d7390cad0faa2014c45
1060 DATA 9086d4a200204590a6d4a000ca
1070 DATA 300ab97390c8c99bd0f8f0f38a
1080 DATA a2009d4803189869739d4403a9
1090 DATA 009d490369909d4503a9099d42
1100 DATA 034c56e49b436865636b4d656d
1110 DATA 20312e3020627920576f6a6369
1120 DATA 6563682050616c61637a9b4372
1130 DATA 6561746520443f3a52414d4449
1140 DATA 534b2e534554203f28592f4e29
1150 DATA 9be202e3020090b19080934e6f
1160 DATA 206164646974696f6e616c2062
1170 DATA 616e6b7320666f756e642e9b50
1180 DATA 726573732045534320746f2062
1190 DATA 7970617373206d656d6f727920
1200 DATA 746573742e9b1c9c4d656d6f72
1210 DATA 79204f4b2e9bfd4d656d6f7279
1220 DATA 206661696c7572656420617420
1230 DATA 24343030302c2062616e6b203f
1240 DATA 2e9b4465746563746564206261
1250 DATA 6e6b732070726573656e742061
1260 DATA 733a9bad004085d1ad01d385d0
1270 DATA a21f20fb92a9008d0040cd0040
1280 DATA d03cca10f0a9ff8d01d38d0040
1290 DATA a000a21e20fb92ad0040d00ac8
1300 DATA 8e0040ec0040d01c8a95d8ca10
1310 DATA e9a5d08d01d3a5d18d0040c000
1320 DATA d017a203203c906c0a008a20ef
1330 DATA 928d1a91a206203c906c0a0020
1340 DATA 5c93a203203c90a204203c9020
1350 DATA 2092b005a205204590a207203c
1360 DATA 90a90085d2a21e8ad5d8d00786
1370 DATA d320bc92a6d3ca10f1a202203c
1380 DATA 90adfc02c9fff0f9a2ff8efc02
1390 DATA 293fc92bf0036c0a00a99b8da9
1400 DATA 90200493200893a20386d4bd7d
1410 DATA 93202a93a6d4ca10f3a21e8ad5
1420 DATA d8d00a86d320ef92202a93a6d3
1430 DATA ca10eea99b202a932004936c0a
1440 DATA 00a90085d5a21e86d38ad5d8d0
1450 DATA 2120fb92a95520589220a89220
1460 DATA 709220a892a9aa20589220a892
1470 DATA 20709220a892a6d3ca10d518a5
1480 DATA d5f0013860a00084d6a04084d7
1490 DATA a00091d6c8d0fbe6d7a4d7c080
1500 DATA d0f160a00084d6a04084d7a000
1510 DATA d1d6d00cc8d0f9e6d7a4d7c080
1520 DATA d0ef60489848a4d7203e93a5d3
1530 DATA 20ef928d1a91a206204590a901
1540 DATA 85d568a868d0d6acfc02c0fff0
1550 DATA 0ca2ff8efc02c01cd003686838
1560 DATA 60e6d2a4d2205c93adb1902026
1570 DATA 93adb290202693a93a202693a6
1580 DATA d3a5d3d5d8d00b86d48a20ef92
1590 DATA 202693a6d4ca10eca99b4c2693
1600 DATA 3849ff695fc95b90026905608a
1610 DATA 0a0a09838d01d360a90cd002a9
1620 DATA 03a2109d4203a9089d4a03a980
1630 DATA 9d4b03a99b9d4403a9909d4503
1640 DATA 4c56e4a200f002a21048a90b9d
1650 DATA 4203a9009d48039d4903684c56
1660 DATA e4a2032044939848204d93684a
1670 DATA 4a4a4a290f0930c93a90026906
1680 DATA 9d0f91ca60a900a201f8c888f0
1690 DATA 05186901d0f8d848290f207693
1700 DATA 684a4a4a4a09309db190ca609b
1710 DATA 3a3844e002e1023891


Wojciech Palacz



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2002