File RPP1

Directory of image this file is from
This file as a plain text file

[PAGE 1, RUN PROCESSOR
$20
UMB 9Y  [P2,FP WORK AREA
0  [JMP FP PKG
0  [ARG1 ADDR
0  [ARG2 ADDR
0  [ARG3 ADDR
JMP 9O+4  [ERROR RETURN
LMB 9W  [P0
JMP  [RETURN
#9O LDA
0
STC 9O-1
JMP 9O-10
LMB 9W  [P0
JMP 6K  [ARITH ERROR
[
[
[DECIMAL FLOATING POINT ROUTINES
[   AFTER MIKE MCDONALD"S FLOPSY FOR THE PC
[INITIALIZATION
#7A ADAi
 -6001
STC 5A [ARG PTR
SETi5G
 7I    [RESULT BUFFER
SETi5H
 -9N   [#DIGITS
STA 5G [CLEAR 7I
LDAi5A
BSEi
 4000
STC 5B [ARG1
LDAi5A
BSEi
 4000
STC 5C [ARG2
LDA 5B
ROL 1
SCR 1
STC 5R [EXP1
LDA 5C [ARG2
JMP 0
[#ADD ENTRY
#8A CLR
ADD 0
JMP 7A
ROLi1  [SAVE SIGN2
SCR 1
STAi
#5Q  0
COM
ADD 5R
STAi
 0
APOi
 COM
STC 5F [-|DIFF|
RORi1
STAi
#5S        [SIGN2
BCO 5B
SCR 13
STC 5D [XOR SIGNS
ADD 5Q+4
XSK 5D [SKIP SIGNS NOT =
 JMP p+3
AZEi
 JMP 8I [EXPS =
APO
 JMP 8C
[ ARG1>ARG2
#8B LDA
 5B
SET 5B
 5C
STC 5C
LDA 5C
BCL i
3777  [ISOLATE SIGN1
STC 5S [RESULT SIGN
JMP 8D
[
[ SHIFT SMALLER
#8H LDHi5C [LARGER
STAi5G [RESULT
XSKi5F
 APO [SKIP
JMP 8F [SHIFTED ENOUGH
XSKi5H
 JMP 8H
JMP 7J  [EXIT
[
[ FIND LARGER MANTISSA FOR MINUEND
#8I SETi5E
 -9N    [#DIGITS
SET 5I
 5B
SET 5J
 5C
#8J LDHi5I [ARG1
STC 0
LDHi5J [ARG2
COM
ADD 0  [ARG1-ARG2
AZE
 JMP 8B-2
XSKi5E
 JMP 8J
[
[ ARG2>ARG1
#8C LDA
 5Q    [EXP2
STC 5R [RESULT EXP
#8D ADD 5Q+1 [=COM
XSK 5D [SKIP SIGNS NOT =
 ADD 5V [=-1 MAKES LINC NOP
STC 8E+3
[ 5G=7I, 5H=-9N
XSK 5F
 JMP 8H
#8E LDHi5C [LARGER
STC 0
LDHi5B [SMALLER
 NOP  [OR COM
ADD 0
STAi5G [SUM
#8F XSKi5H
 JMP 8E
[PROPAGATE CARRIES IN RESULT BUFFER
#8K SETi5H
 -9N
[ 5G POINTS TO RIGHT END RESULT
#8L LDA 5G
AZEi
 JMP 8N [ZERO DIGIT
APO
 JMP 8P [NEG DIGIT
ADAi
 -11
APOi
 JMP 8O [DIGIT >9
LDAi
#5V  -1
ADM
 5G
#8M XSKi5H
 JMP 8L [NEXT DIGIT TO LEFT
JMP 7J  [EXIT
[
[ ZERO DIGIT
#8N CLR
STA 5G
JMP 8M-4
[
[ DIGIT >9
#8O ADD 5V  [=-1
AZEi
 CLR
STA 5G
LDAi
 -1
ADD 5G
STC 5G
ADD 5W  [=1
ADM 5G
JMP 8M
[
XSKi5H [NOSKIP
#8P ADD 5Y  [=TEN
AZEi
 CLR
STA 5G
LDAi
 -1
ADM
 5G
LDA 5G
ADD 5V [=-1
AZEi
 CLR
APO
 JMP 8P-1
STA 5G
JMP 8M
[
[#SUBTRACT ENTRY
#8Q CLR
ADD 0
JMP 7A [INIT
BCOi
 4000  [INVERT SIGN
JMP 8A+3
[
[#MULTIPLY ENTRY
#8R CLR
ADD 0
JMP 7A
ROLi1
SCR 1
ADD 5V [=-1
ADD 5R [EXP1
STC 5R [RESULT EXP
RORi1
BCO 5B
BCLi
 3777
STC 5S
STAi5G
STAi5G
STAi5G [CLEAR RESULT
XSKi5H
 JMP p-2
COM
STC 8Z-2 [PRESET
SETi5H
 -9N
SETi5G
 7I
SETi5E
 -9N
#8S SET 5I
 5E
SET 5F
 5C    [ARG2 PTR
SET 5J 
 5G    [RESULT PTR
LDHi5B [MULTIPLIER DIGIT
AZEi
 JMP 8Z-3 [ZERO MULTIPLIER
STC 5U
#8T LDHi5F
MULi
#5U  0
ADMi5J
XSKi5I
 JMP 8T
SROi
 0
 JMP 8W [FOR GUARD DIGITS
#8Z XSKi5E [NS
XSKi5G [NS
XSKi5H
 JMP 8S [NEXT MULTIPLIER DIGIT
[ PROPAGATE CARRIES
[   AC=RIGHTMOST DIGIT
SETi5G
 7I+9N+2
SETi5H
 -9N-2 [#DIGITS+2 GUARD
#8U SETi5F
 0     [CLEAR CARRY BUFFER
[ HUNDREDS
ADAi
 -144
AZEi
 CLR
APO 
 JMP 8X-2
STC 5U
ADD 5Y [=TEN
ADD 5F
STC 5F [CARRY
ADD 5U
JMP 8U+2 [MORE HUNDREDS
[
[ FOR 2 GUARD DIGITS
#8W SROi
  3333
 JMP 8Z+1
CLR
STC 8Z-2
JMP 8Z+1
[
ADAi
 144
[ TENS
#8X ADAi
#5Z  -12
AZEi
 CLR
APO
 JMP 8Y
XSKi5F [+1
JMP 8X
[
#8Y ADD 5Y [TEN
AZEi
 CLR
STA 5G
LDAi
 -1
ADM
 5G
LDA 5G
ADD 5F [CARRY
XSKi5H
 JMP 8U [NEXT DIGIT TO LEFT
STA 5G
[EXIT
#7J LDAi5A
BSEi
 4000
STC 5C
SETi5G
 7I
SETi5H
 -9N
SETi5I
 -9M
LDA 5G
AZEi
 JMP 7L
LDAi
#5W  1
ADM
 5R   [RESULT EXP
LDA 5G
AZEi [SKIP
[FIND FIRST NONZERO DIGIT
#7L LDAi5G
AZE
 JMP 7N
ADD 5V  [=-1
ADM
 5R    [RESULT EXP
XSKi5H
 JMP 7L
[ZERO RESULT
#7M LDAi
 2000
STA 5C
CLR
STAi5C
XSKi5I
 JMP p-2
#7R XSKi5A
LDAi
 6001
ADD 5A
STC p+1
RETURN
[
#7N LDAi
#5R  0   [RESULT EXP
SCR 12
AZEi
 JMP 7O
APOi
[OVERFLOW JMP
JMP 7R+1 [ERROR RETURN
[UNDERFLOW PROCESSING
LDA i  [CAUSE ERROR RETURN AFTER 0 RESULT
-1
ADM
5A
JMP 7M  [ZERO RESULT
[
#7O ADD 5R  [RESULT EXP
AZEi
 CLR
BCLi
 4000
ADD 5S [RESULT SIGN
STA 5C
LDA 5G
AZEi  [SKIP
#7P LDAi5G
STHi5C
XSKi5H
 APO
JMP 7Q
LDAi5G
STHi5C
XSKi5H
 APO [SKIP
JMP 7Q+2
XSKi5I
 JMP 7P [NEXT 2 DIGITS
JMP 7R  [RETURN
#7Q CLR
STHi5C
XSKi5I
 JMP 7M+3
JMP 7R [RETURN
[
[#DIVIDE ENTRY
#9A CLR
ADD 0
JMP 7A
ROLi1
SCR 1
COM
ADD 5R [EXP1
STC 5R [RESULT EXP
RORi1
BCO 5B [XOR SIGNS
BCLi
 3777
STC 5S
[ DIVIDEND TO BUFFER
LDHi5B [DIVIDEND
STAi5G
XSKi5H
 JMP p-3
CLR
STAi5G [CLEAR GUARD
STAi5G
[ DIVISOR TO BUFFER
SETi5H
 -9N
LDHi5C [DIVISOR
STAi5G
XSKi5H
 JMP p-3
CLR
STAi5G [CLEAR GUARD
STAi5G
[ 1ST DIGIT
#9L LDA
 7H
AZEi
 JMP 9K [ZERO DIVISOR
ADAi
 -4
APO
 JMP 9P
COM
ADA i
5
AZEi
 JMP 9S [2ND DIGIT
SHDi
 400
ADD 9R  [=2
SHDi
 300
ADD 5W  [=1
STC 9G+2
JMP 9Q
SETi5H
 -9N
#9T COM
STC 9S+1 [SETUP RESTORE FLAG
LDAi
 JMP 9L
STC 9J+2
JMP 9D+3
#9R  2   [CONSTANT
[ DOUBLE
#9P LDAi
 APO [SKIP
STA
 9E+1
STC 9G+1
SETi5H
 -9N-1
JMP 9T
[ RESTORE FOR MULTIPLY
#9Q LDAi
 MUL
STC 9E+1
ADD 8T+1 [=MULi
STC 9G+1
LDAi
 JMP 9B
STC 9J+2
STC 9S+1 [RESET F|F
JMP 0
#9S SROi
 0
JMP 9Q
#9B SETi5B
 7H-1  [DENOM
SETi5H
 -9N
[ FIND DIGIT NOT=9
#9C LDAi5B
SAEi
  11
 JMP 9D
XSKi5H
 JMP 9C
CLR
SAE
 7I
ADD p+4 [=6HUNDRED
ADAi
 74   [SIXTY
JMP 8U-4 [CARRIES AND EXIT
1130  [6HUNDRED
[
#9D COM
ADD 9C+2 [=11
STC 9G+2
ADD 5V   [=-1
ADM
 5H
COM
ADD 9B+1 [=7H-1
STA
 5B
ADAi
 7I-7H+1
STC 5C
SETi5F
 7H+9N+1
SETi5G
 7I+9N+2
STC 5I  [DENOM CARRY
STC 5J  [NUMER CARRY
#9E LDA 5B
MUL
 9G+2   [D[I]
ADD 5I  [CARRY
ADA 5F
SETi5I
 0      [CLEAR CARRY
#9F STA 5F
ADD 5Z  [=-10
AZEi
 CLR
APO
 JMP 9G
XSKi5I [CARRY
JMP 9F
[
#9G LDA 5C
MULi
 0     [D[I]
ADD 5J [CARRY
ADA 5G
SETi5J
 0
#9H STA 5G
ADD 5Z  [=-TEN
AZEi
 CLR
APO
 JMP 9I
XSKi5J [CARRY
JMP 9H
[
#9I LDAi
 -1
ADD 5G
STC 5G
XSK 5H
 AZE   [SKIP
JMP 9J
ADD 5V [=-1
ADM
 5B
ADD 9E-10 [=7I-7H+1
STC 5C
ADD 5V [=-1
ADD 5F
STC 5F
XSKi5H
 JMP 9E
ADD 5I
ADM 5F
JMP 9G [ONCE MORE FOR NUMERATOR
[
[ HIGH QUOTIENT DIGIT
#9J ADD 5J [CARRY
ADM 5G
JMP 9B
[
[ ERROR: DIVIDE BY ZERO
#9K ADD 7J+2 [=4000
STA
 7I+1  [FORCE ERROR FOR 0|0
STC 5R [FORCE EXP OVERFLOW
JMP 7J [EXIT ROUTINE
[
[BOOKKEEPING
#5Y 12
9N=10
9M=4
7I=3300
7H=7I+9N+3
7Z=7H+9N+1
5A=6
5B=5A+1
5C=5A+2
5D=5A+3
5E=5A+4
5F=5A+5
5G=5A+6
5H=5A+7
5I=5A+10
5J=5A+11
[FLOP3|3
[1Q ASSUMES FP# IS NOT 0
[1R PTS TO FP #
[1R HAS B11=1
[ACC=#L|O ZEROES
[1R IS NOT DISTURBED
#1Q LDA
0
STC p+23
UMB 9W  [P0
LDA
2F+2000  [LEN FP #
ADD p+5  [=-4000
ADD 1R
STC 3R
STC 4R  [0->COUNT
[SCAN LOOP
LDA i
-4000
ADM
3R
LDH 3R  [LOAD A DIGIT
AZE
JMP p+3
XSK i 4R  [COUNT 0
JMP p-10
[LOAD RESULT
LDA
4R
JMP  [RETURN
[1R,3R,4R
[1R PTS TO FP#
[[0] RETURN: NO MORE OUTPUT
[[0]+1 NORMAL RETURN
[
[EXIT SUBROUTINE
SET i 0  [RIG LINKAGE TO
JMP 1T  [INITIAL STATE
LDA i
-1
ADM
1V
#1U STC 1V-2
ADD 0
STC 1V+5  [LOCAL LINKAGE
LDA i
0
LMB 9W  [P0
#1V JMP  [EXIT
[ENTRY TO PRINT ROUTINE
XSK i 0  [ASSUME NORMAL EXIT
LDA 
0
STC 1V
JMP 1T  [RETURN
[
[
#3V SET 4R
0  [SAVE LINKAGE
LDA i
14  [SPACE
JMP 1U  [OUTPUT SPACE
JMP 4R  [RETURN
[
#4V SET 4R
0
APO
JMP p+4
LDA i
14  [SPACE
JMP p+3
LDA i
"0-;
JMP 1U  [OUTPUT SIGN
JMP 4R  [RETURN
#1T SET 3R
1R
LDA i 3R
AZE
JMP p+5
[FP#=0
JMP 3V  [OUTPUT SPACE
JMP 1U  [OUTPUT
JMP 3V  [OUTPUT SPACE
JMP 1U-6  [TERMINAL RETURN
[NON-ZERO FP #
JMP 1Q  [COUNT RIGHTMOST 0
COM
STC 3Q
[OUTPUT SIGN
LDA 1R  [S|EXP
JMP 4V
LDA 1R  [S|EXP
ROL 1
SCR 1
APO i
AZE i
[JMP=>E=<0
JMP 3U
[E>0
ADA i
-10  [=-8
APO
[JMP=>E=<8
JMP 4U
[E>8
[FULL CONVERT
#4Q SET 3R
1R
LDH i 3R  [DIGIT 1
JMP 1U
LDA i
"0.;  [DP
JMP 1U  [OUTPUT DP
JMP 3W  [RETURNS # DIGITS|FP#
ADA i
#3Q 0  [-# RIGHT 0
COM
STC 4R
JMP p+3
LDH i 3R [DIGIT
JMP 1U  [OUTPUT
XSK i 4R
JMP p-3
JMP 3V  [OUTPUT SPACE
[GENERATE EXPONENT
LDA i
"0E;
JMP 1U  [OUTPUT E
[SIGN OF EXP
LDA 1R  [S|EXP
ROL 1  [SIGN OF EXP
JMP 4V  [OUTPUT SIGN OF EXP
[GENERATE EXP DIGITS
LDA 1R  [EXP
ROL 1
APO i
JMP p+4
COM
ADA i
4  [COMPENSATE FOR MINUS
SCR 1
[ACC=|EXP|
ADA i
-1  [FOR DIGIT LEFT OF DP
STA i
#3S 0  [RESIDUE
SET i 3R
4S  [TABLE OF OCTAL EQUIVS
CLR
STC 3T  [0=>H|O 0 NOT SIG
SET i 4R
0  [0->DIGIT
[LOOP TO CALC DIGITS
LDA
3S  [RESIDUE
ADA 3R
AZE i
COM
APO
JMP p+5
XSK i 4R
STA
3S  [UPDATE RESIDUE
JMP p-10
LDA
4R  [CURRENT DIGIT
AZE
JMP 4T  [OUT,SET SIG FLAG
SRO i
#3T 0  [7777=>SIGNIFICANT
JMP 4T
XSK i 3R
SRO i
3333  [DEC DIGIT COUNTER
JMP 3S+5
LDA
3S  [RESIDUE
JMP 1T+6
[OUTPUT DIGIT
#4T JMP 1U
CLR
COM
STC 3T
JMP 4T-7
[E=<0
#3U ADA i
5  [MAX 4 ZERO
[BETWEEN DP AND H|O DIGIT
APO
JMP 4Q  [FULL CONVERT
LDA i
"0.;
JMP 1U  [OUTPUT DP
LDA 1R  [S|EXP
ROL 1
SCR 1
AZE i
JMP p+5
STC 4R
JMP 1U  [OUTPUT 0
XSK i 4R
JMP p-2
JMP 3W  [#DIG|FP#
ADD 3Q
COM
STC 4R
SET 3R
1R
LDH i 3R
JMP 1U  [OUTPUT DIG
XSK i 4R
JMP p-3
JMP 1T+7  [SPACE,TERMINATE
[
[E=<8
#4U ADA i
10  [=8B10
[ACC=E
COM
STA 
4R
ADD 3Q
STC p+11
SET 3R
1R
[OUTPUT E DIGITS
LDH i 3R
JMP 1U
XSK i 4R
JMP p-3
JMP 3W  [#DIG|FP#
ADA i
0
[ACC=#DIG-E-#0
APO
[JMP=>INTEGER
JMP 1T+7  [SPACE,TERMINATE
COM
STC 4R
LDA i
"0.;
JMP 1U  [OUTPUT DP
[OUTPUT DIGITS TO RIGHT OF DP
JMP 4U-5
[CALC # DIG|FP#
#3W LDA i
-1  [EXP NOT COUNTED
UMB 9W  [P0
ADA
2F+2000  [LEN FP #
ROL 1  [TIMES 2
JMP 0  [RETURN
[
[
[TABLE OF COMPLEMENT OF OCTAL EQUIVALENTS 
[FOR DECIMAL POSITIONS
#4S -1750  [=-1000[B10
-144  [=-100[B10
-12  [=-10[B10
[
[
[END OF FP# GENERATOR
1R=11
3R=16
4R=17
[END OF PRINT ROUTINES
2F=1777
6K=1740
9W=0
9X=1
9Y=2
9Z=3
[END OF GLOBAL DEF



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search