[Contest] TIM history
Re: [Contest] TIM history
Two of these: https://tinyurl.com/tzh9t26
One for +/- 5V and one for +/- 12V
Or you could use one for the above for the 5V rails and one of these: https://tinyurl.com/s8qkou6
To generate the 12V rails.
Small, cheap, effective. I've used both and they work great.
One for +/- 5V and one for +/- 12V
Or you could use one for the above for the 5V rails and one of these: https://tinyurl.com/s8qkou6
To generate the 12V rails.
Small, cheap, effective. I've used both and they work great.
Bill
Re: [Contest] TIM history
jds wrote:
So we have the following memory map for a full TIM system:
- 0000-0800 RAM (2k here)
6E00-6E0F 6532 I/0
7000-73FF TIM ROM
FFC0-FFFF TIM RAM (mapped in after startup to allow altering vectors)
1K is a pretty healthy amount of RAM for a system and the ability to expand to 2K makes it even luxurious. But since you've got serial I/O, and not just a front panel, I might just go all the way to truly deluxe and rework it to allow 4K of RAM. Because I hear some guy is working on a high-level language, but it will require 4K to run.
Curt J. Sampson - github.com/0cjs
Re: [Contest] TIM history
cjs wrote:
1K is a pretty healthy amount of RAM for a system and the ability to expand to 2K makes it even luxurious. But since you've got serial I/O, and not just a front panel, I might just go all the way to truly deluxe and rework it to allow 4K of RAM. Because I hear some guy is working on a high-level language, but it will require 4K to run.
I think that the better thing to do is make this thing a period accurate recreation of the TIM, and then build another board using the 6532 and probably a full 6502, 8k RAM chip, 8k ROM or even 2. Be nice if I could make it CMOS, but I don't think you can find CMOS 6532's, I guess you'd just use a 65C22, and by then it's just a standard small 65C02 SBC.
Re: [Contest] TIM history
jds wrote:
I'm not even sure what I'll do with that entire 2k, but if I did want to get BASIC running I'd need at least 4k for the BASIC interpreter (Tiny BASIC, integer only and quite limited) and then at least another 1k for basic programs.
Curt J. Sampson - github.com/0cjs
Re: [Contest] TIM history
Tom Pitman's Tiny BASIC will fit into 2K, but just. You won't even have room left over for a serial comm monitor.
It's small and simple and can be used as a procedural control language to call ML subroutines. Then use what's left of your 4K ROM to add routines you can call from TB to get the real work done. Iv'e done this in the past. Saves burning ROMs for every little change in your program flow or logic.
It's small and simple and can be used as a procedural control language to call ML subroutines. Then use what's left of your 4K ROM to add routines you can call from TB to get the real work done. Iv'e done this in the past. Saves burning ROMs for every little change in your program flow or logic.
Bill
Re: [Contest] TIM history
It’s good to know that you can fit a basic in 2k, I thought 4k was the minimum. It would be a worthwhile goal to get it working.
The TIM schematic is very simple, that’s part of the appeal, and I was impressed that it only used a 7400 and 7404 for the address decoding (not that there is much to decode as some of it is done internally in the 6530). I’ve been sidetracked over the last few days understanding it and modifying it to work with my reduced address bus. What I discovered is that, as with any minimal addressing scheme, the addresses are aliased all over the place. Things are decoded in the right locations, but also in many other ones too. That’s not an issue for a closed system, but if I have an expansion bus as planned I need some free address ranges, and with only 8k total, I need a lot of that to be free. Finding 2k for BASIC should be do-able, but a single 4k range is probably not.
Something else I thought of, with the expansion connector, there could be a BASIC card with the BASIC ROM on it.
Update: Looks like Tiny BASIC is 2220 bytes long, just a touch too big to fit in a 2k ROM. That’s for the KIM version so should be about the same for TIM.
The TIM schematic is very simple, that’s part of the appeal, and I was impressed that it only used a 7400 and 7404 for the address decoding (not that there is much to decode as some of it is done internally in the 6530). I’ve been sidetracked over the last few days understanding it and modifying it to work with my reduced address bus. What I discovered is that, as with any minimal addressing scheme, the addresses are aliased all over the place. Things are decoded in the right locations, but also in many other ones too. That’s not an issue for a closed system, but if I have an expansion bus as planned I need some free address ranges, and with only 8k total, I need a lot of that to be free. Finding 2k for BASIC should be do-able, but a single 4k range is probably not.
Something else I thought of, with the expansion connector, there could be a BASIC card with the BASIC ROM on it.
Update: Looks like Tiny BASIC is 2220 bytes long, just a touch too big to fit in a 2k ROM. That’s for the KIM version so should be about the same for TIM.
Re: [Contest] TIM history
jds wrote:
The TIM schematic is very simple, that’s part of the appeal, and I was impressed that it only used a 7400 and 7404 for the address decoding (not that there is much to decode as some of it is done internally in the 6530). I’ve been sidetracked over the last few days understanding it and modifying it to work with my reduced address bus. What I discovered is that, as with any minimal addressing scheme, the addresses are aliased all over the place. Things are decoded in the right locations, but also in many other ones too. That’s not an issue for a closed system, but if I have an expansion bus as planned I need some free address ranges, and with only 8k total, I need a lot of that to be free. Finding 2k for BASIC should be do-able, but a single 4k range is probably not.
Perhaps there might be some inspiration to take from this for your design?
Re: [Contest] TIM history
So the address decoding gets really complex when you move from a 6502 to 6504/7. So much so that it'd just be a lot easier to use a 6502. But this is a competition that requires the use of a smaller 6502, so I need to figure this out. I've spent more time on it than I'd like to admit, it's one of those problems that I think are unique enough that there isn't a simple algorithm for solving.
The core of the problem is that the 6530 has a really nice address decoder built in, which can be configured just like the internal ROM. So in theory you could set this up and avoid adding much external logic. But we have a pre-configured 6530, which already has the address decode set, and set up for a 64k address space. The chip select equations look like this:
ROM = RS.CS1.CS2
RAM = RS./CS1.CS2.A9.A8.A7.A6
I/O = /RS.CS1.CS2.A9./A8./A7./A6
And a standard TIM would be configured like this:
RS = A12
CS2 = A13
CS1 = /(/PB4.A15)
Which gives an address map looking like this:
2200: Start IO
223f: END IO
2600: Start IO
263f: END IO
2a00: Start IO
2a3f: END IO
2e00: Start IO
2e3f: END IO
3000: Start ROM
3fff: END ROM
6200: Start IO
623f: END IO
6600: Start IO
663f: END IO
6a00: Start IO
6a3f: END IO
6e00: Start IO
6e3f: END IO
7000: Start ROM
7fff: END ROM
b3c0: Start RAM
b3ff: END RAM
b7c0: Start RAM
b7ff: END RAM
bbc0: Start RAM
bbff: END RAM
bfc0: Start RAM
bfff: END RAM
f3c0: Start RAM
f3ff: END RAM
f7c0: Start RAM
f7ff: END RAM
fbc0: Start RAM
fbff: END RAM
ffc0: Start RAM
Lots of aliased locations, which wastes quite a bit of the address map, but everything ends up in the right place.
The best I've come up with so far is these equations:
rs = a12
cs1 = (/a12.a11.a10) | (a12./a11./a10);
cs2 = true
Which is quite complex for cs1 and wastes cs2, so it seems I should be able to do better. That gives this memory map:
000: Start EXP_RAM
07ff: END EXP_RAM
0e00: Start IO
0e3f: END IO
1000: Start ROM
13ff: END ROM
17c0: Start RAM
17ff: END RAM
1bc0: Start RAM
1bff: END RAM
1fc0: Start RAM
Which is not too bad. It's a little complex and the TIM RAM is is in two locations that it doesn't need to be, but it would work. 3 NOT's, 2 3 input AND's, and an OR gate. Actually, now that I've sketched it out, the propagation delay would be pretty bad, so maybe this wouldn't work.
So a TIM system with a 6504 looks like it would be quite hard to build.
The core of the problem is that the 6530 has a really nice address decoder built in, which can be configured just like the internal ROM. So in theory you could set this up and avoid adding much external logic. But we have a pre-configured 6530, which already has the address decode set, and set up for a 64k address space. The chip select equations look like this:
ROM = RS.CS1.CS2
RAM = RS./CS1.CS2.A9.A8.A7.A6
I/O = /RS.CS1.CS2.A9./A8./A7./A6
And a standard TIM would be configured like this:
RS = A12
CS2 = A13
CS1 = /(/PB4.A15)
Which gives an address map looking like this:
2200: Start IO
223f: END IO
2600: Start IO
263f: END IO
2a00: Start IO
2a3f: END IO
2e00: Start IO
2e3f: END IO
3000: Start ROM
3fff: END ROM
6200: Start IO
623f: END IO
6600: Start IO
663f: END IO
6a00: Start IO
6a3f: END IO
6e00: Start IO
6e3f: END IO
7000: Start ROM
7fff: END ROM
b3c0: Start RAM
b3ff: END RAM
b7c0: Start RAM
b7ff: END RAM
bbc0: Start RAM
bbff: END RAM
bfc0: Start RAM
bfff: END RAM
f3c0: Start RAM
f3ff: END RAM
f7c0: Start RAM
f7ff: END RAM
fbc0: Start RAM
fbff: END RAM
ffc0: Start RAM
Lots of aliased locations, which wastes quite a bit of the address map, but everything ends up in the right place.
The best I've come up with so far is these equations:
rs = a12
cs1 = (/a12.a11.a10) | (a12./a11./a10);
cs2 = true
Which is quite complex for cs1 and wastes cs2, so it seems I should be able to do better. That gives this memory map:
000: Start EXP_RAM
07ff: END EXP_RAM
0e00: Start IO
0e3f: END IO
1000: Start ROM
13ff: END ROM
17c0: Start RAM
17ff: END RAM
1bc0: Start RAM
1bff: END RAM
1fc0: Start RAM
Which is not too bad. It's a little complex and the TIM RAM is is in two locations that it doesn't need to be, but it would work. 3 NOT's, 2 3 input AND's, and an OR gate. Actually, now that I've sketched it out, the propagation delay would be pretty bad, so maybe this wouldn't work.
So a TIM system with a 6504 looks like it would be quite hard to build.
- barrym95838
- Posts: 2056
- Joined: 30 Jun 2013
- Location: Sacramento, CA, USA
Re: [Contest] TIM history
jds wrote:
Update: Looks like Tiny BASIC is 2220 bytes long, just a touch too big to fit in a 2k ROM. That’s for the KIM version so should be about the same for TIM.
Got a kilobyte lying fallow in your 65xx's memory map? Sprinkle some VTL02C on it and see how it grows on you!
Mike B. (about me) (learning how to github)
Mike B. (about me) (learning how to github)
Re: [Contest] TIM history
(I think the key to simple address decoding is not to worry at all about aliased locations. It's not a problem for the software, or the hardware, merely something for the human to deal with.)
Re: [Contest] TIM history
Indeed, and the lack of A13/14/15 on the 6507 or 6504 means that the entire 8K external address space is aliased eight times as seen by the CPU inside, anyway. The important thing is that software accesses particular addresses and finds the correct hardware there.
Is there a bunch of legacy software for the TIM that has to be accommodated?
Is there a bunch of legacy software for the TIM that has to be accommodated?
Re: [Contest] TIM history
Chromatix wrote:
Is there a bunch of legacy software for the TIM that has to be accommodated?
There’s no real legacy software that I know of, and this 8k address range is really limiting, I guess people that bought the TIM kit would have used it as a cheap development system or for some automation type project, but they’d normally pair it with a full 6502 so would have more room for expansion. The real advantage of the TIM is that you don’t need a development system or an EPROM programmer to get started. But you would need a terminal.
Re: [Contest] TIM history
jds wrote:
No, it’s just that with only 8k of address range I don’t think I can waste much of it on aliased addresses. Part of the challenge I guess.
For instance, you will be able to read or write to $0000 by accessing $0000, $2000, $4000, $6000, $8000, $A000, $C000, and $E000.
Bill
Re: [Contest] TIM history
I may be missing something here, but you are going through quite the exercise of using a 6532 to decode the memory map, isn't one of the issues up front that you can't get a 6532 and are using the contest supplied 6530 instead?
It seems that leaves you to design a memory map decoder not restricted by the 6532 at all.
It seems that leaves you to design a memory map decoder not restricted by the 6532 at all.
Re: [Contest] TIM history
Okay, here's my suggestion:
Start with a '138 on A10/11/12. The bottom two outputs of this are /CS lines for two 1K RAM banks, let's call them /CSR0 and /CSR1. Wire the ten remaining address lines direct to both the RAM and the 6530.
Generate the 6530's CS2 as ~(/CSR0 & /CSR1), and wire A12 to the 6530's RS input. Every access that is not to RAM will now go to some part of the 6530, with the I/O appearing at $6E00 (and $0E00) as required.
Finally, call the top output of the '138 /VP, and generate the CS1 input as (/VP | PB4). This allows the vector table to be remapped from ROM to the 6530's internal RAM as in the original.
The above assumes you actually have a 6530-004, and not an ersatz 6530 built from a 6532 and a ROM. The setup will be different in the latter case. Assuming you have a modest clock speed (1MHz or less would be typical for the TIM era), you shouldn't need to worry about propagation delays.
Start with a '138 on A10/11/12. The bottom two outputs of this are /CS lines for two 1K RAM banks, let's call them /CSR0 and /CSR1. Wire the ten remaining address lines direct to both the RAM and the 6530.
Generate the 6530's CS2 as ~(/CSR0 & /CSR1), and wire A12 to the 6530's RS input. Every access that is not to RAM will now go to some part of the 6530, with the I/O appearing at $6E00 (and $0E00) as required.
Finally, call the top output of the '138 /VP, and generate the CS1 input as (/VP | PB4). This allows the vector table to be remapped from ROM to the 6530's internal RAM as in the original.
The above assumes you actually have a 6530-004, and not an ersatz 6530 built from a 6532 and a ROM. The setup will be different in the latter case. Assuming you have a modest clock speed (1MHz or less would be typical for the TIM era), you shouldn't need to worry about propagation delays.