Welcome, Guest. Please login or register.


Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - balagesz

Pages: [1] 2 3 4 5 6 7 8 ... 17
1
EP128Emu / Re: Plus4emu
« on: 2020.February.05. 21:04:30 »
Igen, ha 16K memóriát állítasz be neki, illetve kiszeded a ROM-ok közül a 3-plus-1-hez tartozókat, akkor kb. meg is kapod a C16-ot / C116-ot.

2
Programozás / Re: UNIX Enterprise-on
« on: 2019.January.10. 15:46:58 »
Még a végén használható lesz? :) Amúgy ez még mindig nem teljesen világos: most tulajdonképpen egy PDP-11 emulátort kezdtél írni Z80-ra? Vagy ez valami kész projekt portolása EP-re? Mondjuk az előbbire tippelek, szép feladat. :) A "be/kimeneti eszköz" ott mi volt? Soros porti terminál? Vagy valami bonyolultabbat kell emulálni? (Csupa kérdés... :mrgreen: )

3
Programozás / Re: UNIX Enterprise-on
« on: 2018.December.20. 15:02:40 »
Annyira nem siet... :-D

Jól gondolom, hogy itt tulajdonképpen a PDP-11 16 bites ISA-t emulálod Z80-nal? Pöpec... ;)

4
Programozás / Re: Enterprise billentyűzet és joystick teszt
« on: 2018.December.20. 14:51:07 »
Örülök hogy segített! A program tulajdonképpen ezért készült! :)

---

I'm happy! The program was actually made for this! :)

5
Programozás / Re: Enterprise billentyűzet és joystick teszt
« on: 2018.December.16. 22:21:33 »
Ugyan régi téma, de egy kicsit felhozom. Az eredeti tesztnek készült egy kicsit módosított változata, a nyitó posztban módosítottam is a linkeket. (De ott maradt az előző verzióé is.) Két változás történt:

  • Az első verzió "intelligensen" próbálta megállapítani, hogy a lenyomott gomb az lehet-e tényleges lenyomás. Ez alapból jól is működik, bizonyos szituációkban több gomb egyidejű lenyomása is jelezhető "jó lenyomás"-nak (ekkor "zöldül ki" az adott felirat háttere). Viszont ilyen eset akkor is előfordulhat, ha a mátrixban sor vagy oszlop-zárlat van. Mivel a program inkább teszt mint nem, ezért az új verzióban csak akkor "zöldül" a háttér, ha csak egy mátrixpont aktív.
  • A mátrix sorok állapota EP-n nem olvasható vissza, így azok nem tesztelhetők, de az oszlopok esetén ha valamelyik a föld felé zárlatos, azt most már jelzi piros háttérrel az adott oszlop "nevének" a hátterében.

Egyéb módosítás (azt hiszem :oops: ) nincs.

6
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.03. 21:55:05 »
- Az összeset csak akkor küldi el, ha "N key rollover" -es, a legtöbb modern billentyű csak 3-10 key rollover, főleg az USB -sek, de PS/2 is ...

Persze, csak ezt nem akartam belekeverni.

- Hogy csak az utolsót ismételné ... annak meg mi értelme lenne ? Ha N van lenyomva, ismételni is N -et kellene ...

Mi értelme? Pont annyi, mint a billentyűzet felől az ismétlésnek magának: semmi. :-D Ez csak a klasszikus pécé, ahol "miért ne" alapon el vannak bonyolítva bizonyos dolgok. Mint fentebb írtad: ezt az ismétlés témát célszerű az OS-nek kezelni (és persze kezeli is), a periféria csak akkor mondja hogy mi van, ha változott valami.

7
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.03. 20:46:49 »
Megírtam mind a 4 kombinációt, és végigteszteltem mind a (maradék) 3 kombinációt ...
Mindegyikben jó. :smt045 :smt045 :smt045

Na, ez jó hír! Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést. (Legalábbis azt hiszem... :) ) A lényeg: kellene még egy, csak az IT rutin számára lefoglalt regiszter. :-D Ennek semmi speciális képesség nem kell, simán jó mondjuk az R2..R15 közül bármelyik, én most az R2-t kiválasztom önkényesen. Ha ez megvan, akkor a megszakítási rutin ilyen lenne:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2
  RETI

Tehát az IT rutin hossza nem változik, csak az YL-be felolvasott 4 bitet nem rontja el, hanem az R2-be olvassa be a kimeneti portra valót, majd ezekben a regiszterekben ezek bent is maradnak. Ez fontos! :) A főprogramban a port frissítése meg így néz ki:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2

Na most. Ezt a 3 utasítást akármelyik pozícióban megszakítja az EP-s portírás IRQ-ja, akkor "csak" annyi történik, hogy az IT rutinban a használt regiszterek frissítik az ebben a rutinban használt regisztereket, szóval hiába másik sort kezd el a főprogram frissíteni, a közbe beeső IT módosítja a főprogram regisztereit is, azaz az itteni OUT mindig az aktuális sort fogja beállítani. Ha jól sakkozok... :-D

Ez tehát beterheli a vezérlőt az EP oldali megszakítással,
én pedig párhuzamosan rátenyerelek az összes billentyűre, amit csak elérek,
és nyomva tartom őket. (Reset billentyűket kivéve persze ...)

Ekkor a PS/2 billentyű is küldi az összes billentyűjét a vezérlőnek repeat rate -tel ismételve.

Az én régi emlékeim erről olyanok, hogy ha egyszerre sok billentyűt nyomsz le, akkor nyilván elküldi a billentyűzet az összes lenyomott gomb (MAKE) kódját. De ismételni csak a legutoljára kiküldött kódot fogja, nem az összeset. Sőt: ha egy előzőleg kiküldött billentyűt közben felengedsz, akkor kiküldi annak a felengedési (BREAK) kódját, de az ismétlést ettől abba is hagyja. Persze változhatott a spec, a tévedés jogát fenntartom, stb...

8
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 23:08:45 »
Csak sajnálom rá az időt ... elméletben ... :)

:-D A tesztedet átírtad az IN A,(0b5h)-s verzióra? (Az OUT utasítás nem számít.)

9
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 22:14:36 »
Kell az a tiltás, mert ha a 4 bit felolvasása után esik be egy megszakítás, akkor miután visszatér belőle, még az előző állapot alapján fogja a főprogram frissíteni a kimeneti 8 bitet. De lehet hogy ez így már ismét lassú lesz, akkor valami egyéb megoldást kell nézni a frissítésre. Még gondolkozok.

10
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 21:15:40 »
No, jó hírek! :)

És most üt meg a guta ... :smt010 :smt011 :smt013

Még mielőtt szétbombázod... :) Megmaradt végül a PS/2 IT-d is? Mert ha azt a késleltetést elviseli, akkor talán ennyi lenne a főprogramos frissítés:

Code: [Select]
  CLI
  IN   YL,PINF
  LD   YL,Y
  OUT  DDRB,YL
  SEI

Ezt a rutint minden táblázatfrissítés után lefuttatod, akkor kb. jó is lesz. Ha nem, akkor van értelme tovább gondolkozni az algoritmuson.

11
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 15:56:09 »
Az 1 dolog, hogy ez EP oldalról jön egy akár 1 MHz -es nagyságú megszakítás, amit villámgyorsan ki kell szolgálni.
De hát jön a PS/2 oldalról is egy (jóval kisebb, általában 10 KHz - 30 KHz esetleg 100 KHz körüli megszak),
amit ha nem is olyan gyorsan, de azért észre kell venni, és kezelni kell ...

Ez még szerintem nem főprogram kategória ... hogy főprogramból pollozzam a PS/2 órajelet ...

Pedig... :) Ha a másik megszakítás előbb esik be, amire ha ritkán is, de lesz alkalom, akkor az megnyújtja az EP-s megszakítás reakcióidejét. Egyrészt a fent említett +5 órajelciklussal, amihez még hozzájön az, ameddig a SEI érvényre is jut. Az összesen akár lehet vagy 8 órajel... :oops: Még akkor is, ha a másik IT rutinnal is eljátszod azt, hogy a SEI-t (vagy a komplett rutint) ugyanúgy a belépési pontra rakod.

Így az INT0 meg fogja tudni szakítani az INT1(3) -et, míg fordítva nem igaz.

