deck 21. extra instr for general computing | |
set loopbox O2=800 | |
tr zero O2=453 | |
21 1 1800 00 0000 0970 set loopbox: 0 800 00r nnn | |
if r=0 resets loopbox (= 000 000 000) | |
if r=1 sets loopbox for a-param, with value 0-999 from float | |
contents of register nnn. clears loobox value | |
for b and c. if float value at register is outside | |
range 0-999 program stops at 2222 | |
if r=2 sets loobox for b | |
if r=3 sets loobox for c | |
21 2 0998 00 1000 0000 param1m (const to decrement param) | |
21 3 0997 35 0006 0987 bxa slt 0006 svlb | |
21 4 0996 35 0003 0987 bxb slt 0003 svlb | |
21 5 0995 00 0000 0987 bxc nop svlb | |
21 6 0994 60 0000 0950 fldc rau 0000 setb1 | |
21 7 0993 00 0000 0000 shbx | |
21 8 0992 00 0000 0000 svfc | |
21 9 0991 01 0000 0000 hi01 | |
21 10 0990 50 0000 0000 hi50 | |
21 11 0970 65 1045 0971 ral paramb is nnn0000000 | |
21 12 0971 45 0972 0987 brnz (cont) svlb | |
21 13 0972 16 0998 0973 sl param1m | |
21 14 0973 45 0975 0977 brnz (cont) seta | |
21 15 0975 16 0998 0976 sl param1m | |
21 16 0976 45 0979 0978 brnz setc setb | |
21 17 0977 69 0997 0980 seta ld bxa setbx | |
21 18 0978 69 0996 0980 setb ld bxb setbx | |
21 19 0979 69 0995 0980 setc ld bxc setbx | |
21 20 0980 24 0993 0981 setbx std shbx | |
21 21 0981 65 1023 0982 ral paramc lower acc is nnn0000000 | |
21 22 0982 30 0003 0983 srt 3 00 0nnn 000 | |
21 23 0983 15 0994 8002 al fldc 8002 | |
8002 rau [c] setb1 read float value at [c] as nnnxxxxxee | |
21 24 0984 35 0003 0985 setb2 slt 3 upper acc is 000000nnn | |
21 25 0985 16 8002 0986 setb3 sl 8002 clear lower acc | |
21 26 0986 69 0993 8001 ld shbx 8001 | |
8001 slt [0,3,6] upper acc is 000 000 nnn, 000 nnn 000, or nnn 000 000 | |
21 27 0987 21 1017 1095 svlb stu lbox 1095 save loopbox | |
21 28 0950 21 0992 0951 setb1 stu svfc save [c] float value | |
21 29 0951 44 0952 0987 brnzu svlb if [c] is zero go to save loopbox | |
21 30 0952 46 1315 0953 brmin 1315 if [c] is <0 go to 2222 stop | |
21 31 0953 35 0008 0954 slt 8 upper acc is ee00000000 | |
21 32 0954 11 0990 0955 su hi50 | |
21 33 0955 44 0956 0962 brnzu i00n jump if [c] is in range 0-9 | |
21 34 0956 11 0991 0957 su hi01 | |
21 35 0957 44 0958 0961 brnzu i0nn jump if [c] is in range 10-99 | |
21 36 0958 11 0991 0959 su hi01 | |
21 37 0959 44 1315 0960 brnzu 1315 innn jump if [c] is in range 100-999, else go to 2222 stop | |
21 38 0960 69 0969 0963 innn ld stnnn ixxx | |
21 39 0961 69 0968 0963 i0nn ld stn0n ixxx | |
21 40 0962 69 0967 0963 i00n ld st00n ixxx | |
21 41 0963 24 0984 0964 ixxx std setb2 | |
21 42 0964 65 0992 0984 ral svfc setb2 | |
21 43 1453 60 1009 0965 rau last get last result | |
tr zero: 0 453 bbb ccc | |
goto b if last result is zero | |
goto c if last result is non zero | |
21 44 0965 30 0002 0966 srt 2 | |
21 45 0966 44 1120 0974 brnzu gotoc gotob | |
21 46 0974 60 1045 1027 gotob rau paramb goto | |
21 47 0967 35 0001 0985 st00n slt 1 setb3 | |
21 48 0968 35 0002 0985 st0nn slt 2 setb3 | |
21 49 0969 35 0003 0985 stnnn slt 3 setb3 | |
21 50 0988 00 0000 0000 vacant location | |
21 51 0989 00 0000 0000 vacant location |