On Sun, 10 Nov 2013, Ellis Holman wrote:
I have managed to acquire an IBM 5110 Model 2. The
machine immediately
process checks on start-up and shows square blocks on the display.
I've opened the machine up and re-seated all of the cards, but with no
change in behavior. Anyone have some wisdom for me on the 5110?
Square blocks or rectangular blocks? I suppose the latter. That would mean
that everything read from memory is X'FF. Another possibility would be a
screen full with the double-zero character (X'00). This is not good, but
would probably mean that either the first memory bank is malfunctioning,
or the graphics adapter (which does cycle stealing). What do you see if
you switch from normal to register display?
Here's a checklist for troubleshooting:
- open the case
- put the internal switch right to the monitor from RUN to HALT
- power-on the machine
- check the display
You should see the first 1024 bytes (64x16) from the Executable ROS (in
normal display mode) or the first 512 bytes as hex values in register
mode. Until now, the processor hasn't executed a single instruction.
The registers are memory-mapped but on the processor board instead of
being located in RWS. So even if the memory (RWS or ROS) is faulty or
missing (X'FF would be such an indication) the registers should be
displayed (register mode). They are located from 0000-001F for level 0,
0020-003F for level 1, 0040-005F for level 2 and 0060-007F for level 3.
Oh, BTW, are you sure that you have all cards and that they are in the
correct slots?
For reference, here's the disassembly of the beginning of the Executable
ROS; you should see the hex dump on the screen after the procedure above
(start address is 000A!)
; **********************************************************************
; *** BEGIN OF ROS PART 1
; **********************************************************************
0000 000A DW $000A ; R0L0
0002 0000 DW $0000 ; R1L0
; ----------------------------------------------------------------------
0004 2868 MOVE R8, $D0
0006 12BF CTRL $2, #$BF ; switch to meta-interpreter
0008 2056 JMP ($00AC)
; ----------------------------------------------------------------------
; Clear all memory
; (Memory parity check seems to be disabled)
; This will also clear all registers from R4L0
; to R15L3!
000A 1FFF CTRL $F, #$FF ; Reset all devices
000C 0204 MOVE R2, R0
000E 8208 LBI R2, #$08 ; R2 <- $0008
0010 0324 MOVE R3, R2
0012 8300 LBI R3, #$00 ; R3 <- $0000
0014 5321 MOVE (R2)+, R3
0016 012C MHL R1, R2
0018 0126 OR R1, R2
001A C103 SZ R1
001C F009 BRA $0014 ; Loop
; Size installed memory in increments of 8 kbytes
001E 8F1F LBI R15, #$1F
0020 0FFD MLH R15, R15
0022 8FFF LBI R15, #$FF ; start with last address $1FFF
; If there is no memory at the location pointed
; to by R15, a read will return $FF instead of $00
0024 61F8 MOVB R1, (R15)
0026 C10C SNS R1
0028 A00D BRA $0038 ; no memory here
; Next memory location (increment by $2000)
002A 05F4 MOVE R5, R15
002C 01FC MHL R1, R15
002E A11F ADD R1, #$20
0030 0F1D MLH R15, R1
0032 81FF LBI R1, #$FF
0034 C517 SBSH R5, R1 ; done
0036 F013 BRA $0024 ; Loop
0038 10FB CTRL $0, #$FB ; Toggle level 0
003A 1FFF CTRL $F, #$FF ; Reset all devices
; Put $FFFF (halt code) in R7L0
; R7 remains unaltered during bring up diagnostic
003C 0771 DEC R7, R7 ; R7 <- $FFFF
; Test RWS locations $0020-$05FF
003E 8420 LBI R4, #$20 ; R4 <- $0020 (start address)
0040 8606 LBI R6, #$06 ; R6 <- $0006 (high end address)
0042 8104 LBI R1, #$04
0044 011D MLH R1, R1
0046 81C4 LBI R1, #$C4
0048 0203 INC2 R2, R0
004A 0014 RET R1 ; test memory (call $04C4)
Christian