Welcome, Guest. Please login or register.


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

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #45 on: 2008.November.23. 14:06:38 »
Így már nem hibás, de nem igazán értem, mit csinál ez a pár sor...    :roll:

BFF4 - Sorparaméter-tábla Z80-as címe

Ez kimásolja az EXOS LPT táblából a Status sor LPB-jét, a paletta szinek nélkül. Mivel nem csak maga a status sor van máshol,hanem a karakterkészlet is, így egyben a legegyszerübb.
Ami fontos: a program elején EXOS változó irással kapcsoljuk be a status sort, és gondoskodjunk arról,hogy legalább egy videó megszakitás lefusson, mire ehhez a másolós részhez érünk.
Különben nem biztos,hogy a nekünk szükséges érvényes status sor adatok lesznek ott.(Ezzel szívtam egy darabig,míg rájöttem :)

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #46 on: 2008.November.23. 17:11:36 »
és gondoskodjunk arról,hogy legalább egy videó megszakitás lefusson, mire ehhez a másolós részhez érünk.
Magyarul: a másolós rész elé tegyek egy HALT-ot?
*** Speicherplatz zu klein

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #47 on: 2008.November.23. 17:31:10 »
Magyarul: a másolós rész elé tegyek egy HALT-ot?
Ez pl egy jó megoldás :-)

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: EXOS kompatibilis memória kezelés
« Reply #48 on: 2008.November.23. 20:46:43 »
Ami fontos: a program elején EXOS változó irással kapcsoljuk be a status sort
Nekem az a tapasztalatom, hogy a NAP bekapcsolja magának a status sort, nekünk nem kell vele foglalkozni.
*** Speicherplatz zu klein

Offline Ferro73

  • EP lover
  • *
  • Posts: 967
  • Country: hu
Re: EXOS kompatibilis memória kezelés
« Reply #49 on: 2009.September.27. 18:23:45 »
Elolvastam de nem találtam olyan lehetöséget bár már láttam valamely formáit
Elképzelésem
   ld a,255
  out (0b2h),a
  ld hl,(0bf91h)     ;exos  alsó határ
  ld a,(0bf9eh)
  cp 0
  jp z,nincsoszt
  cp 255
  jp nz,nemrencers
 
  ld bc,hl  ;ex hl,bc ; push hl  pop bc
  ld hl,0
  ld de,8000h
  ldir
  ld a,255
  out (0b0h),a
mivel nem találtam utalást az exos mennyi és meik részét használja a 255-ös szegmensböl
gondolok a tape: disk: és egyéb átmeneti tárakra.
A fenn maradó helyen valahol csak elférne az LPT tábla és akkor felszabadul az FC szegmens
Mivel  a 0-3fff között ugy is Rom van a ZX gépeken igy nem fogja semmi zavarni a rendszer memoriát /FF,FD,FC,FE/

ha jól emlékszek akkor a 0.rom visszafejtése könyv a végén taglalja a rendszer szegmens terület használatát megvan valakinek ez a könyv, nem találtam teljes e-könnyvet.
« Last Edit: 2009.September.29. 05:59:46 by Ferro73 »

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #50 on: 2009.September.29. 10:55:39 »
Elolvastam de nem találtam olyan lehetöséget bár már láttam valamely formáit
Elképzelésem
Az elképzelés jó, de a gyakorlati megvalósításban több hiba is van.
Quote
 ld a,255
  out (0b2h),a
  ld hl,(0bf91h)     ;exos  alsó határ
  ld a,(0bf9eh)
Pl ezek máshol vannak EXOS 2.0 alatt, így nem érdemes közvetlenül vájkálni az EXOS lelkivilágában :-)
Quote
  ld bc,hl  ;ex hl,bc ; push hl  pop bc
  ld hl,0
  ld de,8000h
  ldir
Hiányzik az ellenõrzés, hogy elférünk-e?
Quote
  ld a,255
  out (0b0h),a
