PasjaGSM.pl
  Jesteś w: Forum > Zapisywanie rekordu gry w EEPROMie


Zapisywanie rekordu gry w EEPROMie

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Zapisywanie rekordu gry w EEPROMie
Poprzedni temat «» Następny temat
Autor Wiadomość
 
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-01-17, 23:57   Zapisywanie rekordu gry w EEPROMie

Cześć,

ponieważ odnoszę wrażenie że są z tym problemy ale jakoś nikt nie pyta postanowiłem sam opisać jak zapisać rekord (top score) gry w EEPROMie.

Otórz NokiX udostępnia dwa mechanizmy, które pozwalają zapisywać coś w EEPROMie. Główny to tzw. EEPROM IDy czyli system Nokii (obsługiwany makrem eeprom()). Na tym mechaniźmie nadbudowane są tzw. CONFIG IDy obsługiwane makrem create_config_id().

Zacznijmy najpierw od tych drugich.

CONFIG IDy

Config ID to pewna liczba całkowita generowana podczas processingu makrem create_config_id(). Liczba ta jest identyfikatorem któremu możemy przypisać wartość. Zakres tych wartości to maksymalnie 0-255 czyli jeden bajt. Zakres określa się podczas tworzenia identyfikatora i dzięki temu można zaoszczędzić miejsce w EEPROMie.

Zaletą config IDow jest łatwa obsługa, oszczędność miejsca oraz to, że są obsługiwane przez system menu Nokii. Oznacza to, że można tak skonstruować menu, że samo będzie zapamiętywać wybraną opcję i zaznaczać ją po ponownym wejściu do menu. Wszystkie łatki posiadające menu ustawień używają tego mechanizmu.

W przypadku rekordu gry maksymalny zakres 0-255 może jednak okazać się zbyt mały. Można to obejść używając dwóch config IDów i odpowiednio przesuwając bity. Na przykład jeśli punkty mają zakres 0-65535 (unsigned short) czyli 16 bitów to możemy górne 8 bitów zapisywać w jednym config IDzie a dolne w drugim.

Aby stworzyć identyfikator w _project.nrx dodajemy wywołanie makra create_config_id().

Kod:
confid_punkty = create_config_id(8)


Parametr (8) określa ilość bitów jakie chcemy zarezerwować w EEPROMie. Zakres wartości, które będzie można tam przechować wynosić będzie 0-2^8-1 czyli 0-255.

Następnie w pliku źródłowym, gdzieś na początku, dajemy:

Kod:
extern rexx_uint confid_punkty;


Aby zapisać coś w takim config IDzie należy wywołać funkcję:

Kod:
own_set_config(confid_punkty,0);


Spowoduje to przypisanie config IDowi confid_punkty wartości 0.

Aby odczytać później tę wartość wywołujemy:

Kod:
x=own_get_config(confid_punkty);


Spowoduje to przypisanie zmiennej x wartości config IDa confid_punkty.

I to w zasadzie wszystko. Należy pamiętać, że pierwotnie (przed pierwszym zapisem) w EEPROMie znajdują się przypadkowe dane i odczytana wartość także będzie losowa.

Zobacz także (dokumentacja SDK):
Opis makra create_config_id()
Opis funkcji obsługujących config IDy

A teraz drugi sposób.

EEPROM IDy

System config IDów bazuje na systemie obsługi EEPROMu który stworzyła Nokia. Teraz opiszę jak używać tego systemu bezpośrednio.

Główne różnice w stosunku do config IDów to możliwość zapisu całych ciągów bajtów oraz pewne zaawansowane możliwości jak indeksowanie czy podidentyfikatory które jednak nie zostaną tu opisane bo do podstawowych operacji nie są potrzebne.

Generalnie zasada jest podobna. Należy stworzyć identyfikator. Tym razem jednak zrobimy to makrem eeprom():

Kod:
eprid_rekord = eeprom(2)


Parametr (2) określa ilość bajtów jakie chcemy zarezerwować w EEPROMie.

Następnie w pliku źródłowym, gdzieś na początku, dajemy:

Kod:
extern rexx_uint eprid_rekord;


Aby zapisać coś w EEPROMie należy wywołać funkcję:

Kod:
unsigned short rekord;
...
eeprom_write(&rekord,eprid_rekord,EPM_END);


