Sunday, January 27, 2019

A 6809 Single Board Computer


As well as the 6502, 6800, and 68000 chips, another CPU I used early in my career was the Motorola 6809, the more powerful successor to the 6800. Having completed some retrocomputing projects with the other chips, I start looking for a project where I could play with this CPU for nostalgia purposes.

I soon came across a Single Board Computer design by Grant Searle. A five or six chip design, it has serial i/o and can run a version of Microsoft BASIC that he adapted from the version in the Radio Shack Color Computer.

The basic specs are a 6809 processor running at just under 2 MHz, 32K of static RAM, 16K of EPROM, and a 6850 ACIA-based serial port.

The design is simple, potentially buildable on a breadboard, and had been reproduced by other people, so I decided to give it a try.

I entered my own schematic using the EasyEDA web-based CAD software. This would make it easier to make design changes and potentially a printed circuit board (PCB).

I made a few small changes in my version of the board:

  • Used a 6-pin connector for a standard FTDI USB to serial breakout board and omitted any RS-232 line driver/receiver circuitry. I also omitted the optional hardware handshaking circuit.
  • Added a simple power on reset circuit to the pushbutton reset.
  • Added a power on LED.
  • Provided a jumper to select USB or external power source.
  • Added a 32-pin header with access to most signals, for future expansion and to help with debug.

The system can plug into a computer's USB port where it shows up as a serial port. It is powered by USB (taking about 230 mA of current) and you communicate with it using a terminal emulator.

The provided BASIC is a port of Microsoft Extended BASIC for the 6809-based Radio Shack Color Computer. A disassembly of it was published in two books. In Grant Searle's port, all code and commands that were not applicable (e.g. graphics, sound, cassette tape i/o) were removed. It is just under 10KB in size. Pretty typical of Microsoft BASIC of the era, it has a few quirks, e.g. available memory i available from the variable MEM rather than a function FRE(). Extended Color Computer BASIC has some additional commands that are useful like RENUMber, additional math functions, PRINT USING, TRON/TROFF and even EDIT to support editing program lines. Apparently this was the last version of Microsoft BASIC that Bill Gates personally worked on. You can find online copies of books on the Colour Computer and its version of BASIC.

I took the BASIC firmware and got it to build under Linux using the as09 cross-assembler with no warnings. I found and fixed a small typo that might have affected the PRINT USING command.

I breadboarded the CPU, clock, and reset circuit on a solderless breadboard. Then I got the 6809 to free run by forcing all the data lines all low. I decided not to breadboard the entire circuit as it would be quite tedious to do so, wouldn't fit on my small breadboard, and the design looked stable and had been verified by others, so I opted to move directly to a PCB layout.

I made a PCB layout from EasyEDA (using the autorouter). Once it looked good, I ordered some PCBs from JLPCB, a partner of EasyEDA which offers PCBS for as little as $2 per board.

There are high quality double-sided boards with plated-through holes, silkscreened, solder masked and even electrically tested. They are built in about one day and arrive in about 5 business days. With the availability of suppliers like this, it really doesn't make sense to etch your own boards at home.


I had found and orders the remaining parts I needed on Ebay. Some, like the Motorola 68B50 and 68B09, are readily available as new old stock (NOS).


I programmed the firmware onto a 27C128 EPROM using my UV eraser and programmer.


Once the boards arrived, I build one up, starting with the power, then clock and reset circuits. Everything checked out and before long BASIC was up and running!

I read some books on Color Computer BASIC to review the commands, played with the commands and tested some old programs. Here is an example, a little horoscope program I wrote in BASIC some time again, which ran with some minor changes:

           YOUR HOROSCOPE
           --------------

THE PROGRAM GENERATES A PERSONAL
HOROSCOPE. I NEED SOME INFORMATION
ABOUT YOUR DATE AND LOCATION OF BIRTH.
I WILL THEN GENERATE AN ANALYSIS BASED
ON YOUR ASTROLOGICAL DATA.

WHAT IS YOUR FIRST NAME? Fred
YOUR YEAR OF BIRTH (E.G. 1980)? 1980
YOUR MONTH OF BIRTH (1=JAN)? 6
DAY OF THE MONTH (1-31)? 21
COUNTRY OF BIRTH? Canada
IN WHAT CITY? Ottawa
CALCULATING HOROSCOPE...PLEASE WAIT.

Fred, YOUR ASTROLOGICAL SIGN IS:
CANCER.

HERE IS MY ANALYSIS:

AT TIMES YOU ARE EXTROVERTED, AFFABLE,
SOCIABLE, WHILE AT OTHER TIMES YOU ARE
INTROVERTED, WARY, RESERVED.

YOU WORRY ABOUT YOUR HEALTH AS YOU GET
OLDER.

YOU ARE CONCERNED ABOUT THE HEALTH OF
AN AGING RELATIVE.

GENERATE ANOTHER HOROSCOPE (Y/N)? 

Looking for machine language monitors, I found source code for the ASSIST09 program that Motorola offers for their 6809-based development ports. I got it to cross-assemble under Linux, and modified it to work with the 6850 ACIA instead of what the Motorola hardware used. With a little debugging, I got it running. It works well, and provides most feature you want for development and debug, including memory display and change, register display and change, running and breakpoints, and generating and loading Motorola S record files. here is a sample session:

ASSIST09
>D 1000 20

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
1000 45 41 4C 49 53 54 49 43 2E 22 20 3A 20 90 00 10  EALISTIC." : ...
1010 56 2F 26 87 20 22 54 48 45 20 42 49 52 54 48 44  V/&. "THE BIRTHD
>R
PC-F842 A-00 B-00 X-20FE Y-F002 U-60C2 S-6051 CC-F4 DP-00 
PC-
>M 1000
45-55
>P 1000 100F
S13100055414C49535449432E22203A2090001014
S9030000FC
>

I am able to cross-assemble code on a Linux computer and then load the S record file onto the board via the serial port. This is much more efficient than erasing and burning EPROMs.


Note that for uploading you need to add delays due to no hardware handshaking. I use the ascii-xfr program on Linux to do this, as well as the minicom terminal emulator.

I wrote a couple of example programs that run with the ASSIST09 monitor, using it's SWI functions for i/o.

Next, I combined BASIC and ASSIST09 into one EPPROM. It comes up in ASSIST09 but you can get to BASIC using the "G D000" command. This offers the ability to play with BASIC or machine language without swapping EPROMs.

ASSIST09
>G D000
6809 EXTENDED BASIC
(C) 1982 BY MICROSOFT

OK
10 FOR I = 1 TO 10
20 PRINT I,
30 NEXT I
RUN
 1               2               3               4               5
 6               7               8               9               10
OK

I have built up a second board and am just waiting to receive a second 68B09 chip to complete it. I have a few programming projects in mind to work on, and some code (like a small C compiler) that I want to look at.

If you want to give this a design a try, I encourage you to do so. Feel free to use my PCB design files if you wish, or just breadboard it up.

References


  1. Grant's 6-chip 6809 Computer: http://searle.hostei.com/grant/6809/Simple6809.html
  2. My git code with firmware and other software: https://github.com/jefftranter/6809/tree/master/sbc
  3. EasyEDA project: https://easyeda.com/tranter/6809-Single-Board-Computer
  4. AS9 assembler: http://home.hccnet.nl/a.w.m.van.der.horst/m6809.html

54 comments:

John Gay said...

Nice to see you back on the SBC's again.
First found your blog searching for a 68000 SBC and really like yours.
just been lurking to see if you ever revisit that one for the improvements you mentioned.
In the mean time, I've been playing with a few different Z-80 SBC's.

Steve said...

As an old COCO user, this is really interesting to me.. Also, based on, and inspired by this video: https://youtu.be/LnzuMJLZRdU of Ben Eater creating a breadboarded 6502 computer, I had been considering building something like what you have built. One thing I'd LOVE to be able to do though is single step the clock. On Ben's 6502, he details that only certain manufacturers of 6502 variants have the ability to let the clock speed reduce to zero in order to support single stepping the clock. Are you aware of any similar abilities (or a different way to control in hardware) to single-step a 6809 or any variant? I think it is a really cool teaching tool to be able to do this. Thanks, and great work on your board - I think I'll look for it on EBAY regardless of the single stepping.. Even if I do end up trying to breadboard my own, yours will certainly jumpstart my 30+ year old memory of 6809 assembly!!!

Paul Hill said...

I made one! Many thanks for the PCB design Jeff. I had 5 boards fabricated at JLCPCB and received them this week. Soldering was a breeze. The only negative thing I can say is some of the pads are on the small side, but it worked first time.

I've been trying (and failing) to build Grant's 6809 breadboard design for ages.

I didn't have any resistor networks in stock, hence the crude homemade one :-)
https://c0dedbad.co.uk/6809.jpg

Dale said...

To Steve: The MC6809 uses dynamic RAM internally, so it can only be paused for a measly 16 uS. Brad Rodriguez did an interesting series on his ScroungeMaster multi-6809 machine in The Computer Journal in 1993-1994. He talks about getting bit by this. See https://www.bradrodriguez.com/papers/ (Multiprocessing for the Impoverished). But the Hitachi 6309 is CMOS, and faster, and is a fully static design. So you might be able to singe step it.

Steve said...

@Dale - Thanks... That is interesting.. I've never had a 6309.. I think it's worth a shot.. I think I'll get one and try to breadboard something up. Thanks!!
FYI - If I figure something out for sure, I'll report it back, but it likely wont be until after Christmas at this point..

Dale said...

Watch out for the MC6809 vs MC6809E (and HD6809 vs HD6809E). The 'E' means External clock. Either one is fine, it just depends on how you want to clock it. The plain one uses a crystal connected directly to the CPU, and the 'E' model requires an external clock signal. Years ago I found some HD6809E, but not the plain ones, so they required an external oscillator.

Steve said...

Dale - I thought of that too... and I've ordered 3 separate CPUs from 2 different people on EBAY.. I think they're all the "E" variant, which is what makes sense to me, because I want to try to single step.. It seems if I build a debouncer circuit then I should be able to feed right into the external clock.. One thing I just thought of though is how to deal with the 2 clocks out of phase (I think I need to generate both?) so maybe one "single step" will be to generate the pulse on one, and then shortly after, the pulse on the other one.

Oh well.. worst case, I'll either give up on the single step aspect of this project and just build a really slow clock, and/or these CPUs will live out their lives as COCO upgrades which I also can use!!

Thanks for your help!

obakasan said...

Steve, The HD63B09 data sheet shows timing for single-stepping the CPU using the #HALT line in Figure 5.

Steve said...

Ahh.. very cool.. I'll have to check that out! Thanks!!

Jack said...
This comment has been removed by the author.
Jack said...

By end of Feb I should have a 6809 Single Board Computer built. I have or order all the parts. The first of the month I will be ordering 10 PCB boards. I will be building 2 Single Board Computer 1 will be a 68B09 and the other will be a 63C09 just to see if this one will work. Later I will building Monitor and keyboard controllers from here http://www.searle.wales/ . Then later I will be doing some more addon.

I will try using Rom Pak threw the EXPANSION HEADER.

Jack said...

I want to try or want to use rom cartridges threw the expansion header but there is no CART/. I like to know how to add it? Anyone have any idea?

Steve said...

@Jack: I have nothing to do with this project, so my response is probably missing the boat here, but based on your comment, and looking for the /cart signal, I am assuming you're trying to simulate how the color computer used to detect cartridges and auto-run the code? If so, that was done by the internal rom, which looked for the cart signal being shorted to ground ( I believe it was read through a PIA) so to do that, the internal ROM would have to detect that closure through some kind of addressable buffer, and that bit would have to be exposed on the expansion header. In otherwords, I dont think as built, you could do the same thing, but I could be totally wrong.. I haven't yet begun my build, so I'm not familiar with the intimate details.

Jack said...

I order the PCB Board on Feb 1 to get the best deal I order 15 Boards.

Uwe said...

I have just posted the gerber from the git repository to JLCPCB for production. Reexamining the layout I found that I have to resize the Gerber View to fit the required size. Using the JLCPCB online viewer for that purpose makes it very difficult difficult to fit the correct size. Has someone a solution for that?

Paul Hill said...

I didn't have any issues with JLCPCB.

This is my board: https://c0dedbad.co.uk/6809.jpg

Steve said...

Paul: I like your "Jumper" :-)

Paul Hill said...

How do you like my resistor array :-)

Steve said...

I was looking at that.. For a second I was thinking it's a little messy, but then I thought more about it and realized that if I did it, there's no way I'd ever get it that good! :-) I started thinking about how I could bend the leads this way and that, and decided in the end, I'd end up with a much worse pile of solder!

I can't throw stones from this glass house!! If it works, it's great!

Uwe said...

@Paul:Zooming isn't smoothly to achieve. Tried on MAC OSX and Linux with firefox and safari. Zooming always results in a jumping growth of the view.

Uwe said...

Does someone has the original production gerber available? If possible, please send to u.schmeling@online.de. Thanks in advance.

Uwe said...

Today I received the PCBs and they were correctly sized. Misunderstanding from my side, sorry about the useless posts.

Unknown said...

@Jeff
I ordered today 10 PCBs. Thanks for the PCB design.
@All
I do not have the possibility to burn eproms.
Can anyone please sell me a programmed 27256 and send it to me?
I live in Belgium

Unknown said...

Or a smaller eprom. Just with the basic and the monitor.
I wrote 27256 because that's the one on Paul Hills picture.
BTW, it is not "Unknown, it's Ardandro.

Paul Hill said...

I used a 27256 because that's what I have. An EPROM programmer is not too expensive (€50?). My EPROMs were cheap from AliExpress in China. Not sure what shipping is like during the pandemic.

Unknown said...

It took a while for the prom programmer to arrive, but it finally came here.
The board works as a charm ! Nice piece of work Jeff !
@Paul
First I ordered the TL866 II plus programmer from AliExpress in China.
They posted it from Spain. But it never arrived.
Then I tried Amazon. And it was here in a couple of days.

Alfa66 said...

I am having some issues with loading the combined.hex or combined.s19 with the G540 "genius" programmer.
In the past I used it successfully loading pure hex file (no headers).
Any advice?

Unknown said...

I you give your e-mail address I could send you the pure hex file, it starts with "7E C0 49 8D 03 27 FC 39 B6 A0 00 ...." Or I could send it to Jeff so he can put it on his git pages.

Ardandro

Alfa66 said...

Thank you so much for the offer, Ardandro!
I was able to solve the issue with the Genius programmer.
I used the TL866II SW to produce a binary file, this is the only format that works with the Genius SW on Windows 10. So I was able to program my flash.
I ended up buying a TL866II plus so I don't have to worry about it anymore :)


I built the board, it powers up and all.
I programmed the combined.hex in my flash (my flash is twice the size of the 27C127, so I copied the .hex also from 4000 and 7FFF).

I use both Putty and Tera Term to try and connect, but i see only garbled characters: is there a particular setup for the serial terminal that I need to use?
What is the baud rate I am supposed to use? What is the parity?

If it is just supposed to work without any additional tweeks, then I need to look elsewhere...

Thank you so much,
Ale

Paul Hill said...

115200. No handshaking. No parity.

Unknown said...

to Ale and to all:
How do you manage to get the binary files into the eprom programmer? Some 30-35 years ago, a colleague wrote for me a "from s-format" and a "to s-format" program. I can't use these programs in windows, but they do work fine in the vdos environment (www.vdos.info). The "from s-format" program gives me a nice real hex file: "7E C0 49 8D 03 27 FC ...." and that one, I can copy in the TI866 plus programmer. Do you have a quicker or better method?

Thanks,
Ardandro

Steve said...

I assume the format you're converting to/from is the raw binary image that would be on the EPROM? If a more modern "to / from s-format" program does not exist yet, that should be easy to implement in powershell or python, either of which then could run on modern windows, and also linux (powershell is ported to linux).. I dont (yet) have one of these SBCs, but have been watching with hopes of building one some day, so if nobody has a better and immediately available solution, I can put something together and post it somewhere..

Alfa66 said...

Thank you Paul.
I don't have a 68B09, I have a few 6809 (1Mhz version) so I need to work with a lower speed. At 1Mhz the 68B50 should still work, but my understanding is that it would communicate at half the speed (56700).
Assuming the above is correct, I think my mistake was to use a 4Mhz crystal instead of the 3.6Mhz: the difference may explain the inability to synchronize correctly.
Is my reasoning (and thus troubleshooting conclusion) correct?

Hi Ardrandro and Steve,
what I did was to use the 866 SW on windows 10.
This software works very well to load both BIN and HEX (Intel) formats. Unfortunately this SW does not work to load S19 (you can check this out http://srecord.sourceforge.net/man/man1/srec_cat.html and see what that can do for you).
So I used the 866 SW to read the HEX (Intel) of combined.hex .
Since my EEPROM is 32K, I loaded first combined.hex starting at 0C000 (from File Address Start Address).
Then I chose to disable the option to clear the buffer while loading.
At this point, I loaded again the combined.hex starting at 0C00 (from File Address Start Address) but I chose 0400 for "To Buffer Start Address".
Then I saved the buffer as a *bin file.
I took the *bin file and used the Genius G540 Programmer to program my flash.
The problem with the SW for the G540 programmer does not work well for Windows 10: the SW gives options to load HEX (Intel), HEX (Motorola) and S19 in addition to BIN. However, only BIN works.
Unlike the G540 SW, the 866 SW does not require the programmer to be present on the USB port.
Hope this helps.

Thank you all for contributing to this!

Paul Hill said...

Hi Alfa66. What exact version 6809 do you have? I think a 6809EP will not work.

I'm seeing 68B09's on AliExpress and UK eBay fairly cheap.

You might want to check Grant Searle's website for more info as this is based on his work.
http://www.searle.wales/

My EPROM software supports 8 different formats. It doesn't look modern but works fine on Windows 10.

Alfa66 said...
This comment has been removed by the author.
Alfa66 said...

Thank you, Paul!
It is a 6809P, the E version would not even come alive without proper clocking I think.
I ordered a few 68B09 from ebay, so I have to be patient :)
In the meantime, I will take a look at Grant's documentation - thank you for suggesting this.

What is the EPROM SW that you use?

Paul Hill said...

Just the sw my EPROM programmer came with. USBPrg. GQ4x4 is the programmer

Alfa66 said...

Hi,
I just wanted to confirm that my issue was the 4.0Mhz crystal.

To communicate with the outside world the 68B50 needs a 3.6864Mhz crystal (and 24pF capacitors, instead of 18pF for the 7.3Mhz crystal) to generate the correct baud rate.
In this case, the serial port max speed is 57600.

Since this is not written anywhere, we can encourage hobbyists to use regular 6809P and 6850.
The values for the clock generator circuits are: 3.6864Mhz crystal and 2 x 24PF caps.

Hope this helps others.
Cheers.

Nick B. said...

Thanks for tidying up Grant's design with a PCB, I've ordered mine to build one. in the meantime I put one together on breadboard using Hitachi 63B09, 63B50 and 74HC00. Seems to work nicely with the combined ROM image. It would be nice to have the ability to alter the terminal baud rate, I will probably build my own ROM that runs at 9600 as some of my older hardware won't do 115,200!

Paul Hill said...

I could be wrong here but I think 115200 baud is a limit due to the 7.3728MHz crystal used to clock both the CPU & MAX232. i.e. 7372800 / 115200 = 64 and also 7.3728MHz / 4 = 1.8432MHz.

Not sure you can change the baud rate in s/w.

Steve said...

I was looking at this yesterday after the other post.

I looked up the datasheets on the 6809 and the 6850, and it says that the "E" clock output is 1/4 the clock input, which means the "E" clock is 1843200hz.

The 6850 datasheet says it's baud can run as clock divided by 1, 16, or 64. 1843200/16 is 115,200, which means the firmware is currently setting the 6850 to /16 mode.

This means that someone could change that firmware to /64 mode and give a resulting speed of 28,800 (115200/4) which might be useful to the some, and that seems to be the only other possible baud without hardware modification.

I was also thinking it might be a fun experiment to build a daughterboard that the 6850 could sit in, which would divide the incoming "E" by some jumper settable value, including /12 which would give the desired 9600 baud with the existing firmware. I dont know what other timing nightmares I'd be opening up by doing that, but it might be a cool experiment that would potentially work with the board as it exists now.

Does that make sense? Did I do all my maths right?! :-)

Nick B. said...

@Paul - I spent some time reading the 6850 datasheet and I couldn't find a register where I could set this.
@Steve - I'll measure the clock frequency at the E pin. I came to the same conclusion, it needs something to divide by 12 (or more). 74HC92 maybe?

Steve said...

@Nick B: In the motorola data sheet, under "Definition of ACIA register contents" look at control register bits 0 and 1. They are labeled "Counter divide select 1 and 2". It's the same register that controls the bit length and flow control.
On the next page, it shows the meaning of the 4 values. 00= /1, 01= /16, 10=/64 and 11 is master reset. I suspect somewhere in the binary of the firmware, there's a write in the initialization that just saves a byte there.. Add "2" to the value written, and I bet the baud goes down to 28800.

As for the divider, yeah.. I hadn't heard of 7492 before, and was trying to work something out with multiple 7474 flip flops used as dividers, but your suggestion seems easier! You could add jumpers to either pass the original clock (115200) or clock from pin 12 (divide/2 for 57600), or pin 8 for divide by 12 giving 9600. You'd also have to separate the "E" input and still feed the original clock into pin 14 of the 6850 because you only want the slower clock on pins 3 and 4 (Tx/Rx clock). Currently "E" coming from the CPU is bridged onto each of those 3 pins. I wish I was better at EasyEDA.. maybe I'll use this as a reason to force myself to learn it! There should be room on the board for one more chip and 3 pairs of jumpers!

Steve said...

Reading the datasheet from the 74ls92, I see "State changes of the Q outputs do not occur simultaneously because of internal ripple delays, therefore decoded output signals are subject to decoding spikes and should not be used for clocks or strobes" I was concerned about this in my own flip flop design - The gate delays internally could cause glitches. I'm not an electrical engineer, and I didn't stay at a holiday inn express last night, so I have no idea if this would be a problem at the speeds we're talking about. I am guessing it will work, but maybe someone else here knows how to fix/prevent this? Maybe a large resistor and small capacitor from the clock to 5v to absorb any glitch? Anyway.. seems like a fun reason to try to learn EasyEDA.. Maybe I'll give it a shot if nobody more qualified steps up?

Nick B. said...

@Steve -Thanks! I must go back and read that datasheet again (and your previous reply!) although dividing by 64 would give 7200 baud which is no use. In the meantime, I set up a 74LS90 to divide by 6 with the 1.84MHz input from E and fed the output to TX and RX clocks. It now works at 19200. Likewise, I don't have any experience with EasyEDA, it's all been done so far on breadboard with an old Tek scope to debug.

Steve said...

It's awesome you got that working.. The "easy" thing to do then would be to build a little protoboard with a socket on the bottom, and one on the top, where you could piggyback the UART on the board, and then wire your divider on the protoboard and make it work in the original board design.

I think I was able to get EasyEDA to let me add the appropriate components, but in doing so, it made me TOTALLY start over on the really nice board layout of the original. I didn't have the patience to do more than to click "Autoroute" and it SAYS it worked, but I'm skeptical. If it isn't too much money I may just order a board for kicks to see if it works

Craig Iannello said...

Hi! I'm trying to run extbasrom on a HD63C09P. Instead of having a real ROM, RAM, clock, or serial chip, I have an arduino (mega2560) trying to provide all of those functions so I can log and control what's happening. I am clocking the 6309 very slowly to facilitate this.

I have extbasrom in the arduino and present bytes of it to the CPU whenever she wants to read addresses in [$DB00....$ffff]. I don't understand what's happening here as it seems to want to write to addresses in the $8000 range, but I thought RAM was from $0000 to $7fff?

Here is my log output. Do you think you could take a look at it and maybe point out whether it makes sense or not? Thank you!

// notes:
// flags field layout: bit5: E, bit4: Q, bit3: BA, bit2: R//W, bit1: BUSY, bit0:/RST
//
// Whenever E goes high:
// The address and flags are latched.
// If RD//WR is high at this time, we put data on databus from requested address and
// output a text line beginning with 'CLK' count.
//
// If RD//WR is instead low when E goes high, we dont output a line yet. We instead wait
// for Q to go low, latch data from databus, and if address is in RAM, write the data
// to that address.
//
CLK 0000 ADRS FFFF DATA 12 FLAGS 1E RD // in reset (/rst low)
CLK 0001 ADRS DB61 DATA 46 FLAGS 1E RD
CLK 0002 ADRS DB62 DATA 26 FLAGS 1E RD
CLK 0003 ADRS FFFF DATA FA FLAGS 1E RD
CLK 0004 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 0005 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 0006 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 0007 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 0008 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 0009 ADRS FFFF DATA 46 FLAGS 1E RD
CLK 000A ADRS FFFF DATA 46 FLAGS 1E RD
CLK 000B ADRS FFFF DATA 46 FLAGS 1F RD // came out of reset
CLK 000C ADRS FFFF DATA 46 FLAGS 1F RD
CLK 000D ADRS FFFF DATA 46 FLAGS 1F RD
CLK 000E ADRS FFFE DATA 46 FLAGS 1F RD
CLK 000F ADRS FFFF DATA DB FLAGS 1F RD // get reset vector
CLK 0010 ADRS FFFF DATA 46 FLAGS 1F RD
CLK 0011 ADRS DB46 DATA 46 FLAGS 1F RD // jump to reset vector (extbas entry point)
CLK 0012 ADRS DB47 DATA 10 FLAGS 1F RD
CLK 0013 ADRS DB48 DATA CE FLAGS 1F RD
CLK 0014 ADRS DB49 DATA 01 FLAGS 1F RD
CLK 0015 ADRS DB4A DATA EE FLAGS 1F RD
CLK 0016 ADRS DB4B DATA 96 FLAGS 1F RD
CLK 0017 ADRS FFFF DATA 6E FLAGS 1F RD // I guess the bus is tristated here so we're seeing pullups to 0xffff?
CLK 0018 ADRS 806E DATA 46 FLAGS 1F RD
CLK 0019 ADRS DB4C DATA 12 FLAGS 1F RD
CLK 001A ADRS DB4D DATA 81 FLAGS 1F RD
CLK 001B ADRS DB4E DATA 55 FLAGS 1F RD
CLK 001C ADRS DB4F DATA 26 FLAGS 1F RD
CLK 001D ADRS FFFF DATA 0A FLAGS 1F RD
CLK 001E ADRS DB5A DATA 46 FLAGS 1F RD
CLK 001F ADRS DB5B DATA 8E FLAGS 1F RD
CLK 0020 ADRS DB5C DATA 02 FLAGS 1F RD
CLK 0021 ADRS DB5D DATA 18 FLAGS 1F RD
CLK 0022 ADRS DB5E DATA 6F FLAGS 1F RD
CLK 0023 ADRS DB5F DATA 83 FLAGS 1F RD
CLK 0024 ADRS FFFF DATA 30 FLAGS 1F RD
CLK 0025 ADRS FFFF DATA 46 FLAGS 1F RD
CLK 0026 ADRS FFFF DATA 46 FLAGS 1F RD
CLK 0027 ADRS 8216 DATA 46 FLAGS 1F RD
CLK 0028 ADRS FFFF DATA 12 FLAGS 1F RD
WRITE ADRS 8216 DATA 00 (?) // trying to write zero to $8216 ?
CLK 002A ADRS DB5F DATA FF FLAGS 1F RD
CLK 002B ADRS DB60 DATA 30 FLAGS 1F RD
CLK 002C ADRS DB61 DATA 01 FLAGS 1F RD
CLK 002D ADRS FFFF DATA 26 FLAGS 1F RD
CLK 002E ADRS FFFF DATA 46 FLAGS 1F RD
CLK 002F ADRS DB61 DATA 46 FLAGS 1F RD
CLK 0030 ADRS DB62 DATA 26 FLAGS 1F RD
CLK 0031 ADRS FFFF DATA FA FLAGS 1F RD
CLK 0032 ADRS DB5D DATA 46 FLAGS 1F RD
CLK 0033 ADRS DB5E DATA 6F FLAGS 1F RD
CLK 0034 ADRS DB5F DATA 83 FLAGS 1F RD
CLK 0035 ADRS FFFF DATA 30 FLAGS 1F RD
CLK 0036 ADRS FFFF DATA 46 FLAGS 1F RD
CLK 0037 ADRS FFFF DATA 46 FLAGS 1F RD
CLK 0038 ADRS 8215 DATA 46 FLAGS 1F RD
CLK 0039 ADRS FFFF DATA 12 FLAGS 1F RD
WRITE ADRS 8215 DATA 00 (?)
CLK 003B ADRS DB5F DATA FF FLAGS 1F RD

Paul Hill said...

For a 6809 I'm not sure you can clock them at a low frequency (I tried something similar with a RPI and an expansion hat). The registers are dynamic and need a refresh.

Maybe 6309 is different, but it looks not.

https://en.wikipedia.org/wiki/Hitachi_6309

> It is a dynamic design. The datasheet specifies a minimum clocking frequency and it will lose its state when the clock speed is too low.

I wish there was somewhere better to discuss this. I'd love to expand my board!

Reddit is a possibility but 6809 is dead.
https://www.reddit.com/r/6809/

p.s. The 'C' variant needs an external oscillator but I guess you know that.

Steve said...

Look above in the comments for a comment from November 18, 2019 at 9:32 AM.. I was talking about slow-clocking the 6809 and someone commented that yes the 6309 can even single step (I was comparing it to the Ben Eater 6502 kit computer. I never verified, but I think there's at least some evidence to suggest it should work.

Craig Iannello said...

That run was with a 417 Hz TTL clock into the EXTAL pin yielding a 104 Hz E clk.

I saw in a 6309 datasheet a 500 khz minimum E clock but have also seen DRAM hold onto stuff a long time, and hopefully any non-static part could do at least 0.01 secs



Tom Cleaveland said...

Has anyone successfully implemented Grant Searle's hardware handshaking modification with a USB-to-TTL cable? I tried it but I still get run-on characters when uploading BASIC code.

Mehran Khan said...

The most common single-board computers today come with a variety of processors and GPUs. Some are even capable of running GPUs, which makes them ideal for games, media servers, smart home hubs, and VPN servers. The list goes on. There are no boundaries when it comes to industrial computing.

Stanleyruppert said...

Just ported the combo of Assist09 and Basic to my early 80s Wintek Corp 6809 SBC. Works well. Trace and disassembly functions very helpful!

Found a typo/bug (missing single quote prefix of "1" )in your existing Assist09 code "combined.asm" within the "combined" directory (from GIT). Result is no "1" printed following "S" in a punch text output.

original: BSPSTR FCB 'S,1,EOT ; CR,LF,NULLS,S,1
Fixed: BSPSTR FCB 'S,'1,EOT ; CR,LF,NULLS,S,1

In your blog examples you show:

>P 1000 100F
S13100055414C49535449432E22203A2090001014
S9030000FC
(note missing "1" between S and byte count field

Should be: (0x13 bytes following "S1")

>P 1000 100F
S113100055414C49535449432E22203A2090001014
S9030000FC

Kept wondering why my punched output wouldn't then load. Then while debugging tried punching < 0x10 bytes and got a "S0" line, then caught the typo.

Many thanks for putting the assist09/basic combination together!

Jan said...

@Craig Iannello
I noticed the same write actions.


I used a "grant Searle" 6809SBC PCB which is compatible with the Trantor firmware.
Instead of an (uv)eprom I burned the Trantor "combined" software in an 28C256 eeprom. This type of eeprom can be written to with normal write cycles (as if it is normal SRAM).
I could not get the 28c256 eeprom to work (boot) and had to use a real (uv)eprom. In an 27256 (uv)eprom this "combined" firmware worked fine.

When I verified (checked) the contents of the 28c256 against the original file I noticed that certain locations in the 28c256 had been overwritten with zeroes. At that time I thougt that the eeprom was defective, but your post made me think otherwise.
As the software in the eeprom did not boot at al (the Assist09 welcome message was not shown) no basic code was executed. Somewhere in the Assist09 part of the firmware there must be some code that writes to the memory area C000-FFFF.