Author |
Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on January 13 2017 06:19 |
|
|
Hi All,
I thought I'd let others know that I have been working on the ES40 emulator. I have it compiling and running, non-SMP, on Windows 10 and Cygwin. I have found and fixed quite a few issues. I'm right now working through determining why a secondary processor is not fully recognized (it is seen as available, but not configured or active). I don't think it is quite ready for prime time and have not checked in my code changes (I do have a github repository for it). Also, the code is not terribly efficient, It does use calculated jumps, but also does all kinds of questionable checks. After I get the SMP working, I'll look to make the code much more efficient.
Just thought I'd let you know.
JonB |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
Bruce Claremont
Member
Posts: 623
Joined: 07.01.10 |
Posted on January 13 2017 11:32 |
|
|
Good to know. Thanks for posting. Let us know when it is ready for testing. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on March 28 2017 04:37 |
|
|
How about a quick update...
I found quite a few issues, some can be resolved, some require rearchtecture...
The current issue I'm working on is that the interrupt processing has a number of issues. The biggest is the timer interrupt processing. Currrently, the timer interrupt get set, but never cleared. This causes the interrupt processing to get into a tight loop. It checks the flags that an interrupt is pending (timer in this case) and sets the PC to the PAL interrupt processing code. The PAL interrupt processing code tries to clear the flag, but it does not get cleared. When returning from this code, the emulator attempts to execute the next instruction and checks for any interrupts. Since the interrupt flag is still set, the PC is again set to the PAL interrupt processing code. And so on. When there is just one CPU, the processing is sufficiently slow enough to still have the issue, but the loop is not so tight and allows other instructions to be processed. When there is more than one CPU, one of the CPUs, usually the primary, will execute fine, still with the loop, but the other CPUs will be in the tight loop.
The architectural issue is there are quite a few places where a component thread will access data, both read and write, in another component thread without the use of any kind of synchronization (mutex). Now this is not a huge problem because the emulated software is multiple execution thread safe, but it may cause some on expected and random issues. At some point, I'll reachitect the entire emulator (one thread should never access the data in another thread).
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on March 29 2017 03:02 |
|
|
That is very good news. However the link to firmware at the ES-40 project page is dead, so while there are some others that may want to try it, they can not.
Do you have write access to the ES-40 project to be able to post updates there?
Also one thing that is very useful to have in an emulator is a way to do paravirtualization. That is provide a way for things like VMS system services or device drivers to run code on the native platform.
Think of the advantages of ES-40 being hosted on future x86_64 VMS or even IA64/VMS. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on March 29 2017 12:18 |
|
|
Unfortunately, I don't have write/update rights on the ES40 site. I did replicate the project source and have the ES40 firmware.
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on March 29 2017 13:40 |
|
|
ES-40 firmware located.
ftp://ftp.hp.com/pub/alphaserver/firmware/current_platforms/v7.3_release/ES40_series/ |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on November 16 2017 03:07 |
|
|
Will either of your projects run OpenVMS 8.4 well enough to use it as a dedicated Infoserver box on Linux?
|
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on December 07 2017 15:47 |
|
|
Well I have stopped work on the es40 emulator. The multithread code was not protecting shared resources well enough, which caused some timing issues. My new emulator, DECaxp, will replicate a 21264 CPU as close as possible. Each CPU will have 4 integer threads, 2 FP threads, plus 3 other threads. I'm not too sure how many threads the system board emulation will require, yet. I'm also not emulating PALcode, like es40 does, some of which does not match the real PALcode.
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on December 08 2017 02:27 |
|
|
Please add paravirtulization support to it.
This is where we can device drivers and privileged code call host native modules. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on December 09 2017 00:59 |
|
|
Hi All,
It was brought to my attention that I did not have a URL to where the code is for the emulator. So here it is: https://github.com/JonathanBelanger/DECaxp. As for paravirtualization, I will look into it. I'm still implementing the actual CPU emulation (currently at Dcache and Bcache an associated code). I have all of the following near completion:
1. Icache
2. Instruction decode
3. ITB
4. Branch prediction
5. All instructions (integer and FP)
6. Integer Pipeline (4 of them)
7. FP pipeline (2 of them)
8. Dcache (I'm refactoring this at present)
9. DTB
10. System Interface (refactoring along with Dcache)
11. Bcache
12. All IPRs and CSRs
13. All initialization code (CPU only)
14. Pretty much all threading code, which includes thread-to-thread interfaces
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on December 09 2017 03:38 |
|
|
Sounds good.
Please add a libvirt API for the configuration instead of rolling your own to my wishlist.
A libvirt API will allow your emulator to be more easily deployed by standard cloud orchestration tools.
|
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
goodbyespy
Member
Posts: 19
Location: Saint Petersburs, Russia.
Joined: 17.11.17 |
Posted on February 25 2018 10:38 |
|
|
Hello Jonathan! I have compiled es40 under FreeBSD 10.3 stable. But es40 work very slowly. Can you help me with advice? |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on March 15 2018 13:31 |
|
|
I can try and get you a copy of what I have, but there are issues with threads and data handling. If you go to the other thread I started about a new alpha emulator, there are some updates.
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
goodbyespy
Member
Posts: 19
Location: Saint Petersburs, Russia.
Joined: 17.11.17 |
Posted on April 07 2018 02:51 |
|
|
Hello Jonathan! While I am waiting a new alpha emulator I would like to use es40. But source files System.cpp and System.h has "bad" symbols 97 and 92.To compile yours version es40 I have removed this symbols. How can I upload this files for you? |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
KenAllan
Member
Posts: 1
Location: London
Joined: 21.06.18 |
Posted on June 21 2018 05:23 |
|
|
Hello,
I have been interested in ES40 emulator for some time. As I made code changes, it became apparent that the random failures I was getting related to memory size. After some investigation I changed a macro definition in cpu_defs.h, here is my version:
#define DATA_PHYS(addr,flags,align) \
if ((addr) & (align)) { \
u64 a1 = (addr); \
u64 a2 = (addr) + (align); \
if ((a1 ^ a2) & ~X64(1fff)) /*page boundary crossed*/ \
{ \
state.fault_va = addr; \
state.exc_sum = ((REG_1 & 0x1f) << 8); \
state.mm_stat = (I_GETOP(ins) << 4) | ((flags & ACCESS_WRITE) ? 1 : 0); \
printf("unaligned access %d, %d -> trap! ",flags,align); \
printf("exc_sum = 0x%04" LL "x, fault_va = 0x%016" LL "x, mm_stat = 0x%03" LL "x.\n",state.exc_sum, state.fault_va, state.mm_stat); \
GO_PAL(UNALIGN); return 0; \
} \
} \
DATA_PHYS_NT(addr,flags)
I changed the mask constant from fff into 1fff, I also added the 'return 0;', I no longer get any random failures. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on August 11 2018 04:24 |
|
|
The ES40 emulator is pretty good, but I kept running into those same random errors. I also found a number of other errors. I could never get the SMP running, and I kept getting random error in the console. Also, one of the limitations in ES40 is that it replaces the PAL code with its own versions, so it will allow OpenVMS to run, but may or may not allow for any of the UNIX variants. It all depends upon the PAL code to be executed. At some point, in the distant future, I may write some code to convert the PAL/Console code into emulated code, that should run much faster.
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on August 14 2018 02:37 |
|
|
Is either the es-40 project or your new project stable enough to function as an OpenVMS system setup as an INFOSERVER? |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
JonathanBelanger
Member
Posts: 42
Joined: 09.06.16 |
Posted on August 14 2018 07:40 |
|
|
ES40 is probably the closest, but the project has been archived and does have issues (see some of the recommended changes above to make it far more stable). My emulator is not even close to being stable. It has only executed a few thousand instructions and does not yet have anything beyond the CPU that has been tested. If you are looking for something stable and supported, then I'd recommend some of the commercial versions. Some even come with freeware versions, though their functionality is artificially limited.
Sorry,
~Jon. |
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
malmberg
Moderator
Posts: 530
Joined: 15.04.08 |
Posted on August 15 2018 03:11 |
|
|
My home systems are currently two under powered to support both a Windows VM and an emulator, and freeVMS appears to be now the only commercial version available to hobbyists for free.
I have a Raspberry Pi that I would hope I can get LXD containers running that should be able to support an AXP emulator.
It would be very useful to have an Infoserver appliance for test booting various versions of VMS on both emulators and physical systems.
|
|
Author |
RE: Alpha Cygwin Emulator - es40 - |
m2-guy
Member
![User Avatar](../images/avatars/505_A_3c-m2-guy-avatar[995].jpg)
Posts: 38
Location: Provence
Joined: 19.12.07 |
Posted on January 14 2019 21:32 |
|
|
last change on https://github.com/JonathanBelanger/DECaxp was several months ago. hopefully this project is still alive |
|