Autor Wątek: dec vs hex czyli wyższość świąt...  (Przeczytany 19779 razy)

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
dec vs hex czyli wyższość świąt...
« dnia: 2013.03.02, 20:40:12 »
ta tlusta skosnooka malolata fajna ale jaki to ma zwiazek?

poza tym artek to fake - nie wierze, ze ktokolwiek z ripperow ;-) uzywa systemu dziesietnego, to jest niemozliwe, niepraktyczne i niekoszerne.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #1 dnia: 2013.03.02, 21:47:09 »
ooo, obrazek sie zmienil... ale tez nie w temacie ;-)

> Ja uzywam licz dzisietnych z powodzeniem.

piszac w asemblerze? nie wierze :p

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #2 dnia: 2013.03.02, 22:35:51 »
Piszę w asemblerze Z80 nie używając liczb szesnastkowych. Napisałem w ten sposób ponad 10 gier.

Notacji szesnastkowej nie lubię, nie używam i nie jest mi ona do niczego potrzebna. W ogóle uważam za pomyłkę że prawie każdy podręcznik do asemblera od tego zaczyna, łącznie z rachunkami na papierze. Kto wie ilu dzieciaków swego czasu to zniechęciło do kodowania...

Notacja dwójkowa to trochę inna sprawa, jak się robi operacje na bitach  to się czasem przydaje.

Natomiast jak widzę jakąś liczbę typu #D9EA to nie mam pojęcia ile to jest i nic mi ten zapis nie pomaga a wręcz utrudnia.

Jak potrzebuje rozbić liczbę na starszy i młodszy bajt to piszę tak: LD HL,64*256+20 A parę najważniejszych adresów znam na pamięć - 16384,18432,20480,22528,32768,49152... :)

Jeśli dobrze rozumiem twoją myśl, to sam zauważasz że to trochę taki lans i szpan. Patrzcie, napisze se OUT (FE),A zamiast OUT (254),A i jestem od razu wielki haker ;)

Ja tam się nie muszę swoim kodem nikomu przypodobywać, piszę jak mi jest wygodniej a autentycznie wygodniej mi stosować notację dziesiętną.








steev

  • *****
  • Wiadomości: 1366
  • Miejsce pobytu:
    inode 42
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #3 dnia: 2013.03.02, 22:49:40 »
Jeśli dobrze rozumiem twoją myśl, to sam zauważasz że to trochę taki lans i szpan. Patrzcie, napisze se OUT (FE),A zamiast OUT (254),A i jestem od razu wielki haker ;)
Wiesz, bez tego lansu projektowanie elektroniki wygląda tak: "- masz to urządzenie na porcie 254. / - yyyyy?"
Z lansem : "- masz to urządzenie na porcie 0xfe. / - ok, czyli a0=0, a8-a15 dowolne..."

Ja tam się nie muszę swoim kodem nikomu przypodobywać, piszę jak mi jest wygodniej a autentycznie wygodniej mi stosować notację dziesiętną.
Każdemu jego porno. Nie musisz, nie stosujesz. :)
Ja w zależności od potrzeby chwili używam  szesnastkowego, dziesiętnego albo dwójkowego.
(za to nie lubię ósemkowego :> )
Machines should work. People should think.

Szuwarek

  • **
  • Wiadomości: 80
  • Miejsce pobytu:
    Rabka-Zdrój
    • http://xxl.atari.pl/
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #4 dnia: 2013.03.03, 00:54:23 »
> Jeśli dobrze rozumiem twoją myśl, to sam zauważasz że to trochę taki lans i szpan.

uzywanie systemu dziesietnego to szpan :-) trzeba miec do tego leb jak sklep...

przykladowo zeby maskowac czy zapalac bity w dowolnej konfiguracji w systemie dziesietnym to musialbym miec kalkulator ;-) szestanstkowo czy binarnie nie trzeba liczyc.
na stronie 0xd0 mam wolne poltorakilobajta... oblicz dziesietnie jaki bedzie adres konca ;-)

