Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 357086 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #300 on: 2012.March.18. 23:04:59 »
Forrás szinten, pl akkor majd nem C00A-ra kell fordítani, hanem ahol majd hely lesz a kiszemelt ROM-ban.
De ezt majd akkor kell kitalálni, hamár elkészültél mûködõ verzióval :)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #301 on: 2012.March.18. 23:16:25 »

Hat ja, csak azt akarom hogy minnel kevesebbet kelljen majd atirni ha kesz lesz.

Igazabol legtobbet azzal fogok vacakolni mire megertem hogy pontosan hogyan is kommunikal az exos a rendszerbovitokkel, stb ...

Szal a rendszerbovito keretkod ...

Z80 System

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Assembly programozás
« Reply #302 on: 2012.March.18. 23:18:44 »
Kicsit macerásan, de lehet az ASMON-nal relokálhatót, írtam errõl anno az Enterpressben. Meg talán még a GEN tud ilyet, de azt sose használtam  :oops:

Mondjuk ha elkészül, és jól mûködik, akkor ROM formában lesz a leghasználhatóbb, ha nem túl nagy, akkor esetleg hozzácsapva valamihez.
A GEN az baromi jó!
Én sokat használtam, rekolálhatót is csináltam vele.
Csupán szokás kérdése.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #303 on: 2012.March.18. 23:22:33 »
Quote
A GEN az baromi jó!
Én sokat használtam, rekolálhatót is csináltam vele.
Csupán szokás kérdése.

oks, majd meglatjuk, ha keszen van, es megsem valami mellett fog megjelenni, akkor majd at kell terni relokalhatora ha nem akarunk egy szegmenst adni a betoltonek ( amiben ugye nem lesz grafika, tehat pici lesz ).
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #304 on: 2012.March.18. 23:43:46 »
Z80 System!

 Amit te akarsz csinálni, az már kicsit a multitaszkos operációs rendszer felé hajlik. Multitaszkos operációs rendszer esetén van az, hogy az aktuális rendszert megszakítja egy idôzítô, eltárolja a következô utasítás címét, a verem tartalmát és a regisztereket. Ezután kialakítja az új környezetet a korábbi (vagy újonnan induló) másik programnak, betölti a verem/regiszter/utasítást, majd megy a másik program.
 Ehhez az x86-os rendszereknél a processzornak vannak speciális utasításai, amely gyorsítja a folyamatot.

Szerintem ez kisse pontatlan; ilyen szempontbol a DOS (marmint pl MS-DOS) messze van a multitaskingtol, megis ott is adott, hogy pl Volkov Commander vagy barmi alol inditasz el vmit, akkor a program kilepese utan "visszakapod" a Volkov  Commander-t ott, ahol jartal. Sot, ha a VC-t pl command shell-bol inditottad, akkor VC-bol kilepve azt, stb. Imho erre vonatkozott (vagy hasonlora?) a kerdes. Ettol ez meg nem multitask, hiszen egyszerre egy program fut folyamatosan, "csupan" arrol van szo, hogy  mi kapja vissza a vezerelest, ha az eppen futo program vegrehajtasanak vege.

A multitask ezzel ellentetben tobb program kozotti gyors valtogatas (illetve tobb CPU/mag eseten hw szinten is lehet persze mar parhuzamositas!), akkor a user szemszogebol tenylegesen tobb program fut interaktivan is akar egyszerre, ami nem igaz a nem multitask rendszerekre. Bar a timer stb stimmel (mondjuk multitaskbol is van sok fajta, nem mindenhol timer van), ettol meg a fenti MS-DOS szeru pelda nem multitask, megis mondhatni, hogy tobb program van a memoriaban egyszerre, de ebbol csak egy 'fut' egeszen addig, amig az ki nem lep. Ebben mas ugye a multitask.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #305 on: 2012.March.19. 17:01:24 »
Hopp eszembe jutott valami, amitol kb. bukik/bukhat az az egyszerusitett definicio amit egy ujraindithato alkalmazasnak tegnap megfogalmaztunk, hogy azt neki teljesitenie kell. Ugye ez ket dolog volt:

- Oldja meg hogy a mar lefoglalt memoriaszegmensek epen maradjanak, vagy vissza legyenek allitva a visszaterese elott.
- Lapozza vissza a betolto szegmenset a megfelelo lapra. ( a betolto szegmens/lap kombot egyebkent mivel mar lesz sajat belepesi pontja a visszateresre alkalmas futtatasnak a legegyszerubb atadni majd a futtatott programnak regiszterben, es akkor nem kell huzalozni, kesobbiekben a betolto lehet barmely lapon es szegmensen )

De most a lenyeg az, hogy ezt a ket egyszeru feltetelt azert tudtuk meghatarozni, es azert nem kell ugy fogalmazni, hogy az alkalmazas mentsen el minden hardver allapotot amire csak az exos szamot tarthat, es mindent allitson vissza a visszaterese elott, mert ezt az allapot elmentest/visszatoltest a betolto megtenne helyette.

Namost ebbol az kovetkezne hogy mar egy megszakitasletiltott, lefade- elt lpt- ju, satobbi mindenrol lekapcsolt exost kapna az alkalmazas. Na de az alkalmazasok szoktak tolteni, meg esetleg egyeb modokon exost hasznalni, ehhez ahhoz. Ahhoz meg kell ( het ) nekik az exos lpt, meg ugy egyaltalan egy funkcionalo exos. Asszem meg csak ha a megszakitasokat letiltom, az exos akkor sem mukodik rendesen, nem frissul az lpt- je, nem tud tolteni bizonyos eszkozokrol, szal az exos lebenul, ha a betolto lebenitja, mielott az alkalmazast meghivna.

Jol gondolom ezt, zozo ?

Es ha jol gondolom, akkor mi itt a megoldas ? A betolto vegezzen csak egy sima exos hardver allapot elmentest, de ne allitson semmit az exos- on, es akkor igy hivjuk a programot, az majd letiltogat barmit, ha le akar, mi meg a betoltovel csak visszaallitjuk azokat az exos hardver parametereket, amiket elmentettunk es kesz ?

Ekkor mondjuk le kellene mondanunk a le/fel fade- elo exos lpt- rol ...

De egyebkent meg akkor meg nem az lesz a hiba, hogy en elmentek exos parametereket ( pld. stack pointer, lpt, akarmi ), amit meg igazabol a futtatott program elallitgat azzal hogy mindenfele exos funkciokat hiv, es mikor hozzam visszater, akkor en eppen hogy felulirom a lementett ertekekkel a korrekt ertekeket ?

Atlatod te ezt ? Hogy mondjuk nem, azok kozul amiket le kell majd menteni nem tud a felhasznalo program megvaltoztatni olyat, amit nem helyesre allitanek vissza. Vagy eppen hogy: hat igen, eleg ha csak mittomen egy grafikus csatornat megnyit, attol megvaltozik az lpt cime, es maris hulyeseget fog a betolto visszairni az lpt valtozokba, ha azt irja vissza amit a futtatas elott elmentett ?

Mert ha igy van, hogy ezek valos veszelyek, akkor gyakorlatilag vissza kell terni arra a szemleletre, hogy a betolto gyakorlatilag egy exos load_module helyettesito, ami direktben olvassa a csatorna adatokat, es ha a modul parameterei megfeleloek, akkor betolti es call- lal meghivja a belepesi cimet. ( ha meg nem megfeleloek, akkor rahivhat a load_module- ra hogy ne kelljen kezzel begepelni )

De a lenyeg, amirol itt most szo van, hogy akkor vissza kell helyezni minden exos hw allapot mentes/visszatoltest az alkalmazasra, es minden egyes alkalmazas maga kell megbirkozzon a feladattal.

Szal most mi van ? Vissza kell terni erre, vagy atlatod hogy az elmentendo parameterek nem fognak elvaltozni, ha a betoltott program exos funkciokat hiv ? Mert miert ne hivna, hat kell toltenie, vagy epp beleepul a megszakjaba, vagy akarmi.

Es ha esetleg nem is kell visszavaltani a "betoltott program felelos mindenert" szemleletre, az mindenkepp igaz, hogy a fade- rol le kell mondanunk, hisz nem benithatom le az exost a program meghivasa elott, igaz ?


« Last Edit: 2012.March.19. 17:06:58 by Z80System »
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #306 on: 2012.March.20. 14:11:44 »
Igen egy LPT mentés se árt (még több RAM kell), fade-t úgy lehetne ha utána nyitsz egy videólapot azt rakod ki 1-27-ig, aztán bezárod, így üres kép lesz az LPT-ben. Mert különben amikor engedélyezed a megszakítást a videókezelõ visszarakná a normál képet.


Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #307 on: 2012.March.20. 19:37:43 »

Na tanulmanyozgatom itt az exos mukodeset, hogy minnel reszletesebb valaszt kapjak a korabbi kerdeseimre, es kozben felmerultek kerdesek bennem, leirom ide oket, hatha Zozo majd jol megvalszolja oket.

