Welcome, Guest. Please login or register.


Author Topic: EXOS kompatibilis memória kezelés (Read 22489 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #15 on: 2008.November.14. 10:44:32 »
Spectrumon akkor ezek szerint 0000-3FFF között a ROM van?
Így van.

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: EXOS kompatibilis memória kezelés
« Reply #16 on: 2008.November.15. 21:08:47 »
Egy kérdés: volt valami olyasmi, hogy a videó memben lassabban futottak a programok és volt egy port ahol be lehetett állítani hogy a sima mem is ugyanolyan lassú legyen. Jól emlékszem?
Erre nem volt valami Exos rutin hogy ha lehet gyors memóriát kapjak ha kérek? :)
Vigyázat! Szektás vagyok! :)

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: EXOS kompatibilis memória kezelés
« Reply #17 on: 2008.November.15. 21:37:37 »
Egy kérdés: volt valami olyasmi, hogy a videó memben lassabban futottak a programok és volt egy port ahol be lehetett állítani hogy a sima mem is ugyanolyan lassú legyen. Jól emlékszem?
Erre nem volt valami Exos rutin hogy ha lehet gyors memóriát kapjak ha kérek? :)
Nincs rá külön rutin. A videó szegmensek fixek: FC, FD, FE, FF.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #18 on: 2008.November.15. 22:26:47 »
A videó szegmensek fixek: FC, FD, FE, FF.
És mivel az összes többi ennél alacsonyabb számú, így a sima igénylésre, amíg van szabad, nem videó ram-ot fogunk kapni.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: EXOS kompatibilis memória kezelés
« Reply #19 on: 2008.November.15. 22:33:42 »
Egy kérdés: volt valami olyasmi, hogy a videó memben lassabban futottak a programok és volt egy port ahol be lehetett állítani hogy a sima mem is ugyanolyan lassú legyen. Jól emlékszem?
Nem, a "normál" memóriát ugyan az alapértelmezéshez képest lehet lassítani és gyorsítani is a 0BFh porton, de annyira lassú, mint a video memória, nem lesz semmilyen beállítással. A video RAM sebességére viszont nincs hatása ennek a portnak.

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: EXOS kompatibilis memória kezelés
« Reply #20 on: 2008.November.15. 22:35:51 »
Akkor minek lehetett lassítani? :) Én azt hittem hogy pont azért hogy ne fusson semmi gyorsabban ep128-on mint ep64-en, ahol ügye csak vidmem van. :)
Vigyázat! Szektás vagyok! :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #21 on: 2008.November.15. 22:41:18 »
Akkor minek lehetett lassítani? :)
Azért, hogy olcsóbb, lassabb RAM IC-ket is be lehessen szerelni a gépekbe. Én találkoztam is olyan géppel, amiben olyan 300 nanos RAM IC-k voltak, hogy az OUT 191,12 (vagyis a teljes sebesség) hatására fagyogatott.

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: EXOS kompatibilis memória kezelés
« Reply #22 on: 2008.November.15. 22:46:31 »
Ááááh. :D
Hát igen... Úgy tudom ma is úgy megy, hogy legyártják a procit aztán megnézik "hogy sikerült", azaz mennyit bír, és úgy adják el. :)
Vigyázat! Szektás vagyok! :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #23 on: 2008.November.17. 20:04:14 »
Folytassuk a "mesedélutánt" :-) némi gyakorlatiasabb részekkel, Povi már biztos nagyon várja :-)
Én ezt a rutin használom a Spectrum átirat betöltõimben videó szegmens igénylésre:
Code: ZiLOG Z80 Assembler
  1. VID             LD HL,VEGE
  2.                 LD (HL),0
  3. KER             EXOS 24
  4.                 JR Z,NAMIVAN
  5.                 CP 7FH
  6.                 JP NZ,HIBA
  7. NAMIVAN         EX AF,AF'
  8.                 LD A,C
  9.                 CP 0FCH
  10.                 JR NC,NEMKER
  11.                 INC HL
  12.                 LD (HL),C
  13.                 JR KER
  14. NEMKER          EX AF,AF'
  15.                 PUSH BC
  16.                 PUSH AF
  17. VISSZA          LD C,(HL)
  18.                 EXOS 25
  19.                 DEC HL
  20.                 JR Z,VISSZA
  21.                 POP AF
  22.                 POP BC
  23.                 OR A
  24.                 RET
A rutin a VEGE címtõl (amely logikusan a programkód után helyezkedik el) tárolja el a felesleges szegmenseket. Miután akadt egy (amely lehet megosztott is), a felesleget visszaadja az EXOS-nak.
Elõször a képernyõnek kérünk egy teljes szegmenst:
Code: ZiLOG Z80 Assembler
  1.                 CALL VID
  2.                 JP NZ,HIBA
  3.                 LD A,C
  4.                 CP 255
  5.                 JP Z,HIBA
  6.                 LD (VIDS),A
  7.                 LD DE,0
  8.                 RRA
  9.                 RR D
  10.                 RRA
  11.                 RR D
  12.                 LD (VIDCIM1),DE
A kapott szegmensszámból kiszámoljuk a terület kezdetének címét, erre késöbb az LPT generáláskor szükség lesz.
Késöbb kérünk egy LPT szegmenst is, ami lehet megosztott is, ha elfér benne az LPT tábla (azaz az EXOS határ beállítható a megfelelõ helyre.)
Code: ZiLOG Z80 Assembler
  1.                 CALL VID
  2.                 JR Z,NEMHIBA
  3.                 CP 7FH
  4.                 JP NZ,HIBA
  5.                 LD DE,200*16
  6.                 EXOS 23
  7.                 JP NZ,HIBA
  8.                 LD C,255
  9. NEMHIBA         LD A,C
  10.                 LD (LPTS),A
  11. NEMHIBA1        LD DE,(VIDCIM2)
  12.                 LD HL,0
  13.                 RRA
  14.                 RR H
  15.                 RRA
  16.                 RR H
  17.                 ADD HL,DE
  18.                 LD (VIDCIM2),HL
Itt is kiszámoljuk a videó címet, ezúttal az LPT tábla kezdetét. A figyelmes szemlélõ észreveheti, hogy itt még játékba áll a VIDCIM2-n korábban lévõ érték. Ez alapban nulla, viszont 64K-s gépen úgy fog átrendezõdni a memória, hogy nem a szegmens elejére kerül az LPT tábla, ekkor a szükséges eltolás mértéke került már ekkora a VIDCIM2-re.
Ezekután nézzük meg, hogyan változik a SpV-ban is közölt LPT generáló rutin, ime az eredeti rutin kezdete:
Code: ZiLOG Z80 Assembler
  1.         LD A,0FCH
  2.         OUT (0B1H),A
  3.         LD A,192
  4.         LD DE,4000H
  5.         EXX
  6.         LD DE,4000H
  7.         LD HL,4004H
  8.         LD BC,13
  9.  
És ez lesz belõle:
Code: ZiLOG Z80 Assembler
  1.                 LD A,(LPTS)
  2.                 OUT (0B1H),A
  3.                 LD A,192
  4.                 LD DE,(VIDCIM2)
  5.                 RES 7,D
  6.                 SET 6,D
  7.                 EXX
  8.                 LD DE,(VIDCIM1)
  9.                 LD IX,VIDCIM1
  10.                 LD HL,(VIDCIM2)
  11.                 RES 7,H
  12.                 SET 6,H
  13.                 INC HL
  14.                 INC HL
  15.                 INC HL
  16.                 INC HL
  17.                 LD BC,13
A fix szegmensszám helyett az eltároltat használjuk. A DE fog mutatni az LPT elejére az 1-es lapon, de a korábban említett esetleges eltolás miatt ezt az LPT videócímébõl számoljuk vissza 1-es lapi címre. Az EXX utáni DE a videó memóriánk kezdetére fog mutatni, ez az eredeti rutinban fix 4000H volt, mivel az FDH volt fixen erre a célra használva. A HL pedig szintén az LPT területre fog mutatni, 4 bájt eltolással, õ az LPT sorokba való címbeírásnál van használva.
Nem esett még szó az IX-rõl, õ videó memóriánk címét tároló változóra mutat. Azért mert, még egy helyen hozzá kellett nyulni az eredeti rutinhoz, még pedig az attributtum címek kiszámolásánál:
Code: ZiLOG Z80 Assembler
  1.         LD A,D
  2.         RRA
  3.         RRA
  4.         RRA
  5.         AND 3
  6.         OR 58H
  7.         LD (HL),A
  8.  
Módosítva:
Code: ZiLOG Z80 Assembler
  1.                 LD A,D
  2.                 RRA
  3.                 RRA
  4.                 RRA
  5.                 AND 3
  6.                 OR 18H
  7.                 OR (IX+1)
  8.                 LD (HL),A
  9.  
