atarionline.pl MAD-Pascal - Początki - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorMADRAFi
      • CommentTime14 Mar 2019 22:03
       
      ok widze musze uzyc dodatkowych przelacznikow kompilatora...
      -code:$address adres uruchomienia programu
      -data:$address adres pamięci dla zmiennych, tablic
      -stack:$address adres pamięci dla stosu programowego (64 bajty)
      -zpage:$address adres na stronie zerowej dla zmiennych (24 bajty)
      • 2: CommentAuthorVidol
      • CommentTime15 Mar 2019 06:03 zmieniony
       
      technicznie wyglada to tak:
      org $6100
      intro ins 'intro25f7-603f.dat.deflate' - spakowane intro
      gra ins 'gra.dat_0.dat.deflate' -spakowana gra

      org $0800
      main mwa #intro inflate_zp
      mwa #$25f7 inflate_zp+2
      jsr inflate ;- rozpakuk intro

      jsr $5000 ;-start intro - intro musi koczyc sie RTS

      mwa #gra inflate_zp
      mwa #$2000 inflate_zp+2
      jsr inflate ;-rozpakuj gre
      jmp $508a ;-uruchom gre

      run main

      • 3: CommentAuthortebe
      • CommentTime15 Mar 2019 07:03 zmieniony
       
      jeśli użyłeś XBIOS-a to oprócz tego że daje on dostęp do pamięci powyżej $C000 (można wyłączyć ROM), to pozwala też na niższy adres początkowy, niższy niż $2000

      Mapa Pamięci przy konfiguracji standardowej xBIOS:
      $0000-$00ff ; free
      $0100-$01ff ; stos 6502C
      $0200-$06ff ; free
      $0700-$07ff ; bufor I/O - relokowany
      $0800-$0bff ; xBIOS - relokowany
      $0c00-$cfff ; free
      $d000-$d7ff ; Atari HW
      $d800-$ffff ; free


      dlatego dziwię się że jeszcze nie użyłeś przełącznika '-code:$0c00', to powinno dać Tobie 5120 bajtów dodatkowej pamięci

      jeśli doczytujesz jakieś grafiki powinieneś przechowywać je w formie najbardziej spakowanej, Bocianu udostępniał przykłady wykorzystania najprostszej metody, kompresji RLE

      XBIOS pozwala też na dekompresję 'w locie', tzn. że nie potrzebujesz dodatkowego bufora, odczyt i dekompresja jest w tym samym czasie
      • 4: CommentAuthorMADRAFi
      • CommentTime15 Mar 2019 12:03 zmieniony
       
      Tebe, jak tylko zobaczylem ten przelacznik to zalapalem ze bede mial jeszcze troche wolnego ramu. Ale nie wpadlbym ktore przedzialy sa jeszcze wolne. Widzialem wczesniej ta rozpiske i o niej zapomnialem. Dzieki bardzo.
      Rozpoczne od relokowania kompilacji loadera i uruchomienia intro przez xbios.
      Grafiki doczytuje z dysku jak tylko jej potrzebuje i nie jest ona spakowana w ramie tylko rozpakowana bo jest wyswietlana.
      Program jest tak rozpasly ze nie mam miejsca na 18-20 grafik 160x100 :)
      • 5:
         
        CommentAuthorgalu
      • CommentTime17 Mar 2019 23:03
       
      Mały update (wideo w.i.p.): ->link<-
      • 6:
         
        CommentAuthorKaz
      • CommentTime18 Mar 2019 02:03 zmieniony
       
      Galu - załóż nowy wątek o grze, bo podejrzewam, że ludzi to zaciekawi, a w wątku o programowaniu to się w oczy w ogóle nie rzuca. A wygląda to świetnie, w końcu ludzie wykorzystują DLI, mocną stronę Atari :D

      PS. Nie czekałem, sam założyłem :)

      ->link<-
      • 7:
         
        CommentAuthorgalu
      • CommentTime20 Mar 2019 19:03
       
      W dokumentacji MP jest taka uwaga: "Program z wstawkami ASM nie będzie działał na innej platformie niż XE/XL. MP wykorzystuje 64KB pamięci podstawowej (...)". Czy da się zapewnić zgodność z Atari 800 (48KB RAM)?
      Pytam bo na razie się odpala w takiej konfiguracji (XEX <10KB), a w tym roku wypada 40-lecie Atari 400/800 :)

      I jeszcze (z ciekawości bardziej niż potrzeby) zapytam o Atari 400 z 16KB RAM i wsparcie dla ładowania z ROM-u ;)
      • 8: CommentAuthortebe
      • CommentTime21 Mar 2019 11:03 zmieniony
       
      nie mam doświadczenia w Atari 400/800 itp. , pewnie jeśli program będzie zajmował odpowiednio mało pamięci to się uda, nie wiem jak z OS bo pewne różnice występowały
      • 9:
         
        CommentAuthorgalu
      • CommentTime28 Mar 2019 19:03 zmieniony
       
      Taki problem:
      Kompresuję - RLE - tablice z definicją poziomów i teraz mam zamiast 100 tablic 60-elementowych (100 leveli, każdy po 10x6 "kratek") 100 tablic różnej wielkości, które dopiero w momencie wczytywania konkretnego poziomu będę rozpakowywał do tablicy 60-elementowej 10x6. Pozwoliło to zaoszczędzić jakieś 3-4 KB "danych", ale za to tych 100 "skompresowanych" tablic nie mogę już trzymać w tablicy pod indeksami z numerami poziomów, nie udało mi się również z tablicą 100 wskaźników (wskaźniki na każdą ze 100 zmiennych przechowujących "skompresowaną" tablicę - pomijam to, że jeśli by to zadziałało to byłby to dodatkowy narzut 400+ bajtów). Do głowy przychodzi mi rozwiązanie z case ze 100 warunkami, ale może da się inaczej? :)
      • 10: CommentAuthortebe
      • CommentTime28 Mar 2019 20:03 zmieniony
       
      nie rozumiem problemu, masz N plików, level000.dat, level001.dat ...

      na podstawie zmiennej N, tworzysz nową nazwę pliku i odczytujesz plik o tej nazwie

      fnam:=concat('level', IntToStr(N) );
      fnam:=concat(fnam, '.dat');


      p.s.
      IntToStr jest w 'SysUtils', można zamiast niego użyć Str, który jest w 'System'

      Str(N, fnam);
      fnam:=concat('level', fnam);
      fnam:=concat(fnam, '.dat');


      ale nie musi to przynieść korzyści w postaci krótszego kodu
      • 11:
         
        CommentAuthorjhusak
      • CommentTime28 Mar 2019 20:03
       
      @galu, jak chcesz to trzymać w pamięci, to masz kilka możliwości:
      - dać tablicę 100 elementową typu word 16 bit wskaźników do leveli (+200 bajtów)
      - dać prefix oznaczający długość danych levelu przed każdym levelem, wtedy poszukiwanie określonego levelu będzie w pętli kręcącej się max 100 razy (+100 bajtów)
      - dać specjalny znak jako przerywnik levelu i wyszukiwać liniowo (+100 bajtów)

      oraz inne, bardziej skomplikowane i mniej oczywiste.
      • 12:
         
        CommentAuthorgalu
      • CommentTime28 Mar 2019 21:03
       
      Dzięki!

      A czy wykorzystanie stringów zamiast tablic wchodzi w grę jeśli "koduję" dane leveli z wykorzystaniem wszystkich 256 wartości (Byte)? Jeszcze dla wyjaśnienia - ja ten kod Pascala z definicją poziomów generuję ze starego kodu gry w Javie, tylko teraz dopisałem "enkoder" który wypluwa dane w takim formacie:
      array[0..13] of Byte = (39, 0, 19, 37, 0, 10, 38, 33, 34, 0, 8, 35, 0, 17);

      a nie bezpośrednio w takim (ten uzyskuję dopiero po "rozpakowaniu" danych w momencie wczytania kolejnego poziomu):
      array[0..5, 0..9] of BlockType = (
      (B__, B__, B__, B__, B__, B__, B__, B__, B__, B__),
      (BEX, B__, B__, B__, B__, B__, B__, B__, B__, B__),
      (B__, B__, B__, B__, B__, B__, B__, B__, B__, B__),
      (BUP, B__, B__, B__, B__, B__, B__, B__, B__, B__),
      (B__, BST, B__, B00, B__, B__, B__, B__, B__, B__),
      (B__, B__, BUL, B__, B__, B__, B__, B__, B__, B__)
      );

      Pytania by nie było jeśli bym mógł te 100 definicji wrzucić np. do jednej tablicy i odpytywać o kolejne jej indeksy (dla kolejnych leveli) - a na razie wygląda to tak:
      var levelEnc1 : array[0..6] of Byte = (0, 32, 34, 38, 39, 0, 25);
      var levelEnc2 : array[0..13] of Byte = (39, 0, 19, 37, 0, 10, 38, 33, 34, 0, 8, 35, 0, 17);
      ...
      • 13: CommentAuthorMADRAFi
      • CommentTime28 Mar 2019 22:03 zmieniony
       
      tablice 2 wymiarowa mozesz zapisac w 1 wymiarowej i wyliczac offset z ktorego masz przeczytac kolejna porcje danych

      jezeli masz tablice 2 wymiarowa 6 na 10 to:

      NUMBEROFLEVELS = 6
      NUMBEROFITEMS = 10
      array [0..(NUMBEROFLEVELS * NUMBEROFITEMS)-1] of BlockType

      for y:=0 to NUMBEROFITEMS-1 do
      begin
      offset:=(NUMBEROFITEMS * level_number) + y;
      end;



      level_number to numer poziomu z ktorego chcesz dostac dane.
      jezeli dany level ma np zmienna liczne "itemow" to w pozostalych pozycjach trzymasz 0.
      W petli czytasz tylko gdy wartosc > 0
      • 14:
         
        CommentAuthorgalu
      • CommentTime29 Mar 2019 07:03 zmieniony
       
      Skorzystałem z sugestii Jakuba (z połączenia dwóch pierwszych sugestii):
      wrzucam wszystkie skompresowane dane do jednej tablicy (~2500 elementów), a do drugiej (100 elementów) - ilość elementów z pierwszej przypadających na kolejny level. Czyli dodatkowe 100 bajtów na dane + dodatkowe 6 linii kodu przy dekompresji.

      Dzięki.
      • 15: CommentAuthorMADRAFi
      • CommentTime30 Mar 2019 23:03 zmieniony
       
      Wiem ze nie Pascal, ale w jakims sensie sie z nim laczy :)

      Probuje wykonac loader do intra i gry.
      W tej chwili loader laduje intro, ale po tym wykonanie programu zatrzymuje sie.
      Nie wiem jak ugrysc problem.

      Probowalem skoku z intro do adresu w pamieci gdzie znajduje sie dalsza czesc loadera, tez nie pomoglo.

      org $0580
      introfile .byte c'INTRO XEX'
      gamefile .byte c'GAME XEX'
      xBiosIOresult .byte
      xBiosIOerror .byte


      loadfile
      mva #0 xBiosIOresult
      sta xBiosIOerror
      adr1 ldy #0
      adr2 ldx #0
      jsr xBIOS_LOAD_FILE
      bcc @+
      stx xBiosIOerror
      mva #1 xBiosIOresult
      @ rts

      main

      jsr printf
      dta c'Loading...',$9b,0
      mva <introfile adr1+1
      mva >introfile adr2+1
      jsr loadfile
      game mva <gamefile adr1+1
      mva >gamefile adr2+1
      jmp loadfile

      run main
      • 16: CommentAuthortebe
      • CommentTime31 Mar 2019 19:03
       
      jsr loadfile

      run main


      to niepokojące
      • 17: CommentAuthorMADRAFi
      • CommentTime31 Mar 2019 19:03
       
      nawet jak zmienie na jmp to nie zmienia to mojego problemu :)
      • 18: CommentAuthorgorgh
      • CommentTime31 Mar 2019 20:03
       
      po powrocie z jsr program leci w maliny, po powrocie z rts to nie wiem gdzie leci, bo nie wiem, jak to wywołujesz
      • 19: CommentAuthorMADRAFi
      • CommentTime31 Mar 2019 20:03 zmieniony
       
      do 1 jsr loadfile dziala poprawnie
      laduje intro.xex, po zakonczeniu intro.xex, program jakby nie wracal juz do loadera lub drugie jsr loadfile nie dzialalo


      loader jest programem Xautorun na dysku atr z xbiosem
      • 20: CommentAuthorpin
      • CommentTime31 Mar 2019 22:03
       
      spokojnie - jak to odpalisz u siebie, to później będziesz odpisywał na pytania userów pt.: dlaczego program się u mnie nie uruchamia ;)
      • 21: CommentAuthorMADRAFi
      • CommentTime31 Mar 2019 22:03
       
      To moze pokazcie jakas alternatywe, bo na razie nie wiem jak to zrobic inaczej - nie mam pomyslu.
      • 22: CommentAuthorpin
      • CommentTime31 Mar 2019 23:03
       
      .. przecież to można złożyć w jeden plik wykonywalny /*.xex/ :)
      • 23: CommentAuthorMADRAFi
      • CommentTime31 Mar 2019 23:03
       
      no wlasnie nie mozna, bo nie wlezie w ram. dlatego taka sztuczka z loaderem.
      • 24: CommentAuthorxxl
      • CommentTime1 Apr 2019 08:04
       
      odpowiedz masz na mailu.

      mozna tez z pliku intro wykonac xBIOS_LOAD_FILE :-) oszczedzisz na loaderze.
      • 25: CommentAuthorMADRAFi
      • CommentTime1 Apr 2019 09:04 zmieniony
       
      To rozwiazanie bylo na poczatku i tez nie zadzialalo.
      Wygladalo na to ze ladowany program nadpisywal intro i sie wszystko zawieszalo.
      • 26: CommentAuthorxxl
      • CommentTime2 Apr 2019 10:04
       
      ogolne uwagi:
      1. jesli uzywamy OS i I/O to trzeba pamietac zeby OS byl wlaczony
      2. jesli uzywamy OS i I/O to nie nadpisujemy waznych dla niego komorek pamieci
      3. jesli uzywamy OS i I/O to musimy miec NMI WŁĄCZONE

      jesli nie lubimy ograniczen to kopiujemy odpowiedni plik cfg dla xBIOS i po sprawie :-)
      • 27: CommentAuthorMADRAFi
      • CommentTime29 Apr 2019 23:04
       
      Chcialbym nauczyc sie wyswietlac grafike z G2F przy uzyciu mad pascala.
      Po zapisaniu grafiki z g2f mam taka liste plikow:

      1. fad
      2. pmf
      3. hcl
      4. asm
      5. h
      6. scr
      7. fnt (3kb plik)

      Skonstruowalem sobie nowe DLI i VBL
      w tym dli ustawiam adres fontu (plik 7)
      Plik scr otwieram sobie w CutAs i wypluwam nim tablice char w formacie mad pascal
      (tu jest problem jak to przyciac by ladnie mi sie pokrylo z 40 znakami w linii)

      jezeli wszystko bedzie ok to pokaze mi sie 2 kolorowy obraz.

      w DLI umiem zmienic kolory ale per linia a nie per char.
      Jak to pokolorowac? :)

      Jakies inne podejscie do tematu?
      • 28: CommentAuthortebe
      • CommentTime30 Apr 2019 10:04
       
      G2F generuje gotowy plik ASM, tam masz wszystko

      plik *.FAD to zapalenie/zgaszenie kolorów, możesz pominąć

      w Special -> możesz wybrać efekt FADE, albo go wyłączyć
      • 29: CommentAuthorMADRAFi
      • CommentTime30 Apr 2019 10:04
       
      Wiem co to plik asm i nie dokonca pasuje mi on do pisania w Pascalu :)
      • 30:
         
        CommentAuthorbocianu
      • CommentTime30 Apr 2019 10:04
       
      no niestety bedziesz się musiał pogodzić z asm troszkę. Możesz podejrzeć w źródłach K-jak, jak ja poradziłem sobie z obrazkiem z g2f:

      ->link<-

      od linii 305 - procedure showTitle;

      Nie mówię, że to idealny sposób - ale działa :D
      • 31: CommentAuthortebe
      • CommentTime30 Apr 2019 12:04
       
      G2F oferuje różne metody, tryby, musisz zrobić jakieś założenie, jeśli chcesz full wypas to najlepiej ASM, możesz zrobić wersję relokowalną .RELOC a potem w kodzie Pascala dolinkować przez .LINK i wykonać skok etc.

      albo przyjmiesz że Twój obrazek jest w konkretnym formacie, w sensie ma np. tylko 5 kolorów, wtedy potrzebujesz zestawy znaków FNT, dane pamięci obrazu SCR oraz układ zestawów znakowych TAB czyli jaki zestaw w którym wierszu obrazu

      jeśli chcesz więcej kolorów, to znów możesz uprościć i założyć że zmiany są tylko na początku wiersza (G2F pozwala na zablokowanie wybranych linii wiersza), dla takiego założenia będzie prościej zbudować program przerwania DLI

      no ale jeśli chcesz dowolnie to tylko ASM

      p.s.
      w przykładach do MadPascala jest ładowanie obrazka z G2F dla VBXE

      examples\examples\pic_vbxe.pas

      zdecydowanie mapa kolorów jest prostsza niż budowanie programu DLI
      • 32: CommentAuthorgorgh
      • CommentTime30 Apr 2019 13:04
       
      wychodzi na to, że jeśli się chce coś poważniejszego napisać, to i tak znajomość asm nieodzowna
      • 33:
         
        CommentAuthorbocianu
      • CommentTime30 Apr 2019 14:04
       
      no niestety, jak chcesz wykorzystać możliwości sprzętu do maksa, to bez asm się nie obejdziesz. Chociażby w szczątkowych ilościach, ale się pojawi.
      • 34: CommentAuthortebe
      • CommentTime30 Apr 2019 15:04 zmieniony
       
      to teraz poproszę solucję jak załadować obrazek G2F w Basicu :P

      p.s.
      jakaś ostatnia gra w TEN LINERS to ASM spakowany jako DATA, a BASIC wywołuje dekompresję i uruchamia kod, więc ...
      • 35: CommentAuthorfalcon030
      • CommentTime1 May 2019 20:05
       
      @tebe: Dla przykładu programy drukowane a TajemicachAtari w sumie korzystały z takiego mechanizmu (Assembler odpalany z poziomu Basica).
      • 36: CommentAuthorMADRAFi
      • CommentTime5 May 2019 23:05 zmieniony
       
      Na podstawie pliku scr stworzylem sobie tablice w mad pascal
      Wyswietlam ja sobie na ekranie - znaki pokrywaja sie z tymi w podladzie w g2f.
      W programie mam jednak obraz nie do konca dzialajacy.
      Nie wiem czy wygenerowany font z programu zawiera tylko prawidlowe znaki opisane jako font1?

      Czy w swoim programie musze jakis offset zrobic dla danych dla fontu2 i kolejnych?
      • 37: CommentAuthorgorgh
      • CommentTime6 May 2019 00:05
       
      wygląda na to, że nie przełączasz nowego zestawu znaków w DLI
      • 38: CommentAuthorMADRAFi
      • CommentTime6 May 2019 11:05
       
      No ale g2f wypluk tylko 1 font 3kb
      Wczytalem gonsobie donpamiecini ustawilem.
      Moze g2f powinien wypluwac wiecej?

      Poza tym ten kawalek consie pokazal w mire to ma inny wyglad niz to co jest w samym programie g2f.
      Chodzi mi o piksele, font ma pionowe linie jakby.
      • 39: CommentAuthorgorgh
      • CommentTime6 May 2019 11:05
       
      na obrazku z g2f widać wyraźnie, że są 3 zestawy fontów (cyferki na lewej krawędzi obrazka- od 0 do 2)
      A niby czemu miałby różne zestawy wypluwać w oddzielnych plikach?
      Czemu inny obrazek? BO TO HIRES
      • 40: CommentAuthortebe
      • CommentTime6 May 2019 11:05
       
      jeden zestaw znaków zajmuje 1KB pamięci (1024 bajty = 128 znaków * 8 bajtów)

      skoro plik ma długość 3KB tzn. że są tam 3 zestawy

      plik *.TAB (30 bajtów) zawiera informacje o numerze zestawu

      bajt 0 oznacza zestaw tab[0] w wierszu 0
      bajt 1 oznacza zestaw tab[1] w wierszu 1
      bajt 2 oznacza zestaw tab[2] w wierszu 2
      itd.
      • 41:
         
        CommentAuthorpirx
      • CommentTime6 May 2019 11:05
       
      przy okazji widać, że warto obrazek trochę przerobić albo i uciąć, żeby się zmieścić w 2 zestawach znaków.
      • 42: CommentAuthorMADRAFi
      • CommentTime6 May 2019 23:05
       
      tebe, nic mi to nie mowi. dlaczego skoro sa 3 zestawy znakow program g2f nie zapisuje 3 plikow fnt ?
      Czy nie mozna napisac normalnej dokumentacji ktora by opisywala jak tego uzywac ?
      Szczegolnie ze autor g2f i mad pascala to ta sama osoba :)
      • 43:
         
        CommentAuthorsun
      • CommentTime7 May 2019 01:05 zmieniony
       
      Ale tu nie ma żadnej magii. Nie ma potrzeby zapisywać 3 plików i dołączać 3 skoro można dołączyć 1. To jakby tryb graficzny np. 192 linie zapisywać w 192 plikach.
      Poza tym, w czym wg Ciebie pomoże Ci zapis 3 plików?
      Musisz sobie co 4 linie (1 zestaw) na DLI zmienić adres generatora znaków o +1kb i będzie ok. Do tego ustawić taki sam tryb jak był w g2f i będziesz miał taki sam obrazek.
      • 44: CommentAuthortebe
      • CommentTime7 May 2019 08:05
       
      G2F zapisuje m.in. 3 pliki -> FNT, SCR, TAB

      te pliki opisują ekran znakowy

      FNT zawiera wszystkie N zestawów znaków, 1024b x N
      SCR zawiera pamięć obrazu, czyli kody znaków ANTIC-a
      TAB tablica z informacją o numerze zestawu znakowego w wierszu

      ten pomysł został zaczerpnięty z tego programu...
      • 45: CommentAuthorMADRAFi
      • CommentTime7 May 2019 16:05
       
      moze dla to so oczywiste oczywistosci, ale sugeruje zrobic manual ktory opisze jak to jest zbudowane.
      Jak korzystac z pliku tab w mad pascal.

      sun:

      Do tego ustawić taki sam tryb jak był w g2f i będziesz miał taki sam obrazek.


      tryb jest ten sam
      40 bajtow na wiersz
      • 46: CommentAuthortebe
      • CommentTime7 May 2019 18:05
       
      przepraszam, poprawię się :)
      • 47:
         
        CommentAuthorsun
      • CommentTime7 May 2019 18:05 zmieniony
       
      Tak Ci się wydaje, ponieważ nie wygląda to tak samo. Znaki wyglądają jakby to był tryb $02 a zapewne ma być $04.
      ->link<-
      Ale... co ja tam wiem, ostatnie takie rzeczy to robiłem 25 lat temu :)
      Zapisz sobie plik asm z g2f to zrozumiesz lepiej o co biega.
      • 48: CommentAuthorMADRAFi
      • CommentTime15 May 2019 19:05
       
      Zrobilem tak jak pisaliscie i wykonalem zmiane fontu po x linii

      phr ; store registers
      mva #.hi(LOGO_CHARSET_ADDRESS) ATARI.chbase
      sta ATARI.WSYNC
      mva #$06 ATARI.colbk
      sta ATARI.colpf2
      mva #$02 ATARI.colpf1

      lda #31
      @ cmp vcount
      bpl @-
      mva #.hi(LOGO_CHARSET_ADDRESS2) ATARI.chbase

      lda #62
      @ cmp vcount
      bpl @-
      mva #.hi(CHARSET_ADDRESS) ATARI.chbase

      plr ; restore registers
      };


      Adresy w pamieci:

      LOGO_CHARSET_ADDRESS  = $DC00;
      LOGO_CHARSET_ADDRESS2 = LOGO_CHARSET_ADDRESS + $400;


      2 font nie jest niestety prawidlowo wyswietlany.
      W tym pojecie nie mam pojecia dlaczego.
      • 49:
         
        CommentAuthorpirx
      • CommentTime16 May 2019 11:05
       
      to się w ogóle wykonuje? pobaw się kolorkami, zobacz gdzie się zmieniają i czy w ogóle.
      • 50: CommentAuthorMADRAFi
      • CommentTime16 May 2019 11:05
       
      Interesuje mnie w tej chwili pokazanie w calosci grafiki, przy uzyciu prawidlowego fontu.