Welcome, Guest. Please login or register.


Author Topic: CoProcessor (Read 76914 times)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #90 on: 2014.September.25. 21:50:15 »
Quote from: Povi
Pl. lehetne egy IS-BASIC 2.2, ami használja a koprocit, ha van. Ez már értelmes célnak tűnik, és az összes létező BASIC programra rögtön hatással lenne :-)

Na igen, kerdeses, hogy az IS-BASIC specialis szamabrazolasa (BCD alapu) hogy fer ossze ezzel, ott a konverzio durvabb lehet, mint a pascal eseten, remelhetoleg meg igy is megeri azert majd. IS-BASIC belso szamabrazolasanak teljes megreformalasa sokat dobna (eleve sw-only megoldasban is ugye lassabb mint konkurent BASIC-ek, a BCD hasznalata miatt - igaz, erossege is, mert pontosabb a szamabrazolas, emberi leptek szerint szokasos szamoknal), az viszont gyanitom hogy sokkal bonyolultabb mint csak az adott szamitasnal konvertalni IS-BASIC es APU kozott, majd a szamitas utan vissza ... Ha IS-BASIC eleve az APU formatumaban tarolna a szamot, az meg tobb sebesseget adna (es meg mindig lehetne sw rutin is, ami megcsinalja, ha nincs APU). Bar, mint irtam, az IS-BASIC erossege pont a gyengesege is, hogy kisse nehezen emesztheto (a gep szamara!) de sokszor praktikus celokra pontosabb szamabrazolasi modszert hasznal!

Kar, hogy nincs vmi modern, gyorsabb valtozata az Am9511-nek ami kb compatible. Ui eleg oregecske (kell neki +12V is talan?) es lassu, nem is konnyu szerezni ... Olyan kene ami konyebben elerheto, hogy tobb embernek is lehessen aztan. Sajnos szerintem kicsi a valoszinusege, hogy van ilyen, foleg, ha a kompatibilitas feltetel, marpedig nem artana egy "szabanyos EP co-proci ...".
« Last Edit: 2014.September.25. 21:53:51 by lgb »

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #91 on: 2014.September.26. 08:36:09 »
Quote from: lgb
Meg sehogy, kb egyetlen command-ot tud csak az a verzio amit a detektalashoz hasznaltal a rutinodban - nem csoda ha hulyseget csinal minden masra :D Amugy, ha emut stoppolod es a debug window-t nezed, valszeg' oda is van irva hogy milyen APU command-okat probaltal amit nem ismer. Az altalam iras alatt levo verzio meg meg syntax error mert eppen restrukturalas alatt all :-( Szoval azt nem tettem ki, el sem indulna az emulacio jelen formajaban ...
Csak azért érdekes, mert valamit mégis csak csinál, mert egyébként már forditás alatt le kéne állnia hibaüzenettel, amikor a forráskódban lévő számot alakítja át magának 32 bitesre, ugyanis akkor használja az összeadás rutinokat, de itt nálad legalább lefordul a kód. Valószínűleg a status byte olvasásánál nem 0xff jön vissza... :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #92 on: 2014.September.26. 08:49:10 »
Quote from: lgb
Na igen, kerdeses, hogy az IS-BASIC specialis szamabrazolasa (BCD alapu) hogy fer ossze ezzel, ott a konverzio durvabb lehet, mint a pascal eseten, remelhetoleg meg igy is megeri azert majd. IS-BASIC belso szamabrazolasanak teljes megreformalasa sokat dobna (eleve sw-only megoldasban is ugye lassabb mint konkurent BASIC-ek, a BCD hasznalata miatt - igaz, erossege is, mert pontosabb a szamabrazolas, emberi leptek szerint szokasos szamoknal), az viszont gyanitom hogy sokkal bonyolultabb mint csak az adott szamitasnal konvertalni IS-BASIC es APU kozott, majd a szamitas utan vissza ... Ha IS-BASIC eleve az APU formatumaban tarolna a szamot, az meg tobb sebesseget adna (es meg mindig lehetne sw rutin is, ami megcsinalja, ha nincs APU). Bar, mint irtam, az IS-BASIC erossege pont a gyengesege is, hogy kisse nehezen emesztheto (a gep szamara!) de sokszor praktikus celokra pontosabb szamabrazolasi modszert hasznal!

Kar, hogy nincs vmi modern, gyorsabb valtozata az Am9511-nek ami kb compatible. Ui eleg oregecske (kell neki +12V is talan?) es lassu, nem is konnyu szerezni ... Olyan kene ami konyebben elerheto, hogy tobb embernek is lehessen aztan. Sajnos szerintem kicsi a valoszinusege, hogy van ilyen, foleg, ha a kompatibilitas feltetel, marpedig nem artana egy "szabanyos EP co-proci ...".
Van ez a SPI / I2C buszos koproci, nem tudom, te ugyanezt linkelted-e már, ezzel lehetne esetleg foglalkozni:
http://micromegacorp.com/umfpu-v3.html
Bár kérdés, vajon gyártják-e még...
Olyan szempontból szerencsésebb, hogy legalább szabványos formátumot használ, a hibája az, hogy nem tudod közvetlenül 8 bites buszra illeszteni.
Viszont ha lesz egy kis időm, szeretném kipróbálni a PIC parallel slave port módját, és aztán PIC-en keresztül lehetne SPI (vagy I2C, vagy soros stb.) port EP-n is. Nem túl elegáns, de nem is rossz. Itt van egy doksi a PSP mód használatáról, elég egyszerűnek tűnik, forráskód is van, elég egyszerű program, egy bájt olvasása és írása a buszra.
Itt van egy érdekes cikk is a PSP módról:
"Every time when the main processor reads or writes data from or to this 
PSP port, an interrupt is automatically generated to the microcontroller central 
processing unit. So, it is very easy to interface one of these microcontrollers to a 
system with main Z80 microprocessor. Well programmed this device can be 
used like a timer, serial port, parallel port, I2C port, SPI port, or we can make 
use of the 10 bit integrated ADC or other peripherals that are in this particular 
PIC microcontroller (like the EEPROM nonvolatile memory block) [9]. It 
should be noted that the Z80 family of peripherals does not contain I2C or 
newer standards!"
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #93 on: 2014.September.26. 10:19:14 »
Quote from: Povi
Csak azért érdekes, mert valamit mégis csak csinál, mert egyébként már forditás alatt le kéne állnia hibaüzenettel, amikor a forráskódban lévő számot alakítja át magának 32 bitesre, ugyanis akkor használja az összeadás rutinokat, de itt nálad legalább lefordul a kód. Valószínűleg a status byte olvasásánál nem 0xff jön vissza... :-)

Ja :) Amugy pl nem vili, hogy nem letezo APU command-nal mi tortenik. A specifikacio szerint "nem definialt akkor". Az mas kerdes, hogy en meg az elvileg letezo command-okat se tudom :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #94 on: 2014.September.26. 10:27:17 »
Quote from: Povi
Van ez a SPI / I2C buszos koproci, nem tudom, te ugyanezt linkelted-e már, ezzel lehetne esetleg foglalkozni:
http://micromegacorp.com/umfpu-v3.html

Igen ez a a micromegas cuccot mar en is emlitettem, erdekes. Amugy ez allitolag egy sima mikrokontroller, a lenyeg benne az, hogy ok irtak es optimalizaltak kodot, ami aztan "FPU-kent" viselkedik ra. Van amugy benne mas erdekes is, csak emlekezetbol: soros port, A/D atalakito (vagy D/A?), amit igy mind lehetne hasznalni! Viszont, az, hogy ez mikrokontroller, eszembe jutatta, hogy nincs-e vmi open source PIC vagy AVR project, ami egy mezei "filleres" MCU-bol csinal vmi hasonlot. Az ugye egyszerubben beszerezheto akkor es val'szeg olcsobb is lenne :) Plusz, ott modunkban allna valtoztatni, akar pl Am9511 compatible reszt is irni (vagy az ultimate cucc: IS-BASIC float comaptible formatum is! es akkor az IS-BASIC egyszeruen gyorsithato, nem gond a sajat "fura" szamabrazolasi modszere ami fele BCD), vagy tudomisen ... Szerintem egy 8 bites MCU a megfelelo "firmware"-el tudna legalabb olyan gyors lenni mint egy "oskori" Am9511 (valaki pont be is idezett egy linket, hogy Am9511/micromega umFPU ugyben, ott volt talan osszehasonlitas is), es olcsobb is lenne, konyebben beszerezheto, kevesebbet fogyaszt, egyszerubb a tapellatas (+12V az Am9511-nek), stb stb. Sajat MCU-n valo FPU implementacio :) eseten meg lehet gondolkodni eleve pl a 8 bites buszban, SPI helyett. AVR (PIC nem tudom) eseten ugye van azert legalabb integer szorzas, ami sokat segit kulonbozo FPU rutinok hatekony implementalasaban esetleg ...

Visszaterve az umFPU-ra es az SPI-ra: azert vetettem fel meg anno, hogy egy univerzalis SPI interface-t kene epiteni EP-hez. Erre aztan egy rakas SPI eszkoz rakaszthato lenne, kezdve az SD kartyatol :) az umFPU-n at egeszen fura dolgokig: nagyon sok minden van SPI buszos cucc, pl RS232 illeszto, USB, stb, es az SPI busz alacsony vezetekigenye :) [8 bithez kepest] meg aztan egyszerubbe is tenne pl a PCB-t talan. Az SPI busz maga meg mehetne akar tobb MHz-en is, igy EP szamara nem lenne lassabb, mintha parhuzamos, 8 bites busz lenne akar!

Quote
Viszont ha lesz egy kis időm, szeretném kipróbálni a PIC parallel slave port módját, és aztán PIC-en keresztül lehetne SPI (vagy I2C, vagy soros stb.) port EP-n is. Nem túl elegáns, de nem is rossz.

Igen, errol is beszeltunk: oszinten szolva en AVR parti vagyok, nekem a PIC lassu (ugyanazon az orajelen), programozasa kenyelmetlenebb, hw bonyolultabb a programozasahoz, nincs megfelelo open source tamogatasa (windows cuccok kellenek a fejleszteshez, AVR-nel Linux ala egyszeruen domping van a software-ekbol), stb. _VISZONT_, meg kell, hogy valjam, ez a PSP erdekes, es ezert irigy is vagyok, hogy AVR-en nincs ilyen (hmmm, vagy van, csak en nem ismerem, pl mas a neve, ezert nem tunt meg fel?). Csak amiatt gondoltam mar en is a PIC-kel valo megismerkedesre :) Mondjuk AVR-nel is _elvileg_ talan menne, hogy Z80 ir/olvas az egy INT bemenetere az AVR-nek megy, igy gyorsan tud reagalni, kov utasitas akar a Z80 fele a WAIT, igy talan eleg gyors, hogy PSP es hasonlo nelkul is menjen, igaz pl "turbositott EP" eseten ez mar ketseges is lehet (nem emlekszem hany AVR orajelciklis az interrupt kiszolgalasi ido ...).
« Last Edit: 2014.September.26. 11:32:06 by lgb »

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #95 on: 2014.September.26. 20:27:06 »
A fenti novellam melle: kitettem az emu uj verziojat, a szokasos "uj" helyre: http://ep.lgb.hu/jsep/demo.new/

Ebben az eger kutyulgatas mellett jo sok APU fejlesztes is van, lehet probalkozni. Azert olyan programot nem futtatnek vele, amiben _sok_ apu-s cucc van. Azert nem, mert sok debug uzenet van, ha par ezer ilyet megereszt vmi, szegeny browser fejreallhat tole memoriahiannyal stb :-P Szoval a teljes mandelbrot halmaz kiszamolasahoz majd inkabb kiveszem a debug-ot :) Addig viszont marad, mivel jelenleg en sem vagyok biztos benne, meg JavaScript syntax error is lehet akar, elobb fuleltem le egyet oh-oh .... :)

Ami meg ujdonsag az elvileg osszes APU command implementalasan tul (az hogy azok jol mukodnek-e mas kerdes ...). hogy nemi idozites is van benne, Z80 "megallitasaval". Ahol a leiras szerint a szukseges ido egy tartomany, ott persze nem tudom megmondani, valodi APU pontosan mennyi ideig dolgozik (fugg a bemeno parameterektol ...) ott a tartomanybol hasrautesre beirtam egy szamot kb a ketto kozott ranezesre. Nem hinnem, hogy ez problemat okozna, hiszen az emulalt Z80 amugy sem talalkozik wait statusz bittel, tehat mire kov Z80 op jon, kesz a muvelet.

http://ep.lgb.hu/jsep/demo.new/apu.js Amugy ez az APU emulacio konkretan, ha valakit erdekel, de az okozott agykarosodasert amit a fenti cucc megtekintese okoz _nem_ vallalok feleloseget. :) Biztos, hogy sokkal jobban meg lehetne csinalni, lehet en is meg fogom :) Ha egyszer legalabb ez a gyors modszerrel kb megy ...

Ha valakinek van eszrevetele, jelezze, mert kozben a fejlesztoi (csak altalam elerheto) verzioban mar jo sok dolgot atirtam, de jo lenne esetleges bugfixeket is atvezetni oda, mielott annyira maskepp fog kinezni, hogy nem is tudom, abban hogy javitsam :) Vagy irnom kene egy teszt programot. Barcsak lenne igazi APU+EP akkor konyebb lenne osszehasonlitani, hogy mire mit csinal, igy eleg nehezkes a dolog, foleg egyes nem teljesen definialt helyzet eseten, amikor a leirasok se sokat segitenek, hogy akkor mi tortenik ...
« Last Edit: 2014.September.27. 10:40:41 by lgb »

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #96 on: 2014.September.29. 09:58:13 »
Quote from: lgb
A fenti novellam melle: kitettem az emu uj verziojat, a szokasos "uj" helyre: http://ep.lgb.hu/jsep/demo.new/

Próbálgatom az új emulátorral a Pascal 1.3-at, de nekem mindig lefagy...
Direkt próbáltam olyan programmal is, ahol nincs string - lebegőpontos szám konverzió egyik irányba se (mert azok is használnák a lebegőpontos rutinokat), és úgy se megy.
Code: [Select]
program proba;
var
  r : real;
  i : integer;
begin
  i := 10;
  r := i*pi;
end.
A sima emulátoron értelemszerűen overflow hibával megáll a szorzás utasításnál, mert a status byte-ot olvasva 0xff-et kapunk, és az overflow bit be van állítva (ezt nézi először).
Ha kiveszem a status byte vizsgálatát, akkor meg lefut a program (az már más kérdés, hogy az r változó értékét kiíratva marhaságot kapunk).

A web emu-ban pedig futtatáskor egyszerűen lefagy...
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #97 on: 2014.September.29. 10:53:42 »
megnéztem a debug-ot:
APU: write data: 0x0
REPEAT: last line was repeated 2 times.
APU: write data: 0xa0
APU: write data: 0x4
APU: write data: 0xd8
APU: write data: 0xf
APU: write data: 0xc9
APU: write data: 0x2
APU: float is internally pop'ed: 3.141592025756836
APU: float is internally pop'ed: 10
AUDIO: stop: audioNode has been unused already
AUDIO: stop: audioCtx has been unused already
Stop emulation

tehát elvileg a két operandust megkapta az APU...
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #98 on: 2014.September.29. 10:59:16 »
10 = 04 a0 00 00
PI = 02 c9 0f d8
szóval a konverzió jó, és ki is küldte az APU-nak
viszont nem látom, hogy a szorzás parancsot is ki küldte volna
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #99 on: 2014.September.29. 11:02:21 »
Quote from: Povi
A web emu-ban pedig futtatáskor egyszerűen lefagy...

Nyiss egy javascript console-t (firefox-on CTRL SHIFT K chrome-ban talan uez, csak K helyett J). Ha kozben vmi javascript errort ir ki oda, az akkor megmagyarazza :-) Ha ilyet latsz, kuldd mar el nekem legyszi. Amugy nem lehetne leforditott, egyszeru programmal (eleg futtatni, nem pascal-ban kell forditani elobb, persze legjobb lenne egy kvazi par byte-os sima exos-5 header program) tesztelni? Mert akkor ha azt odaadod (de lassan irok egyet en is, mert igy tenyleg nehez ...) akkor en is tudom jobban tesztelni :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #100 on: 2014.September.29. 11:05:33 »
Quote from: Povi
10 = 04 a0 00 00
PI = 02 c9 0f d8
szóval a konverzió jó, és ki is küldte az APU-nak
viszont nem látom, hogy a szorzás parancsot is ki küldte volna

Hmm, pedig debug window-ban latszania kene ... Ha pl az apu.com -ot betoltod (JSep default disk img-jen rajta van), akkor pirosra valt a kepernyo, jelezve hogy van APU (ha nincs, fekete). Az altalad irt detektalo rutin eredmenyet (A regiszter) irja ki egyszeruen keret szinnek. Ez ilyesmit ir a debug ablakba:

Code: [Select]
APU: write data: 0xef
APU: write data: 0x0
APU: write data: 0x83
APU: write data: 0x0
APU: command 0x6e has been executed, status = 0x0, stack_p diff = -2, TOS = 2, clocks = 89
APU: read data: 0x7a
APU: read data: 0x4d

Lathato, hogy a command-ot is latni kene. Ha nincs ott, akkor a programod vagy ki sem kuldi, vagy az emulatoromban van vmi JS hiba hogy nem jut el addig :D ebben az esetben a javascript console-ban kene latszodnia valaminek (lasd elozo post-omat errol).

A "command ... has been executed" utan azok az adatok ha erdekelne: status az ugye az APU status reg erteke, stack_p diff azt mutatja, hogy a stack allapota mennyit valtozott a command elott es utan, -2, azaz ket byte kiurult (hiszen volt ket operandus, maradt utana 1, de fixed 16 format, ahol egy op 2 byte), a TOS nem a TOS erteket, hanem a pointert ra mutatja, az APU stack szeruseg maga ui egy "ring buffer" szeru strukturaban van implementalva. A clocks az APU clock-ok szama, mint irtam, ahol a specifikacio tartomanyt ad es nem fix erteket, oda hasrautesre beirtam egy szamot a ketto kozott ... Ezt konvertalja (az JSep-ben jelenleg az APU 2.5MHz-esnek van "emulalva") Z80 ciklusokra (egyszeruen APU es Z80 clock kozotti arannyal) es annyi Z80 tstates-t "behazud" az emulatornak, igy kb olyan "erzes", mintha tenyleg wait-elve lett volna addig a Z80.
« Last Edit: 2014.September.29. 11:14:09 by lgb »

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #101 on: 2014.September.29. 11:10:18 »
ezt irja ki:

Uncaught TypeError: undefined is not a function

ep.lgb.hu/jsep/demo.new/apu.js?b=1378479743:172
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #102 on: 2014.September.29. 11:14:38 »
BASIC-ben fogok próbálkozni egy kicsit, egyelőre kiküldtem egy PUPI parancsot, arra ez jött ki:
0x02 0xc9 0x0f 0xda
szóval jónak tűnik
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: CoProcessor
« Reply #103 on: 2014.September.29. 11:18:11 »
Quote from: Povi
ezt irja ki:

Uncaught TypeError: undefined is not a function

ep.lgb.hu/jsep/demo.new/apu.js?b=1378479743:172

Hmm, ez erdekes. Firefox-szal kiprobalnad? Az a sor (172-es) ez:

Code: [Select]
var exp = Math.ceil(Math.log2(data));
Tehat en firefox32-n neztem ezt, te gondolom mas browseren (forum szerint chrome). Tehat a chrome nem ismeri a Math.ceil vagy a Math.log2 fuggvenyt, a firefox meg igen, csak ezt tudom saccolni. Ha lehet, tenyleg probald ki legyszi firefox -szal. En meg majd utananezek, mennyire standard ez a ket math rutin, es ha nem az, kitalalok valamit helyette, amit lehetoleg minden browser ismer. Koszi!

UPDATE: igazam volt, ketszer is :) eloszor is, hogy biztos JS hiba lesz, masodszor, hogy a chrome nem ismeri: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2 Tanacsom meg mindig az, hogy legyszi firefox-szal probald, en meg persze majd valami kompatibilisebb megoldast talalok oda ki, de az kb estere saccolhato, nem most azonnal.

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: CoProcessor
« Reply #104 on: 2014.September.29. 11:20:47 »
az a baj, hogy Firefox-on sehogy se tudom előcsalogatni a pontosvesszőt (Chrome-on meg a nyitó zárójelet)...
*** Speicherplatz zu klein