Page 1 of 2

'PP' -- a parallel-port based I/O system for the 6502

Posted: Sun Nov 28, 2010 4:53 am
by cjb
I hope to share with everyone something that allows a 6502-based system to use a bi-directional parallel port connection to a GNU/Linux system for terminal and file I/O, and several other features.

It was primarily written for the Synertek SYM-1 belonging to the 'local hackers club', to allow fast (~8kB/sec) program transfers during development, and to also provide a pseudo-terminal channel replacement for the none-too-reliable bitbanging 6522 serial port interface. (No dropped chracters at ~1400chars/sec. :)

To explain the protocol used, lets say I wanted to sync the Dallas DS1230Y Time-keeping nonvolatile RAM used on the 6502 system here with the system clock on the GNU/Linux box. The client might send through the handshaked parallel port, via calls to the PP Put_Char and Get_Char routines:

Code: Select all

    "*t"
..and the server would reply with:

Code: Select all

    "101128142833"
The client's code might look like:

Code: Select all

  Sync_Time:
     lda #42
     jsr Put_Char
     lda #'t'
     jsr Put_Char
     jsr Delay        ;required during any change in transfer direction
     lda #80          ;enable updating the DS1230
     sta $7FF8
     jsr GetBCD
     sta $7FFF        ;year
     jsr GetBCD
     sta $7FFE        ;month
     jsr GetBCD
     sta $7FFD        ;day
     jsr GetBCD
     sta $7FFB        ;hour
     jsr GetBCD
     sta $7FFA        ;mins
     jsr GetBCD
     sta $7FF9        ;sec
     lda #0           ;online the DS1230 clock
     sta $7FF8
     rts

  Get_BCD:
     jsr Get_Char
     pha
     jsr Get_Char
     pha
     jmp Magic_BCD_Converter
(This is just something I made up on-the-fly while writing this post.. I haven't checked anything to see if it correct...)

Rather than conjure up code for the server's Time command handler, here's what's used for the '*T'ext command:

Code: Select all

    void do_talk (void)
    {
      char s[MAXFNLEN];

      get_string (s);
      printf ("* TEXT\n%s\n* EOT\n\n",s);
    }
The current release supports PP commands for downloading files, uploading files, directory listings on the server, sending talk/ debugging strings, blockmode "sector" read and writing(*), and reading and writing to a pseudo-terminal channel.

(*: a friend wrote an operating system for my 6522IDE interface that used a real harddrive; it was straight-forward to patch its I/O vectors to use PP-- the advantage being no need for a seperate power supply for the drive, and all data is stored and more accessible on the server this way.)

The server software runs on GNU/Linux systems(*), using IOCTLs for parallel-port access, so I assume it is portable across hardware platforms (maybe even USB-parallel adapters?) No bloated frameworks or obfuscation was employed-- there's just the one plainly-written C program.

(*: I had attempted to include the *BSDs, I have NetBSD on my primary workstation, but their schedulers got in the way..)

The server also provides a multiplexed 'telnet' manager for the pseudo-terminal feature: any number of users can telnet to port 2001 on the server to access the console [of the SYM-1], with all shared character I/O being converted to PPtty commands. The SYM-1 implementation includes a replacement
INTCHAR/OUTC with circular queues, so most 'well behaved' programs will now appear in the telnet sessions. I've tested it with MicroChess. :)

Hopefully you can see how this can be useful... This release includes the client software for the SYM-1 and Commodore 64/128. In future (after the around-Australia motorcycle holiday) I'm planning on a port for a recycled Z180 printer-buffer system with two parallel ports that has issues with its
serial (10MHz xtal..)

Source tarball download: http://tinyurl.com/26frgv2 (via http://kildall.apana.org.au/~cjb/sym1/index.php ) Code licenced as per the GPLv3.

Re: 'PP' -- a parallel-port based I/O system for the 6502

Posted: Mon Nov 29, 2010 10:42 am
by fachat
This looks interesting. Could it possibly be used as protocol between multiple PETs, using the user port?

André

Re: 'PP' -- a parallel-port based I/O system for the 6502

Posted: Mon Nov 29, 2010 5:11 pm
by cjb
fachat wrote:
This looks interesting. Could it possibly be used as protocol between multiple PETs, using the user port?
No, it's a point-to-point connection scheme, unless you're suggesting that one PET operate as a server for another PET client. The great-grandfather of this code was used to transfer software between a CBM64 and a diskless PET4032 back in the 1980s...

I would think MJ Mahon's NadaNet could be the basis for a 'multicasting' system... If the PC parallel port sense pins could tri-state (can they?), it might be a project to do some bus arbitration for multiple clients..

Posted: Tue Nov 30, 2010 2:48 am
by kc5tja
All modern networking links are point-to-point, which works quite well as long as you can fashion a switch. An ATmega or PIC chip (with enough pins!) should work fine for serving as a 2- or 3-port switch for this system.

Of course, you'll need to adjust your protocol to include node addresses then.

Posted: Tue Nov 30, 2010 4:38 am
by cjb
kc5tja wrote:
An ATmega or PIC chip (with enough pins!) should work fine for serving as a 2- or 3-port switch for this system.
Again, NadaNet should be cited as an example of a link layer (albeit serial) that provides multiple-client communication with just two wires and no excessive hardware requirements. For the parallel-port, there's at least two more unused sense pins available.
But this is not a thread about what I don't have any intention of doing with PP...

Posted: Wed Dec 01, 2010 7:59 am
by kc5tja
OK, you don't have to be snooty about it. Maybe you aren't interested in doing this. But, maybe Fachat is, since he asked the question about linking multiple PETs?

"Again," please consider my contribution to the thread. If it doesn't interest you, fine. Maybe it'll interest someone else.

Unsubscribing from this thread. I'm obviously unwanted here.

Posted: Wed Dec 01, 2010 11:24 am
by cjb
Get over yourself. Thread derailment in development forums is not a contribution.

Posted: Wed Dec 01, 2010 4:51 pm
by kc5tja
I did not derail the thread. I offered a single observation, saying, "Hey, if you do X, you get Y." As I said above, if this is of no interest to you, fine. But it might be an opportunity to explore for others.

'PP' -- a parallel-port based I/O system for the 6502

Posted: Wed Dec 01, 2010 10:05 pm
by BigDumbDinosaur
cjb wrote:
But this is not a thread about what I don't have any intention of doing with PP...
I think I'll interject here.

This is a forum about and for the 65xx family of microprocessors, which, as you surely must know, are used in a multitude of applications, the Synertek SYM-1 being but one example. Many of us here are into scratch-developed hardware and are always looking at various ways to transfer data between our creations and other systems. If that can be accomplished by adapting a method developed for a narrow application such as the SYM-1, excellent. If not, well, we have some fertile minds around here that can concoct a suitable interface, André Fachat being one of them. Hence André's question was completely on topic, as were kc5tja's comments.

Your accusation of "thread derailment" is out of line. If 'PP' is adaptable to something other than its original target, how is discussion to that end off-topic? This is a site about use of the 65xx MPU family, and is not system-specific. So there's no reason for others to not discuss how to adapt something to a different application than originally intended. If that sort of activity had been discouraged in the past, the 65xx would have been dead meat many years ago.

What I see here is you signed up at 6502.org on Sat Nov 26 and immediately posted about your project. Following that, you got short with other denizens of this site who expressed possible interest in adapting 'PP' to other uses. Both of these members have been here far longer than have you. How about if you extend a little courtesy toward them when they ask about your I/O system? If you can't do that, we may request that a moderator delete this topic, as (at least in my opinion) 'PP' is too narrowly defined to be of significant value to the rest of the 6502.org community.

Posted: Wed Dec 01, 2010 10:32 pm
by GARTHWILSON
It is indeed an uncomfortable situation to have to watch a topic and wonder if it's time to do something about it. We can all learn when there's some freedom to let the topic migrate or explore its way in different directions, into more applications than the OP had in mind. Even the OP benefits. I imagine that if we didn't allow this, it would be pretty dead around here, as no two members have the same set of applications. If it looks like the topic is getting totally highjacked, we start another one with a link telling where it came from so as not to have to lay the groundwork again, and add a link in the old thread telling where the new one is to discuss the new subject that came up. Such total highjacking has not happened on this topic so far, so we're ok as long as everyone can accommodate others' personalities. Some of the most active members here are extremely knowledgeable professionals whom we can all benefit from.

Posted: Wed Dec 01, 2010 11:20 pm
by BigDumbDinosaur
GARTHWILSON wrote:
We can all learn when there's some freedom to let the topic migrate or explore its way in different directions, into more applications than the OP had in mind.
You can double that in brass. In my POC topic (which has exceeded 21,000 views to date), discussion wandered around a bit and while occasionally off-topic, gave me some ideas that ended up in the "finished product" (of course, something like this is never truly finished). I'd like to think that others who have read all the posts came away with something useful or were perhaps inspired to try their hand at a scratch-built 65xx whosamawhatchit. After all, if a big dumb dinosaur can do it...

Posted: Wed Dec 01, 2010 11:33 pm
by ElEctric_EyE
BigDumbDinosaur wrote:
... try their hand at a scratch-built 65xx whosamawhatchit...
You talkin' to me?! I take insult to you calling my project a "whosamawhatchit"! I'll show you BDD!

In all seriousness though, 6502 fans are the common denominator!
There's always going to be drama.

IMHO, noone was out of hand here...

Gonna grill some brats and drink biers!

Never underestimate!

Posted: Thu Dec 02, 2010 1:33 am
by HouseHarris
You're all welcomed to wander about and suggest anything in my Symbiosys operating system thread, I definitely want more ideas posted.

Posted: Thu Dec 02, 2010 3:25 am
by BigDumbDinosaur
ElEctric_EyE wrote:
BigDumbDinosaur wrote:
... try their hand at a scratch-built 65xx whosamawhatchit...
You talkin' to me?! I take insult to you calling my project a "whosamawhatchit"! I'll show you BDD!
Well, I could call it a "contraption." :)
Quote:
Gonna grill some brats and drink biers!
Just exactly what do little kids that have been cooked over charcoal taste like? Is it anything like chicken? Do you use BBQ sauce on 'em? :twisted:

Re: 'PP' -- a parallel-port based I/O system for the 6502

Posted: Fri Dec 03, 2010 5:26 pm
by BigEd
Hi cjb, and welcome
cjb wrote:
...users can telnet to port 2001 on the server to access the console [of the SYM-1]
This is a very convenient approach - I've been using ser2net on linux to talk to a BBC micro over the serial port. The machine can do I/O redirection, and we made a small EEPROM so it booted into a redirected state.

Am I right in thinking this is a 10-wire protocol? 8 data plus 2 handshake, run in half-duplex? I didn't manage to find a description of that, although I did find this picture: Image

Anyhow, it looks good to me, and I like the mentions of paper tape too.

Cheers
Ed