Stockly.com Forums  

Go Back   Stockly.com Forums > Altair 8800 > Altair 8800

Notices

Reply
 
Thread Tools Display Modes
  #11  
Old 02-28-2009, 02:45 AM
philrrtx philrrtx is offline
Junior Member
 
Join Date: Jan 2009
Location: Round Rock, TX
Posts: 11
Thumbs up Instruction set annoyances

I reached the point where I wanted to run a memory test program and discovered two very annoying deficiencies (IMHO) with the 8080 instruction set.

The first annoyance is that the DCX (double register decrement) instruction doesn't set the condition flags based on the outcome of the subtract operation. That makes it less than convenient for use as a 16-bit loop counter. You have to explicitly check to see if both bytes are zero to find out whether you've reached the end of the loop. If the DCX automatically set the condition flags, you could just follow it with a JZ or JNZ to continue or exit the loop. Likewise the INX doesn't set condition flags, but the single register versions (INR/DCR) do. The 8080/8085 programming manual mentioned this as being a feature, but it's hard for me to figure out why they made it that way.

The other annoying thing I found was the behavior of the HLT instruction. I was basically transcoding a memory test I wrote for the PDP-8, where errors lead to halts, and a complete successful pass likewise leads to a halt. The idea is that when the program stops you can see what address it halted at to determine whether it detected an error or was successful. Unfortunately, when the 8080 enters a HLT on the Altair, the address bus gets tri-stated and you can't read the memory address you stopped at. You also can't restart the program without executing a Reset, because Intel made the HLT essentially a "wait for interrupt" instruction. The solution that I resorted to was to replace the HLTs with JMP $. When the program hangs in a tight (very tight) loop, you can at least press Stop and read what address it is looping on to see if you got an error or not.

In any event, my four 4KB synchronous memory cards all pass the test successfully, so it's on to trying to get the Processor Technology 3P+S I/O card working.

Has anyone heard from Grant lately? I sent him e-mail to the address on the web site before I joined the forums, then sent him a PM here, but haven't had a response to either. I'd like to find out what the prospects are of the museum buying a case and dress front panel from him for our box.
Reply With Quote
  #12  
Old 03-09-2009, 09:12 PM
philrrtx philrrtx is offline
Junior Member
 
Join Date: Jan 2009
Location: Round Rock, TX
Posts: 11
Smile Thar be I/O

After a few bumps and stops, I have the Processor Technology 3P+S I/O card working via an RS232 interface with an LSI ADM-3A CRT (a nice terminal contemporary to the Altair). Whoever had this card previously apparently didn't understand just how it worked, because s/he had installed a 7404 inverter chip in an (thoughtfully provided by PT) empty IC slot and had run the TBE (Transmit Buffer Empty) and RDA (Receive Data Available) signals from the UART through it before putting them on the data bus. This made them much more difficult to detect at the CPU (they show up as 0s instead of 1s).

I removed the inverters, after which the PT serial test code almost worked. It was supposed to output lines of characters from 30H to 55H, with or without a delay as determined by a sense switch. You could then set a different sense switch and it would jump to the input test, where it received characters and echoed them back to the interface. Yet a different switch indicated the test was over, resulting in a jump to a HLT. Mine would output one character, input one character, then halt. This was tracked to a failing read of the sense switches. They were all coming in as ONEs, no matter how they were set. When I replaced the sense switch reads with NOPs, the test code worked perfectly, and I could send and receive characters with the terminal.

Some scope probing today reveals that a 7404 inverter chip on the front panel control board appears to be bad; it isn't passing the SNSW read enable signal. I'll need to replace the chip to proceed any further.

BTW, I notice that the front panel control board relies on behavior that I couldn't find described anywhere in the 8080 documentation, and that is that the device address (the argument to an IN or OUT statement) gets sent out on both the high and low bytes of the address bus. The 3P+S I/O card, for example, looks for its address on A0-A7, but the logic for the sense switch read looks for 0FFH on A8-A15. Nothing I found in either the Altair or 8080 documentation states that this is the chip's normal behavior on I/O statements.
Reply With Quote
  #13  
Old 03-24-2009, 03:50 AM
philrrtx philrrtx is offline
Junior Member
 
Join Date: Jan 2009
Location: Round Rock, TX
Posts: 11
Unhappy One step forward, two steps back

I finally got the sense switch read problem sorted out. It turned out to be the 74L30 chip that detected all ONEs on A15-A8 (the I/O device address). I didn't have a 74L30 ready at hand, so currently have a 7430 in the socket. The only disadvantage of that I can think of is it presents a higher loading on the address bus. I'll replace it with the low-power chip as soon as we acquire one.

So, everything seemed to be working correctly. I was able to poke in the test routines for the 3P+S I/O card and the program was responding to the sense switches properly. I put the front panel back on and everything went to hell in a handbasket. The 4K memory card at 0000 disappeared, and one started showing up at 16K, which should have been impossible. It seemed almost like the address bus was screwed up, but there have been no changes to any of that wiring, and the LEDs are giving the correct indications.

After some experimenting, I managed to get three of the 4K memory boards working in the 0–12K range, but the fourth card would not come up at 12K. From what I have read in a number of forum postings (other forums, not here), these 88-S4K cards had a lot of problems, and were sensitive to timing problems, so that may be what's causing the behavior I see. Puzzling, however, is that the whole set of four 4K cards used to work and even passed an intensive memory test. I reached my frustration threshold today, and put the mess aside to work on another project for a while. Grrrrrr...!
Reply With Quote
  #14  
Old 03-27-2009, 10:35 PM
marty marty is offline
Senior Member
 
Join Date: Jun 2007
Posts: 118
Talking programs

Hi PHIL:
Could you please post the programs you are using here for the rest of us ????
Also, I have not had any problems with any of my 4k memory cards...
have you tried each card at all the addresses that you intend to use,,, maybe one or more is mapping to more than one address... THANK YOU Marty
Reply With Quote
  #15  
Old 03-30-2009, 03:40 AM
philrrtx philrrtx is offline
Junior Member
 
Join Date: Jan 2009
Location: Round Rock, TX
Posts: 11
Default Programs and things

Quote:
Originally Posted by marty View Post
Hi PHIL:
Could you please post the programs you are using here for the rest of us ????
Also, I have not had any problems with any of my 4k memory cards...
have you tried each card at all the addresses that you intend to use,,, maybe one or more is mapping to more than one address... THANK YOU Marty
The failing card is correctly detecting its starting address, which can be viewed with a scope at the test point just left of the address switches. I also can see the bus driver disable signal being negated, so it should be putting data on the bus, yet it looks like the bus is floating. We have decided not to worry about fixing it at this point. The 12K we have working is sufficient for our purposes.

The test programs for the 3P+S I/O board I have been using are in the documentation I found for it on Dave Dunfield's site. See http://www.classiccmp.org/dunfield/s100c/ptco/3pps.pdf

Here's the memory test program I wrote:

Code:
                     INSTRUCTION
LABEL	ADR	OCTAL		MNEMONIC	DESCRIPTION
	000	052 051 000	LHLD COUNT	Get number of locations to write
	003	353		XCHG		Move to DE registers
	004	052 053 000	LHLD START	Get starting address
LOOP	007	072 047 000	LDA BYTE1	Get first byte to write
	012	167		MOV M, A	Write in memory address
	013	226		SUB M		Read memory and subtract
	014	312 022 000	JZ CONT1	OK if zero
ERR1	017	303 017 000	JMP ERR1	Error if loops here
CONT1	022	072 050 000	LDA BYTE2	Get second byte to write
	025	167		MOV M, A	Write in memory address
	026	226		SUB M		Read memory and subtract
	027	312 035 000	JZ CONT2	OK if zero
ERR2	032	303 032 000	JMP ERR2	Error if loops here
CONT2	035	043		INX  H		Increment write address
	036	033		DCX D		Decrement count
	037	172		MOV A, D	Check if DE=0
	040	263		ORA E		       by ORing D with E
	041	302 007 000	JNZ LOOP	Go around again
GOOD	044	303 044 000	JMP GOOD	Good if loops here
BYTE1	047	252				First byte to write = 10 101 010
BYTE2	050	125				Second byte to write = 01 010 101
COUNT	051	323 037				Count = 16339
START	053	055 000				Start address


START must contain the first location past the program. COUNT must contain the total memory you have available minus the length of the program (remember, least significant byte first). The test is good if it loops at GOOD. An error has been detected if it loops at either ERR1 or ERR2.
Reply With Quote
  #16  
Old 08-06-2009, 06:24 AM
Forbin376 Forbin376 is offline
Junior Member
 
Join Date: Jan 2008
Location: Oregon
Posts: 14
Send a message via Skype™ to Forbin376
Default I was there when...

Hi Phil,
“I was there when…” in high school we saw the ad for the MITS Altair 8800 in Popular Electronics and all wanted one. Well, I built mine in 1976 as a senior high school electronics project and it is still running today. I went on to sell them and have been (and still am) involved with computers.

The boards you have are the 88-S4K, or 4K Synchronous Dynamic RAM cards. These cards were created by MITS and actually sold for near cost (without the memory chips) to owners of the ill fated 88-MCD or Memory Card Dynamic RAM. These original cards were so badly designed that you could measure 200mv of noise from one side of the card’s “ground” plane to the other. MITS offered these later boards as an “apology” to all of us who had purchased the original cards. They (MITS) gave dynamic RAM quite a bad name and it was shunned in the later Altair/S-100 bus world. The newer 88-S4K cards are a much better design and were fairly temperature stable. However if you have the opportunity to replace them I would recommend it.

About the voltage regulator on the +8V – this was part of a power supply upgrade and is part of the difference between an “Altair 8800” and an “Altair 8800A” – nearly all of the “A”’s have this modification.

You may find this site of interest:
http://frankbarberis.tech.officelive.com/default.aspx

Frank
Reply With Quote
  #17  
Old 08-06-2009, 09:30 PM
philrrtx philrrtx is offline
Junior Member
 
Join Date: Jan 2009
Location: Round Rock, TX
Posts: 11
Default

Quote:
Originally Posted by Forbin376 View Post
Hi Phil,
“I was there when…”
Three of our four S4K memory cards are working OK. Originally all four of them were, but one stopped putting data on the bus for some reason. I was unable to find a schematic for it to troubleshoot more fully, so I've left it as is, mostly working.

As noted in an earlier post on this thread, we are missing the case and dress front panel for the one we have. I have not been able to get any response from Grant, via either direct e-mail or forum private message, about whether he would sell us those items so we can complete our restoration.

Instead, our exhibits expert has said she can duplicate the front panel for us, so we are waiting on that.
Reply With Quote
  #18  
Old 08-07-2009, 02:17 PM
TomL_12953 TomL_12953 is offline
Member
 
Join Date: Jan 2007
Location: Malone, NY USA
Posts: 81
Send a message via AIM to TomL_12953 Send a message via MSN to TomL_12953 Send a message via Yahoo to TomL_12953 Send a message via Skype™ to TomL_12953
Default Memory Test Question

Quote:
Originally Posted by philrrtx View Post
COUNT 051 323 037 Count = 16339
Maybe I'm not understanding something. 16339 should be 723 037 octal (reversed bytes)

So what's the 323 037?

Tom L
Reply With Quote
  #19  
Old 08-07-2009, 02:36 PM
marty marty is offline
Senior Member
 
Join Date: Jun 2007
Posts: 118
Talking memory test

Hi Tom;
The highest bit on an Altair or Imsai (64K memory) will only allow for a 3 in the left side of the octal number, such as 377.
THANK YOU Marty
Reply With Quote
  #20  
Old 08-07-2009, 02:44 PM
TomL_12953 TomL_12953 is offline
Member
 
Join Date: Jan 2007
Location: Malone, NY USA
Posts: 81
Send a message via AIM to TomL_12953 Send a message via MSN to TomL_12953 Send a message via Yahoo to TomL_12953 Send a message via Skype™ to TomL_12953
Default

Quote:
Originally Posted by marty View Post
Hi Tom;
The highest bit on an Altair or Imsai (64K memory) will only allow for a 3 in the left side of the octal number, such as 377.
THANK YOU Marty
Ah! So with my 62K RAM, I'd have 62*1024 = 63488 - length of program (45 bytes) = 63443, convert to octal = 173723, reverse bytes = 723 173 mask off upper bit = 323 173

Is this right?

Thanks for your patience!

Tom L
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Availability of Altair 8800 kits? mathman Altair 8800 1 08-31-2012 08:59 PM
Altair 8800 for sale benalford Altair 8800 8 06-14-2012 01:04 AM
Wanted: Frontpanel for Altair 8800 achra Altair 8800 0 02-16-2011 08:01 PM
Altair 8800 VS 680 lovenewyawkcity Altair 8800 1 06-19-2010 01:52 PM
Case-only Altair 8800? eduardo Altair 8800 1 04-07-2010 12:57 PM


All times are GMT. The time now is 05:31 PM.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc.