The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: usotsuki@buric.co (Steve Nickolas)
Subject: [TUHS] Happy birthday, PDP-8!
Date: Mon, 27 Mar 2017 19:33:35 -0400 (EDT)	[thread overview]
Message-ID: <alpine.BSF.2.02.1703271932540.44054@frieza.hoshinet.org> (raw)
In-Reply-To: <0df17a82-af22-69b3-912e-88f3a4d51169@update.uu.se>

On Tue, 28 Mar 2017, Johnny Billquist wrote:

> Essentially, you pass parameters in memory, as a part of the code stream. 
> Also, the PDP-8 certainly do have index registers.
>
> The first thing one must do is stop thinking of the AC as a register. The 
> accumulator is the accumulator. Memory is registers.
>
> Some memory locations autoincrement when used indirectly, they are called 
> index registers.
>
> That said, then. A simple example of a routine passing two parameters (well, 
> three):
>
> First the calling:
>
>        CLA
>        TAD   (42        / Setup AC with the value 42.
>        JMS   COUNT
>        BUFPTR
>        BUFSIZ
>        .                / Next instruction executed, with AC holding number 
> of matching words in buffer.
>        .
>
> Now, this routine is expected to count the number of occurances of a specific 
> word in a memory buffer with a specific size.
> At calling, AC will contain the word to search for, while the address 
> following the JMS holds the address, and the following address holds the 
> size.
>
> The routine:
>
> COUNT,  0
>        CIA
>        DCA    CHR        / Save the negative of the word to search for.
>        CMA
>        TAD I  COUNT
>        DCA    PTR        / Setup pointer to the address before the buffer.
>        ISZ    COUNT      / Point to next argument.
>        TAD I  COUNT
>        CIA
>        DCA    CNT        / Save negative value of size.
>        DCA    RESULT     / Clear out result counter.
> LOOP,   TAD I  PTR        / Get next word in buffer.
>        TAD    CHR        / Compare to searched for word.
>        SNA               / Skip if they are not equal.
>        ISZ    RESULT     / Equal. Increment result counter.
>        ISZ    CNT        / Increment loop counter.
>        JMP    LOOP       / Repeat unless end of buffer.
>        CLA               / All done. Get result.
>        TAD    RESULT
>        JMP I  COUNT      / Done.
>
> PTR=10
> CNT=20
> CHR=21
> RESULT=22
>
>
> Addresses 10-17 are the index registers, so the TAD I PTR instruction will 
> autoincrement the pointer everytime, and the increment happens before the 
> defer, which is why the initial value should be one less than the buffer 
> pointer.
>
> Hopefully this gives enough of an idea, but unless you know the PDP-8 well, 
> you might be a little confused by the mnemonics.
>
> As you can see, the return address at the start is used for more than just 
> doing a return. It's also your argument pointer.
>
>  Johnny
>
>

Actually, that reminds me of ProDOS-8 on the Apple ][, which uses a 
similar mechanism to pass parameters.

-uso.


  reply	other threads:[~2017-03-27 23:33 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.1.1490580001.4973.tuhs@minnie.tuhs.org>
2017-03-27 23:30 ` Johnny Billquist
2017-03-27 23:33   ` Steve Nickolas [this message]
2017-03-27 23:49     ` Johnny Billquist
2018-03-21 21:52 Dave Horsfall
2018-03-21 21:59 ` George Michaelson
     [not found] <mailman.659.1490686648.3779.tuhs@minnie.tuhs.org>
2017-03-28 22:10 ` Johnny Billquist
  -- strict thread matches above, loose matches on Subject: below --
2017-03-28  2:38 Noel Chiappa
2017-03-27  1:24 Noel Chiappa
2017-03-27 14:07 ` Arthur Krewat
2017-03-27  0:31 Noel Chiappa
2017-03-27  0:37 ` Arthur Krewat
2017-03-27 12:05 ` Tim Bradshaw
2017-03-27 13:35   ` Tony Finch
2017-03-27 21:37   ` Terry Smith
2017-03-21 23:57 Atindra Chaturvedi
2017-03-21 21:34 Dave Horsfall
2017-03-22 16:34 ` Ron Natalie
2017-03-26 19:49   ` Dave Horsfall
2017-03-26 20:11     ` Paul Winalski
2017-03-26 22:20       ` Greg 'groggy' Lehey
2017-03-26 22:25     ` Greg 'groggy' Lehey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.BSF.2.02.1703271932540.44054@frieza.hoshinet.org \
    --to=usotsuki@buric.co \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).