Welcome, Guest. Please login or register.


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

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #405 on: 2013.March.29. 10:09:38 »
Quote from: lgb
Pontosan! De ezert mondtam, hogy nem lehet arra szamitani - altalanos esetben - hogy a memoriaban direktbe elerve a "video RAM"-ot az folyamatos, mint mas gepnel. Mondjuk ez kevesbe zavar engem, mivel csak en irnek ra, igy az EXOS-nak nincs alkalma, hogy atrendezze pl scroll hatasara, alapbol a videolap letrehozasa utan meg amugy linearis szokott lenni (remelem legalabbis)
Nem ertem a problemadat ezzel...

Amennyire en latom ez ugy mukodik, hogy mikor megkrealsz egy videolapot annak a memoriatartomany(vagy tartomanyai, mert ugye vannak modok ahol 2 memoria tartomany kepzi a kepet) folyamatos. Most mi az elso tartomanyrol beszelunk alapvetoen, ott vannak a karakterek, ill. a pixel adat.

Namost egy lapon belul ez a terulet folyamatos, es az is marad. Tehat mondjuk letrehozol egy video lapot, ami mondjuk karakteres es teljes szelessegu, es 3 kepernyo magas. Akkor te egy exos hivassal megmondhatod, hogy ennek a lapnak melyik soratol kezdve legyen a kepre rakva hany sor a lapbol.

Ha pld. te azt mondod, hogy a lap elso soratol legyen a kepen (kepen=lpt- ben, megjelenitve) egy teljes kepernyonyi sor (elfelejtettem hany karaktersor van a kepen, 24, vagy valami ilyesmi), akkor a 3 kepernyo meretu lapod elso kepernyoje fog latszani, a masik ket kepernyo epp nem latszik (mert nem fer a kepre) de attol meg a memoriaban le lesz neki foglalva a hely, folyamatosan, meg minden. A memoria allokalaa a videolap letrehozasakor megtortenik, es addig meg is marad mig a lap meg nem szunik. Persze maga a cime megvaltozhat az exos- ban rogzitett hivasok soran (mert azok a hivasok is allokacioval jarnak, es az exos atrendezheti a memoriat), de attol meg az, hogy a lapnak le van foglalva a memoriaja (mind a 3 kepernyonyi memoriaja elobbi peldaban) es folyamatosan lesz a memoriaban, az nem fog valtozni. Csak maximum a kezdocim valtozhat.

Namost ha te a 3 kepernyos lapodat nem az elso soratol, hanem a 10. soratol teszed a kepre, szinten teljes kepernyo magassagban, akkor a lapodbol a 10. soratol fog latszani egy kepernyonyi. Ha a lapodbol a 10. soratol teszel a kepernyore 15 sort, akkor a 10. soratol fogsz latni belole 15 sort, es a kepernyo tobi helyen olyan lapok reszeit fogod latni, amiket elotte valaki odarakott.

Mindez azonban nem valtoztatja meg a te lapod memoriajat, annak kezdocimet mindig vissza tudod kerni az exostol es mindig folyamatos lesz a memoriaban.

Akkor is ha valaki a kepen (lpt- ben), akar reszben, akar teljes egeszeben lefedi a te lapodat. A memoriaja ugyanott lesz, ugyanugy folyamatosan, csak epp nem fog latszani, vagy bizonyos darabjai nem fognak latszani.

Tehat ha csinalsz mondjuk egy teljes kepernyonyi memorialapot, fuggetlenul attol hogy a kepen latszik- e vagy sem, memoriaja lesz, el tudod kerni a kezdocimet es folyamatosan (szegmenshatarokat atlepheti a memoriablokk mindig, kezelni kell tudni) elerheted a lapod memoriajat. Es hogy a lap epp latszik a kepen, vagy sem, vagy reszben le van- e fedve a kepen mas lapok altal, az teljesen mindegy. Ha meg meg is jelenited a lapot, akkor hurra, meg latszani is fog, amit a memoriajaban kavarsz.

A videolapok offscreen memoriak, nincsenek direkt osszefuggesben a keppel. Az LPT koti a kepre a darabjaikat.

Ha pedig (pld. valami hardkopihoz, vagy ilyesmihez) teged nem bizonyos lapok memoriatartalma erdekel, hanem a kepernyon levo (lpt- ben levo) dolgok, akkor az lpt analizisevel tudod csak megoldani a dolgot, figyelembe kell venni hogy az lpt soraiban milyen videomodokban, milyen cimekrol van kep generalva. Biztos van valami egyeb nyilvantartasi indormacio is az exosban (pld. lapok elejen vannak ilyen nyilvantartasi adatok, meg nem tudom meg hol), amelyikek magasabb szinten megmondjak, hogy az lpt- ben epp milyen lapok vannak, melyik sorokban, de en ezeket nem ismerem, es sztm neked sem ez kell, vagy igen ?

