ICE T65/Z80/6809

emulators, hardware and classic software for atom + system machines
apprenticemart2
Posts: 8
Joined: Fri Feb 21, 2020 6:20 pm
Contact:

Re: ICE T65/Z80/6809

Post by apprenticemart2 » Mon Feb 24, 2020 8:48 pm

Thanks
Martin

apprenticemart2
Posts: 8
Joined: Fri Feb 21, 2020 6:20 pm
Contact:

Re: ICE T65/Z80/6809

Post by apprenticemart2 » Tue Feb 25, 2020 6:54 pm

I got the terminal working out of circuit so I will see if it needs a reset or something when it's installed in my add drive.
Cheers
Martin

bprosman
Posts: 418
Joined: Sun Mar 29, 2015 11:27 pm
Contact:

Re: ICE T65/Z80/6809

Post by bprosman » Fri Feb 28, 2020 9:14 am

Hi Dave,

As I am making more progress with my "Hacked version" of the 6502 core I was thinking about customizing the bootloader.
I have made a small circuit that can generate a 4-bit code to the ID bits of the board.
Actually im looking of a "reload" (is that the reset of the EEPizza board)?
Then (i would think) it should be possible to preload/select multiple 6502 ICE-T cores like your original but also my "hacked internal clock" one.

Does it make sense the way I think ?

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Fri Feb 28, 2020 9:31 am

bprosman wrote:
Fri Feb 28, 2020 9:14 am
As I am making more progress with my "Hacked version" of the 6502 core I was thinking about customizing the bootloader.
I have made a small circuit that can generate a 4-bit code to the ID bits of the board.
Actually im looking of a "reload" (is that the reset of the EEPizza board)?
Then (i would think) it should be possible to preload/select multiple 6502 ICE-T cores like your original but also my "hacked internal clock" one.

Does it make sense the way I think ?
The orange button on the eepizza board labelled RST will force the FPGA to reconfigure (i.e. reload the boot loader from address 0 in FLASH).

If you want to add a new image to the system, you need to change two files.

1. The script that builds the multi boot image:
https://github.com/hoglet67/AtomBusMon/ ... gen_mcs.sh

The start addresses of the remaining slots in FLASH are shown in the comment.

2. The multiboot loader VHD:
https://github.com/hoglet67/AtomBusMon/ ... der.v#L138
https://github.com/hoglet67/AtomBusMon/ ... der.v#L146

You need to add an extra line to each of the two case statements.

When determing the core to load, the mode link on the adapter is also used. You could extend this idea and treat pins on the extra 2x6 connector on the eepizza board as additional mode "links". Then you wouldn't need to change any of the existing adapters.

Dave

bprosman
Posts: 418
Joined: Sun Mar 29, 2015 11:27 pm
Contact:

Re: ICE T65/Z80/6809

Post by bprosman » Fri Feb 28, 2020 9:43 am

When determing the core to load, the mode link on the adapter is also used. You could extend this idea and treat pins on the extra 2x6 connector on the eepizza board as additional mode "links". Then you wouldn't need to change any of the existing adapters.
Excellent idea, thanks.

bprosman
Posts: 418
Joined: Sun Mar 29, 2015 11:27 pm
Contact:

Re: ICE T65/Z80/6809

Post by bprosman » Fri Feb 28, 2020 10:17 am

@Dave,

Can i use more than one entry in the UCF file to use the current ID bits AND the 2x6 connector or is it OR-OR ?
Assume its editing these lines to reflect the connections on the 2x6 connector :

# ID/Jumper
NET "mode" LOC="P140" | IOSTANDARD = LVCMOS33 | PULLUP ; # mode jumper
NET "id<0>" LOC="P88 " | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<1>" LOC="P87 " | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<2>" LOC="P85" | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<3>" LOC="P84" | IOSTANDARD = LVCMOS33 | PULLUP ; # id links


I'm trying to understand how the bootloader works :