Ez még jó is lenne, ha azt a +8 órajelciklust elviselné az EP-re reagálás. Elviseli? ;) A programod amúgy most mit is csinál? Egyrészt reagál az EP-re, másrészt kezeli a PS/2 portot. Ezen kívül? A PS/2 kezelésén kívül a kapott adatokkal annyira kevés feladat van, hogy az simán belefér a bill. felől jövő bitek kezelése közé időben. Ha csak nem akarsz ott is valami nagyot trükközni.

A portot nem is láttam, asse tom létezik -e, nincs belőle kivezetés ...
B -port az egyetlen összefüggő 8 bit, az kell a billentyűzet sornak ...
C- portból 2 bit van, azon is 2 SMD led lóg a lapon gyárilag ...
D -port az teljes, de az alsó 4 bitjére tették a 4 hardver megszakítást, amiből nekem 2 kell, szal ott sem szabad az alsó 4 bit ...
E -portból 2 bitet hagytak csak meg szintén ...
F -porton is csak a felső 4 és az alsó 2 van kivezetve ...

"A" port ezen a tokon nincs. A "B" teljes, a "C"-ből csak 2 van kivezetve, a "D" teljes, az "E"-ből 2, az "F"-ből meg 6 van. Bár, ahogy a blokkvázlatot nézem, az "F"-nek van köze a "D"-hez meg a "B"-hez is, de hogy mi, azt most nincs türelmem kikeresni. :) Ezért is hátrány ezeknek a "kész" paneleknek a használata, ha valamire valamelyik láb el van használva, akkor így járás van.

12
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 14:40:31 »
Ez az AVR megszak dolog úgy van,
hogy ugye nekünk kb 1 us altt kéne a válasz, ami ugye 16 MHz -es AVR -nél 16 darab órajel,

namost a megszakítás kiváltódásától minimum 5 órajel az AVR -nek mire ráugrig a megszak vektorra,
ahol egy további ugrás van a megszak kódra, ami még 3 órajel,
szóval 8 órajel már eltelt, mire elindul a megszak kód,
és ugye az a megszak kód az 4 órajel.

Tehát elvben mi megvagyunk 12 órajel alatt, mégsem tökéletes ...

Upsz, erről a plusz ugrásról meg is felejtkeztem. :oops: Ha jól értem az IT rutinod, az INT0-t használod, aminek a belépési címe a $0002, ide kerül most az ugrás. Ha a következő vektort, az INT1-et nem használod (ne használd! :) ), akkor az ugrás helyére, tehát $0002-re közvetlenül odarakhatod a jelenlegi komplett megszakítás rutint, ami összesen 4 utasítás, tehát csak az INT1 ugrásának a helyére lóg rá. Így megspórolod az ugrás 3 órajelét, ami szerintem pont elég.

Megpróbálom ellenőrizni, hogy mi van a megszakításokkal, ugye párhuzamosan van 2 megszak, plussz a főprogram,

Mivel ennyire határeset lett a dolog, attól a másik megszakítástól ideje megszabadulni. :)

Most pedig úgy használom, hogy a port felső 4 bitje csak a felhúzott bemenet, az alsó 4 bit az lenullázott kimenet,
és csak a felső 4 bitet használom az EP megszakban, a PS/2 data vonal átkerült a D port 4. bitjére.

Akkor így a billentyűtábla egy 256 BYTE-os területre van szétszórva, minden 16. BYTE az értékes? Így is jó! :)

13
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.02. 13:51:36 »
de az EP oldali megszak az lefutó él érzékenyre van konfigolva.
(Mert annó azt mondták, hogy mikor kész a bill. sor 4 bites címe, akkor ezt egy lefutó él jelzi az 5. dróton.)

Valójában a felfutó él fogja a tárolást elvégezni, akkor kerül ki a 4 vonalra a beírt érték. A lefutás viszont a ciklus elején, egy kicsit előrébb van időben, de mire az AVR kódja a kiolvasáshoz ér, addigra a felfutás is meglesz, ha csak nem túl gyors a Z80. :)

Csak én az Y regiszterrel oldottam meg, mert az X és Z regiszterekhez jobban ragaszkodik az avr-gcc.
(Le lehet azokról is beszélni, de az Y -ról volt a legkönnyebb.)

