First off, thank you for disassembling the 5100 Executable ROS.
I just saw the link to your website and I can say I lived there for a
while. I first saw this 5100 for sale back in April 2014 and I agreed to
buy from the seller at that time, During that time I looked for any
information I could find on the 5100 and read every word of your site. It
didn't make much sense to me because you have to experience the true
hardware first but I appreciated it anyway. It took me just under a year
of patience to get the seller to complete the deal (I think he was worried
about shipping to another country) but it's here now so thank you for your
site. If I can get mine to work, maybe I can help make a 5100 version of
your emulator :)
Early on I tried with the terminator but my I/O cable driver card had
severely rusted ICs. I will try again with the terminator and see if there
is a difference.
I am writing this down for what I am going to check when I get home:
1. Check with terminator
2: Check bus lines as indicated in the IBM 5100 Maintenance manual
Page 3-14:
*Halt code: A*
*Test: Turns all bus in bits on*
*Area tested: A2*, F2, G2, H2*
*Service Aids: Probe the 'bus in' lines on the F2 card. All bus in bits
should be up or pulsing.*
Note: F2 = Base I/O board (525 - 528)
Page 5-22 to 5-25 = Base I/O card F2 logic and wiring
Page 5-24 bottom has references to Bus In lines but I wouldn't know where
to begin probing them.
Your site mentions the A2 connector which is referred to on page 5-15 at
the bottom. I can check that.
Thank you once again and if you can post the full disassembly, I would
appreciate that. If I am able to get past this, I'm fairly certain I won'
t be sailing through the rest of the tests.
Santo
On Fri, Mar 20, 2015 at 5:37 AM, Christian Corti <
cc at informatik.uni-stuttgart.de> wrote:
On Thu, 19 Mar 2015, Santo Nucifora wrote:
Ok, here we go:
0000 0004 DW 0004 ; R0L0
0002 0000 DW 0000 ; R1L0
; ----------------------------------------------------------------------
; Clear memory from $0008 to $01FF
0004 1FFF CTRL $F, #$FF ; Reset all devices
0006 8200 LBI R2, #$00
0008 022D MLH R2, R2 ; R2 <- $0000
000A 0324 MOVE R3, R2
000C 8308 LBI R3, #$08 ; R3 <- $0008
000E 5231 MOVE (R3)+, R2
0010 8402 LBI R4, #$02
0012 C347 SBSH R3, R4
0014 F007 BRA $000E ; Loop
; R3 contains now $0200
; Size installed memory in increments of 16 kbytes
; The last usable memory location will be in R8
; Check if memory at $4000 is present
0016 8840 LBI R8, #$40
0018 088D MLH R8, R8
001A 8800 LBI R8, #$00 ; R8 <- $4000
001C 7888 MOVB (R8), R8 ; ($4000) <- $00
001E 6184 MOVB R1, (R8)-
0020 C10C SNS R1 ;
0022 A01B BRA $0040 ; no memory here, jump
; Check if memory at $8000 is present
0024 8880 LBI R8, #$80
0026 088D MLH R8, R8
0028 8800 LBI R8, #$00
002A 7888 MOVB (R8), R8
002C 6184 MOVB R1, (R8)-
002E C10C SNS R1
0030 A00D BRA $0040 ; no memory here, jump
; Check if memory at $C000 is present
0032 88C0 LBI R8, #$C0
0034 088D MLH R8, R8
0036 8800 LBI R8, #$00
0038 7888 MOVB (R8), R8
003A 6184 MOVB R1, (R8)-
003C C104 SS R1 ; no memory here, skip
003E 088D MLH R8, R8 ; last location is $FFFF
0040 C804 SS R8
0042 0000 HALT ; error, low byte not $FF
0044 10F0 CTRL $0, #$F0
0046 1FFF CTRL $F, #$FF ; Reset all devices
0048 0532 INC R5, R3 ; R5 <- $0201
004A 83AA LBI R3, #$AA
004C 033D MLH R3, R3 ; R3 <- $AAAA
004E 8420 LBI R4, #$20
0050 8705 LBI R7, #$05
0052 077D MLH R7, R7
0054 87FF LBI R7, #$FF ; R7 <- $05FF
0056 8104 LBI R1, #$04
0058 011D MLH R1, R1
005A 8136 LBI R1, #$36 ; R1 <- $0436
005C 0203 INC2 R2, R0
005E 0014 RET R1 ; call $0436
; Clear memory from R9L0 to end of display
0060 8200 LBI R2, #$00
0062 022D MLH R2, R2 ; R2 <- $0000
0064 0324 MOVE R3, R2
0066 8312 LBI R3, #$12 ; R3 <- $0012
0068 8406 LBI R4, #$06
006A 5231 MOVE (R3)+, R2
006C C347 SBSH R3, R4
006E F005 BRA $006A ; loop
0070 381D MOVE $3A, R8 ; last memory location to
R13L1
; Put 0000, 1111, 2222, ... into locations
$0080-00BF
; This is an aid to locate the registers in display
; register mode
0072 87C0 LBI R7, #$C0
0074 0894 MOVE R8, R9
0076 8880 LBI R8, #$80 ; R8 <- $0080
0078 5981 MOVE (R8)+, R9
007A C90C SNS R9
007C 89EF LBI R9, #$EF
007E A910 ADD R9, #$11
0080 099D MLH R9, R9
0082 C872 SE R8, R7
0084 F00D BRA $0078 ; -> -$0E(R0)
; --- Test A ---
; Bus In bit test
0086 7550 MOVB (R5)+, R5 ; write 'A' to $0201
0088 8FFF LBI R15, #$FF
008A 00FE GETB R15, $0
008C CF04 SS R15
008E 0000 HALT
; --- Test B ---
; Op Code test
0090 7550 MOVB (R5)+, R5 ; write 'B' to $0202
0092 351C MOVE $38, R5 ; save R5 to R12L1
0094 A003 BRA $009A
0096 81FF LBI R1, #$FF
0098 311F MOVE $3E, R1
009A 8101 LBI R1, #$01
[...]
So everything looks perfect, except that test 'A' fails. R15 should
contain $00FF after the 'GETB R15, $0', but instead it contains $0005. Now,
that's many bits stuck at zero... (the Bus In lines are active high).
Is there any difference in the value if you run the machine with
terminator (directly attached to the computer) and without terminator?
Are all power cables correctly seated? Somehow I have the impression that
the internal terminator or pullups on the Bus In lines don't work as they
should. Or the input receivers (whatever they are) are toast for 6 out of 8
lines.
According to the 5100 MIM page C-9, a GETB with address 0 is not used, so
should read $FF. Hmm, another thought: Maybe there's an addressing error,
and instead of addressing device 0, it addresses e.g. device 1. You should
definitely also check the DA (device address) lines.
Christian