nie no... chyle czola :D

optymalizacja programu zrodlowego z wartosciami dziesietnymi :-) naprawde podziwiam :-)
« Ostatnia zmiana: 2013.03.03, 00:56:51 wysłana przez Szuwarek »

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #5 dnia: 2013.03.03, 04:01:26 »
Ja również używam systemu dziesietnego, w Hex jedynie wiem, że 4000 = 16384, 8000 = 32768 i FFFF = 65535.
Kalkulator mam zawsze pod ręką, na pasku na dole ekranu.
AY Music, ULA plus.

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #6 dnia: 2013.03.03, 09:35:17 »
Oczywiście że każdy pisze tak jak lubi. Nazywa się to styl programowania i każdy ma swój własny ;)

Cytuj
masz to urządzenie na porcie 0xfe. / - ok, czyli a0=0, a8-a15 dowolne..."

No widzisz, portów tak naprawdę nigdy porządnie nie ogarnąłem bo chyba nie było mi to potrzebne. Dla mnie #FE=254 to taka magiczna liczba ;) Nie mam pojęcia dlaczego akurat 254 a nie np. 123. Wiem że jak zrobię OUT pod ten adres to zmienię border albo włączę/wyłączę głośnik. Tak samo znam (potrafię odszukać w materiałach) kilka innych magicznych liczb - do czytania określonych klawiszy klawiatury, joysticka, myszy. I tyle. Jak mi czasem napiszą te adresy portów szesnastkowo, to już wkleję na żywca, nie będę konwertował :) ale przy moich zastosowaniach korzyści z tego nie mam żadnej.

A mój kod wygląda mniej więcej tak (piszę po angielsku, bo później udostępniam i chcę by więcej osób skorzystało):

DrawPlayer
;draw player at the position stored in HL
;at the same time store the background on which player is drawn into buffer

LD DE, BackgroundBuffer ;start of background buffer
LD B,48 ;height in lines
EX HL,DE ;buffer in HL, screen in DE

;draw one line of player sprite
DrawPlayer1
LD C,E
 
REPT 4                              ;repeat 4 times (4 bytes in line)
;Background
LD A,(DE) ;background to A
LD (HL),A ;store background to buffer
INC H ;go to mask buffer
;Mask
AND (HL) ;combine it with background
;Sprite
INC H ;go to sprite buffer
OR (HL) ;combine mask+background with sprite
LD (DE),A ;and write it to background

INC E ;next collumn
INC L ;next data byte (no possibility of carry, so no need INC HL)
DEC H ;back to background buffer
DEC H
ENDR ;end of repeat

LD E,C ;restore leftmost byte of the line
CALL OnePixelLineDownDE ;go to next line
DJNZ DrawPlayer1 ;decrease number of lines  to do
RET
;---------------------------------------
DrawBackground
;restore background at position stored in HL

LD DE, BackgroundBuffer ;start of background data
LD B,4 ;width in bytes
LD C,48 ;height in lines

;draw one line of background

DrawBackground1
;(routine can be called here if we want to draw anything other that a background from buffer)
PUSH BC
PUSH HL
DrawBackground2
LD A,(DE) ;read background
LD (HL),A ;and write it to screen

INC L ;next collumn
INC E ;next background byte
                                                                                   (no possibility of carry, so no need INC DE)
DJNZ DrawBackground2

POP HL
POP BC
CALL OnePixelLineDown ;go to next line
DrawBackground3
DEC C ;decrease number of lines left to do
JR NZ,DrawBackground1
RET

;--------------
OnePixelLineDown
;requires HL as screen address

INC H ;go to new line
LD A,H
AND 00000111B ;if last three bits of          h  are  000 -> going to new character line
RET NZ ;new line belongs to the same character line

