
3B38-3B54:
blokuje przerwania IRQ (SEI), wylacza przerwania POKEY'a i ANTIC'a, wylacza DMA obrazu i sprite'ow, zeruje pozycje, szerokosci oraz rejestry graficzne sprite'ow;

3B55-3BF4:
wlacza przerwania i obraz, ustawia DL na 6260, wektor DLI na 3473, wektor VVBLKI na 3901, wektor VIMIRQ na 3AE0, wektory przerwan transmisji szeregowej wartosciami z tabeli 0056, inicjuje PORTA i PORTB w PIA, ustawia WARMST (0008) na #$FF;
dokonuje rowniez nastepujacych przypisan dla kolorow areny:
6122 <= #$00;
6123 <= #$3A;
6124 <= #$0F;
6125 <= #$0F;
6126 <= #$16;

3BF5-3BF8: tablica opoznien (w ramkach VBL) dla czterech temp walki;

3BF9-3CA3: dokonuje opoznienia zaleznego od tempa walki i przelacza bufory obrazu;
-na podstawie tempa walki z 619B pobiera do X opoznienie (w ramkach VBL); jezeli 00D8 <> #0 (czyli zadano cios) to X <= #6 czyli najdluzsze opoznienie;
-czeka, az licznik opoznienia 6121 przekroczy wartosc w X;
3C0A:
-czeka, az licznik linii obrazu VCOUNT bedzie mniejszy niz #$44;
-wywoluje 3CA4, ktora modyfikuje pozniejsze wywolanie 3CAF na 370F (sprawdzenie rownosci komorek 005C oraz BF58, ktore przechowuja numer biezacego obrazka tla);
-zeruje licznik opoznienia 6121;
-jezeli 00D0 <> #5 to:
  -kopiuje obszar 009A-00AA do 00AB-00BB (dane dla sprite'ow,
   z 00AB-00BB sa przepisywane do rejestrow GTIA przez DLI areny);
  -611C <= kolor zawodnika widocznego w calosci;
  -611D <= kolor zawodnika przeslonietego;
