Fórumok
Sziasztok!
Van egy kb. 30 éves program amit próbáltam virtualbox, és vmware alatt is futtatni. A hostra még feltelepítettem a com0com virtuális port emulátort. (putty segítéségével látom is hogy COM1 tükröz COM2 re, oda vissza, gépelgettem terminálablakban). Emulált Windows al is kipróbáltam, hogy a hozzáadott com1 et látom a host gép com2 portján.
A problémám, hogy a futtatót dos alapú program kommunikációját sehogy nem látom. Probáltam COM1 sé COM2 paraméterrel. A programban nem sok az infó.
Hogyan tudnám elfogni virtuális gépben???
Hozzászólások
Nem nagyon értem, hogy mi is a cél, de a DOSBox nem lenne elegendő?
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
egy régi vasról szeretném átemelni és megnézni, hogy kommunikál e. sajnos ez még külön kártyát használ az alaplapon rs232 kommunikációhoz. ha a program a kártyához van írva gondolom hiába probálok emulátorokat, mert dos alatt még nincs com és fejlettebb címzések. így a régi szoftver csak azzal a kártyával fut, emulálni nem tudom, vagy átrakni modernebre
+1 a dsoboxra, ahol a konfigban
ahol X az egyik példányban a com0com egyik virtuális portszáma, a másik példányban pedig egy másik (aztán használhatod a kedvenc serial sniffered a forgalom monitorozására/loggolására)
Y pedig a dosos proggi által használt port száma
de ebben semmi ilyen nincs hogy port szám stb. 0F0H meg ilyenekre hivatkozik... azért nem tudom, hogy fogjam el ha nem tudom hová akar beszélgetni
a régi vas és az rs232-n meghajtott eszköz közé nem lehetne betenni egy 2 fizikai soros porttal rendelkező, serial sniffert futtató pc-t?
ha a rendelkezésre álló forráskódból feltárás nem opció
sajnos nincs ilyen gépezetem, lassan már mindről leesik a com port is, csak uefy-s modern vackok
2 db USB-soros átalakító egy tetszőleges gépbe, és a 2 USB-port között Linux alatt már akár tcpdump-pal vagy Wireshark-kal lehet nézni a forgalmat, nem?
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Nekem volt, hogy az UART chip TTL szintjere kotott logikai analizator volt a megoldas. Volt, hogy Arduinoval kuldtem es fogadtam parancsokat, amikor valami hardware-t fel kellett deriteni. De az is mukodik, amit irtal.
A strange game. The only winning move is not to play. How about a nice game of chess?
Szinte ingyen lehet már kapni vaterán is olyan öreg (pl. IBM) és még mindig funkcionáló laptopokat amik még DOS kompatibilisek: van floppy drive, serial port... Ha ennyire ki akarod kutatni a dolgot, akkor nem nagy áldozat pár ezrest rászánni (utazással együtt).
No offense, de új gépeket is lehet venni (Free)DOS-szal - persze se floppy, se serial nincs rajtuk, de...
ehhez neked külön kártya fog kelleni a progit elnézve, nem sima soros port
dosbox alatt is elinditottam, felcsatolom a meghajtót, elindul a program, majd írja hogy a " C soros kommunikációs program, nem sikerült a kapcsolat..."
persze com portokon puttyval semmit nem látok... :-(
sztem valami ilyesmi fog kelleni neked: http://www.decision-computer.de/Produkte/8255/8255-N-e.html
kérdés honnan lesz ISA slotod... múltkor láttam, hogy a TPM csatiban levő LPC-t használták fel hogy kivezessék az ISA-hoz kellő signalingot:https://www.vogons.org/viewtopic.php?t=93291
https://www.youtube.com/watch?v=putHMSzu5og
8255-ös az PPI, nem RS232. Ahhoz 8251-es chip (vagy annak emulációja) kellene neki. MAME amúgy ezeket mind emulálja, talán van valami PC kompatibilis klón is, amiben ezek a megfelelő portokon ott vannak (vagy hát open source, nem nehéz átírni a portszámokat).
Bár igaz, hogy a program a 8255-t is használja valamire, F8 címen nem a beépített PPI van.
Sőt, van ott több PPI is, AD kártya, input kártya, output kártya. Jól meg lehetett tömve az eredeti gép.
Szerk.: és a timer sem a beépített PC portokon van, szóval van még egy külön PIT (timer) kártya is.
Szóval az eredeti gépben van egy 8251-es UART bővítés, 8 (lehetséges) PPI, és 1 PIT. Ezek mind bővítések, saját portokon.
Első körben az eredeti, vélhetően egyedi hardvert kéne látni, hogy micsoda, mi van benne, mert ugyan lehet nézegetni, hogy a kezelő sw mikor, milyen portra mit küld ki, de ha a másik "végén" nincs semmi, ami fogadná és válaszolna, akkor nem sok érdekeset fog látni...
Igen, erre figyelni kell, mert sokan azt hiszik, hogy az soros port (RS-422, RS-485, TTL UART) meg az RS-232 azonos, közben meg csak hasonló szabványok, de más jelszinttel dolgoznak adott esetben, ezt nem egy videón láttam már, hogy retrósok is végigszopják ilyen USB2serial dongle, átalakító eszközökkel, hogy rádugják, de nem működik, mert a retró eszköz RS-232 jelszintet kérne (5-15V, ami 3,3V-tól érzékelődne minimum aktívnak), de az átalakító, meg modern gép portján a UART csak TTL 5 voltra van tervezve, és még ehhez képest az aktív jelet is csak olyan gyengén küldi, hogy beesik 3,3V alá, így a valódi RS-232 eszköz azt hiszi, hogy active low / idle a jel, és nem veszi észre, hogy igazából kommunikálnak vele.
A helyzetet tovább rontja, hogy sok adapter gyártója, főleg a noname kínai szutykoké, vagy fel sem tünteti pontosan a protokollt, vagy tévesen, és csak azután veszed észre, hogy nem megy, amikor már késő, megvetted.
A másik hasonló népszerű tévedés, hogy a 9 tűs soros portot szinte mindenki DB-9-nek aposztrofálja, közben az meg DE-9, B-sől nem is létezik 9-es. Ami a keveredés alapja, hogy a DB25-ös csatlakozó volt az elődje, és ennek alapján azt hitte mindenki a 9 tűsről, hogy akkor az DB9 lesz. Ezekkel én se voltam tisztában, amíg nem kezdtem el róla videókat nézni, egy világ omlott össze bennem, mikor megértettem, hogy milyen tévedésben vagyok ezzel kapcsolatban én is.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
A 8251 itt ugyanúgy RS232, csak épp nem ez van a PC-ben, mint COMx port, máshogy kell programozni, ráadásul más IO címen is van. RS232 chip is van (volt) egy raklappal, PC-ben COMx hardverek adott IO porton levő 8250,16450 meg 16550 kompatibilis valamik voltak mindig.
A 8255 meg sima PIO, azaz párhuzamos 3x8 bit-es IO chip, semmi köze semmilyen RS-xxx-hez. Legfeljebb bit-banginggel lehet belőle soros portot csinálni, de itt nem ez van.
A 8251 az F0/F1 címeken az nem a szabvány soros port UART (8250-16450-16550), ez egy sokkal egyszerűbb (koraibb) chip 2 regiszterrel, FIFO nélkül. Ezt nem hinném, hogy bármilyen PC emulátor támogatja. 8-bites gépekben, meg az Atari ST-ben MIDI-re használtak hasonlókat (MC6850 vagy a MOS 6551).
A nyito alapjan gondolom hogy Win alol probalkozol. No, az nincs keznel, de linuxos QEMU-val relative egyszeru a dolog. Legalabbis a kovetkezo kombinaciot kiprobaltam a regi DOS-os rendszeremmel, es mukodott - azaz ez igy mukodokepes lehet:
Ekkor a DOS COM1 portjanak a masik vege a nullmodem masik vege lesz, azaz a /dev/tnt1. Kiprobaltam a klasszikus DOS-os parancsokat (copy con > COM1, type COM1), mindket iranyban szepen megy a kommunikacio. Gondolom a COM0COM az a Win megfeleloje a tty0tty-nek, szoval ha az fel van telepitve akkor hasonlo QEMU-parancs kombiancioval azert illene mennie ott is. Azt mindenkepp nezd meg hogy a COM0COM az minek nevezi el ezeket a virtualis soros portokat. Nagyon halvany es/vagy keves tapasztalatom van csak Win-es soros portokkal, de az feltunt hogy ezeket a virtualis es/vagy USB-s soros portokhoz altalaban eleg nagy szamot rendel hozza. Szoval azt mindenkepp nezd meg elobb mindentol fuggetlenul hogy a COM0COM az miket hoz letre _es_ hogy tudsz-e veluk kommunikalni. Peldaul ha a COM0COM az letrehozza a COM6 <-> COM7 part, akkor nyiss meg ket puttyot, az egyiken a COM6-ot, a masikon meg a COM7-et. Es amit az egyik putty-ba begepelsz azt latnod kell a masikon es vice verza. Csak akkor probalgatsd a virtualis gepet, ha ez a teszt sikeresen lement.
Lenyeg a lenyeg hogy valoban szukseges ehhez egy olyan soros port realizacio amit a host operacios rendszere fizikainak is hihet (linux alatt ugye ez a /dev/ttyUSB*, /dev/ttyS*, /dev/ttyACM*, /dev/tnt*, stb, Win alatt pedig a COM* portok). A virtualizator (QEMU, Virtualbox, barmi) pedig megcsinalja azt hogy ezt a fizikai soros port realizaciot hozzakoti a megfelelo I/O portokhoz, igy a guest oprendszer a megfelelo I/O muveleteken keresztul (lasd: COM1: 0x3F8, IRQ 4, stb) eleri az adott fizikai (vagy fizikainak latszo) hardvert.
igen ezt csináltam windowsban pont ahogy írod. com1 és com2- vel (puttyban gépeltem, mig a másik puttyban láttam a gépeltet) de ez semmilyen com port felé nem küld... nem tudom hova az anyj*ba kommunikálna
Meg akkor azt neznem meg hogy a nullmodem driver mennyire es/vagy milyen gyakran flush-ol. Illetve tenyleg, az is egy fontos szempont hogy konkretan milyen soros port hardvert is virtualizal a virtualizator. Abbol is sokfele van... Jo kerdes hogy a qemu vagy barmi ilyen szempontbol "pluginezheto" esetleg, hogy sajat I/O tartomanyra vagy megszakitasra ra tud-e cuppanni egy kulso modul-szeruseg ami biztositja a szukseges funkcionalitast. Ilyesmit csak Cortex-M0-s meg RISC-V jellegu rendszerekhez csinaltam, x86-hoz annyira nem.
Szia!
Háát csöppet meredek lesz a válasz, de azt tudom javasolni, hogy szerezz be egy soros bővítő kártyát tedd bele a gépedbe és add át egy az egyben a virtualbox-nak...
Azért meredek a válasz, mert nem tudom létezik e olyan kártya ami jó a mostani gépbekbe és van hozzá DOS driver.
FreeDOS egyébként szóbajöhet? Gondolom az natívan is felmegy egy csomo "mostani" PC-re.
Szerk: http://www.tronicore.com/en/serial-rs232-pci-card
van hozzá DOS driver.
Milyen DOS driver? A program valószínűleg közvetlen írja/olvassa a 8251-es regisztereit. Nincs absztrakció, vagy van olyan hardware, ami kell a proginak, vagy nincs.
Oké, én voltam pontatlan, elnézést. :)
Az igazság az hogy nem sokat fogalkoztam DOS-al... Vagy túl fiatal vagyok, vagy nem dolgoztam eleget ipari környezetben...
Viszont jó hír, hogy az általam linkelt kártyát kezeli a DOS a leírása szerint. (Remélem most nem írtam nagy ökörséget :D )
kezeli, de itt nem a dosnak kell kezelnie, hanem az appnak
ez a tronicoreos bővítő egyébként 16C550 kompatibilis
Egy COM portot a hozzátartozó "IO PORT" és IRQ definiál.
Alapértelmezett értékek itt:
https://en.wikipedia.org/wiki/COM_(hardware_interface)
A virtuális gép BIOSában állítsd be com0-3 portjait erre:
CPUMOD EQU 81H ; CPU KARTYA 8255-OS PARANCS SZAVA ( 1000 0001 )
;
CPUAP EQU 0F8H ; CPU KARTYA 8255-OS 'A' PORT CIME
CPUBP EQU 0F9H ; CPU KARTYA 8255-OS 'B' PORT CIME
CPUCP EQU 0FAH ; CPU KARTYA 8255-OS 'C' PORT CIME
CPUPP EQU 0FBH ; CPU KARTYA 8255-OS PARANCS CIME
Az IRQ-t még nézd ki a forrásból, a környéken lehet definiálva, 03h, 04h az alapok - vagy ha megvan a régi kártya nézd meg a jumpereket/dipswitcheket rajta, és lesd le onnan :)
És hogyan lesz a 8255 három párhuzamos portjából négy COM port?
"Normális ember már nem kommentel sehol." (c) Poli
com port megfigyelés -> az soros :)
De ha a 8255 az egy párhuzamos kártya, akkor abból sosem lesz com-port így az egész topicfelvetés marhaság.
lenne, ha nem úgy kezdődne, hogy 8251
Nu akkor összekeverdtem a plusz infótól :)
Ebben az esetben úgy lesz a 3 párhuzamos portból négy soros port hogy nem beszélünk hülyeséget :)
0xf8 miatt gondoltam rá, nekem az maradt meg halvány infónak sorosporttal kapcsolatban...
Lehet hogy akkor a virtuális sorosportot 0xf0 -ra ... (0x3f0 inkább?) kell konfigolni?
;=== CPU 8251 PROGRAMSZAVAI ES CIMEI ===
;
MOD51 EQU 0EEH ; 9600,8 BIT,NINCS,2 STOP,x16 ( 1110 1110 )
COM51 EQU 37H ; COMMAND SZO ( 0011 0111 )
RES51 EQU 40H ; RESET SZO ( 0100 0000 )
SIODAT EQU 0F0H ; ADATREGISZTER CIME
SIOCOM EQU 0F1H ; PARANCSREGISZTER CIME
Mindenesetre az indító gondolatomat továbbra is fenntartom hogy a com portot egy IOport és egy IRQ definiál, ezeket kell egyeztetni a működő host és a virtuálisgép között.
elméletileg igen, de mondjuk egy virtualbox egy 16550A uartot fog mutatni a guest felé a maga io térképével, az app pedig egy 8251 usartra számít ott
No, ebben viszont már tényleg nem vagyok kompetens.
Én azt sem értem igazán, mit is csinál az "app", és mire számít.
Az assemblyből beollózott részletek alapján egy MCS80 rendszer chipjeit kell megszólítani, valami magasztos cél érdekében. Az is lehet, hogy a 8251 soros portján a bővítőkártya kifelé kommunikál, vagy parancsokat fogad.
"Normális ember már nem kommentel sehol." (c) Poli
A 8255 egy chip, nem egy kártya.
"Normális ember már nem kommentel sehol." (c) Poli
vagy ha 0xF8-on kezdődik egy com io range, akkor hogy lesz a következő 0xF9-en
Modern gépre is tudsz ISA kártyát kötni, de csak asztali gépnél lehetséges, ha megnézed a YouTube-on ott elmutogatják, valami alaplapi header-re, vagy chipset kivezetésre kell csatlakozni, és onnan ISA riser-ezni, meg külön tápozni. Elég csúnya hack, tényleg csak akkor ajánlom, ha annyira fontos, és máshogy nem tudod megoldani.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
Egy ilyen nem jó a hack helyett? https://arstech.com/install/ecom-prodshow/usb2isar.html
Domain, tárhely és webes megoldások: aWh
Akár még ez is, de ennél a driverei beleszólhatnak a kompatibilitásba. Míg az alaplapi megoldás csúnyább hack, de az működik. A modern PC-k ugyanis épp úgy támogatnak ISA-t, ha más nem a chipset, mert hőmérsékletmérés, stb. azon megy, csak épp az alaplapokon nincs már kivezetése ISA csatlakozóként, bár állítólag még az is van, de csak ilyen méregdrága, ipari gépekbe szánt alaplapoknál.
“The world runs on Excel spreadsheets.” (Dylan Beattie)
Igen, a szenzorok isa buszon mennek, lmsensor ki is irja asszem.
Domain, tárhely és webes megoldások: aWh
Nem egyszerűbb újraimplementálni egy modern PLC-be az egész cuccot?
Vagy akár FPGA-ban az egész HW-t, de ehhez nehezebb lesz vállalkozó embert találni.
Egy Next186-ra nem lenne nehéz ráaggatni az extra PIT,PPI és USART-okat.
Jobban jársz ha beruházol hardveres sniffelésre.
Ha ragaszkodsz a virtuálgépes megoldáshoz, akkor pl. ebből átemeled a megfelelő rutinokat egy qemu-ba, lefordítod és örülsz.
„Az összeomlás elkerülhetetlen, a katasztrófa valószínű, a kihalás lehetséges.” (Jem Bendell)
A gép egy 768kb memóriás, 40Mhz-es csoda ami megy. A kártya: PT1227W V3.2 isa kártya. (https://www.ebay.com/itm/186357283396?customid=&toolid=10050)
A merevlemez klónozva, virtuális gép alatt el is indul a dos, de a com port hozzáadásánál semmi jel. (vmware és virtaulbox)
Valakinek valamilyen ötlete lenne amit megpróbálhatok?
114USD? Pofám leszakad... Random beletúrva az ócskás fiókomba szerintem találnék ilyen dzsémszbond :-) chipes kártyát...
Ja, volt idő, mikor ingyen utánad dobták, most meg retró.
Ez egy mezei (akkor szokasos) super I/O kartyanak tunik, 1 HDD, 1 FDD, 2 soros, 1 parhuzamos es gameport tamogatassal. Ennyi az osszes sorosport a gepben, amit ez a kartya ad? A virtualis gepben arra a cimre raktad a soros portot, amelyik cimen/irq-n a nalad levo kartyan jumperelve van?
...és ugye kell hozzá a saját tűs csatlakozó - DB9/DB25 kábel/hátlap is, mert nagyon meg tudja az embert viccelni, mivel ezek nem minden esetben voltak kompatibilisek egymással...
tul nagy valtozatossag nem volt, vagy sorban volt vagy valtva...
Normálisabb emulátorral próbáld! PCem, 86Box.
Ez gondolom nem az eredeti kártya.
Szerintem még mindig nem érted a problémát.
Soros portnak neked 8251-es kell, nem 16450 meg 16550-es, amit ezek a super IO chipek (vagy emulátorok) implementálnak. Standard PC-ben sosem volt 8251-es, ez egy nagyon legacy UART chip, szóval csak egyedi kártyán lehetett ilyennel találkozni.
Ezen kívül az ASM alapján kell még 8255-ös PPI és 8253-as PIT is, mind egyedi portokon.
Zsugabubus ez az eredeti kártya... XD Itt az eredeti kártyáról 2 fotó: (https://drive.google.com/drive/folders/1XBBjD7GL_koStsB7WZlI68Q7yk6fygt…)
Arra gondolsz, hogy az a használatos cim/irq nem lesz a mai gépekben? nem értem.
ez alapján (hasonló): Winbond AI-1078E Super IO Card.pdf
COMB 2F8/IRQ3
de ha a hátulját nézem a kártyának (festés) akkor com4/irq3 et értelmezek, próbálom dekódolni
100% biztos vagy benne, hogy egyéb bővítőkártya nem volt a gépben?
Akkor volt benne egy másik adatgyűjtő kártya is, 8251-es UART-tal, és egyéb extrákkal.
Vagy ez:
;=== CPU 8251 PROGRAMSZAVAI ES CIMEI ===
;
MOD51 EQU 0EEH ; 9600,8 BIT,NINCS,2 STOP,x16 ( 1110 1110 )
COM51 EQU 37H ; COMMAND SZO ( 0011 0111 )
RES51 EQU 40H ; RESET SZO ( 0100 0000 )
SIODAT EQU 0F0H ; ADATREGISZTER CIME
SIOCOM EQU 0F1H ; PARANCSREGISZTER CIME
kamu, és semmi köze a programhoz, amit futtatsz.
Eleve egy PC-n a legegyszerűbb UART az a 8520 volt, ennek 8 regisztere van:
https://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#…
A programod által használt 8251 sokkal egyszerűbb, régebbi, és nem alulról kompatibilis ezzel (van összesen 2 címezhető regisztere, látszik is az ASM kódban, F0 ahol programozod (olvasva státusz regiszter), F1 ahova/ahonnan írod/olvasod azt amit küldeni/fogadni akarsz). Soha nem is volt szabvány PC-ben, ráadásul a PC-s COM portok egyike sem 0F0-n van. Ezen felül az ASM részlet több más chipre is hivatkozik, 8(!) db PPI-re és egy PIT-re. Valószínűleg ezek egy custom adatgyűjtő kártyán voltak így együtt.
Hát itt elég nagy katyvasz van. Az IO kártya amit linkeltél az Winbond W83757 I/O chip van. Annak az IO és egyéb vonalai a szabványos címtérben voltak. A másik chipe I/O illesztő, nincs köze a program működéséhez.
A kód amit megosztottál, valamilyen egyedi I/O chipsetes géphez tartozik. A benne meghivatkozott címek nem szabványosak. Így dallam alapján, még azt mondanám, hogy ez valamilyen 8080-as célgép lesz. Mintha az SBC-80/10 vagy SBC-80/20 lenne.
Szerintem jobb lenne ha valahova feltennéd az eredeti programkódot vagy forrást a teljes terjedelmében.
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
Igen, itt voltak anno rendesen mokolások.
a gép teljes merevlemeze ebben a zipben van: https://drive.google.com/file/d/1uMG_uZYKBLp4ppwvu60Pw0qFVk_aGax-/view?…
zip jelszava: meghajto (A google beriaszt rá.)
Annyi emlékfoszlányuk van, hogy dos alatt com1 vagy com2 ön működött 9600, 2 stopbittel, paritás nélkül.
Ötlet: virtuális vagy fizikai pcn amin van com port szerinted ez küldene rá bármit is? (com port halgatózásra gondoltam)
Van egyáltalán bármi köze a mutatott asm részletnek a futó programhoz?
Mert ugye az asm az forráskód, hogy működjön, le kell fordítani.
"Normális ember már nem kommentel sehol." (c) Poli
Haha, jó nagy félrevezetés az egész. Az ASM egy Z80-as célgépre vonatkozik:
;# Ez a program tartja a kapcsolatot RS-232 tipusu soros kom- #
;# munikacio hasznalataval az IBM-PC szamitogeppel es vezerli #
;# a takarmanykeverot a Z80-as mikroszamitogeppel.
Majd Z80-as mnemonikokkal folytatódik a kód. Nem ez fut a PC-n.
Jó kérdésed van. Van ez a gépem ezzel a merevlemez tartalommal, meg ez a kártya. Azt se tudom mivel fordíthatták a programot. A legkomolyabb hogy 30 év elteltével is működik még. Ezt szeretném áttenni egy modernebb vasra.
A programot Borland C-vel fordították, de a PC-s programnak nincs ott a forráskódja. Az ASM-mel meg jól félrevezettél mindenkit.
akkor volt egy ősrégi aztán meg lett egy újabb c -vel fordult változat?
a kábel a comb csatlakozóra van a kártyán dugja, JP9 -nek hivja a hátoldalon a jumper állásokat, összenézve akkor ez com4/irq3 vagy már ehhez is hülye vagyok?
Te write-only módban vagy?
Fentebb leírtam, az ASM kód az egy Z80 alapú gépre van, mivel Z80 program, az sose futott PC-n.
A C-s program ami a PC-n fut (PANK.EXE), aminek nincs meg a forráskódja, és végül is lehetséges, hogy valamelyik standard COM portot használja.
A PC-s program arra van, hogy kommunikáljon a Z80-as géppel, soros porton keresztül.
Nem csak igen nehezen értelek. Eddig az jött le, hogy az asm kód akkor otthagyott maradványok valamire, a rendszer a pank.exe-t használja. Azt mondod lehetséges, hogy standard com portot használ (én ez a kártya és jumperezésére is erre következtettek). De ha feltételezzük,hogy standard com még ott van hogy milyen istennyila opció lehet amivel beszélget.
Valamilyen debuggerrel futtatva biztos kiderülne, hogy mit is akar.
Viszont mi van a soros kapcsolat másik végén? Mert oda az a Z80-as célgép való, ami az ASM-ből előállított kódot futtatja (a forrás alapján mindenféle csigát meg keverőt és fittyfenét kapcsolgat).
Megnéztem.
A takarmánykeverőben egy Z80 alapú mikroszámítógép van, amivel soros porton keresztül kommunikál. A program nem fog menni önmagában, mert a indulásnál lekérdezi a keverő meglétét és kiszáll, ha nem látja.
A PCn a PANK.exe futott, ez vezérli a keverőt. A z80 könyvtár a célgép forráskódját tartalmazza.
Dosboxból az alábbi módon tudod kipróbálni/használni:
Kell egy USB-soros adapter, de olyan ami full RS232, mert régi a vas és nem fog menni a csak RS-232 kompatibilis adatpterrel.
Az adaptert rádugod a gépre és felkonfigurálod, hogy sima felhasználóként tudjad használni. Az adapter sebességét 9600-ra állítod (
stty -F /dev/ttyUSB0 9600
), mert nem biztos, hogy a DOSBOX tud sebességet állítani.Beszélsz a gépet használókkal, hogy mondják meg melyik portra volt a keverő rádugva. A kártyán megnézed a jumperek állását és abból, a kártyán lévő táblázat alapján kitalálod, hogy az eredeti gép milyen portcímeket és irq-t használt. Tipikusan az alacsonyabb port érték volt a COM1 a magasabb a COM2.
Ha linuxot használsz megkeresed a dosbox.cfg (.dosbox könvtárban a /home-on belül) filet és beírod az alábbit:
serial1=directserial realport:ttyUSB0 irq:4
port:0x3f8
A realport: ttyUSB0 az a /dev/tty amit az USB adaptered használ. irq: a soros kártyás irq-ja, a port: a soros kártyád portja.
Ezután összedugod az adaptert a keverővel és dosboxban elindítod a pank.exe-t. Ha működik akkor örülsz. Magát a kommunikációt le tudod menteni az alábbi módon:
socat /dev/ttyUSB0,raw,echo=0 SYSTEM:'tee bejovo.txt | socat - "PTY,link=/dev/ttyVRT0,raw,echo=0,waitslave" | tee kimeno.txt'
Ez esetben a doxbox.cfg-ben át kell írni a realport:-ot ttyVRT0 -ra. Mondjuk jó dolog ellenőrizni/beállíatni, hogy a /dev/ttyVRT0-ra legyen a felhasználónak írási jogosultsága.
A pank.exe-ből ki lehetne nyerni a port és IRQ értéket, de nincs kedvem ghidra-t telepíteni.
Kérdés, mi lenne a cél? Újra üzemeltetni a keverőt, vagy új vezérlőprogramot írni? Ha csak a keverő elindítása, akkor gyakorlatilag bármilyen 386 vagy 486 elviszi a programot az eredeti soros vezérlőkártyával.
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
>> A pank.exe-ből ki lehetne nyerni a port
COM2 (0x2f8) , 9600 8N1 van beleégetve
0x218F8 SorosIni()
{
...
0x21899 setserial(po= 2, sp= 9600, pa= 0, b= 8, sb= 1)
{
...
0x21775 setport(po) -> ha 1, akkor ioaddr=[0x0040:0x0000] (tipikusan 0x3f8), ha 2, akkor ioaddr=[0x0040:0x0002] (tipikusan 0x2f8)
...
0x217BA setspeed(sp) -> ioaddr/ioaddr+1 feltöltése a megadott baudrate alapján
...
0x2182E set_pabsb(pa, b, sb) -> ioaddr+3 (lcr) beállítása a megadott paraméterek alapján
...
}
...
0x21753 initserial()
{
...
0x21615 set_svects() -> intvec[0x0b] (irq3) és intvec[0x0c] (irq4) mentése, és saját handler beállítása (0x2148F com_int())
...
}
...
}
Ugy emlekszem, a 0x3f8 volt a COM1, a 0x2f8 pedig a COM2, szoval pont forditva. Meg a ttyUSB0 ha ilyen szintaxissal nem megy, akkor a /dev/ttyUSB0 megprobalhato. De amugy +1 az egeszre!
A strange game. The only winning move is not to play. How about a nice game of chess?
Eddig eleg keves infot adtal meg, emiatt nem is szoltam hozza. Most viszont tobb korabbi keresre/kerdesre reagaltal, ami jo.
Az architektura nekem is ugy tunik, amit itt felettem tobben kibogoztak:
Van egy regi, DOS-os PC, ezen fut a pank.exe (esetleg pank1, pank2, gondolom kicsit mast csinalnak), ami vezerli az eszkozt. Talan Turbo Pascal, vagy C alapu lehet, az EGAVGA.BGI alapjan (mindkettobol lehetett soros portoto kezelni, nem tul bonyolult hardware). Ez soros porton (sima RS232, a korabbi tippekkel ellentetben) kommunikal egy Z80 alapu vezerlovel, aminek - udvarias gesztuskent - ott a kodja. ASM-ben irtak, es a megadott feladat (ha jol ertem, a gep beallitasai alapjan inditva) motorokat/szelepeket/ilyesmiket kezelhet, meg nyomogombokra es erzekelokre reagalhat. Van par adatfile, meg regi naplo, ezekben van a recept, hogy mivel mit keverjen, meg talan az aktualis leltar is.
A rendszer gondolom mukodik, a kerdes mar csak az, hogy mi a pontos celod.
Ha szeretned a regi vasat biztossa tenni (akarmikor meghalhat egy ilyen 25 eves PC), talan emulalva/virtualizalva atteheto az egesz uj gepre. Ha tenyleg standard soros portot hasznal, akkor csak olyan emulator - vagy VM - kell, ami ezeket lekezeli. Ugy emlekszem, hogy a qemu tud ilyesmit kezelni Linuxon, de az idozeteseket elronthatja - ha fontosak (valoszinuleg nem idokritikus, COM portnal nem jellemzo). Dosbox is mukodhet, van a neten nyoma, hogy ez tamogatott, es valakinek sikerult.
Aztan valaszthatod azt, hogy a Z80 kodot ertelmezve, esetleg a kommunikaciot visszafejtve ujrairod a PC oldalt teljesen. Ez eleg nagy munka, de mukodik, uj funkcionalitast kapsz, es lehet par evtized az eszkozben. A Z80-as kutyu meg a vezerelt mechanika persze ilyenkor marad.
Megteheted, hogy ha mar a PC-t csereled, a Z80-as vezerlot is (az is jopar evtizedes). Ez meg annal is valamivel nagyobb munka (bar a visszafejtes resze egyszerubb), de ha a mechanika egyebkent jo, lehet ertelme. Amit az akkori, Z80-as vezerlod tudott, azt egy mai mikrokontroller siman hozza, PC-vel (vagy SBC-vel) osszekotheto, es a PC oldali software is ujrairhato. Tobb hasonlo projectben vettem mar reszt, be kell azonositani milyen erzekelo hova van kotve, meg milyen outputjai vannak (es melyik mit csinal), innentol a tobbi ujrairhato a kor kovetelmenyenek megfeleloen. (mondjuk a lyukszalagos CNC maro nem erte el a ceges NASt, a Linux alapu meg igen)
A strange game. The only winning move is not to play. How about a nice game of chess?
rátettem többféle virtuális gépre (serial2=directserial realport:COM2 base:0x2F8 irq:3) vagy másik fizikai gépre 2f8, irq3 + hardveres hallgatózás, de semmi jel... egy villanás se
>>de semmi jel... egy villanás se
dehogynem
amikor ezt látod, kinyom egy 0x11-et (xon, a saját definíciója szerint "ONLINE UZEM")
ha erre válaszul küldesz szintén egy 0x11-et, elégedetten továbblép ide, a kapcsolat rendben
kilépéskor pedig küld egy 0x06, 0x13 (ack ("MINDEN OK"), xof ("OFFLINE UZEM")) sorozatot
ez igaz, de milyen eszközzel, mert mint írtam a mai gépek az akadályom...
Több féle próbálkozásom volt, hogy legalább 1 bitet elkapjak, valamilyen fizikai porton un. kábelen.
1. 10 éves asztali gép amin van com port csak 3f címekre hallgat a bios serint így felejtős.
2. posiflex pc állítható bios com címzéssezel, de semmi. (látom a c soros szöveget csak a kimeneten semmit nem veszek fel)
3. vitualizáció (dosbox,dosbox-s, virtuális serial)
4. aten usb---rs-232, moxa 5110 tcpconverter realcom módban, hogy laptopon lássam.
Kolléga mint írja régen jobb volt...
a nyitó postodban szereplő com0com alapján windows guestet feltételezve pl így:
a guestben standard dosbox setup, egyetlen eltérés a default confighoz képest:
serial2=directserial realport:comX
ahol X a vbox guestben emulált serial port száma (ami remélhetőleg port mode: host device beállítású, és a megadott host device-on a z80 alapú eszköz lóg)
emelett a guestben tetszőleges serial sniffer használata comX-en (pl AGG Serial Port Monitor "spy" üzemmódban), hogy lásd a kommunikációt
amennyiben pedig nem a fizikai eszközzel szerenéd összekötni a dosos programot, hanem saját tesztprogrammal vagy terminál szoftverrel (pl egy jól makrózható CoolTerm-mel), akkor com0com-ban egy "ports class" virtual port pár beállítása, dosbox configban az X legyen az egyik virt port, a tesztprogramban/terminál szoftverben pedig a másik virt portot add meg
ps: tegyél meg egy szívességet a pank.exe-nek, és másolj mellé egy sans.chr-t, így nem kell majd azt másodpercenként 9billiószor megpróbálnia megnyitni, és a főmenü is megkapja eredeti kinézetét
Arra majd hajlando leszel valaszolni, hogy tulajdonkeppen mi is a celod?
Van egy keverogep (mechanika, elektronika), van egy Z80 alapu vezerlod, meg egy PC a rajta futo programmal, ami ezzel kommunikal. Tegyuk fel, hogy egy masik PC-n elindul DosBox vagy QEmu alatt az eredeti program. Es utana?
A strange game. The only winning move is not to play. How about a nice game of chess?
A célom, hogy a jelenleg is működő offline gépet átültessem egy virtualizációra, hogy online is rá tudjak nézni.
A keverő és vezérléséhez nincs értelme nyúlni, megy amíg megy aztán cserélni kell korszerűre, de a gép kicserélésével extra funkciók jöhetnek (pl. anydesk stb.), de az már kiszolgálhatja majd (a vas) a későbbi új rendszert is.
Sajnos még értelmes, gyakorlatban működő technológiát nem sikerült beállítanom, ami adna is ki jelet a portra.
a z80 felé egyébként ílyen formában mennek ki az 'utasítások'*:
(happy path)
ahol a payload egy utasításkód* és opcionális paraméterek hexascii stringgé alakítva
és a checksum pedig az stx+payload bytejai+etx byte-modulo összeg hexascii stringként
*:
01: 'AUTOMATA UZEMMOD' UTASITAS
02: 'TESZT UZEMMOD' UTASITA
03: 'CIKLUS VEGEN STOP' UTASITAS
04: 'VESZSTOP' UTASITAS
05: 'START TOVABB' UTASITAS
06: 'RETESZ FELTETEL' UTASITAS
07: 'RECEPT' UTASITAS
08: 'OUTPUT FOGADAS' UTASITAS
09: 'TARA SULY' UTASITAS
0A: 'POTTARTALY' UTASITAS
0B: 'OSSZES RETESZ' UTASITAS
példa a paraméter nélküli 'CIKLUS VEGEN STOP' utasítás küldésére:
a cheksum számítása itt: 0x02(STX) + 0x30('0') + 0x33('3') + 0x03(ETX) = 0x68, ebből lesz '6' és '8'
Ezt imádom a régi rendszerekben, nézed a kódot és pár óra alatt vissza tudod fejteni a működést. Nincs bullshit, nincs értelmetlen libraryk és köztes rétegek.
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "