Welcome, Guest. Please login or register.


Author Topic: EXDOS (Read 134500 times)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #300 on: 2020.December.23. 08:45:20 »
bocs, elfelejtettem a h-t a 20 végéről, hexa 20 volt.
A vermet nem kell minden EXOS hívás után újraállítanod, az EXOS visszaállítja.
Az a tippem, hogy a C program alapból beállít egy vermet, és akkor az lesz rossz helyen, próbáld meg beállítani úgy, ahogy Zozó mondta, csak előtte mentsd el a verem helyét, és visszatérés előtt állítsd vissza, nehogy most meg a C programod pusztuljon meg,

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #301 on: 2020.December.23. 10:49:48 »
Maga az EXDOS is lapozgat, amikor meghívja a meghajtók kezelőprogramját.
Ezért vagy a 2. lapon a rendszerszegmensben legyen a verem (ez a helyzet, amikor EXOS-on keresztül történik lemezművelet), vagy a 0. lapon.

Az a gyanúm, hogy most a programodban az 1. lapon lehet. Mivel az egyszerűbb FISH hívás lefut, amihez nem kell az EXDOS-nak lapoznia.

Amúgy ha csak DIR listát szeretnél fájlba, azt úgy is lehet, hogy nyitsz egy fájlt, beállítod annak a csatornának a számát alapértelmezett output csatornának, hívsz egy DIR parancsot, lezárod a fájlt (és visszaállítod az output csatornát).

Online Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #302 on: 2020.December.24. 01:22:04 »
Beletettem a program elejébe egy "LD SP,100h" utasítást, de így is lefagy a FISH hívás. Elkezdtem kísérletezgetni, hogy mi lehet a veremmutató értéke. Amikor a program elindul (még az SP beállítása nélkül), 32428 van benne. Miután voltak EXOS hívások, 32439 lesz az értéke. Ezek szerint a verem valóban az 1. lapon van. Amikor 100h-ra beállítom, azt megcsinálja, de utána visszaváltozik az 1. lapon lévő címre. Még nem találtam meg, hogy hol változik vissza, meg kell nézni az összes EXOS hívást, de most úgy látom, hogy vagy a FISH hívás előtt/után kéne átállítani/visszaállítani a veremmutatót valahogyan, vagy az EXOS hívások előtt/után. A 2. lapra azért nem tudom tenni a vermet, mert oda lapoztam be azt a szegmenst, amit használok (ezen van a videomemória is). A 0. és 1. lap erre nem használható, mert ha ellapozom, lefagy. A 3. lapra pedig az EXDOS ROM kerül. De a verem akkor lehet a 0. lapon, csak ne változzon meg az EXOS hívások után, vagy legyen visszaállítva.

Így kérdeztem le az SP értékét, mert akármelyik regiszterbe nem engedi másolni. HL-t azért teszi bele a verembe, hogy a végén visszaállíthassam. Így ugyan a veremhasználat miatt némileg más értéket kérdez le, de az látszik, melyik lapon van. (Bizonytalan vagyok, hogy jól kérdeztem-e le, mert furcsa, hogy az első bájtot kell 256-tal szorozni, hogy jó legyen. Máskor 16 bites címeknél úgy rémlett, hogy az alacsony bájt van elöl, viszont így ad "jó" értéket.)
Code: [Select]
__asm__ (
  "push    HL\n"
  "ld      HL,0\n"
  "add     HL,SP\n"
  "ld      A,H\n"
  "ld      (_RA),A\n"
  "ld      A,L\n"
  "ld      (_RB),A\n"
  "pop     HL\n"
);
RSP=RA*256+RB;

Több türelmem most nincs hozzá, majd folytatom. Boldog Karácsonyt és jó ajándék bontogatást mindenkinek!
Kotasoft

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #303 on: 2020.December.25. 10:18:36 »
jo a lekerdezes, ha egyben szeretned, akkor lehet igy is:
    ld (valtozo),sp
A szorzasnal meg azert teljesen jo a helyierteked, mert nem a memoriabol veszed sz erteket 2 8biteskent.
A vermet probald a directory lekerdezes elejen elmenteni, beallitani 100h-ra, majd a rutinod vege elott visszaallitani.

Online Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #304 on: 2020.December.25. 16:25:31 »
Elmentettem a FISH hívás előtt a stack pointert, hogy majd vissza lehessen állítani, utána beállítom 100h-ra, hogy a 0. lapon legyen, de a CALL C010h így is lefagy. Ha majd lesz fórumtalálkozó és valakinek lesz kedve megnézni, azt megköszönném. Félreteszem ezt a programot, mert nem tudok tovább haladni vele. Esetleg csatorna átirányítással megpróbálom megoldani, de sejtétem szerint nagyon lassú lesz. Köszönöm az ötleteket!
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #305 on: 2020.December.25. 19:48:42 »
Nem tudod felrakni, hogy megdebugoljuk?

Online Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #306 on: 2020.December.25. 22:52:50 »
Dehogynem, feltöltöm és köszönöm! Nem tudom, melyik a hasznosabb, ezért feltöltöm a fordított .com fájlt és a C forrást is. A call utasítás fagy le a FISH() függvényben, ezt kikommentezve elindul. Igaz, még nem csinál semmit, mert a teszthez csak dummy fájlokat tölt a listába.
« Last Edit: 2020.December.25. 23:20:00 by Tomato77 »
Kotasoft

Online Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #307 on: 2020.December.26. 14:20:33 »
Amikor lefagy a call utasításnál, akkor ezek a szegmensek vannak belapozva: F8h, FAh, FFh, 20h. Amikor kikommentezem a call-t és tovább jut, ezeket látom: F8h, FFh, FFh, 20h. Az 1. lapon van a verem és pont itt van eltérés. Kipróbáltam, hogy a call előtt 8100h-ra állítom az SP-t, hogy a kettes lapon lévő szegmensen legyen. Így tovább ment a program, máshol állt meg, de annak sejtem az okát. Lehet, hogy lesz belőle valami. :)
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #308 on: 2020.December.26. 21:01:56 »
Amikor a FISH hívós részre ér a program, akkor a program saját verme már 100h alatt van (00FDh-n áll), így az ismételten 100h-ra állított verem a FISH hívás alatt felül írja a program saját vermében lévő adatokat.

Online Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #309 on: 2020.December.29. 00:38:40 »
Találtam egy hibát. Eddig a veremmutatót az Init() függvényben állítottam 100h-ra, amit a main() hív meg. Ha jól gondolom, amikor az Init() végez és visszatér a main()-be, akkor lesz rossz érték az SP-ben. Módosítottam, most mindjárt a main() legelején állítom be a veremmutatót, és látszólag végig jó érték van benne (F1-re kiírja alul), de ha nincs kikommentezve a call C010h, akkor továbbra is megfagy. Zozo, megnéznéd újra, légyszi? Ilyenkor az emulátorban nézed debug-gal? Megnéztem én is úgy, az SP-ben C4h van, viszont a 2. lapon az FDh szegmens van, ami nem tűnik jónak, pedig a call előtt van egy Out(0xB2, 0xFF), a 255-ös szegmensnek kellene ott lennie. Köszönöm!
Kotasoft

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #310 on: 2020.December.29. 13:18:26 »
szerintem az a baj, hogy a hulye C miatt nagyon alacsonyan van mar az sp (00bf)-en, amikor az exdos meghivodik, de nezem tovabb.

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #311 on: 2020.December.29. 13:24:39 »
0083-ig megy le, 80 ala nem, elmeletileg ennek nem kene gondot okoznia

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #312 on: 2020.December.29. 13:32:51 »
van egy jo hirem, meg egy rossz, nem fagy a program, olyan meghajtot kerdez le, amiben nincs lemez, Retry or abortra var nalam, es hiaba teszek be a b-be is image-et, marad a hiba.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #313 on: 2020.December.29. 13:34:55 »
0083-ig megy le, 80 ala nem, elmeletileg ennek nem kene gondot okoznia
5Bh-ig lehet lemenni.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #314 on: 2020.December.29. 13:38:58 »
Retry or abortra var nalam
Ilyen esetre be kell állítani a megfelelő alapértelmezett csatornákat, hogy a hiba kiírás/válasz bekérés megfelelően működjön. Vagy pedig le lehet tiltani az EXDOS hiba kezelést, ilyenkor egyből Disk operation aborted hibával tér vissza, és külön EXDOS változóból olvasható ki a hiba, amit aztán saját hiba kezelővel lehet kezelni.