--
You received this message because you are subscribed to the Google Groups "RC2014-Z80" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rc2014-z80+...@googlegroups.com.
To post to this group, send email to rc201...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/rc2014-z80/5a510636-3ae2-4a1c-94fe-fe2815ac2d07%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
If I "claim" one Kb of RAM out of the 64Kb space, I need to be able to "disable" ram on other bords while addressing the videoram. And none of the RAM/ROM or Combined RAM/ROM boards are constructed to handle this. So there's an issue that I need to handle anyway.
My preference would be to recommend a default location for the dual port RAM to be something like 0xF000 to 0xF3FF, or perhaps as high as 0xF800 to 0xFBFF. My monitor uses the top of memory for workspace and stack, and I'm sure there is lots of other software that does the same. Similarly the bottom of memory has fixed uses for software, such as ROM BASIC. So both ends of memory should be avoided. However, it needs to be near one end or it breaks the continuous memory space assumed by most software. I think a strong recommendation for a default location is important for software support.
Hi Jan/All, My first post to this group. My RC2014 kit arrived some weeks back "Down Under" but it is still resting on the bench. Patiently waiting behind a couple of other unfinished projects. This post by Jan however has prompted me to come out of "lurking" mode and introduce myself. Because I've been actively thinking about this very same idea (design stage only) and happen to have all the required parts to-hand. Quickly, may I share a few of ideas. I suspect that maximum flexibility comes by building a PropTerm board similar to Marco's excellent looking PCB being discussed in another thread. https://www.tindie.com/products/maccasoft/vga-serial-terminal-for-rc2014/ (Personally I'd opt for a PS/2 keyboard interface rather than the USB one. But that's just me)
This PropTerm board would interface via the serial lines on the RC2014 bus and
also needs to steal two spare lines to do proper hardware handshaking.
BTW: There are several similar PropTerm like projects out there but for sheer
VT100/ANSI completeness this one just blew me away:-
http://www.shaels.net/index.php/propterm I'm happily using the above on a regular basis to connect to a telnet BBS from a CP/M machine.
(I have not built or tried Marco's version)
Anyway, so far nothing much new here. We just have an excellent VT100/ANSI terminal, generating VGA video with a local keyboard. So you can discard the PC and use the RC2014 solo. Now for the new ideas part... What if we arrange a method by which the Z80 is able to re-program the Propeller Chip?
For those not familiar with Propellers, when they power up after reset
they go looking for firmware to download via a serial protocol on pins 39 & 40 of the Prop chip. The protocol is well documented. If it can't find someone "talking" to it via these pins then it loads the firmware from an attached EEPROM.
So by arranging for the Z80 to be able to download new and different
firmware on-the-fly you allow the PropTerm board to boot by default as
a VT100/ANSI terminal but you could rapidly re-load the firmware with another
terminal variant such as the Lear Siegler ADM-3A.
For this to happen we need to arrange that the Z80 can reset the Propeller
and then feed the new firmware in. This could be done by bit-bashing
from the system data bus. But my current thinking is that it may be easier
to just use the master terminal serial interface connected to pins 39 & 40
and latch one of the handshake lines (CTS/RTS) onto the Propellers reset pin
by some glue logic triggered by an IO call to a particular port. Once you have a method by which the Z80 can re-load the Prop firmware on the fly then you can also load Propeller software that does other interesting things. Nothing stopping you from loading and running all sorts of stand-alone Propeller applications/games (subject to hardware constraints) but of course you can also load a video RAM graphics driver. My thought was to place the dual-port video RAM chip on a separate board. Cross connect the terminal PCB to the video RAM PCB with a top side mini-video bus. Just a short length of ribbon cable with a couple of IDC plugs. And we only need a few pins here, easily less than 16 I'd warrant. Although Jan hasn't shared his ideas yet for the Propeller side interface to the dual port RAM I'm guessing that it would be something along these lines. The Propeller chip needs to be able to pulse a binary counter which provides the address for the dual port RAM. It should also be able to reset the counter to zero. And in an ideal world it would be nice to load the counter with a particular value from the Prop video data bus. The eight bit bus between Prop chip and dual port RAM (not essential). So the Prop needs something like 8 spare pins for video RAM data, 1 for pulsing the binary counter, 1 for counter reset, 1 optional for direct counter value load and possibly another to control propeller Write into video RAM.
Yes, I know that having the Prop able to Write to video RAM as well as Read would create problems elsewhere. But if the video graphics driver is to communicate things back to the software running on the Z80 (such as Sprite collisions for example) then the obvious way to do this is via shared video RAM. We would also probably need an additional pin on the Prop for detecting RAM Write conflicts. So about ~12 to 13 Prop pins required for this side of the circuit in addition to those required for the serial terminal side.
Are there enough Prop pins available?
The Prop has 32 data pins (all data pins are equal on a Prop - meaning they can do any task). A quick count shows we need about 16 pins for the VGA video terminal side of things. So 'Yes' I think there are enough to go around. The main idea here being
for the Prop to pulse loop the counter forever reading external video RAM data 8 bits at a time into the Props internal Hub RAM (32K worth of core hub RAM inside a Prop. So at a stretch you may even be able to allocate 16K
internally for graphics RAM). With all this in place we can now load not just one video graphics driver but many different ones supporting different video modes. Since the combined terminal/video RAM board is still connected to the Z80
via the serial port it also allows for the creation of hybrid terminal applications.
Example: the original Sargon chess generates ASCII character graphics to the serial terminal but a special Sargon video driver replaces the stock terminal application and generates a high-resolution graphics for the chess board pieces. Player keyboard interaction is fed back to the Sargon software running on the Z80 by the same serial port. Jan, your using a 1K dual port RAM chip. Perhaps we could upgrade to 2Kx8?
They seem to be available in 1K, 2K and 4K. Not much difference in price that I can see between 1K and 2K but a fair jump to 4K. The 2K at 2048 bytes happily accommodates a native 80x24 line video screen with some 128 bytes left over for passing control data back and forth. But of course there is nothing to say that a video graphics driver would use video RAM in such a simple 1:1 relationship (it does keep things simple though).
The reality is that this video RAM just needs to form a high speed
communications medium between the Z80 and Propeller. For just one "creative"
example of using very limited video RAM to generate resolutions higher
than one would expect just have a look at the Sinclair ZX80/81 encoding scheme.
Anyway, what was supposed to be a short post with a couple of ideas has now got out of hand
and I've waffled on for far too long. So greetings to all and happy hacking!
I've leave you with a link to a demo program showing off the Propeller capabilities
both sound and video, from 2009 I think.
https://www.youtube.com/watch?v=6gEMKYnUADE
Steve
No need for this as there is already a serial connection, it just needs
a protocol to safely upload the new firmware.
That protocol could be
XMODEM as it doesn't require flow control, has CRC error check and
transmission can be "paused" the time needed to write the block
Have you seen my other video card ?
https://github.com/maccasoft/propeller-graphics-card
That's specific for games and graphics, and already implements the
firmware update protocol that can not only write to the EEPROM but also
write to RAM only so applications can temporarily upload the firmware
they need and then reset back to the default.
Looks great, truly. But it has no serial connection. So you still end up with two cards. One for traditional CP/M serial terminalcommunications and another for doing graphics.