Retró rovat IV/A: Az 1551-II projekt (több felvonásban, sok képpel)

Lassan lejár ez az év is, benne egy rakás kellemes élménnyel. Rengeteg tanulással, sok-sok újdonsággal... De akad jó néhány esemény, aminek a lényege még nem világos, persze előbb-utóbb azért az is a helyére kerül. Mindenesetre az biztos: kellett. Na de most nem (sem) erről szól a mese...

Ez a mese újfent a régi vasakról szól (ahogy magam ismerem, lesz is még pár), mivel ezeket még „emberközelinek” érzem. Sőt: ez az ötlet igen régi. Csak a megvalósulásig rögös út vezetett. Eldöntöttem, hogy nem azért csinálom meg, mert egyszerű, hanem azért, mert nehéz. Az is lett... :) Mivel van némi fogalmam arról, hogy működik az 1541, illetve az 1551, nem tűnik olyan elvetemült ötletnek a dolog.

Arra már sok évvel ezelőtt felfigyeltem, hogy a két meghajtó erősen hasonlít a belső hardveres regisztereit tekintve. Az 1541-ben 2 db. VIA van, összesen 4 BYTE-nyi porttal, az 1551-ben meg van egy TPI 3 BYTE-nyi porttal, ill. a speciális 6510T (doksi nincs), amiben 1 BYTE-nyi port van. Ez is összesen 4... A kiosztásuk vajon milyen?

1541 U6: ($1801)            1551 U3 ($4000)
  PA0    TR00 Sense           PA0    TCBM D0 
  PA1                         PA1    TCBM D1 
  PA2                         PA2    TCBM D2 
  PA3                         PA3    TCBM D3 
  PA4                         PA4    TCBM D4 
  PA5                         PA5    TCBM D5 
  PA6                         PA6    TCBM D6 
  PA7                         PA7    TCBM D7 
  CA1    ATN In
  CA2    -

A VIA-nak van 2 vezérlő lába még, abból a CA1-re a soros port ATN-je van kötve (IT-t generál vele), ez az 1551 esetén nem kell. Az 1541 TR00 érzékelő bemenet az utolsó verziójú DOS-okban nincs használva, a többi portbit meg nincs bekötve. Ezt a portot szokták használni akkor, ha az 1541-et párhuzamos módon (is) hozzá akarták kötni a számítógéphez. Ez így kompletten jó lehet az 1551 TCBM busz DATA részének.

1541 U6: ($1800)            1551 U3 ($4002)
  PB0    Data In              PC0    TCBM STATUS0
  PB1    Data Out             PC1    TCBM STATUS1
  PB2    Clk In               PC2    TCBM DEV
  PB3    Clk Out              PC3    TCBM ACK
  PB4    ATNA                 PC4    Mode (R/W)
  PB5    DevNo Sel B0         PC5    DevNo Sel (Jumper)
  PB6    DevNo Sel B1         PC6    Sync
  PB7    ATN In               PC7    TCBM DAV
  CB1    -
  CB2    -

Ebből a portból kizárólag az 5-ös bit jó, a többit át kell kavarni a két verzió között.

1541 U8: ($1C01)            1551 U3 ($4001)
  PA0    D0 f/t R/W head      PB0    D0 f/t R/W head 
  PA1    D1 f/t R/W head      PB1    D1 f/t R/W head 
  PA2    D2 f/t R/W head      PB2    D2 f/t R/W head 
  PA3    D3 f/t R/W head      PB3    D3 f/t R/W head 
  PA4    D4 f/t R/W head      PB4    D4 f/t R/W head 
  PA5    D5 f/t R/W head      PB5    D5 f/t R/W head 
  PA6    D6 f/t R/W head      PB6    D6 f/t R/W head 
  PA7    D7 f/t R/W head      PB7    D7 f/t R/W head 
  CA1    Byte Ready
  CA2    SOE

Ebből a SOE ill. A Byte Ready jel „máshogy” kell, a többi egy az egyben jó (ez a fej fele/felől az adatbusz).

1541 U8: ($1C00)            1551 U2 ($01)	
  PB0    Stp1                 P0    Stp1 
  PB1    Stp0                 P1    Stp0 
  PB2    MTR                  P2    MTR 
  PB3    ACT LED              P3    ACT LED 
  PB4    WPS                  P4    WPS (Write Protect Switch) 
  PB5    DS0                  P5    DS0 
  PB6    DS1                  P6    DS1 
  PB7    Sync                 P7    Byte Latched
  CB1    -
  CB2    Mode (R/W)

Itt a 7-es bit más, a VIA CB2-ese máshonnan jön az 1551-ben, ill. az ACT LED polaritása fordított, de a többi egyezik.

Tehát az elképzelés a következő: ha a CPU-t 1 helyett 2 MHz-cel hajtanám, ill. a megfelelő címekre a kellő VIA regisztereket „mapelném” be, a regiszterek különbségét egy logikával eltakarnám, akkor az 1551-es DOS úgy láthatná a hardvert, mintha valóban az lenne. Mindezt lehetőleg átkapcsolhatóra... Ez így egy kissé meredeken hangzik, de az, hogy a regiszterek zömével nincs gond, bizakodásra ad okot. Tehát az egész a regiszterek hasonlóságán alapult, de a következőkben ki fog derülni, hogy gyakorlatilag semmi jelentősége. :) Cserébe újra forrasztgathatok, használhatom a „kedvenc” CPLD-imet, kódolhatok 6502-re... Meg amúgy is, ekkora őrültséget még nem csináltam. Mire várok még? :)

Ez lesz itt az alapanyag/donor (kinek hogy tetszik):

Kicsit koszos, kicsit sárga, de az enyém... :) Azon kevés 1541-II közé tartozik, aminek olyan a felépítése, hogy kinyitáskor egy rugós mechanika kitolja a lemezt. Kívülről eléggé gyászos képet fest, de belülről elég korrekt:

Ami jó: ebben is „direktmotor” forgatja a lemezt. Az elektronikám viszont azt hiszem nem lesz kicsi. Vajon hova lehet ezt ebben elrejteni? A mechanika és az eredeti NYÁK között azért akad hely. Na de mennyi?

Elő a jól bevált (?) gyurmával, amivel precízen ki lehet „tapogatni” a rendelkezésre álló helyet. Na de mennyi is az annyi?

Hát, ez így ránézésre rengeteg! Persze hogy ne legyen ennyire szép, később kiderült, hogy a fej léptetőmotorja „lejjebb lóg”, mint a lemez forgatómotorja, így ott már nincs ennyi hely.

Első lépésben „bontani” kell. Ahhoz, hogy a tervezett dolgokat megcsináljam, a CPU, ill. a VIA-k közé be kell pár helyen „kapcsolódni”, meg ugyanez vár a ROM-ra is. De ha már itt tartok, lehetne a kütyübe több a RAM is... Azaz: CPU, VIA-k, ROM, RAM ki:

Eléggé kopasz szegényke... :) A kiszedett IC-k helyére foglalatok kerülnek, a CPLD-nek kell még egy kis hely:

Ebbe jön bele a saját „közdarabom”, amin a CPLD ill. a nagyobb memória van Ez valahogy így néz ki:

Ahhoz képest, hogy arra számítottam, hogy nem lesz túl bonyolult, eléggé húzós lett a huzalozás. Eredetileg mindkét VIA a felépítményen volt, csak itt jött a képbe a léptetőmotor, és annak a vastagsága. A többi cucc elfér abba a szűk 2 cm magasságba, de az U8-as pozíció fölé éppen odalóg az a fránya motor... De szerencse, hogy pont ennek az IC-nek csak egy vezetékével van gond, azt meg az alap NYÁK fólia vagdosásával megoldottam. De minek... :)

A CPLD-ben elkészült az első FW, a CPU az 1551 módban kellő 2 MHz-en ketyeg. Jöhet az első teszt! Az 1541 DOS-a szoftverből időzíti a soros port kommunikációját, ami így dupla órajel mellett már túl gyors a géphez. De sebaj, ha a képernyőt kikapcsolom, akkor a plus/4 is hozzá tud gyorsulni a feladathoz. A lényeg, és maga a probléma itt látszik, valójában igencsak nagy mázlim van, hogy egyáltalán kiderült:

Hogy mi látszik? Az első adag dump 1 MHz-es órajel mellett készült, a második meg az átkapcsolt 2 MHz-es sebességnél. Az $1802/$1803, ill. $1C02/$1C03 regisztereken látszik igazából; ezek a portok adatirány-regiszterei. Mindkét dump esetén egyezniük kéne. A VIA-k nem bírják a 2 MHz-es órajelet... Mondjuk mindegyik 6522, egyik sem 6522A. Tehát ez még jogos is. Számítottam is erre a jelenségre, viszont volt egy ötletem ilyen széthúzott órajeles trükközésre, hogy a VIA-k látszólag 1 MHz-es sebességgel menjenek... Csakhogy – mint az adatlapot böngészve kiderült – nem lehet az órajelet úgy variálni, mint az újabb MOS csipeknél, de ha lehetne se biztos hogy „odaérnének” a buszciklusra. A CPU-val nincs gond, mert az 6502A, de hosszas kutakodás után is csak 1 db. 6522A-t találtam a cuccaim között. Szóval ez így kalács. Ja, nem. Bukta...

Mit lehet akkor tenni? Vagy szerzek 2 MHz-es VIA-kat (macera...) vagy implementálom valahogy a komplett TPI-t meg a CPU portját. Ez utóbbi megoldás jónak tűnik, csak szokás szerint „van egy kis probléma”. Egyrészt az XC9572, amit használok, kevés kezd lenni. El kell használjam az utolsó XC95108-at, amim van. Nem hangzik jól... Ráadásul a lábszám is kevés, így „ki kell szerveznem” pár funkciót a tokból, ami még több vezetékezés... Aztán: az a VIA, ami most a saját feltétemen van, az kezelte volna a kommunikációs részt. Ezt teljes egészében a CPLD fogja intézni, tehát az visszamehet a helyére. Viszont a másik VIA-nak, ami a mechanika és az olvasóelektronika kezelését végzi, annak kell az összes port-vezetéke (mondjuk legalább 17). De ezt meg nem tudom felrakni a közdarabra, mert nem fér el. Máshogy kell összeszedni azokat a vonalakat...

Szomorú dolog történik: szét kell bontanom az eddig megépített cuccot:

Eh... Szomorú látvány. De a folytatás már nem ennyire az:

Ez ugyan messze nincs még kész, de így azért látszik, hogy mi hogyan van elhelyezve. A CPLD-ből két komplett port került ki, az egyik a fej fele menő párhuzamos adat tárolópárosa, a másik meg a CPU portja. Ezeknek a vezérlése meg a maradék TPI funkció már belefér... Meg így marad elég regiszter ahhoz, hogy az IRQ vezérlést is a CPLD-be pakolhassam. (Az eredeti 1551-ben az IRQ-t egy 555-ös időzítő IC szolgáltatja, ami kb. 120 Hz-es ütemben szaggatja a főprogramot. Ezt „kimérni” is mókás volt, mivel nincs frekvenciamérőm se... :) ) Az U8-as VIA megfelelő jeleit egy szalagkábel hozza fel a proto-nyákomra:

Ez lett a saját elektronika:

Szép az SRAM, leginkább a típusszáma. :) A gyári 2 KBYTE helyett ez 32. :) Összerakva:

