Oznámení

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

Assembler - všeobecná logika

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

    Autorem citovaného textu je Defor Přejít na původní příspěvek
    K dispozici je celkem nedávný systém od Leonarda - LDOS. https://github.com/arnaud-carre/ldos
    Systém je hlavně udělán k tomu, aby načítal separátní exáče (opět bez přispění OS), rozbalil je, naalokoval paměť (udělal relokaci) a spustil. Ale myslím, že v něm je možnost i načítat datové soubory (víc https://github.com/arnaud-carre/ldos...dos/kernel.inc). Ale myslím, že neumí používat žádný stávající file-system, takže image diskety se musí nejdřív vytvořit v nějakém jeho toolu.
    LDOS - pouze mé postřehy

    Postupne se prokousavam tim LDOSem. Vypada to zatim dobre, jen si to je treba osahat. Jo, vyslednim ADF nebude klasicky amiga format, tedy to z diskety pujde spustit, ale jinak se nebude dat nacist tak, aby jsme viděli na ni klasicke soubory. LDOS by mel mit minimalni naroky 512 KB CHIP RAM + 512 nejake dalsi RAM. Ja se zatim zameruji na disketu, ale mel by mit i zavadec na HDD. LDOS obsahuje i hudebni prehravac. Je reprezentovany jako nejrychlejsi hudebni prehravac na Amize co by mohlo byt, ale neco za neco. Neprehrava klasicke MODy. Hudebni MOD si LDOS prevede do nejakeho sveho specifickeho formatu, Pri spravnem nastaveni by se tohle melo udelat automaticky, ten prevod pri vytvareni ADF / HDD verze. Ja tohle obejdu a dnes se mi povedlo udelat format LDOSu BIN. Jsou v nem binarni data, se kterym vas zdrojovy kod v assembleru pracuje. Ja si jako tyhle data urcil samotny MOD. Kazda skladba bude jeden BIN, tim docilim toho ze se budou MODy nacitavat do pameti postupne, Jako BIN muzete mit i jina data se kterymi potrebuje pracovat. Na to aby jste BIN mohli vytvorit potrebujete mit v adresari krome zdrojoveho kodu a MODu taky soubory LDOSu "M" a "VC". V souboru M si pomoci editace urcite cestu a nazev zdrojoveho kodu v ASM a nazev samotneho BIN, ktery se vam jeste jen vytvori. Ja mam ve zdrojovem kodu pouze INCBIN na konkretni MOD. Kazdy zdrojovy kod musi jeste nelepe někde na zacatku obsahovat i direktivu INCLUDE "kernel.inc". To je soubor LDOSu. Pokud je vse OK a spustite soubor M, LDOS vam vytvori soubor BIN. Ten si pak jiz nactete ve zdrojovem kodu. Tedy priprava ADFka by se dle vseho mela delat na dvakrat. Pripravite si BINy, ktere uvedete ve zdrojovem kodu a pak samotne vytvoreni ADFka. Dle vseho az tim krokem, jak se bude vytvaret ADF / HDD by se mela ucinit i samotna komprimace, kterou LDOS podporuje a tedy na disketu date vice dat. LDOS je dle vseho dost komplexni system, jde tam hodne veci nastavovat. Lze napriklad nastavit, aby se po nacitani dat a spusteni programu zacali nacitat hned dalsi data ktere jsou potreba. Tohle se muze a nemusi vyuzit dle potreby. Programator Leonard je jeden z dalsich expertu v ramci programovani. Jednoduse Oxygene . Ja v jednu dobu dost šlapal na hudebnim disku Amigatari, ktereho je koder Leonard a pouziva LDOS. System LDOS obsahuje i navod, ja pouzivam navod v kombinaci s ukazkovym kodem / soubory pro ADF. Samotny navod by mi nestacil, ale v kombinaci to zatim celkem jde. Tak zatim jen takove me postrehy a snad se zadaří
    Naposledy upravil Lisiak; 12.04.2024, 23:48:56.
    Amiga - PMD 85

    Komentovat


      Kodér Leonard a pak popis 1 problému, co mám s LDOSem

      Drobátko teď OT, ale standardně mně to pobavilo a myslím, že jsem nalezl jednu z možných příčin, proč mi tvůrce LDOSu zatím neodepsal

      Info z Twitteru:



      @leonard_coder

      Apr 6
      hey twitter's friends! Soon is my first family trip to Japan (10 to 20 April), visiting Osaka, Kyoto, Tokyo and Hakone. Is there anything we should definitely see/do? #Japan
      ·

      U LDOSu řeším ještě 1 věc. Nedaří se mi z hudby MOD udělat jeho BIN soubor, neboli ho udělám, ale kód ho nenačte a hudba tedy nehraje. Pokud do ADF zpracované LDOSem vložím klasický MOD, tak mi hudba hraje. Tedy pomocí LDOSu mám vše ok kromě toho MODu a já ten BIN potřebuji, aby se ty MODy načítali postupně a ne naraz, čím bych měl snžit pamětovou náročnost. Vytvoreny BIN soubor meho programu je ok. U MODu postupuji stejně. Já vlastně ten MOD jen zabalím do BIN. Ta spojitost v kodu je pak nasledovná:

      načtu BIN do A1 (návěstí Mod0) a dole v kódu mám INCBIN:
      Code:
      Mod0 lea ModScr0,a1
      
      ModScr0 incbin "ModMediev.bin"

      ve druhém souboru mám (první řádek je direktiva LDOSU, ve druhém jen načítám samotný MOD):
      Code:
      include "../../ldos/kernel.inc"
      
      incbin "mediev.MOD"
      Druhý soubor dle postupu zabalím do BIN souboru a soubor BIN se mi pak vytvoří. Soubor BIN pak načítám místo MODU, aby mi s ním LDOS uměl pracovat. Pak vytvorim BIN i z meho kodu soucasne s ADF souborem. Hudba mi vsak nezacne hrat.

      Pokud pouziju v kodu

      ModScr0 incbin "Mediev.MOD"
      místo:
      ModScr0 incbin "ModMediev.bin"

      a použiju LDOS, který mi vytbori BIN soubor z meho kodu a soubezne se mi vytvori ADF, ktereho je BIN z meho kodu soucasti, hudba z takhle vytvoreneho ADF mi hraje a vse je ok.

      Tak za chvíli se vraci koder LDOSu Leonard z Japonka, třeba prohodíme pár vět, pokud se to nevyřeší...
      Naposledy upravil Lisiak; 17.04.2024, 13:43:54.
      Amiga - PMD 85

      Komentovat


        Ještě dnes druhý příspěvek, pouze info.

        Ještě předtím, než jsem zacal resit vyse popsany problem jsem resil 1 chybove hlaseni LDOSu. Bylo to neco jako, ze nemuze najit soubor s indexem 0001. Leonard popisuje pouze problem, pokud je pamět preplněna, jak se to pokusit resit. Ten problem mam taky, ale to jsem docasne vyresil tim, ze nacitavam zatim pouze 2 MODy. Ve vysledku se ten problem s indexem souboru 0001 vyresil tim, ze jsem odstavil / vymazal cely kod od Photona, co mi odstavuje system. Domnívám ze, ze LDOS ma takovyhle kod svuj. Asi mu nesedelo 2 krat po sobe odstavovat system, popripade neco z Photonova kodu, co odstavuje system. To je jen ma domnenka. Po odstaveni Photonova kodu se chybova hlaska prestala zobrazoat a ja i dle chovani predpokladal, ze se mi jiz spustil muj kod i kdyz v te dobe bez hudby a ja pokacoval v bádání dál
        Naposledy upravil Lisiak; 17.04.2024, 14:32:13.
        Amiga - PMD 85

        Komentovat


          LDOS - pouze info

          Tak poslední 3 dny jsem si nasel cas na LDOS a pred chvili jsem zaznamenal uspech. Jeden francouz, co sepsal strucny navod na LDOS mne nasmeroval spravnym smerem. V navode se neresi co jsem potreboval a i kdyz mi napsal vseobecny postup, tak jsem si na par veci prisel sam. Ono je to o tom, ze LDOS si dela svou vlastni kompilaci a clovek presne nevi co se tam deje a jak to pracuje a ze zdrojovych kodu jsem pro mne potrebne veci nevycetl, nebo je tam nenasel. Co byla moje prvni chyba bylo to, ze jsem si udelal potrebne struktury a pak se snazil MOD nacist jiz klasicky pomoci assembleru s tim ze pri kompilaci LDOSem se potrebne veci jiz udelaji. Chyba. Je treba pouzit dal specificky pristup LDOSu. Na to mne nasmeroval ten francouz co sepsal navod. I tak jsem mel problem zahrat MOD. Tak jsem samotny MOD nezpracoval LDOSem na soubor BIN, ale dal jsem ho do struktury primo (čistý MOD) s tim, ze jsem ho nacetl pomoci LDOSu. MOD se mi spustil. Zatim ho pro jednoduchost mam primo v CHIP RAM. Samotny nazev MODu uvadim tedy i v souborech LDOSu, ktere mi pouzite subory slinkuji. V zaveru jsem zkusil samotne nacteni MODu ani neuvest v kodu. I tohle funguje. Samotny LDOS ho pri slinkovani priradi do ADFka. Je tam nevyhoda, ze si nemuzete urcit, do jake pameti se MOD nakopiruje. Myslim, ze by to melo byt do te, se kterou se pracuje v kodu, kde se s LDOSem nacita samotny soubor.

          Jak jsem koukal na kod LDOSu, tak jsem zatim nic lepsiho nevidel. Strasne "tvrdy kod". Skoda ze prace s LDOSem neni lepe popsana.

          Mel bych jit spat....
          Naposledy upravil Lisiak; 29.04.2024, 12:00:26.
          Amiga - PMD 85

          Komentovat


            LDOS - pouze info

            Šlo mi o to, jestli se zpakovava MOD, pokud z nej nedelam LDOSacky BIN a zpakovava, Takhle nejak vypada kompilace, kde davam jeden MOD primo do CHIP RAM. Skladbu mi to da z nejakych 170 KB na 100 KB.

            Windows-ácká kompilace LDOSu na ADF:

            Klikni pro plné zobrazení obrázku

Jméno: LDOS.jpg
Počet zobrazení: 0
Velikost: 283,9 KB
ID: 167449
            Amiga - PMD 85

            Komentovat


              Myslel jsem, že LDOS jen vezme konfigurační soubor, který obsahuje cesty k binárním souborům, a vygeneruje obsah diskety (ADF). Soubory můžou být buď jakékoliv obecné binárky a nebo amigácké EXE soubory. LDOS umí obojí podle potřeby načíst při běhu (po nabootování z diskety) do paměti. Pokud jsou EXE soubory v pořádku, obsahují podporované HUNK sekce (viz. dokumentace k AmigaDOS), tak by je měl umět správně načíst -- tedy rozpoznat co je HUNK s kódem, co je HUNK s relokační tabulkou a co jsou HUNKy s daty nebo BSS (tedy jen s informací o alokaci paměti). Myslel jsem si, že by to mělo být celkem snadné k používání. Pokud chce uživatel načíst nějaká vlastní data (a tedy je nedávat do EXE), tak to LDOS myslím taky umožňuje. LDOS automacky všechna data na disketu zabalí ARJ7 kompresním algoritmem a dekomprese je "zadarmo", protože běží ve stejný čas, kdy se další data načítají z pomalé diskety.

              Ve tvém případě by mělo stačit udělat si jeden exáč, ve kterém do datové sekce (section data_c) dáš svůj modul a do kódové sekce (section code) dáš jeho přehrávání. Prostě normální exáč. Akorát tam už nemusíš psát odstavování systému, protože to za tebe už předem udělá LDOS. Tento exáč dáš do konfiguračního souboru a vytvoříš LDOS utilitou disketu (ADF). Disketa bude mít LDOS boot-block, který asi načítá nějaký dodatečný LDOS kód (pokud se to autorovi celé nevlezlo do boot-blocku) a ten pak načte tvůj "exáč" a spustí. Mělo by to fungovat. Aspoň jsem si to myslel.
              Ta "genialita" LDOSu podle mne spočívá právě v tom, že uživatel dělá normální Amiga exáče (v jakémkoliv assembleru, nebo klidně i v jiném programovacím jazyce) a ze svého kódu pak jen LDOSu říká, jaký exáč má načíst a spustit (když se produkce skládá z více částí).
              Naposledy upravil Defor; 01.05.2024, 22:33:22.

              Komentovat


                Jsou na to postupy jak jsem psal viz soubor v odkazu (LDOS_User_Manual.pdf​):

                Leonard Demo Operating System (Amiga version). Contribute to arnaud-carre/ldos development by creating an account on GitHub.



                Soundy, autor návodu mne pak ještě nasměroval:

                Hi Martin,


                First, I am NOT Leonard. I did not write LDOS. I'm Soundy, I wrote the doc and shared my experience using and customizing LDOS.
                It seems you want to create a sound disk. Ideally, you would need a customized version of LDOS that Leonard will release soon. The problem with the current version is that the files order is linear: you can't have a menu to choose what the next music will be. Files will be loaded in the same order as script.txt.
                With the current version of LDOS, you have 2 options:

                Option 1:
                Create 1 executable (.BIN) per music, each .BIN would contain your music player and include the music using incbin. That's bad because the music player's code is duplicated for each music, but it's easy to do and you load the next music using LDOS_PRELOAD_NEXT_FX.

                Option2:
                You can have a single .BIN that contains your menu and your music player. Then you can load the different musics using LDOS_LOAD_BINARY_BLOB, then copy the resulting file to CHIP RAM (you pre-allocated in your .BIN with a BSS_C section) and play the music from CHIP RAM.
                Normally, LDOS_LOAD_BINARY_BLOB can be called several times, the memory taken by the previous blob will be freed.

                Best,
                Frederic.
                ​​

                Myslim, ze LDOSu je treba umet rici co a kdy se ma nacitat, nebo kdyz tak z meho pohledu je lepsi, kdyz se mu to muze rici a LDOS tohle umi.


                Veskere prikazy, se kterymi se LDOS ridi primo v kodu jsou zde a sam Leonard, autor LDOSu je ve svych prikladech, ktere jsou soucasti LDOSu pouziva:

                ;---------------------------------------------------------
                ;
                ; LDOS (Leonard Demo Operating System)
                ; AMIGA version
                ; Written by Leonard/Oxygene
                ; https://github.com/arnaud-carre/ldos
                ;
                ; Public function library
                ;
                ;---------------------------------------------------------

                LDOS_VERSION = 130

                LDOS_BASE = $4
                LDOS_MUSIC_PLAYER_ENABLED = 1


                ; Pre-load & depack the next FX. Once the current FX end (using RTS) the next one
                ; is executed immediatly.
                ; NOTE: if you don't pre-load, next FX will be loaded & depacked once the previous one ends
                LDOS_PRELOAD_NEXT_FX = 0*4

                ; Stop the demo and display ASSERT message (debugging purpose)
                ; a0: text message to display
                LDOS_ASSERT = 1*4

                ; Start music if already loaded
                LDOS_MUSIC_START = 2*4

                ; Get LSP music frame tick
                ; Use this counter if you want to sync gfx with music
                ; returns d0.l: music frame tick
                LDOS_MUSIC_GET_TICK = 3*4

                ; Stop music playing
                ; Note: This also free music memory (so music won't play again if you LDOS_MUSIC_START)
                LDOS_MUSIC_STOP = 4*4

                ; Check if demo disk 2 is inserted or not
                ; out : d0.b: $ff if disk 2 inserted, $00 if not
                LDOS_IS_DISK2_INSERTED = 5*4

                ; Alloc persistent CHIP memory block between two FX
                ; in : d0.l: size of block
                ; out: d0.l: Addr of the block
                LDOS_PERSISTENT_CHIP_ALLOC = 6*4

                ; Retreive any previously persistent CHIP memory block between two FX
                ; in : none
                ; out: d0.l: Addr of block ( or NULL if no persistent block)
                ; d1.l: Size of block ( in bytes )
                LDOS_PERSISTENT_CHIP_GET = 7*4

                ; Free any previously persistent CHIP memory block
                ; in : none
                ; out: none
                LDOS_PERSISTENT_CHIP_TRASH = 8*4

                ; Load binary blob
                ; in : d0.w: file id (same order as your script.txt)
                ; out: a0.l: allocated & loaded file buffer
                ; : d0.l: file size
                LDOS_LOAD_BINARY_BLOB = 9*4

                ; Returns a pseudo random entropy number. You can use as a seed to PRNG
                ; out: d0.w: pseudo random number
                LDOS_GET_ENTROPY = 10*4

                ; In case you need to shut down the LDOS 50Hz tick CIA timer,
                ; you have to call this each frame if you want to trackload
                ; WARNING: Trash all registers
                LDOS_TRACKLOADER_FRAME_TICK = 11*4

                ; out: d0.l 32bits clock counter
                ; This clock is incremented with internal 50hz-ish frequency.
                ; The frequency depends on ; the main music BPM. ( standard is 50hz if no music ).
                ; This counter is *not* synced to VBlank ( use your own VBL or Copper handler
                ; if you want VBL synced counter)
                LDOS_GET_CLOCK_TICK = 12*4

                ; Returns the current MOD music sequence position
                ; out: d0.w 16bits
                LDOS_MUSIC_GET_SEQ_POS = 13*4



                LDOS_MEM_ANY_RAM = (1<<30)
                LDOS_MEM_CLEAR = (1<<29)
                Nevim jestli LDOS umi nejak sam rozdelovat. kdy ma co nacist, tedy jestli LDOS umi byt vice radoby samostatnejsi. Ono to neni slozite, jen ze zacatku pro slabsiho programatora a ne pro hardcore asm killera je obtiznejsi tomu hned porozumet. Z meho pohledu je k tomu nedostatecna dokumentace, ale jiz se do toho dostavam snad

                Ja to vnimam jako vyhodu mit moznost si rici, kdy se ma co nacist do pameti. Jestli LDOS umi pracovat i s celym exe, tak co jsem ted v rychlosti koukal do toho navodu tak jsem neco takoveho nevycetl. Dle vseho je LDOS jednoduse pro programatory a tam se pocita, ze jsou k dispocici asi spise kody.
                Naposledy upravil Lisiak; 01.05.2024, 23:10:31.
                Amiga - PMD 85

                Komentovat

                Zpracovávám...
                X