IBM 5100 Restoration in progress

Santo Nucifora santo.nucifora at gmail.com
Fri Mar 20 12:24:24 CDT 2015


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:
>
>> Screenshot is here:
>> http://vintagecomputer.ca/wp-content/uploads/2015/01/exeros-5100.jpg
>>
>
> 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
>


More information about the cctech mailing list