PROBLEMY KODERŁW - GBH                                         
D                       PROBLEMY KODERŁW


    W wyniku list˘w kt˘re dostaj‘ zdecydowa’em si‘ na napisanie
tego  materia’u.   Czy  b‘dzie tego ci†g dalszy w 99 procentach
b‘dzie zale§a’o od Was.
    Na  pocz†tek  kilka  informacji  og˘lnych  dla tych, kt˘rzy
kiedykolwiek do mnie pisali lub maj† zamiar napisaŤ.
   1.   Ludzie, uwa§am samego siebie za kompletnego ignoranta w
dziedzinie  programowania  lub  jak kto woli kodowania, dlatego
nigdy nie dam nam˘wic si‘ na prowadzenie lekcji programowania.
   2.   Zaczyna’em  od  1  s’ownie  jednego programu zr˘d’owego
kt˘ry  przypadkiem  znalaz’em na  kt˘rymž z dysk˘w, a kt˘ry by’
jakimž bootmenu
   3.  Jedynymi ksi†§kami z kt˘rych korzystam to:  AMIGA INTERN
tom 1, Motorola 68000, i Przewodnik po Spectrum (jestem ciekawy
czy ktož zgadnie co mo§e si‘ stamt†d przydaŤ).
   4.   Nie posiadam §adnego podr‘cznika do nauki programowania
i   nigdy  czegož  takiego  nie  widzia’em,  musicie  po prostu
logicznie  myžlec i wymienaŤ dožwiadczenia mi‘dzy sob†.  Je§eli
czegož  nie wiesz, przeanalizuj cudzy  program.   W  wi‘kszosci
przypadk˘w,  u   mnie,   prowadzi   to  do  rostroju  nerwowego
i  wy’†czenia  komputera,  a  na  drugi dzie¤ siadam i zaczynam
pisaŤ  wszystko  od pocz†tku, zwykle z wi‘kszym powodzeniem ni§
dzie¤ wczežniej.
   Na koniec dobra rada.  Ježli nie jestež zadowolony ze swoich
produkcji to dla poprawy humoru powinienež sobie  pužciŤ jakiež
stare   demko   (ja  zazwyczaj u§ywam CRYPTOBURNERS MEGADEMO 1)
i pocieszyŤ si‘, §e ka§dy mia’ "trudne dzieci¤stwo".
    To by by’o chyba wszystko.  Ježli ktož jeszcze chce do mnie
napisaŤ to niech chocia§ zrezygnuje z tych pyta¤ na kt˘re da’em
odpowiedzi powy§ej.

    Teraz  chcia’bym  wam  przedstawiŤ  jak  wyobra§am sobie t‘
rubryk‘.
    Nie   mam   zamiaru  opisywaŤ  instrukcji  assemblera,  czy
prowadziŤ  lekcji  programowania.  Chcia’bym §ebyžmy si‘ zaj‘li
pojedynczymi  problemami i zaraz Wam to wyjažni‘. Na ten pomys’
wpad’em dzi‘ki Mr.Petowi z Sanity, kt˘ry zaproponowa’ aby ka§dy
z  nas  (tzn  BC,  Balcer  i  ja) napisa’ pewn† procedur‘.  Jak
zwykle  chodzi’o aby program by’ jak najszybszy.  Niestety nikt
z  nas nie napisa’ procedurki szybszej ni§ ta, z kt˘r† mieližmy
si‘  zmierzyŤ.   Zwykle  což takiego  dzia’a mi troch‘ na nerwy
dlatego  te§  w  domu usiad’em i napisa’em což troch‘ szybszego
chocia§ spos˘b w jaki to zrobi’em wydawa’ mi si‘ troch‘ toporny
(to te§ nie jest w’ažciwe okrežlenie).
    Na  takiej  w’ažnie zasadzie chcia’bym prowadziŤ ten dzia’.
Ka§dy  z  Was  mo§e  zauwa§yŤ  což co mo§na zmieniŤ w programie
innego programisty a co przyniesie jakiež "wymierne rezultaty".
    Teraz  musz‘ Wam wyjawiŤ co to by’a za procedura bo to samo
zadanie  b‘dzie czeka’o  i  Was  z  tym,  §e  Wam b‘dzie troch‘
trudniej.

    Maj†c  wsp˘’rz‘dne  punktu  x,y  w  D0 i D1 postaw punkt na