Siman csinalsz egy lapot, kidobod a kepre, kezdocimet elkered, es irod a memoriajat (szegmenshataratlepes figyelembevetelevel) folyamatosan es kesz. Ha erre valaki rapakol akkor semmi nem fog tortenni azon kivul, hogy valamelyik soraid nem fognak latszani.
Z80 System

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #406 on: 2013.March.29. 10:15:04 »
Quote from: lgb
Kozben rajottem viszont hogy "hulye vagyok" a Z80 bit eltolas/forgatas opcode-okhoz mindig total keverem hogy melyik mit csinal
Ha jól tippelem ez kell neked:
Code: [Select]
LD HL,videocim
LD A,0FFH
PUSH HL
RL H
RLA
RL H
RLA
POP HL
OUT (0B2H),A
SET 7,H
RES 6,H
A videócím legfelső két bitjét átforgatjuk az A alsó két bitjére (Carry használatával), A többi bitje 1, így végül megkapjuk a videószegmens számát.
Utána pedig a videócím legfelső bitjét 1-re, alatta lévőt 0-ra állítva 2-es lapra konvertáljuk.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #407 on: 2013.March.29. 10:37:15 »
Quote from: Z80System
Namost egy lapon belul ez a terulet folyamatos, es az is marad. Tehat mondjuk letrehozol egy video lapot, ami mondjuk karakteres es teljes szelessegu, es 3 kepernyo magas. Akkor te egy exos hivassal megmondhatod, hogy ennek a lapnak melyik soratol kezdve legyen a kepre rakva hany sor a lapbol.

Szerintem nem marad folyamatos, ahogy ideztem is, leiras is irja, hogy valtozhat a sorrend pl scroll hatasara. Az mas kerdes, hogy mivel csak en irok ra (exos-on at nem), ezert ez valoszinuleg nem problema :)

Amiket leirtal amugy az mind vilagos, csak valahogy megse mukodik nekem ezek szerint. De majd megszakertem, lehet az emlitett bit eltolasos jatekoknal (nick es z80 cim kozotti "konverzio") szurtam el csupan az egeszet, az meg a jobbik eset :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #408 on: 2013.March.29. 10:41:08 »
Quote from: Zozosoft
Code: [Select]
LD A,0FFH
PUSH HL
RL H
RLA
RL H
RLA
POP HL
Bár nem sok jelentősége van, ezt egyszerűbben is meg lehet oldani: :)
Code: [Select]
LD A, H
RLCA
RLCA
OR 0FCH

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #409 on: 2013.March.29. 10:42:10 »
Quote from: IstvanV
Bár nem sok jelentősége van, ezt egyszerűbben is meg lehet oldani: :)
Igaz :oops:

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #410 on: 2013.March.29. 10:49:24 »
Quote from: lgb
Szerintem nem marad folyamatos, ahogy ideztem is, leiras is irja, hogy valtozhat a sorrend pl scroll hatasara. 
Szerintem a scroll hatasara csak az lpt soraiban valtoznak a memoriacimek. Errol ir a doksi. Attol meg az adott video lap memoriaja (a mindenkori kezdocimehez kepest) folyamatos es teljes a lap teljes mereteben, szent es sertehetetlen.

Valami tudos szakercse meg a kerdest... Zozo ?
Z80 System

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #411 on: 2013.March.29. 10:51:53 »
Quote from: Z80System
Szerintem a scroll hatasara csak az lpt soraiban valtoznak a memoriacimek. Errol ir a doksi. Attol meg az adott video lap memoriaja (a mindenkori kezdocimehez kepest) folyamatos es teljes a lap teljes mereteben, szent es sertehetetlen.
Így van. Elmozdulni elmozdulhat, de akkor is folyamatos marad.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #412 on: 2013.March.29. 11:38:06 »
Quote from: Zozosoft
Így van. Elmozdulni elmozdulhat, de akkor is folyamatos marad.

Tuti? En ezt olvastam: "The lines can end up in any arbitrary order" Lehet, a fogalmazas rossz, vagy az en angol tudasom de a "tetszoleges sorrend" nekem azt jelenti, hogy nem feltetlen marad folytonos!