Az egy alapvetes ugye, hogy az exost ugy terveztek, hogy egyszerre egy alkalmazast szolgaljon ki. Raadasul ezt ugy valositottak meg, hogy nincs egy operacios rendszer shell, vagy ilyesmi, amibol az alkalmazasok elindulnak es ahova visszaternek, hanem az alkalmazasok egymasnak adjak at a stafetat, es valnak "current applications program"- ma, roviditve CAP- pa. Ha mi szeretnenek megis egy olyan CAP- ot ami felepitese vagy hasznalata soran alkalmas erre ( pld. egy basic interpreter CAP- ot, aminek ugye van egy parancsertelmezoje, vagy egy exdos interfeszt, aminek szinten van ), szoval szeretnenek egy ilyen CAP- ot egyfajta shell- kent hasznalni es elinditani belole masik programokat ( olyanokat amik eddig szinten CAP- pa valtak futasuk soran ) akkor azt kell megoldjuk, hogy a lefuttatott program ne valjon CAP- pa, hanem csak sima szubrutinhivassal hivodjon meg, majd terjen vissza az ot hivo CAP- ba. Vegyuk eszre, hogy ugye ezzel a futtatott alkalmazast exos szempontjabol a futtato CAP "reszeve" tettuk, amig a lefuttatott alkalmazas fut, es nem ter vissza az igazi CAP- ba, addig o latja el a CAP szerepet.

Valamilyen uton modon tehat egyutt kell dolgozzon a futtatott program az ot futtato CAP- pal, a futtatott programnak a futtato CAP egyfajta shell- je lesz, abban az ertelemben hogy ugye onnan indul es oda ter vissza, az operacios rendszert o ( azzal szemben mintha o is CAP- pa valna a futtatasakor ) a futtato CAP modositasai, beallitasai utan erzekeli, gondolok itt olyanra, hogy ha az CAP altal vezerelve az exos epp jatszik le egy hangot, akkor azt o mar ugy kapja meg, ha a CAP altal vezerelve az exos kepernyojen meg van jelenitve valami ( pld. basic,wp,epdos ) akkor o azt mar ugy kapja meg, stb.

Erre oly modon lehetne adni valami altalanos megoldast, hogy ha feltetelezzuk hogy a futtatott program egy tipikus demo vagy jatek, ami az elso inicializalasa utan ugyis lekapcsolja majd az exos- t es soha tobbe nem is akarja a futasa soran majd hasznalni. Ekkor lehetne a korabban emlitett exos "ki/be kapcsolo" altalanos funkciot tenni a betolto rendszerbovitobe. De hat egy ilyen visszaterosen lefuttatott program miert ne lehetne egy exos alapu program, aki a futasa soran aktivan hasznalja az exos- t. ( Viszont meg mindig nem egy rendszerbovito, mert visszaterese utan nem marad rezidens ) Arrol nem is beszelve, hogy ezeknek a visszateresre alkalmas programoknak az altaluk lefoglalt memoriakat fel kene szabaditania visszateres elott, kulonben tobbszori futtatas eseten elfogyhat a memoria.

Mindezeket osszeteve arra a kovetkeztetesre jutottam, hogy nem nagyon kell a betoltonket ellatni semilyen funkcioval, a betoltott program a betoltonek es igy a CAP- nak egy sima szubrutinja lesz es kesz. Minden mas dontest az alkalmazas hozhat meg, es meg is kell hoznia. Hogy neki fontos- e, hogy ot most milyen CAP hivta meg ( wp, basic, epdos, vagy mi ), hogy o most hogy akar mukodni, lekapcsolja a hardvert az exosrol, es onmagaban fut, vagy epp exos hivasokkal akar operalni, mondjuk nyitva egy videolapot, es arra dolgozva. Termeszetesen mindent amit lefoglalt, vagy elallitott, vissza is kell adja az exosnak, ill. vissza is kell allitsa, mielott visszater a betoltohoz, es azon keresztul a CAP- hoz.

