Maker Pro
Maker Pro

8085 SBC needs help

A

Allen Bong

I have wired a simple SBC based on the basic 8085 chip. Using 74LS373
as a latch clocked by
ALE, 2716 for program storage, 2x 74LS138 for decoding the /CE for
2716 and the /IOR, /IOW,
/MR and /MW signals. I need only 1 bit input and 1 bit output so I
used 74LS373 for input
and 74LS244 for output. The input is connected to a switch and output
conmected to a LED.
When the switch is making, the LED will flash at about 1Hz. When the
switch is off, the LED
goes off. There was no RAM as my program doesnt use subroutines.
Actually the program is
less than 256 bytes so I tie A8-A10 of the 2716 to ground.
Below is the connection of the 2 decoders and the I/O.




74LS138 74LS138
.------. .------.
1 | Y0o----- /ROM CS 1 | Y1|-----/MR
A13----|A | /WR----|A |
A14--2-|B Y1o----- /RD----|B Y2|-----/MW
A15--3-|C | IO/M----|C |
| Y2o----- | Y5|-----/IOR
VCC--6-| | VCC---6| |
+--4-o | +---4| Y6|-----/IOW
+--5-o | +---5| |
| | | | | |
| '------' | '------'
| |
=== === VCC
GND GND |
.-.
| |
OUTPUT INPUT | |10K
74LS373 74LS244 '-'
.------. .------. |
D0-----3|D0 Q0|2----+ D0--18-|Y0 A0|-2---++
| | | | | |
| | .-. | | o |
/IOW--+ | | | | | | |=|
| | | | |470 | | o |
+------+ | | '-' | | |
| |\ | | | | | |
+-| >O--11|LE | | | | ===
|/ | | LED - | | GND
-----1|/OE | ^ -> /IOR---1-|/OE |
| '------' | '------'
=== VCC
GND

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

And the program I wrote to test the circuit.

.equ sensor, h'00
.equ led, h'00

.org h'0000

start: mvi a,h'ff ;turn off led at start
out led
mloop: in sensor ;check sensor
rar
jnc led_on
jmp mloop
led_on: mvi a,h'00 ;turn on led
out led
delay1: lxi d,h'ffff
dloop1: nop
dcx d
jnz dloop1
mvi a,h'ff ;turn off led
out led
delay2: lxi d,h'ffff
dloop2: nop
dcx d
jnz dloop2
jmp mloop
.code
.end


I was wondering if I didnt fully understand the instructions correctly
or the hardware was
in problem. On the 74LS138 I used for memory decoding, I was getting
pulses on all the
output instead of just Y0 output. The IO/M pin was a permanent lo and
the /WR signal from
8085 was always high.
Do I need extra signals on the enables for the decoders to decode
correctly?
Any feedback is much appreciated. Thank you.

Allen
 
A

Allen Bong

I have wired a simple SBC based on the basic 8085 chip.  Using 74LS373
as a latch clocked by
ALE, 2716 for program storage, 2x 74LS138 for decoding the /CE for
2716 and the /IOR, /IOW,
/MR and /MW signals.  I need only 1 bit input and 1 bit output so I
used 74LS373 for input
and 74LS244 for output.  The input is connected to a switch and output
conmected to a LED.
When the switch is making, the LED will flash at about 1Hz.  When the
switch is off, the LED
goes off.  There was no RAM as my program doesnt use subroutines.
Actually the program is
less than 256 bytes so I tie A8-A10 of the 2716 to ground.
Below is the connection of the 2 decoders and the I/O.

        74LS138                     74LS138
       .------.                      .------..
     1 |    Y0o----- /ROM CS       1 |    Y1|-----/MR
A13----|A     |               /WR----|A     |
A14--2-|B   Y1o-----          /RD----|B   Y2|-----/MW
A15--3-|C     |              IO/M----|C     |
       |    Y2o-----                 |    Y5|-----/IOR
VCC--6-|      |               VCC---6|      |
  +--4-o      |                 +---4|    Y6|-----/IOW
  +--5-o      |                 +---5|      |
  |    |      |                 |    |     |
  |    '------'                 |    '------'
  |                             |
 ===                           ===                  VCC
 GND                           GND                   |
                                                     .-.
                                                     | |
           OUTPUT                         INPUT      | |10K
           74LS373                      74LS244     '-'
          .------.                      .------.      |
  D0-----3|D0  Q0|2----+         D0--18-|Y0  A0|-2---++
          |      |     |                |      |     |
          |      |    .-.               |      |     o |
 /IOW--+  |      |    | |               |      |       |=|
       |  |      |    | |470            |      |     o |
+------+  |      |    '-'               |      |     |
| |\      |      |     |                |      |     |
+-| >O--11|LE    |     |                |      |    ===
  |/      |      | LED -                |      |    GND
    -----1|/OE   |     ^ ->    /IOR---1-|/OE   |
    |     '------'     |                '------'
   ===                VCC
   GND

(created by AACircuit v1.28.6 beta 04/19/05www.tech-chat.de)

And the program I wrote to test the circuit.

        .equ    sensor, h'00
        .equ    led,    h'00

        .org    h'0000

start:  mvi     a,h'ff          ;turn off led at start
        out     led
mloop:  in      sensor          ;check sensor
        rar
        jnc     led_on
        jmp     mloop
led_on: mvi     a,h'00          ;turn on led
        out     led
delay1: lxi     d,h'ffff
dloop1: nop
        dcx     d
        jnz     dloop1
        mvi     a,h'ff          ;turn off led
        out     led
delay2: lxi     d,h'ffff
dloop2: nop
        dcx     d
        jnz     dloop2
        jmp     mloop
        .code
        .end

I was wondering if I didnt fully understand the instructions correctly
or the hardware was
in problem.  On the 74LS138 I used for memory decoding, I was getting
pulses on all the
output instead of just Y0 output.  The IO/M pin was a permanent lo and
the /WR signal from
8085 was always high.
Do I need extra signals on the enables for the decoders to decode
correctly?
Any feedback is much appreciated.  Thank you.

Allen

I have just spotted a software mistake. The DCX D dosent affect the
zero flag when decrements through zero, so my program must have
stucked in a loop. SOme correction was made after the DCX D.

dloop1: nop
dcx d
mov a,d
ora e
jnz dloop1
[snip]
dloop2: nop
dcx d
mov a,d
ora e
jnz dloop2
jmp mloop

I have also included a link if you want to take a look at the
schematic.

http://www.flickr.com/photos/11236051@N08/2236545530/

Allen
 
M

Marra

I was using the 8085 in 1984 !!!

You need to find a microcontroller that is up to date.
You wont need all these extra chips then !
A PIC or AVR should do the job easily.
 
I was using the 8085 in 1984 !!!

You need to find a microcontroller that is up to date.
You wont need all these extra chips then !
A PIC or AVR should do the job easily.

Learning is good and he's making headway with what he has. Don't go
raining on his parade. Personally I think what he's doing is better in
that he's understanding the interactions to the outside world which is
never a bad thing.

Keep at it Allen

GG
 
A

Allen Bong

 > I was using the 8085 in 1984 !!!
 >
 > You need to find a microcontroller that is up to date.
 > You wont need all these extra chips then !
 > A PIC or AVR should do the job easily.

Learning is good and he's making headway with what he has. Don't go
raining on his parade. Personally I think what he's doing is better in
that he's understanding the interactions to the outside world which is
never a bad thing.

Keep at it Allen

GG

Thanks GG, for the vote of confidence. I know I am not that far to
making the circuit work. I just need a little push so I can get my
engine started. It is weekend now and I guess everyone is having his
good time so help should arrive when everyone is back.

Cheers,

Allen
 
S

Sambo

Allen said:
I have wired a simple SBC based on the basic 8085 chip. Using 74LS373
as a latch clocked by
ALE, 2716 for program storage, 2x 74LS138 for decoding the /CE for
2716 and the /IOR, /IOW,
/MR and /MW signals. I need only 1 bit input and 1 bit output so I
used 74LS373 for input
and 74LS244 for output. The input is connected to a switch and output
conmected to a LED.
When the switch is making, the LED will flash at about 1Hz. When the
switch is off, the LED
goes off. There was no RAM as my program doesnt use subroutines.
Actually the program is
less than 256 bytes so I tie A8-A10 of the 2716 to ground.
Below is the connection of the 2 decoders and the I/O.

74LS138 74LS138
.------. .------..
1 | Y0o----- /ROM CS 1 | Y1|-----/MR
A13----|A | /WR----|A |
A14--2-|B Y1o----- /RD----|B Y2|-----/MW
A15--3-|C | IO/M----|C |
| Y2o----- | Y5|-----/IOR
VCC--6-| | VCC---6| |
+--4-o | +---4| Y6|-----/IOW
+--5-o | +---5| |
| | | | | |
| '------' | '------'
| |
=== === VCC
GND GND |
.-.
| |
OUTPUT INPUT | |10K
74LS373 74LS244 '-'
.------. .------. |
D0-----3|D0 Q0|2----+ D0--18-|Y0 A0|-2---++
| | | | | |
| | .-. | | o |
/IOW--+ | | | | | | |=|
| | | | |470 | | o |
+------+ | | '-' | | |
| |\ | | | | | |
+-| >O--11|LE | | | | ===
|/ | | LED - | | GND
-----1|/OE | ^ -> /IOR---1-|/OE |
| '------' | '------'
=== VCC
GND

(created by AACircuit v1.28.6 beta 04/19/05www.tech-chat.de)

And the program I wrote to test the circuit.

.equ sensor, h'00
.equ led, h'00

.org h'0000

start: mvi a,h'ff ;turn off led at start
out led
mloop: in sensor ;check sensor
rar
jnc led_on
jmp mloop
led_on: mvi a,h'00 ;turn on led
out led
delay1: lxi d,h'ffff
dloop1: nop
dcx d
jnz dloop1
mvi a,h'ff ;turn off led
out led
delay2: lxi d,h'ffff
dloop2: nop
dcx d
jnz dloop2
jmp mloop
.code
.end

I was wondering if I didnt fully understand the instructions correctly
or the hardware was
in problem. On the 74LS138 I used for memory decoding, I was getting
pulses on all the
output instead of just Y0 output. The IO/M pin was a permanent lo and
the /WR signal from
8085 was always high.
Do I need extra signals on the enables for the decoders to decode
correctly?
Any feedback is much appreciated. Thank you.

Allen


I have just spotted a software mistake. The DCX D dosent affect the
zero flag when decrements through zero, so my program must have
stucked in a loop. SOme correction was made after the DCX D.

dloop1: nop
dcx d
mov a,d
ora e
jnz dloop1
[snip]
dloop2: nop
dcx d
mov a,d
ora e
jnz dloop2
jmp mloop

I have also included a link if you want to take a look at the
schematic.

http://www.flickr.com/photos/11236051@N08/2236545530/

Allen

This chip is similar to 8086? So the reset vector (well not really a vector on intels )
is in high memory? Where is that specified in the code?
Hmmm how do you even program 2716, LOL I may have 1 or 2 around
here to but mostly 8K and up.

Well had to look up the reset on this chip, at 0? hmm .

As to the hardware .. quick look at the address decode..
it will work in this situation but really it divides the address space into
8 chunks not 16 AND YOU ARE NOT USING the /MR in decoding the /ROM CS, this will
affect any output (writes) out of the CPU.
I'd connect /MR out of second 138 to one or both /G2 enables ( pin 4 and 5 )
of first 138.
To get this particular, 1 rom configuration going you could even do away with the
first 138 and use the /WR to control the /OE or /CE of the ROM keeping the other
grounded.


Oh, when will I have time to have similar fun with my 80C196.

Cheers.
 
A

Allen Bong

I have just spotted a software mistake.  The DCX D dosent affect the
zero flag when decrements through zero, so my program must have
stucked in a loop.  SOme correction was made after the DCX D.
dloop1: nop
        dcx d
        mov a,d
        ora e
        jnz dloop1
[snip]
dloop2: nop
        dcx d
        mov a,d
        ora e
        jnz dloop2
        jmp mloop
I have also included a link if you want to take a look at the
schematic.

Allen

This chip is similar to 8086? So the reset vector (well not really a vector on intels )
is in high memory? Where is that specified in the code?
Hmmm how do you even program 2716, LOL I may have 1 or 2 around
here to but mostly 8K and up.

I think so, Most Intel micro-processors reset to address h'0000. The
8051 that I used a few times also reset to zero. I have plenty of
2716 pulled out of sockets from OKI teletypes when these machines
became out of date 10 years ago. Each teletype (we called teleprinter
here) has 2x 8085, 2x 8755 and 4-5 8155 on board plus some other 82xx
chips.
Well had to look up the reset on this chip, at 0? hmm .

As to the hardware .. quick look at the address decode..
it will work in this situation but really it divides the address space into
8 chunks not 16 AND YOU ARE NOT USING the /MR in decoding the /ROM CS, this will
affect any output (writes) out of the CPU.
I'd connect /MR out of second 138 to one or both /G2 enables ( pin 4 and 5)
of first 138.
To get this particular, 1 rom configuration going you could even do away with the
first 138 and use the /WR to control the /OE or /CE of the ROM keeping theother
grounded.

Well, the /MR was connected to the /OE of the 2716 and the address
decoder /ROM CS is connected to the /CE. I used address decoder in
case I want to add static RAM later if the I want to expand the
circuit. The other decoder idea was stolen from Steve Walz's 7442 and
I though it was not a bad idea so I adapted it.

The complete circuit is at

http://www.flickr.com/photos/11236051@N08/2235791543/sizes/o/in/set-72157601398953933/

In the schematic I used 2764 instead of 2716 as my circuit CAD doesn't
support 2716 at all. The minimum eprom is 2764 as you've expected.
Oh, when will I have time to have similar fun with my 80C196.

Was the 80C196 similar to 80C186 which was designed as a controller?
It was used in our telephone automatic line testers in the exchange.
Looks quite complicated!

Guess you would be playing with it when yor're retired. LOL.

Thanks for your response, I'll modifiy my circuit as you suggested and
see if it works. BTW the address latch from the 8085 was a 74F373.
Will that have any efftect on my circuit?
 
S

Sambo

Allen said:
Well, the /MR was connected to the /OE of the 2716 and the address
decoder /ROM CS is connected to the /CE. I used address decoder in
case I want to add static RAM later if the I want to expand the
circuit. The other decoder idea was stolen from Steve Walz's 7442 and
I though it was not a bad idea so I adapted it.
Oh yes I thought of that later, after I sent it.
The complete circuit is at

http://www.flickr.com/photos/11236051@N08/2235791543/sizes/o/in/set-72157601398953933/

In the schematic I used 2764 instead of 2716 as my circuit CAD doesn't
support 2716 at all. The minimum eprom is 2764 as you've expected.




Was the 80C196 similar to 80C186 which was designed as a controller?
It was used in our telephone automatic line testers in the exchange.
Looks quite complicated!
It's not all that close and I don't like it's banking crap
but when I rescued it from some hard drives 5-8 years ago it's
64K address space with ADC looked great.
Guess you would be playing with it when yor're retired. LOL.

Thanks for your response, I'll modifiy my circuit as you suggested and
see if it works. BTW the address latch from the 8085 was a 74F373.
Will that have any efftect on my circuit?
Well it sounds like you have it right. Maybe you could try first just
blinking the led, or replace the led with small cap.
I didn't find any good page describing the chip, so besides finding out
it resets to 0 and has other vectors at the bottom I didn't find out much
else. I'd try to make sure all possible interrupts are disabled and besides
the initial JMP start_prog put the rest of the program little higher, above
the 'vectors'.
Saying all that, it is still possible it's the timing but I don't think
I can give it a good look tonight.

Cheers,
Sam.
 
S

Sambo

Well, the /MR was connected to the /OE of the 2716 and the address
decoder /ROM CS is connected to the /CE. I used address decoder in
case I want to add static RAM later if the I want to expand the
circuit. The other decoder idea was stolen from Steve Walz's 7442 and
I though it was not a bad idea so I adapted it.

The complete circuit is at

Oh yes I thought of that later, after I sent it.
http://www.flickr.com/photos/11236051@N08/2235791543/sizes/o/in/set-72157601398953933/

In the schematic I used 2764 instead of 2716 as my circuit CAD doesn't
support 2716 at all. The minimum eprom is 2764 as you've expected.




Was the 80C196 similar to 80C186 which was designed as a controller?
It was used in our telephone automatic line testers in the exchange.
Looks quite complicated!
It's not all that close, it needs to be KC version and I don't like it's
banking crap but when I rescued it from some hard drives 5-8 years ago it's
64K address space with ADC looked great. Microchip has something comparable
by now, but the price per transistor compared to to the current CPUs with
hundrets of millions of transistors...not to mention the banking because they
are trying to save on few extra bus paths, sheesh.


Guess you would be playing with it when yor're retired. LOL.

Thanks for your response, I'll modifiy my circuit as you suggested and
see if it works. BTW the address latch from the 8085 was a 74F373.
Will that have any efftect on my circuit?

Well it sounds like you have it right. Maybe you could try first just blinking the led, or replace the led with small cap.
I didn't find any good page describing the chip, so besides finding out it resets to 0 and has other vectors at the bottom I didn't find out much else. I'd try to make sure all possible interrupts are disabled and besides the initial JMP start_prog put the rest of the program little higher, above the 'vectors'. Saying all that, it is still possible it's the timing but I don't think I can give it a good look tonight.
Another thing, are you sure that particular chip does not have some aditional features,
it used to be nightmare trying to pick a 6800 micro, and trying to reuse unknown one....

Cheers, Sam.
 
Top