Még ez sem a végleges, de már próbálható. A „mérési összeállítás” így néz ki:

Eléggé nagy a kupi, egy gyári CBM 1551 „paddle” a géphez kapcsolódó illesztő, amit szintúgy ki kell helyettesíteni. Ú... (Persze ez nem ért meglepetésként, csak úgy tűnik, hogy ahogy haladok a vége felé, úgy derül ki, hogy félúton vagyok. :) ) Na de vajon megy-e?

A (z 1541 üzemmódban működő) meghajtó RAM-jába a konfiguráló kódot bemásolva, majd elindítva... Tádám: MŰKÖDIK!!! Szinte el se hiszem... A végeredmény úgy van megvalósítva, hogy egy kapcsolóval kiválasztható, hogy bekapcsolás (vagy RESET) után a meghajtó milyen üzemmódban induljon el. Ezt a kapcsolót induláskor egy program ellenőrzi, ennek alapján konfigurálja be a hardvert (nagy részben a CPLD-n belül kialakított regisztereken, kis részben a VIA-kon keresztül), majd a megfelelő DOS-t „belapozza” és elindítja.

Ami HW trükközés kellett, az tulajdonképpen az 1541-II illetve az 1551 ASIC különbségéből fakad. Az 1541-es ASIC olvasáskor (valószínűleg, tulajdonképpen nem vizsgáltam) a VIA fele az olvasó shiftregiszter adatát adja vissza közvetlenül. A „leccselést” a VIA végzi, viszont ilyen tároló a TPI-ben nincs, ezért ezt az 1551-ben az ASIC-nak kell végeznie. Mivel a fej adatbuszát nem a CPLD-n keresztül kezelem (kikerült onnan hely / lábhiány miatt), ezért ezt egy 74HC574 csippel oldottam meg, ami a CPU adatbuszra való hajtását is megoldja egyben, ugyanis a kimenetei Tri-State módon vezérelhetők. Ugyanilyen tok szolgál íráskor az adat tárolására, ill. ugyanilyen a processzor portjának a megvalósítása is. A CPU port nagy része kimenet, de vissza kell tudni olvasni, ami egy 74HC245 segítségével lett megoldva. A CPU port adatirány regisztere meg is van valósítva meg nem is. :) Az állapota közömbös, mivel a funkciók fixek, nincs jelentősége. A helyén simán a RAM írható / olvasható, tehát látszólag ott van... A TPI adatirányok nagy része szintén „be van drótozva” fix értékre, csak ott lett megvalósítva, ahol ténylegesen van értelme az állíthatóságnak. (Pl. A TCBM busz 12 vezetéke ilyen, ugyanis programból az használható tetszőlegesen, ki tudja, hogy a programozók eddig mit követtek el... De a fej fele menő adat adatirányából már csak 1 bit van tárolva, ott nincs értelme a bitenkénti állítgatásnak.)

Ezen felül van még egy eltérés a két ASIC között, ez pedig a BYTE READY jel. Az 1541-ben ez egy impulzus, az „esemény tényét” egyrészt a VIA, másrészt a CPU „OVERFLOW” bitje tárolja. Az 1551-ben a BYTE READY eseményt maga az ASIC jegyzi meg, a CPU a saját portján keresztül ezt a „megjegyzett” állapotot látja. A BYTE READY jelet a TPI elérése törli. (Rendes működés közben amúgy is a fej fele menő / onnan jövő adat kezelése jön a BYTE READY esemény után, ami a TPI írásával / olvasásával történik, így ez automatikusan megvalósul.)

A tényleges végeredmény ilyen lett:

A FLASH-t kicseréltem egy EPROM-ra, mivel azt csak a programfejlesztés idejére használtam (meg 29C020-ból van vagy 2 darabom, 27C010-ből meg pár csővel... Elég lenne egy 27C512 is (A DOS-ok 16 KBYTE-ok, a bekapcsoláskor futó konfiguráló programocska meg vagy 150 BYTE...), de abból sincs kéznél éppen egy sem. Pláne nem üres...), a kábelezés kész, a TCBM busz kivezetve egy csatlakozóra, a típusváltó kapcsoló felszerelve... Össze is lehet rakni.

Az azért tisztán látszik, hogy túl sok hely nem maradt a mechanika és az elektronikám között... Hogy a motor mennyire szórja forgás közben a mágneses terét, azt nem tudom, eddig – úgy tűnik – nem zavarja az elektronikát. Hogy a vizuális élmények közül az összerakott állapot se maradjon ki:

Kívülről ennyi látszik, egy matrica pár felirattal azért még majd elfér.

Hogy most ez így mire is jó? Meg egyáltalán... Na, ez egy jó kérdés. A nehézségek miatt volt egy csomó bosszankodás, sok elképzelés nem működött, de azért összességében jó móka volt ezt „összehackelni”. Vissza van a gépbe kerülő interfész, az is okozott pár „fejvakargatós” percet, de azt a mesét azt hiszem jövőre halasztom.

„Irodalom”:

balagesz

---

2012.12.30.
2013.01.05. 1541/1551 különbségek, „irodalom”
2019.12.07. D8.
2024.08.22. Kép.jav. + elírások

Hozzászólások

Befosok oO
A 99%-át ugyan nem értem, de egy valami világos: itt egy old school, profi hardware HACKER-rel van dolgunk, a szó minden értelmében!
Respect!

----------------------------------------------------------
"One should strive to achieve; not sit in bitter regret."
www.xonotic.org

fszom bele ;) kedvet kaptam egy ilyen rovathoz modern hardverekkel...

még egy kicsit iszok és félmiskás notebook fúrok-faragok rovatot indítok :) bár nem hiszem, h érdekes lenne basszameg itt a menő a 80e Ft-os cucc.

viszont ha GBA-n úgy tolom majd a Doom-ot vagy DN3D-t, h háttérfényt teszek a kijező mögé, akkor mindenképp jelentkezem!

egyébként meghajolok mester, főleg, hogy 2Ft-ot nem tettem volna rá, h hibátlanul működik! ez fsza!

--
Vége a dalnak, háború lesz...

Ez pont egy olyan "projekt" volt, amirol ha elore tudom, mennyi reszevel lesz gond, neki se allok. (Ilyenkor jo az, hogy az ember nem jos.) A felmerult problemak toredeket irtam csak le, igy is sok lett... (A kedvencem a RESET eseten rosszul beallitott irasengedelyezo bit, amivel minden inditaskor felul sikerult irni a lemezen azt a savot, amin a fej eppen allt. :) Szerencsere az 1551 gyorsan formaz.)

Azt sejtem, hogy "rossz platformot" valasztottam... Ha mondjuk C64-et / AMIGA-t farigcsalnak, egy-egy hardverre tobb potencialis ugyfelet szerezhetnek, mint a plus/4 eseten. Ez igy van. Viszont a C64 maga nem vonz (ott amugy is rengeteg jo hardveres keszit "csuda dolgokat", szo szerint), az AMIGA meg szamomra igazabol "ismeretlen terep" (annak ellenere, hogy a hardver reszerol azert eleg sokat tudok). Programozni pl. meg nem programoztam AMIGA alatt. (A 68k amugy rulez... :) )

De erdekes am az otlet...

Le a kalappal:)

Én is gondolkodtam kb. 10 éve 1551 helyettesítésén,
akkor hamvába halt az ötletem, amit most vettem elő
hasonlóan mint a commodore16-ot és plus4-et:))))

Én most azon gondolkodtam, mi lenne ha egy 20 vagy 40MHz-es
mikrovezérlő lenne ráakasztva a c16/plus4 buszaira,
és abban lenne a teljes floppy emuláció meg hozzábiggyesztve egy SD kártya.