Oznámení

Sbalit
Aktuálně žádná oznámení.

Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

    O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

    Sledujem to tu aktivne a Lisiak mas moj obdiv ze mas chut sa ucit nieco nove. Ja by som to uz vzdal.

    P.S. Myslim ze assembler by si uz mal zvladnuty a uz by si sa hral z HW .
    A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

    Komentovat


      O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

      No v kóde Amiga C (alebo skor v jeho logike) sa už nejako zorientovávám. To znamená že meniť a opravovať ho by som už mohol zvládnuť. Teraz ide o to, či ho dokážem aj sám tvoriť. To všetko ukáže čas, ešte je moc skoro. Zatiaľ sa aj za pomoci DJM posúvam v pochopení celého programu na stisk klávesy ďalej a ďalej. Ide to pomaly, čo je u mňa normálne. Iný by to zvládli rýchlejšie (pokiaľ by to zvládli). Ale aj v Pythone som zo začiatku postupoval veľmi pomaly. Oveľa pomalšie, ako teraz v C. Python mám ale vydrilovaný. Počet hodín, čo mám v Pythone naprogramovaných sa pohybuje v rozsahu 10 až 20 tisíc za 6 možno aj 7 rokov (a len 4 hotové programy - textová hra, program do práce a 2 animácie na RESET). Takže tento rok bol vlastne veľmi úspešný!
      Amiga - PMD 85

      Komentovat


        O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

        Všetko má svoj čas, odštartovanie Kafasoftu na RESETkání 2017, pokiaľ budem vedieť sám v Amiga C tvoriť, vidím stále ako reálne.
        Amiga - PMD 85

        Komentovat


          O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

          KBD_READMATRIX:

          Klikni pro plné zobrazení obrázku

Jméno: KBD_READMATRIX.jpg
Počet zobrazení: 1
Velikost: 64,4 KB
ID: 108513


          Z Amiga PROFI:
          Vlastní čtení provede funkce DoIO() nebo SendIO(). Tyto provádějí totéž, ale nejsou identické.
          Funkce SendIO() načítá data asynchronně - zatímco zařízení „console.device“ snímá klávesnici, program může provádět něco jiného.
          Funkce DoIO() je synchronní - dokud uživatel něco nenapíše, je program blokován.
          Code:
          //naplnenie matice a test klaves
          KeyboardIO->io_Data    = KeyboardMatrix;
          KeyboardIO->io_Length  = 16;
          KeyboardIO->io_Flags   = 0;
          KeyboardIO->io_Command = KBD_READMATRIX;
          DoIO((struct IORequest *)KeyboardIO);
          Amiga - PMD 85

          Komentovat


            O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

            Code:
            Koniec:
                     //zrusenie keyboardu
                     if(KeyboardIO) { DeleteIORequest((struct IOStdReq *)KeyboardIO); KeyboardIO=NULL; }
                     if(KeyboardMsgPort) { DeleteMsgPort(KeyboardMsgPort); KeyboardMsgPort=NULL; }
            Nerozumim tomu, prečo sa pointer KeyboardIO prevádza zo štruktúry IORequest na štruktúru IOStdReq, keď vstupnou hodnotou funkcie DeleteIORequest() je štruktúra IORequest. Neviem ako to teraz napísať, ale može sa teda ako vstup funkcie zadať "rozvetvenie" štruktúry IORequest čo je práve štrukrúra IOStdReq? Nestačí na zrušenie všetkých prepínačov, ktoré sú práve v štruktúre IOStdReq zrušenie struktúry IORequest? Pokiaľ nestačí a možeme na vstup funkcie použiť aj "rozvetvenú" štruktúru, tak OK a beriem na vedomie že sa takto veci musia robiť.
            Amiga - PMD 85

            Komentovat


              O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

              Autorem citovaného textu je DJM Přejít na původní příspěvek
              V SAS C sa standartne robi kopia adresara starter_project. Kopiu si premenujes na nazov svojho projektu a potrebne casti programu ukladas do tohto adresara.
              Ten adresar obsahuje ikonky s odkazmi pre editor (sc:c/se),build,debugger,atd...
              OK, kompilácia v takomto adresáry mi funguje, pokiaľ použijem kompiláciu cez ikonu BUILD, ale pokiaľ kompilujem pomocou PravaAmiga B (čo je v emulátore znak pravý Win+B), tak aby mi to našlo súbor a zkompilovalo, musím mať zatiaľ súbor na kompiláciu v adresáry: SASC6.50/c/ a nie v adresáry: SASC6.50/s_project/, ale to je asi problém nastavenia ciest.

              Program na test klávesy A,B,A+B a ESCAPE (viz história vlákna) funguje pekne. Z programu som potom z časti zrušenia keyboardu vyhodil pretypovanie na štruktúru IOStdReq a ponechal teda štruktúru IORequest. Ešte som neskúšal, v akom stave zostanú prepínače zo štruktúry IOStdReq (nožno nabudúce), ale program funguje. Rozhodne zadanie pretypovania, ktoré som z programu vyhodil neni chyba, ale nejako sa začat hrať musím a ja som začal napríklad tu .
              Amiga - PMD 85

              Komentovat


                O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                Tak som skúsil pristúpiť k prepínačom. V rámci štruktúry IOStdReq je to naviac prepínač io_Data a io_Length.

                Asi som zadal nie zrovna šťastne "%c":
                printf("%c", KeyboardIO->io_Data);

                vypísal sa mi 1 znak, ten bol ale rovnaký pri zadaní vstupnej hodnoty funkcie DeleteIORequest() ako u IOStdReq, tak aj u IORequest. Zmena znaku nastala, až keď som vynechal použitie funkcie DeleteIORequest().

                u druhého prepínača:
                printf("%i", KeyboardIO->io_Length);

                mi pri rovnakom postupe ako u prepínača io_Data bola vypísaná v oboch prípadoch hodnota 16255708. Zmena hodnoty nastala, až keď som vynechal použitie funkcie DeleteIORequest(), kde sa vypísala hodnota 16.

                Zatiaľ je teda aj pri použití štruktúry IOStdReq a následnom zadaní vstupnej hodnoty funkcie DeleteIORequest() ako IORequest chovanie rovnaké, ako u zadaní vstupnej hodnoty IOStdReq pre túto funkciu.

                V rámci logiky to teda vyzerá tak, že nám stačí na zrušenie hlavnej štruktúry použit ktorúkoľvek zo štruktúr (minimálne pokiaľ boli použité), ktoré k nej patria, čím si možeme ušetriť 1 pretypovanie. Aspoň štruktúra IORequest sa takto zatiaľ chová.

                OK, dosť bolo sa hrania s týmto .
                Naposledy upravil Lisiak; 08.08.2015, 12:35:42.
                Amiga - PMD 85

                Komentovat


                  O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                  K tomu SAS C:

                  Mas v S:user-startup nieco taketo ? :

                  ;BEGIN SAS/C
                  assign sc: Programming:C++/SasC6.5
                  assign lib: sc:lib
                  assign include: sc:include
                  path sc:c add
                  ;END SAS/C

                  Samozrejme Programming:C++/SasC6.5 nahradis cestou,kde to mas umiestnene ty...
                  Dolezity riadok koli comu ti to asi nefunguje som zvyraznil.

                  K tomu dalsiemu:

                  Neviem preco premenne volas prepinace. Ved na io_Data sa nastavuje nase 16bytove pole, do ktoreho sa uklada pripadne stlacenie klavesy.
                  Podla tych tvojich "hrani" mi pripada,ze vobec nevies co robis. Ked raz alokujes napriklad long, tak musis vratit long, nie byte. Potom by ti 3 byty ostali "visiet" v pamati po ukonceni programu. Takisto ked alokujes nejaku strukturu, tak ju musis vratit taku istu.

                  IOStdReq sa pouziva preto, lebo pouziva este io_Data a dalsie, ktore potrebujeme v nasom programe.

                  Tym ze pouzijes DeleteIORequest() nemozes cakat nejake ine premenne ked to pomocou tejto funkcie vymazes !

                  ...
                  ...
                  ...
                  Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                  Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                  Komentovat


                    O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                    Autorem citovaného textu je DJM Přejít na původní příspěvek
                    Neviem preco premenne volas prepinace.
                    OK, premenne (všimol si si že už funkcie volám správne? )

                    Podla tych tvojich "hrani" mi pripada,ze vobec nevies co robis. Ked raz alokujes napriklad long, tak musis vratit long, nie byte. Potom by ti 3 byty ostali "visiet" v pamati po ukonceni programu. Takisto ked alokujes nejaku strukturu, tak ju musis vratit taku istu.
                    Však som sa pýtal . Nestačí, že to z programu vyčítam, musím mať, pokiaľ sa mi niečo nezdá ešte aspoň raz overené systémom otázka->odpoveď a to si teraz urobil.

                    Ja viem, že ma vždy pekne "prefackáš", keď napíšem/urobím nejakú hovadinu, ale potom už ju neopakujem, minimálne robím všetko pre to aby to tak bolo!

                    Díky!
                    Amiga - PMD 85

                    Komentovat


                      O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                      Niekedy ma zaskocis, ale to "prefackanie" si neber k srdcu, ani som to tak nemyslel ak to nahodou tak vyznelo.
                      Neni som ucitel, len sa ti snazim poradit...
                      Uz by si mohol postupit od testu klavesy dalej a skusat si nejake jednoduche programy.
                      To SAS C si neskusal ?
                      Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                      Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                      Komentovat


                        O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                        SAS C som neskúšal, určite je to tým, čo si písal, ale kompilovanie mi funguje, tak to neriešim, ale ďakujem za tvoje riešenie! Dnes som urobil jednoduché úpravy v tom programe na test klávesy. Takže mi to testuje klávesy Q,A,O,P,Q+P a ESC. Ten program si omielam dokola, aby som do neho stále viac a viac videl. To, že program zvládnem čítať po programátorskej stránke neznamená, že mu celému rozumiem a tak sa na všetko snažím si zodpovedať. Úplne na všetko. Je doležité všetkému rozumieť od začiatku, aby som neprenášal nejaké chyby do dalšieho programu/kódu.

                        Teraz najnovšie pozerám na to makro, viem ho prečítať, ale neviem, prečo sa tam X delí práve číslom 8, potom sa tam robí bytový súčin práve číslom 7 a aj dalšie kroky čo tam sú. Na ďalšiu vec, čo sa chcem zamerať je, že sa v programe musí kliknúť mimo aktívne okno, aby začal fungovať, takže ako mám docieliť toho, aby som tak nemusel urobiť a program mi na test klávesy fungoval hneď po spustení.

                        Ale ako píšem, pozerám sa, niesom v situácii, kedy by som u seba mal potvrdené, že s tým nedokážem pohnúť.

                        Buď v kľude, ja som v pohode, veľmi si vážim toho, že mi tu pomáhaš. Bez Teba by som bol v rámci Amiga C v prdeli, takže asi tak.
                        Amiga - PMD 85

                        Komentovat


                          O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                          Ako si si všimol, pokusím sa začať nabalovať ten program na test klávesy, keď mu budem poriadne rozumieť.
                          Amiga - PMD 85

                          Komentovat


                            O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                            Autorem citovaného textu je Lisiak4 Přejít na původní příspěvek
                            Teraz najnovšie pozerám na to makro, viem ho prečítať, ale neviem, prečo sa tam X delí práve číslom 8, potom sa tam robí bytový súčin práve číslom 7 a aj dalšie kroky čo tam sú. Na ďalšiu vec, čo sa chcem zamerať je, že sa v programe musí kliknúť mimo aktívne okno, aby začal fungovať, takže ako mám docieliť toho, aby som tak nemusel urobiť a program mi na test klávesy fungoval hneď po spustení.
                            V tom makre sa vybera ktory bit v ktorom byte chces testovat. Bytov je 16 ( nase pole KeyboardMatrix ). Cize X>>3 sa vyberie byte ( vysledok 0-15 ) a ten dalsi posuv zas vybera bit (0-7).Pouzivaju sa posuvy lebo je to rychlejsie ako delenie. Deleniu sa treba v programoch vyhybat, lebo je to najvacsie spomalovatko. V prispevku #169 si dal grab obrazovky s KBD_READMATRIX, kde to mas vysvetlene v io_data ( zas musim len podotknut, aby si pouzival autodocs ). Prakticky BYTE vyberes ( X/8 ) a BIT ( X MOD 8 ) ( MOD = zvysok po deleni ).

                            V programe sa NEMUSI ( ! ) kliknut mimo aktivne okno, aby zacal fungovat.Program funguje hned po spusteni. Ide akurat o to, ze ked mas aktivne output window a stlacas klavesy, tak do neho pises co znemoznuje funkcii printf vypisat text. Vyskusaj si stlacit testovane klavesy a potom vymaz to co si tam napisal, uvidis ze sa vsetko testovalo...
                            Naposledy upravil DJM; 09.08.2015, 17:50:38.
                            Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                            Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                            Komentovat


                              O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                              Code:
                              #define KEY(x) (KeyboardMatrix[(x)>>3]&(1L<<((x)&7L)))
                              Som natvrdnutý, idem na príklad:
                              V makre pracujeme teda s desiatkovou sústavou. S hodnotou v rozsahu 0-127 (dolná polovina znakovej sady). Povedzme, že pracujeme s číslom 126 (teda s predposledným bite z posledného 15. byte), čo je teda 126/8 = 15 byte.

                              Code:
                               0123456789abcdef = byte
                              0
                              1    b
                              2    i  
                              3    t
                              4    e
                              5
                              6               X = 15.byte a 6.bite = 126
                              7
                              Potom máme ten bitový súčin, teda:
                              1111110 (binárne 126)
                              0000111 (binárne 7)
                              0000110 (výsledok 6)

                              Ide sa násobiť bitovým posunom:
                              1L<<((x)&7L) = 1*(2 na šiestu) = 64 //šestku máme z predchodzieho bitového súčinu

                              A teraz sa urobí bitový súčin medzi:
                              KeyboardMatrix[15] a číslom 64?
                              Amiga - PMD 85

                              Komentovat


                                O: Programování Amiga C , Amiga Python a rozdíly mezi Amigou a PC v jejich používání

                                Ano presne tak.

                                Vlastne keby si robil bez posuvov tak napises:

                                KeyboardMatrix[126/8] & ( 2^( 126-(126/8 )*8 )

                                Namiesto X som pouzil 126 z tvojho prikladu.
                                Cize ti vyjde:
                                126/8=15 v celych cislach
                                a 126-(15*8 ) je zvysok po deleni teda 6.
                                Potom 2 na siestu je tych 64.
                                A nakoniec ten AND medzi 15bytom v poli a 64.

                                Vyjde ti ci kontrolovany bit (siesty) je 0 alebo 1, podla toho si vyhodnotis stlacenie klavesy.

                                if(KEY(126)) printf("126\n");

                                ak KEY(126) je nieco nenuloveho, tak vypis printf, v nasom pripade ak by bola 126 stlacena tak je vysledok 64 a plati podmienka

                                Takto nejako si mozes predstavit 16 bytovu keyboard maticu pri stlaceni 126ky v dvojkovej sustave:

                                6bit v 15 byte:

                                00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01000000
                                Naposledy upravil DJM; 10.08.2015, 11:38:55.
                                Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                                Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                                Komentovat

                                Zpracovávám...
                                X