-- Magyar verzió lent --
I was thinking on the way to home driving. I was trying to find out, how could communicate the EP and the Microcontroller.
I find out a solution:
- we have to place a 50Hz IRQ (Interrupt) in the USER ISR (interrupt service routine).
- the routine sets a dedicated (not used) segment on an address-domain e.g 0xc000-0xFFFF of the Z80
- Z80 then copies some data into that page (e.g. screen information)
- Microcontroller catches these data and send back to the PC via USB
- On the same time, Z80 can also read some data from this segment (e.g. keystrokes, files from PC, etc)
The only question is, how can we place a routine in the USER ISR? I would like to avoid to use extra software on the EP.
My first thought was, that the microcontroller is also able to carry a ROM.
We can "boot-up" the Enterprise with our ROM, which starts the IS-Basic (available in the cartridge) and places his routine at the point at USER ISR.
If this is not working, or too complicated, I have a second idea:
For sending screen information (EP -> PC)
The microcontroller (and the brother FPGA Chip on the same extension card) can catch all the read and write of the Z80. So we can mirror the video memory in a SRAM (static RAM), and the microcontroller can search for the LPT (line parameter table) and copies each lines to send via USB. So we can have the screen of the EP on the PC, without extra load of the Z80.
For keysrokes (direction PC->EP),
Frankly I have no idea. The only way I can see is a modified Interrupt Service Routine, which fills the Exos buffer with the latest keystroke.
Before we test on hardware, I strongly advised to prepare the latest Enterprise Emulator, that we can send data from external program by using PIPE. I would emulate the Enterprise's Expansion connector (z80 halt, z80 RD, z80 WR etc.).
Is it possible to use 2 emulator at the same time? Because it is easier to test, getting data from one, and show it on the other.
=== Magyar verz. ===
Gondolkodtam a hazafelé menet. Azt próbáltam kitalálni, hogyan lehetne a kommikációt felépíteni az EP és a mikrokontroller között.
A következőt találtam ki:
- el kell helyezni egy 50Hz-es megszakítást az USER ISR-ben (felhasználói megszakítás rutin)
- a rutin egy nem használt szegmenst lapoz be valahova pl. 0xc000-0xffff
- a Z80 átmásol néhány adatot erre a lapra (pl képinformáció)
- a mikrokontroler elkapja ezeket az adatokat és továbbküldi a PC-nek USB-n keresztül
- közben a Z80 olvashat is innen néhány adatot (pl. billentyűlenyomás, fájl a pc-ről, stb)
Az egyetlen kérdés az, hogy hogyan helyezzünk el egy saját rutint az USER ISR-ben? Szeretném elkerülni az extra szoftverbetöltést EP-n.
Az első gondolatom az volt, hogy a mikrokontroller egy ROM-ot is tartalmazna.
A gép újraindulásakor az EP betöltődhet innen, amely csak annyit tesz, hogy betölti az IS-Basic-et (a Cartridge-ből) ét elhelyezi a megszakítási rutint az USER ISR-ben.
Ha ez nem működne, vagy túl komplikált, akkor van egy másik ötletem:
Képtartalom küldése (EP => PC)
A mikrokontoller (és a "testvér" FPGA Chip ugyanazon a bővítőkártyán) el tud kapni minden írás/olvasás műveletet, amit a Z80 végez. Így egyszerűen tükrözzük a video memóriát egy SRAM-ban. A mikrokontroller megkeresné ebben a memóriában a sorparaméter táblát, és átmásol minden sort, majd elküldené USB-n. Ezzel megkaphatnánk az EP képernyőjét a PC-n anélkül, hogy a Z80-at külön terhelnénk.
Billentyű lenyomás küldése (PC => EP)
Őszíntén, fogalmam nincs. Az egyetlen ami eszembe jut, csak a megváltoztatott megszakítási rutin, ami megtölti az EXOS bufferét az utoljára lenyomott gombbal.
Mielőtt ezt valódi hardveren tesztelnénk, azt ajánlanám, hogy a legfrissebb EP Emulátort átalakítjuk, hogy egy külső program PIPE-on keresztül adatokat tudjon küldeni. Egyszerűen az EP busz kiterjesztő egységét emulálva (z80 halt, z80 RD, z80 WR stb).
Lehetséges volna két emulátort használni egyidőben? Azért kérdezem, mert a teszt egyszerűbb lenne, adatot venni az egyiktől és azt megmutatni a másikon.