ekranie.

    Procedura Mr.Peta wygl†da’a nast‘puj†co:

                lea     BitMap,a0       ;adres ekranu
                lea     Y_Pos,a1        ;tabela przesuni‘Ť Y

                move.w  d0,d2           ;zachowaj wsp X
                add.w   d1,d1           ;pomn˘§ wsp Y przez 2
                move.w  0(a1,d1.w),d1   ;pobierz przesuni‘cie
                                        ;dla wsp Y
                lsr.w   #3,d0           ;podziel wsp X przez 8
                add.w   d1,d0           ;dodaj przesuni‘cia
                                        ;dla X i Y
                not.w   d2              ;bity w bajcie s†
                                        ;numerowane w
                                        ;kolejnožci malej†cej
                                        ;wiec musimy wsp X
                                        ;odwr˘ciŤ
                bset    d2,0(a0,d0.w)   ;ustaw bit

   Y_TABELA zawiera wartosci przesuni‘cia y wzgl‘dem pocz†tku
ekanu. 

   Np. dla ekranu o szer. 320 tabela ma postaŤ:
   0,40,80,.....n*40
   gdzie n jest iložci† poziomych linii ekranu
   wartožci przechowywane s† jako s’owa.
   
Jak  widaŤ  z  powy§szego  programu  niezb‘dna by’a tablica dla
wartožci  y.  Pierwotnie moja procedura mia’a dodatkowo r˘wnie§
tablice  dla  x  i  dlatego  by’a  nieco  wolniejsza.  Pobranie
przesuni‘cia  wartožci  x  z  pami‘ci  by’o  d’u§sze  ni§   jej
obliczenie.   Je§eli rezygnacja z tablicy dla x da’a oczekiwane
efekty, to dlaczego nie zrezygnowaŤ z tablicy dla y. Za’˘§my,§e
nasz ekran ma nast‘puj†ce parametry:

                szerokožŤ - 320
                wysokožŤ - 256
                iložŤ plan˘w - 1

Wynika  z  tego  §e  jedna pozioma linia ekranu sk’ada si‘ z 40
bajtow.  Normalne  mno§enie (MULU) trwa’o by jeszcze d’u§ej ni§
pobranie  wyliczonej  wartožci  z  tabeli.   W jaki sp˘sob wi‘c
szybko  pomno§yc  wsp˘’rz‘dn† y przez 40. Odpowied¦ jest bardzo
prosta  -  nie ma takiego  sposobu,  za  to bardzo szybko mo§na
pomno§yŤ  t†  wsp˘’§‘dn† przez 64.  Spytacie co nam to da ježli
ka§da  linia  ekranu sk’ada si‘ tylko z 40 bajtow ?  Ot˘§ ježli
mamy  do  dyspozycj  troch‘  wolnej   pami‘ci  to  mo§emy   tak
skonfigurowaŤ  ekran  aby  zawiera’ nie 40 a 64 bajty w linii z
czego 24  bajty by’yby po prostu omijane przy wyžwietlaniu. Tak
wi‘c  zamiast  mno§enia  czy  pobierania   z  tablicy  wartožci
przesuni‘cia  wzgl‘dem  y  u§ywamy  po prostu  jednej  szybkiej
instrukcji:

                lsl.w   #6,d1

   Po przer˘bce procedura wygl†da tak:

                lea     BitMap,a0
                lea     Y_Pos,a1
                move.w  d0,d2
                lsl.w   #6,d1
                lsr.w   #3,d0
                add.w   d1,d0
                not.w   d2
                bset    d2,0(a0,d0.w)

Dzi‘ki  tej  zmianie  mo§na  postawiŤ  ok. 200 punkt˘w wi‘cej w
czasie  1/50  s.   Rzeczywista  ich  iložŤ  zale§y  od  og˘lnej
struktury  programu.   Mo§e  ktož  z  Was  b‘dzie  wiedzia’ jak
jeszcze mo§na przyspieszyŤ t† procedur‘ ? Ježli tak, to bed‘ mu
wdzi‘czny  ježli zechce podzieliŤ si‘ z nami tymi informacjami,
a  mo§e  ktož  ma  ca’kiem  inn†  koncepcj‘  takiego  programu.
Czekamy  na  Wasze propozycje. Czekamy te§ na Wasze programy, w
kt˘rych  b‘dziemy  mogli  což usprawniŤ. Tych, kt˘rzy zdecyduj†
si‘  do  nas napisaŤ i przys’aŤ swoje propozycje prosimy o opis
tych  program˘w  i  dr‘cz†cych  ich  k’opot˘w zwi†zanych z tymi
programami oczywižcie.

                                           GBH / JOKER
˙