OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 18:44

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 370 ]  Přejít na stránku Předchozí  1 ... 20, 21, 22, 23, 24, 25  Další
Autor Zpráva
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 25.01.2022, 18:11 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Panda38 píše:
Asi by to nezvládalo, časově, nebo vyšlo moc složité, no já nevím... Já bych ten hw asi neuměl navrhnout.

To jsem myslel, jestli by to neumělo PIO ?
Vstupní a výstupní buffer řízenej /IORD a /IOWR

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 25.01.2022, 19:03 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
První část je hotová, pošta se dnes překonávala :mrgreen:. Teď ještě udělat druhou půlku s MH102 a může se začít s pokusy.


Přílohy:
1.png
1.png [ 648.39 KiB | Zobrazeno 1882 krát ]
2.png
2.png [ 391.46 KiB | Zobrazeno 1882 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 25.01.2022, 20:01 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 864 times
Been thanked: 697 times
danhard píše:
Panda38 píše:
Asi by to nezvládalo, časově, nebo vyšlo moc složité, no já nevím... Já bych ten hw asi neuměl navrhnout.
To jsem myslel, jestli by to neumělo PIO ?
Vstupní a výstupní buffer řízenej /IORD a /IOWR
Jak už jsme tu řešili - ještě rozumně se dá řešit zápis. Pico může být schopné pomocí PIO detekovat stav sběrnice, přečíst si adresu a data a provést zápis k sobě do paměti. Asi se dá takhle zpřístupnit i videopaměť, možná by jen nezvládalo plnou rychlost zápisu. Ale velký problém je čtení něčeho z Pico. PIO samotné nemá přístup k datům, aby něco vyčetlo a pustilo to na sběrnici. Pokud by detekovalo operaci čtení a načetlo si adresu, tu by předalo DMA řadiči, ten by zajistil načtení dat, ta by vrátil do PIO které by je odeslalo - celý ten proces by zabral hodně dlouhý čas, který by vyžadoval pozastavení sběrnice. Nestíhalo by to v reálném čase. V reálném čase by mohlo stíhat jedině když má vracet tak 2 nebo 3 hodnoty (podle adresy), jako to je např. u MH102. Muselo by se s ním pracovat tak, že zapisovat se do něj může, ale číst buď jen tak 2 typy hodnoty (např. stavový registr), nebo přes nějaké řídicí registry nastavit adresu a data přečíst až za chvíli. Nejde z něj číst okamžitě adresováním jako z paměti.

Kromě toho bude nutné ještě napěťové přizpůsobení 5V/3.3V.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 27.01.2022, 21:20 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Tak už mi obě pcb dorazila a mohl jsem verzi 2.0 sletovat :-). Teď už jen prográmek v C a může se vesele testovat násobení. PMD už nabíhá bez protestů, tak by to už mělo jet. Těch rezistorů si moc nevšímejte, v GME nemají rezistorovou síť 5k6, tak jsem to musel slepit z kusovek. :angel:


Přílohy:
Nasobicka V2.jpg
Nasobicka V2.jpg [ 462.08 KiB | Zobrazeno 1796 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 27.01.2022, 22:27 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
První postřeh - použil jsem rezistor jen 0.5 W a násobička ho hezky žhaví, má nejméně 60°C :-). I2C není zrovna úsporná záležitost.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 28.01.2022, 12:14 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
Czech Human píše:
Teď už jen prográmek v C a může se vesele testovat násobení.

a jak si to představuješ? Budeš to používat jen na násobení integer čísel nebo plánuješ nějakou komplexní jednotku která dokáže pomocí MH102 i násobení FP čísel?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 28.01.2022, 13:19 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Ono zmiňované BDS C co na PMD běží umí jen integer a float nepodporuje (a násobička taky umí defaultně jen integer). Sice na to existuje nějaký hack ale tomu já nerozumím a ve finále stejně program dostane zase jen integer. Je to bohužel omezení se kterým se nedá moc dělat, jedině snad používat Pascal MT+, ten má podporu i pro float.

Takže nyní je hlavním cílem ověřit, že ta konstrukce funguje a násobit v jejím fyzickém rozsahu 255x 255. Rombor mi na to napsal testovací prográmek, který hodlám dnes vyzkoušet na živém PMD. Přitom chci též zjistit co ty všechny signály s výsledkem udělají, protože v datasheetu toho moc není a v žádném 8bitu nejsou všechny nožky zapojeny, to až tady. Nejspíš to bude k ničemu ale alespoň budeme vědět jistě a nade vší pochybnost :-).

No a když se zadaří a násobička bude násobit, tak ten malý násobicí rozsah SW rozkladem čísel chci zvětšit na ideálně 32bitů výsledek tj. do 65535*65535. Panda38 už mi poslal ukázku jak to v C řešit. To by pokrylo asi převážnou většinu 8bitového násobení...

No a když by to urychlení bylo významně velké, tak jako vrchol snažení bych viděl tvorbu malé matematické knihovny mh102 v assembleru, co to bude dělat ve stylu sgl - jen se zavolá funkce mh102() a násobí se nebo se jede softwarově když násobička není k dispozici.

Kód:
/* ---------------------------------------- */
#include <stdio.h>

/* ---------------------------------------- */
/* Unsigned, RND=0 */
#define MH102_M1U   0x2C
#define MH102_M2U   0x2D
#define MH102_RLU   0x2C
#define MH102_RHU   0x2D

/* Signed, RND=0 */
#define MH102_M1S   0x2E
#define MH102_M2S   0x2F
#define MH102_RLS   0x2E
#define MH102_RHS   0x2F

/* Unsigned, RND=1 */
#define MH102_M1UR  0x3C
#define MH102_M2UR  0x3D
#define MH102_RLUR  0x3C
#define MH102_RHUR  0x3D

/* Signed, RND=1 */
#define MH102_M1SR  0x3E
#define MH102_M2SR  0x3F
#define MH102_RLSR  0x3E
#define MH102_RHSR  0x3F

/* ---------------------------------------- */
int main(argc, argv)
  int argc;
  char **argv;
{
  int m1, m2, rs, i, x;
  unsigned ru;
 i++;
 printf("Zadej 1 Bajt Unsigned, RND=0\n");
 scanf("%u", &m1);
 printf("Zadej 2 Bajt Unsigned, RND=0\n");
 scanf("%u", &m2);
 x = m1 * m2;
  ru = mul_u(m1, m2, 0);
  printf("Unsigned, RND=0\n");
  printf("%d x %d = %u\n\n", m1, m2, ru);
  printf("%d\n", x);
   i++;
  printf("Zadej 1 Bajt Unsigned, RND=1\n");
  scanf("%u", &m1);
  printf("Zadej 2 Bajt Unsigned, RND=1\n");
  scanf("%u", &m2);
  ru = mul_u(m1, m2, 1);
  x = m1 * m2;
  printf("Unsigned, RND=1\n");
  printf("%d x %d = %u\n\n", m1, m2, ru);
  printf("%d\n", x);
   i++;
  printf("Zadej 1 Bajt Signed, RND=0\n");
  scanf("%d", &m1);
  printf("Zadej 2 Bajt Signed, RND=0\n");
  scanf("%d", &m2);
  x = m1 * m2;
  rs = mul_s(m1, m2, 0);
  printf("Signed, RND=0\n");
  printf("%d x %d = %d\n\n", m1, m2, rs);
  printf("%d\n", x);
   i++;
  printf("Zadej 1 Bajt Signed, RND=1\n");
  scanf("%u", &m1);
  printf("Zadej 2 Bajt Signed, RND=1\n");
  scanf("%u", &m2);
  rs = mul_s(m1, m2, 1);
  x = m1 * m2;
  printf("Signed, RND=1\n");
  printf("%d x %d = %d\n\n", m1, m2, rs);
  printf("%d", x);
   i++;
  if(i>=4) return 0;
}
/* ---------------------------------------- */
unsigned mul_u(m1, m2, rnd)
  int m1, m2, rnd;
{
  unsigned ru;

  if (!rnd) {
    outp(MH102_M1U, m1);
    outp(MH102_M2U, m2);
    ru = (inp(MH102_RHU) << 8) | inp(MH102_RLU);
  }
  else {
    outp(MH102_M1UR, m1);
    outp(MH102_M2UR, m2);
    ru = (inp(MH102_RHUR) << 8) | inp(MH102_RLUR);
  }

  return ru;
}
/* ---------------------------------------- */
int mul_s(m1, m2, rnd)
  int m1, m2, rnd;
{
  int rl, rh, rs, s;

  if (m1 < 0)
    m1 = (-m1) | 0x80;
  if (m2 < 0)
    m2 = (-m2) | 0x80;

  if (!rnd) {
    outp(MH102_M1S, m1);
    outp(MH102_M2S, m2);
    rh = inp(MH102_RHS);
    rl = inp(MH102_RLS);
  }
  else {
    outp(MH102_M1SR, m1);
    outp(MH102_M2SR, m2);
    rh = inp(MH102_RHSR);
    rl = inp(MH102_RLSR);
  }

  s = rl & 0x80;
  rl = (rl & 0x7F) | ((rh & 1) ? 0x80 : 0);
  rh = (rh & 0x7E) >> 1;
  rs = (rh << 8) | rl;

  return (s) ? -rs : rs;
}
/* ---------------------------------------- */