Ez azért jó hír. Közben ránéztem a Z80 adatlapjára, azért látok érdekességet... :) Az IN r,(C) utasítás a doksi szerint 12 ciklus alatt fut. Az IN A,(n) meg csak 11, ez alapján a valódi címet tartalmazó utasítás gyorsabb, mintha a cím a C regiszterben lenne, és azzal történne az olvasás. (Ugyanez vonatkozik az OUT-ra is.)

(Ha valaki tud Z80 -on gyorsabb OUT/IN párt, az légyszi szóljon, mert akor nem a leggyorsabbat tesztelem ...)

Akkor szólnék, :oops: az IN A,(0b5h) a fentiek szerint gyorsabb, de ez nekem egy kicsit furcsa. Mindkét utasítás 2 BYTE-os, a (C)-s címzésűnél a második BYTE tartalmazza a regiszter számát. A Z80 ezt a BYTE-ot is úgy olvassa be, mintha op-kód lenne? (Tulajdonképpen az is. :) ) Ezt azért valaki megerősíthetné, hogy tényleg így van-e. :-D

Az IN utasítás 11 órajelciklus, de az a komplett végrehajtás, én inkább számolok most 10-zel. A 10 MHz-es Z80 ezt 1 µSec alatt futja meg, ennyi idő alatt 16 órajelciklus fog végrehajtódni az AVR-en. Nem mondanám, hogy rengeteg idő, de a "mini" IT rutin lényegi része 4 alatt megvan, rossz esetben egy 4 ciklusos utasítás szakítódna meg, az eddig 8. A maradék 8 csak elég arra, hogy az AVR oldalán elkezdődjön a végrehajtás, de ezt most nem kerestem ki.

Lehet hogy a D port 4 -es számú (ötödik) bitjének digitális bemeneti felhasználásához valami kontrol porton le kell tiltani valami magasabb szintű funkciót ? ? ?

Milyen µC van ezen a board-on? ATmega32U4? Most nézem az adatlapját... Ennek az "F" (meg az "E") portja nincs is teljesen kivezetve a tokon kívülre?! Az "F"-nek hiányzik a 2 + 3 bitje. Azt hogyan szeded fel? Persze beköthető helyette a 4 + 5, de akkor a billentyűtábla egy kicsit megkavarodik. :) A PD4 egyrészt timer funkció lehet, ezen kívül meg még analóg bemenet. RESET után egyik sem lesz aktív, a kérdés az, hogy az arduino mit konfigol be induláskor.

14
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.November.01. 23:13:31 »
Az biztos hogy a legnagyobb prioritású megszakításra állítottam, és assembly -ben van,
de kérdés, hogy lehet -e annyira felgyorsítani, hogy működjön 7.12 MHz -en vagy 10 MHz -en is ...

(Maga az AVR ugye 16 MHz -en fut ...)

Optimalizálási lehetőség az van sok. :) Három dolog is eszembe jutott:

Az AVR inicializációs kódját nem láttam, a megszakításod melyik élre van beállítva? Ha jól sejtem (a rajz alapján), a regiszter beíró jelek aktív alacsonyak. A sorszámot tároló tároló :) felfutóélre tárol, azaz az írási ciklus végén jelenik meg a kimenetén a beírt adat. Ha az AVR megszakítása már a lefutóélre indul, azzal lehet nyerni egy kis időt.

Az IT rutinodból azt veszem ki, hogy az "F" port aljára van bekötve a 4 sorkiválasztó vonal. Ha meg tudod azt tenni, hogy a felső 4 lábát az "F" portnak nem használod semmire, akkor állítsd be ezeket kimenetre és kapcsold őket alacsonyra. Így amikor a portot majd beolvasod, a kapott BYTE teteje mindig 0 lesz, nem kell majd maszkolni, azaz kihagyhatod az ANDI-t, -1 utasítás. :)

Azért is jó az AVR mint CPU-mag, mert van neki rengeteg regisztere. Simán meg lehet tenni, hogy kiválasztasz közülük párat, amit csak a megszakítás használ, illetve annyit, hogy a megszakítás mást ne is használjon, csak a kiválasztottakat. Így kihagyható a regiszter-mentés / visszaállítások zöme az IT rutinból. Hardkór változatnak én azt csinálnám, hogy kiválasztanám csak az IT használatára az r26/r27 regiszterpárt. Ez az XL/XH, vagy egésznek az X. A 16 BYTE-nyi billentyűtáblát mondjuk 0x0100..0x010F memóriaterületre raknám, a főprogram valahol az elején beállítaná az XH-t ennek a címnek megfelelően 0x01-re. A megszakítás rutin akkor így nézne ki:

