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

Programming the 6502 microprocessor and its relatives in assembly and other languages.
cjb
Posts: 46
Joined: 26 Nov 2010
Location: NSW, Australia
Contact:

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

Post 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.
fachat
Posts: 1124
Joined: 05 Jul 2005
Location: near Heidelberg, Germany
Contact:

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

Post by fachat »

This looks interesting. Could it possibly be used as protocol between multiple PETs, using the user port?

André
cjb
Posts: 46
Joined: 26 Nov 2010
Location: NSW, Australia
Contact:

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

Post 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..
kc5tja
Posts: 1706
Joined: 04 Jan 2003

Post 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.
cjb
Posts: 46
Joined: 26 Nov 2010
Location: NSW, Australia
Contact:

Post 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...
kc5tja
Posts: 1706
Joined: 04 Jan 2003

Post 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.
cjb
Posts: 46
Joined: 26 Nov 2010
Location: NSW, Australia
Contact:

Post by cjb »

Get over yourself. Thread derailment in development forums is not a contribution.
kc5tja
Posts: 1706
Joined: 04 Jan 2003

Post 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.
User avatar
BigDumbDinosaur
Posts: 9427
Joined: 28 May 2009
Location: Midwestern USA (JB Pritzker’s dystopia)
Contact:

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

Post 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.
x86?  We ain't got no x86.  We don't NEED no stinking x86!
User avatar
GARTHWILSON
Forum Moderator
Posts: 8773
Joined: 30 Aug 2002
Location: Southern California
Contact:

Post 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.
User avatar
BigDumbDinosaur
Posts: 9427
Joined: 28 May 2009
Location: Midwestern USA (JB Pritzker’s dystopia)
Contact:

Post 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...
x86?  We ain't got no x86.  We don't NEED no stinking x86!
ElEctric_EyE
Posts: 3260
Joined: 02 Mar 2009
Location: OH, USA

Post 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!
HouseHarris
Posts: 48
Joined: 28 Nov 2010
Location: Newcastle Australia

Post by HouseHarris »

You're all welcomed to wander about and suggest anything in my Symbiosys operating system thread, I definitely want more ideas posted.
User avatar
BigDumbDinosaur
Posts: 9427
Joined: 28 May 2009
Location: Midwestern USA (JB Pritzker’s dystopia)
Contact:

Post 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:
x86?  We ain't got no x86.  We don't NEED no stinking x86!
User avatar
BigEd
Posts: 11464
Joined: 11 Dec 2008
Location: England
Contact:

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

Post 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
Post Reply