Spowoduje to zapisanie wartości zmiennej rekord w EEPROMie. Zauważmy, że zmienna rekord jest typu unsigned short czyli zajmuje 2 bajty. Dlatego właśnie podaliśmy wartość 2 do makra eeprom().

Aby odczytać później tę zmienną wywołujemy:

Kod:
unsigned short rekord;
eeprom_read(&rekord,eprid_rekord,EPM_END);


Spowoduje to przypisanie zmiennej rekord wartości odczytanej z EEPROMu.

Dzięki wskaźnikom oraz określaniu rozmiaru pola w bajtach możemy przechować w EEPROMie całe struktury. Niestety, należy pamiętać, że Nokia niewiele miejsca nam tam zostawiła.

No to chyba tyle. Pytania proszę zamieszczać poniżej.
Życzę satysfakcji z programowania :)
[Yak]
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
AdSense


jaras 
Nowicjusz



Telefon: Nokia 5110
Operator: Plus
Pomógł: 2 razy
Wiek: 43
Dołączył: 09 Kwi 2005
Posty: 62
Skąd: "LAC: 41008" ;-)
Wysłany: 2006-01-18, 00:41   Re: Zapisywanie rekordu gry w EEPROMie

Witam.

yak napisał/a:
Pytania proszę zamieszczać poniżej.
No, pierwsze pytanie aż się ciśnie na usta... ;-)

yak napisał/a:
Niestety, należy pamiętać, że Nokia niewiele miejsca nam tam zostawiła.
Ile?

Pamiętaj bowiem, że na przykład w N5110 jest tylko 2048 bajtów EEPROM. To bardzo malutko, a przecież tam już jest sporo zapisanych ustawień, jak sobie oglądałem szesnastkowo zawartość pliku ze zrzutem z mojego EEPROM:
  • proste wybieranie,
  • ustawienia formatu wyświetlania spisu telefonów,
  • ustawienia wspólne wiadomości (raporty etc.),
  • ustawienia CBS (wiadomości kanałowe: spis tematów, wybór tematów, indeks itp.),
  • numer poczty głosowej,
  • czas i koszt połączeń (ale nie limit, tylko te liczniki) - o ile nie są w SIM,
  • ustawienia: uuu, Panie - tego tu trochę jest: choćby treść powitania, język, światło w profilu "Samochód", wybieranie ustalone i wiele innych (szkoda miejsca na ich wymienianie),
  • kod zabezpieczający,
  • grupa zamknięta,
  • rekordy gier,
  • kurs waluty dla kalkulatora,
  • zegar (np. format wyświetlania) i budzik,
  • dźwięki (eeech... szkoda pisać - tyle tego tam jest ;-),
  • Net Monitor (numer testu, stan np. opcji "BTS TEST", liczniki połączeń czy SMS i wiele innych),
  • nie wymieniłem jeszcze IMEI czy smoków, a choćby logo operatora i wielu zapewne jeszcze rzeczy, o których w ogóle nie wiem ;-).
Nooo, sporo tego - nie? ;-)

A już o tym co jest zapamiętywane w EEPROM u posiadaczy, powiedzmy, N3210 lub N3310, już wcale nie wspomnę. ;-)

Zatem: ile? :-)

Pozdrawiam Cię serdecznie.
_________________
Jarosław Krasuski (jaras)
^
 
 
     
druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2006-01-18, 01:12   

to ja też cos dodam od siebie. Pisałem o tym w (?) pomysłach na skrypty. No więc w N5510 mamy jeszcze takie dodatkowe opcje jak pamięć na 100 wpisów do książki telefonicznej o raz pamięć na zakładki WAP. Kązdy numer może miec 16 znaków opisu + 30 na nr telefonu co daje 46znaków, myślę że 1 znak == 1B ( jeśli się mylę proszę poprawić ), mamy 100 wpisów co daje 4600B. Jeśli chodzi o zakładki WAP to możemy ich ustawić 15 - każdy adres może mieć do 255 znaków + 50 znaków na opis co daje łącznie 4575B. Razem z numerami telefonów byłoby około 9kB miejsca w eepromie z którego osobiście ja rzadko korzystam ( WAPu nie używam a telefony na karcie można trzymać). Moje pytanie jest takie czy dałoby się wykorzystać to miejsce? Bo osobiście bym wolał miec możliwość ustawienia większej ilości przypomnień czy coś
^
 
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-01-18, 01:18   

