Question
What do you think of this project work, and what would be the estimated mark based on the marking scheme? Thank you so much for
What do you think of this project work, and what would be the estimated mark based on the marking scheme?
Thank you so much for your time and help!
Preparation and Planning
Project Title and Scope
The problems I will address:
- Java as a language is seen as unsuited for high-performance gaming tasks. I aim to show that with the correct techniques, Java can be used as a performant language in this field.
- A dynamic re-compiler is limited to a particular architecture. I intend to write a processor agnostic re-compiler that outputs Java bytecode.
The project's scope will encompass writing the following in Java:
- An interpreter-based Sony PlayStation emulator.
- A debugger.
- A dynamic re-compiler to speed up the emulator.
Chosen Lifecycle Model
For this project, I may make design mistakes that require me to change my approach.
For this reason I chose the iterative waterfall model.
I decided by first looking at the classic waterfall model's conditions, considering whether they would apply for this project and I decided the classic waterfall model just wasn't suitable as revisiting past stages may be needed.
I also considered the star model. I have a very clear pathway defined, which doesn't fit well here. I want to place more of an emphasis on implementation than evaluation, as there is much to do and clear outcomes are defined already.
I next looked at the structured-case model. It seemed more suitable for a research project -particularly with the focus on knowledge, theoretical foundations and literature.
I almost chose the spiral model, as it was quite relevant to the risks that are inherent in this project. I decided against it however, as I have countered risks in more specific ways.
This led to the iterative waterfall model, which is simple enough for my needs, but recognises it is suitable to revisit previous tasks in order to restart progress.
Required Tasks
My tutor requested that I produce a preliminary timeline, which outlines necessary tasks and how long I will need, as there is a high level of risk in a project this complex. I can't stress enough what a good idea this was, as it reassured my tutor and myself that I could do the work.
- MIPS R3051 CPU (and debugger):
- System Control Co-processor (Cop0):
- Geometry Transformation Engine (Cop2):
- Motion Decoder (MDEC):
- CD-ROM/Memory card/Controller IO Processor and Related Controller Chips:
- Graphics Processing Unit (GPU):
- Sound Processing Unit:
- Dynamic Re-compilation Core:
The above tasks will take approximately 5 months. This allows for TMAs and illness.
Within these tasks, I imagine that analysis will take the form of reading the documentation. Design will take the form of planning a start - how I should store registers, level of pipeline accuracy, etc. Implementation is the coding itself, and evaluation in my case will take the form of testing by a few others such as my wife who is a gamer.
Addressing Risks in the Project
Identified risks are illness, of myself or family members, and the risk of failure itself. Also, data loss and hardware failure could lose my work. Encountered problems are mentioned in my reflection.
Illness
I have addressed this by building more time into the schedule. Also, my project log will allow me to pick up where I last worked if I am ill.
Failure
I have addressed this risk by structuring the project so that parts of it will still be useful, even if I can't finish all of it. Also, some of the components are can be 'stubbed/thunked' if I run out of time.
Resources and Skills Needed
The resources and skills I will need are quite well defined from the outset. I will need a development workstation, running Netbeans IDE - I have chosen to work inside this IDE as I am familiar with it from previous modules like M362, and I find alternatives like Eclipse to be overly complex.
I will also need technical information on the PlayStation itself, and the OpenGL API - this will take the form of programmer manuals and anecdotal reverse engineering.
Another important resource is a physical PlayStation - this is to that I can legally dump a BIOS image from it, rather than using a downloaded one from the Internet. These can be obtained cheaply, so this shouldn't be a problem.
Skills I need are advanced Java programming, and the ability to consume documentation and come up with a compatible software implementation of hardware components. I also need to work to deadlines, and hopefully meet them acceptably.
What will help is my ability to structure things in an object-oriented way. Whilst this project would possibly perform better in C, it would be a lot harder to structure procedurally.
I can't see any risks associated with these items that I haven't already covered.
Project Work
Selected Information Sources
To move forward with this project, I have selected multiple information sources. These contain a mixture of technical documentation, and new skills I will need. I have listed the full source information in my references section, and I will no doubt add to this list later on.
R3051 Hardware User's Manual
I selected this document because it is an exhaustive reference of the R3051 CPU core found within the PlayStation. It covers everything from pipeline stages, exception processing, binary layout and hardware interrupt handling.
Everything You Have Always Wanted to Know about the Playstation But Were Afraid to Ask
It contains detailed information specific to the PlayStation, which makes it useful for things such as RAM maps and CDROM drive command set information.
Nocash PSXSPX Playstation Specifications
I found this whilst searching for a good existing emulator that had a debugger. I found a program called NO$PSX, which had one, and stumbled across the online help, which is incredibly detailed.
Study of the techniques for emulation programming
Another document found by my tutor. It contains a general emulation overview. It will mainly be useful when it comes to thinking about my approach to dynamic recompilation, and sound processing.
OpenGL SuperBible Seventh Edition (E-Book)
I was aware of this book already, from reading around the topic. It became clear to me before the start of the project that I would need to learn some form of 3D API so I settled on OpenGL 4.5 as it is cross-platform - this fits with the ethos of platform neutrality I have embraced by using Java for the project. This book contains everything there is to know about this API.
Review and Reflection
Progress So Far, and Problems Encountered
As my tutor had the foresight to suggest a timeplan, I had something to follow and structure my work to. I started with the R3051 processor and Cop0 co-processor, and things are going as scheduled.
written back from registers to main memory. This method makes it trivial.
Exception handling:
The core is now able to handle any type of exception - the handler method I completed on the 11th February will take any exception (although none are capable of being thrown yet) and invoke the required behaviour in Cop0 and the pipeline stages. It is important to note what I mean by 'exception':
"not a Java exception, a custom object class which does not store stack traces etc."
Bus interface unit and memory:
I hit a problem here, in that my initial design was too complex. The BIU has to be controllable from other devices, as these can take the CPU off the bus and use it for direct memory access. The below log extract from the 14th February shows my frustration:
"I hit a 'dead end' with the work that I began on Friday. It quickly became apparent that I had design a component that was way too complex. I therefore started again today. The problem I had before was that I was concerning myself too much with accuracy, cycle counts and what not. In particular priorities for pending jobs was one thing I spent way too much thought on."
When I came up with a better implementation, the 'Everything You Have Always Wanted to Know...' document was helpful in determining a rough calculation of two cycles delay for a word from memory.
Debugger:
The remaining days between 22nd and now have been spent working on the debugger, which is now feature complete. I felt it important to get this done before implementing the pipeline stages, as it gives an overall state view which is useful as opposed to error-prone System.out.println() statements.
Conclusion, and next steps:
I feel that at the present time I am making good progress. The next step will be completing the R3051 core.
Skills Development
The skills I have worked on have been the consumption of technical documentation. The project so far is quite focused, and I know what 'needs doing' so no surprises have occurred yet.
I have also improved my Java skills by writing test programs.
The skill I need to develop is with the OpenGL API.
Tutor Communication and Guidance
Thus far, my tutor has been most helpful. He provided additional material for me to reference and work from, which has been useful already.
All our communication thus far has taken place via e-mail, and I have found him to be prompt and helpful.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started