Welcome, Guest. Please login or register.


Author Topic: EXDOS (Read 134383 times)

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXDOS
« Reply #285 on: 2018.March.20. 20:44:44 »
Írni egy külön gyorsteszt verziót, ami kihagyja a 2xH-t a ROM keresésből.
Na és az SD-kártyán lévő EXDOS az nem valami herélt változat? Az tudja a lemezeket is kezelni?

Az EPROM foglalatban van? (tudom, nézzem meg). Ha igen, és ha csak kiveszem, az is megoldja a dolgot, nem?
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #286 on: 2018.March.20. 20:49:17 »
Na és az SD-kártyán lévő EXDOS az nem valami herélt változat? Az tudja a lemezeket is kezelni?
Ha az aktuális ROM verzió van benne, akkor már tudja!

Quote
Az EPROM foglalatban van? (tudom, nézzem meg). Ha igen, és ha csak kiveszem, az is megoldja a dolgot, nem?
Igen az megoldja. Vagy ha 1.4-es EXDOS ROM-ot raksz oda is.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXDOS
« Reply #287 on: 2018.March.21. 21:35:25 »
Valami olyan hack elképzelhető, ami az SD-kártya olvasó flash-jében van?
Arra gondolok, hogy ha bent van az SD-kártya olvasó, akkor hagyja ki 0x20-as szegmenst, de ha nincs, akkor viszont nézze ott is (azaz önnállóan is működjön a nem buherált gyári EXDOS kártya)
*** Speicherplatz zu klein

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #288 on: 2020.December.16. 19:18:36 »
Tiszteletem! EXDOS segítséget szeretnék kérni. Elkezdtem olvasni Zozo EXDOS leírását, mert szeretnék pár funkciót elérni (létező meghajtók lekérdezése, aktuális könyvtár lekérdezése, egy könyvtárban lévő fájlok listázása). Odáig eljutottam, hogy ezeket FISH hívásokkal lehet, de amit csináltam, arra egy szuper lefagyás az eredmény. Arra gyanakszom, hogy talán a szegmenseket nem lapozom be rendesen. A program C-ben készül és Z88DK SDCC-vel fordítom. A kérdéses rész most így néz ki:

Code: [Select]
void FISH()
{
  Out(0xB2, 0xFF);
  __asm__ (
    "ld     A,20\n"
    "call   0xC010\n"
    "ld     A,D\n"
    "ld     (_d),A\n"
    "ld     A,E\n"
    "ld     (_e),A\n"
    "ld     A,H\n"
    "ld     (_h),A\n"
    "ld     A,L\n"
    "ld     (_l),A\n"
  );
  ...
}

A 20-as funkcióval a DE és HL regiszterekben kéne megkapnom az elérhető meghajtókat, de helyette lefagy. Miért nem jó?
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #289 on: 2020.December.16. 23:15:08 »
3-as lapra belapozod az EXDOS ROM-ot? Illetve a verem se árt ha olyan helyen van ami nincs lapozgatva :-)

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #290 on: 2020.December.17. 00:38:49 »
3-as lapra belapozod az EXDOS ROM-ot?
Ööööő, nem. Akkor megvan, miért fagyott. Azt írja a leírás, hogy az EXDOS ROM-ja (IY-5E)-ről olvasható. Ez mit jelent? Valami port adja vissza? *

A verem szegmense kilapozható, miután visszatért a FISH hívásból? Pont a 2. lapot használom.

* Tovább olvastam, miután hülyeséget kérdeztem. Szóval IY a FISH-re mutat, gondolom a -5E a cím ehhez képest. IY-t pedig 0FDh-val lehet lekérdezni. Ez mit jelent?
« Last Edit: 2020.December.17. 01:05:11 by Tomato77 »
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #291 on: 2020.December.17. 10:59:20 »
Így kérdezed le:
Code: [Select]
               LD DE,EXDOS_STR
                EXOS 26
JP NZ,NOEXDOS
                DI
                LD (FISH_VAR),DE
                PUSH DE
                POP IY
                LD A,(IY-5EH)
                LD (EXDOS_ROM),A


EXDOS_STR       DB 6,"EXDOS",0FDH

Amikor meg hívod, akkor:
Code: [Select]
               LD IY,(FISH_VAR)
                LD A,(EXDOS_ROM)
                OUT (0B3H),A
                LD A,0FFH
                OUT (0B2H),A

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #292 on: 2020.December.20. 02:00:27 »
Úgy néz ki, hogy sikerült működésre bírnom, le tudtam kérdezni a létező meghajtókat. Köszönöm a segítséget, Zozo!
Kotasoft

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #293 on: 2020.December.21. 23:42:29 »
Zozo, nyúzhatlak még? A FISH hívás lefagy, ha az aktuális könyvtárat szeretném lekérdezni a 3-as funkcióval. Az EXDOS ROM lekérdezése megy, még a meghajtókat is visszaadja a 20-assal a DE és HL regiszterekben, de amikor a 3-as funkcióval hívom, megfagy.

Így kérdezem le az EXDOS ROM-ot és a FISH területet:
Code: [Select]
unsigned int FISH_VAR;
unsigned char EXDOS_ROM;
unsigned char RA, RB, RC, RD, RE, RH, RL; // Ezeket a regiszterek tartalmának tárolásához használom
unsigned int RDE;
...

  RDE = (unsigned int) &EXDOS[0]; // DE erre mutat, amiben ez van (szerintem jó): 6, 'E', 'X', 'D', 'O', 'S', 0xFD
  __asm__ (
    "ld      DE,(_RDE)\n"
    "rst     0x30\n"
    ".byte   26\n"
    "ld      (_RA),A\n"
    "ld      (_FISH_VAR),DE\n"
    "push    DE\n"
    "pop     IY\n"
    "ld      A,(IY-0x5E)\n"
    "ld      (_EXDOS_ROM),A\n"
  );

Itt pedig a 3-as funkcióval a 6-os meghajtón (F:) az aktuális könyvtárat szeretném lekérdezni:
Code: [Select]
 // Get current directory
  RB = 6;
  FISH(3);
...

// Ezt hívja meg:
void FISH(unsigned char Function)
{
  unsigned int Address;

SetEXOSVar(27,255);
  RA = Function;
  __asm__ (
    "ld      IY,(_FISH_VAR)\n"
    "ld      A,(_EXDOS_ROM)\n"
    "out     (0xB3),A\n"  // Page 3: EXDOS ROM
    "ld      A,0xFF\n"
    "out     (0xB2),A\n"  // Page 2: FFh segment
    "ld      A,(_RB)\n"   // B = drive (function 3)
    "ld      B,A\n"
    "ld      A,(_RA)\n"   // A = function
    "call    0xC010\n"
    "ld      A,D\n"
    "ld      (_RD),A\n"
    "ld      A,E\n"
    "ld      (_RE),A\n"
    "ld      A,H\n"
    "ld      (_RH),A\n"
    "ld      A,L\n"
    "ld      (_RL),A\n"
  );
  Out(0xB2, VideoSeg);
SetEXOSVar(27,7);
}

A 27-es EXOS változóban keretet állítom, hogy látszódjon, hol fagy le. Fehér marad, tehát valahol az assembly rész hal meg. Kb. két napja keresem, hogy miért. Megőrülök.

Módosítás: a DI parancsot nem tettem bele a lekérdezésbe. Ha jól láttam, ez a megszakításokat tiltaná le. Ez okozhatja? Ha kell bele, utána engedélyezni kell újra a megszakításokat?
« Last Edit: 2020.December.21. 23:45:57 by Tomato77 »
Kotasoft

Offline geco

  • EP addict
  • *
  • Posts: 7081
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #294 on: 2020.December.22. 14:02:24 »
kipróbáltam nagyjából azt a kódot, amit használsz, annyi, hogy én fix értékeket adtam meg, semmi lekérdezés, nekem nem fagyott, működik engedélyezett megszakítással.
IY-ban a FISH címe volt, A=03, B=01, és belapoztam a 2-es lapra az FF szegmenst, a 3-asra a 20-ast, mert pont ott volt az EXDOS.
2 tippem van, az egyik, hogy a kódod a 2-es, vagy 3-as lapra kerül, és így kilapozza saját magát, ez könnyen ellenőrizhető, ha a border 7-re állítást a lapozás utánra teszed, és nem EXOS 27-tel, hanem OUT (81h),a-val
A másik az, hogy valamelyik változód rossz értéket ad vissza, vagy a fish cím, vagy az EXDOS ROM

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #295 on: 2020.December.22. 17:32:08 »
Köszi a választ! Teleszúrkáltam különböző színű keretállítással a hívást, ebből egyértelműen a CALL 0xC010-nél fagy meg. Az EXDOS ROM értéke nálam 32 a számítás (IY-5Eh) után, a FISH_VAR-ban pedig 42081 a cím. Ez hihetőnek tűnik, ha a 2. lapon van a FISH, mert akkor 32768-49151 értéktartományban kell lennie. Azt hogyan tudom megnézni, hogy az EXDOS ROM valóban a 32-es szegmensen van? (Nálad a 20-as érték hexa vagy decimális? Ha hexa, akkor nekem is ugyanannyi.)

Ha nem fog működni, olyanra van lehetőség, mint PC-n, hogy egy DIR parancsot > jellel átirányítok fájlba? Így sokkal lassabb lenne, de abból be tudnám olvasni a könyvtár tartalmát. Próbáltam "dir > x.txt" formában, de "Wrong number of parameters" hibát ad az EXDOS.
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #296 on: 2020.December.22. 19:23:50 »
A verem melyik lapon van?

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #297 on: 2020.December.22. 19:34:10 »
A verem melyik lapon van?
Nem tudom. :) Azt nekem kell meghatározni? Nem az FFh szegmensen van?
Kotasoft

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXDOS
« Reply #298 on: 2020.December.22. 19:47:23 »
Nem tudom. :) Azt nekem kell meghatározni? Nem az FFh szegmensen van?
Igen, egy gépi kódú programot célszerű egy LD SP utasítással kezdeni, a későbbi bonyadalmakat elkerülendő. (Amikor EXOS hívást használsz, akkor az EXOS átvált a saját vermére az FFh szegmensen).
Leggyakrabban LD SP,100h használatos, ez a program alá teszi vermet.

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: EXDOS
« Reply #299 on: 2020.December.22. 20:05:00 »
Ok, köszönöm! Azt nem tudom, hogy a fordító mit fordít C-ből és beállítja-e a vermet. Ha beleteszem az LD SP,100h-t, és utána EXOS hívást használok, akkor mindig vissza kell állítani a vermet 100h-ra? EXOS hívás kell pl. az EXDOS ROM szegmens lekérdezéséhez, EXOS változók állításához, csatorna nyitáshoz/záráshoz, blokk olvasáshoz. Jól értem, hogy ezek után mindig be kell állítani a vermet? Nem fog összeomlani a program? (Mondjuk ennél jobban nem.)
Kotasoft