Makro EEPROM.rx jest w stanie wyliczyć ilość wolnego miejsca. Stwórz nowy projekt w NokiXie, ustaw Verbose level 2 (menu Processing) i zasymuluj jeden skrypt zapisujący coś w EEPROMie, np. invert_lcd.nrx (zapisuje konfigurację on/off). Pod koniec processingu skrypt EEPROM.rx wyrzuci takie coś:

Dla 5110 v5.24:
Kod:
EEPROM SIZE (bytes) ........: 0x800
EEPROM FREE SPACE (bytes) ..: 45


Widać że niewiele. Ale nie zawsze jest tak źle. Na przykład w 3310 w chętnie używanej wersji 6.33 wygląda to tak:
Kod:
EEPROM SIZE (bytes) ........: 0x4800
EEPROM FREE SPACE (bytes) ..: 1178


W 3310 v6.39 czyli najnowszej tego miejsca jest tylko 6 bajtów (słownie: sześć). Coś tam pogrzebali z wiad. graf. chyba mają tekst w Unicodzie zapisany czy coś i poszło wszystko. Dlatego powstał adjust_nokia_screen_savers.nrx ktory usuwa z EEPROMu oryginalne wygaszacze Nokii, każdy taki wygaszacz daje dodatkowe 512 bajtów (wygaszaczy jest 6 wiec maksymalnie dodatkowe 3KB). Skrypt działa także na wcześniejszych wersjach firmware'u.

A w 5510 v3.53:
Kod:
EEPROM SIZE (bytes) ........: 0x3800
EEPROM FREE SPACE (bytes) ..: 3575


Także tak to wygląda.
Pozdrawiam.
[Yak]

[ Dodano: 2006-01-18, 01:29 ]
druidbartek, akurat jak pisalem 5510 ma sporo miejsca w EEPROMie. Musisz jednak wiedzieć, że oprócz EEPROMu jest jeszcze PMM. 3310 trzyma tam nagrane dźwięki wybierania głosowego, w 3410 na przykład rozbudowali to troche i tam są gry java itp. PMMa nigdy nie udało mi się rozpracować (narazie) ale wygląda na to, że jest to system dynamiczny - miejsce jest alokowane dopiero jak coś jest zapisywane (ale chyba nie w 3310, tylko w nowszych). Np. szablony SMS w 3310 sa w EEPROMie a w 3330, 5510, 5210 juz w PMM.

Jeśli chodzi o zwiększenie ilości przypomnień to problem leży w RAMie. Oprócz EEPROMu trzymane są one w RAMie a tam już nie można tak przestawiać i przesuwać jak w EEPROMie. No ale to jest OT więc nie mówmy o tym tu.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
jaras 
Nowicjusz



Telefon: Nokia 5110
Operator: Plus
Pomógł: 2 razy
Wiek: 43
Dołączył: 09 Kwi 2005
Posty: 62
Skąd: "LAC: 41008" ;-)
Wysłany: 2006-01-18, 11:53   

O żesz, kurtka...

Rzeczywiście, tylko 46 bajtów wolnego (nie, nie pomyliłem się: czterdzieści sześć ;-) - to cieniuteńko. Powiedzmy, że dla jednej aplikacji to spokojnie wystarczy, ale jakby wrzucić ich trochę więcej... O potraktowaniu EEPROM jako "nośnika pamięci zewnętrznej" w przypadku N5110 też można zapomnieć... Kurczę. :-/

No, to teraz trzeba ładnie prosić wszystkich naszych "forumowych programistów" ;-), żeby pisząc programy niezbyt rozrzutnie gospodarowali EEPROM'em, chyba, że w "requirements" do swej gry zechcą napisać "minimum: N3310". ;-)

Sprawdziłem, że te 46 bajtów dla N5110 jest chyba niezależnie od wersji firmware: sprawdziłem na wersjach 5.22 i 5.30.

Wielkie dzięki, @ yak, za odpowiedź!

Serdecznie Cię pozdrawiam.
_________________
Jarosław Krasuski (jaras)
^
 
 
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-01-18, 14:39   

No tak, do tych wszystkich wartości trzeba dodać 1 (więc dla 5110 to 46, nie 45) bo jeden bajt poszedł na konfigurację tego invert_lcd. Tak naprawdę to poszedł jeden bit ale config IDy korzystając z eeprom IDów alokują z dokładnością do bajta.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do: