Gruzińskie Noce 01, czyli Nerdy Nights po polsku
Gruzińskie Noce 01, czyli Nerdy Nights po polsku
« dnia: Maj 25, 2016, 13:12:52 »
Zjednoczeni bracia w Pegazus!
Według internetów to najlepszy poradnik tworzenia gier na NESa, autorstwa bunnyboya z Nintendo Age. Bierzcie i korzystajcie z tego wszyscy. Mam nadzieję, że komukolwiek się przyda.

Teksty wszystkich Gruzińskich Nocy powstawały przez ok rok na emu-nes. Główny materiał tłumaczyłem ja, ale merytoryczną wartość zawdzięczamy panu bunnyboy z nintendoage oraz kilku chłopa z rodzimych forów. Głównie byli to Dizzy9 i siudym, ale swoje ważne trzy grosze dorzucili także Berion, Daf, Helper, Koks i MWK (kolejność alfabetyczna).

Bunnyboy często opisuje trochę koślawo pewne rzeczy, które na naszym emu-nesie były zrobione na medal, dlatego poradnik nie jest zrobiony w skali 1:1. Są wstawki z forum, ominięte nie używane rzeczy i dodana literatura dla głodnych wiedzy. Wszystko za zgodą i poparciem autora.
Dobrych nocy!


Tydzień 1: Systemy liczbowe i podstawowe pojęcia w programowaniu

Systemy Liczbowe

Dziesiętny

Podstawą systemu dziesiętnego jest 10. Znaki w tym systemie przyjmują wartości od 0 do 9. Każde miejsce w liczbie jest 10 razy większe od sąsiada z prawej (i mniejsze 10x od sąsiedniej cyfry z lewej). 
Jeśli do 10 dostawisz zero z prawej wyjdzie 100, czyli 10 razy większa.
Jeśli od 10 usuniesz 0 z prawej to wyjdzie 1, czyli 10 razy mniejsza.
miejsce 100’ek    miejsce 10’ek    miejsce 1’ek
    0                        0                 1            = 001
    0                        1                 0            = 010
    1                        0                 0            = 100

Aby uzyskać wartość, jaką przedstawia liczba mnożymy znak (w dziesiętnym jest to cyfra 0-9) razy 10 do potęgi takiej, które miejsce zajmuje cyfra licząc od prawej. Kolejno:
1 (bo 10^0=1)
10 (bo 10^1=10)
100 (bo 10^2=100)
...

miejsce 100’ek    miejsce 10’ek    miejsce 1’ek
    3                        8                  0      = 3*100 + 8*10 + 0*1 = 380
    0                        4                  1      = 0*100 + 4*10 + 1*1 = 41


Binarny

W komputerach wszystko dzieje się na 2jkach, czyli binarnie, 2 w podstawie. To najprostsza rzecz jaką rozumie komputer; jak pstryczek od światła ON / OFF, 1/0.
System binarny (o podstawie 2) działa w ten sam sposób, co dziesiętny, tyle że jest mniej cyfr, bo 2 (a nie 10).
Jeśli do 10 (w dziesiętnym to 2) dostawisz zero z prawej wyjdzie 100 (w dziesiętnym to 4), czyli 2 razy większa.
Jeśli od 10 usuniesz 0 z prawej to wyjdzie 1, czyli 2 razy mniejsza..
 
Aby uzyskać wartość, jaką przedstawia liczba mnożymy znak (0 albo 1) razy 2 do potęgi takiej, które miejsce zajmuje cyfra licząc od prawej. Kolejno:
1(bo 2^0=1)
2(bo 2^1=1)
4(bo 2^2=4)
8(bo 2^3=8)

miejsce 8’ek    miejsce 4’ek    miejsce 2’ek    miejsce 1’ek
      0                  1                  0                    0          = 0*8 + 1*4 + 0*2 + 0*1 = 4
      1                  1                  1                    1          = 1*8 + 1*4 + 1*2 + 1*1 = 15

NES działa na systemie 8 bit, co oznacza, że liczby na których operuje mają 8 binarnych(dwójkowych) cyfr długości. Przykłady poniżej:

Binarny        Dziesiętny
00000000 =  0
00001111 =  15
00010000 =  16
10101010 =  170
11111111 =  255