Code: Select all

               // Loader          - 0300-0000
               // Unknown Adapter - 0305-4000
               // 6502            - 030A-8000 - mode 1 id 1110
               // Z80             - 030F-C000 - mode x id 1101
               // 65C02           - 0315-0000 - mode 0 id 1110 (future)
               // 6809            - 031A-4000 - mode x id 1100 (future)

               case ({mode, id})
                 5'b11110: icap_din    = 16'h8000; // 6502
                 5'b11101: icap_din    = 16'hC000; // Z80 (mode = 1)
                 5'b01101: icap_din    = 16'hC000; // Z80 (mode = 0)
                 5'b01110: icap_din    = 16'h0000; // 65C02
                 5'b11100: icap_din    = 16'h4000; // 6809 (mode = 1)
                 5'b01100: icap_din    = 16'h4000; // 6809 (mode = 0)
                 default:  icap_din    = 16'h4000; // Unknown Adapter
               endcase
I assume there are 4 memory blocks to load the core into h0000, h4000, h8000, and hc000 , but dont exactly get the 0300, 0305 etc.

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Fri Feb 28, 2020 12:42 pm

bprosman wrote:
Fri Feb 28, 2020 10:17 am
@Dave,

Can i use more than one entry in the UCF file to use the current ID bits AND the 2x6 connector or is it OR-OR ?
Assume its editing these lines to reflect the connections on the 2x6 connector :

# ID/Jumper
NET "mode" LOC="P140" | IOSTANDARD = LVCMOS33 | PULLUP ; # mode jumper
NET "id<0>" LOC="P88 " | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<1>" LOC="P87 " | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<2>" LOC="P85" | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
NET "id<3>" LOC="P84" | IOSTANDARD = LVCMOS33 | PULLUP ; # id links
If you want to make additional inputs available to the boot loader, you need to add them:
- to the UCF file (with LOC= matching the number printed on the eepizza board)
- to the module header in MultiBootLoader.v
bprosman wrote:
Fri Feb 28, 2020 10:17 am
I'm trying to understand how the bootloader works :

Code: Select all

               // Loader          - 0300-0000
               // Unknown Adapter - 0305-4000
               // 6502            - 030A-8000 - mode 1 id 1110
               // Z80             - 030F-C000 - mode x id 1101
               // 65C02           - 0315-0000 - mode 0 id 1110 (future)
               // 6809            - 031A-4000 - mode x id 1100 (future)

               case ({mode, id})
                 5'b11110: icap_din    = 16'h8000; // 6502
                 5'b11101: icap_din    = 16'hC000; // Z80 (mode = 1)
                 5'b01101: icap_din    = 16'hC000; // Z80 (mode = 0)
                 5'b01110: icap_din    = 16'h0000; // 65C02
                 5'b11100: icap_din    = 16'h4000; // 6809 (mode = 1)
                 5'b01100: icap_din    = 16'h4000; // 6809 (mode = 0)
                 default:  icap_din    = 16'h4000; // Unknown Adapter
               endcase
I assume there are 4 memory blocks to load the core into h0000, h4000, h8000, and hc000 , but dont exactly get the 0300, 0305 etc.
The SPI EEPROM is 4MB and the LX9 bitstream is 0x54000 bytes, so you end up with "slots" in the SPI EEPROM for 12 bitstreams:

Code: Select all

Slot  0 - 0x000000 (Boot Loader)
Slot  1 - 0x054000 (Unknown Adapter)
Slot  2 - 0x0A8000 (6502)
Slot  3 - 0x0FC000 (Z80)
Slot  4 - 0x150000 (65C02)
Slot  5 - 0x1A4000 (6809)
Slot  6 - 0x1F8000 (spare)
Slot  7 - 0x24C000 (spare)
Slot  8 - 0x2A0000 (spare)
Slot  9 - 0x2F4000 (spare)
Slot 10 - 0x348000 (spare)
Slot 11 - 0x39C000 (spare)  
In the boot loader state machine, the address is supplied in two 16-bit chunks (written to general 1 and general 2 configuration registers)

Take the 6502 at 0x0A8000 (slot 2) as an example:
- the low 16 bits of the address should be: 0x8000
- the upper 16 bits of the address should be 0x030A

Why 0x030A and not 0x000A?

The additional 8 bits are used for the opcode for the command that is sent to the SPI FLASH, and 0x03 is SPI Read.

It you want to add a bitstream, the nexyt free slot is 0x1F8000 (slot 6), so:
- the first case statements needs extending to send 0x8000
- the second case statement needs extending to send 0x031F

You'll also need to adjust the condition in the case statement to take account of your extra input.

Dave

apprenticemart2
Posts: 8
Joined: Fri Feb 21, 2020 6:20 pm
Contact:

Re: ICE T65/Z80/6809

Post by apprenticemart2 » Tue Mar 10, 2020 7:02 pm

my godil doesn't work in my dynacord add drive for some reason it seems to get stuck on a sync signal. I programmed the godil with the cycle exact verilog code but this doesn't work either. The dynacord add drive works with a companion device called a dynacord add one which is a 12 bit drum sampler. This also uses a 6809 processor and the godil works fine installed in this.I will have to learn a bit more assembly before i can get any further, when I check most of the signals with my scope the look the same apart from there is less activity on the firq pin which is probably just because it's not booting as far into the code.

Prime
Posts: 2858
Joined: Mon Jun 01, 2009 12:52 am
Contact:

Re: ICE T65/Z80/6809

Post by Prime » Fri Apr 24, 2020 10:28 pm

Hi all,

Is there a current recommended FPGA board as last time I looked I couldn't find the epizza board for sale anymore?

Cheers.

Phill.

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Fri Apr 24, 2020 10:41 pm

Prime wrote:
Fri Apr 24, 2020 10:28 pm
Is there a current recommended FPGA board as last time I looked I couldn't find the epizza board for sale anymore?
The short answer is no....

I was thining of designing a eepizza clone, but haven't made a start yet.

That would be easier than re-laying out the three different adapters.

Dave

bprosman
Posts: 418
Joined: Sun Mar 29, 2015 11:27 pm
Contact:

Re: ICE T65/Z80/6809

Post by bprosman » Fri Apr 24, 2020 11:30 pm

Hi Dave, if you do I would be willing to split some costs.
Today I received this board.
Not seeing it as a real replacement for the EEPizza as the form factor is quite large.
Pricing is quite cheap though , around $14.
https://nl.aliexpress.com/item/32887046050.html

(Schematic attached).
Attachments
SCH.pdf
(1.51 MiB) Downloaded 10 times

Prime
Posts: 2858
Joined: Mon Jun 01, 2009 12:52 am
Contact:

Re: ICE T65/Z80/6809

Post by Prime » Mon Apr 27, 2020 12:43 am

I have a feature request.....

A go command that you specify an address to and it goes until that address. Essentially an on the fly breakpoint usefull where you want to skip
say a subroutine, but don't want to go through all the hassle of manually setting a breakpoint.

Cheers.

Phill.

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Mon Apr 27, 2020 1:48 am

Prime wrote:
Mon Apr 27, 2020 12:43 am
A go command that you specify an address to and it goes until that address. Essentially an on the fly breakpoint usefull where you want to skip say a subroutine, but don't want to go through all the hassle of manually setting a breakpoint.
Something similar already exists - the command is called "next":
https://github.com/hoglet67/AtomBusMon/ ... nce#next-n

It can be used to skip over subroutines or out of some loops.

It would be very easy to extend it to take an optional address, and use that instead of the next instruction.

Dave

Prime
Posts: 2858
Joined: Mon Jun 01, 2009 12:52 am
Contact:

Re: ICE T65/Z80/6809

Post by Prime » Mon Apr 27, 2020 7:49 pm

hoglet wrote:
Mon Apr 27, 2020 1:48 am
Something similar already exists - the command is called "next":
https://github.com/hoglet67/AtomBusMon/ ... nce#next-n

It can be used to skip over subroutines or out of some loops.

It would be very easy to extend it to take an optional address, and use that instead of the next instruction.
Ahh that would probably do the trick though doesn't seem to be in the version (of the 6809) I have loaded onto the godil, but that's 0.7x and I notice the current is 0.98....guess it's time to update :)

Cheers.

Phill.

Budgie
Posts: 111
Joined: Mon Nov 02, 2015 9:14 pm
Location: Manchester, UK
Contact:

Re: ICE T65/Z80/6809

Post by Budgie » Mon Apr 27, 2020 9:26 pm

hoglet wrote:
Fri Apr 24, 2020 10:41 pm
Prime wrote:
Fri Apr 24, 2020 10:28 pm
Is there a current recommended FPGA board as last time I looked I couldn't find the epizza board for sale anymore?
The short answer is no....

I was thining of designing a eepizza clone, but haven't made a start yet.

That would be easier than re-laying out the three different adapters.

Dave
For information I managed to fry my Spartan 6 on my eepizza board so ordered 5 from here.

https://www.aliexpress.com/item/3285336 ... 4ef1d3yxLr

I soldered in the replacement and it works fine. I've only tested one of the 5 so far but no reason to suggest they won't all work.

I would be happy to contribute to any board costs and testing as these boards are becoming very useful and being able to create one when required would be great.

Andy

obiwanjacobi
Posts: 37
Joined: Mon Oct 21, 2019 10:43 am
Location: Netherlands
Contact:

Re: ICE T65/Z80/6809

Post by obiwanjacobi » Wed May 06, 2020 9:05 am

Hi,

After a long break I am at it again.
I'm getting "missing clock" again, though I do provide a 1MHz clock...? same result up to around 8MHz.
I measured the click pin (6) and it IS there.
I remember last time I had it working...
(v0.982/Jan 28 2020)

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Wed May 06, 2020 9:44 am

obiwanjacobi wrote:
Wed May 06, 2020 9:05 am
I'm getting "missing clock" again, though I do provide a 1MHz clock...? same result up to around 8MHz.
I measured the click pin (6) and it IS there.
I remember last time I had it working...
(v0.982/Jan 28 2020)
You'll sometime see a false "missing clock" warning on power up, especially if the FPGA starts before the host system. This is really a bug I should try to fix.

Do you continue to see it after both sides are powered up? A good test is to try to do a memory access, for example "rd 0000". If you see "missing clock" each time you do this, then you have a problem.

Also, what clock rate are you running at. If the clock rate is << 1MHz, then it may just be a timeout that needs extending. Did you re-read this post from January:
viewtopic.php?p=257993#p257993

Dave

Dave

obiwanjacobi
Posts: 37
Joined: Mon Oct 21, 2019 10:43 am
Location: Netherlands
Contact:

Re: ICE T65/Z80/6809

Post by obiwanjacobi » Wed May 06, 2020 10:18 am

Yes, I've reread those posts - and now I am getting ***memory timeout*** :shock:
I have tried with clock frequencies from around 1MHz up to 12MHz (ball-park: not very accurate)... All with the same result.
I have measured continuity from my IDC-DIP cable (the pins I plug into the socket on my board) all the way upto the level shifter/buffer U5/pin 6 and I see the (3V3) signal on the P1 header.
I have no C15 fitted and R14 is 0 ohms (as in the instructions).

Did I blow up the clock Pin on the Spartan?

obiwanjacobi
Posts: 37
Joined: Mon Oct 21, 2019 10:43 am
Location: Netherlands
Contact:

Re: ICE T65/Z80/6809

Post by obiwanjacobi » Wed May 06, 2020 10:24 am

Yes, I've reread those posts - and now I am getting ***memory timeout*** :shock:
I have tried with clock frequencies from around 1MHz up to 12MHz (ball-park: not very accurate)... All with the same result.
I have measured continuity from my IDC-DIP cable (the pins I plug into the socket on my board) all the way upto the level shifter/buffer U5/pin 6 and I see the (3V3) signal on the P1 header.
I have no C15 fitted and R14 is 0 ohms (as in the instructions).

Did I blow up the clock Pin on the Spartan?

EDIT:
Never mind! I've got it.

The problem occurs when you hold down Reset all the time. That is how my board starts up because there is no ROM.
Anyway, when I release Reset and let the CPU run it displays no messages and works as expected.

Now that this is documented here I can read this in a couple of months time - when I have forgotten the finer details... :D

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Wed May 06, 2020 11:46 am

obiwanjacobi wrote:
Wed May 06, 2020 10:24 am
The problem occurs when you hold down Reset all the time. That is how my board starts up because there is no ROM.
Anyway, when I release Reset and let the CPU run it displays no messages and works as expected.

Now that this is documented here I can read this in a couple of months time - when I have forgotten the finer details... :D
Ah yes, that would explain it as well.

The ICE part is trying to behave like the Z80 would normally, so when reset is asserted it holds off from doing memory accesses, and I think makes sure the buses are not being driven.

Dave

obiwanjacobi
Posts: 37
Joined: Mon Oct 21, 2019 10:43 am
Location: Netherlands
Contact:

Re: ICE T65/Z80/6809

Post by obiwanjacobi » Wed May 06, 2020 1:10 pm

In hindsight totally understandable.
Anyway, thanks and sorry for bothering you with this non-issue. :roll:

Prime
Posts: 2858
Joined: Mon Jun 01, 2009 12:52 am
Contact:

Re: ICE T65/Z80/6809

Post by Prime » Wed May 06, 2020 11:31 pm

Prime wrote:
Mon Apr 27, 2020 7:49 pm
Ahh that would probably do the trick though doesn't seem to be in the version (of the 6809) I have loaded onto the godil, but that's 0.7x and I notice the current is 0.98....guess it's time to update :)
Right just cloned the github, modified target\common\Makefile.inc to suit windows then went into target\godil_500\ice6809

and did :
make clobber
make

Then programmed the mcs file to my godil's eeprom with impact and it's still on v0.76 :( and no next command available. Am I doing something wrong or is the godil no longer supported by updates?

Cheers.

Phill.

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Thu May 07, 2020 7:29 am

Prime wrote:
Wed May 06, 2020 11:31 pm
Then programmed the mcs file to my godil's eeprom with impact and it's still on v0.76 :( and no next command available. Am I doing something wrong or is the godil no longer supported by updates?
You need to switch to the dev branch before building. Either do a "git checkout dev" before you build, or use the -b dev option to clone)

Alternatively, there is a binary release here that includes the GODIL:
https://github.com/hoglet67/AtomBusMon/ ... tag/latest

Dave

Prime
Posts: 2858
Joined: Mon Jun 01, 2009 12:52 am
Contact:

Re: ICE T65/Z80/6809

Post by Prime » Thu May 07, 2020 9:30 am

hoglet wrote:
Thu May 07, 2020 7:29 am
You need to switch to the dev branch before building. Either do a "git checkout dev" before you build, or use the -b dev option to clone)
Cheers Dave, that seems to have done it :)

Phill.

JannievanZyl
Posts: 218
Joined: Sat Feb 11, 2017 8:56 pm
Location: Cape Town, South Africa
Contact:

Re: ICE T65/Z80/6809

Post by JannievanZyl » Sat May 16, 2020 10:58 am

MY timing in getting an epizza board was pretty bad. Had hoglet's ICE boards made and the epizza and programmer ordered. Just for the vendor to (likely understandably) disappear.

Hoping someone on this group has a spare they're willing to sell?

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Sat May 16, 2020 12:21 pm

JannievanZyl wrote:
Sat May 16, 2020 10:58 am
MY timing in getting an epizza board was pretty bad. Had hoglet's ICE boards made and the epizza and programmer ordered. Just for the vendor to (likely understandably) disappear.

Hoping someone on this group has a spare they're willing to sell?
I would suggest you reposted this request in the Wanted forum, where it may get more visibility.

Dave

JannievanZyl
Posts: 218
Joined: Sat Feb 11, 2017 8:56 pm
Location: Cape Town, South Africa
Contact:

Re: ICE T65/Z80/6809

Post by JannievanZyl » Sat May 16, 2020 3:33 pm

hoglet wrote:
Sat May 16, 2020 12:21 pm
JannievanZyl wrote:
Sat May 16, 2020 10:58 am
MY timing in getting an epizza board was pretty bad. Had hoglet's ICE boards made and the epizza and programmer ordered. Just for the vendor to (likely understandably) disappear.

Hoping someone on this group has a spare they're willing to sell?
I would suggest you reposted this request in the Wanted forum, where it may get more visibility.

Dave
Will do that. Was thinking that it's probably only well known in this thread because of your work. :)

Were the epizza popular for other projects? I.e. widely enough used that people will have bought a fair number of them?

bprosman
Posts: 418
Joined: Sun Mar 29, 2015 11:27 pm
Contact:

Re: ICE T65/Z80/6809

Post by bprosman » Sat May 16, 2020 4:11 pm

Playing with the idea of making a clone but sourcing of the EEPROM used on the board is scaring me off a bit.

obiwanjacobi
Posts: 37
Joined: Mon Oct 21, 2019 10:43 am
Location: Netherlands
Contact:

Re: ICE T65/Z80/6809

Post by obiwanjacobi » Sat May 16, 2020 4:22 pm

bprosman wrote:
Sat May 16, 2020 4:11 pm
Playing with the idea of making a clone but sourcing of the EEPROM used on the board is scaring me off a bit.
You can make a totally new design. You only need the power supplies, a way to program the FPGA (JTag conn) and storage for its config. You could even add the level shifting to the same board. Depending on the FPGA you'll pick a suitable EEPROM needs to be selected.
I have some cheap FPGA boards (from ebay) that has hardly any parts on the and work fine.

If you're gonna build new, make a new decision on what is the best FPGA (availability cheap, end of life, etc.) and go from there.
We could discuss the design here - get everybody's knowledge in the project. I wouldn't mind drawing up the schematic (in KiCad) or laying out the board.

[2c]

User avatar
hoglet
Posts: 9091
Joined: Sat Oct 13, 2012 7:21 pm
Location: Bristol
Contact:

Re: ICE T65/Z80/6809

Post by hoglet » Sat May 16, 2020 4:50 pm

obiwanjacobi wrote:
Sat May 16, 2020 4:22 pm
You can make a totally new design. You only need the power supplies, a way to program the FPGA (JTag conn) and storage for its config. You could even add the level shifting to the same board. Depending on the FPGA you'll pick a suitable EEPROM needs to be selected.
I have some cheap FPGA boards (from ebay) that has hardly any parts on the and work fine.

If you're gonna build new, make a new decision on what is the best FPGA (availability cheap, end of life, etc.) and go from there.
We could discuss the design here - get everybody's knowledge in the project. I wouldn't mind drawing up the schematic (in KiCad) or laying out the board.
Don't forget the USB UART - that's quite important as well.

We have several projects that use the EEPIZZA board:
- Roland's Atom2K18
- Beeb 1MHz Bus FPGA: DSP Mandelbrot
- Beeb 1MHz Bus FPGA: Music 5000/3000
- Beeb 1MHz Bus FPGA: Atom
- Beeb 1MHz Bus FPGA: Frame Buffer (in development)
- Beeb 1MHz Bus FPGA: Full HD Life (in development)
- and of course the various ICE flavours

My motivation to port all of these over to a new FPGA board (or a different FPGA architecture) is close to zero.

I would strongly support any efforts to replicate the EEPIZZA board. I'm sure between Roland, Bram and myself (and anyone else who is motivated), we can make this happen.

Dave

Post Reply

Return to “acorn atom and acorn system series”