[CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Kącik dla elektroniki retro - układy, urządzenia, podzespoły, literatura itp.
Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » środa 27 lis 2019, 22:42

♬ ☘ Moja muzyka do kodowania ♬ ♬ ♬ ☘
♫ ♩ ♪ UnicornAvylonia (13th Sign) ♪ ♩ ♫
https://youtu.be/9gZDUPxRExM


Dobry wieczór.

Z tytułowym sterownikiem CA82 to jest troszkę tak, jak z bajkowym jednorożcem.
Niby wszyscy wiedzą, że istnieje, czytali o nim w MIK11, a na EL wrzucono nawet kilka zdjęć, ale działający na żywo egzemplarz to jakoś trudno jest uświadczyć.

Odczekałam cierpliwie stosowny czas, a skoro nigdzie tematu malca CA82 nie podjęto - zapraszam:

:arrow: http://bienata.waw.pl/ca8014.php

Póki co zaliczone pierwsze uruchomienie zdobycznego truchełka po naprawdę długim leżakowaniu. System po drobnej walce jednak wystartował, a to rokuje nadzieję na kolejne porcje atrakcji, którymi jak ufam będę mogła się w tym miejscu podzielić...


#slowanawiatr
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » piątek 29 lis 2019, 21:52

Przepraszam, że tak trochę nie w temacie. Na ilustracji dostrzegłem coś, co ma nalepkę: USB pinter cable. Co to jest? Znaczy spodziewam się, że jest to przejściówka. Czy to sprawnie działa? Jakie są tego cechy?

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » sobota 30 lis 2019, 19:29

No helloł, się znalazłeś w końcu.
Ależ w temacie, jak najbardziej a to z tego względu, że zauważona przejściówka jest rzeczywiście przelotką USB na LPT, ale bez szału, o czym dalej

W sieci masa tego https://www.komputronik.pl/product/1157 ... -1-5m.html cena kilkadziesiąt złotych, w środku (przynajmniej w moich okazach) siedzą układy Prolific PL2305 http://www.prolific.com.tw/US/ShowProdu ... =6&pcid=41 i generalnie wszystko jest super, gdy podłączasz drukarkę lub coś co udaje drukarkę (8bit-dane,strobe,ack,busy, itd...), przykład to ten emulator właśnie, zerknij na schemat - prosty automat zapewnia sekwencje realizującą drukarkowy protokół https://serwis.avt.pl/manuals/AVT270.pdf

Wtedy z poziomu systemu operacyjnego (przy pomocy drivera oczywiście) urządzenie jest widoczne jako port LPT. To znaczy można na to drukować lub wysyłać dane poleceniem copy (dos/win) lub cat/cp (linux), tak właśnie pracuje sobie z emulatorem AVT270 z konsoli

:idea: Urządzenie owe nie nadaje się do aplikacji, które na krótko piszą do portów I/O procesora x86 rozkazami IN,OUT, czyli np. większość domowych programatorów ISP czy z firmowych, software np. do programatora LabTool-41S (i dlatego kupiłam sobie w Chinowie programator na USB :( ) :idea:

Aha, no i Win wymaga instalacji sterowników, Linux ma modułki kernela gotowe do tego typu przelotek i działają prosto z pudełka.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » sobota 30 lis 2019, 20:16

Dzięki za info, jest cenne. Ja właśnie w tym kontekście pytam. Jak zapewne wiesz, mam dobry programator, co programuje wszystko co się rusza, jednak ma jedna wadę: jest na port LPT. Różnej maści interfejsy do układów PLD → są na LPT. To zaczyna robić się pewien problem. Jeszcze mam dwa stare laptopy, które mają na swoim pokładzie złącza LPT i coraz trudniej jest utrzymać je w takim stanie technicznym, by spełniały swoją rolę. Te różne diwajsy podczepiane do LPT wymagają trybu EPP lub ECP. Stąd moje pytanie.
Na filmiku widać, że masz złącze CENTRONIX. Ja potrzebuję złącza typu DB25. Już powoli zaczynałem tracić nadzieję, że problem da się rozwiązać, teraz po Twoich słowach wraca mi nadzieja.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » sobota 30 lis 2019, 20:40

Żebyśmy się dobrze zrozumieli odnośnie tej nadziei - rozważana przelotka nie zadziała w tym artykule :arrow: http://bienata.waw.pl/lpt-xp.php zatem rzucam śmiałą tezę (choć nie mam jak sprawdzić) że nie zadziała na przelotce owej taki kabelek ładujący, jak przykładowo ten: https://blog.hendriklipka.de/archives/2 ... cable.html - on bazuje na bezpośrednim zapisie do I/O, pod adresy 0x378 czy gdzie tam trzeba celnąć... Przelotka nie dodaje portu I/O, dodaje port logiczny...więc panaceum jest jakby częściowym....
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
phill2k
User
User
Posty: 187
Rejestracja: niedziela 18 paź 2015, 00:12

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: phill2k » sobota 30 lis 2019, 21:27

W nawiązaniu do tematu przejściówek USB-LPT to obiecująco wygląda projekt z EP4/2007.
Artykuł -> https://ep.com.pl/files//3353.pdf
Materiały dodatkowe -> https://ep.com.pl/files//8840.rar
projekt już leciwy jak sam port LPT :), ale okazuje się że dzisiaj za grosze u "majfrenda" można kupić praktycznie gotowy moduł.
Sam mam kilka różnej maści urządzeń działających na LPT i szkoda mi ich się pozbywać, tym bardzie że są sprawne, zakupiłem dwa takie moduliki do testów i jestem pełny nadziei :mrgreen: .

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » sobota 30 lis 2019, 23:04

No nikt nie mówił, że będzie łatwo, co nie znaczy, że się nie da. Problem częściej leży w podejściu do problemu niż w samym problemie. Doskonale pamiętam Twój art na temat problemów z LPT, który dał się rozwiązać poprzez zastosowanie GIVEIO, za co chylę czoła. Pamiętam, kilka lat temu używałem procków IP2022 (prod. Ubicom, wcześniej Scenix). Tam również kod programu był ładowany via LPT (miałem odpowiednie interface → samoróbkę). Jakoś to działało. Nie przeczę, że będzie to wymagało ewentualnie trochę badań. Po prostu szukam rozwiązań. Nawet posiadam na tą okoliczność na stanie coś takiego:
ftdi245.JPG
Ładowanie kodu do FLASH IP2022 nie dało się zrobić bez GIVEIO. Układy PLD jakoś dawały radę bez GIVEIO, więc albo XILINX robił to inaczej (bez bezpośredniego grzebania po portach), albo... nie wiem. Jedno jest pewne, że ja będę walczyć do końca, bo coś musi dać się wymyślić.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » niedziela 01 gru 2019, 18:12

Dyskusja zaprawdę ciekawa, nie przeczę, ale Panowie pozwolą że jednak temat zawrócę na pierwotne tory czyli CA82 i okolice...

Proszę, oto eksperyment z podłączeniem modułowych wyświetlaczy DLR1414 do systemu CA82 wespół z prostym programikiem w assemblerze, sztuczka działa pierwszorzędnie, choć zajęła mi znaczną cześć 8255. Podłączenie tego stadka bezpośrednio do szyny zajęłoby mi dla odmiany prawie cały dekoder I/O, no cóż - albo rybki albo staw.

:arrow: http://bienata.waw.pl/ca8014.php#dlr1414
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » środa 04 gru 2019, 22:57

Dobry wieczór.

Ciąg dalszy igraszek z CA82, tym razem eksperyment z melanżem owego komputerka z pakietem SDCC. Minimum assemblera, sporo C i oklepany aczkolwiek wdzięczny temat odliczania czasu i mierzenia temperatury za oknem, zapraszam.

:arrow: http://bienata.waw.pl/ca8014.php#termometr
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » czwartek 05 gru 2019, 02:36

Tak trochę z obawą, bo może nie w temacie...

Z liczeniem na kogoś, to najlepiej wychodzi liczenie na siebie. W kwestii konwersji float'ów na stringi, to ja zawsze liczyłem na siebie.
Mogę podzielić się doświadczeniami:

Kod: Zaznacz cały

unsigned char LCardConv ( unsigned char * IntString ,
                          unsigned char   Length ,
                          unsigned char   ModeChar ,
                          unsigned int    LongCard )
// LCardConv ( ..... ) = false -> jest OK
// LCardConv ( ..... ) = true -> liczba nie zmiescila się na zadanej liczbie pozycji
{
  unsigned char DecLength = Length - 1 ;
  unsigned char Loop ;
  unsigned char Cipher ;
  unsigned char * ChPtr = IntString ;
  /*----------------------------------------------------------*/
  for ( Loop = 0 ; Loop < Length ; Loop ++ )
    * ChPtr ++ = ModeChar ;
  * ChPtr = 0 ;
  for ( ; ; )
  {
    Cipher = ( unsigned char ) ( LongCard % 10 ) ;
    LongCard /= 10 ;
    * ( IntString + DecLength ) = Cipher + 0x30 ;
    if ( ( ! LongCard ) || ( ! DecLength ) )
      break ;
    DecLength -- ;
  } /* for */ ;
  if ( LongCard )
    return ( 1 ) ;
  else
    return ( 0 ) ;
} /* LCardConv */


void RealToString ( unsigned char * RealString ,
                    float           RealValue ,
                    unsigned char   TotalWidth ,
                    unsigned char   APointWidth )
{
  unsigned char * String = RealString ;
  unsigned char Negative ;
  unsigned char Size ;
  unsigned char Loop ;
  unsigned char Over ;
  unsigned int TotalPart ;
  unsigned int FractionalPart ;
  unsigned char Fraction [ 8 ] ;
  /*----------------------------------------------------------*/
  if ( ( TotalWidth < 1 ) || ( APointWidth > 7 ) )
  {
    * String ++ = '.' ;
    * String ++ = 0 ;
    return ;
  } /* if */ ;
  if ( ( APointWidth + 1 ) > TotalWidth )
    APointWidth = TotalWidth - 2 ;
  if ( RealValue < 0.0 )
  {
    Negative = 1 ;
    RealValue = - RealValue ;
  }
  else
    Negative = 0 ;
  TotalPart = ( unsigned int ) RealValue ;
  RealValue -= ( float ) TotalPart ;
  Size = TotalWidth - APointWidth - 1 ;
  Over = 0 ;
  if ( APointWidth > 0 )
  {
    for ( Loop = 0 ; Loop < APointWidth ; Loop ++ )
      RealValue *= 10.0 ;
    FractionalPart = ( unsigned int ) ( RealValue + 0.5 ) ;
    Over = LCardConv ( Fraction , APointWidth , '0' , FractionalPart ) ;
  } /* if */ ;
  if ( Over )
    TotalPart ++ ;
  LCardConv ( RealString , Size , ' ' , TotalPart ) ;
  String = RealString + Size ;
  if ( APointWidth )
  {
    * String ++ = '.' ;
    for ( Loop = 0 ; Loop < APointWidth ; Loop ++ )
      * String ++ = Fraction [ Loop ] ;
  } /* if */ ;
  * String ++ = 0 ;
  if ( Negative )
  {
    String = RealString + 1 ;
    for ( ; ; )
    {
      if ( ( * String ) != ' ' )
      {
        String -- ;
        * String = '-' ;
        break ;
      } /* if */ ;
      String ++ ;
    } /* for */ ;
  } /* if */ ;
} /* RealToString */

RealToString - parametry:
  • RealString -> tablica znakowa wynikowa (musi mieć wystarczającą wielkość by pomieścić całą liczbę znakowo łącznie z przecinkami i minusami z przodu)
  • RealValue -> wartość typu float, dla której należy wykonać konwersję,
  • TotalWidth -> całkowita liczba znaków przeznaczona na konwersję liczby,
  • APointWidth -> liczba znaków części ułamkowej
Przykładowe użycia:

Kod: Zaznacz cały

  unsigned char Number [ 24 ] ;
  RealToString ( Number , 123.9876 , 10 , 3 ) ;    // daje Number = '   123.988'
  RealToString ( Number , 123.9876 , 10 , 4 ) ;    // daje Number = '  123.9876'
  RealToString ( Number , 123.9876 , 12 , 5 ) ;    // daje Number = '   123.98760'
  RealToString ( Number , -123.9876 , 12 , 3 ) ;   // daje Number = '    -123.988'
  RealToString ( Number , 123.9999 , 12 , 3 ) ;    // daje Number = '     124.000'
  RealToString ( Number , -123.9999 , 12 , 3 ) ;   // daje Number = '    -124.000'

Zawsze możesz skorzystać, to zależy jedynie od ciebie.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » sobota 07 gru 2019, 20:00

No więc na wstępie ja przepraszam bardzo za wszelkie nieobyczajne pomruki, które przypadły mi w udziale po załączeniu kodu jak powyżej do testowej aplikacji na CA82, której to pierwsze uruchomienie zakończyło się spektakularnym klopsem.

IMG_6084.JPG


Przyszło mi na szybko zrewidować słuszność dwóch zasadniczych i dotychczas stosowanych doktryn prowincjonalnej deweloperki - `jak się popieści to się zmieści` oraz `alleluja i do przodu`, no jak widać nie do końca.

A na poważne - w tym szczególnym przypadku problemem dla mnie stało się wykorzystanie bibliotecznej funkcji sprintf(), jest mega użyteczna tu nie ma wątpliwości, ale jej zawołanie oznacza dodatkowe ~3.5kb kodu maszynowego! CA82 mam ustawione na 8kb ROM, tyleż obsługuje domyślnie emulator - po prostu nie zauważyłam, że plik *.bin sporo mi przekroczył 8192 bajty i zamiast poprawnie pracować to generował efekty specjalne.
Rozwiązanie okazało się tak proste jak i upierdliwe - napisanie własnych funkcyjek formatujących, w tym przypadku - dla czasu i temperatury - formatTime() oraz formatTemperature() ze wsparciem obsługującej wiodące zera uchToStrLz() .

Finalnie, udało mi się procedurki gawła zaadoptować do własnych potrzeb, działanie testowych konwersji widzimy i na fotce i na filmiku.

float_test1.jpg


CA82, Gawła z Forum uG konwersja float na string, jazda testowa
https://youtu.be/p4gAl0dwuk4

Wykorzystanie że tak ujmę - bojowe - na filmiku kolejnym, gdzie prezentowana jest mierzona za oknem temperatura, a ZIP z tą wersją aplikacji termometru w załączniku.

CA82, Gawła z Forum uG konwersja float na string, zastosowanie
https://youtu.be/-Fm899x1YYg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » sobota 07 gru 2019, 20:24

tasza pisze:Finalnie, udało mi się procedurki gawła zaadoptować do własnych potrzeb, działanie testowych konwersji widzimy i na fotce i na filmiku.

Od tego ma się przyjaciół:
prz.PNG


---edytka---
Chyba masz okna od południa, bo około 7 stopni C to o tej porze to rzadkość, ale na słońcu to całkiem możliwe.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
tasza
Expert
Expert
Posty: 988
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: tasza » sobota 07 gru 2019, 21:31

Okno rzeczywiście od południowej strony, ale pomiary wieczorne są, tylko że mój pokój (pierwsze piętro domku) dokładnie jest nad kuchnią na parterze, a ona o tej porze jest sercem domowego życia, więc z uchylonych wertikali ciepły powiew mi w górę idzie, co nieco zakłóca wyniki pomiarów, stąd poprawka +1..+2 stopnie nawet. Na termometrze wiszącym w ganku było jakieś 5`C.
A procedurki do konwersji fajne są i chętnie skorzystam, kod maszynowy niewielki i w sumie wygodne, warto mieć pod ręką.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

Awatar użytkownika
gaweł
Expert
Expert
Posty: 809
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: [CA80] Uniwersalny sterownik mikroprocesorowy CA82 - freak show

Postautor: gaweł » niedziela 08 gru 2019, 00:45

tasza pisze:A procedurki do konwersji fajne są i chętnie skorzystam, kod maszynowy niewielki i w sumie wygodne, warto mieć pod ręką.

Cieszę się, że do czegoś może ci się to przydać. To rozwiązanie rodem z połowy lat 1990 ma drobną wadę, o której kiedyś pamiętałem, później powoli ulatywało z pamięci. W sumie nigdy mnie to nie dotknęło, ale w twoim przypadku może mieć to jakieś znaczenie, gdyż zauważyłem w przykładach, że zdarza ci się zażądać konwersji bez części ułamkowej. Otóż w takim przypadku może dać nieoczekiwany wynik i by uratować twoje 4 litery (bo po wykryciu zjawiska możesz się niepotrzebnie wkurzyć, mnie by to zdrażniło). W przypadku konwersji z 0-ową liczbą znaków po przecinku, zostanie zrealizowane obcięcie ułamka (zamiast zaokrąglenia). Więc bez zbędnych dywagacji (w końcu czas poprawić coś, co od wielu lat czeka na poprawkę). Ulepszona postać to:

Kod: Zaznacz cały

void RealToString ( unsigned char * RealString ,
                    float           RealValue ,
                    unsigned char   TotalWidth ,
                    unsigned char   APointWidth )
{
  unsigned char * String = RealString ;
  unsigned char Negative ;
  unsigned char Size ;
  unsigned char Loop ;
  unsigned char Over = 0 ;
  unsigned int TotalPart ;
  unsigned int FractionalPart ;
  unsigned char Fraction [ 8 ] ;
  /*----------------------------------------------------------*/
  if ( ( TotalWidth < 1 ) || ( APointWidth > 7 ) )
  {
    * String ++ = '.' ;
    * String ++ = 0 ;
    return ;
  } /* if */ ;
  if ( ( APointWidth + 1 ) > TotalWidth )
    APointWidth = TotalWidth - 2 ;
  if ( RealValue < 0.0 )
  {
    Negative = 1 ;
    RealValue = - RealValue ;
  }
  else
    Negative = 0 ;
  Size = TotalWidth - APointWidth - 1 ;
  if ( APointWidth > 0 )
  {
    TotalPart = ( unsigned int ) RealValue ;
    RealValue -= ( float ) TotalPart ;
    for ( Loop = 0 ; Loop < APointWidth ; Loop ++ )
      RealValue *= 10.0 ;
    FractionalPart = ( unsigned int ) ( RealValue + 0.5 ) ;
    Over = LCardConv ( Fraction , APointWidth , '0' , FractionalPart ) ;
  } /* if ... */
  else
  {
    TotalPart = ( unsigned int ) ( RealValue + 0.5 ) ;
  } /* if */ ;
  if ( Over )
    TotalPart ++ ;
  LCardConv ( RealString , Size , ' ' , TotalPart ) ;
  String = RealString + Size ;
  if ( APointWidth )
  {
    * String ++ = '.' ;
    for ( Loop = 0 ; Loop < APointWidth ; Loop ++ )
      * String ++ = Fraction [ Loop ] ;
  } /* if */ ;
  * String ++ = 0 ;
  if ( Negative )
  {
    String = RealString + 1 ;
    for ( ; ; )
    {
      if ( ( * String ) != ' ' )
      {
        String -- ;
        * String = '-' ;
        break ;
      } /* if */ ;
      String ++ ;
    } /* for */ ;
  } /* if */ ;
} /* RealToString */

Testowo:

Kod: Zaznacz cały

  RealToString ( Number , -123.9999 , 12 , 0 ) ;   // Number = '  -124' , wcześniej wyjdzie '     -123'
  RealToString ( Number , 123.9999 , 12 , 0 ) ;   // Number = '   124', wcześniej wyjdzie '      123'

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse


Wróć do „Retro”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości