Hangok a sok közül

 ( balagesz | 2014. május 14., szerda - 23:14 )

A múltkori hang-projekt azóta is hibátlanul üzemel, éppen ideje a sok bemenet közül még egyet felhasználni. A most tárgyalandó „hang” jellegéből adódóan mondjuk ez nem lesz állandó igény, de legalább van egy indok, amiért nekiállhatok forrasztgatni. Az ilyen forrasztgatásos projektjeim általában gyorsan összeállnak, érdekes módon ezen „nyammogtam” egy sort. Már a hozzá készülődés se volt valami túl tempós; nem is emlékszem rá, hány éve (sok...) tervezem. :) Na de miről is van szó? (Mellébeszélés kezdődik!)

Amikor a pc-s „pályafutásom” kezdtem, az első gépem egy 12 MHz-en (!) üzemelő XT lett volna, csak össze kellett volna építeni. Ez egy NEC V20-as CPU (Hogy mik ki nem derülnek... „Reverse engineering” CPU? 8080 kompatibilis üzemmód?) köré épült, a korabeli XT-k 10 MHz-es turbójához képest (csak) egy kicsit gyorsabb:

Ez az alaplap – mint a fenti képen látszik – még ma is megvan, de valójában nem az enyém. Ugyan vissza senki sem fogja kérni, de azért legyek korrekt. :) Sokat nem használtam, mivel ház nem volt hozzá, csak az asztalon volt összeállítva, már amikor. Van amúgy egyéb érdekessége is: például 640 KBYTE RAM van benne. (Ami mindenre elég, legalábbis az XT-nél.) Paritásbittel kiegészítve, mint a korabeli gépeknél mindig. (Erről később szoktak le a gyártók.) De lehet még bele rakni 512 K-t, az üres foglalatok azoknak a helyei. Felül, a tápcsatlakozó melletti DIP switch maga a „Setup”, az XT-k ennyit tudtak... :) A kiépített memória méretét is itt kell beállítani, „normális” XT-k esetén a 640K a maximális lenne. Itt nem az van beállítva... (Emlékeim szerint az egyik ismerősöm anno telepakolt RAM-mal egy ilyen alaplapot, és írt hozzá XMS-drivert. Mondjuk lehet hogy álmodtam... :) )

Az alaplapot egy (valahonnan) bontott tápegység hajtotta, egy órát pakoltam érte hogy meg tudjam mutatni, ugyanis az sem mindennapi:

Első ránézésre egy sima XT-s tápnak néz ki, és valójában az is. Viszont... A kábelezés egy kicsit „furcsa”: a sárga vezeték a +5V, a piros a +12V. Gratulálok... :)

A „rendszerhez” tartozott még egy valamilyen Hercules video-kártya, ez már nincs meg. Illetve – mivel perifériákat ekkor még nem volt divat integrálni az alaplapra – ehhez jött egy (természetesen) ISA-s Multi I/O kártya. Ez felet a soros / párhuzamos / game portokért, a Floppy-k vezérléséért, és a valós idejű óráért (mivel az XT alaplapja ezt sem tartalmazza). Ez a kártya is megvan, ráadásul most ezé lesz az egyik főszerep, úgyhogy róla többet hamarosan.

Ezen konfiguráció – mint említettem – nagyon keveset volt használva. (Akkor sem volt nagy élvezet.) Az egész onnan indult, hogy kellett volna egy programot készítenem, amihez ez lett volna a „fejlesztői gép”. De mielőtt összeállt volna a masina teljesen (ház, hogy mást ne említsek...), kaptam kölcsönbe egy teljes XT konfigurációt, amiben volt HDD is. Ezen elkészült a kívánt stuff, majd visszakerült a gazdihoz, a fenti konfig meg bekerült a szekrénybe.

Itt következik egy nagyobb szünet a történetben, ez idő tájt inkább az Amigát nyomkodtam, az (egy ideig még) élvezetesebb volt (nekem) bármilyen XT-nél. A következő pc egy 486SX/25 volt, erről nincs kép mert anno elcseréltem RAM-ra. :) (A „kézikönyve” viszont nálam maradt, elvileg egy JET-486DX/SX volt, ennél többet nem találtam róla. Az utolsó teljesen passzív pécém, a CPU veszettül melegedett benne, de még borda se volt rajta, nem hogy ventilátor.) Ezt – emlékeim szerint – 28000.- pénzért vettem, 4 MBYTE SIM memóriával. Akkoriban az a 4 MBYTE került 20000.- pénzbe, nagyon sokáig ez az 5000.- / MBYTE volt az „árfolyam”. Az XT és a 486 közötti összes egyéb típus kimaradt, na nem mintha hiányozna... Ezt a gépet már viszonylag sokat használtam, egy rövid ideig az XT-hez levő Hercules videokártyával, utána lett egy EGA a hozzá tartozó monitorral. Ehhez már lett végre ház illetve IDE-s HDD is. (Erről a gépről még tutira el tudom mondani, hogy az árának a többszörösét sikerült megkeresni vele a rajta elvégzett munkákkal.) Mivel még ez az alaplap sem az agyon-integráltságáról ismerhető fel, itt is kellett kártyázni. Egyrészt kellett az IDE csatoló, ebből egy olyan kártyát sikerült beszerezni, ami kombinált Floppy / IDE HDD vezérlő volt egyben. Aztán megörökölte az XT-ből a Multi I/O kártyát:

Ezen erősen látszik némi „hakk”, úgyhogy egy adag magyarázat: a 486-os alaplap már AT. Abban már van rendszeróra, így azt kioperáltam a kártyából az elemmel együtt, mivel nem volt rá szükség. (Azért egy foglalat bekerült helyette, hátha vissza kéne tenni... Ez az a kék 24 lábú „jószág” középtájt, itt egy 82C8167 lakott.) Jumperekkel sok minden konfigurálható, az órát speciel elég lett volna kitiltani, de forrasztgatni amúgy is kellett. A HDD vezérlő kártyán is volt egy floppy vezérlő, ráadásul az már tudott HD-s meghajtót is kezelni, szemben az itt megtalálható (XT-s) 8397 típusú vezérlővel. Ez egy egycsipes meghajtó vezérlő, közvetlenül kapcsolódik az ISA buszra, saját maga csinálja a címdekódolást is, semmilyen konfigurációs lehetősége nincs. Ezt kitiltani nem is lehet, egyetlen megoldásként az eltávolítást sikerült találni. :) (Ez a bal alsó sarokban a nagy, 48 lábú kék foglalat (két 24-esből), vagyis az a helye.) Aztán látszik a kártyán pár felforrasztott ellenállás... Na az egy érdekes eset. A perifériák (óra, soros port(ok), printer port, game port) jumperekkel konfigurálhatók, a bal felső sarokban van egy „jumper-blokk”, ott lehet báziscímet illetve IRQ-t állítgatni. („Falusi” Plug&Play. A megfelelő helyre „Plug”-olod a jumpereket, & már „Play”-olhatsz is!) Ha egy perifériát ki kell tiltani, egyszerűen a címállításához tartozó jumpert le kell venni. Ez idáig oké. A működés az, hogy a logika dekódolja az összes használható címet, ezek vannak a jumper egyik felén. A másik fele megy tovább az engedélyező logikába: egyrészt megkapja maga a periféria, másrészt megkapja a buszmeghajtó logika (ez engedélyezi a komplett kártyát az ISA buszra ráhajtani, amikor szabad). Ezek logikai alacsony aktív kiválasztó jelek, ez is oké. A „gond” annyi, hogy ha – kitiltási célból – egy címállító jumpert a dear customer eltávolít, akkor a buszmeghajtó logika hozzá tartozó bemenete „lebeg”, nem kapcsolódik sehova. Hivatalosan a TTL alkatrészek a lebegő bemenetet magas szintnek érzékelik, de így, „elengedve” azért merészségnek érzem hagyni... :) (Tudom, túlaggódom.) A magas szintet „támogatják meg” azok az ellenállások. Aztán van még egy furcsaság: a floppy interfész csatlakozójára (bal oldal) oda van forrasztva négy LED. Ez egy későbbi kreálmány... Többször előfordult, hogy nem működött a (soros) egér, majd egy gép szétszedés / összerakás után megjavult. Néhány ilyen alkalom után kiderült, hogy az alaplapi tápcsatlakozó kontakthibás, a –12V néha nem érintkezik. Anélkül meg nem működik (normálisan) a soros port, mivel az kell a szintillesztőknek. Emiatt bekerült a négy LED a négy fajta (+5V, +12V, –5V, –12V) feszültségre, így ránézésre látszott, hogy van-e ilyen hiba. (A +5V visszajelzése talán túlzás... :) )

A gép így már működőképes / használható, azonban van egy hiányosság. Hangja, na az nincs... (A táp ventilátornak természetesen van, az most nem számít. Mint ahogy az alaplapi csipogót se számítom ide. :) ) Az Amiga ilyen téren elkényeztetett... Kísérleteztem az akkor „közkedvelt” Covox hangkeltő csodával, nekem anno valahogy nem sikerült vállalható hangot kicsikarni belőle. (Ma talán már menne... :) ) Utána emlékszem egy AdLib klónra, ez a kártya talán csak kölcsönben lehetett nálam. Minthogy a rákövetkező SB 1.0 klón is így kellett hogy legyen, mert nem emlékszem rá, hogy mi lett velük. Mindenesetre ezekkel már volt hang, de az Amigát azt nem sikerült utolérni. Mondjuk nem csak azé tetszett, hanem a C64-ben lévő SID is.

Az AdLib kártyán található csip is FM szintézissel generálja a hangot, akárcsak a SID, ez a maga módján elég jellegzetes, nekem tulajdonképpen tetszik is. Az AdLib-hoz sikerült abban az időben pár zenét beszerezni, kimondottan jól bírt az szólni, de az volt a kulcs, hogy „natív” AdLib zenét kellett vele lejátszatni. A kor programjai, amik leginkább játékok, szinte kizárólag MIDI zenéket használtak, ezeknek a megszólaltatása eléggé „gyalázatosan” ment csak. Pláne egy normális MIDI hangszerkészletet ismerő hangkártyához képest. Mindenesetre az FM csipeknek megvan az a speciális hangulata, ami semmi másnak nincs.

Az őstörténet mesélése itt abba is maradhat, mert megérkeztünk (végre) a tárgyhoz. A régi rendszer(ek)ről van biztonsági mentés (igen, még CD-n, és olvasható), rajta meg ott vannak azok a zenék / lejátszók / szerkesztők, amiket az AdLib idején kaptam. Régen tervezem már, hogy „összeütök valamit”, aminek a segítségével megszólaltathatóak. Egyrészt kell egy olyan alaplap, amin még van ISA slot, de ez nem probléma, mert van használatban egy ilyen gépem. (Egy EPROM / egyéb programozót használok még, aminek szintén ISA-s az illesztő kártyája, emiatt kénytelen vagyok egyelőre megtartani, de most speciel jól is jön.) Másrészt kell vagy egy megfelelő FM csippel ellátott hangkártya, ami még kompatibilis az AdLib kártyával, vagy a „csináld magad” mozgalom keretében össze kell drótoznom egyet. Ehhez – természetesen – szükséges a megfelelő csip, de ez meg azért nem probléma, mert sok éve bontottam ilyet egy valamilyen nyákról. (Mondom: készülök már erre egy ideje...)

Megfelelő hangkártya – most, speciel – nincs kéznél, úgyhogy jöhet a DIY verzió. Az eredeti AdLib hangkártyán a hangcsip szerepét egy Yamaha által gyártott YM3812 típusjelű tok tölti be, aminek a becsületes neve FM Operator Type-L II, röviden OPL2. Viszont maga a csip a történetben csak a digitális rész szerepét tölti be, egy soros interfészen (erősen hasonlít az SPI-re, vagy még inkább az I²S-re) keresztül egy külső DAC-ot töltöget. Ez a külső, esetünkben mono DAC egy szintén a Yamaha által gyártott YM3014B típusjelű tok, aminek az érdekessége az, hogy nem fix számokat, hanem lebegőpontos értékeket (10 bites mantissza, ehhez jön a 3 bites exponens (karakterisztika)) kell beletölteni. Ezzel körülbelül 16 bites dinamikát tud produkálni, csak kevesebb biten ábrázolva. (Hogy ez így mitől jó, mármint a lebegőpontozás, az jó kérdés. A digitális részt nem gondolnám, hogy egyszerűsíti. Hogy az analógot?...) Tehát a komplett rendszerhez ez a csipkészlet (YM3812 + YM3014B) kell, de ez szerencsére megvan.

A kétcsipes felépítés (külön a DAC) kifejezetten jól jön, mivel az analóg részt így viszonylag jól el lehet szeparálni a digitálistól (jóval kevesebb zaj). Cserébe van pár „hiányosság”. A másik nagy kedvenc a C64 SID-je, ezt már említettem. Ott nincs külön (csipben) a DAC, de igazából nem is lehetne. A SID-nek három hullámforma-generátora (hangcsatornája) van, és mindegyikhez külön (talán 12 bites?) DAC tartozik. Ezen DAC-ok analóg kimeneteit lehet a kimeneti keverőbe / hangerőszabályzóba (ez valójában egy digitálisan állítható potenciométer) bevezetni direkt, vagy a programból állítható szűrőn keresztül. Az OPL2 esetében egy DAC van, egyrészt „ez végzi” a hangerőállítást is (kisebb hangerőn kisebb számokat kap), másrészt emiatt nincs analóg szűrő. :) Ez a SID-hez képes visszalépésnek tűnik, az is. De az is igaz, hogy rendkívül sok C64-es „slágerzene” egyáltalán nem szűrőzik, tehát lehet élni nélküle. A SID-es csatornánkénti külön DAC egy másik jó tulajdonságot is hordoz: mindegyik hullámforma-generátor a saját frekvenciájával tölti a hozzá tartozó D/A-t. Az analóg módon összegzett hang ezért „tiszta” (az analóg zajoktól most nagyvonalúan tekintsünk el), csak igen magas mintavételezési frekvenciával lehetne egy D/A-val előállítani. Valójában olyan lenne a digitális mixelési frekvencia, mint a SID-ben futó hullámforma-generátorok alap frekvenciája, ami a C64-ben 985 KHz. (Igen ez az a frekvencia, ami pl. a CD-nél 44.1 Khz. :) ) Az OPL2, illetve az AdLib esetén ez a frekvencia természetesen megegyezik azzal, amivel a külső DAC kapja az adatokat. Ezt egy forrás 49716 Hz-nek mondja, valójában nem tudom, hogy ez a szám hogy jön ki. Az YM3014B adatlapját nézve 16 bitet kell beléptetni bejövő adatként (10 bit mantissza, 3 bit karakterisztika, 3 bit nem használt), az OPL2-nek a bejövő órajelet 4.5-tel kellene osztania, hogy a megadott frekvencia kijöjjön. Ez meg nem valószínű... Úgy kijönne, ha 18 bitet kellene a DAC-ba léptetni (vagy lenne 16 lépés két impulzusnyi szünettel utána), viszont ez meg ellentmond a katalógussal. Meg kellene mérni. De frekvenciamérőm – egyelőre – nem lévén, ez sajnos most nem fog megtörténni. :) Ha már szóba került a SID 3 hangcsatornája, akkor ide kívánkozik az, hogy az OPL2-nek meg van 9 csatornája (vagy 6 hang + 5 ritmushang), ami meg erős előrelépés.

Az YM3812 tartalmaz egy csomó „belső” regisztert, ezek jó hanggenerátorhoz mérten csak írható regiszterek. A CPU felől egy darab címvonala van, ezzel két BYTE-nyi regisztert lehet megkülönböztetni. És igen, az egyik címre azt a számot kell beírni, ahányadik („belső”) regisztert akarja a processzor elérni, a másik címen meg írható a kiválasztott regiszter. Olvasható regisztere mindössze egy darab van, ez egy általános állapotregiszter, ennek is csak a B765 bitjei élnek. Hardver szempontjából a címvezetéken kívül van még egy 8 bites adatbusz, egy IRQ kimenet, illetve a szokásos vezérlőjelekhez (_CS, _IOR, _IOW, _RESET) bemenetek. Tehát a CPU felől nem egy bonyolult a szerkezet. A pc-ben $388/$389 I/O címen lehet a regiszterszám + állapotregisztert illetve a kiválasztott („belső”) regisztert elérni. Így maga a hardver nem egy túl bonyolult darab, viszont még szerencse, hogy a témát keresgetve találtam egy érdekes projektet. Ez egy „saját készítésű” AdLib kártya, az oldal alján található pár link, köztük a kapcsolási rajzzal. Ezen az látszik, hogy a komplett címdekódolást elintézte a készítő két darab 74LS138-as 3-to-8 demultiplexerrel, ez az eredeti kártyán – elnézve a képét – ugyanígy van valószínűleg megoldva. Ha ezt nem látom, tuti előszedek legalább egy GAL-t, csak hogy legyen valami programozható hardver a dologban. 74LS138 meg van a fiókban néhány darab, csak a saját életem bonyolítottam volna el. :-/ Mindenesetre ez az „utánépítés” adott némi inspirációt. Sőt, a keresgélés közben ráakadtam egy másik projektre is, ami elsőre elég meredeknek hangzik. A készítő egy (eredeti) AdLib hangkártyát illesztett egy printer-porthoz, így olyan gépen is lehet használni, amiben már nincs ISA busz. Na, ezt is ki lehetne próbálni. „Sőt-sőt”: létezett C64-hez egy SFX Sound Expander nevű kütyü, amiben egy YM3526 található, ez a sima OPL. Ezzel a csippel kompatibilis az YM3812 (ez utóbbi valamivel többet tud), így lehetne egy C64-es SFX klónt is csinálni. „Sőt-sőt-sőt”: ha már C64, illeszthetem én ezt a kedvenc C264-es családhoz is. Mindezt csak úgy, szórakozásból. Mint az összes többit... :)

Nagyjából – végre – körvonalazódik a történet. A cucc két részből fog állni, az egyik „modul” megcsinálja azt, ami csak a pc esetén kell, ez nem más mint a címdekódolás. A másik „modulra” felkerül az, ami az összes esetben kell – OPL2, D/A, végfok, ... – azt meg a későbbi próbákhoz is fel lehet használni. A kedvenc, prototípus-nyákos drótozgatásaim esetében a legnyűgösebb részt talán az ISA busz, illetve a csatlakozója jelentené, de nem most! Nem véletlenül szedtem elő a régi Multi I/O kártyát, mivel azon megvan minden, ami nekem kellhet. De még nagyon el se kell bonyolítanom, mert a kiszedett FDC csipen ott van (szinte) minden szükséges jel, tehát már oda is be lehet csatlakozni. De oda leginkább a címdekódolást tudom elképzelni, a „főmodul” csatlakozhat a régi floppy csatlakozóra, sok vezeték úgyse kell majd neki. (8 adatvezeték, 1 cím, _IOR, _IOW, RESET, IRQ illetve a címdekóder által előállított _CS, ez így 14. Ja, meg a tápok.) Ami nem kell, az kiszedve, ami kell az berakva:

A címdekóder egyszerű (volt maradékként egy ilyen alakú nyákom, de épp elfér rajta a két LS138), a huzalozásra elég a túloldal:

Ez azért vadnak néz ki, de nem vészes. Ami még vadabb (Majd a „főmodul” lesz az!), az a régi floppy csatlakozó újrakötése:

Tulajdonképpen nem is vészes. Közvetlenül az ISA csatlakozóra csak az IRQx megy, a többi jel megtalálható a néhai FDC lábain. Illetve a „főmodulra” kell még a +12V és a –12V is, ezek a +5V-tal egyetemben vannak még odadrótozva.

Eddig elég szimpla az ügy, jöjjön a lényeg, maga a „hangmodul”! Ez valahogy el kell kezdeni:

A buszmeghajtót talán a címdekóderes nyákra illett volna tenni, de a „furcsa formájú maradék” proto-nyákon már nem volt rá hely. Emiatt ide került, de jobb is ez így, mert a többi, „alternatív” felhasználás esetén is jól fog jönni. (Az ISA-t – úgy tűnik – nem zavarja a drótozás, szerencsére túl magas frekvenciák nem közlekednek itt. Mondjuk nem is túl gyors...) Na de hogy is néz majd ki összecsatlakoztatva?

A kártyához képest ugyan „fejjel lefele” állnak az alkatrészek, de számít? :) Mindenesetre próbálni ezt így még kevés, mert nincs miből megállapítani, hogy működik-e. Elvileg a megfelelő I/O címről ($388/$389) való olvasáskor azt az adatot kell látni, ami a buszmeghajtó „külső” (tehát nem az adatbusz felőli, hanem a másik... :) ) oldalán van éppen. Ahhoz meg a legcélszerűbb beépíteni az OPL2 foglalatát, onnan már van pár lehetőség. Először:

A jobb oldalra betett ellenállásháló közös lába az OPL2 egy NC lábára esik, oda átmenetileg rá van kötve az A0. A többi láb (ellenállások másik végei) a D7..D2 vonalakra kapcsolódnak, a fennmaradó lábak egyelőre nincsenek bekötve. Így ha páros I/O címről ($388) történik az olvasás, akkor a D7..D2 vonalak alacsonyak lesznek, ha a cím páratlan ($389), akkor magasak. A nem bekötött adatvonalak – hála a TTL buszmeghajtónak – magas szintet adnak. Ezt kell látni olvasáskor. Szerencsére a „jól ismert” debug parancs már implementálva van a FreeDOS gépen levő verziójában is (Itt nincs yum update, :) egy kicsit el van maradva az aktuálistól...), így könnyű a dolgot kipróbálni. És igen, $388-ról olvasva $03 a kapott adat, ami %00000011, ebben pont a D7..D2 bitek nullák. $389-en $FF látszik, ott a D7..D2 biteknek magasnak kell lenni, tehát ez is jó. Kezdetnek megteszi... A maradék két bitet is célszerű ellenőrizni:

Itt a D1/D0 vonal egy kissé kacifántosan, de alacsonyra van húzva. A címtől függetlenül mindig alacsonynak kell lennie a két adatbitnek, ami a debug szerint úgy is van. Ennek bizony Örülünk Vincent hangulata van, lehet folytatni.

Már csak össze kell gyűjteni pár „sallangot”, ami szükséges a folytatáshoz:

A „csipszet” (OPL2 + DAC), egy OPA, egy „agyon használt” 74LS74-es duál Flip-flop (a programozó vektor-tesztje szerint jó), illetve egy 14.31818 MHz-es oszcillátor. Az ISA buszon ugyan van egy ilyen frekvenciájú órajel, de az „alternatív felhasználáshoz” majd úgyis kelleni fog, így inkább eleve beépítem. (Ennek az oszcillátornak amúgy külön története van. Ezt sok-sok évvel ezelőtt egy partin „mentettem meg” egy „megsemmisülésre váró” pc alaplapból, egy 80.000 MHz-es oszcillátor társaságában. Aki tudja hogy mit jelent ez, annak nem kell magyarázni, aki meg nem, az úgyse értené. :) ) Na, ezekből kellene összelegózni valami „minimál-koncepciót”:

És hipp-hopp, már össze is forrasztódott. :) Az OPL2 tulajdonképpen „közvetlenül” csatlakozik az ISA buszra, az oszcillátor frekvenciája viszont pont négyszerese annak, ami kellene. Ezt a frekvenciát a 74LS74 osztja kétszer kettővel, így az OPL2 számára már a szép, 50%-os kitöltési tényezőjű 3.57954 MHz-es órajel áll elő. A DAC megkapja a soros buszát, illetve az OPA-s körítést. A tápokkal egyelőre komolyabban nem foglalkoztam, most úgyse a zajtalanság, hanem a működőképesség a kérdés.

A fenti alkatrészgyűjteménnyel ellentétben a műveleti erősítő szerepét egyelőre egy ősrégi – természetesen bontott – LM324 veszi át, mivel most még az is simán +5V-ról megy. Ez ugyan kevés lesz, torzítani fog rendesen, de ez most csak egy teszt. Az OPL2 státuszregiszterét olvasva érdekes számot látni, a doksi szerint a D7, D6, D5 bitek használtak, a többi nem. Ahhoz képest a $06-os érték eléggé furcsa... No de sebaj, próbáljunk!

Próba #1, EdLib:

Próba #2, HSC-Tracker:

Próba #3, egy „sima” lejátszó (Play-Driver):

(Itt egy kis „csalás” történt, a képernyőképek DOSBox segítségével készültek, a „natív” FreeDOS alatt fogalmam sincs, hogyan lehet képernyőmentést csinálni. :) De ugyanígy néz ki eredeti vason is, természetesen. Közben az is kiderült, hogy a DOSBox-ban elég jó az AdLib emuláció, meglepően normálisan szólnak azok a zenék, amiket kipróbáltam.)

És igen, működik a cucc, és igen, a mostani felállással meglehetősen zajos (szűretlen a táp) illetve nagyon recseg („túlvezérelt” az OPA, kevés a tápja) a hang. Első körben az OPA-val a legegyszerűbb kezdeni valamit. Az ISA csatlakozóról a +12V / –12V át van hozva, így azokat megkaphatja az időközben TL074-re kicserélt műveleti erősítő:

Mivel a Multi I/O kártyáról lekerült a tápvisszajelző LED-erdő, így felraktam ide. :) (–5V az nincs, de nem is érdekel... :-D ) A hang megszűnt recsegni, túlvezérlésnek nyoma sincs, így ez a rész rendben. Viszont az egyéb digitális zajok, na azok eléggé durvák. :) Egyrészt a D/A még mindig a zajos +5V-os tápról jár, másrészt az OPA „új” tápja sincs túlzottan agyonszűrve. Valójában semmi meglepetés nem ért, de egy „kicsit” kevesebb zajra számítottam. (Szépen hallatszik a hangszóróból, ahogy a billentyűket nyomkodom, meg ahogy változik a képernyő tartalma... :) ) Első körben a DAC tápját lesz célszerű „helyrerakni”, a +12V-ból egy 7805-ös stabbal lehet „szép”, „zajtalan” +5V-os tápot előállítani:

A stabilizátor – felületszerelt lévén – a „forrasztási oldalra” került, ott még volt rá hely. (Azért csak nem sikerült az, hogy kizárólag „lábas jószágokat” használjak, néhány SMD elem belerondít a képbe. Mindegy, nem autentikus, korabeli alkatrészes elektronika a cél amúgy sem.) A DAC tápja így már „tiszta”, a hang valóban kevésbé zajos, de csak úgy érzésre. Ez így még mindig kevés, a többi zavart az OPA a tápján keresztül szedi össze, azzal is kell valamit kezdeni.

Két verzió lehetséges:

  1. A +12V / –12V tápokból lehet kisebb feszültséget előállítani, mondjuk +9V / –9V körülit, ez még bőven elég az OPA-nak. Ehhez kellene egy 7809 / 7909 stabilizátor IC páros. A fiókban pozitív tápos verzió még csak-csak akad, de negatív tápost talán még az eddigi pályafutásom alatt sem használtam egyáltalán. Ráadásul a hely a nyákon kezd szűkössé válni, az elhelyezés is problémás.
  2. A TL074-es műveleti erősítő helyett használhatnék valamilyen Rail-to-Rail típust, ebben az esetben elég lenne a +5V..GND tartomány a tápnak. A DAC mostani stabilizált tápja jó lenne ide is, ebben az esetben csak az OPA-t kellene lecserélni. Ennek a verziónak a legkisebb a plusz helyigénye (közelít a nullához...), ráadásul megúsznám a –12V használatát is, ami a későbbiekben igen jól eső érzés lesz... Viszont ilyen OPA-m sincs a fiókban.

Mivel a megfelelő alkatrészeket be kellene először szerezni, így a projekt ismét a fiókban végezte, szerencsére most csak egy röpke hétre. A műveleti erősítő cserés változatnak több előnye is van a tápstabilizátoros verzióhoz képest, így az lett előirányozva, de a plusz stabokat is beszereztem, hátha nem lesz mégse megfelelő az új tok. A lehető legkevesebb plusz munka érdekében DIP tokos verziót kerestem az OPA-ból, ez lett az egyik fő szempont. De a Rail-to-Rail típusok „modernebbek” a többinél, inkább felületszerelt változatokat találni a „boltban”. Szerencsére találtam egy típust, ami még éppen volt is a kereskedőnél. (Mást DIP változatban nem is találtam egyáltalán, így azért elég mókás típust „választani”.)

OPA kicserélve, tápja átkötve a +5V-ra. (Ez fontos, az MCP6004 1.8V..6V tartományban működik, a ±12V egy „csöppet” sok lenne neki.) Jöhet a próba, és IGEN, megszűnt szinte az összes zaj, nincs recsegés, a hang minősége abszolút vállalható! Az eredeti (klón) AdLib, ami nálam volt, annak nagyobb volt a zaja, mint most ennek. Yesss! :)

A „kártyára” időközben felkerült két jumper. Az egyik segítségével az IRQ-t lehetne bekötni, de az általam kipróbált stuffok egyikének sem hiányzott. Ezen felbuzdulva építődött be a másik jumper, ezzel az OPL2 „olvashatóságát” lehet kitiltani, kíváncsi voltam, hogy használják-e a státuszregisztert a programok. Itt a végeredmény felemás lett, van aminek nem kell az olvashatóság egyáltalán, működik az adott lejátszó nélküle is. De a többség azért legalább az OPL2 meglétét ellenőrzi, ahhoz viszont kell tudni olvasni.

Egy „apróság” van még vissza, azt viszont lehet szó szerint érteni. Az OPA kimenete nem éppen combos, egy „végfok” nem ártana még utána. Szerencsére van egy igen egyszerű, pár alkatrészből összerakható végfok, amihez van alkatrészem is. Ez egy TS486 IC-re épül, de valahogy adatlapot nem találok most hozzá. :) (A TS488 – ahogy látom – majdnem ugyanez, egy kicsit fejlesztettek rajta.) Ez is SMD, ráadásul nem is SO, hanem MiniSO (SSOP) tokozású. Az egyik előző projektből maradt egy átalakító hozzá, amivel így DIP-es méretű helyre beszerelhető:

Ez a tok is megkapta a +12V-ból előállított +5V-ot, így az áramkör közvetlenül meg tud hajtani normálisan egy fejhallgatót is. Jó combos 100mW-tal... :) A „full” kiépítés elölről:

Illetve hátulról:

Mindez beszerelve a gépbe, a klasszikus „analóg dolgok mindentől a lehető legtávolabb” stílusban:

A távolságtartás „majdnem” sikerült is. :) No de mi is van itt összerakva?

Egyrészt van a címdekóder:

Semmi extra, a jobb oldali „csatlakozópontokon” keresztül kapcsolódnak az „univerzális” részhez azok a jelek, amik kellenek. Az OPL_SEL jel csak akkor lesz aktív (alacsony), ha a CPU a $388/$389 címek valamelyikét szólítja meg. Ez ugyan akkor is aktív lesz, ha nem az I/O területről van szó, de az IOR / IOW vonalak miatt a kütyü csak a megfelelő időben hajt a buszra.

Másrészt van maga a „lényeg”:

Ezen van minden, ami nem csak itt, hanem majd mindenhol kell. Az adatbusz fele/felőli meghajtó, a vezérlő vonalak „leválasztása” (az ISA busz vonalait nem szabad „túlterhelni” sok bemenettel), az órajel-generátor, maga az OPL2, a DAC, illetve a körítése a „végfokkal”. Ja, meg az analóg táp. Lerajzolni (majdnem) tovább tartott, mint összeforrasztani. :) (Itt is, mint az előzőnél, a kész kütyü lett visszarajzolva, remélem nincs benne különösebb hiba.) Nem túl bonyolult, az analóg rész meg különösen egyszerűre sikeredett. Egy apró „optimalizálás” is belefért: a végfok bemenetein az ajánlott kapcsolási rajzon szerepel két soros kondenzátor, hogy az esetleges „bejövő” DC szintet ne erősítse. Ezeket én elhagytam, mivel egyrészt rontja az átvitelt (bármekkora is lenne, felüláteresztő szűrőként viselkedik), másrészt meg nem kell. :) A D/A kimenete a féltápra „ülteti rá” a hangot, ez lesz az a DC szint, amit „megkap” a végfok. Viszont az is a féltáphoz képest dolgozik, amennyi a két féltáp „különbsége” (mivel mindketten külön állítják elő, azért lehet eltérés), az itt ugyan hiba lesz, de jó esetben csak DC a kimeneten. Azt meg a végén a két 220µF-os csatoló kondenzátor leválasztja úgyis. (Talán jól megindokoltam, hogy miért nem volt kedvem helyet keresni nekik. :) ) Az analóg GND egy ponton van összekötve a digitális GND-vel, illetve az összes analóg GND egy pontba van bekötve, ami nem más mint a stabilizátor GND füle. A zaj így lett a mostani minimális szintű, ezen csak normális nyákkal illetve alkatrész elhelyezéssel (mondjuk az analóg rész ne a digitális „nyakán” legyen) lehetne még tuningolni. Nekem jó így, nem bántom... :)

Hogy ne csak retrós hangulata legyen a témának, jöhet a cucc mai, modern (már amennyire...) géphez történő illesztése, ez nem egy bonyolult történet. Feltéve, ha van még párhuzamos port, szerencsére nekem még akad. (Rengeteg fórumtopikban olvasni olyat, amikor egy-egy új alaplap megjelenésekor valamelyik kommentelő, meglátva a lapon a párhuzamos port csatlakozó tüskesorát, nyávogva kikel magából, hogy „mikor felejtik el már végre a soros / párhuzamos portokat, mer' úgyis ott a zúesbé!” Nem értem én ezeket az embereket. A hátlapra már régen nincs DB-25 csatlakozó szerelve, ott nem foglalja a helyet. Fáj az a 25 (26) pólusú tüskesor az alaplapon? Zavar valakit? Valójában az ISA kikopása után a párhuzamos port maradt csak a gépen, amihez egyszerű (akár házibarkács) módszerrel külső eszközt lehet illeszteni. Ha rajtam múlna, kötelezővé tenném az alaplapokon. :) Az igazi mondjuk az lenne, ha lenne helyette valamilyen „szabvány” GPIO felület, mondjuk 12 GPI meg 12 GPO vonal formájában. Nem kell hátlapi kivezetés, aki tudja hogy mi ez, az elboldogul a belső csatlakozóval is. No de mindegy, kidühöngtem magam. :-D )

A párhuzamos portot én utoljára rendeltetésszerűen nem is emlékszem, hogy mikor használtam. (Réges-rég, egy messzi-messzi időpontban volt egy nyomtatóm ilyen interfésszel.) Viszont mindenféle alternatív dologra, sima GPIO-nak annál inkább. Ez a port nagy becsben van tartva, annyira, hogy – már nem is emlékszem mikor, annyira régen – kapott egy puffer elektronikát, hogy még véletlenül se sikerüljön tönkretenni. Nem kell nagy dologra gondolni, csak egy pár buszmeghajtóra, ami egyrészt kifele hajtja a kimeneteket, másrészt befele fogadja a bemeneteket. A megoldásnak van is egy szépséghibája: semelyik párhuzamos port felépítésével sem kompatibilis. :) A sima SPP-hez áll a legközelebb, mivel az összes vezeték egyirányú. De a sima SPP-nél a vezérlő vonal kimenetek OC-s hajtásúak, belül felhúzó ellenállásokkal. Ha magasra állítja a vezérlő program őket, akkor kívülről alacsonyra húzhatók, így a kimenetek bemenetként is használhatók. Na, ezt a ficsőrt a puffer elektronikámmal el is buktam. :) (Valójában egy eszközről tudok, ami ezt a „funkciót” használja, az pedig az eredeti X1541 kábel, amivel pl. 1541-es meghajtót lehet pc-hez csatlakoztatni. Ez nem működik a pufferemmel, de a többi változat (XA1541, XM1541) simán!) Aztán az EPP, ECP üzemmódokban is csak egy irányban tudnak működi a vonalak, viszont az általam használt eszközök így is használják, sima GPIO-ként, emiatt ez nem probléma.

Tehát a „maradék” feladat első fele: kideríteni, hogy a párhuzamos portos AdLib illesztéshez készült stuff működőképes-e a pufferelt megoldásommal. Valamerre írja a készítője, hogy EPP vagy ECP módba kell a portot konfigurálni, ez vajon azt jelenti-e, hogy olvasni is óhajt az OPL2-ből, vagy csak a normális kimeneti hajtás miatt kell-e? A hozzá készült program a paradlib nevet viseli, ez felel a hardver kezeléséért, C++ nyelven készült, amihez – mondjuk úgy – nem értek. :) Mindenesetre a kódot végignézve arra jutottam, hogy esze ágában sincs olvasni, úgyhogy ez jó hír...

A feladat másik fele: a csatoló elektronika elkészítése. Ez – „hála a tervezőnek” :) – jóval egyszerűbb lesz, mint a fent linkelt kapcsolás. Egyrészt én a tápot magából a számítógépből hozom ki, mivel így jóval kényelmesebb a dolog. (Notebookhoz úgyse akarom illeszteni, ha meg mégis, ott még mindig külső tápozhatok.) Itt előjön egy hatalmas előny: nekem elég a +5V mellett a +12V, NEM KELL a –12V egyáltalán! Azt igen izgalmas lenne kibányászni a gépből, mivel az alaplap megkapja, de egyszerűen hozzáférhető helyen nem lehet megtalálni. A kívánt tápfeszültségek meg ott vannak bármelyik periféria tápcsatlakozóján. Másrészt nem kell külön órajel-generátor, mivel azt fölraktam a „közös” nyákra az OPL2 mellé. Harmadrészt a komplett ISA portot el lehet hagyni, csak a 34 pólusú hüvelysávra kell egy ellendarab. A minimalista RESET áramkör az kell, de azon kívül szinte semmi. Ilyen lett az összeépített csatoló:

Nem egy alkatrésztemető, az már biztos. Összekapcsolva a lényeggel:

Ha nem is túl szép, de legalább egyszerű. :) De mi is lett itt összedrótozva?

A RESET áramkörön (khm...) kívül csak csatlakozó meg drót. Illetve két jumper, amik némi magyarázatra szorulhatnak. A J1-gyel az OPL2 olvashatóságát lehet engedélyezni / tiltani. Mivel nálam az olvasás (a belső puffer miatt) úgysem működne, így alapból tiltva is van, még véletlenül sem tud „összehajtani” a két eszköz. (A gép RESET-je esetén, illetve a párhuzamos port konfigurálása során amúgy is lehet majdnem bármi a vonalakon, szóval mindenképpen jobb ez így.) A másik jumper már érdekesebb / furcsább. Az eredeti kapcsolási rajzot megnézve látható, hogy a _SELIN vezeték az ISA busz A1-es címvonalára kapcsolódik. Az A9..A2 vonalak fixen úgy vannak bekötve, hogy a kártya fele a $388..$38B címtartományt választják ki. Ez négy cím, de az OPL2-nek elég csak kettő. Az eredeti AdLib kártya csak a $388/$389 címeken aktív, így a $38A/$38B címek esetén ki is tiltódik. Emiatt a _SELIN vezetékkel tulajdonképpen közvetve, de az OPL2 _CS vezetékét lehet kapcsolgatni. A leírásban csak az szerepel, hogy az A1 most nincs használva, csak volt még egy szabad kimenet a printerporton, így az esetleges későbbi használat érdekében bekötötte. A J2-vel esetemben az eredeti működést (_SELIN vezérli az OPL2 _CS vonalát) lehet beállítani, de az alapeset itt is az, hogy „nem kell”, fixen engedve van a tok.

Ez eddig szép és jó, de vajon működik a cucc? Valójában igen is meg nem is. A hardver jó, az rendben van. A pokoli toronyhoz hozzácsatlakoztatva:

(A printerport csatlakozós nyákról itt még hiányzik a RESET nyomógomb. De kell az, mint később kiderült...) Ugyan elég veszélyes a felépítmény, de most nem számít.

De a szoftver, na azzal már vannak gondok. :) A történet ott kezdődik, hogy van egy egész használható OPL2 (/ OPL3) emulátor szoftver, ami nem más mint az AdPlug. Ez egy library, ami több feladatot lát el. Egyrészt van benne az OPLx emuláció, meghallgatva egész jól működik (ellentétben pl. a GUS korabeli emulációjával). Másrészt tartalmaz egy rutingyűjteményt a korabeli AdLib zeneformátumokhoz, aminek a segítségével meg lehet szólaltatni őket. De ez a két rész nincs teljesen „összedrótozva”, a zenelejátszás nem szükségszerűen használja az OPLx emulációt, használhat akár AdLib hangkártyát is. Az AdPlug rutinkönyvtár nagyjából ennyit tud, ezt tudják külső programok használni. A használathoz készült egyrészt egy konzolos program, az AdPlay (nem összekeverendő az aplay paranccsal), másrészt van plugin pár zenelejátszóhoz, többek között az XMMS-hez is. Ezek eddig rendben is vannak. :)

A printerportos cucc, a paradlib, egy eléggé egyszerű (mondhatnám: kezdetleges) konzolos lejátszó, ami az AdPlug zenelejátszó részét használja, de a „tőle kapott” OPL2 regiszter írásokat nem az emulációnak adja át, hanem a printer porton keresztül, a ppdev segítségével, magát az OPL2 csipet írogatja. Emiatt függőségként kell neki ez a két csomag (AdPlug + ppdev), azoknak meg a sajátjuk. A forgatás előtt így először az AdPlug-ot kell fordítani (CentOS alatt csomag alapból nincs), ppdev csomag az van, ezután jöhet a paradlib. Na de az meg nem fordul... :) Ezen valahogy meg se lepődök. Első hiba: hiányzik a kód elejéről két include. :) (A nulla C++ tudásommal az ilyesmi jó móka ám! :) ) Utána pár warning kíséretében már lefordul. Sőt, azokat is sikerül helyretenni! (Mindegyik olyan figyelmeztetés, hogy a szabvány szerint már nem így kell leírni, de ettől még működnek.) Úgyhogy van öröm, jöhet a próba! Első indításra igencsak furcsa zörejek jöttek ki hangnak, de másodikra megszólalt a muzsika szépen. (Kell az a RESET nyomógomb, nem véletlenül lett az odarakva! :-D ) Viszont hallhatóan nem jó a tempó, lassabban szól az egész mint kellene. (Digitalizált hangokhoz szokott fülnek egész furcsa, mert a hangmagasságok – természetesen – rendben vannak, csak a tempó rossz.) Úgyhogy jelen pillanatban itt állok, egy kicsit a lelkesedésem alább hagyott a témával kapcsolatban. Ebben persze benne lehet a sok év is, amióta a terv megszületett. A lefordított kellékekből nekiálltam csomagot kreálni, de egyelőre az sincs befejezve. (Ha eljutok odáig, letölthetőek lesznek.)

De hogy jókedv is legyen a végére, pár zene, ami az elkészült mű (+ az ISA-s illesztés) segítségével szól:

  1. Shelter – a zeneszerző (meg bármi egyéb infó) hiányzik, ha valaki ráismer, szóljon ám! :)
  2. En Lille Test – MSK / Vibrants, kár hogy rövid
  3. The Alibi – JCH / Vibrants, ez egy SID-es zene átirata
  4. Gone... – JCH / Vibrants, úgyszintén SID-es átirat, JCH amúgy egy „nagy kedvenc” C64-es zenész

Konklúzió? Jó kérdés. A blog megírása jóval tovább tartott, mint a cucc összeszerelése. :) Bánni nem bánom, azt már igen, hogy az OPLx-et a „régi vágású” zenészek nem fedezték fel maguknak igazán. Mire elterjedhetett volna, addigra a hullámformatáblás hanggenerálás lett a menő. (Az AdLib, mint pc-s hangkártya a Wiki szerint 1987-ben jelent meg. 1986-ban már volt AMIGA, a pc-s ipar elég sokáig csak kullogott a világ után.) Ahol sokat használták, azok a korabeli „árkád” gépek, de az ebből a szempontból nem számít, „földi halandó” oda nem készített zenét. (Bár az is igaz, hogy páran meg „onnan nőttek ki”.) Mindenesetre kedvencnek megmarad... Az OPLx csipek hátrányaként viszont mindenképpen meg kell említeni, hogy programozás oldalról lassúak. Egyrészt ott van az a rengeteg regiszter, amit kissé körülményesen (egy „lyukon keresztül”) kell töltögetni, de ez a kisebbik gond. A nagyobbik az, hogy a regiszterszám beállítása után kell várni valamennyi időt, amíg magát a regisztert utána be szabad írni. Ezután a következő regiszter írása előtt újra várni kell, ráadásul itt jóval többet. (A pontos idők benne vannak az YM3812 katalógusában. A korabeli szoftverek az OPLx státuszregiszterét olvasták ki meghatározott számban ilyen esetekben. Az ISA busz sebessége „állandó” volt a gyorsuló CPU-któl függetlenül, ezzel a trükkel mindig ugyanannyit lehetett várakozni.) Emiatt az igazi az lett volna, ha az OPLx kezelésére lett volna valami intelligens logika beépítve, de az meg túl drága lett volna. Na mindegy, így alakult... :)

Linkek:

  1. Vibrants AdLib zenék gyűjteménye – C64-ről sok zenész ismerős...
  2. Tracker jellegű zeneszerkesztők letölthetően, a fent látott programok innen beszerezhetők
  3. Linkgyűjtemény ugyaninnen
  4. Párhuzamos portra illesztett AdLib kártya, programmal – „erősen” optimalizált változat lett belőle, azt hiszem... :)
  5. OPLx linkgyűjtemény – pár dolgot találtam innen...
  6. AdLib utánépítés – kapcsolási rajzzal, sok dokumentációval. Jól jött inspirációnak.
  7. OPL2/3 „belülről” – jópofa... :)
  8. AdLib Digisnap – egy „nem mindennapi projekt”, az OPL2 hangjának a „digitalizálása”, csak másképp. Itt a D/A fele menő még digitális jel van újra eltárolva, így analóg zaj nélkül lehet a muzsikákat „digitalizálni”. :)
  9. AdPlug – AdLib emuláció minden mennyiségben...
  10. YM3812 adatlap
  11. YM3014B adatlap

balagesz

---

2014.05.14.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Király post, mint mindig.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

+1

+1

Gratulálok!!!, (főleg, hogy ennyit és ilyen minőségben összehoztál) bár felét sem értem :) De elfogott engem is a nosztalgia. Ilyenkor mindig eszembe jut az SB AWE64 kártyám, ami a mai napig pihen a fiókban. "Sírtam" :) , mikor meg kellett válnom tőle (eltűnt az ISA.) Az külön tetszett benne, hogy van neki teljesítmény kimenete is, azaz csak rádugja az ember a passzív hangfalat és dübörög. (A távirányítós Creativa CD-ROM-mal együtt tuti hifitorony pótló volt :) ) Adlib zenék is mentek rajta, egyik ilyen téren kedvenc trackerem az S3 volt, amiben a "normális" csatornákat lehetett mixelni az Adlib csatornákkal is, így elég vegyesfelvágott zenéket lehetett összehozni :). Bár a pld. Fasttrackerhez képest fájó pont volt a real time record hiánya, valamit asszem a görgetése sem volt annyira felhasználóbarát.


Ne kattints ide!

Jó post!
Esetleg átrakhatnád az adlib zenéket az elejére, ha ott lett volna, akkor a post olvasása közben autentikus aláfestő zene szólt volna :)

Az XMS drivert elég nehéz elképzelni, főleg, hogy a 286 előtti intel cpu-kon 20 bites volt a címbusz, ami 1MB címezhető memóriát jelent. 1MB-ig meg a dos is kezeli emlékeim szerint, a maga elcseszett módján.

Az alaplapi gpio tényleg, milyen jó lenne. Esetleg SPI és I2C, kb mint a raspberry pi tüskesora.

A zenék "direkt" a végére kerültek, az a jutalom ha odáig eljut az olvasó. :)

Az XMS-es dologgal kapcsolatban igencsak homályosak az emlékek, tényleg lehet hogy álmodtam. :) Mindenesetre beugrott még pár dolog. A címbusz valóban 20 bit itt is, de a plusz memóriát csak adattárolásra használták, ha kellett valami belőle, akkor kimásolták a 640K-ba, majd a meló után vissza. (Vagy nem? :) ) Így a "bővítést" valójában mindegy hogy milyen hardveres módon valósították meg, ha a "szabvány" rutinokon keresztül volt kezelve. Mintha az rémlene még, hogy ettől függetlenül igen kevés programmal működött, mivel az XMS ténylegesen a 286 mellett jelent meg, így kevés volt azon programok száma, amik a plusz memóriát ugyan használták, de nem kellett nekik az új CPU egyéb újdonsága. (De ismétlem: a tévedés jogát fenntartom! :) )

Gyanús, hogy az EMS-re gondolsz. Mondjuk ennek én csak az EMM386 verzióját ismerem, ami a 386-ban lévő hw swap megoldást használta amivel a 640k-1MB közötti részre másolgatta az 1M feletti memóriát (de persze nem használta az egész 384k-t, ha jól látom az ms megoldása 64k-ba rakott 4 16k-s lapot). De valóban, egy külső vezérlővel akármennyi memóriát lehet így elvileg illeszteni.
Azt hozzá kell tenni, hogy én ezzel korom miatt nem nagyon találkoztam (csak a 8mb-os 486-osunkhoz csináltam pár beállítást, mert néhány játéknak alap memória kellett, néhánynak meg himem.sys), csak mikor tanultam a 386-osról, lenyűgözött, hogy mennyire sokat tudott az a processzor, és mennyire nem használta ezt ki a dos.

EMS? Végül is nem kizárt... (Az a jó, hogy olyanon megy az agyalás, ami lehet meg se történt. :) Simán előfordulhat, hogy - ennyi idő távlatából - összekombinálok két történetet... :) ) A téma mélységeibe szerencsére én se mélyedtem el, nekem már a sima 8088 felépítése is "extrém sport" a maga nemében.

Remek poszt! Gratulálok!

+1

U6B, U6C műveleti erősítőknek mi az értelmük? Vagy úgy voltál vele, egy tokban van 4 db, aztán valamit csinálni kéne velük? :)


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Hm... Jogos a kérdés. :) A kapcsolás ezen részlete egy előző projektből lett "újrahasznosítva", ott ugyanez volt a feladat: sztereó hangot kellett monó forrásból előállítani. Azért lett ez a felépítés, mert a "végfokba" ott még be volt (legalábbis tervben) csatolva egy sztereó hang is, amit nem akartam monósítani. Ezért kellett a két különálló meghajtás a két csatornához. Itt ugyan nem volt cél ez, de "bambán" összehuzaloztam ugyanazt a koncepciót. Ha itt értelmet akarnék adni nekik, akkor talán az ami bevált, azon ne változtassunk elvet mondanám, de a te verziód is jó. :-D

Átrágom mégegyszer majd.
Tetszetős poszt. Pár dolog beugrott róla.
☼☆♫♪♫♪☆☼
AGA@
Fork portal és az egyik logóm :)