Az EXOS-nak is meg kell mondani a változást, különben pl Reset esetén az eredeti nullás lapot lapozza vissza, és kész az elszállás.
Quote
mivel nem találtam utalást az exos mennyi és meik részét használja a 255-ös szegmensböl
gondolok a tape: disk: és egyéb átmeneti tárakra.
Ez folyamatos változik! Ezért kell lefoglalni megosztott szegmensként, majd megmondani, hogy MI mennyit használunk (felhasználói határ beállítása).
Quote
A fenn maradó helyen valahol csak elférne az LPT tábla és akkor felszabadul az FC szegmens
Mivel  a 0-3fff között ugy is Rom van a ZX gépeken igy nem fogja semmi zavarni a rendszer memoriát /FF,FD,FC,FE/
Így van, ez az amit már megcsináltam a Spectrum átiratos betöltõmben már vagy 3 éve :-)
Itt van kiemelve a lényeg:
Code: ZiLOG Z80 Assembler
  1. PRGSIZE:   EQU 0B00H ;a programunk méretéhez kell választani, de 10H-ra kerek legyen
  2.                 LD SP,100H
  3.                 LD HL,HIBA
  4.                 LD (0BFF8H),HL
  5.                 LD A,12
  6.                 OUT (191),A
  7.                 LD BC,100H+26
  8.                 LD D,0
  9.                 EXOS 16
  10.                 LD BC,100H+28
  11.                 LD D,255
  12.                 EXOS 16
  13.                 LD BC,100H+27
  14.                 LD D,0
  15.                 EXOS 16
  16.                 HALT
  17.                 LD HL,(0BFF4H)
  18.                 SET 6,H
  19.                 LD B,4
  20. ELPT            SRL H
  21.                 RR L
  22.                 DJNZ ELPT
  23.                 LD A,L
  24.                 LD (ELPTL),A
  25.                 LD A,H
  26.                 OR 0C0H
  27.                 LD (ELPTH),A
  28.                 LD HL,(0BFF4H)
  29.                 LD DE,STATUS
  30.                 LD BC,8
  31.                 LDIR
  32.                 CALL VID
  33.                 JP NZ,HIBA
  34.                 LD A,C
  35.                 CP 255
  36.                 JP Z,HIBA
  37.                 LD (VIDS),A
  38.                 LD DE,0
  39.                 RRA
  40.                 RR D
  41.                 RRA
  42.                 RR D
  43.                 LD (VIDCIM1),DE
  44.                 EXOS 24
  45.                 LD A,C
  46.                 LD (P2S),A
  47.                 JP NZ,HIBA
  48.                 EXOS 24
  49.                 JR Z,OKEP3
  50.                 CP 7FH
  51.                 JP NZ,HIBA
  52.                 LD A,C
  53.                 LD (LPTS),A
  54.                 OUT (0B3H),A
  55.                 CP 0FCH
  56.                 JP C,HIBA
  57.                 LD DE,PRGSIZE+200*16
  58.                 EXOS 23
  59.                 JP NZ,HIBA
  60.                 DI
  61.                 IN A,(0B0H)
  62.                 LD (P0S),A
  63.                 LD (P3S),A
  64.                 LD DE,PRGSIZE
  65.                 LD (VIDCIM2),DE
  66.                 LD HL,0
  67.                 LD DE,0C000H
  68.                 LD BC,PRGSIZE-1
  69.                 LDIR
  70.                 IN A,(0B3H)
  71.                 OUT (0B0H),A
  72.                 LD (0BFFCH),A
  73.                 LD A,(P3S)
  74.                 OUT (0B3H),A
  75.                 LD A,(LPTS)
  76.                 JR NEMHIBA1
  77. OKEP3           LD A,C
  78.                 LD (P3S),A
  79.                 OUT (0B3H),A
  80.                 CALL VID
  81.                 JR Z,NEMHIBA
  82.                 CP 7FH
  83.                 JP NZ,HIBA
  84.                 LD DE,200+16
  85.                 EXOS 23
  86.                 JP NZ,HIBA
  87.                 LD C,255
  88. NEMHIBA         LD A,C
  89.                 LD (LPTS),A
  90. NEMHIBA1        CALL LPT
  91.                 LD A,(VIDS)
  92.                 OUT (0B1H),A
  93.                 LD A,(P2S)
  94.                 OUT (0B2H),A
  95.                 XOR A
  96.                 LD DE,(VIDCIM2)
  97.                 LD HL,VIDCIM2+1
  98.                 RRD
  99.                 RLCA
  100.                 RLCA
  101.                 RLCA
  102.                 RLCA
  103.                 LD (LPTL),A
  104.                 OUT (82H),A
  105.                 OR 0C0H
  106.                 RRD
  107.                 LD (LPTH),A
  108.                 OUT (83H),A
  109.                 LD (VIDCIM2),DE
  110.  
Az LPT létrehozás, ami mint lentebb említettem változik az eredeti SpV-ben közöltekhez képest, mivel nem fix helyen van, így kezelni kell a változó videócímeket.
Code: ZiLOG Z80 Assembler
  1. LPT:            LD DE,(VIDCIM2)
  2.                 LD HL,0
  3.                 RRA
  4.                 RR H
  5.                 RRA
  6.                 RR H
  7.                 ADD HL,DE
  8.                 LD (VIDCIM2),HL
  9. LPT2:           LD A,(LPTS)
  10.                 OUT (0B1H),A
  11.                 LD A,192
  12.                 LD DE,(VIDCIM2)
  13.                 RES 7,D
  14.                 SET 6,D
  15.                 EXX
  16.                 LD DE,(VIDCIM1)
  17.                 LD IX,VIDCIM1
  18.                 LD HL,(VIDCIM2)
  19.                 RES 7,H
  20.                 SET 6,H
  21.                 INC HL
  22.                 INC HL
  23.                 INC HL
  24.                 INC HL
  25.                 LD BC,13
  26. L1              EX AF,AF'
  27.                 EXX
  28.                 LD HL,LINE
  29.                 LD BC,16
  30.                 LDIR
  31.                 EXX
  32.                 LD (HL),E
  33.                 INC HL
  34.                 LD A,D
  35.                 RRA
  36.                 RRA
  37.                 RRA
  38.                 AND 3
  39.                 OR 18H
  40.                 OR (IX+1)
  41.                 LD (HL),A
  42.                 INC HL
  43.                 LD (HL),E
  44.                 INC HL
  45.                 LD (HL),D
  46.                 ADD HL,BC
  47.                 INC D
  48.                 LD A,D
  49.                 AND 7
  50.                 JR NZ,L2
  51.                 LD A,E
  52.                 ADD A,32
  53.                 LD E,A
  54.                 CCF
  55.                 SBC A,A
  56.                 AND 0F8H
  57.                 ADD A,D
  58.                 LD D,A
  59. L2              EX AF,AF'
  60.                 DEC A
  61.                 JR NZ,L1
  62.                 EXX
  63.                 LD HL,SYNC
  64.                 LD BC,HOSSZ
  65.                 LDIR
  66.                 RET
  67. LINE            DB 255,14H,15,2FH,0,0,0,0
  68. TABL            DB 0,36,121,88,130,182,219,63
  69. SYNC            DB 0F5H,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  70. STATUS          DB 247,8,11,73H,0B8H,0FEH,0E9H,1,0,216,216,0,0,0,0,0
  71.                 DB 217,12H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  72.                 DB 253,16,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  73.                 DB 252,16,6,63,0,0,0,0,0,0,0,0,0,0,0,0
  74.                 DB 255,90H,63,32,0,0,0,0,0,0,0,0,0,0,0,0
  75.                 DB 252,12H,6,63,0,0,0,0,0,0,0,0,0,0,0,0
  76.                 DB 207,13H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  77. HOSSZ           EQU $-SYNC
  78.  

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #51 on: 2012.July.28. 23:15:21 »
Elkezdtem csinálni egy ilyet, hogy a direkt címeket használó programokat is EXOS 2.0 kompatibilissé lehessen tenni. Ha másként nem megoldható, akkor verzió ellenõrzés után a megfelelõ direkt cím használatával.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #52 on: 2012.September.30. 21:47:10 »
Lehet, nem pont ide tartozik, de ... Eppen arra gondoltam egy raero oramban, hogy sok mindent gyorsabb C-ben kiprobalni aztan szepen atirni assembly-be/megirni rendesen. Az sdcc tud is Z80-ra forditani, par kiserlet utan ossze is hoztam valamit, meg irtam hozza sajat crt0-t stb. Egy a baj: ha egy C-ben irt, majd leforditott programot megprobalok betolteni az emulatorba, a Load error: re-starting system jon. Ez mit jelenthet konkretan?

A program fejlece igy nez ki:

00 05 46 22 00 00 00 00 00 00 00 00 00 00 00 00

Amire tippelni tudok: lathato, hogy a program meret viszonylag nagy: 0x2246 byte. Azonban fontos, hogy maga a program merete boven par szaz byte (file-kent) csak. A kulonbseget az okozza, hogy eleg sok csak futas kozben hasznalt plusz memoriaterulet kell neki (illetve hogy hozzacsapok fel K-nyi memoriaigenyt a stack-nek amit inicializalok is ott mielott a _main megkapja a vezerelest ami mar a C forditott kod). Vagy en gondolom rosszul, hogy az 5-os tipusu exos fejlecnel a meretnel az a meret kell amit a program a _memoriaban_ elfoglal, tehat semmi koze ahhoz, hogy a disk-en mennyit?

Ha nem, mi lehet a load error oka? Thx.

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: EXOS kompatibilis memória kezelés
« Reply #53 on: 2012.September.30. 22:13:44 »
Vagy en gondolom rosszul, hogy az 5-os tipusu exos fejlecnel a meretnel az a meret kell amit a program a _memoriaban_ elfoglal, tehat semmi koze ahhoz, hogy a disk-en mennyit?
Igen, rosszul gondolod!
Annyinak kell lenni, amennyi a betöltendő bájtok. Ha plusz területet szeretnél, akkor töltsd fel 0-kkal, de ha 3FFF-ig akarod csak használni, akkor nem muszáj, a nullás lap mindig az aktuális programé.