-w nastepnych krokach dokonuje przelaczenia buforow graficznych (animacja wymaga dwubuforowania);
-na podstawie numeru (z 6115) aktywnego (do tej pory do zapisu przez CPU) bufora zawodnikow ustawia adresy dla bufora odczytu przez Antic:
  -611E (MSB adresu areny, z ktorej czyta Antic) <= #$18 lub #$08;
  -611F (CHBASE - zestaw znakow areny) <= #$14 lub #$10;
  -6120 (PMBASE - definicje sprite'ow) <= #$08 lub #$00;
-zwieksza 6116 (licznik klatek animacji gwiazdek po upadku zawodnika) o 1;
-wywoluje 370F zapewniajac X=$10 i Y=$FF co jest wymagane dla poprawnosci dzialania 370F; 370F sprawdza rownosci komorek 005C oraz BF58, ktore przechowuja numer biezacego obrazka tla; jezeli komorki nie sa rowne (co sie nie zdarzy jezeli gra nie byla modyfikowana) nastepuje crash;
-neguje numer aktywnego bufora w 6115;
-na podstawie numeru (z 6115) aktywnego (do zapisu przez CPU) bufora zawodnikow ustawia adresy dla bufora zapisu przez CPU:
  -6117 (MSB definicji sprite'ow zwiekszony o #3) <= #$03 lub #$0B;
  -6118 (CHBASE - zestaw znakow areny) <= #$14 lub #$10;
  -6119 (MSB adresu areny, do ktorej zapisuje CPU) <= #$18 lub #$08;
-wywoluje 2771 - wypelnia znakami ekran statusowy przed walka;
-wywoluje 2720 - wypisuje kolor pasa;
-jezeli 00D0 = #5 to 6120 (PMBASE - definicje sprite'ow) <= #$00;
-przywraca wskaznik wywolania 3CAF zamieniony wczesniej na 370F;

3CA4-3CAE:
modyfikuje procedure 3BF9, by ta wywolala 370F zamiast 3CAF;
procedura 3BF9 sama przywraca ustawienie na 3CAF na samym koncu swego dzialania;


3CAF-3CEF: inicjuje zmienne wymagane do animacji zawodnikow na podstawie numerow klatek animacji i przesuniec poziomych;
wolana przez: 2DE1, 2E91, 2EAC, 2EC3, 2EF5;
nie jest wolana przez 3BF9 - jej wywolanie jest zamieniane na wywolanie 370F na czas dzialania 3BF9;
dane wejsciowe:
00DD: numer klatki animacji gracza bialego 0-55;
00DE: numer klatki animacji gracza czerwonego 0-55;
00E0: przesuniecie dla gracza bialego w prawo w pikselach;
00E1: przesuniecie dla gracza czerwonego w prawo w pikselach;
6119: MSB adresu areny, do ktorej zapisuje CPU;
dane wyjsciowe:
006A,006B: adres formy dla gracza bialego;
006C,006D: adres formy dla gracza czerwonego;
0072,0073: adres danych graficznych klatki dla gracza bialego;
0074,0075: adres danych graficznych klatki dla gracza czerwonego;
006E: przesuniecie dla gracza bialego w prawo w znakach;
006F: MSB adresu areny;
0070: przesuniecie dla gracza czerwonego w prawo w znakach;
0071: MSB adresu areny;
w 006E,006F mamy adres pierwszego znaku zawodnika bialego w pierwszej linii areny;
w 0070,0071 mamy adres pierwszego znaku zawodnika czerwonego w pierwszej linii areny;
procedura niszczy zawartosc 00D2;
procedura jest wywolywana dla kazdej klatki animacji;


3CF0-3D03: pusty obszar;


3D04-3E41: procedura wybiera ruch dla zawodnika w 00D2 (o ile jest on sterowany przez komputer) i inicjuje jego wykonanie; procedura "myslenia zawodnika";
jezeli zawodnik jest w trakcie wykonywania ruchu, procedura nie robi nic - wyjatkiem jest sytuacja, kiedy wykonywany ruch moze zostac przerwany (ustawiony bit 4 komorki 6191+Y - Y to numer zawodnika) a przeciwnik jest w trakcie zadawania ciosu;

-00D2 (numer rozpatrywanego zawodnika) zapisuje do Y i 00D4;
-numer przeciwnika (00D2 EOR #1) zapisuje do 6128;
-jezeli 0050+Y <> #0 (czyli zawodnik sterowany przez gracza), to konczy dzialanie;
-wywoluje 3F92 - wyznacza relacje polozen zawodnikow (patrz opis);
-00D2 zapisuje do Y;
-jezeli 6181+Y <> #0 (zawodnik Y wykonuje jakikolwiek ruch) oraz (bit 4 komorki 6191+Y) == #0 (ruchu nie mozna przerwac natychmiastowo - na biezacej klatce), to konczy dzialanie;
-6181+(6128) (biezacy ruch przeciwnika) zapisuje do X;
-jezeli 3E72+X >= #0 (ruch przeciwnika jest ciosem), to:
  -6185+(6128) (licznik klatek bezczynnosci od zatrzymania na klatce ciosu) zapisuje do A;
  -jezeli A < #8, to:
    -jezeli 6136 (odleglosc zawodnikow w znakach) < #9, to:
      -6181+(6128) (biezacy ruch przeciwnika) zapisuje do A;
      -jezeli A == #5 (podciecie) lub A == #$0C (kopniecie w kolano), to:
        -jezeli 6136 (odleglosc zawodnikow w znakach) < #8, to:
          -do A laduje D20A (RANDOM);
          -do X zapisuje 00F6 (poziom umiejetnosci 0-5);
          -jezeli A >= 3E42+X (zawodnik ma zareagowac fachowo na podciecie lub kopniecie), to:
            -(A AND #7) zapisuje do 005D;
            -jezeli (bit 2 komorki 6138) == #0, to:
              -do A zapisuje (6138 AND #3);
            -jezeli (bit 2 komorki 6138) == #1, to:
              -do A zapisuje (6138 AND #3 EOR #3);
powyzsze 2 zabiegi eliminuja sytuacje lustrzane (zamiast 8 mamy 4);
            -przesuwa A o 3 bity w lewo;
            -dodaje 005D do A;
wartosc A jest czesciowo losowa a czesciowo zalezna od ustawienia zawodnikow;
            -zapisuje 3EC8+A (numer ruchu reakcji) do A;
            -skacze do wspolnego zakonczenia procedury;
          -jezeli A < 3E42+X (reakcja nie bedzie fachowa reakcja na podciecie lub kopniecie), to 3D96;
        -jezeli 6136 >= #8, to 3D96;
      -jezeli A <> #5 oraz A <> #$0C, to 3D96:
        -do X zapisuje 00F6 (poziom umiejetnosci 0-5);
        -do A laduje 6141 - nie ma to znaczenia; 
        -do A laduje D20A (RANDOM);
        -jezeli A >= 3E4E+X (zawodnik ma zareagowac fachowo), to:
          -3E6A+(6138) zapisuje do A;
          -jezeli A <> #0 (przeciwnik jest ustawiony przodem do rozpatrywanego zawodnika), to:
            -6181+(6128) (biezacy ruch przeciwnika) zapisuje do Y;
            -do X laduje #8;
            -wywoluje 3F71 (wynik zwraca w X);
            -zapisuje 3E72+Y do A;
            -jezeli A == #0 (ruch przeciwnika jest ciosem powyzej pasa), to:
              -zapisuje 3E9C+X (numer ruchu reakcji) do A;
            -jezeli A <> #0 (ruch przeciwnika jest ciosem ponizej pasa), to:
              -zapisuje 3E94+X (numer ruchu reakcji) do A;
            -skacze do wspolnego zakonczenia procedury;
          -jezeli A == #0 (przeciwnik jest ustawiony tylem do rozpatrywanego zawodnika), to 3DF0 (podejmuje inicjatywe taka, jak dla ustawienia tylem do przeciwnika);
        -jezeli A < 3E4E+X (zawodnik ma nie zareagowac fachowo), to 3DDB (losowo podejmuje inicjatywe);
    -jezeli 6136 (odleglosc zawodnikow w znakach) >= #9, to 3DDB (losowo podejmuje inicjatywe);
  -jezeli A >= #8, to 3DCA;
-jezeli 3E72+X < #0 (ruch przeciwnika nie jest ciosem), to 3DCA:
  -zapisuje 00D2 do Y;
  -jezeli 6181+Y <> #0 (zawodnik Y wykonuje jakikolwiek ruch), procedura konczy dzialanie;
  -jezeli 618B+Y (licznik klatek bezczynnosci) < #$30, to 3DDB:
    -do A laduje D20A (RANDOM);
    -do X zapisuje 00F6;
    -jezeli A < 3E48+X, procedura konczy dzialanie;
  -3E5A+(6138) zapisuje do A;
  -jezeli A <> #0 (zawodnik ustawiony tylem do przeciwnika / musi sie odwrocic), to 3DF0:
    -do X laduje #$0C;
    -wywoluje 3F71 - losuje liczbe 0-$0B (wynik zwraca w X);
    -jezeli 6136 (odleglosc zawodnikow w znakach) < #8, to:
      -zapisuje 3EB0+X do A;
    -jezeli 6136 (odleglosc zawodnikow w znakach) >= #8, to:
      -zapisuje 3EA4+X do A;
    -skacze do wspolnego zakonczenia procedury;
  -jezeli A == #0 (zawodnik ustawiony przedem do przeciwnika), to:
    -jezeli 6136 (odleglosc zawodnikow w znakach) >= #$0A to:
      -do X laduje #$0C;
      -wywoluje 3F71 (wynik zwraca w X);
      -zapisuje 3EBC+X do A;
      -skacze do wspolnego zakonczenia procedury;
    -jezeli 6136 (odleglosc zawodnikow w znakach) < #$0A to:
      -3F66+(6136) zapisuje do 005D;
      -3E54+(00F6) zapisuje do X;
      -wywoluje 3F71 (wynik zwraca w X);
      -zapisuje X do A;
      -dodaje 005D do A;
      -3EE8+A zapisuje do A;
      -wykonuje wspolne zakonczenie procedury;
-wspolne zakonczenie procedury (od adresu 3E32):
  -zapisuje 00D2 do Y;
  -zapisuje A do 00EC+Y;
  -wywoluje 2783 (czyli 530F) - inicjuje wykonanie przez zawodnika sekwencji klatek ruchu o numerze podanym w 00EC+Y;
  -zapisuje 00D2 do Y;
  -zeruje 00EC+Y;


3E42-3F70: tablica wykorzystywana przez 3D04;

3E42-3E47: tabela prawdopodobienstw niefachowej reakcji na podciecie (#5) lub kopniecie w kolano (#$0C) zaleznych od poziomu umiejetnosci;
           F0 A0 60 20 10 00
3E48-3E4D: tabela prawdopodobienstw nie rozpoczecia ruchu, gdy licznik klatek bezczynnosci < #$30 i przeciwnik nie zadaje ciosu, zaleznych od poziomu umiejetnosci;
           E8 D0 80 40 10 10
3E4E-3E53: tabela prawdopodobienstw niefachowej reakcji na ciosy inne od podciecia (#5) lub kopniecia w kolano (#$0C) zaleznych od poziomu umiejetnosci;
           E0 D0 60 40 20 10
3E54-3E59: tablica zakresow losowosci inicjatywy wybieranej z tablicy 3EE8, zaleznych od poziomu umiejetnosci;
           0C 0A 08 08 06 06
3E5A-3E69: tablica (pierwsze 8 bajtow) wskazuje (#1) ustawienia zawodnikow (0-7 - patrz opis 6138), w ktorych rozpatrywany zawodnik jest ustawiony tylem do przeciwnika, czyli ustawienia wymagajace odwrocenia sie rozpatrywanego zawodnika;
           00 00 01 01 01 01 00 00
           01 00 01 01 01 01 00 01
3E6A-3E71: tablica wskazuje (#1) ustawienia zawodnikow (0-7 - patrz opis 6138), w ktorych przeciwnik jest ustawiony przodem do rozpatrywanego zawodnika;
           00 01 00 01 01 00 01 00
3E72-3E93: tablica decyzyjna indeksowana przez numer ciosu przeciwnika;
$FF - ruch nie jest ciosem;
$00 - cios powyzej pasa;
$01 - cios ponizej pasa (podciecie, kopniecie w kolano);
           FF FF 00 FF 00 01 00 FF 00 00 FF 00 01 00 01 00
           FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
           FF FF
3E94-3E9B: reakcje na cios ponizej pasa;
           05 05 1B 10 14 14 06 1E
3E9C-3EA3: reakcje na cios powyzej pasa;
           01 01 10 1B 01 10 01 0C
3EA4-3EAF: inicjatywa zawodnika, gdy ustawiony tylem do przeciwnika, odleglosc >= 8 znakow i przeciwnik nie zadaje ciosu;
           19 19 10 1B 19 19 19 19 19 19 0D 1A
3EB0-3EBB: inicjatywa zawodnika, gdy ustawiony tylem do przeciwnika, odleglosc < 8 znakow i przeciwnik nie zadaje ciosu;
           19 19 19 0D 08 0E 0E 0D 1B 19 08 1A
3EBC-3EC7: inicjatywa zawodnika, gdy ustawiony przodem do przeciwnika, odleglosc >= 10 znakow i przeciwnik nie zadaje ciosu;
           1D 1A 1A 1A 0A 09 1D 1D 0A 1B 1A 1A
3EC8-3EE7: reakcje na podciecie lub kopniecie w kolano;
           09 0A 05 06 02 0F 1E 0C 21 21 22 22 06 21 10 09
           19 08 10 0D 1D 0E 0D 10 21 21 21 22 10 0D 08 22
3EE8-3F65: inicjatywa zawodnika, gdy ustawiony przodem do przeciwnika, odleglosc < 10 znakow i przeciwnik nie zadaje ciosu;
           0E 0E 1B 10 0A 1B 1B 1A 10 0C 1B 10 1B 0C 0C 1B
           1B 0A 10 1B 0A 02 1B 0C 1E 02 0C 05 1B 0B 0C 0B
           02 10 1B 02 1E 02 06 05 0B 04 1B 1A 05 06 05 10
           09 04 06 0C 0B 0F 1E 06 0B 05 0C 1A 09 0C 0F 05
           06 02 05 1E 1D 10 0A 04 1D 09 05 09 05 06 0A 1A
           0C 0F 1A 04 09 09 05 05 1A 0F 1D 06 0C 1A 09 1B
           09 0A 1A 09 1A 1D 0F 09 05 1A 0A 1B 1A 1D 1A 1A
           09 09 1A 0A 0A 1B 1A 1A 1A 0A 0A 1B 1A 1A
3F66-3F70: tablica indeksow pomocniczych do tablicy 3EE8, zaleznych od odleglosci zawodnikow w znakach (0-9);
           00 0C 18 24 30 3C 48 54 60 6C 6C


3F71-3F91: procedura losuje i zwraca w X wartosc z zakresu 0 - X-1;
procedura wykonuje sie przez pewien losowy czas i zwraca w X pewna losowa wartosc, wszystko zalezne jest od wejsciowej wartosci X - patrz opis nizej;
wyjsciowa wartosc X jest zawsze z zakresu od 0 do wejsciowej wartosci X - 1;
dane wejsciowe: X;
dane wyjsciowe: X;
-pobiera do A wartosc D20A (RANDOM) ograniczona do zakresu 0-31;
-jezeli A < X, to zapisuje A do X i konczy;
-wartosc A ogranicza do zakresu 0-15 oraz AND'uje z wartoscia D40B (VCOUNT);
-jezeli A < X, to zapisuje A do X i konczy;
-powtarza wszystko w kolko;


3F92-400A: wyznacza relacje polozen zawodnikow;

bez tej procedury zawodnik komputera "slepnie"; po otrzymaniu ciosu zawodnik (obojetne ktory) czasem upada w zla strone (na drugiego zawodnika);

UWAGA: okreslenie "zawodnik zadajacy cios" nalezy tu rowniez rozumiec jako "rozpatrywany zawodnik" - w tej sytuacji "zawodnik nie zadajacy ciosu" to "przeciwnik rozpatrywanego zawodnika";

dane wejsciowe:
Y: numer zawodnika zadajacego cios;
dane wyjsciowe:
6136: bezwgladna roznica miedzy 6139 i 613A podzielona przez 4 (czyli w znakach)
6137: bezwgladna roznica miedzy 6139 i 613A (w pikselach);
6138:
-bit 0 - orientacja gracza nie zadajacego ciosu;
-bit 1 - orientacja gracza zadajacego cios;
-bit 2 - 1 = gracz zadajacy cios jest na prawo wzgledem drugiego, 0 = gracz zadajacy cios jest na lewo wzgledem drugiego, wyznaczone na podstawie znaku roznicy 6139 - 613A;
6139: polozenie poziome punktu oddalonego od konca gracza o 12 pikseli (3 znaki) w strone srodka gracza - dla gracza zadajacego cios;
613A: polozenie poziome punktu oddalonego od konca gracza o 12 pikseli (3 znaki) w strone srodka gracza - dla gracza nie zadajacego ciosu;
613B: numer zawodnika zadajacego cios;
613C: numer zawodnika nie zadajacego ciosu;
A = 6138:

-zapisuje X na stos;
-zapisuje Y (numer zawodnika zadajacego cios) do 613B;
-zapisuje numer pozostalego zawodnika do 613C;
-jezeli orientacja gracza zadajacego cios == #0 (w prawo) to do 6139 pozycje pozioma zwiekszona o #12;
-jezeli orientacja gracza zadajacego cios == #1 (w lewo) to do 6139 pozycje pozioma zwiekszona o #36 i zmniejszona o #13 (czyli zwiekszona o #23);
-jezeli orientacja gracza nie zadajacego ciosu == #0 (w prawo) to do 613A pozycje pozioma zwiekszona o #12;
-jezeli orientacja gracza nie zadajacego ciosu == #1 (w lewo) to do 613A pozycje pozioma zwiekszona o #36 i zmniejszona o #12 (czyli zwiekszona o #24);
-do 6137 zapisuje roznice 6139 - 613A;
-jezeli 6137 >= #0, ustawia bit 2 w 6138 na 1, w przeciwnym razie na 0;
-do bitu 1 w 6138 wstawia orientacje gracza zadajacego cios;
-do bitu 0 w 6138 wstawia orientacje gracza nie zadajacego ciosu;
-pozostale bity 6138 sa wyzerowane;
-jezeli 6137 < #0, zmienia znak liczby i zapisuje do 6137 (czyli 6137 bedzie zawsze dodatnia);
-6137 podzielona przez 4 zapisuje do 6136;
-przywraca X ze stosu;
-do Y pobiera zawartosc 613B (numer zawodnika zadajacego cios);
-do A pobiera zawartosc 6138;
-konczy dzialanie;


400B-415C: tablice danych potrzebnych do wykrywania kolizji zawodnikow i celnosci ciosow;

400B-4013: tablica 9 numerow klatek, w ktorych zawodnik zadaje cios drugiemu - praktycznie 8 klatek bo ostatni numer to #$FF;
400B-4013: 0B 0E 10 12 14 15 16 20 FF
opis ruchow, do ktorych naleza klatki w tabeli 400B - indeksy odpowiadaja wartosciom komorki 00D5:
0: obrot o 360 stopni i kopniecie w twarz;
1: kopniecie w brzuch;
2: kopniecie w twarz;
3: uderzenie piescia w brzuch, obrot w tyl i uderzenie piescia w brzuch;
4: uderzenie piescia w twarz, obrot w tyl i uderzenie piescia w twarz;
5: kopniecie w kolano, obrot w tyl i kopniecie w kolano;
6: wyskok;
7: podciecie;
4014-401B: przesuniecia punktu odniesienia wzgledem tylu zawodnika zadajacego cios;
4014-401B: 22 23 21 1E 17 1B 1C 24
401C-4023: tablica przypisujaca iteracje petli wyszukujacej kolizje do poszczegolnych ciosow (poprzez ustawienie flagi bitowej iteracji - patrz tabela 405C); jak widac 1 lub 2 iteracje sa przypisywane do danego ciosu - a wiec cios moze godzic w co najwyzej 2 rozlaczne obszary przeciwnika;
401C-4023: 20 30 20 30 10 0C 20 03
4024-402B: toleracje celnosci ciosow (w pikselach) dla HALF POINT
4024-402B: 06 07 05 06 05 04 06 04
402C-4033: toleracje celnosci ciosow (w pikselach) dla FULL POINT
402C-4033: 03 03 03 03 03 02 03 02
4034-403B: nalezne za cios setki punktow, gdy FULL POINT
4034-403B: 10 02 08 04 08 02 10 04
403C-4043: nalezne za cios setki punktow, gdy HALF POINT
403C-4043: 05 01 04 02 04 01 05 02
4044-404B: nalezne za cios setki punktow, gdy FULL POINT i dwoch graczy
4044-404B: 05 01 04 02 04 01 05 02
404C-4053: nalezne za cios setki punktow, gdy HALF POINT i dwoch graczy
404C-4053: 03 00 02 01 02 00 03 01
4054-405B: przesuniecia polozen dla punktow za cios wyswietlanych na arenie - wykorzystywane tylko pierwsze 4;
4054-405B: 00 00 00 00 FC FC 06 06
405C-4061: flagi bitowe dla iteracji (0-5) petli wyszukujacej kolizje;
405C-4061: 20 10 08 04 02 01
4062-4081: tablica numerow ruchow upadku po otrzymaniu ciosu, zaleznych od rodzaju ciosu i ustawienia zawodnikow; bajt o indeksie (numer ciosu * 4) + 612B przepisywany jest do 6130;
4062-4081: 11 12 12 11 11 12 12 11 11 12 12 11 11 13 13 11
           11 12 12 11 11 1F 1F 11 11 12 12 11 11 1F 1F 11
4082-40BA: tablica klatek wrazliwych na cios; tablica o rozmiarze rownym ilosci wszystkich klatek ruchu zawodnika; jezeli odpowiedni bajt ma wartosc #$FF to klatka nie jest wrazliwa na cios, w przeciwnym razie bajt wskazuje numer wiersz w tabeli 40BB;
4082-40BA: 00 01 02 03 FF 04 05 06 07 08 09 0A 0B 0C 0D 0E
           0F 10 11 12 13 14 15 16 FF FF FF FF FF FF 17 00
           18 19 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
           FF FF 00 00 00 00 FF FF FF
40BB-415C: przesuniecia punktu odniesienia wzgledem tylu zawodnika nie zadajacego ciosu dla 6 iteracji petli wyszukujacej kolizje i 26 wrazliwych na cios klatek;
40BB-415C: 0D 0E 0A 12 04 16  ;0
           0B 0B 0A 10 04 12  ;1
           09 0A 0A 0C 04 0D  ;2
           09 0A 0B 0D 07 05  ;3
           0C 0D 0D 0C 0B 0B  ;4
           80 0C 12 11 11 11  ;5
           07 0C 10 0F 0D 10  ;6
           0B 0C 0A 12 09 80  ;7
           80 16 0D 0B 0B 0B  ;8
           80 0C 05 03 03 03  ;9
           80 0C 11 0F 0D 0F  ;10
           09 0A 07 0E 03 11  ;11
           07 0A 0B 09 09 80  ;12
           08 11 12 11 10 12  ;13
           0A 0A 0E 10 03 10  ;14
           06 0E 0F 12 0F 12  ;15
           80 07 06 0E 04 0E  ;16
           80 13 0F 14 03 14  ;17
           80 80 0A 12 03 16  ;18
           0B 0C 08 10 04 10  ;19
           07 0A 0A 0D 0B 0C  ;20
           0A 0A 80 80 80 80  ;21
           80 09 80 80 80 80  ;22
           0B 09 0A 0F 06 0E  ;23
           80 80 0A 0F 0C 12  ;24
           80 09 08 80 07 80  ;25
           80 0F 0A 0F 0C 12  ;26 = $1A


415D-4309: procedura bada, ktory z zawodnikow zadal cios i wyznacza jego skutki; uzywa tablic z obszaru 400B-415C; uzywa procedury 3F92;
dane wejsciowe:
00DD,00DE,00E0,00E1,00E2,00E3: numery klatek, polozenia i orientacje;
6115: numer aktywnego bufora graficznego do zapisu przez CPU, wykorzystany jako losowy numer zawodnika ktory zostanie sprawdzony jako pierwszy, czy zadal cios;
6185,6186: ?;
dane wyjsciowe:
00D2: numer zawodnika zadajacego cios;
00D4: numer zawodnika zadajacego cios;
00D5: numer ciosu;
00D8: wartosc ciosu, 0-brak, 1-HALF POINT, 2-FULL POINT;
6114: patrz opis ponizej;
6128-6130: patrz opis ponizej;
6132: patrz opis ponizej;
6136-613C: patrz opis proc. 3F92;
613F-6140: patrz opis ponizej;
6144: patrz opis ponizej;
6151: patrz opis ponizej;

-zapisuje #0 do 00D8 (co oznacza, ze cios nie zostal zadany);
-sprawdza, czy ktorykolwiek z zawodnikow ma biezaca klatke nalezaca do tablicy 400B, czyli czy ktorykolwiek z zawodnikow zadaje cios; w pierwszej kolejnosci sprawdza klatke zawodnika o numerze z 6115 (losowa wartosc z zakresu 0-1, numer aktywnego bufora graficznego); numer badanego gracza zapisuje w 00D2;
-jezeli zaden z zawodnikow nie zadaje ciosu, to konczy dzialanie;
-jezeli znajdzie gracza zadajacego cios:
  -w 00D4 umieszcza numer zawodnika zadajacego cios,
  -w 00D5 numer ciosu (0-8 [faktycznie 0-7]), jest to tez indeks klatki zadajacej cios w tabeli 400B;
-jezeli zawartosc 6185 (gdy cios zadaje bialy) lub 6186 (gdy cios zadaje czerwony) >= #2, nie uznaje zadanego ciosu i wraca do sprawdzania, czy pozostaly zawodnik zadaje cios (konczy dzialanie, gdy sprwdzala wlasnie drugiego zawodnika);
-zapisuje do 6128 numer zawodnika, ktory nie zadaje ciosu;
-pobiera do A bajt z tabeli 4082 o indeksie rownym numerowi klatki zawodnika nie zadajacego ciosu;
-jezeli A < #0, konczy dzialanie;
-jezeli A == #$18 (podciecie) i 00D5 == #3 (uderzenie w brzuch), zapisuje #$1A do 6129; w przeciwnym razie zapisuje A do 6129;
-pobiera do Y zawartosc 00D4 (numer zawodnika zadajacego cios) i wywoluje 3F92;
-wynik zwrocony przez 3F92 w A and'owany z liczba #3 (czyli bity orientacji - patrz opis 3F92) zapisuje do 612B (orientacje zawodnikow);
-jezeli 6129 == #$13 i (6138 == #0 lub 6138 == #7), zapisuje #0 do 6129; 6138 == #0 oznacza, ze obaj zawodnicy sa zwroceni w prawo i zadajacy cios stoi za drugim; 6138 == #1 oznacza, ze obaj zawodnicy sa zwroceni w lewo i zadajacy cios stoi za drugim;
-do 612C zapisuje bajt z 4024[00D5];
-do 612D zapisuje bajt z 402C[00D5];
-jezeli orientacja zawodnika zadajacego cios == #1 (w lewo), polozenie poziome zawodnika zwiekszone o #36 i zmniejszone o liczbe z 4014[00D5] zapisuje do 612E;
-jezeli orientacja zawodnika zadajacego cios == #0 (w prawo), polozenie poziome zawodnika zwiekszone o liczbe z 4014[00D5] zapisuje do 612E;
-zapisuje #0 do 00D6 (licznik petli) i wykonuje petle dopoki 00D6 < #6 czyli 6 razy - kazda iteracja zwieksza 00D6 o 1;
-petla wyszukujaca kolizje:
-jezeli 405C[00D6] AND 401C[00D5] == #0 to przechodzi do nastepnej iteracji - tu jest ustalane, ktore iteracje przynaleza do poszczegolnych ciosow; tylko 1 lub 2 iteracje sa przypisywane do danego ciosu - a wiec cios moze godzic w co najwyzej 2 rozlaczne obszary przeciwnika;
-do 005D zapisuje 40BB[6129 * #6 + 00D6], jezeli jest to liczba nieujemna, w przeciwnym razie przechodzi do nastepnej iteracji;
-jezeli orientacja zawodnika nie zadajacego ciosu == #1 (w lewo), polozenie poziome zawodnika zwiekszone o #36 i zmniejszone o liczbe z 005D zapisuje do 612F;
-jezeli orientacja zawodnika nie zadajacego ciosu == #0 (w prawo), polozenie poziome zawodnika zwiekszone o liczbe z 005D zapisuje do 612F;
-jezeli zawodnik zadajacy cios zwrocony w prawo a nie zadajacy zwrocony w lewo, do 612A zapisuje (612E - 612F);
-jezeli obaj zawodnicy zwroceni w prawo, do 612A zapisuje (612E - 612F + 612C);
-jezeli zawodnik zadajacy cios zwrocony w lewo a nie zadajacy zwrocony w prawo, do 612A zapisuje (612F - 612E);
-jezeli obaj zawodnicy zwroceni w lewo, do 612A zapisuje (612F - 612E + 612C);
-jezeli 612A < #0, przechodzi do nastepnej iteracji;
-jezeli 612A > 612C, przechodzi do nastepnej iteracji;
-jezeli 612A < 612D, jest FULL POINT:
  -zapisuje 403C[00D5] do 6132 - nalezne za cios setki punktow;
  -zapisuje 404C[00D5] do 613F - nalezne za cios setki punktow, gdy dwoch graczy;
  -zapisuje #1 do 00D8 (wartosc ciosu 0-2);
-w przeciwnym razie jest HALF POINT:
  -zapisuje 4034[00D5] do 6132 - nalezne za cios setki punktow;
  -zapisuje 4044[00D5] do 613F - nalezne za cios setki punktow, gdy dwoch graczy;
  -zapisuje #2 do 00D8 (wartosc ciosu 0-2);
-zapisjue #0 do 00DB;
-zapisuje 00D4 (numer zawodnika zadajacego cios) do 6151 i 6114;
-zapisuje 00D8 (wartosc ciosu 0-2) do 6144;
-zapisuje 4062[00D5 * #4 + 612B] do 6130 (numer ruchu upadku po otrzymaniu ciosu) (612B to orientacje zawodnikow);
-zapisuje polozenie poziome zawodnika zadajacego cios odzielone przez 4 (polozenie znakowe) zwiekszone o 4054[612B] i ograniczone do przedzialu [#4,#$27] do 6140 (pozioma pozycja dla wyswietlanej na arenie liczby punktow);
-zwieksza 00D6 o 1;
-jezeli 00D6 >= #6 to konczy sie petla, w przeciwnym razie wykonywana jest nastepna iteracja;



430A-4353: procedura przelacza ekran na Display Liste 4354 i wyswietla napis "ONE MOMENT";

4354-4363: Display Lista wyswietlajaca napis "ONE MOMENT" lub "DISK OR DRIVE ERROR";
4364-4377: napis "DISK OR DRIVE ERROR";
4378-438B: napis "ONE MOMENT";

438C-442E: procedura probuje wczytac obrazek tla o numerze nastepnym po wskazywanym przez 005C (ale tylko z zakresu 0-6);
numer obrazka do zaladowania umieszcza w 613D; jezeli wczytywanie sie powiedzie, numer ten umieszcza w 005C;
procedura zwraca w 619C #00, gdy wczytywanie sie powiedzie lub kod bledu SIO (>=#$80) w przeciwnym razie;
-procedura dokonuje przypisan:
619C <= #00
619D <= #01
-wyswietla napis "ONE MOMENT" przy pomocy procedury 430A;
-przy pomocy procedury 442F wczytuje obrazek pod 0400; procedura ta zwraca flage N ustawiona na 0, gdy ladowanie udane lub ustawiona na 1 w przeciwnym razie; dodatkowo w przypadku bledu wpisuje jego kod do 619C;
-jezeli wczytywanie powiodlo sie oraz numer kontrolny obrazka w jego tresci (teraz pod adresem 1358) odpowiada numerowi obrazka, ktory mial byc wczytany, kopiuje dane obrazka (4kB) z 0400 do B000;
-wylacza ekran poprzez 278C;
-kasuje bufor 0400-1AFF poprzez 278F;
-jezeli 619F=#00 to wywoluje 2786 czyli inicjuje scene przed walka (arena i status);
-ustawia numer biezacego obrazka 005C na numer obrazka znajdujacego sie pod B000, pobierajac jego numer kontrolny (jezeli ladowanie sie nie powiodlo, to jest tam poprzedni obrazek);
-dokonuje przypisan:
619D <= #00
619E <= #00
619F <= #00
-kasuje wykorzystany przez 442F obszar systemowy 0300-031A;

439B-442E: procedura probuje wczytac obrazek tla o numerze #0;
wiekszosc kodu jest wspolna z 438C; rozni sie tym, ze ustawia w 613D numer #00 - numer obrazka do wczytania, a takze ustawia 619F na #01, co powoduje, ze pozniej nie wywola 2786, ktora inicjuje scene przed walka (arena i status); jezeli biezacy obrazek to wlasnie obrazek o numerze #0, to nie wczytuje go;
wywoluje sama siebie (jmp 439B - zapetla sie bez mozliwosci wyjscia) w sytuacji blednej gdy BF58 >= 7; BF58 to biezacy numer obrazka tla;

442F-4490: procedura laduje obrazek o numerze podanym w 613D do bufora 0400-13FF;
procedura wykorzystuje systemowa procedure DISKINT E453; blok sterujacy dla E453 jest przygotowywany w obszarze 4491-449C i kopiowany do 0300-030B; numer pierwszego sektora dysku dla danego obrazka wyznaczany jest w taki sposob, ze starszy bajt tego numeru jest ustawiany na #01 a mlodszy jest pobierany z tablicy 449D; jezeli ladowanie sie nie powiedzie, procedura ustawia w Display Liscie 4354 adres napisu "DISK OR DRIVE ERROR" oraz zapisuje do 619C status operacji SIO zwrocony przez DISKINT (#$01, gdy ok lub >= #$80, gdy blad); na zakonczenie procedura blokuje przerwania POKEY'a; procedura zwraca w Y zawartosc 619C;

4491-449C: blok sterujacy dla DISKINT;

449D-44A4: tablica mlodszych bajtow numerow poczatkowych sektorow poszczegolnych obrazkow na dysku;


44A5-44AD: tablica wykorzystywana przez 4502;
44AE-44EF: dane do wywietlenia czerwonych i zoltych pol punktow za ciosy przy pomocy duszkow;

44F0-4501: nanosi na ekran czerwone pola dla punktow za ciosy;
do wyswietlania czerwonych pol wykorzystywane sa duszki 1 i 3;

4502-4530: nanosi na ekran zolte (swiecace) pola dla punktow za ciosy;
do wyswietlania zoltych pol wykorzystywane sa duszki 0 i 2;
6144 - liczba punktow za cios (wartosc ciosu), o jaka nalezy zwiekszyc ilosc punktow za cios zawodnika;
00D2 - numer zawodnika (0 - bialy, 1 - czerwony);
00D9 - liczba punktow zawodnika bialego (0-5, full point = 2);
00DA - liczba punktow zawodnika czerwonego (0-5, full point = 2);

4531-4536: tablica wykorzystywana przez procedure 4537;

4537-45CB: zwieksza i wyswietla licznik punktow wybranego zawodnika;
jezeli DB <> #00 to wyjscie z procedury;
00DB <= 6132;
6132 - liczba setek, o jaka nalezy zwiekszyc licznik punktow zawodnika (BCD);
00D2 - numer zawodnika (0 - bialy, 1 - czerwony);
6145,6147 - licznik setek punktow zawodnika bialego zdobytych w rundzie (BCD);
6146,6148 - licznik setek punktow zawodnika czerwonego zdobytych w rundzie (BCD);
00F7,00F8,00F9 - (ekranowy) licznik punktow zawodnika bialego (BCD 6 cyfr); zlicza punkty z calego turnieju;
00FA,00FB,00FC - (ekranowy) licznik punktow zawodnika czerwonego (BCD 6 cyfr); zlicza punkty z calego turnieju;
najstarsze bajty licznikow maja najnizsze adresy;
cyfry 0-9 zajmuja znaki #0-#9 generatora znakow; spacja ma kod #0A;
znaki czerwone sa wyswietlane poprzez zapalenie bitu 7 w kodzie znaku;
procedura po wypisaniu punktow na ekranie kasuje poczatkowe zera;

45CC-45F0: wyswietla dziadka;
wpisuje obraz dziadka 3x4 znaki do bufora areny, ktorej adres jest
w 6119; wykorzystuje znaki o kodach: #FF ... #F4 czyli w rzeczywistosci: #7F ... #74;

45F1-4650: dane wygladu dziadka;

4651-465F: kopiuje dane wygladu dziadka do generatorow znakow dla obu aren, konkretnie do obszarow 13A0-13FF i 17A0-17FF;

4660-4679: wyswietla ilosc zdobytych punktow;
wpisuje obraz liczby zdobytych punktow 1x4 znaki do bufora areny, ktorej adres jest w 6119; obraz wpisuje do 5 linii poczawszy od pozycji o numerze podanym w 6140; wykorzystuje znaki o kodach #B0 ... #B3 czyli w rzeczywistosci #30 ... #33; 

467A-46EF: dane do obrazow zdobytych punktow;

46F0-4711: kopiuje dane obrazu zdobytych punktow do generatorow znakow obu aren, konkretnie do obszarow 1180-119F i 1580-159F; w A dostarczany jest numer obrazu punktow w zakresie #00-#05; wykorzystuje dane z tablicy 467A;

4712-4743: dane do cyfr bonusu w dymku (5 bajtow-linii na cyfre);
4744-474D: wskazniki na dane poszczegolnych cyfr;

474E-4786: wpisuje do tresci dymka wysokosc bonusu;
liczba setek bonusu w kodzie BCD znajduje sie w 614F;
procedura wykorzystuje dane do znakow z tabeli 4712 oraz tabele 4744;

4787-47A6: wyswietla dymek z mowa dziadka;
rysuje prostokat 2 linie x 6 znakow poczawszy od 33 znaku 3 linii areny w obu buforach areny; wykorzystuje znaki o kodach: #BF, #BE, ..., #B4
czyli w rzeczywistosci: #3F ... #34;

47A7-4A12: definicje znakow do dymkow dziadka;
0:  WHITE
1:  WHITE
2:  RED
3:  BEGIN
4:  STOP
5:  HALF POINT
6:  FULL POINT
7:  FULL POINT - ale niewidoczny, pusty komunikat
8:  GET READY - ale wymaga innego szyku znakow w dymku, niz daje 4787;
9:  TOO SLOW
10: xx00 BONUS
11: WHITE WINS
12: WHITE WINS
13: RED WINS
14: MATCH OVER
15: GO
16: DRAW


4A13-4A34: adresy defincji znakow dla poszczegolnych dymkow;
4A13 : A7 47 A7 47 C0 47 D9 47 F2 47 0B 48 42 48 42 48
4A23 : B0 48 79 48 1E 49 55 49 55 49 8C 49 C3 49 E7 48
4A33 : FA 49

4A35-4A46:
18 18 18 18 18 36 36 00 36 36 36 36 36 36 36 36 18 00

4A47-4ABB: przygotowuje tresc dymka mowy dziadka;
w A dostarczany jest numer dymka w zakresie #$00 do #$10;
przygotowuje pusty dymek wywolujac 4ADC (tresc 12 znakow w obszarach
11A0-11FF i 15A0-15FF);
kopiuje do tych obszarow dane z tabeli 47A7 przy wykorzystaniu tabel
4A13 i 4A35 oraz numeru dymka podanego w A;
jezeli numer dymka = #0A to dodaje do dymka wysokosc bonusu wywolujac 474E;

4ABC-4ACB i 4ACC-4ADB: tablice wykorzystywane przez 4ADC;

4ADC-4B12: kopiuje tresc 12 znakow pustego dymka w obszary
11A0-11FF i 15A0-15FF; wykorzystuje tablice 4ABC-4ACB i 4ACC-4ADB;

4B13-4BEF: umieszcza w buforze areny znaki tworzace forme gracza o numerze w 00D2 (patrz: "proc_4B13.txt");


4BF0-4E84: (patrz: ponizej oraz "proc_4D10.txt");

4C54-4C94: odpowiedzialna za animowane gwiazdki (patrz: "proc_4D10.txt");
4CD6-4D0F: (patrz: "proc_4D10.txt");
4D10-4E79: wypelnia znaki tworzace forme gracza w buforze areny (patrz: "proc_4D10.txt");


4E85-4F8B: (patrz: "proc_4E9F.txt");

4F8C-5083: (patrz: "proc_4F9C.txt");

5084-50E5: (patrz: "proc_5084.txt");


50E6-51B3: inicjuje tablice: 1B00, 1C00, 1D00, 1E00, 6300, 6600, 6700, 9C00, 9D00, 9E00 oraz 48-znakowe bufory pustych linii obrazu: 0E27 - linia w kolorze areny czyli 0, boki w kolorze czarnym czyli 1, 0E57 - cala linia w kolorze czarnym czyli 1;

51B4-51BF: pusty obszar;