Trošku jsem to v Basicovském stylu upravil aby se daly čísla zadávat uživatelem a program vypsal kontrolní násobení, spočítané standardním způsobem. Binárku sem dávat asi moc smysl nemá, když jediné PMD s přidrátovanou MH102 je teď nejspíš jen to moje...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 28.01.2022, 15:41 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
ono právě samotné násobení je sice hezké akcelerovat, ale nejvíc se to projeví až u složených funkcí typu exp, log, sin, cos, kde se při jejich výpočtu používá násobení
nejlepší cesta by byla překopat zdrojáky toho Cčka aby si použil MH102 na výpočty, ale pochybuji že by ta námaha a čas tomu věnovaný měl větší přínos


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 28.01.2022, 16:20 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
To vím ale v BDS C je podporovaný maximálně pouze long integer takže výše napsané funkce jsou problém. Nedovedu si představit kdo by do něj ten float uměl dostat. Ani zatím nevím jak moc rychlejší ta násobička bude, Basic se urychlil o 10 - 30% což sice není málo ale nejsou to ani násobky i8080. Zkusím dlouhé řady násobení, třeba 10 000x tam už se ten rozdíl projeví. Násobička je rychlá ale je dost režie s porty a bajty, zejména u větších čísel.
Celé to beru hlavně jako zábavu a zároveň se učím C. Nějaká praktická využitelnost tu asi moc nehrozí i když díky romborovi a jeho sgl knihovně to je na hry a aplikace se soubory dost schopné.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 28.01.2022, 17:18 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Násobička bohužel stále zlobí, počítač se s ní chová vysoce nestabilně a klávesnice čte alespoň 10x rychleji než normálně. Asi to dělá nějaký čurbes na sběrnici ale nevím proč :-/. Bez ní PMD funguje normálně.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 29.01.2022, 00:20 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Ještě jsem si s tím "chvíli" hrál a násobičku jsem dal zpět ale po vzoru PP-01 jsem vyhnul pin RND1 pryč ze socketu a výsledek se dostavil - počítač začal být o dost stabilnější a hlavně to už začalo něco počítat. Ne vždy správně, protože buď dochází k přetečení už u malého čísla nebo je nějaká chybka v algoritmu skládání čísel kladných čísel, protože základní výpočet cca 10x10 proběhne bez chyby ale 32x4 už hodí chybu, typicky nějaký dvojnásobek, třeba 512 místo 256 či 256 místo 128 nebo číslo blízké dvojnásobku správného výsledku, u větších to klidně přeteče do záporných hodnot. Záporné násobení se ale obvykle spočítá dobře.