Illetve OK, videomemoriaban nem rendezodik at, de a hatas ugyanaz: ha az EXOS megkeveri hogy az egyes sorokhoz tartozo LPB hova mutat a videoramban, ugyanugy bajban vagyok, mivel akkor ugye ha en lineariskent kezelt video memoriaba irok, az megjelenitesben nem feltetlen lesz ugyanolyan sorrendben ami nyilvan nemkivant hatas az en szemszogembol :)

De mint irtam, mindegy is, mivel exos nem fog ra irni (csak en, es kozvetlenul, memoriaba) szerintem ez engem nem zavar, max ha kozben vmi exos hivas van ami "arrebb rakhatja" az egeszet, de olyat nem tervezek csinalni.
« Last Edit: 2013.March.29. 11:48:12 by lgb »

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #413 on: 2013.March.29. 12:59:50 »
Quote from: IstvanV
Bár nem sok jelentősége van, ezt egyszerűbben is meg lehet oldani: :)
Code: [Select]
LD A, H
RLCA
RLCA
OR 0FCH

Aha, koszi! Meg Zozonak is. Valami hasonloan egyszeru elegans peldat tudnal adni ennek forditottjara? Amikor tudom a szegmens szamot, azon belul az "offsetet" es abbol kell nekem nick cimet szamolni. Ezt is megoldottam, csak epp tartok tole, hogy joval bonyolultabb mint az idealis megoldas, orajelciklusokat es utasitasok szamat nezve :)

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #414 on: 2013.March.29. 15:36:44 »
Quote from: lgb
Aha, koszi! Meg Zozonak is. Valami hasonloan egyszeru elegans peldat tudnal adni ennek forditottjara? Amikor tudom a szegmens szamot, azon belul az "offsetet" es abbol kell nekem nick cimet szamolni. Ezt is megoldottam, csak epp tartok tole, hogy joval bonyolultabb mint az idealis megoldas, orajelciklusokat es utasitasok szamat nezve :)
and 03h
rrca
rrca

a-ban a szegmens száma bemenetnek, és kimenetben a video address high byte-ja lesz a-ban

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #415 on: 2013.April.14. 00:18:01 »
Miért nem lehet vajon 16 bitet tolteni IX+nn címről ?

Szeretnék olyanokat, hogy: ld bc,25(IX), meg ilyeneket ... Ezt csak két lépésből tudom:  ld c,25(IX) ld b,26(IX) ?

Nincs erre valami trükk, amire nem gondolok ?
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #416 on: 2013.April.14. 00:30:09 »
Én egyébként teljesen azt hittem, hogy PC -s Z80 -as cross fordítókból (legyen az Assembler vagy C) nagy dömping van ... közben egy frászt ... alig van, vagy ha van, akkor szedett- vedett ...
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #417 on: 2013.April.14. 10:20:02 »
Van valami mód arra, hogy az ember kiolvassa a z80 -ból hogy azok a megszakítások, melyeket a DI/EI utasításokkal kezelünk épp engedélyezve vannak -e ? Tehát olvasni a z80 -ból azt, hogy DI vagy EI utasítást adtunk ki utoljára ?
Z80 System

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #418 on: 2013.April.14. 10:43:48 »
Igen, az LD A,I vagy LD A,R utasítás a P flagbe teszi az állapotot. Viszont hibásan működik ha pont abban a pillanatban jön megszakítás :-( ez a hiba csak a CMOS Z80-akban lett kijavítva.
Itt ír róla István, hogyan lehet mégis megoldani.

Online Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #419 on: 2013.April.14. 10:56:51 »
EXDOS így csinálja:
Code: ZiLOG Z80 Assembler
  1.         ;megszakítási állapot lekérdezése, megszakítások tiltása
  2.         ;C flag=1, ha tiltva volt
  3.  
  4. ldfc5:  XOR     A
  5.         PUSH    AF      ;0 a veremmutató
  6.         POP     AF      ;alá
  7.         LD      A,R     ;IFF lekérdezése
  8.         DI              ;megszakítás letiltása
  9.         RET     PE      ;visszatérés, ha engedélyezve volt
  10.         DEC     SP      ;veremmutató
  11.         DEC     SP      ;vissza
  12.                         ;NMOS Z80 bug ellenőrzés
  13.         POP     AF      ;itt nullának kell A-ba kerülni
  14.                         ;ha volt az LD A,R utasításnál megszakítás
  15.                         ;akkor nem 0 lesz
  16.                         ;ez esetben hibásan volt jelezve a megszakítások
  17.                         ;tiltott állapota
  18.         OR      A      
  19.         RET     NZ      ;visszatérés, ha volt megszakítás közben, C flag törölve
  20.  
  21.         SCF             ;C flag beállítva    
  22.         RET             ;visszatérés