Ezekután már csak az LPT aktiváló OUT utasításokat kell módosítani, az eredeti nagyon egyszerû, mivel a fix 0000H videó címet használja:
Code: ZiLOG Z80 Assembler
  1.         XOR A
  2.         OUT (82H),A
  3.         LD A,192
  4.         OUT (83H),A
  5.  
És módosítva, hogy a kiszámolt LPT címünket használja:
Code: ZiLOG Z80 Assembler
  1.                 XOR A
  2.                 LD HL,VIDCIM2+1
  3.                 RRD
  4.                 RLCA
  5.                 RLCA
  6.                 RLCA
  7.                 RLCA
  8.                 OUT (82H),A
  9.                 OR 0C0H
  10.                 RRD
  11.                 OUT (83H),A
Megjegyzés, ez a módszer elrontja a VIDCIM2 változó értékét, de erre az adott esetben úgysincs többé szükség.
De itt egy másik módszer is, itt az eredeti EXOS LPT visszaállítására van használva:
Code: ZiLOG Z80 Assembler
  1.                 LD HL,(0BFF4H)
  2.                 SET 6,H
  3.                 LD B,4
  4. FORG4           SRL H
  5.                 RR L
  6.                 DJNZ FORG4
  7.                 LD A,L
  8.                 OUT (82H),A
  9.                 LD A,H
  10.                 OR 0C0H
  11.                 OUT (83H),A
A címet az EXOS LP_POINTER változójából olvassuk ki (tehát legyen belapozva a rendszerszegmens a 2. lapra), az utána következõ SET 6 azért van, hogy videócímre konvertáljuk az EXOS változót, ha saját kiszámolt videócímünket használjuk, akkor erre nincs szükség.

Ha van érdeklõdés, folytathatom azzal, hogyan lesz egy 48K-s átírat számára 3 szabadon használható szegmensünk 64K-s gépen, amikor csak kettõ van szabadon, és még az LPT táblának is kéne egy :-)
« Last Edit: 2008.November.17. 20:08:27 by Zozosoft »

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #24 on: 2008.November.17. 21:09:05 »

Code: ZiLOG Z80 Assembler
  1.                 CALL VID
  2.                 JR Z,NEMHIBA
  3.                 CP 7FH
  4.                 JP NZ,HIBA
  5.                 LD DE,200*16
  6.                 EXOS 23
  7.                 JP NZ,HIBA
  8.                 LD C,255
  9. NEMHIBA         LD A,C
  10.                 LD (LPTS),A
  11. NEMHIBA1        LD DE,(VIDCIM2)
  12.                 LD HL,0
  13.                 RRA
  14.                 RR H
  15.                 RRA
  16.                 RR H
  17.                 ADD HL,DE
  18.                 LD (VIDCIM2),HL

Itt nekem valami nem tiszta. Ha jól értelmezem a kódot, akkor LPT memória igénylés esetében, ha megosztott szegmenst kapunk, akkor a 255-ös szegmensen lesz az LPT. De miért? Miért van ott az az LD C,255?
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #25 on: 2008.November.17. 21:11:08 »
Miért van ott az az LD C,255?
Az elõtte lévõ EXOS 23 hívás elrontja a C értékét, azt állítjuk vissza.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #26 on: 2008.November.17. 21:13:31 »
Azt én értem, na de megosztott szegmens csak a 255-ös lehet?
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #27 on: 2008.November.17. 21:26:31 »
Azt én értem, na de megosztott szegmens csak a 255-ös lehet?
Jogos a kérdés, a válasz igen is meg nem is :-)
Mivel 5-ös fejlécû programként indulunk, ez esetben minden csatorna le van zárva, nincs mitõl kilógjon az EXOS. Ha mondjuk rendszerbõvítõként ügyködnénk, amikor elõfordulhat megnyitott videólap, akkor lehet lentebb az EXOS határ. (Az Iview ezért modultöltéskor be is zár minden csatornát, ami nem a képfájl, hogy az EXOS "visszahúzodjon")

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #28 on: 2008.November.17. 21:32:03 »
Na jó, ez már csak kötekedés, de mi van, ha alapból teli van már a 255-ös szegmens, pl. van vinyóvezérlő+egér+órakártya EXOS 3.0, SZJA '88 stb.? :)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #29 on: 2008.November.17. 21:34:00 »
De egyébként én is hasonlóan gondolkodom, mint te, mert a saját programjaimban, ha nyitottam egy VIDEO: csatornát, úgy vettem, hogy egy része biztos bele esik a 255-ös szegmensbe...
*** Speicherplatz zu klein