Skip to content

Commit

Permalink
RELEASE V1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
sy2002 committed Mar 22, 2020
2 parents 5100a7d + 4cefe63 commit 083448e
Show file tree
Hide file tree
Showing 38 changed files with 5,586 additions and 132 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Expand Up @@ -14,6 +14,12 @@ assembler/qasm
assembler/qasm2rom
register_file.sym
emulator/qnice
emulator/qnice-vga
emulator/qnice.js
emulator/qnice.html
emulator/qnice.wasm
emulator/qnice.data
emulator/qnice_disk.img
*.bin
*.lis
*.out
Expand Down
20 changes: 11 additions & 9 deletions README.md
Expand Up @@ -26,11 +26,10 @@ Getting Started
---------------

If you do have FPGA hardware, then read on to learn how to get started. If
you don't, then you might want to use the emulator to experience QNICE.

Switch to the [VGA Emulator Branch](https://github.com/sy2002/QNICE-FPGA/tree/develop-vga-emu)
to use the emulator without hardware and have a look at the README.md in
that branch to learn more.
you don't, then you might want to use the emulator to experience QNICE:
[Try it online](https://qnice-fpga.com/emulator.html) or have a look at
[emulator/README.md](emulator/README.md) to learn how to build and run your
own emulator.

Get started using actual FPGA hardware:

Expand All @@ -45,7 +44,8 @@ Get started using actual FPGA hardware:
the fact, that there is an underlying git repository.)

* Hardware: Currently, we develop QNICE-FPGA on a Nexys 4 DDR development
board, so if you own one, the fastest way of getting started is to
board. Nexys updated and renamed it to Nexys A7.
So, if you own one of those, the fastest way of getting started is to
download the bitstream file `dist_kit/qnice-v141.bit` on a microSD card or
a USB stick, insert it into the Nexys board and set the jumpers to read the
FPGA configuration from the SD card or USB stick. Do not copy more than one
Expand All @@ -54,7 +54,7 @@ Get started using actual FPGA hardware:
copies, so that the Nexys board does not accidentally read the `*.bit` from
your trash instead of the recent one.

* If you do not own a Nexys 4 DDR board, then use your VHDL development
* If you do not own a Nexys 4 DDR or A7 board, then use your VHDL development
environment to synthesize QNICE-FPGA. The root file for the system
is `vhdl/env1.vhdl`. Make sure that you connect at least the IO pins
for PS2, VGA, UART and the two switches. In the file `nexys4ddr/env1.ucf`
Expand Down Expand Up @@ -303,10 +303,12 @@ Acknowledgements

* [sy2002](http://www.sy2002.de): Creator and maintainer of QNICE-FPGA:
hardware development (VHDL), FAT32 library, additional Monitor libraries and
functions, Q-TRIS, additional QNICE specific vbcc toolchain.
functions, Q-TRIS, additional QNICE specific vbcc toolchain,
VGA and WebAssembly versions of the emulator.

* [vaxman](http://www.vaxman.de): Inventor of the [QNICE ISA](http://qnice.sourceforge.net):
system architect, assembler, emulator, Monitor and Monitor libraries, tools.
system architect, assembler, original POSIX version of the emulator,
Monitor and Monitor libraries, tools.

* [Volker Barthelmann](http://www.compilers.de): vbcc compiler system,
QNICE specific vbcc backend incl. standard C library.
51 changes: 43 additions & 8 deletions TODO.txt
Expand Up @@ -102,17 +102,52 @@ ASSEMBLER STANDARD LIBs (WITHIN MONITOR):

EMULATOR:

* Emulate the VGA output and the USB keyboard (maybe using something like
LIBSDL? SFML? GLFW?). Optimally, the whole thing would by totally
dynamically loaded so that the emulator continues to run on text only
systems and on systems that don't have a multimedia library installed.
If this does not work, then we should just work with #defines within
the Emulator's code and compile two versions, like "qnice" and "qnice_vga".
* Use defines from ../dist_kit/sysdef.h instead of redefining them in qnice.c

* Test, if compilation and running works under Linux (e.g. Ubuntu)

* Test, if compilation and running works under Windows

* Emulate all VGA register commands

* WASM: Investigate if switching the WebGL context to high performance mode
makes sense; currently we run on the low performance mode on most browsers,
which means on Mac Books that the low performance GPU is used. Currently it
looks like this works absolutely well enough, but nevertheless investigating
this topic might be worth a try.
+ Reference Emscripten Changelog.md: 1.39.9 searcch for #10505
+ https://www.khronos.org/registry/webgl/specs/latest/1.0/
and search for "powerPreference"

* macOS only: Make file option for creating a installable/clickable Mac
executable (learn how to do that first and also how to sign). Maybe the
demo disk image from qnice-fpga.com should also be mounted there by default
(but still other images should be mountable, too)

* U.S. keyboard support

* Homogeneous code style like vaxmans original style
(pointers, indentation, etc.) => try to find and use a coding style
modification tool and throughly check that no bugs are introduced

* Better support for window resizing: offer some presets incl. aspect ratios
(see above) using Q> commands and maybe additionally also using ALT+<key>
combinations or a small "windowed menu" building on the speed regulator
window "system" . Optionally, as a bonus: Research menu items in SDL and
offer this via menus (seems to need very platformm specific code;
plugins/open source available?)

* Improve the Full Screen mode by allowing various aspect ratios such as
1.8:1 which is optimal for Q-TRIS, or standards like 4:3 and 16:9.

* Support High-DPI Mode (needs to be signed on Mac?)


NATIVE TOOLCHAIN: ASSEMBLER:

<currently no TODOs>
* Get rid of hardcoded gcc in the assembler/asm script for precompiling.
Use tools/detect.include. But this needs thorough testing, if for example
the precompiler invokation works the same in clang vs. gcc.


VBCC TOOLCHAIN: C COMPILER:
Expand Down Expand Up @@ -156,7 +191,7 @@ DEMOS:

* Forth Interpreter

* VGA Textmode games: Snake, Pac Man, 2048
* VGA Textmode games: BreakOut, Snake, Pac Man, 2048


DOCUMENTATION:
Expand Down
9 changes: 9 additions & 0 deletions VERSIONS.txt
@@ -1,3 +1,12 @@
Version 1.5 March, 22 2020
==============================

This version greatly enhances the capabilities and the stability of the
emulator. Detailed description: emulator/README.md

* qnice-vga: VGA screen and PS/2 keyboard emulation
* qnice-wasm: WebAssembly/WebGL version that runs in the web browser

Version 1.41 December, 30 2016
=================================

Expand Down
10 changes: 8 additions & 2 deletions doc/emumount.txt
Expand Up @@ -24,7 +24,6 @@ For macOS:
Here is an example, how you can add the folders "test_programs" and "qbin"
from the QNICE-FPGA root folder to a newly created raw image file.


1. hdiutil create -megabytes 33 -fs MS-DOS -fsargs "-F 32" -volname myimage -srcfolder qbin -srcfolder test_programs -o myimage.dmg

2. hdiutil convert myimage.dmg -format UDTO -o myimage
Expand All @@ -35,6 +34,12 @@ IMPORTANT: hdiutil is only able to create FAT32 images, when the size of the
image (the "-megabytes" parameter) is larger than 32, so we use 33 in the
above-mentioned example.

IMPORTANT: In 2016, above-mentioned step (1) worked on my then current macOS
and machine. In 2020, step (1) strangely enough led to 100% CPU usage without
any file being created. Workaround: Remove the two "-srcfolder" statements,
let hdiutil create an empty DMG and then mount it using Finder. Then manually
copy the files you need. Then unmount and proceed with step (2).

Creating a raw image file from an existing device
-------------------------------------------------

Expand All @@ -59,7 +64,7 @@ to do it on a Mac:
Mounting a raw image file
-------------------------

Use the new command like parameter -a to mount a far image file:
Use the new command line parameter -a to mount a raw image file:

./qnice -a <raw image file>

Expand Down Expand Up @@ -99,3 +104,4 @@ Example of how to do it on a Mac:


written by sy2002 in December 2016
latest update by sy2002 in February 2020
Binary file added doc/github/vgaemu.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions doc/requirements.txt
@@ -0,0 +1,7 @@
Minimum requirements to work with QNICE-FPGA:

* bash
* CC or GCC
* perl
* If you want to synthesize your own bitstream (.bit): Xilinx ISE

0 comments on commit 083448e

Please sign in to comment.