LD A,L ;going to new character line
ADD A,32
LD L,A
RET C ;going to new screen segment, if e.g h was 71, now it is 72

LD A,H
SUB 8
LD H,A ;decrease h if we are in the same screen segment
RET

Jak widać liczb tam w ogóle nie ma za dużo. Jak są to często małe które w jednym i drugim zapisie wyglądają tak samo. Z wysokością sprajta nie będę się wygłupiał i pisał #30 zamiast 48 bo myślę dziesiętnie i cały czas by mi się zdawało że jest to trzydzieści pikseli. A jak potrzebuję coś zrobić na bitach to piszę dwójkowo: AND 00000111B Naprawdę nie potrzebuje liczb szesnatkowych i nie jest to żaden wyczyn :)


Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #7 dnia: 2013.03.04, 13:51:59 »
... nie wierze, ze ktokolwiek z ripperow ;-) uzywa systemu dziesietnego, to jest niemozliwe, niepraktyczne i niekoszerne.

Takim samym ortodoksami wydają się MAC i AMST - autorzy monitora MAD, który wyświetla tylko w heksie, adresy podaje się w heksie, a jako ustępstwo na rzecz użytkownika ma tylko przeliczanie dec<->hex.
Ale także oni w swoich pracach ładują loader pod 48000, a nie 47872 - co sugerowałoby ORG $BB00, inne pliki pod 49000, a nie 48896 ($BF00), pliki mają długości 1000 bajtów, a nie 1024 ($400) lub inym razem 15550, czy 23500 ;)

Poza portami stosowanie liczb szesnastkowych przydaje się jeszcze w trakcie uruchamiania, jak obserwuje się rejestry w debuggerze. Widać jednocześnie wartość np. HL jak i H i L osobno.
A poza tym?
Pisanie szesnastkowo jest wolniejsze - jest na ogół więcej znaków, bo trzeba dopisać $ (lub #). Ładując jednocześnie dwa rejestry używam liczb szesnastkowych wyłącznie z powodów estetyczno/informacyjnych - żebym wiedział jak będę kiedyś oglądał program, że to nie jest jedna liczba, a LD HL, 64*256+20 wygląda jakoś tak niepoważnie.
Oczywiście większość procedur z ROM wywołuję szesnastkowo, bo tak są w źródle.

Gdyby pisanie liczb dziesiętnie nie było koszerne, to asemblery nie przyjmowały by ich!  :P

pear

  • *****
  • Wiadomości: 5511
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #8 dnia: 2013.03.04, 19:00:33 »
Hex zdecydowanie przydaje się przy zapisie kolorów RGB. Konia z rzędem jak ktoś szybciutko przeliczy dziesiętnie zmianę składowej G o 10% i jednocześnie B o 5% :)
ZX/Enterprise/CPC/Robotron/C128D

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #9 dnia: 2013.03.04, 20:31:13 »
Jasna sprawa. To jakby trzy rejestry na raz ;)
W html-u nawet nie próbowałem zapisywać kolorów dziesiętnie.

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #10 dnia: 2013.03.05, 08:40:27 »
Cytuj
Poza portami stosowanie liczb szesnastkowych przydaje się jeszcze w trakcie uruchamiania, jak obserwuje się rejestry w debuggerze. Widać jednocześnie wartość np. HL jak i H i L osobno.

Rzeczywiście może to być przydatne. Ja też czasem klikam w przycisk przełączający DEC-HEX :) W debuggerze Spectaculatora nie mam np. możliwości zmienić wartość samego rejestru H, mogę zmieniać tylko parę HL, no i wtedy chciał nie chciał przełączam się na HEX, bo szybciej będzie mi przeliczyć nową wartość H na hex niż mnożyć ją przez 256 i dodawać L

W Spinie z kolei mogę przełączać w menu czy chce pokazywać rejestry osobno czy jako pary.

Z kolorami RGB też się zgodzę że może to być przydatne.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #11 dnia: 2013.11.06, 21:42:42 »
Hm... ciekawe jest to, że zapis w Hex i Bin jest stary jak samo programowanie, nawet starszy, a jeszcze nie ustalono standardu jakim prefixem oznaczać liczby w danych systemach. Widziałem też oznaczenie literą h.
W HTML Hex jest to #, w pasmo i debuggerach Spectrum jest $, w starym assemblerze który miałem na kasecie było też #.
Bin zwykle jest %, ale o ile pamięć mnie nie myli spotkałem chyba gdzieś też &
Podobna sytuacja z funkcjami matematycznymi, w szkole uczono mnie zapisywać tangens i cotangens tg i ctg, a tutaj nagle na Spectrum było tan, w kalkulatorze też miałem tan, więc zacząłem tak zapisywać. Nauczyciel nie miał nic przeciw,
za to Allegro i niektóre banki są przeciwne notacji ułamków dziesiętnych. Odruchowo od lat oddzielam je kropką. Allegro jest na tyle wredne, że nie pozwoli wystawić nic za 5.50 zł - wróci całą stronę. Przecinek chyba służy raczej do oddzielania liczb 2, 5, 6.66, 13.72.
« Ostatnia zmiana: 2013.11.06, 21:55:50 wysłana przez Abrimaal »
AY Music, ULA plus.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #12 dnia: 2013.11.06, 21:57:12 »
Hm... ciekawe jest to, że zapis w Hex i Bin jest stary jak samo programowanie, nawet stary jak matematyka, a jeszcze nie ustalono standardu jakim prefixem oznaczać liczby w danych systemach.
W HTML Hex jest to #, w pasmo i debuggerach Spectrum jest $, w starym assemblerze który miałem na kasecie było też #.  Widziałem także oznaczenie literą h.
Bin zwykle jest %, ale o ile pamięć mnie nie myli spotkałem chyba gdzieś też &
Podobna sytuacja z funkcjami matematycznymi, w szkole uczono mnie zapisywać tangens i cotangens tg i ctg, a tutaj nagle na Spectrum było tan, w kalkulatorze też miałem tan, więc zacząłem tak zapisywać. Nauczyciel nie miał nic przeciw.
za to Allegro i niektóre banki są przeciwne notacji ułamków dziesiętnych. Odruchowo od lat oddzielam je kropką. Allegro jest na tyle wredne, że nie pozwoli wystawić nic za 5.50 zł - wróci całą stronę. Przecinek chyba służy raczej do oddzielania liczb 2, 5, 6.66, 13.72.
AY Music, ULA plus.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #13 dnia: 2013.11.06, 22:26:36 »
W CPC hexy się podaję z & na początku, choć niedawno wyczytałem że można też &h ale się z tym nie spotkałem. A na początku binów &x. :)
Ja używam obu systemów, zależnie w którym jakiś numer jest bardziej "okrągły" i łatwiejszy do zapamiętania. :) Hex w liniach data zajmuje mniej miejsca, ale jeszcze mniej jak wcisnę robaczki jednobajtowe. Ci co przeglądali wstawione przeze mnie dsk zauważyli, że wciskam tyle ile się zmieści w linijkach. hehe ;)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

trojacek

  • *****
  • Wiadomości: 6846
  • Miejsce pobytu:
    Warszawa
Odp: dec vs hex czyli wyższość świąt...
« Odpowiedź #14 dnia: 2013.11.06, 22:50:49 »
za to Allegro i niektóre banki są przeciwne notacji ułamków dziesiętnych. Odruchowo od lat oddzielam je kropką. Allegro jest na tyle wredne, że nie pozwoli wystawić nic za 5.50 zł - wróci całą stronę. Przecinek chyba służy raczej do oddzielania liczb 2, 5, 6.66, 13.72.

W języku polskim do oddzielenia części całkowitej od ułamkowej używa się wyłącznie przecinka. Taka jest norma, koniec, kropka.