Po czasie zaczniesz szybko odczytywać liczby binarne, a co najmniej rozpoznawać pewne schematy. Jak widzisz bajt może mieć tylko wartości 0 – 255. Dla większych liczb, musisz użyć dwóch, lub więcej bajtów. No i nie ma liczb ujemnych, ale o tym później.


Szesnastkowy

Heksadecymalny / Hex ma w podstawie 16, więc każda z cyfr przyjmuje wartości 0 – 15.
Problem we wstawieniu wartości 10 i więcej do jednego znaku rozwiązano literami, zamiast cyfr:

Dziesiętny   Hex
    0       =    0
    1       =    1
    9       =    9
   10      =    A
   11      =    B
   12      =    C
   14      =    D
   14      =    E
   15      =    F

Każde miejsce cyfry(jednego znaku) w liczbie to kolejna potęga 16tki. Kolejno od prawej:
1(bo 16^0=1)
16(bo 16^1=16)

miejsce 16'ek   miejsce 1'ek
     6                    A          = 6*16 + A(10)*1 = 106
     1                    0          = 1*16 +     0*1 = 16

Hex jest częściej używany, bo jest o wiele szybszy w zapisie, niż binarny. 8 cyfr liczby binarnej wymienia się na dwie cyfry szesnastkowej.
Binarny        01101010
podziel         |     |
w połowie      /       \
               0110     1010
na             |         |
hex            6         A
               |         |
i              \        /
złóż               6A


01101010 = 6A


Kilka przykładów:

Binarny       Hex   Dziesiętny
00000000 = 00  = 0
00001111 = 0F  = 15
00010000 = 10  = 16
10101010 = AA  = 170
11111111 = FF  = 255

Do łatwego przechodzenia między tymi systemami możesz użyć kalkulatora z Windowsa na widoku programisty przełączając między Hex, Dec i Bin.

Żeby umożliwić rozpoznanie w jakim systemie zapisana jest liczba dopisuje się dodatkowy znak. Binarny jest często z prefixem %, np. %00001111. Hex ma $, czyli $2A. Jest wiele konwencji, np. Dopisek na końcu do binarnego b, czyli 00001111b a do hex’a h, czyli 2Ah.

NES ma 16sto bitową szynę adresową (szegóły później), więc ma dostęp do 2^16 bajtów pamięci. 16 binarnych cyfr zmienia w 4 hex’owe znaki, więc typowy adres wygląda jak $8000, $FFFF i $4017.


Podstawowe pojęcia w programowaniu

Wszystkie języki programowania mają trzy podstawowe pojęcia. Są nimi instrukcje, zmienne I przepływ sterowania. Jeśli brakuje czegoś z tych trzech – nie jest to już prawdziwy język programowania. Takim przykładem jest HTML, który nie ma określonego przepływu sterowania, więc nie jest językiem.

Instrukcje
Instrukcje to najmniejsze komendy jakie wykonuje processor. Na raz występuje jedna tylko instrukcja i są wykonywane jedna po drugiej. Procesor NES’a ma tylko 56 instrukcji. Przeważnie około 10 z nich będzie używanyh ciągle i minimum 10 z nich kompletnie zignorujemy. Przykładami może być odawanie, wczytywanie liczby, czy porównywanie zmiennej do zera.

Zmienne
Zmienna to miejsce gdzie przechowywane są dane, które mogą być zmieniane (edytowane).Przykładem może być pionowa pozycja Mario na ekranie. Może być zmieniana w każdej chwili podczas gry. Zmienne w kodzie źródłowym mogą mieć takie nazwy jakie im nadasz, więc coś koło MarioPionPozycja

Przepływ sterowania
Normalnie twoje instrukcje lecą w kolejności jedna po drugiej. Czasem będziesz chciał użyć innej części kodu w zależności od zmiennej. Będzie to wyrażenie przepływu sterowania, które zmieni normalny przepływ twojego programu. Przykładowo, kiedy Mario spada, skocz do części kodu, która sprawdza, czy już dotknął podłoża.


Literatura uzupełniająca:
Oryginał [eng]:
http://www.nintendoage.com/forum/messageview.cfm?catid=22&threadid=4147
« Ostatnia zmiana: Maj 26, 2016, 01:39:17 wysłana przez 1990in1 »