Azt majd meglatom hogy meg lehet- e oldani, hogy rendszerbovito command string- kent megvalositva lehetseges lesz- e egy altalanos exosrol lekapcsolas/visszakapcsolas funkciot megvalositani, amit majd felhasznalo fele nem hirdetne a betolto rendszerbovito, de vegrehajtani tudna, es ezt arra lehetne hasznalni, hogy a legaltalanosabb esetre megis lenne tamogatas a rendszerbovitoben, es annak ellenere hogy a betolto semmit nem fog csinalni a tenyleges betoltesen es a call- lal torteno meghivason kivul, a meghivott program megteheti majd azt, hogy exos hivasokkal betolti a szukseges tovabbi reszeit/adatait, majd ha ez megtortent, akkor meghivja azt a rendszerbovito kommand stringet, ami majd lefade- eli az exos kepet, es lementi/lekapcsolja az exosrol a hardverallapotot, aztan fut ahogy akar, majd visszateres elott meghivja az exost visszaallito rendszerbovito kommandot, es visszater ret- tel a betoltobe. Egeszen biztos hogy mivel ezek hivasok lesznek, ezert peldaul sp elmentese/visszatolteset nem fogja tartalmazni ez az altalanos kod, es lehet hogy lesz mas ilyen is amit nem lehet majd megoldani, de a nagyja funkcionalitas elerheto lesz. Evvel ugya majd jatek kozben is meg lehet csinalni, hogy mondjuk visszakapcsolja az exost mukodove vele, betolti a kovetkezo palyat, majd ujra lekapcsolja vele az exost, es fut tovabb a jatek. De ez mar csak egy kenelmi funkcio lesz, amit majd vagy hasznal a betoltott program vagy nem, vegeredmenyben, ezzel vagy enelkul, minden a lefuttatott alkalmazas felelossege lesz.
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #308 on: 2012.March.20. 19:52:41 »
Na elobb lvileg kerdeseket akartam irni, de aztan eltertem megis a gondolataimra, tervezgetesre. Jojjenek hat a kerdesek:

-A System Reset exos funkcio c regiszterben egy parametert var, ami megadja hogy a rendszer milyen reszei reszetelodjenek, dokumentacioja a kovetkezo:

b0 ... b3
must be zero

b4 - set
Forcibly de­allocate all channel RAM, and re-initialise all devices. User device will be retained.
b5 - set
As bit 4 but also re­link in all built in and extension devices, and re­initialise system extensions. User devices will be lost. Device segments are not de-allocated.
b6 - set
De­allocate all user RAM segments.
b7 - set
Cold reset. This is equivalent to switching the machine off and on again. All RAM data is lost.

Ebbol szamomra az kovetkezne akkor hogy a bitek funkciokat jelolnek, amiket en vagy kapcsolattal kivalaszthatok, es azokat a funkcio majd elvegzi. De a b5- os funkcio leiras szerint tartalmazza a b4- et is. Tehat akkor nem kell a biteket vagykapcsolatba hozni, hanem kulon kulon kizaroan hasznalni. De az exos hasznal pld. 60h- as parametert ami a b5 es b6 egyuttesen. Tehat megis van amelyikeket egymas melle rendelhetunk. Most akkor mi van, bizonosakat kulon kell hasznalni, bizonyosakat meg egymas melle lehet rendelni ? Es melyikek zarjak ki melyikeket ? Miert nem irja le ezt az exos leiras, ha mar egyszer ilyen szepen ledokumentaltak ?
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #309 on: 2012.March.20. 20:16:11 »
Mikor az exos egy "New applications program" modult tolt be, akkor mikor ennek a programnak adja at a vezerlest ( vagyis mikor az uj modul lesz a CAP ), akkor az exos nem olyan system resetet hajt vegre mint amilyet egy rendszerbovitonek kell vegrehajtania a CAP- pa valasakor. Egy rendszerbovitonek 60h -as parameteru system resetet kell vegrehajtania, ha CAP- pa akar valni. Az exos azonban a "New applications program" modul betoltese utan csak egy 20h -as parameteru system resetet fog vegrehajtani azert, hogy a user memoria szegmensek ne szabaduljanak fel ( gondolom azert, hogy azok a szegmensek ne szabaduljanak fel, ahova betoltotte a programot ).

Namost ezt en nem ertem... ha igy tesz, akkor a regi CAP altal lefoglalt user memoriaszegmensek meg le lesznek foglalva azok mellett, amikre a "New applications program" be lett toltve. Tahat a "New applications program" modulbol szuleto uj CAP "hatranyban indul" ahhoz kepest mintha rendszerbovitobol valna CAP- pa, olyan user szegmensek lehetnek lefoglalva, amiket meg a regi CAP hasznalt. De a regi CAP- hoz ugye mar nem lehet visszaterni, tehat teljesen feleslegesen maradnak lefoglalva. Esetleg indulhatna minden olyan CAP, ami "New applications program" modulbol lett betoltve, hogy felszabaditja az elozo CAP user szegmenseit. Ha tudna hogy melyek ezek. De tudtommal nem tudja. Es ha meg tudna is, milyen mar az, hogy az uj CAP- nak ugy kell indulnia, hogy tisztogat a regi CAP utan ?Ezt jol latom ? Ilyen benan lenne ez megtervezve ? Rendszerbovito CAP- pa valasanal nem is igy van ez, de a  "New applications program" modul toltesenel igy van. Ha jol ertem ...
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #310 on: 2012.March.20. 21:45:37 »
Írja a NAP betöltésnél, hogy amikor a méret alapján foglal RAM-ot, felhasználja az elõzõleg esetleg foglalt User szegmenseket, így innentõl nem lehetséges vissza térni az elõzõ programhoz.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #311 on: 2012.March.20. 22:28:18 »
Quote
Írja a NAP betöltésnél, hogy amikor a méret alapján foglal RAM-ot, felhasználja az elõzõleg esetleg foglalt User szegmenseket, így innentõl nem lehetséges vissza térni az elõzõ programhoz.

Hmmm... olvastam en is, de arra valahogy nem talaltam direkt utalast, hogy a CAP altal mar lefoglalt user szegmenseket felhasznalna, user szegmensekrol van szo, amit o allokal a betolteshez, mar korabban CAP altal allokalt szegmensekrol nem olvastam.

A "nem tud visszaterni" gondolatra meg arra gondoltam, hogy a nullaslap-szegmenst irja felul a betoltesnel ( kiegeszulve a frissen allokalt user szegmensekkel ), amelyek kozul ugye a nullaslapszegmens miatt nem tud visszaterni.

Oks a toltest csak ezek utan irja, de konkretan akkor sem emliti hogy a CAP altal mar foglalt szegmenseket felhasznalna,

arrol nem is beszelve, hogy van nekem egy 16 kilobajtos NAP- om, meg van 64K mar lefoglalt user memoriam, megha fel is hasznalja ( de nem latom a doksiban ) akkor se nagy boldoksag a masik korabbi CAP altal lefoglalt 48K- to lelesni, mikor pedig a korabbi CAP- hoz mar nem terhetek vissza, es mikor majd atvaltok egy rendszerbovitohoz, akkor majd ugyis kinullazodik az is.

Szal en tovabbra sem ertem ezt, hogy egy NAP mer nem ugyanannyi memcsot hasznalhat mint egy rendszerbovito, ha egyszer a NAP is egy teljes erteku CAP- pa valik ...

Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #312 on: 2012.March.20. 23:18:19 »
Azt tudja valaki, hogy vannak- e kialakult szokasok arra nezve, hogy egy rendszerbovitot konnyen lehessen rambol futonak es rombol futonak is forditani ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #313 on: 2012.March.20. 23:41:23 »
Azt tudja valaki, hogy vannak- e kialakult szokasok arra nezve, hogy egy rendszerbovitot konnyen lehessen rambol futonak es rombol futonak is forditani ?
Mi ebben a nehéz?

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #314 on: 2012.March.21. 07:30:41 »
Quote
Írja a NAP betöltésnél, hogy amikor a méret alapján foglal RAM-ot, felhasználja az elõzõleg esetleg foglalt User szegmenseket, így innentõl nem lehetséges vissza térni az elõzõ programhoz.

Ezt ugy ki lehetne probalni, hogy futtatunk valami rom extension- os CAP- ot, es azzal lefoglaljuk az osszes szegmenst (peldaul egy bovitos rajzprogramban megnyitunk nagy lapokat, vagy ilyesmi, hogy beteljen a memoria.). Ezutan ha ugy van ahogy mondod, akkor az exos meg be kene tudjon tolteni es elinditani tetszoleges meretu NAP- ot ( mert felhasznalja a CAP mar leallokalt user szegmenseit ), raadasul a NAP amit lefuttatunk szinten olyan kene legyen, hogy tudjon allokalni user memoria szegmenseket, es akkor meg kene szamolni hogy hanyat tud beallokalni.

Igy valaszt kapnank arra is, hogy valoban felhasznalja- e az exos a CAP altal mar lefoglalt szegmenseket,
es arra is, hogy esetleg a tobbit meg valami modon felszabaditja- e ( mikozben mondjuk felhasznal bizonyosakat a betolteshez, a maradekot mondjuk felszabadithatna, es ekkor mar ugyanazokkal a memoria feltetelekkel indulna NAP- bol is egy CAP mint bovitobol ).

Igaz ?

Ha ugyis most megtanulok rendzserbovitot irni, lehet irok is erre egy bovitot ( ami csak siman leallokalja az osszes memoriat ) es egy napot ( ami ugyanezt teszi ), es mindketto kiirja mennyit tudott leallokalni. Es akkor majd jol meglatjuk mi lesz az eredmeny...

Z80 System