Page 1 of 1
Acorn System 1
Posted: Tue Jun 01, 2004 6:39 pm
by scratchmonkey
Has anyone here used one of these?
Posted: Wed Jun 02, 2004 10:00 am
by coredump
Yes! I built one for my school electronics lab in 1978. We used it for the computing part of the Electronic Systems 'A' level syllabus. That is, for the more advanced exams that 16-18 year olds take, if they don't choose to leave school at 16.
Anyway, we wired the Acorn up to various lights and switches. Some of the project work was based on it, too. We had a Commodore PET 2001 for the BASIC programming, as well.
I have an Acorn System Three at home, which is an expanded System One. There's a fairly poor photo of them on this page:
http://www.gifford.co.uk/~coredump/acorn.htm
Looks like the thumbnails don't link to the main pictures properly. I'd better fix that!
Posted: Wed Jun 02, 2004 5:30 pm
by BitWise
I found an emulation of a system one a while back when I was surfing around.
http://www.cary.demon.co.uk/acorn/acornEmulator.html
Posted: Wed Jun 02, 2004 9:32 pm
by scratchmonkey
Yes! I built one for my school electronics lab in 1978. We used it for the computing part of the Electronic Systems 'A' level syllabus. That is, for the more advanced exams that 16-18 year olds take, if they don't choose to leave school at 16.
Quite surprisingly (being a mere -2 years old then), I actually built a System 1 in about 1992 (when I was 12!) that my father bought and never bothered to put together. Hand assembling code was not much fun however so as far as I got was flashing the dots on the rather naff LED display
I have an Acorn System Three at home, which is an expanded System One. There's a fairly poor photo of them on this page:
They are extremely rare. I owned a System 5 (basically a 6U high System 2/3/4 variant with a 6502 CPU card) but regretably sold it on ebay in 1999.
On the subject of Acorn machines, apart from this PC (used for internet stuffs), I still use a BBC Master Turbo that I've had since 1987 as my "main workstation". It has an inline assembler in the BASIC interpreter which is simply unmatchable on any other platform.
Posted: Wed Jun 02, 2004 9:45 pm
by coredump
Well, I had a bit of a think about it, and I rekon I built it in 1979 actually. We got the PET first, then the Acorn came the year after. I think the idea was to allow the boys to use the Acorn in project work, and the teachers were worried that we might damage the (expensive) PET somehow.
Do take a look at my UK101 page, BTW:
http://www.gifford.co.uk/~coredump/uk101.htm
It's another 6502-based machine that I built from a kit. I still use it for odd little hacks, like connecting a Super Nintendo joypad to a 6522 chip.
Posted: Thu Jun 03, 2004 6:50 am
by dclxvi
On the subject of Acorn machines, apart from this PC (used for internet stuffs), I still use a BBC Master Turbo that I've had since 1987 as my "main workstation". It has an inline assembler in the BASIC interpreter which is simply unmatchable on any other platform.
I'd love to hear about how the assembler worked or at least how to use it. Even just a short example, with forward & backward branches (was there some form of assembler labels?) would be great.
One of the things I like about Forth is that it's easy to combine Forth and assembly. In BASIC, I've never seen (or been able to think up) a good way of combining it with assembly. Normally, you had to pre-assemble the code and put in it DATA statements, which was usually pretty slow and took a lot of extra space. Sometimes you could pull tricks by hiding the object code in string literals or REM statements, but LIST would usually barf when it got to the object code. Either way, it was a pretty inelegant solution.
Posted: Thu Jun 03, 2004 4:19 pm
by coredump
I don't remember exactly how the BBC Micro did in-line assembler, because I never really did much programming on the BBC. However, IIRC, you had to use the BASIC to make two passes over the code, usually with a FOR..NEXT loop. Then, you could use BASIC variables as labels (somehow) and you used one special BASIC variable as the assembler's "current address".
Try doing a web search for "BBC Micro documentation project".
Posted: Thu Jun 03, 2004 5:29 pm
by BitWise
You enter 6502 assembler by enclosing it between square brackets like this.
Code: Select all
10 OSWRCH=&FFEE
20 [OPT 3:LDA #ASC("*"):LDX #10:.loop JSR OSWRCH:DEX:BNE loop]
You have to set the BASIC variable P% to contain the origin for the generated code will be put. The OPT directive controls listing output (bit 0) and error reporting (bit 2). A fullstop defines a label which becomes a BASIC variable containing the current origin value. To resolve forward references you normally wrote your code in a FOR loop which assembled if OPT 0 on the first pass and OPT 3 on the second.
Code: Select all
10 FOR PASS=0 TO 3 STEP 3
20 P%=&2000:[OPT PASS
30 NOP:NOP:NOP
40 ]:NEXT
The second release of BBC BASIC added features to allow you to optionally use O% as the address for the generated code (so you can assemble code for one location but store the generated code somewhere else) as well as directives for output data (EQUB, etc.)
The OPT directive was also useful for generating macros by calling a function which assembled some code and returned the current OPT value
Code: Select all
10 FOR PASS=0 TO 3 STEP 3
20 P%=&2000:[OPT PASS
30 OPT FNLoadXY(&1234)
40 ]:NEXT:END
1000 DEF FNLoadXY(VAL)
1010 [LDX #VAL MOD 256:LDY #VAL DIV 256]
1020 =PASS
Posted: Thu Jun 03, 2004 7:29 pm
by scratchmonkey
Not only macros but conditional assembly. Very powerful! I actually wrote something a while ago that automatically optimised itself for 6502 or 65C102 processors depending on it's execution environment.
Posted: Fri Jun 04, 2004 6:14 am
by dclxvi
Thanks everybody! I found a lot of interesting information on the web. It's certainly much more flexible than pre-assembling. Was it reasonably fast, or were there noticable delays if you assembled something that wasn't short? Anyone know if it tokenized the bracketed text (things like JSR, NOP, or whatever else) or if it just stored it like a string (as ASCII characters)?
Posted: Fri Jun 04, 2004 5:43 pm
by scratchmonkey
The start and end assembly brackets, OPT and USR keywords are all tokenised and the rest is stored in text format.
It was quite fast - if your program is only about 1-200 ops then you probably won't notice it assemble. I've not assembled huge blocks of code larger than that (i usually use it to speed up stuff in BASIC rather than solely ASM).
Posted: Fri Jun 04, 2004 7:35 pm
by BitWise
I used it for a few small routines but most of my 6502 coding was done with either SystemAde, a ROM based assembler that assembled files and later the Acorn Assembler (with its strange mnemonics LDAIM, STAZX).
Quite a few BBC games were writen using the BASIC assembler. You used MODE 7 (Teletext) to maximise the amount of RAM and moved the BASIC start address up to where the graphics screen would be when the game was running (PAGE=&3000). Then you assembled the game directly into its target location (somewhere between $E00 and $3000) depending on whether the disk operating system would be active.
If you track down the source code for Elite (probably one of the best ever BBC games) you can see how they used this technique.
PS. Do you have the acorn assembler for the second 6502? I've misplaced my copy.
Posted: Fri Jun 04, 2004 9:25 pm
by scratchmonkey
Unfortunately not. I have a 65C102 internal second processor in my machine which uses HiBasic via the tube for the assembler. You might be able to get a ROM image from
http://bbc.nvg.org/ and blow it however if you have an EPROM programmer.
Posted: Fri Jun 04, 2004 10:57 pm
by coredump
If you track down the source code for Elite (probably one of the best ever BBC games) you can see how they used this technique.
The Elite home page is here:
http://www.iancgbell.clara.net/elite/index.htm
and the source code can be found by following the link (bottom right) to "Elite Archives". Ian Bell, one of the original authors, owns the site.