Zatím bez výjimky se to zakousne když doběhne program a začne se psát další příkaz, sem tam to zamrzne uprostřed programu. Někdy se podaří že se spustí program 2x, ale víc jak 3 pokusy to nikdy nedalo. Dost často CP/M hlásí Bad sector na disketě, takže nejspíš dochází ke korupci dat na sběrnici při určitých kombinacích bitů, což je smrtelné. Bez násobičky v socketu se ale PMD chová vzorně a nic nepadá, normálně jsem skompiloval i ten mou lehce upravený "TSTMH103" a vyzkoušel práci se soubory a vše funguje korektně. Tedy bude tam asi nějaký mišmaš v datových signálech co prosakuje v určitých momentech do PMD. Když je v PMD zasunuté to pcb tak díky resistorové síti na +5V se na daných portech spolehlivě čte 255, čili celý problém spolehlivě leží v násobičce samotné.

Je to teď řekl bych funkčností někde na půli cesty, ještě pár úprav a ošetřit to přetékání hodnot a už by to mohlo i celkem běhat... Jen to teď chce proměřit co přesně ta násobička dělá za čurbes na sběrnici a kdy, když je s ní PMD aktuálně vysoce nestabilní. Byl by někdo ochotný to proměřit a hledat kde ji tlačí bota?


Přílohy:
4.jpg
4.jpg [ 183.47 KiB | Zobrazeno 1638 krát ]
3.jpg
3.jpg [ 172.96 KiB | Zobrazeno 1638 krát ]
1.jpg
1.jpg [ 286.36 KiB | Zobrazeno 1638 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 29.01.2022, 10:31 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Pokud na PMD-85 dochází k velice rychlému a nerovnoměrnému opakování klávesy při jejím stisku, je na vině "nečitelný" UART 8251 nebo časovač 8253. Stejně to dělá při odpojeném modulu interface. Asi ta násobička opravdu blokuje sběrnici. Jestli máš aktuální schéma připojení té násobičky, pošli mi je nebo je dej sem. Pokud tady někde je, tak se omlouvám, nenašel jsem...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 29.01.2022, 12:40 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Ještě jsem to sem nenahrál, ale tady to je. Zapojení je přísně katalogové viz předchozí pandovo přílohy i když tu není rezistorová síť 5k6 tak na pcb je přítomná a přidal jsem i jeden 100n kondenzátor mezi pin 16 násobičky a GND. Rezistor musí mít 1W, násobička žere maximálně 0,9W (5V x 0.18A).

Zásadní bude to na živém PMD fyzicky proměřit, ještě mě napadla průchozí redukce s dvojitým FRB aby se dal připojit i ROM modul s Basicem a násobičkou naráz coby odpověď na nepřítomnost float u BDS C a jeho přítomnost v Basic G.

Jsou na ní dva rozsahy portů 2Ch-2Fh a 3Ch-3Fh a potom druhý 88h - 8Bh a 98h - 9Bh, standardně se používá ten první.


Přílohy:
MH102.pdf [33.96 KiB]
78 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 29.01.2022, 13:03 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Ten vstup A0 obvodu MH102 má dle katalogu celkem velký vstupní proud. Zkus jej někde na patici odpojit, aby nezatěžoval sběrnici a odsleduj, jestli se neztratily ty problémy s vlastním PMD-85 (klávesnice).

DOPLNĚNO: Nevím, zda jsem si všiml dobře, na tom GALu odděluješ sběrnicový A0 pro MH102? Pokud ano, pak je vše v pořádku a to výše uvedené neplatí. Někde jsem tady v diskusi zaregistroval debatu o aktivní hraně signálu /IOW. Tyto signály rozhodně nezkracuj. Nevím, jak máš udělány rovnice pro GAL... Zkusil bych ještě do patice místo MH102 napojit DIP přepínače a otestovat čtecí port jako takový.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 29.01.2022, 13:36 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
GAL tu žádný není, konstrukce si vystačila s násobičkou MH102, oddělovačem sběrnice 74LS245N a demultiplexorem 74LS138N. Ten /CSN signál jde do obou čipů naráz po jednom fousu.

A0 jde do násobičky přímo, třeba to dělá ten čurbes. Jenže se používá pro zápis dat, pin A0 na násobičce je zásadní pro její chod. Vytrhnu to ale ven a uvidíme, kdyby to bylo ono tak by možná stačilo ho přemostit přes další hradlo, je to jednocestný signál do násobičky. Každopádně díky za tip :like: .


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 370 ]  Přejít na stránku Předchozí  1 ... 20, 21, 22, 23, 24, 25  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 15 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz