Giter Site home page Giter Site logo

fixator / vector06cc Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 3.21 MB

Automatically exported from code.google.com/p/vector06cc

License: Other

Assembly 25.96% C++ 3.14% C 26.41% Makefile 0.84% Batchfile 0.05% Python 0.80% Verilog 22.66% VHDL 20.09% Mathematica 0.05%

vector06cc's Introduction

	VECTOR-06C FPGA REPLICA
	~~~~~~~~~~~~~~~~~~~~~~~

This project is an attempt to replicate Vector-06C, a Soviet-era home 
computer, in FPGA. The primary hardware platform for this project is 
Altera DE1 development board.


CONTENTS

* Features
* DE1 Thingies
* DE1 SRAM Mapping and Starter Kit Utility
* Known Problems
* Known ROMs That Have Issues
* Acknowledgements


Features
~~~~~~~~

The following features are implemented:

- CPU
- Perfect timings matching the original machine in every detail
- SRAM is used for everything
- 8253 timer 
- tape i/o (and beeper)
- all internal stuff, video modes, palette
- PS/2 keyboard
- 256K RAM disk
- DE1 JTAG interface to JTAG USB API program
- Colour composite TV signal output (PAL)


DE1 Thingies
~~~~~~~~~~~~

Enjoy the generous blinkenlights from Terasic and svofski!

It is important to have switches SW8 and SW9 in "1" position (up). This
enables proper CPU clocking. Other switches just change the blinken pattern
and only important when you're debugging.

KEY0 is master reset, somewhat like BLK+VVOD. 

KEY1 is manual clock for CPU. Useful only for hardcore debugging.

KEY3 is same as BLK+SBR: boot ROM is disabled, RST0 is executed.

If KEY3 is held pressed when KEY0 is being pressed, or when Vector-06C 
image is being programmed into FPGA, boot ROM doesn't work at all. 
This is useful if you want to preserve SRAM content.



DE1 SRAM Mapping
~~~~~~~~~~~~~~~~
DE1 SRAM is addressed by word. This is mapped linearly into bytes, so programs
can be uploaded with CII Starter Kit Control Panel software without any 
modifications. However, addresses should be minded.

Normally a .rom file goes to address 0x0100. Translated into word-address, that
becomes 0x0080. So when uploading a .rom file to Vector, enter "80" in the SRAM
page, "Sequential Write" box.

Similarly, RAM disk pages start after first 64K, which is 0x10000, or 0x8000 
in words. So, for uploading RAM disk images, use address "8000". RAM disk images
can be read Starter Kit Control Panel software and re-uploaded later or used
with an emulator as .edd files.


Known Problems
~~~~~~~~~~~~~~

1. Keyboard input gets stuck when some of the ":()*@" characters are entered.

	This is a problem with PS/2 -> Vector keyboard key/char mapping.
	I tried to make it as much PS/2 as possible. But since some characters
	shift/key combination differ, there's more than one direct mapping and
	this mapping gets stuck.
	
	Workaround: always carefully press SHIFT, then ":", then release ":", 
	then release SHIFT. If input gets stuck, unstick it by carefully 
	pressing same character again.


Known ROMs That Have Issues
~~~~~~~~~~~~~~~~~~~~~~~~~~~

None.

Acknowledgements
~~~~~~~~~~~~~~~~

This project uses work of different people. 

T80 CPU by Daniel Wallner with fixes from MikeJ of www.fpgaarcade.com is used 
for KR580WM80A. The code is modified in attempt to make this otherwise
excellent CPU cycle-compatible with i8080 and to implement STACK signal in PSW.

82C55 code by MikeJ of www.fpgaarcade.com is used without any modifications.

DE1-specific code uses, or may be based upon, samples from Altera DE1 package.

Initial 2K bootloader code by Alexander Timoshenko et al.

Special thanks to Alexander Timoshenko for documentation and general information
about Vector-06C, Dmitry Tselikov for hints and good reference emulator, Roman
Panteleev and Artem Navalon for ve27a with debugger.

$Id$

Viacheslav Slavinsky
http://sensi.org/~svo
http://sensi.org/~svo/vector06c

vector06cc's People

Contributors

svofski avatar

vector06cc's Issues

EXOLON.ROM doesn't work

EXOLON would show title screen, play music but will not accept keyboard
input for starting the game. Also, border would flicker.

Earlier versions flickered the border as well but keyboard was ok. This can
be the timing issue related to the exact moment when retrace IRQ signal is
generated. However, this moment is verified with M@COLOR demo and should be
quite precise.

Original issue reported on code.google.com by [email protected] on 17 Dec 2007 at 8:41

Implement MMC/SD DMA access

Presently the FDC CPU is wasting a lot of time doing nothing but relaying
bytes from SPI data register into the memory buffer. This operation can
easily be implemented in hardware, saving a lot of time.

Original issue reported on code.google.com by [email protected] on 17 Jan 2008 at 4:31

Keyboard: _ ` ~

Underscore can be entered by pressing Shift+Backspace, which is okay but
the awesome way to enter underscore is by pressing Shift+-

Reverse single quote can't be entered.

Tilde character can't be entered.

Original issue reported on code.google.com by [email protected] on 22 Feb 2008 at 10:30

RST7 timing and condition

The original seems to be a latch, reset by nINTE. It shall never occur when
interrupts are disabled. Timing, too.

Original issue reported on code.google.com by [email protected] on 24 Jan 2008 at 5:27

Implement floppy image file selector

Probably an OSD-style display like in Minimig. 

Fully transparent operation is not necessary, although there seems to be no
obstacles for that.

Variant 1: implement a mini-framebuffer in another SRAM page
Variant 2: implement a character display

It is possible that a character display can be squeezed entirely into M4K:

Minimal character ROM is e.g. 48 characters @ 5 pixels wide (M4K can be
organized in 5-bit wide blocks), 5 pixels high -> 48*5*5 = 1200 bits. This
is probably more economical than doing a similar thing in software.

Original issue reported on code.google.com by [email protected] on 11 Jan 2008 at 2:22

FDC: poll the card while not busy

DE1 has no SD card presence signal. In order to maintain NOTREADY bit, it
should be polled continuously. It should be relatively easy to implement in
the software part.

Original issue reported on code.google.com by [email protected] on 8 Feb 2008 at 1:17

RAM access via JTAG may interfere with CPU

Currently when SRAM is accessed by JTAG, CPU may receive completely wrong
data thus crashing the program. Bus hold should be used to suspend the CPU
during JTAG access.

Original issue reported on code.google.com by [email protected] on 17 Dec 2007 at 8:39

T80: test detects it as VM1

The code for telling VM1 from 8080, as proposed by S.E.S. in "Scaner 5":

    lxi h, 0020h
    push h
    pop psw
    push psw
    pop h
    mvi a, 20h
    ana l
    jz i8080
vm1:
    ; vm1
i8080:
    ; 8080

Original issue reported on code.google.com by [email protected] on 17 Jan 2008 at 2:09

Quartus Version Compatibility

Quartus 6.1, 7.0 produce snowy picture, weird palette.

Quartus 7.1, 7.2 work fine.

Probably palette_ram module can be investigated and different options
tried. For example, it could be converted into a single-clock
non-jtag-accessible unit.

Original issue reported on code.google.com by [email protected] on 24 Dec 2007 at 2:35

funny sounds in SKYNET

Some plucky sounds can be heard thoroughout the demo. Emulators have strange 
sounds too, but in the emulators they appear more regular.

Original issue reported on code.google.com by [email protected] on 8 Mar 2011 at 2:00

Investigate 8080/Z80 differences

There are some minor differences between 8080 from Z80 that were used to
tell one CPU from another. It is probable that T80 still has some Z80-ish
behaviour even in 8080 mode.

Original issue reported on code.google.com by [email protected] on 14 Jan 2008 at 12:08

WXEDA board question

One more question, please.

If it is possible - how to program this wxeda board to boot uploaded firmaware 
instead of the default one?
I mean - when i program it via JTAG - everything is ok until i power off the 
board. And then the default firmware starts after powering on. 

Some sources said that it is impossible, others said it is impossible to do via 
JTAG, but possible programming a flash chip on the board... But i have no ideas 
if such chip is exists on wxeda board.

Perfectly to have a possibility to load firmware from the SD card, like 
Speccy2010 does. But it's seems an initial boot process there initiated by 
microcontroller and wxeda board don't have such.

Ideas are welcome! :)

Original issue reported on code.google.com by [email protected] on 16 Aug 2014 at 5:45

WXEDA SD Card mod

SD card seems doesn't work (at least for me) on the WXEDA board.

1. I just soldered sd card adapter like described here: 
http://zx-pk.ru/showthread.php?t=8635&page=31
pin 1 to SD_DAT3
pin 2 to SD_CMD
pin 3 to GND
pin 4 to 3v3
pin 5 to SD_CLK
pin 6 to GND
pin 7 to SD_DAT
pin 8 - N/C
pin 9 - N/C
2. Added lines to code:
set_location_assignment PIN_3 -to SD_DAT3
set_location_assignment PIN_2 -to SD_CMD
set_location_assignment PIN_1 -to SD_CLK
set_location_assignment PIN_141 -to SD_DAT
3. Formatted SD card to fat16
4. Created a VECTOR06 directory with a few *.fdd files
5. When powering wxeda board, i see D5 and D2 blinking, while D4, D3 and D1 
continuous on.
When toggling "Scroll Lock" i see a message "INSERT CARD".
Navigation in the menu doesn't work (it always rolling back to DISK menu entry)

In the serial terminal i see just 
@                                                                             
    VECTOR-06C FPGA REPLICA                                                
(C)2008-14  VIACHESLAV SLAVINSKY@

;) Please help me debug SD card access. I have ability to use a logic analyzer 
to test SPI communications between FPGA and SD card. Probably my SD card is too 
slow or something like that.

Original issue reported on code.google.com by [email protected] on 16 Aug 2014 at 10:54

Black Ice demo lacks multicolor

The "TV" screen part shows black display while it's obvious that it's ought
to be colourful..

The following code:
wire [3:0] paletteram_adr = (retrace|video_palette_wren) ?
video_border_index : coloridx;
gives unjust priority to video_palette_wren for video address selection.

It appears that in the real Vector, there was no such priority and out $0c
would just program whatever colour is currently being displayed. Removing
video_palette_wren also fixes the looks of Black Ice demo.

Original issue reported on code.google.com by [email protected] on 14 Jan 2008 at 7:28

VETKA.COM spoils itself after the first use

Depending on the initial state of startup disk, it may create a new hiscore
table, or find/use existing one. Apparently, some clash in fdd emulation
causes code corruption in the game file itself. When run for the second
time, VETKA.COM would start in super-complex mode, attempt to enter
Keyboard menu will hang. 

Brief examination shows that memory area around address $2800 is zeroed,
instead of having meaningful code which can be observed if VETKA.COM runs
properly.

Original issue reported on code.google.com by [email protected] on 29 Aug 2008 at 10:06

8253 latch is broken

A timer value will always read as 0 when latched. 

Also, if timer operates in lsb-only mode, latch would want to push out 2
values anyway (although this seems to be unimportant).

Original issue reported on code.google.com by [email protected] on 15 Jan 2008 at 1:52

Error opening project branch wxeda-cycloneiv: missing dependencies

It's seems some references in the vector06cc.qsf are missing, such as:
1) set_global_assignment -name SLD_FILE 
"D:/users/svo/projects/chinese-fpga-borat/0-example_test_nios/stp_auto_stripped.
stp" (absolute reference to missing file)
2) set_global_assignment -name QIP_FILE src/wxeda/colorclock.qip (no such file 
in the repository)
3) set_global_assignment -name QIP_FILE src/video/multadd.qip (no such file in 
the repository)

Could you please fix it ?

Original issue reported on code.google.com by [email protected] on 14 Aug 2014 at 8:52

MUSICIAN.ROM - scrolling jumps

Depending on the key being pressed, screen scroll position changes.

This happens because this program does not reset the value on the port 3
after keyboard scan is complete. Allegedly, this was not entirely necessary
because the 8255 is supposed to clear its output on mode change.

See this faq on Intel site: 
http://www.intel.com/design/archives/periphrl/docs/7190.htm

Original issue reported on code.google.com by [email protected] on 29 Jan 2008 at 9:30

keyboard: implement блк+ввод & пс

The only way to press БЛК+ВВОД now is by hitting KEY0 on the dev board, 
which is slightly different fromt he original where the computer could be 
reset into ROM bootloader from the keyboard. 

F11 is a suitable key for that.

Original issue reported on code.google.com by [email protected] on 18 Dec 2007 at 9:05

SkyNet hangs during title sequence

After big words saying "PRESENTS SPECIAL FOR DEMOSFAN", before the big
banner picture must appear, the demo hangs into permanent black screen. The
CPU may be left in indefinite state, often running obscure pieces in high
memory area.

Original issue reported on code.google.com by [email protected] on 13 Jan 2008 at 1:09

Implement FDC write mode

What steps will reproduce the problem?
1.
2.
3.

What is the expected output? What do you see instead?


Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 18 Jan 2008 at 10:11

keyboard: shift+:@() etc gets stuck

If SHIFT, ":" are pressed, then SHIFT released earlier than ":", the
keyboard controller will get stuck.

It is possible to unstuck the input by carefully pressing SHIFT+: and then
releasing :, then SHIFT. Similar problem exists for some other shifted keys.

Original issue reported on code.google.com by [email protected] on 17 Dec 2007 at 8:37

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.