[Home]Retro Computing

Home | RecentChanges | Login | Site Index | RSS

Difference (from prior major revision) (no other diffs)

Changed: 42c42
upload:lifeAPL1130.png
upload:lifeAPL1130.jpg

Changed: 102c102
Effective Address Calulation (EA):
Effective Address Calculation (EA):

Contents
1. IBM 1130 Information
1.1. Trivia
2. The Equipment
3. IBM 1130 links
4. IBM 1130 Technical Information
4.1. APL \ 1130 Sample Session
4.2. 1130 Instuction Mnemonics (Machine code)
4.3. Snoopy Calendar
4.4. DMS 2 FORTRAN IV Sample Program Listing

1. IBM 1130 Information

The [IBM 1130] was the first computer I got to play with at the ripe old age of 13. The IBM 1130 was run by the South Australian Education Department at the [Angle Park Computing Centre]. The Education Department had a world leading program in computer education founded and managed by Ian Appleton.

In 1971 Peter (Jock) Smythe, my maths teacher, taught us [BASIC] which was processed using optical mark recognition (OMR) cards, sent to Angle park overnight, and the cards and printout returned the next day; not exactly interactive! From this early beginning I was bitten by the computer bug. In 1972 I was taught [APL] on the IBM 1130; again using OMR cards; and if really lucky we got to use the console of the IBM 1130 for an interactive session. APL was used to enhance the teaching of mathematics. For maths and statistics, APL (invented by [Ken Iverson]) and its [descendant J] (also: [J Language]), are really excellent tools.

IBM had significant involvement at Angle Park via Jim Clementi. During the 70's various computing summer schools were run. The schools had students and teachers from all over the state and even some overseas visitors.

I managed to learn a little [FORTRAN] during one of the summer schools. Later the two Angle Park IBM 1130's were replaced by an [IBM System/370] [model 115]. Through the computing summer schools and evenings at Angle Park Computing Centre (thanks Jock) I ended up with career in Information Technology.

The IBM 1130 is special, not because of any great technological break through, but because of the large number of users who gained access to computers because of its accessibility. There is a generation of IT professionals here in South Australia due to the IBM 1130 and the Angle Park Computing Centre.

Personally, I am incredibly grateful to all of the people involved with the Angle Park Computing Centre and the opportunities that it gave to Soth Australian high schools students in the 1970's.

1.1. Trivia

An interesting side note is that [Grady Booch] got his first exposure to programming on an IBM 1130. [Quote from interview]: ... I pounded the doors at the local IBM sales office until a salesman took pity on me. After we chatted for a while, he handed me a Fortran [manual]. I'm sure he gave it to me thinking, "I'll never hear from this kid again." I returned the following week saying, "This is really cool. I've read the whole thing and have written a small program. Where can I find a computer?" The fellow, to my delight, found me programming time on an IBM 1130 on weekends and late-evening hours. That was my first programming experience, and I must thank that anonymous IBM salesman for launching my career. Thank you, IBM.

2. The Equipment

IBM 1130
upload:ibm1130oper1.jpg
IBM 1442 Card Read-PunchIBM 1132 Line Printer
upload:ibm1130_2.jpg upload:ibm1130_3.jpg

3. IBM 1130 links

4. IBM 1130 Technical Information

4.1. APL \ 1130 Sample Session

This session shows a signon, addtion of the integers 1..100, an addition table for the integers 1..5 and a sign off.
upload:ibm1130_apl.jpg

This is a simple version of Conway's game of life
upload:lifeAPL1130.jpg

4.2. 1130 Instuction Mnemonics (Machine code)

The IBM 1130 had up to 32k 16 bit words.
upload:ibm1130_ins.jpg
FYI: The IBM 1800 had two more instructions CMP and DCM.
Main Registers:
IAR = Instruction Address Register
ACC = Accumulator
EXT = Extension Register
XRx = Index Registers x = 1,2,3

1130 Instruction Set Mnemonics:
LD   = Load ACC                   STO  = Store ACC
LDD  = Load Double (ACC & EXT)    STD  = Store Double (ACC & EXT)
LDX  = Load Index                 STX  = Store Index
LDS  = Load Status                STS  = Store Status
A    = Add ACC                    AD   = Add Double
S    = Subtract ACC               SD   = Subtract Double
M    = Multiply                   D    = Divide
AND  = Boolean And                OR   = Boolean Or
XOR  = Boolean Exclusive Or
SLA  = Shift Left ACC             SLT  = Shift Left ACC & EXT
SLCA = Shift Left and Count ACC   SLC  = Shift Left and Count ACC & EXT
SRA  = Shift Right ACC            SRT  = Shift Right ACC & EXT
RTE  = Rotate Right ACC & EXT     XCH  = Exchange ACC and EXT
MDM  = Modify Memory
B    = Branch
BSC  = Branch or Skip on Condition (Modifier dependent)
       i.e. BP BNP BN BNN BZ BNZ BC BO BOD
BSI  = Branch and Store IAR
MDX  = Modify Index and Skip
WAIT = Halt                       NOP  = No Operation
XIO  = Execute I/O

1800 Additional Instruction Mnemonics:
CMP  = Compare ACC                DCM  = Double Compare ACC & EXT

Short instruction format (one 16 bit word):
                       1
Bits    0...45678......5
        OP---FTTDisp----

OP    is Operation
F     is format 0 = Short
TT    is Tag
Disp  is Displacement

Long instruction format (two 16 bit words):
                       1               1
Bits    0...456789.....50..............5
        OP---FTTIMod----Address---------

OP    is Operation
F     is format 1 = Long
TT    is Tag
I     is Indirect bit
Mod   is Modifier

Effective Address Calculation (EA):
          F = 0            | F = 1, I = 0     | F = 1, I = 1
          Direct Addressing| Direct Addressing| Indirect Addressing
-------------------------------------------------------------------
TT = 00 | EA = Displ + IAR | EA = Add         | EA = C/Add
TT = 01 | EA = Displ + XR1 | EA = Add + XR1   | EA = C/Add + XR1
TT = 10 | EA = Displ + XR2 | EA = Add + XR2   | EA = C/Add + XR2
TT = 11 | EA = Displ + XR3 | EA = Add + XR2   | EA = C/Add + XR3
-------------------------------------------------------------------
    Disp = Contents of displacement field
     Add = Contents of address field of instruction
       C = Contents of location specified by Add or Add + XR

4.3. Snoopy Calendar

See this link for size reasons: SnoopyCalendar.

4.4. DMS 2 FORTRAN IV Sample Program Listing

The following listing shows a simple high school level FORTRAN IV program for the IBM 1130 when running DM2. I recreated this program from memory (I had written a similar program in about 1973) and ran it on the IBM 1130 simulator to get the printer listing.
PAGE   1

// JOB

LOG DRIVE   CART SPEC   CART AVAIL  PHY DRIVE
  0000        1234        1234        0000

V2 M12   ACTUAL 32K  CONFIG 32K

// FOR
*LIST SOURCE PROGRAM
*ONE WORD INTEGERS
C-------------------------------------------------------
C COMPUTE THE CRITIAL VALUES FOR A QUADRAITIC EQN
C 0=A*X**2+B*X+C
C RETURNS DISCRIMINANT, ROOTS, VERTEX, FOCAL LENGTH, FOCAL POINT
C X1 AND X2 ARE THE ROOTS
C-------------------------------------------------------
      SUBROUTINE QUADR(A,B,C,DISCR,X1,X2,VX,VY,FL,FPY)
      REAL A,B,C,DISCR,X1,X2,VX,VY,FL,FPY

C DISCRIMINANT, VERTEX, FOCAL LENGTH, FOCAL POINT Y
      DISCR = B**2.0 - 4.0*A*C
      VX = -B / (2.0*A)
      VY = A*VX**2.0 + B*VX + C
      FL = 1.0 / (A * 4.0)
      FPY = VY + FL
      FL = ABS(FL)

C COMPUTE THE ROOTS BASED ON THE DISCRIMINANT
      IF(DISCR) 110,120,130

C -VE DISCRIMINANT, TWO COMPLEX ROOTS, REAL=X1, IMG=+/-X2
110   X1 = -B / (2.0*A)
      X2 = SQRT(-DISCR) / (2.0*A)
      RETURN

C ZERO DISCRIMINANT, ONE REAL ROOT
120   X1 = -B / (2.0*A)
      X2 = X1
      RETURN

C +VE DISCRIMINANTE, TWO REAL ROOTS
130   X1 = (-B + SQRT(DISCR)) / (2.0*A)
      X2 = (-B - SQRT(DISCR)) / (2.0*A)
      RETURN
C
C NEXT STORE SUBROUTINE ON DISK USING DUP
      END

FEATURES SUPPORTED
 ONE WORD INTEGERS

CORE REQUIREMENTS FOR QUADR
 COMMON      0  VARIABLES      4  PROGRAM    228

RELATIVE ENTRY POINT ADDRESS IS 000A (HEX)

END OF COMPILATION

// DUP

PAGE   2

*DELETE             QUADR
CART ID 1234   DB ADDR  209B   DB CNT   0012

*STORE      WS  UA  QUADR
CART ID 1234   DB ADDR  209B   DB CNT   0012

PAGE   1

// JOB

LOG DRIVE   CART SPEC   CART AVAIL  PHY DRIVE
  0000        1234        1234        0000

V2 M12   ACTUAL 32K  CONFIG 32K

// FOR
*LIST SOURCE PROGRAM
*IOCS(CARD,1132 PRINTER)
*ONE WORD INTEGERS
C-------------------------------------------------------
C PROCESS DATA CARDS WITH A,B,C
C UNTIL A=0
C-------------------------------------------------------

      DATA ICARD,IPRT /2,3/
      REAL A,B,C
      REAL DISCR,XR1,XR2,VX,VY,FL,FPY

      WRITE(IPRT,901)
901   FORMAT(' ------------------------------------------------------')

C READ A B C, IF A=0 THEN EXIT
100   READ(ICARD,801)A,B,C
801   FORMAT(3F8.3)

C     EXIT WHEN A IS ZERO
      IF (A) 110,9000,110

C PRINT A B C
110   WRITE(IPRT,902)A,B,C
902   FORMAT(' QUADRATIC A=',F8.3,' B=',F8.3,' C=',F8.3)

C COMPUTE AND PRINT THE CRITICAL VALUES
      CALL QUADR(A,B,C,DISCR,XR1,XR2,VX,VY,FL,FPY)
      WRITE(IPRT,903) DISCR
903   FORMAT(' DISCRIMINANT=',F9.4)
      WRITE(IPRT,904) VX,VY
904   FORMAT(' VERTEX X=',F9.4,'  Y=',F9.4)
      WRITE(IPRT,905) FL
905   FORMAT(' FOCAL LENGTH=',F9.4)
      WRITE(IPRT,906) VX,FPY
906   FORMAT(' FOCAL POINT X=',F9.4,'  Y='F9.4)

      IF (DISCR) 120,130,140

C -VE DISCRIMINAT, TWO COMPLEX ROOTS
120   WRITE(IPRT,913) XR1, XR2
913   FORMAT(' COMPLEX ROOTS =(',F9.4,'  +/-',F9.4,'I)')
      GO TO 200

C ZERO DISCRIMINANT, ONE REAL ROOT
130   WRITE(IPRT,912) XR1
912   FORMAT(' ROOT  X =',F9.4)
      GO TO 200

C +VE DISCRIMINANT, TWO REAL ROOTS
140   WRITE(IPRT,911) XR1, XR2

PAGE   2

911   FORMAT(' ROOTS X1=',F9.4,'   X2=',F9.4)
C --- GO TO 200

C END OF QUAD
200   WRITE(IPRT,901)
      GO TO 100

C END OF PROGRAM
C DATA FOLLOWS XEQ CARD
9000  CALL EXIT
      END

FEATURES SUPPORTED
 ONE WORD INTEGERS
 IOCS

CORE REQUIREMENTS FOR
 COMMON      0  VARIABLES     22  PROGRAM    270

END OF COMPILATION

// XEQ

------------------------------------------------------
QUADRATIC A=   1.000 B=   0.000 C=   0.000
DISCRIMINANT=   0.0000
VERTEX X=   0.0000  Y=   0.0000
FOCAL LENGTH=   0.2500
FOCAL POINT X=   0.0000  Y=   0.2500
ROOT  X =   0.0000
------------------------------------------------------
QUADRATIC A=   1.000 B=   2.000 C=   3.000
DISCRIMINANT=  -8.0000
VERTEX X=  -1.0000  Y=   2.0000
FOCAL LENGTH=   0.2500
FOCAL POINT X=  -1.0000  Y=   2.2500
COMPLEX ROOTS =(  -1.0000  +/-   1.4142I)
------------------------------------------------------
QUADRATIC A=   2.000 B=   2.000 C=   0.000
DISCRIMINANT=   3.9999
VERTEX X=  -0.5000  Y=  -0.5000
FOCAL LENGTH=   0.1250
FOCAL POINT X=  -0.5000  Y=  -0.3750
ROOTS X1=  -0.0000   X2=  -1.0000
------------------------------------------------------
QUADRATIC A=   2.000 B=   0.000 C=  -4.000
DISCRIMINANT=  32.0000
VERTEX X=   0.0000  Y=  -4.0000
FOCAL LENGTH=   0.1250
FOCAL POINT X=   0.0000  Y=  -3.8750
ROOTS X1=   1.4142   X2=  -1.4142
------------------------------------------------------
QUADRATIC A=   0.500 B=   0.000 C=  -4.000
DISCRIMINANT=   8.0000
VERTEX X=   0.0000  Y=  -4.0000
FOCAL LENGTH=   0.5000
FOCAL POINT X=   0.0000  Y=  -3.5000
ROOTS X1=   2.8284   X2=  -2.8284
------------------------------------------------------
QUADRATIC A=   0.250 B=   2.000 C=  -2.000
DISCRIMINANT=   5.9999
VERTEX X=  -4.0000  Y=  -6.0000
FOCAL LENGTH=   1.0000
FOCAL POINT X=  -4.0000  Y=  -5.0000
ROOTS X1=   0.8989   X2=  -8.8989
------------------------------------------------------
QUADRATIC A=  -4.000 B=   0.000 C=  -4.000
DISCRIMINANT= -64.0000
VERTEX X=   0.0000  Y=  -4.0000
FOCAL LENGTH=   0.0625
FOCAL POINT X=   0.0000  Y=  -4.0625
COMPLEX ROOTS =(   0.0000  +/-  -1.0000I)
------------------------------------------------------
QUADRATIC A=   2.730 B=  -7.200 C=  -3.750
DISCRIMINANT=  92.7899
VERTEX X=   1.3186  Y=  -8.4972
FOCAL LENGTH=   0.0915
FOCAL POINT X=   1.3186  Y=  -8.4056
ROOTS X1=   3.0829   X2=  -0.4455
------------------------------------------------------

Home | RecentChanges | Login | Site Index | RSS
This page is read-only | View other revisions
Last edited September 2, 2015 6:32 pm (diff)
Search: