Clone the git repository of...
/~https://github.com/charcole/Inform6.git
git checkout inform6b
clang -O3 *.c -o inform6b.out
Obtain 4 Z machine V3 games that are less than 120Kb. Update the roms array in combinedata.c to reference the games you are using. The first game in the array must be around 90Kb (like Zork I) as the icons are stored in this space.
cd bios
clang makefont.c -o makefont.out && ./makefont.out
clang -O3 compressicon.c -o compressicon.out && ./compressicon.out
clang -O3 combinedata.c -o combinedata.out && ./combinedata.out
inform6b.out -v3 -t -l -y bios.inf
To alter font, load zfont2.xcf in the GIMP. Alter the image as needed. Bottom row is for specifying how wide each character should be. Save image as zfont2.h. Recompile and run makefont.out.
To alter icons, create an image 100x480 in the GIMP. Make indexed using 128 colour palette. Save as icons.h. Recompile and run compressicon then combinedata. The compression ratio achieved must be better than around 60% to fit after Zork I.
I used: Icarus-0.8.1-2005Sep12
Make sure you'll built the BIOS and it's in the same directory you are going to run the Verilog simulation in.
iverilog z3.vl && ./a.out
If you want to run passed first request for input then touch.txt can be generated using TouchGenerator in the utilities. Using this a script can be provided which can be typed automatically during the simulation.
To check screen output Screen (in utilties) can be run on the output from a.out. You may have to remove this section from the z3.vl...
if (b.operNum==`OP_VAR && b.op==`OPVAR_BLIT1 && b.phase==0 && b.state==`STATE_DO_OP) begin
b.operand[1]=1;
end
Another way of checking output is to look at ram.dat. At the end it contains the scroll back buffer from the BIOS decoded and can be viewed in a text editor.
A "EP2C5 Cyclone II Mini Board" AKA "CycloneII EP2C5T144 Learning Board". These contain an EP2C5T144 which is an Cyclone II FPGA with around 4600 LEs. They are very reasonably priced on eBay (~$10).
'2.4" TFT LCD Shield' by http://mcufriend.com was used as a screen. Again very cheap off eBay (~$3). It's a colour screen with resistive touch screen.
RS Part No. | Part No. | Description | Price |
---|---|---|---|
7118029 | A29L040-70F | Parallel FLASH 4MB, 512Kx8, 3V, DIP32 | £1.24 |
7444542 | AS6C1008-55PCN | SRAM,1M,128Kx8,55ns,3V,Low Power,DIP32 | £1.65 |
6696064 | MCP3008-I/P | A/D Converter 10Bit 8-ch 2.7V SPI PDIP16 | £1.53 |
Obtain Altera Quantus II 13.0sp1. I believe this was the last version to support Cyclone II. Open project altera/ZMachine.qpf and hit compile. Nb. ZMachine.v is identical to z3.vl.
Using a Minipro TL866CS
minipro -w rom.z3 -p "A29L040 @DIP32"
inform6.out -v3 -t -l -y benchmark.inf \$MAX_STATIC_DATA=20000
Nb. This is the unpatched version of Inform 6.
You can include this in as one of the games in combinedata.c.
- Z-Ops:
High level emulator. Useful for working on the BIOS.
clang -framework SDL2 -F/Users/charlie/Library/Frameworks
-I/Users/charlie/Library/Frameworks/SDL2.framework/Headers -I../../lib -O3 -g zops.c ../../lib/cclib64.a -o zops.out
- 16BitColor:
Takes hex colours and turns them into 16 bit needed by screen eg. ./16bitcolor.out 0xffe1a2
clang 16bitcolor.c -o 16bitcolor.out
- TouchGenerator:
Takes script2.txt and generates a list of simulated touch data to type out the script. Used to automatically test the simulation.
clang touchgenerator.c -o touchgenerator.out
- MakeGradient:
Makes gradient for Mandelbrot generator easter egg. Image is from gradient.h saved from the GIMP as a header in indexed mode. Output needs pasting into bios.inf.
clang -O3 makegradient.c -o makegradient.out && ./makegradient.out
- Screen:
Takes the output from the simulator and draws the resultant screen output. Outdated now, use zops instead.
clang -framework SDL2 -F/Users/charlie/Library/Frameworks -I/Users/charlie/Library/Frameworks/SDL2.framework/Headers screen.c -o screen.out