Code: [Select]
  IN   XL,PINF     ;Kiválasztott sor számának beolvasása, 0x00..0x0F
  LD   XL,X        ;Táblázatból felszedve a kiválasztott sor adata
  OUT  DDRB,XL     ;Oszlop-érték beállítása a billentyűzet felé
  RETI

Aztán a megszakítási rutin ennyi is. Azért elég ez, mert egyrészt csak olyan regisztert használ, amit a főprogram nem, másrészt magát a státusz-regisztert sem kell menteni / visszaállítani, mert a fenti utasítások közül semelyik sem módosít egy státusz-bitet sem. Ha az "F" port felső 4 bitje használatban van, akkor a maszkoláshoz kell az ANDI, az viszont bántja a státusz-regisztert, akkor annak a mentése / visszaállítása még kell, de ahhoz is célszerű kinevezni egy csak erre a mentésre használt regisztert, így nem kell vermelni / visszaolvasni, a PUSH/POP az 2-2 órajelciklus.

Ezekkel azért eléggé sok idő nyerhető, viszont az XL/XH regiszterpár lefoglalásával lehet gond; milyen nyelven is programozod azt a tokot? :) Assembly-ben sima liba, de ha az Arduino saját nyelvét használod zömében, az - ha jól tudom - végül is az avr-gcc-vel forgat. Abba jó kérdés, hogy ezt a két regisztert lehet-e lefoglaltnak definiálni, hogy máshol ne használja. (Ugyan ezen regiszterpáron kívül van még kettő, ami így összevonva pointerként használható, de na. :) )

Ha ezen kívül is kellene másik megszakítást használni, az annyiban mindenképpen bonyolítja a szituációt, hogy annak az IT rutinjának egy SEI-vel kellene kezdődnie minimum, de az megnövelné a reakcióidőt mindenképpen, szóval az ellenjavallt. :) De az AVR kódját lehetne nagyon egyszerűnek tartani; úgyis az volt a terved, hogy majd az rPi fogja neki tolni a teendőket. Azt a legegyszerűbb úgy megcsinálni, hogy az AVR-en a sima soros portot, az USART-ot használnád, annak a bemenetére (RxD) az rPi usartjának a kimenetét (TxD) még rá is lehet kötni közvetlenül. Így egy vezetékkel az AVR irányába lehet küldeni bármit. Visszafele irányra valószínűleg sok szükséged nincs is.

15
Hardver / Re: HID kezelés ReLoaded (Enter the RPi)
« on: 2018.October.21. 19:46:50 »
Hát persze ... négy marék IC ide, négy marék IC oda ... azt megfűszerezzük fél marék ellenállással, és csipetnyi tranzisztorral,
mindezeket ízlés szerint bedisznózva, vagy egy kisebb focipálya méretű nyákra rendezgetve tálalható is a cucc ...

Pontosan. :) Visszakanyarodtunk megint ide, ahol az elején tartott a projekt: a "csak kész eszközöket bedrótozunk" verzió kevésbé működőképes, mivel elég speciális a feladat. Nem véletlen, hogy manapság ezt a fajta billentyűzetkezelést nem csinálják. :-D

Namost ha ezek szerves részét képezik fenti programnyelv(ek)nek,
és az ezekkel megfogalmazott működéseket állítólag programozható logikai eszközökbe lehet írni,
akkor valakinek a logikai hálózatra történő konverziót el kell végeznie közben ...

Szerves részét képezik, de azt ne felejtsd el, hogy a VHDL / Verilog az nem programnyelv, hanem hardver-leíró nyelv. Soros "végrehajtás" itt akkor lesz, ha a lépések állapotát eltárolod magad. De ha tovább csavarjuk a megfogalmazást, eljutunk odáig, hogy lesz egy FPGA-ba implementált processzorod. :-D

Pages: [1] 2 3 4 5 6 7 8 ... 17