UCRL-51940

FLOATING-POINT PACKAGE FOR 8008 AND 8080

Michael D. Maples

October 24, 1975

Prepared for U.S. Energy Research& Development Administration under contract No. W-7405-Eng-48

I_AV~=IENCE I_IVEFIMORE I.ABOFIATOFIY University ol Calilomia ~ Livermore ~ NOTICE

.sponsored by tht: United $~ates G~ven~menl.Neilhe~ the United States nor the United ~tates I’:n,~rgy

of their employees,IIOr lilly of their eorltl’ilctclrs~

warranty~ express t~r implied, or asstltlleS ~t]y legld liability or responsihilit y fnr the accuracy,

apparatus, product or ])rc)eess disclosed, represents that its rise would IIt~l illl’r liege privlttely-owned rights."

Printed in the United States of America Avai.] able from National Technical. information Service U.S. Department of Commerce 5285 Port Royal Road Springfield, Virginia 22151 Price: Printed Copy $ *; Microfiche $2.25

NTIS ""Pages _Sellin_.g Price 1-50 $4.00 51-150 $5.45 151-325 $7.60 326-500 $10.60 501.-1000 $13.60 DISCI.AlMBR This documeut was prepared as an account of work sponsored by an agency of the United States Gnvernment.Neither the United States Governmentnor the University of California nor any of their employees,makes any warranty, express or implied, or assumesany legal liability or responsibility for the accuracy, complete.aess, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use wouldnot infrioge privately ownedrights. Refarenceherein to any specific commercialproduct, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation,or favoring by the United States Govermnentor the University of California. The views and opinions of attthors expressed herein do not necessarily state or reflect those of the United States Goveromentor the University of California, and shall not be used for advertising or product endorsementpurposes.

This report has been reproduced directly from the best available copy. Available to DOEand DOlt contractors from the Office of Scientific aud TechnicalInformation 1’.O. I~ox 62, OakRidge, TN3783~ Prices available from (615) 576-8401,FIB 626-8401 Availableto the public from the National Technical Informalion Service U.S. Department of Commerce 5285 Port RoyalRd., Springfield, VA22161

Workperformed under fl~e auspices of the U.S. Departlnent of Energyby l.awrence LivermoreNational ! .aboratot3, under Contract W-7405-ENG-48. Distribution Category UC-32

LAWRENCE LIVERMORE LABORATORY Universityof Califomia.."Livermore,Ca/#ornia 94550

UCRL-51940 FLOATING-POINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS

Michael D. Maples

MS. Date: October 24, 1975 Contents

Abstract

Introc]uc tion ...... 1 Selection and Use of Operations ...... 2 Ac knowledgmen t s ...... 7 Appendi’~. Source Listing of Float:iug-Po[nt Package ...... A-I

-iii- FLOATING-I’OINT PACKAGEFOR INTEL 8008 AND 8080 MICROPROCESSORS

Abstract

The Lawrence Livermore the mathematical operations -- add, I,aboratory has used a scientific- subtract, multiply, divide, and notation mathematics package that square root -- range from 3 to 77 ms. performs floating-point arithmetic Instructions for using the floating- with Intel 8008 and 8080 micro- point package and a source listing processors. The execution times for of it are included.

Introduction

For the last two years, Lawrence , but this need not be Livermore Laboratory has used a necessary. The appropriate ODT calls scientific-notation mathematics (6 or 7) in the I/0 routines can package (f].oating-point package) with easily be placed by the Intel 8008 and 8080 micropro- equivalents. cessors.* This package allows addition, subtraction, multiplication, Table i. Worst-case execution times division, and square root operations. for the 8080 using a 0.5-~s clock with Table i shows the execution times the package in programmable for these operations. The program read-only memory (PROM). listing of the complete 8080 floating- point package is in the Appendix. Execution times The package uses some I/O calls from Operation (ms) an octal debug routine (ODT) that has become a standard part of all inhouse Add 3 *Reference to a company or product Subtract 3 name does not imply approval or Multiply recommendation of the product by the 7 University of California or the Divide 8 U.S. Energy Research & Development Square root Administration to the exclusion of 77 others that may be suitable.

-i- The floating-point package uses experiments with accuracy require- 24 bits of mantissa for approximately ments of one part per hundred 7-1/2 digits of accuracy in thousand. expressing numeric data. Obviously, this decreases rapidly when complex The package also indicates under- iterative computations are used. flows and overflows by placing zeros Nevertheless, the package is function- in the mantissa and a I00 (octal) ing quite satisfactorily in many the exponent word.

Selection and Use of Operations

All registers described in this intermediate steps are to be ¢al- paper point to four-word internal culated. Then do a call to the INPUT mathematical storage areas unless routine that does the appropriate otherwise stated. Also, before per- conversion (see Table 2). forming any mathematical operation, The resulting floating-point number all needed operands must be placed in has three 8-bit words of mantissa and the same random access memory (RAM) a fourth word that contains 6 bits of along with any needed scratch areas exponent, 1 bit for mantissa sign, (i.e., all must reside in the same and 1 bit for exponent sign (see page of ILAM). Fig. i). Negative mantissa are The first problem is how to get indicated only by the sign bit as the the decimal numbers into the correct mantissa itself is in sign-magnitude format for use in the floating-point form. But the negative exponents are package. The routine INPUT performs in twos complement form. the conversion for all teletypewriter input. Also, it easily adapts to If an addition (LADD) is wanted, converting any BCD numeric inputs place the pointer to one addend in from either digital pane], meters the L-register, the pointer to the (DPM) or thumbwheel switches. To use other addend in the B-register, and a INPUT, set the L-register to point pointer in the C-register. The at the location in RAM ~ere the C-register points to a four-word result of the conversion is to be scratch area used during the addition placed and set the C-register to point process. The result is pointed to by to another location in RAM where the L-register (see Table 3).

-2- Table 2. Program for using INPUT routine. The scratch area is ].7 (octal) long but the converted number is only 4 bytes long.

Program Comments

MVI II, SCRPG ;Set H to match scratch page (RAM). MVI L, STWD ;Store floating-point number starting ;at STWD. MVI C, SCR ;Scratch area. CALL INPUT

Most The subtraction (LSUB) routine STWD s~gn~ficant is very similar to the addition word routine. The L-register holds the STWD " 1 ~ pointer to the minuend and the Least B-register holds the pointer to the I’1 I i I [ J j significantsubtrahend. The C-register once again word 765432 10 is used as a four-word scratch area, STWD~31’II I I I l lJ and the result is placed in the area pointed to by the L-register,

~~Exponenl" sign~ I = negative destroying the previous data residing Mantissa sign~ 1 = negatiSe there (see Table 4). If a multiplication (LMUL) wanted, again use the L-, B-~ and C-registers. The pointer for the multiplicand resides in the L-register, Fig. i. Floating-point word format. This format all.ows repre- the pointer for the multiplier in the sentation of numbers from B-register and the pointer to the ±6.46235 * 10-27 to ±4.61168 * ].018. result in the C-register (see Table 5).

-3- Table 3. Assembly language setup for addition.

Program Comments

~I H, SCRPG ;Set H to scratch page (I~M). MVI L, ADDI ;Pointer four-word addend and final ;result. MVI B, ADD2 ;Pointer 2nd four-word addend. MVI C, SLR ;Four-word scratch area. Call LADD ;Turn control over to addition ;routines.

Table 4. Assembly language setup for subtraction.

Program Comments

~I H, SCRPG ;Set H to match scratch page (RAM). ~I L, SUB1 ;Pointer to four-word minuend and ;final result. MVI B, SUB2 ;Pointer to four-word subtrahend. MVl C, SCR ;Four-word scratch area. Call LSUB ;Turn control over to subtraction ;routines.

-4- Table 5. Assembly language setup for multiplication.

Program Comments

:~IV~.H, SCRPG ;Scratch page pointer (RAM). MVI L, MLCAN ;Pointer to multplicant. ,~FVI B, Mlplr ;Pointer to multiplier. MVI C, Rslt ;Pointer to result. CALL LMUL ;Turn control over to multiply ;routine.

Division (LDIV) like multiplica- number pointed to in the L-register tion uses the C-register to hold the to its ASCII equivalent and types it pointer to the result (quotient). out on the teletypewriter. This The L-register pointer refers to routine uses a 17 octal-word scratch dividend and the B-register pointer area pointed to by the C-register refers to the divisor (see Table 6). (see Table 8). The final data The square root routine (DSQRT) printed in scientific notation. The uses the L-register to point to the output routine like the INPUT routine number to be converted, the B-register is easily modified to output its data to point to the final converted to an internal (memory) register for number, and the C-register to point display on an LED display. to a 16 octal-word scratch area (see Table 7). Table 9 gives a simple program The final routine is the output that allows the user to check out routine (CVRT). This routine con- the various routines and examine the verts the binary floating-point various binary floating-point numbers.

-5- Table 6. Assembly language setup for division.

Program Comments

MVI H, SCRPG ;Scratch page pointer (RAM). ~I L, dvdnd ;Pointer to dividend. MVl B, dvsr ;Pointer to divisor. CALL LDIV ;Turn control over to divide routine.

Table 7. Assembly language setup for square root.

Program Comments

~I H, SCRPG ;Scratch page pointer (RAM). MVI L, NUM ;Number to be converted. ~I B. CUTNM ;Converted number. ~I C, SCR ;16 Octal-word scratch area. CALL DSQRT ;Turn control over to square root ;routine.

-6- Table 8. Assembly language to set up OUTPUT ~outine for its proper execution.

Program Comments

~IVl II, SCRPG ;Scratch page (R~M). ~I L, OUTNM ;Number to be converted from floating ;to decimal and printed in scientific ;notation on teletypewriter. MVI C, SCR ;17 octal-word scratch area. CALL CVRT ;Turn control over to convert routine.

Acknowledgments

Thispackage was based on a mantissa. Overflow-underflow package purchased from David Mead of problems were resolved by Frank Olken. Recognition System. Major modifica- A hardy thanks is given to Eugene tions were made by Hal Brand to allow Fisher for foreseeing the need for ASCII I/0 and a triple-precision such a package.

-7- Table 9. Sample program that takes two operands from the teletypewriter, divides them, and outputs the result to the teletypewriter. This routine can be useful in becoming familiar with the different routines in the floating-point package.

Program Comments

ORG 4500Q ;Program starts at location i00 ;(octal) page SCRPG EQU IIQ ;Scratch page is page ii (octal.). OPI EQU OQ ;Starting location of operand i. OP2 EQU OPI + 4 ;Starting location of operand 2. RSULT EQU OP2 + 4 ;Starting location of result. SCR EQU RSULT + 4 ;Starting location o~ scratch area. MVI |I~ SCRPG ;Set H register to ILAM scratch page. MVI L, OPI ;Pointer to operand I. ~I C, SCR ;Scratch area. CALL Input ;Input operandi from teletypewriter. 5~I L, OP2 ;Pointer to operand 2. MVI C, SCR ;Scratch. CALL INPUT ;Input operand 2 from teletypewriter. MVl L~ OPI ;Operand-i pointer in L-register. MVl B~ OP2 ;Operand-2 pointer in B-register. MVI C, RSULT ;Result to C-register pointer. CALL LDIV ;Divide OP1 by OP2 and place the ;result in RSULT. ~I L, RSULT ;L-pointer now RSULT. MVI C~ SLR Scratch area. CALL CVRT ;Output number starting in location RSULT to teletypewriter. HALT End.

-8- Appendix. Source Listing of Floating-Point Package

I ~O;SOr~ACRO ASSEMBLER, VERP.2 ERRORS= 0 PAGE I

////FLOA]ING [JOIN[ PACKAGEFOR THE HCS8 //I/BY DAVID MEAD ////HODIFIED BY HAL BRAND 9/6/74 ////MODIFIED FOR 24 BIT MANTISSAS ////PLUS ADDED [/0 CONVERSION ROUTINES III/NEi4 ROUTINE COMMENTS ////ARE PRECI’EDED BY / l//tO[HER CHANGESARE" NOTED BY I///MODI~IED BY FRANK OLKEN 6/28175

004400 ORG 44000

ODO060 OUTR EOU 600 ;/SET TO OOf’S rTY ROUTINE 000333 INP EOU 3330 ;/SET READ TO ODT’S INPUT (100300 HINCH EQU 3000 ;MINIHUH CHARACTERISTIC N[TH SIGN EXTENOED 000077 EQU 077Q ;HAXIMUH CHARACTERISTIC NITH SIGN EXTENDED ; ;

004400 15] 014 LDIV: CALL CSIGN ;COHPUTE 51ON OF RESULT 004403 315 332 012 CALL ZCHK ;CHECK IF DIVIDEND = ZERO 004406 302’ 022 Oll JNZ O~ST2 ;IF D[VIOEND .NE. 0 CHECK DIVISOR 0044!1 315 34~ 012 CALL BCHK ;CHECK FOR ZERO/ZERO 004414 312 250 013 dZ INOFC ;ZERO/ZERO = INDEFINITE 004417 303 257 013 JMP NZERC ;ZERO/NONZERO = ZERO 004422 315 342 012 OTST2: CALL 8CHK ;CONE ~ERE IF DIVIDEND ,NE. 0 004425 ]33 014 JZ OFLWC ;NONZERO/ZERO = OVERFLON ;IF NE GET HERE, THINGS LOOK OKAY 004430 135 MOV E,L ;SAVE BASE IN E 004431 151 HOV L,C ;BASE 6 TO I. 004432 315 035 ,.313 CALL DCLR ;CLEAR QUOTIENT MANTISSA SLOT 004435 153 NOV L,E ;~ESTORE BASE IN L 004436 3i5 020 014 CALL ENTI ;DO FIRST CYCLE 004441 ~51 MOV L,C ;BASE 6 TO L 004442 :’;15 351 0]2 CALL OLST ;HOVE QUOTIENT OVER ONE PLACE 004445 026 027 MVI 0,23 ;NUMBER OF ITERATIONS TO O 004447 I53 REP3: M0V L,E 004450 315 012 CALL ENT2 004453 0~5 DCR O ;DEC D 004~5~ 318 0~3 01~ JZ GOON 00~45"] i 75 MCV A,L 004~60 151 NOV L,C ;BASE 6 TO L 0O~N61 I 17 NOV C,A 00~62 315 351 018 CALL DLST ;MOVE QUOTIENT MANT OVER 004~65 HOV A,L ;CPTR TO A

A-1 1 8080 MACROASSEMBLER, VER2.2 ERRORS = 0 PAGE2

004466 131 NOV E,C ;I.PTR TO E 004467 IIV NOV C,A ;CPTR TO C 00~’~70 303 047 Oil jMP REP3 ; 004L~73 315 341 013 GOON: CALL AORS ;CHECK IF" RESUI.T IS NORHALIZED 00~476 372 1]5 011 JH CR[N 004501 I75 NOV A,L ;LPrR TO A 004502 I51 NOV L,C ;CPTR TO L 004503 lit NOV C,A ;LPTR TO C 00~50~ 315 351 012 CALl_ DLST ;SHIFT QUOTIENT LEFT 004507 115 MOV C,L 004510 153 MOV L,E 00~511 315 07I 014 CALL LDCP ;COHPUTE TI4E CHARACTERISTICOF PESUL.T 00h514 311 RET

004515 315 114 013 CRIN: CALL CFCHE ;GET A=CHAR(H,L), E=CHAR(H,B) 004520 223 SUB E ;NEW CHAR = CHAR(DIVIDEND) - CHAR(DVISIOR) 004521 376 I77 CPI 177Q ;CHECK MAX POSITIVE NUMBER 004523 312 133 01~ JZ OFLWC ;JUMP ON 0VERFLON 004526 306 001 I ;ADD ~ SINCE WE DID NOT LEFTSH~IT 004530 315 104 014 CALL CCHK ;CHECK AND SFORE CHARACTERISTIC 004533 311 RET ;RETURN

///7 AOOITION

; ; 004534 257 LAO0: XRA A ;/**’SET UP TO ADD 004535 303 JMP LADS ;/NON DO IT ; ; ; ...... ; //// SUBTRACTION SUBROUTINE

004540 076 200 1.SUB: MVl A,200Q ;/***,SET UP TO SUBTRACT ; SUBROUTINE LADS ; FLOATING POINT ADD OR SUB ; A 128 ON ENTRY SUB ; A 0 ON ENTRY ADD F-S F,FIRST OPER DESTROYED ; BASE II USED FOR SCRATCH 004542 315 357 013 LAOS: CALL ACPR ;SAVE ENTRY PNT AT BASE ~ 004545 315 342 012 CALL BCHK ;CHECK ADDEND/SUB’rRAHEND= ZERO 004550 310 RZ ;IF SO, RESULT=ARGSO RETURN ;THIS MILL PREVENT UNDERFLONINDICATION ON ;ZERO + OR - ZERO

.4.-2 i B0110 MACRO ASSEMBLER. VER 2.2 ER.4ORS :, t} PAGE 3

00,~55! 316 133 013 CALL 004554 -’ll;?234 Ol! JL EO02 ;IF EOUAL, (;O ON 004557 12"1 NOV0, A ;SAVE L.PTR CilAI~ IN D 004560 332 I’/V 01 i ..JC ..LrB 30456;~ 223 SUB E ;L.Gr.B IF HF.RE 004564 3N6 ITI AN I 127 004566 I27 NOV ;DIFFERENCE TO D 00N567 135 MOVE,[ ;SAVE BASF IN E OOuSqO 151 MOVI.,C ;C PTR TO I OO~SqI 054 INR L ;C PTR I ro L 004572 I 63 MOV M,E ;SAVE BASF [N C PTR I 004573 150 HOVI.,B ;B P[R I0 L 004534 303 ~0~ 0]1 JMP NCHK 0045T/ 1"13 LI_TB: MOV ;I...Lr.B IF HERE,BPTR TOA 004600 222 SUB D ;SUBTRACT I.PrR Ct4AR FROMBPTR CHAR 004601 3~6 133 AWl I£’~ 004603 !2~ MOV D,A ;DIFFERENCE [0 D 004604 07~ 030 NCHK: MVl A,24 004606 232 CMP O 004603 322 2]4 011 JNC SHIO 004612 026 030 HV[ D,24 004~ 4 2B’7 BH~O: ORA A 004B~5 ~5 ~’~00~2 ~ALL DA~T 004628 025 DCR O 004R21 $02 214 Oil dNZ 004624 1~5 EOUL: NOVA,I.. 004625 270 CHP 8 004626 302 234 011 ,JNZ EQ02 ;F.GT.S IF L.NE.B 004631 151 MOV ;C PTR TO L 004632 U54 INR L ;C PTR I TO L 004633 156 HOV L,H ;PESTORE[. 004634 315 002 012 EO02: CALL LASD ;CHECK WHAT TO 004637 315 35~ 013 CA~L ACPR ;SAVE ANSWER 004642 336 002 CPI 2 ;TEST FOR ZERO ANSWER 004644 302 £5~ 011 JNZ NOTO 00464~ 303 215 013 JMP WZER ;WRITE FLOArlNO ZERO AND RETURN 00~65~ 026 001 NO~O: ffVl ;WILL TEST FORSUB OON65N ~q2 ANA 0 004655 312 3~6 011 JZ ADDZ ;LSB I INPL. IES SUB 00~660 315 34"1 013 CALL. TSTR ;CHECK NORMAL/REVERSE 00N663 31£ ~11 OI I JZ ;IF NORMAL,GOSUBZ 004666 175 MOV A,L :OTItERNISE REVERSE 004663 150 MOVL ,B ;ROLES 80~670 I0~ HO~ ;OF L AND B

004671 315 046 013 5UBZ: CALL DS~JB ;SUBTRACT SMALLER FROM BIGGER 0046"/4 315 357 011 CALL MANT ;SET UP SIGN OF RESULT 004677 315 347 013 CA1.L TSTR ;SEE IF WE NEED TO INTERCHANGE ;BPTR AND LPTR 004702 312 255 012 JZ NORM ;NO INTERCHANGENECESSARY, SO NORMALIZE

A-3 8080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE 4

;AND RETURN 004705 M0V A,L INTERCHANGE 004706 150 MOV ’.,O ;l. 004707 NOV B,A AND B 004710 171 HOV A,C ;CPTR TO A 0047~] I10 M0V C,B ;8PTR TO C 004712 13b MOV E,L ;LPTR TO |. 004713 I07 NOV 8,A ;CPTR TO 8 004"714 315 044 014 CALL LXFR ;tiOVE BPTR> tO LP r R> 004717 170 M0V 004720 I01 MOV 8,C 004721 I~7 MOV C,A 004722 153 NOV l.,E 004?23 303 255 012 JMP NORM ;NORMALIZERESLII r AND RETURN ; COPY THE LARGER CHARACTERISTIC I0 tHE RESULf 004726 315 133 013 ADOZ: CALl. CCMP ;COMPARI" THE CHARACTERISTICS 004731 322 337 01l JNC AOO2 ;IF CEIARtH,I.~ .GE. CHAR(H,8) CONTINUE 004734 315 215 014 CALL BET! ;IF CHAR(H,L~ .LT. CHAR(H,B) THE COPY ;CHAR(H,B) TO CHAR(H,LI 004737 315 357 0]1 ADO2: CALL MANT ;COHPUTE SIGN OF" RESULT 004742 315 008 013 CALL OAD~ ;ADO MANTISSAS 004745 322 322 013 JNC SCCFG ;IF TH£R IS NO OVFLR - ()ONE 004750 315 370 012 CALL ORST ;IF OVERrI.O~ SHIFT RIGHT 004753 315 266 013 CALL INCR ;AND INCREMENT CHARACTERISTIC 004756 RET ;ALL DONE, SO RETURN ; ; TItIS ROUTINE STORESTHE MANTISSA SIGN IN IHE RESULI THE SIGN HAS PREVIOUSLY BEEN COMPUTED BY LASD. ; 004757 135 MANT: HOV E,L ;SAVE [. PTR 004760 151 M0V L,C ;C PTR TO L 004761 176 MOV A,M ;LOAD INDEX NORD 004"/62 346 200 AN; ;SCARF SIGN 004764 153 NOV L,E ;RESTORE L PTR 004765 054 £NR L ;L PTR 2 004766 054 INR L 004767 O54 INR L ;TO L 004770 137 MOV E,A ;SAVE S,GN IN E 004771 176 MOV 004772 346 177 ANI ;SCARF CHAR 004774 2O3 AOO E ;ADD SIGN 004775 167 H0V M. A ;STORE IT 004776 055 OCR L ;RESTORE 00477"7 055 DCR[. 005000 O55 OCR L ;L PTR 005001 RET

SUBROUTINEI_ASD

A-4 MACROA.C~SEMBI.FR, VER 2.2 ERROR~; = 0 PAGE

uTlt. l~rY ROUTINEFOR LADS CAL.CULATES TRUE OPER ANO SGN RETbRNS ANSbER IN 00500..:’. 315 I’ll 014 I_AF~D: CALLi’-ISFI-, ;FETCII MANT 51GNS, F IN A,O rio5005 273 CI’IP ;COMPARE"SIGNS r~O500G 332 064 012 JC ABCH iF" ,S- MEANSGO 10 A BRANCH O0501l 302 0"/5012 JNZ BBCH ;F- S MEANS GO TO B BRANCH .OOEO! 4 203 ADD E ;SAME SIGN IF HERE, ADD SIGNS 005.01.~ 3."32042 012 JC SHIN ;IF BOIH MINUS, MILl. O’vER~,..OW O05flPO 3~5 341 013 CALf AORS ;BOIH POS IV HERE 005i0~3 362 lOB 012 JP LO00 ;IF AN ADO, LOAD 0 00~J026 31~.) 364 013 CO~l: CALl OCMP ;COMPARE F WllH S 005031 332 124 012 ,.JCL_13] ;S.GT.F.SO LOAD 131 005034 302 lie 012 JNZ LO01 ;F.GT.S,SO LOAD 1 ~95037 O’IB00~ LO0~: HVI A,~ ;ERROR CON[)ITION, ZERO ANSWER

;CHECK FOR ADD OR SUB 00504~ 362 Ilii 012 JP LI28 ;ADD, SO LOAD 128 00~)050 315 364 013 COM2: CALL OCMP ;COMPARE r WITH S 00=~053 332 113 012 JC LO03 ;S.Gr.F,SO LOAD 3 00505~ 302 121 012 JNZ LImB ;FGT.S.SO LOAD O05OBI 303 03"/ 012 JNP LO02 ;ERROR O050~4 315 341 013 ABCH; CALL AORS ;FToS-. SO TEST FOR 00506"~ 3"12 lOB 012 JM LOOO ;SUBTRACT, SO LOAD 0 00507~- 303 oaB 012 ,JHP COMI ;ADD, SO GO TO DCMP 0050-15 3~5 341 013 BBCH: CALL AORS ;F--,S ,SO TEST FOR U05100 372 ~I~ 012 ~FI L128 ;SUB O051O3 303 050 012 JMP COM2 ;ADD 00510G 257 I. 000: XRA A 00~510~’ 3~I RET ~0~)II~ O-IB 00~ LO0I: MY! A,I 005~ IP i~II RET 005~13 0"16 003 L003: MVI A,3 00(5l ~5 ~’. I RET 00511~ 076 ~00 L128: MVl A,~28 00~~~ 20 31 : RET 905~2; 076 201 L!29: MVI A,129 005~23 311 RET 005124 O’l~ 00512~ ~II RET ; SUBROUTINE LMCM COMPARES THE MAGNITUDE OF TWO Ft.OATING PNT NUMBERS Z I IF ,C I IF F.L.T.S. 00512/ 315 )33 0~3 LMCM: CALl. CCMP ;CHECK CHARS 005~ ~2 300 RNZ ;RETURN IF NOT EQUAL 005133 315 3~4 013 CALL OCMP ;IF EQUAL, CHECK MANTS 005136 311 RET

A-5 8080 MACRO ASSEHBLER, VER 2.2 LRRORS = 0 PAGE

/ I

SUP.ROUIINE I.MUL FLOATING POII’IT NULTIPI Y L. PTR ’~ 8 PTR TO C PTR

005137 315 151 014 LMUt. : CALL. CSICN ;COMPUrE SiGN Or RESULT AND S’ORL :l 005i42 315 332 El2 CALL ZCHK ;CHECK FIRSI OPERANDFOR ZERO 005145 312 25? 0~3 JZ NZERC ;ZERO ’ ANYIHING : ZERO 005150 315 342 012 CAIL BCHK ;CHECK SECONDOPERANT) FOR ZFRO 005153 312 257 013 .JZ WZERC :ANYTHING * ZERO = ZERO 005156 135 H0V E,L ;SAVE 1_ PTR 005]57 15l NOV[_,E ;C PrR !O L 005160 315 035 013 CALl DCL.R ;CI R PRO[)uCT NANf 005!63 153 NOV L,E ;L PIR TO L 005164 026 030 MVl 0,24 ;LOAD NUMBERI FERAT[ONS 005166 315 370 KPGO: CAl.[. ORST ;St41f. T !. PTRRIGHT 0051"71 332 244 01@ dC HAOO ;U]I.L ADO.t.9 PTR IF C : 305174 !75 NOVA,[. ; INTERCHANGE 005175 151 HOVl.,C ; L AND 00517S 117 HOV C,A ;C P1RS 005177 315 370 012 [NTR: CALL. ORST ;SHIFf PRODUCTOVER 005202 175 ~OV A,L ; ]NTERCHANGE 005203 ]5~ NOVI.,C I L AND C PTRSBACk, I C 005204 I~7 NOV ;ORIGINAL> 005205 025 DCR D 005206 302 166 012 ¯ JNZ KPGC t.IORE CYCLESIF" Z 0 005211 315 341 013 CA_[. A(IRS :TEST IF RESUL[ 15 NORttAI_ITE[} 005E14 3"72 )00 014 JM L.MCP ;IF NORt-IAL,’ZED GO CONPUrf_C:.IAR 005217 135 M0V E,L ;SAVE LPTR IN E 005220 151 NOV I.,C ;SET L:CPTR 00522] 315 351 012 CALL OI..ST ;I.EFT SHIFT RESULT’0 NORMAL.I;_tL 005224 153 MOV L.,E ;RES CORELPTR 005225 3!5 ;14 0]3 CALL CFCHE ;0THERNISE SET A=C,qA,~{H,: :, C:CHARIH,B) 005230 203 ADD E ;CHAR(RESUL,r) = CHAR(H,I.: + CHAR{H,B] 005231 376 200 CPI 2000 ;CHECK FOR SMALLEST NEGATIVE NUMBER 005233 312 142 014 JZ U~LNC ;IF 50 THEN UNOERFt.ON 005236 326 O01 SLJI ;SUBIRACT ; ro CONP[NSAFEf.OR NORMALIZE 005240 315 104 014 CALL CCHK :CHECK CHARACIERIS[IC AND £TCRE ~ 005243 311 RET ; RE T URN 005244 175 MADO: NOV A,L INTERCHANGE 005245 ~51 NOVt.,C ;1_ ANO 005246 I1"? NOv C.A ;C PTRS 005247 315 006 0i3 CALL OADO ;ACCUHUt.ATE PROOUCT 005252 303 177 012 ,JMP INTR

; SUBROUI INE NORM

A-6 I ~I’080 MAC~O ASSEMBLER, VER 2.~ ERRORS= 0 PAGE 7

THIS SUBROUrlNE WILL NORMALIZE A FL.OAIINO POINT NUMBFR, PRESERVING ITS ORIGINAL SIGN. WE CHECK FOR UNDERFLOWAND SEI THE CONDITION FLAG APPROPRIATELY. (SEE ERROR RETURNS). THER IS AN ENTRY POINT TO FI_OAT A SIGNED INTEGER (FLOAT) AND AN ENTRY POINT ro FLOAT AN UNSIGNED !NTEGER.

Elx tRY POINTS:

NORM NORMALIZE FLOATING PT NUMBERAT tH,L) FLOAT " FLOAT TRIPLE PRECISION INTEGER AT (H,L.) PRESERVING SIGN BIT IN DFXL FI.OAT LINSIGNEO (POS!TIVE) TRIPLE PRECISION AT [H,L)

;REG!STERS ON EXIT: A = CONDITION FLAG (SEE ERROR RETURNS1 D,E : GARBAGE B,C,H,L = SAME AS ON ENTRY

0£--5255 135 NORM: MOV E,L ;SAVE L IN E 005256 315 I01 013 NORMI: CALL GCHAR ;GET CHAR(H,L) IN A WITH SIGN EXTENDED 005261 127 NOV D,A ;SAVE CHAR IN D 00 ..E,262 153 FXLI: MOV L,E ;RESTORE L 005263 315 332 012 FXL2: CALL ZMCHK ;CHECK FOR ZERO MANTISSA 0(15266 312 215 013 az WZER ;IF ZERO MANTISSA THEN ZERO RESULT ()[152"1 REPG: MOV A,M ;GET MOST SIGNIFICANT OF ;MANTISSA 005272 267 ORA A SET FLAGS 005273 3"12 ,313 012 dM 5CHAR IF MOST SIGNFICANT BIT = I THEN NUMBER IS NORMALIZED AND WE GO TO STORE THF CHARACTERISTIC 00527~ MOV A,D OTHERWISE CHECK FOR UNDERFLON 005277 336 300 CPI MINCH COMPAREWITH MINIMUM CHAR 005301 "~12 143 013 dZ WUND !F EQUAL THEN UNDERFLON 005304 315 351 012 CALL DLST SHIF] MANTISSA LEFT 0O5307 025 OCR O DECREMENTCHARACTERSTIC 00531~ 303 271 012 JMP REP8 LOOP AN TEST NEXT BIT 005313 303 303 013 SCHAR: JMP INCR3 STORE THE CHARACTERISTIC USING .THE SAME CODE AS THE INCREMENT

005316 135 DFXL: MOV E,L ENTER HERE TO FLOAT UNSIGNED INTEGER FIRT SAVE L. IN E 005317 054 INR L ’M#KE (H,L) POINT CHAR 005320 054 1 NR L HAKE (H,L) POINT CHAR 005321 054 INR L MAKE (H,L) POINT CHAR 005322 257 XRA A ’ZERO

A-7 I 0080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE B

005323 167 MOV M,A ;STORE A PLUS (+) SIGN 005324 153 MOV L,E ;RESTORE L 005325 026 030 FLOA’: MVI 0.24 ;ENTER HERE TO FLOA[ INTEGF.P :PRESERVING ORIGINAL SiG~ IN (FI,I..|*~ ;SET UP CHARACTERISTIC 005327 303 263 012 dMP FXL2 ;GO FLOAT tHE NUMBER

SUBROUTINE ZCHK

THIS ROUTINE SETS THE ZERO FIAG IF IT OEI’ECTS A FLOATING ZERO AT {H,L}. SUBROUTINE ZMCHK

THIS ROUTINE SETS tHE IF [I OEIE("rs ZERO MANTISSA AT {H,LI

005332 ZCHK: 005332 054 ZMCHK: ]NR I. ;SET L. TO POINT I.ASI BYTE OF MANT,~’.3SA 005333 05H INR [. ;SET I TO POINT ro ,AST BYTI. OF I’IANTI(3SA 005334 1"/6 NOV A,H ;LOAD LEAST SIGNIF~CANT BYTE 005335 055 DCR L. ;L POINTS 10 MIODI.L BYTE 005336 266 ORA M ;OR NITH [.EAST SIL:NFICANT BY:E 005337 055 OCR [. ;t. POINTS TO MOST SIGNFICANT BYrE ;OF MANTISSA (ORIGINAL VALUF ~ 005340 266 ORA M ;OR IN MOST SIGNFICANT BYTE. 005341 311 RE~ ;RETURNSHITH ZEROFI.I,C~ S.F~ APPROPR!AFI-I.Y SUBROUTINE BCHK

; THIS ROUTINE CHECKS (h,8} FOR F!0ATING PI ZERO ; 005342 135 BCHK: NOV E,L :SAVE LPTR IN E 005343 150 NOV L,B ;SEt L=BPTR 005344 315 332 012 CALL ZCHK ;CHECK FOR ZERO 005347 ]53 M0V L,E ;RESTORE L=LPTR G05350 311 RET ;RErURN

; SUBROUrlNE DLST ; SHIFTS DBL FIORD ONE PLACE LF 805351 054 DLST: INR L 005352 05h INR L ;i*’ TP 005353 176 MOV A,M ;LOAD IT 00535~ 267 ORA A ;KILL C~RRY 005355 027 RA:. ;SHIFT IT LEFT 005356 167 M0V M,A ;STORE IT 005357 055 DCR L

8080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE 9

005360 176 NOv A,M ;LOAD IT

A-8 ¯ .’3353F~I 02": I~AL ;SHIFI IT ;.EFT CARRY SCT BY FIRST SHIFT WILl. BE iN LSB OF SECOND 167 MCV H, A 05’.$ DCR L ;/*o~!P EXTENS!ON HOV A ,M UOSX65 02"7 RAL 167 MOV H. A ;!’~,,Al[. DI.)NE [P 00536"’~ RET ; SJEROUTI N[ DRSI ; :.4141[- T~:,DOUBLE NORD ONE P[ ACE" ; :0 TrlE RIGHT ; DOES Nor AFF[.ET D OOh3"/O 135 DRST: HOVE ,l. ;.’.,,*r p /’IODIFIED RIOI’4T SHIFT !’P 005371 176 MOVA, t.’l ;I.OAD F l RSr WORD 005372 037 RAR ;ROTATE 005373 167 MOVM, A :STORE.I I 005374 054 iNR L ; / " ," o IP 3053"75 176 MOVA, 1‘1 ;;.OAD .£E£3NDNOR[) 005376 037 ;SHIFT IT Rl611! 00!3377 167 HOV M,A ;S]ORE 005400 054 ;..~,’, iP EXIENS[ON 00540l 176 HOVA, t’i 00540;.’ 037 RAR 005403 167 MOV M, A 153 NOV t ,E ;/,,~rP -- ALL DONETP G05405 ~ll REr 5UBROUIINE OADD ; ADDS INO DOUBI.E PRECISION ; NORDS, C I IF THERE IS OVRFI.N 005406 DADD: NOVE ,L. ;5AV£ BASE IN E 005407 150 HOVL ,B ;BASE 3 tO |. 054 ’.NR L ;BASE" ~, TO L ’lObq! ! t’ 54 INR L. 17t3 MOVA ,M ;l.f;A~ S MANT~} 0054 l 3 MOVL., E ;BASE TO L [~1354I ’t 054 INR L ;BASE I [0 .. 005415 054 INR I. ;/oo"rP 205 AD9 .4 ;ADD [NO MANTB S 0~4 I’1 i 6"7 1"10’/H, A ;STORE ANSWER 150 NOV L,B ;I**’TP EXI’ENSION f]0542 ~ 054 INR L 0U5422 I NOV A ,hl 0C5423 153 MOV I_, E 005424 054 I NRI. q~542b ADC ."1 167 HOV N, A ;/~°TP -’ ALL DONE 005427 HOV L ,B ;BASE 3 TD L. 0044~0 175 MOV A,M ;MANTA OF S TO A 0 r)54 ~ 1‘!OVL. E ;BASE TO L

A-9 1 8080 MACROASSEMBLER, VER2.2 ERRORS= 0 PAGE ]0

005432 216 AOC M ;ADO WITH CARRY 005433 167 NOV M,A ;STORF ANSWER 005434 3II RET SUBROUTINEDCL.R CLEARS THO SUCCESSIVE LOCATIONS OF MEMORY 005435 257 OCLR: XRA A 005436 167 NOV 005437 054 INR L 005440 167 MOV M,A 005441 054 INR L ; .i ,~ .I o TFEX FFN.C~ ] ON 005442 167 HOV M,A ;,’’’°TP ZERO 3 005443 055 OCR L ; / " ¯ ° rP - ALl. r.~ONE 005444 055 DCR L 005445 311 RET /*’**~ALL NEW OSUB -- SHORTER*** SUBROUTINE DSUB DOUBLE PRECISION SUBTRACT 005446 135 DSUB: MO¢ E,L ;SAVE BASE IN E 005447 054 INR L :/°o*Tp EXTENSION 005450 054 INR [. ;/START WITH LOWS 005451 176 MOV A,M ;/GET ARG 005452 150 MOV L,8 ;/NOW SE~ UF TO SbB 005453 054 INR L 005454 054 !MR L 005455 226 SUB ;/NON DO Ii 005456 153 MOV L,E ;/NON MUST PUT IT BACK 005457 054 INR L 005460 054 INR L 005461 167 NOV ;/PU[ BACK 005462 055 DCR L ;/~°.TP - ALL DON£ 005463 176 HOV A,M ;/GEl LON OF LOP 005464 150 NOV L,B ;/SET TO BOP 005465 054 INR L ;/SET TO BOP LOW 005466 236 SB8 M ;/GET DIFF. OF LOWS 005467 I53 HOV L,E ;/SAVE IN LOP 005490 054 [NR L ;/TO LOP LOW 005471 167 NOV M,A ;/INrO RAM 005472 055 DCR L ;/BACK UP TO LOP HIGH 005493 176 NOV A,M ;/GEl LOP HIGH 005474 150 NOV L,8 ;/SET TO BOP HIGH 005495 236 SB8 M ;/SUB. WITH CARRY 005496 [53 HOV L,E ;/SAVE IN LOP HIGH 005477 167 NOV M,A ;/INTO RAN 005500 3]] RET ;/ALL DONE ¯ HUCH SHORTER SUBROUTINE GCHAR HIS SUBROUTINE RETURNS THE CHARACTERISIIC OF" [HE FLOATING POINT NUMBER POINTED TO BY {H,L) IN THE A REGISTER WITH ITS SIGN EXTENDED INT0 THE

A-.10 MACRO A(.;SEt.IBLER,VER 2.~-; ERRORS = 0 PAGE II

L.EFTMOSTBir. REGISTERS ON EXIT: A =’. C!-IARACTERiSIlC OF (H,!.) NITH SIGN EXTENDEO [. = [ORIGINAL Li + ~ B,C,(~,E,14 : SAHL AS ON ENIRY 005501 GCHAR: INR I_ ;HAKE (H,L) POINT TO CHAR 005502 INR L ;MAKE (H,L) POINT TO CHAR 005503 05k INR t. ;MAKE (H,L) POINT TO CHAR 00550H I NOV A,M ;SET A=CHAR + MANTISSA SIGN 005505 3~6 1"7:1 AN[ l’lqQ :GEl RID OF MANTISSA SIGN BIT 00550"1 .~06 100 AOI IOOQ ;PROPAGATE CHAR SIGN INTO LEFTNOST BIT 00551 i 356 100 XRI IOOQ ;RESTORE ORIGINAL CHAR SIGN BIT 005513 31 I RET ;RETURN NITH (H,L) POINTING TO THE ;CHAR = ORIGINAL (H,L)÷3 ;SOMEONEELSE WILL CLEAN UP

SUBROUTINE CFCHE

THIS SUBRO~JTINE RETURNS THE CHARACTERISTICS OF THE FLOATING POINT NUMBERSPOINTED TO BY {H,L) AND (H,B) IN THE A AND E REGISTERS RESPECTIVELY, WITH THEIR SIGNS EXTENDEDINTO THE I.EFTMOST BIT. REGISTERS ON EXIT:

CHARACTERISTICOF (I-I,L.; NITH SIGN EXTENDED CHARACTERISTIC OF (H,8) NITH SIGN EXTENDED B,C,H,I_ = SAME AS ON ENTRY D = A

0055!u 135 CFCHE : MOV E, L ;SAVE LPTR IN E 01)5515 150 NOV L ,8 ;SET L. = BPTR 605516 CALL GCHAR ;GET CHAR(H,B) WITH SIGN EXTENDED IN 005521 153 HOV L. E ;RESTORE L = LPrR MOV E, A ;SET E=CHAR(H,8) NITH SIGN EXTENDED 0055E3 315 !01 013 CALL GCHAR ;SEt A=CHARtH,L} WITH SIGN [XFENDEO ~055~6 n55 DCR L ;RESTORE L = I.PTP t)055~’7 055 OCR L ;RESTOREL = I_PTR 0055&£ 055 DCR L ;RESTOREL. = I_PTR CaSh31 NOV 0, A ;SET D=A=CHAR(H,L) WITH SIGN EXTENDED QQ5532 31] RET

SUBROUTINE CCMP TNIS S~JBROUTINE COMPARESTHE CHARACTERISTICS OF FLOATING POINT NUMBERS POINTEO TO BY (H,L) AND (H,B).

A-II 1 8080 MACROASSEMBLER, VER 2.2 ERRORS= 0 PAGE

THE ZERO f’L:P-FLOP IS SET CHAR{H,B). IF CrlAR(H,LI IS LE’~S THAN L’.HAR(I~,,B: THEN THE CARRv .BIT HILL BE SET.

REGIST!~R5 ON EXIT:

; CHARACTERISTIC OF (H,!~ WIIF, SIGN EXTENCEC ; CHARACTERIST!C OF :H,B~ [.~ITH SIGN EXIENDEO A ; B,C,I!,L = SAME AS ON ENTRY ; 005533 315 CCMP: CALL CFCHE ;TE!CH CHARACTERTISTICS WI!’I4 S!GN EXTENDED ;INTO A (CHAR/H,L~) AND E :CHAR(H,B}~ REGIS 005536 12"7 MOV D, A ;SAVE CHAR (H,L) 00553? E23 SUB E ;SUBTRACT E ;CHAR(H,B)) 0055~0 02? RAL ;ROTATE SIGN BIT INTO CARRY BIT 005541 ~OV A,D ;RESTOREA=CHAR(I~,L~ 005542 311 RET ;RErURN ERROR RETURNS

THE FOLLONING CODE IS USED TO RETURN VARIOUS ERROR CONDITIONS. IN EACH CASE A FLOATING PCINT NUMBER 15 STORED IN THE 4 I.IORDS POINTED TC BY (H,I.) AND A CLAG IS STORED IN THE ACCUMULATOR.

CONDI[ION FLAG RESU!.F (+) RESULT (-;

; UNDERFLOW 377 000 000 000 I00 000 000 000 300 ; OVERFLOW 17"/ 37? 37? 377 377 3"’7 3?7 @77 ; INDEFINITE 077 377 377 377 077 377 377 3"77 ~77 ; NORMAL C00 XXX XXX XXX XXX XXX XXX XXX XXX ; NORMAL ZERO 000 000 000 000 I00 (AL~AYS ~ETURNS ÷0) ; ; ENTR~ POINTS:

; WUNO - WRITE UNDERFLOW ; WOVR - WRITE OVERFLOW ; WIND - WRITE INOEFINITE ; WZER - ~RITE NORMAL ZERO ; WFLT MACRO VMANT,VCHAR,VFLAG,LABEL ;WRITE FLOATING NUMBER MVl D,VCHAR ;LOAD CHARACTERISTIC INTO D REGISTER CALL NCHAR ;WRITE CHARACTERISTIC LABEL:: MVI A,VMANT ;LOAD MANTISSA VALUE ;ME ASSUHE HERE THAT ALL BYTES OF MANTISSA ;ARE THE SAME CALL WHANT ;WRITE T~E MANTISSA MVl A,VFLAG ;SET ACCUMULATOR TO FLAG ORA A ;SET FLAGS PROPERLY

A-12 ~I08(1 MACRO ASSEMBLER, VER L~.2 ERRORS-~ 0 PAGE 13

RET ;RElURN {NHANr RESTORED(H,L.)) ENDM ; +NUNO: HFLT O, ’OOQ,377Q,LIFi.NI ;14RI rE UNDERFLON

026 I00 + MVI D,OOO40H ;LOAO CHARACTERISTIC INTO O REGISTER 315 237 013+ CALl.. NCHAR ;WRITE CHARACTERISTIC 076 DO0 ÷UFLHI:: MVI A,~OOOOH ;LOAD MANTISSA VALLIE ;ME ASSUHE HERE rHAl ALL BYTES OF MANTISSA + ;ARE 1HE SAME 005552 315 230 013+ CALL NHANI ;WRITE THE MANTISSA 005555 076 377 ~ MVl A,OOOFFH ;SET ACCUMULATOR lO FLAG 00555q 267 + ORA A ;SET FLAGS PROPERLY 005560 311 + RET ;RETURN {WMANT RESTORED (H,L)) 00556I +NOVR: WFLT 377Q,77Q, 177Q,OFt.NI ;~RIIE OVERFLOW 005561 026 077 + MVl D,OOO3FH ;LOAD CHARACTERISTIC INtO D REGISTER 005563 315 237 013+ CALL NCHAR ;WRITE CHARACTERISTIC 005566 076 377 ~OFLWI: : MVl A,OOOFFI4 ;LOAD MANTISSA VALUE ;WE ASSUME HERE THAT ALL BYTES OF MANrlSSA ÷ ;ARE THE SAME 005570 315 230 013+ CALL WMANT ;WRITE rHE MANTISSA 005573 076 177 + MVl A,OOO’/FH ;SET ACCUMULATORTO FLAG 005575 ~67 + 0RA A ;SET FLAGS PROPERLY 005576 311 + RET ;RETURN (NMANT RESTORE[) 005577 *WIND: WFLT 377Q,77Q,77Q,INDFI ;WRITE INDEFINITE 005577 026 077 + HVl D,OOO3FH ;LOAD CHARACTERISTIC INTC D REGISTER 005601 315 237 013+ CALL NCHAR ;WRITE CHARACTERISTIC 00560’~ 076 377 ÷INDFI:: MVI A,OOOFFH ;LOAD MANTISSA VALUE ;WE ASSUMEHERE THAT ~I.L BYTES OF MANTISSA ;ARE THE SAME 005606 315 230 013+ CALL HMANT ;WRITE THE MANTISSA 005611 076 077 + MVl A,OOO3FH ;SET ACCUMULATORlO FLAG 005613 267 + ORA A ;SET FLAGS PROPERLY 005614 311 + RET ;RETURN (WMANT RESTORED(~I,L?) ; 005615 05~ NZER: INR L ;WRITE NORMAL ZERO 005616 054 INR L. 005617 05N [NR L 005620 066 I00 MVI M,IOOQ ;STORE CHARACTERISTIC FOR ZERO 005622 257 XRA A ;ZERO ACCUMULATOR 005623 315 230 013 CALL WMANT ;STORE ZERO MANTISSA 005626 267 ORA A ;SET FLAGS PROPERLY 005627 311 RET ;RETURN ; ROUTINE TO WRITE MANTISSA FOR ERROR RETURNS ; 005630 055 WHANT: DCR L ;POINT LEAST SIGNIFICANT BYTE ;OF MANTISSA 005631 167 MOV M,A ;STORE LSBYTE OF MANTISSA

A-13 1 8080 MACROASSEMBLER, VER 2.2 ERRORS : 0 PAGE

005632 055 OCR L ;POINT TO NEXT I.EAS! S:GN;FICA’Jr ;OF MANTISSA 005633 16"/ MOV M,A ;STORE NLE, BYTE Or 14.~NTISSA 0056~4 055 DCR ;P0]NT TO HCST S[GN]~ lEANT BY~L ; 0F MANT[ 005635 167 MOV ;STORE MSBYTEOF HAt,IT~£SA 005636 31I PET ;RETURN (H,L) POINTS ;FLOATING ~OINT RESLk l" ; ROUTINE TO NRI1E CHARACTER[ [C FOR ERROR RETURNS ; NOTE: NE PRESERVE. ORZOINAL MANTISSA SIGN : ON ENTRY .q CONTAINS NEWCHARACTER,r!sTIC TO 86 STORE’).

005637 054 NC~AR: INR :.. ;SET :,H,I ) TC POINI IC CHA4ACTERISTIC 0056[+0 054 INR .’. ;PART or ABOVE 005841 054 [MR L ;PART OF" AFIOVE 005642 176 NOV A,~.’ :i.OAO CHARACTERISTICA ;AND MARTISSA SIGN 005643 346 200 AWl 200Q ;JUSI KEEP MANTISSA SIGN 005645 262 ORA D ;OR IN NEW CHARACTERES;[C 005646 167 ."-1Ov H,A ,.~.cfORr_ ,~T BACK 005647 311 RET ;RErLJRN WI1FI IH,: I POINT ;OF RESOLT :SOMEONEELSE N]I.L FIX UP (H,i.) SUBROUTINE INDFC

This ROLTINE WRI’rES ,t, FLOATING INDEFINITF, SE’S IHIS NRITFS WRITESA FLOArING POINT I/.IDEF lki "E A[ {H,C~, SET[; THE CONDITION FlAG AND RErURNS

O05650 135 !NDFC: NOV E,L ;SAVE L.PTR IN E 005651 151 NOV L,C ;SET I.=CPTR SO {H,L~--AD.:JR OF RESJLT 005652 315 177 013 CALL AINO ;NR!TE INDEFINITE 005655 153 NOV L,E ;RES ;ORE L=LPTR 005656 311 BET ; RETURN

SUBROUTINE|.IZERC

THIS RObTINE WRITES A NORHALFLAOTING POINT ZERO AT (H,C), SETS THE CONDITIONFLAG AND RETURNS

005657 135 WZERC: MOV E,L ;SAVE LPTR IN E 005660 151 MOV L,C ;SETL:CPTR SO {N,L)=ADDR OF RCSdLT 005661 315 215 013 CALL NZER ;WRITE NORMALZERO 005664 153 MOV L,E ;RESTORE L=LPTR 005665 311 RET ;RETURN SUBROUTINE INCR

A-14 I BOBO MACRO ASSEMBLER, V[.R R.2 ERRORS = 0 PAGE 15

THIS SUBROUTINE INCREMENTS THE CHARACTERISTIC OF THE FLOATING POINT NUMBERPOINFED TO BY {H,i.). HE TEST FOR OVERFLOWAND SET APPROPRIATE FLAG. [SEE ERRRORRETURNS). REGIS1ERS ON EXIT: A = COND!TION FLAG {SEE ERROR RETURNS) D = CLOBBERED B,C,H,L. = SAME AS ON ENTRY

005666 [ NCR: CALL GCHAR ;GET CHAR WITH SIGN EXTENDED 005621 376 877 CPI MAXCH ;COMPARE WITH MAX CHAR PERMITTED 005673 312 I66 013 ,JZ OFLNI ;INCREMENT MOULD CAUSE OVERFLOW 005676 127 M0V D,A ;/SAVE IT IN O 00567~ 024 INR O :/INCREMENT IT 005700 303 306 013 JMP INCR2 ;JUMP AROUNDALTERNATE ENTRY POINT 00570A 054 INCA3: [NR L ;COME HERE TO STORE CI4ARACTERISTIC 005~0~ 054 INR L ;POINT (H,t.} TO CHAR 005"105 054 INR ;POINT (H,t.) TO CHAR 005706 076 177 INCR£: MVI A,[7~Q 005710 242 ANA D ;/KILL SIGN BIT 005711 127 NOV O,A ;/BACK TO D 00571R 176 NOV A,H ;/NOW SIGN IT 005"713 346 200 AWl 200G ;/GET MANTISSA SIGN 005715 262 ORAD ;/PUT TOGETHER 005716 167 NOV M,A ;/STORE IT BACK 005717 055 DCR L ;/NON BACK TO BASE 005"720 055 DCR [ ;I**~TP 00572~ 055 DCR L 005722 257 SCCFG: XRA A ;SET SUCCESSFLAG 005723 RET SUBROUI,INE DECR THIS SUBROUTINE DECREMENTS THE CHARACTERISTIC OF THE FLOATING POINT NUMBER POINTED TO BY (H,L). WE TEST FOR UNDERFLO~ AND 5El APPROPRIATE FLAG. (SEE ERRROR RETURNS).

REGI STERS ON EXIT: A = CONDITION FLAG (SEE ERROR RETURNS) D : CLOBBERED B,C,H,t. = SAME AS ON ENTRY

005724 315 IOI 0]3 CALL GCHAR ;GET CHAR WITH SIGN EXTENDED 005727 376 300 CPI MINCH ;COMPARE WITH MIN CHAR PERMITTED 0057~! 312 ~50 JZ UFLWI ;DECREMENT WOULDCAUSE UNDERFLOW 005754 I27 NOV O,A ;SAVE CHARACTERSTIC [NO

A-15 1 8080 MACRO ASSEMTLER, VER 2.2 ERRORS = O PAGE

005735 025 DCR O ;O[CREt.IENT CHARACTERISTIC 005736 303 305 013 JMP INCR~ ;GO STORE iT BACK

5UBROUI’!NE AOKS RETURN S I IF BASE HAS A I IN NSB 00574l 135 AORS NOVE, L ;SAVE BASE 005"?42 151 t-lOV L, C ;BASE 5 TO I_ 005743 176 MOVA, M ;LOAD IT 005744 267 ORA A ;SET FLAGS 0057L~5 153 NOVL, E ;RESTORE BASE 005"146 311 RET SUBROUI INE TSTR CHECKS C PIR I’O SEE IF" NLS8 ~ RETURNS Z I IF NOT DESTROYS F,D 0057W7 135 TSTR MOVE ,L ;SAVE BASE 005"150 151 NOVL ,C ;C PTR r0 L 00575~ C26 002 MY[ D,2 ;MASK TO 0 005753 ]76 NOVA ,M ;LOAD VALUE 005754 153 NOVL, E ;RESTORE BASE 005755 242 ANA D ;AND VALUE NITM MASK 005756 31] RET SUBROUT[NE ACPR STORES A IN LOCAIlON O= CPIF! LPTR IN E 005757 135 AC,OR MOVE, L ;SAVE LPFR 005780 151 MOVL, C ;CP~R TO L 005751 167 NOV;I, A ;STORE A 005782 153 MOVL, E ;RESTORE BASE 005’763 311 RET SUBROUTINE DCMP COMPARES TWODOUBLE[.ENG-H WORDS C05764 176 DCNP P’OVA, t-1 ;NUN MANIA TO A 005"765 NOVE ,L ;SAVE BASE IN F 005766 150 ."lOV L , O ;BASE 3 TO L 005767 275 CHPpt ;COMPARE NITH DEN HANrA 005"!70 153 HOVL , E ;RETURN BASE TO L 005771 300 RNZ ;RETURN IF NOI THE SAME 005772 654 [NR I. ;L TO NLI~ MAN/B 005773 !78 NOVA ,M ;LOAD IT 005774 150 NOV~ , 8 ;DEN MANTBADD ro i.. 005775 054 ,’NR L ;BASE 4 TO L 005776 276 CMP M 005777 153 40V L, E 006000 300 RNZ ; / ¯ o* rP EXTENSION 006001 054 INR L ;,NON CHECK BYIE 3 006002 054 INR L 006003 176 NOV A ,M ;/GEl FOR COMPARE

A-16 1 8080 HACRO ASSEMBLER, VER 2.2 ERROR6 = 0 PAGE 17

0060O4 150 HOVL.,B 006005 O54 !MR L 006006 054 INR L ;/BYTE 3 NON 00600"7 276 CMP M :/COMPARE 006010 153 MOV L,E ;!~**TP - ALL DONE 00601l REF SUBROUTINE D!VC PERFORMS ONE CYCLE OF DOUBLE PRECISION FLOATING PT DIVIDE ENTER AT ENTI ON FIRST CYCLE ENTER AT ENT2 ALL THEREAFTER 006012 315 351 012 ENT2: CALL DLST :SHIFT MOVING DIVIDEND 0G6015 332 02"1 014 JC OVER ;IF CARRY I,NUM.GT.D 00602O 315 364 OI 3 ENTI: CALL DCMP ;COMPARE NUM WITH DEN 006023 322 027 014 JNC OVER IlF CARRY NOT SE;,NUM.GE.DEN 006026 RET 006027 315 0,t6 0 I 3 OVER: CAL.L DSUB ;CALL DOUBLE SUBTRACT 00603~ 135 MOV E,L ;SAVE BABE IN E 006033 151 NOV L,C ;BASE 6 TO L 006034 054 INR L ;BABE 7 TO L OO6035 O54 iNR I. ;/~*~TP 006036 1"16 NOVA, M 006037 306 001 ADI IADO I 006041 16"1 NOV M,A ;PUT IT BACK 006042 153 MOVl.,E ;RESIORE BASE ro L. 006043 311 RET ; SUBROUTINE LXFR ; MOVES CPTR TO EPTR ; MOVES 3 WORDSIF ENTER AT LXFR 006044 026 004 LXFR: MVI O,4 ;/MOVE 4 WORDS 0F16()46 151 REPS: MOV L.C ;CPTR TO L 006047 176 MOV A,H l CPTR> TO A 006050 153 MOV L,E IEPTR TO L 006051 167 MOV M,A 006052 INR C ;/INCREMENT C 006053 034 !NR E ;/INCREMENT E TO NEXT 006054 025 OSR O I/TEST FOR DONE 006055 3n2 046 014 JNZ REP5 ;/GO FOR FOR TILL D=O 006060 t73 MOV A,E I/NOW RESET C AND E 006061 326 004 SUI 4 I/RESET BACK BY 4 00~063 137 MOV E,A ;/PUT BACK IN E 006064 17~ MOV A,C ;/NON RESET C 006065 326 004 SUI 4 I/BY 4 00606? II? NOV C,A ;/BACK TO C 0060"10 ~11 RET ;/DONE

SUBROI;r I NE LDCP THIS SUBROUTINE COMPUTESTHE CHARACTERISTIC FOR THE FLOATING DIVIDE ROUTINE

A-17 ] 8080 MACROASSEMBLER. VER 2.2 ERRORS= 0 PASE

REGISTERS ON EXIT: A = CONDIT:OK FLAG ISEE ERROR RETIJRKS D,E = G4RBAGE B,C,H,L = SAI.IE AS ON ENTRY REGISTERS ON ENTRY: {H,B) - ADDRESS OFF DIVISOR (H,CI = ADDRESS OF QUOTIENT (H,L} = ADDRESS OF DIVIDEND

006071 315 I14 013 I.OCP: CALL CFCHE ;SET [’=C;-IAR {’H, B ] A=CHARIF~,L) 006074 223 SUB ;SUBTRACT ~’0 GEl" NFN CHARACTERIS11~ 006075 303 I04 014 CCHK ;GO CHECKt-OR OVER/UNE.ERF~OI.J ;AND STORE CHARAC. rERTIS[IC

SUBROUTINE LMCP THIS SUBROUTINECOMPUTES THE CHARACT~;R!SI’:(j FO~ "HE FLOATING NUI. TIPLY ROUT;ME. REGISTERS ON Ex!r: A = CONDITION~L.AG (S~.E ERROqRE]L.IIRN~) D,F ~ GARBAGE B,C,I-I.L = SAI’IE AS ONENTRY

; REGISTERS ON ENTRY: ; ; (H,8} = ~.DDRESS OFF MULTIPI_ICAND (H,C) = ADDRESS OF PRODUCT ; (H,_I = ADDRES~ OF MULTIPLIER ; 006100 315 114 013 LMCP: CALl. CFC I.-IE ;SET E=CI’IAR(H,B:, A=CHARII,-I,I 006103 203 ADD E ;ADO FO GET NE14 CHARACrKRISTIC ;NOI4 FAI.I. IN~.O ]’HE ROUTINE ;WHICH CHECKSFOR OVER/UKDERFLOi.I ;AND STORECI--!ARAC!ERTiS[IC

SBUROUTINECCI.!K THIS SUBROUTINEC, HECKS A CHARACTERISTICIN THE ACCUMUL4TORFOR OVERCLONOR UNDERFLON. IT THEN STORES THE CHARACTERISTIC, PRES£RVING THE PREVIOUSLY COHPUTEDMANT!SSA SIGN.

REGISTERS ON ENTRY:

A-18 8080 MACROASS[.t’IDL.ER, VER2.2 ERRORS= 0 PAGE 19

(H,L} : ADDRESS OF ONE OPERAND IH,B} = AOI)RESS OF O£HER OPERAND (H,C; = ADDRESSOF" RESULT A = NE~I CHARACTERISllC OF" RESULT REG!SrERS,ON EXII’: CONDITION Ft.AG (SEE ERROR RETURNS) = GARBAGF B,C,H,L ~ SAME AS ON ENTRY 006104 CCHK: ;ENTER HERE TO CHECK CHARACTERISTIC [)OGI04 3"76 I00 CP] IOOQ :CHECK FOR 0 TO +63 006106 332 123 014 JC SrORC ;.JUMP IF OKAY 006111 376 200 CPI 200Q ;CHECK FOR +6~ TO +12"/ 006113 332 133 Olq JC OFLNC ;JUMP IF OVERFLOW 006116 376 300 SP! 300Q ;CHECK FOR -12B TO -65 006120 332 142 014 dC ~JFLNC ;JUMP IF’ UNDERFLOW 006123 135 SrORC: MOV E,L ;SAVE t. IN E 006124 151 MOV L,C ;LET L POINT TO RESULT 006125 127 NOV D,A ;SAVE CHARACTERISrIC IN D 006126 315 303 013 CALL [NCR3 :STORE CHARACTERISTIC 006131 153 NOV L,E ;RESTORE L. 006132 311 RET ;RETURN

SUBROUTINE OFLNC

THIS ROUTINE WRITES A FLOATING POINT OVERFLONAT (H,C) SETS THE CONDITION FLAG, AND RETURNS. 006133 135 OFL.WC: MOV E,L ;SAVE L IN E 006134 151 MOV L,C ;SET L=CPTR, SO (H,L]=ADOR OF RESULT 006135 315 161 013 CALL ~OVR ;WRITE OUT OVERFLO~ 006140 153 MOV L,E ;RESTOREL. OOGI½1 RET ;RETURN SUBROUTINE UFLWC

THI3 ROUTINE WRITES A FLOATING POINT UNDERFLOWAT SETS THE CONDITIONFLAG, AND RETURNS. 006142 135 UFLWC: MCV E,L ;SAVE L. IN E 006143 151 NOV L.,C ;SET L.=CPTR, SO (H,L)=ADDR OF RESUI.T 006144 315 143 013 CALL WUND ;NRITE OUT UNDEF[ON 006147 153 NOV I.,E ;RESTORE L 006150 31! RET ;REI~RN

SUBROUIlNE CSIGN THIS SUBROUTINE COMPUTESAND STORE THE MANTISSA

A-19 1 BOBO MACRO ASSEMBLER. VER 2.2 ERRORS = 0 PAGE ~0

S;GN E-OR THE FLOATINGt-lLJ, = [PLY AND DIvinE

RE(;ISIERS ON ENTRY: ~I-t,l } = AI)DRESS OF ONE OPERAND {I-,BI = ADDRESSOF (’I~IER OPERAHD (l.:,~J "- ADDRESSOF RESU[ ~ REGISTERS ON EXIT:

A,D,E -: GARBAGE B.C,H.t. ~ SAME AS ON EN’rRY

00615! 315 171 014 CAt.L MSFH ;SEt A-SIGN(H,L , E:.GIGN(H,EI 00615½ 253 XRA E ;EXCLL, SIVE OR SIGNS TO GFT t.,’kI4 SIGN GU6155 315 161 014 CALL. CSfR ;SIORE SIGN INTO RESUL; 006160 3ii RE’f ; RE[ URN

; SLJBRO[iTINE CS’R ; STORES VALUE IN A !N ; CPTR P ; PUtS LPTR IN ~ 006161 CSTR: t’1OVL,L ;SAVE LPIR ;N E 006162 15! HOV I ,C ;CPTR TO I. 006163 05q IN~ I ;CPTR e 00616N 05~ INR L ;TO t. 006165 05~÷ INR [ 006166 167 NOV N,A ;STORE ANSNER 005167 153 NOV L,E ;LPTR BACK TO L REr SUBROU]INE ; THIS SUBROUTINE FEICHES THE 51GNS OF THE" MANTISSAS OF 1HE FLOATING POINT NUMBERSPOINTED "."0 BY (1~.[.~ AND (H,B) INIO T~IE A AND E REOISFERSRESPECIIVE..~’. REGISIERS DN EXIT:

i : S I ON OF MANT I 5SA OF ( H, L E ~ SIGN OF MANTISSA OF (H,B) B,C,D,H,L = SANE AS ON E~,ITRY 006171 135 NOV E,L ;SAVE LPTR 006176 i50 MOV[.,B ;BPTRTO I.. 006173 05g {NR L ;BP’rR P- 006J74 05N INR L ;/’~’*TP 006175 05g [NR L ;ro L 006176 176 MOV A,M ; 6PTR2>TO A 1 8080 HACRO ASSEMBLER, VER 2.2 ERRORS= 0 RAGE

006177 3’}6 200 ~NI 128 ;SAVE MANT SIGN

A-20 ,]:)G2’l ’. HOVL ,E ;[.PTR BACK rO L 0’3~2’.’32 140V E,A ;STORE BPIR MANT SIGN d’.16.P.O~ !NP... ;I.PTR 2 ":C6204 05" INR!. ; ." ,’ ° " T;-" ~0 G.’~,3’!. INR L ;TO L {’.,! ~F,;-; r) I NOV A,r-~ ; LPTR 2):0 .3~6 2,.36 ~NI ![-;~ ;SAVE I.PFR "IANF SIGN OOF:RI I 05.5 DCR t ;[.PIR BACK O55 52R I. ;lO L. 055 .’ 013.:: I ’+ -.t~: t~ET SLJBROUTINEBCrL. HOVES8PTI,. CHAR TO LPrR CHAR DESTROYSE 8CTI. : MOV[. .... ;I..P]R TOE ¯ ’;.,06 ~? : HOVl..B ;BPTR TO L 0(;6217 ,354 INR t. ;BPTR 2 0 O6P..F’O INR~. ’,I’~ / ~"- *T 006;.’21 P. 5~ [NR L :to L 0062?2 176 NOV A,K ;BPI’R CHAR TO A NOv’ L.,E :L.I:’/F:+ TOL 05~ ! NRL ; ~ PTR 2 00622.5 054 INR t ~TOt. 0O6226 054 INR L 0062£7 167 NOV M.A ;STORE BPFR CHAR IN LPTR CHAR 006230 NOVI. ,E ’,LPT. R TOL RE’I ///SQUARE R007 THE L REG PTS TO THE [0 BE OPERATED0~;. THE B REG PTS FO THE LOC NHERE THE RESULT l!~ TO BE STORED THE C REG PTS TO lTtl0) SCRATCI4 AREA. NHERE: C ~ ITERATION COUN1 C+l = L REG C÷2 = B REG C÷3 TO C+6 = INTRL REG I C÷7 TO C+I0 "" INTRL REG 2 C+II T0 C+t~ = INTRL REG3 C+15 ~ 006232 175 [)SORT: HOV A,L ;STORE L IN 006233 151 MOV L,C ;~N[} NRD SCRTCH 006234 066 000 MY! M,0 ;INITIALIZE ITER CCUNT 0062S6 05~ INR L 0Q6231 167 MOV M,A OOf~(7MACRO ASSEMBLER. VER 2.2 ERRORS = 0 PAGE 22

G06240 054 INR t. ;STR 8 IN 3RD 00524! 160 MOV M,8 ;WRO 0r SCRTCH 006242 054 INR L ;SET C TO INTRL. 006243 1;5 MOVC,L ;REG I 006244 157 HOV L,A ;SET L PTR AT 006245 174 NOV A,H ;SEt REGS FOR COPY

A-21 006246 315 210 016 CALL COPY ;CPY TC INTRL REGI 006251 315 046 016 CALL GCHR ;PUT CHR IN A 006254 107 MOV B,A ;MAKE COPY 006255 346 2OO ANI 2000 ;CK NEG 006257 302 031 015 JNZ ERSO 006262 ]70 HOV A,B 006263 346 I00 AN! ]OO0 ;CK NEG EXP 006265 170 HOV A,B 006266 312 3O2 014 JZ EPOS 006271 037 RAR ;OlV BY 2 O062?2 346 ANI 1’770 0062?4 366 I00 ORI I000 ;SEr SIGN BIT 0062’76 167 MOV M,A ;SAVE ISl APPROX 00627’7 303 3O6 014 JHP AGN4 006302 03"7 EP06: ;OlV BY 2 006303 346 ANI 177Q 00G305 167 MOV M,A ;SAVE IST APPROX 006306 151 AGN4: NOV[_,C ;SET REGS O063O7 17! MOV A,C ;TO COPY IST O0631O 3O6 OO4 AOI 4 ;APPROX 006312 II’? NOV C,A ;INTO INIRL REG 2 0O6313 NOV A,H ;FRH INTR[. REGI 315 210 016 CALC COPY 0063]? MOV A ~ 006320 O04 Sb[ 4 ;HULTIPLY INIRL REG i 006322 MOV L,A 006323 HOV 8,C ;TIMES [NTRL REG2 006324 3O6 OlO ADI lOO ;PLACE RESULT IN 006326 HOV C,A ;INTRI. REG3 OO632? 13’7 012 CALL LMUL 006332 HOV A,C 006333 32~ 010 SUI lOO ;COPY ORG INTO 006335 NOV C,A ;INTRI_ REGI 006336 326 0O2 SUI 2 006340 15"~ HOV L,A 006341 HOV L.H 006342 HOV A,H 006343 210 016 CALL COPY 006346 MOV A,C 006347 010 AOl ]0O ;ADD INTRL MOVL, A ;REG3 TO 006352 HOV8, C ;[NTRL REGI 006353 004 AOI 4 ;ANS TO |NTRL 006355 HOV C,A ;REG3 006356 315 134 011 CALL LADD

A-22 : :H.’~:fi MAGROA£:’-3LMBLER,VER 2.2 ERRORS = 0 PAGE

175 MOVA ,I. %(’?6 004 SLJI 4 ;DIV [NTR[ REG ~ I[I’l NOV B.A ;B’Y INTRI_ REG2 326 004 SU! N ;PIJ t ANSWIt’l INTR[. L Or’,.’J67 ! 17 MOV C,A ;REGI O06370 315 000 011 CAL=t. DlV 006373 315 046 0)6 CALL GCHR 006376 326 O01 SUI I 006400 345 177 A’tI177,3 ~06402 167 MOV M, A 006403 :71 MCV A,C 006404 ~6 003 SUI [{ ~C PT£ TO [NrRL REG I 006405 157 MOV I.,A ;GET ITER 005407 I06 NOV 8oM ;COUNT NON INCR 006410 004 INR[-3 006411 160 MOV M,B 0064~ 2 !7D MOV A,B 0054I ~ 376 005 CPI 5 ;IF = 5 RTNANS 0064~ 5 ~02 306 OIN JNZ AGN4 ;OTHERNISE CONT 006420 151 MOV L,C 006421 055 At.DN: DCR L ;COPY ANS INT0 006422 I16 MOVC,M ;LOC REQUESTED 00642Z 054 I NR L 90@424 174 NOV A,14 006425 315 210 016 CALl.. COPY O06h 30 ZIi RET 1.51 ER%Q: HOVL.,C OOG432 315 215 013 CALL NZER ;WRITE A F,..OATINO ZERO 303 021 015 JMP AI_DN ; C+l :- L. REG

; ; /.’I/ 5 DIGI IN(.; PT. OUTPUI

*~*’*’’ROUTINE TO CONVERTFLOATING PT. *’*NUMBERS TO ASCII AND OUTPUT THEM VIA A SUBROUTINE "~*CALLED 0UTR NOTE: THIS IS CURRENTLY SET *,*TO OOT’S OUTPtJr ROUTINE

006440 3i5 332 012 CVt~l : CALL ZCHK ;CHECKFOR NEI-; Z[.’r~O 006443 302 070 0!5 JNZ NNZRO ;NOT ZERO 086446 014 I NR C ;IT WAS, OFFSET C BY 2 036447 014 INR C 006450 l 51 NOV L,C

A-23 I 8080 HACRO ASSEMBLER, VER2,2 ERRORS= 0 PAGE 24

006451 315 215 013 CALL WZER INRITE ZERO 006454 315 03! 016 CALL SIGN ;SEND SPACE ON POS ZERO ; i 006457 054 INR ;PNT TO DEC|MAL CXPONENF 006460 054 L 006461 054 [NR L 006462 O54 INR L 006463 25~ XRA ;SET IT TO ZERO 006464 167 NOV 006465 303 227 015 JMP NOSKP ;OUTPUT [T 006470 126 NNZRO: NOV 0, M I/GET THE NUMBERTO CCNVERT 006471 054 INR L 006472 106 NOVB, M 006473 054 INR L 006474 136 NOV 006475 054 [NR L ;14 NORD***TP 006476 176 NOV A,H 006477 014 INR C ;/OFFSET SCRATCH POINIER BY 2 006500 014 INR C 006501 MOV L,C IlL NOT NEEDED ANY MORE 006502 162 MOV M,O I/SAVE NUMBER IN SCRATCH 006503 054 INR L 006504 160 MOV M,8 006505 054 INR L 006506 163 NOV M,E ;I***TP 00S507 054 INR L 006510 107 NOV 8,A ;/SAVE COPY OF CHAR & SIGN 006511 346 177 ANI 1770 ;GET ONLY CHAR, 006513 167 NOV M,A ;/SAVE ABS(NUMBER) 006514 376 I00 CPI IOOQ ;CK FOR ZERO 006516 312 125 015 JZ NZRO 006521 326 001 SUl I ;/GET SIGN OF DEC. EXP 006523 346 I00 AN| 1000 ;/GET SIGN OF CHAR. 006525 007 NERO: RLC ;HOVE IT TO SIGN POSITION 006526 054 INR L ;/HOVE TO DECIMAL EXP. 006527 167 MOV M,A ;/SAVE SIGN OF EXP. 0O653O 170 NOV A,8 I/GET MANT. SIGH BACK 006531 315 031 016 CALL SIGN ;/OUTPUT SIGN 006534 056 235 MVI I_,(TEN5 AND 3770) ;/TRY HULT. OR OIV. BY I00000 FIRST 006536 315 172 016 CALL COPT ;/MAKE A COPY IN RAM 006541 315 046 016 TSTB: CALL GCHR ;/GET CHAR. OF NUMBER 006544 107 MOV B,A ;/SAVE A COPY 006545 346 I00 ANI 100O ;/GET ABSOLUTE VALUE OF CHAR 006547 170 MOV A,8 ;/INCASE PLUS 006550 312 156 015 JZ GOTV ;/ALREADY PLUS 006553 076 200 MVl A,2000 ;/MAKE MINUS INTO PLUS 006555 220 SUB 8 ;/PLUS-2OOB-CHAR 006556 3?6 022 GOTV: CPI 220 ;/TEST FOR USE OF I00000 006560 372 I74 015 JM TRYI I/WONT GO 006563 3J5 054 016 CALL MORO ;/WILL GO SO O0 IT

A-24 MACROASSEMBLER, VER 2.2 ERROR.C." :, {. PAGE25

.’305566 ."; 0 b U05 AOI 5 ;z INCREMENTDEC. EXPONENTBY 5 0065!0 I 5"7 HOVP’,A ;/UPD.&TE MEH 00£,571 303 141 r}15 .;M:~fsrB ; ¯ GO "RY AGAIN 0065"14 056 P4I TRYI: MVl t.,(lCl.; AND 3VTQ) ;.NON USE JUST rEN 0065-/6 315 1"72 016 CALL COPT ;/PUT ;T IN RAM 006601 :31b 046 015 TS"I: CALL GCHR. ;/’GET "."’4ARACTERI ST I C 006604 3"16 O01 CP~ I ;,’M,JS’: ’3F’[ IN RANGE1 "’0 6 086606 362 222 015 JP OK " ;/A’I’I. EASTITS I 014.. BIGGER 006611 315 054 016 MOGN= CA[L MORT’.’, ;/M.;’3INUt. OF DIV BY 10 006614 306 001 AT) I ;/!NCR[NFNT DECIMAL EXP, 006616 167 M0V M, A ; :UOOArE HEM 306617 ~,03 20"-’ 01.5 JMP TST I ;/NGI,; TRYAGA[I’4 006622 :376 007 OKI : CPI "? ;/rEST FOR LESS THAN 7 006624 362 211 015 JP MDGN ;~NOPE -- 7 OR GREATER 006627 151 MOSKP= NOV I. ,C ;/SET UP DIGIT COUNT 0065:{0 055 DCR L 006631 055 DCR L ;!IN IST WORDOF SCRAfCH 0066:32 066 005 MVl M,5 ;/t DIGIrS 00661"{4 13"1 NOV E, A ;/SAVE CHAR. AS LEFT SHIFT COUNT 006635 315 377 015 CALL LSF f ;/E,I4[FT LEFI PROPERNUMBER 006640 :376 012 CP1 120 ;/TEST FOR 2 DIGITS hERE ¯ 30664.2 362 122 016 JP T NOD ;/JMP IF 2 DIGITS TO OUTPUT 006645 31.5 303 015 CALL Ol GO ;/OUTPUT FIRST DIGIT ’306650 315 ..327 015 POPD= CALL MULTT ;~M(~L FIPL..Y THE NUMBERBY I0 006653 :316 303 0 CALL OlGO ;/PRIN[ DIGIT IN A 006656 302 250 JNZ POPO ;/MORE DIGITS? 006661 076 305 MVI A,305,3 ;/NO SO PRINT E OOGGE,3 315 060 000 CALL OUfR ;/BASIC CALL TO OUTPUT 006666 315 107 016 CALL GETEX :/GET DECIMAL EXP 00667 I ~ 07 NOV 8 ,A ;/SAVE A COPY (106".’,72 315 NIl .9|6 CALL S !ON ;/OIJTPLJT SIGN 006&’75 1"70 NOVA ,B ;/GET CXP BACK tt06675 346 0"17 AWl 7"~Q ;/GET GOODBITS 006300 515 151 .316 CAL,. CTNO ;/GO CONVERT2 DIGITS 006i03 .306 260 DIGO: AD 1 2500 ;/MAKE A INFO ASCII 006705 315 060 O(JO CALL OLITR ;/OUTPUT DIGIT 005710 151 HOVL ,C ;/GKT D!GIT COUNT 006?I I 055 DCR L ;IB~CK UP TO DIGIT COJNT 006712 055 DCR L 006713 I "/6 HOVA, H ;/TEST FOR DECIMAL PT 006714 376 005 CPI 5 ;/PRINT . AFFER IST DIGIt 00671E 076 256 VVI A. 2560 ;/JUST IN CASE 006"7~0 314 060 [300 CZ OUTR ;/OUTPUT . IF IST DIGIT 006"72:3 126 M0V O,M ;/NON DECREMENTDIGIT COUNT 006724 025 DCR O C 06",’25 ~62 MOV M, O ;/UPDATE MEM AND LEAVE F’LOPS SEr 006"72£.. .3i ~ NET ;/SERVES AS TERM FOR DIGO& CVRT 006"72? b~6 001 MULT’I MVI ;/MULT. BY I0 (START WITH X2l 0057:31 .315 ~?"/ CALL LSF T :/LEFT SHIFT I : X2 0067~4 ;51 MOV L,C ;/SAVE X2 IN ~RESULT= OO6735 O55 DCR L ;/SET TO TOP OF NUMBER

A-25 8080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE 26

006736 ~71 NOV A,C ;/SEI C TO RESULT 006737 306 011 ADI ]lO 00674I 117 NOV C,A ;/NOW C SET RIGHT 006742 174 MOV A,H ;/SHOH RAN TO RAM TRANSFER 006743 315 210 016 CALL COPY ;/SAVE X2 FINAL.L.Y 006746 171 NOV A,C :/MUST RESET C 006747 326 011 SUI llO ;/BACK TO NORMAL 006751 1;7 NOV C,A 006752 036 002 MVl E,2 ;/NOW GET (X2)X4=X8 00675,~ MOV L,C ;/BUT MUST SAVE OVERFI.ON 006755 055 DCR L 006756 315 003 016 CALL TLP2 ;/GET X8 00676~ 151 NOV L,C ;/SET UP TO CALL DAOD O06762 171 NOV A,C ;/SET 8 TO X2 006763 306 012 AOI !20 ;/TO X2 O06765 107 NOV 8,A 006766 315 006 013 CALL DADD ;/ADD TWO LOW NORDS 006771 055 OCRl. ;/BACK UP TO OVERFLON 006772 176 MOV A,M ;/GET IT 006773 150 MOVl.,B ;/NOW SET TO X2 OVERFLOW 006774 055 DCRI. ;/ITS AT B-~ 006775 216 ADC M ;/ADD WITH CARRY - CARRY WAS PRESERVFO 006776 311 RET ;/ALL DONE, RETURN OVERFLOW IN A 006777 151 LSFT: MOV L,C ;/SET PTR FOR LEFT SHIFT OF NUMBER 007000 055 DCR 1. ;/BACK UP TO OVERFLON 007001 257 XRA A ;/OVERFLOW=0 IST TIME 007002 167 TLOOP: HOV H,A ;/SAVE OVERFLOW 007003 035 TLP2: DCR E ;/TEST FOR DONE 007004 370 RM ;/DONE WHEN E MINUS 007005 054 INR I. ;/MOVE TO LOW 007006 054 INR L 007007 054 INR L ;/*+’TP EXTENSION 0070 0 ~75 NOV A,M ;/SHIFT LEFT 4 BYTES 0070 I RAL 0070 2 67 NOV M,A :/PUT BACK 0070 3 O55 DCR L ;I**’TP - ALL DONE 0070 4 76 MOV A,M ;/GET LOW 0070 5 O27 RAL ;/SHIFT LEFT I 0070 6 67 MOV M.A ;/RESTORE ]T 0070 7 O55 OCR L ;/BACK UP TO HIGH 007020 76 MOV A,M ;/GET HIGH 007021 027 RAL ;/SHIFT IT LEFT WITH CARRY 007022 67 MOV H,A ;/PUT IT BACK 007023 O55 OCR [. ;/BACK UP TO OVERFLOW 007024 76 MOV A,M ;/GET OVERFLOW 007025 O27 RAL ;/SHIFT IT LEFT 007026 303 002 016 JMP TI.OOP ;/GO FOR MORE 007031 346 200 S[GN: ANI 2000 ;/GET SIGN BIT 007033 076 240 MVI A,240Q ;/CPACE INSTEAD OF PLUS 007035 3~2 042 0~6 dZ PLSV ;/TEST FOR + 007040 076 255 MVl A,255Q ;/NEGATIVE

A-26 1 8~Jf)0 M~CRO ASSEMBLER, YER 2.2 ERRORS = 0 PAGE

C0"!042 .~It. OGO ~00 PI.SV: CALf. OUIR ;/OUTPUT SIGN 007045 007045 151 GCHR: HOV L,C I/GET CHARCTERISTIC 007047 054 GETA: I/MOVET TO I O07OL.O Q54 INR L 007051 054 [NR ~/~rp 007052 176 ~/FErCH iNTO A 007053 ~II RE[ ; / DONE [;CT05LI 315 107 016 MORD: [:At.[. GETEX ;/~UL OR I);V DEPENDINGON EXP 00"~0~ 137 NOV E,A ;/SAVE DECIHAL EXP ]05 MOV B,L ;/SET UP IO MULT OR OIV 007061 004 INR 8 ;/NON BOP POIN]ER SE~ 00705~ 151 NOV L,C ;zt. POINTS [0 NUHBERTO CONVERT 007063 1"71 MOV A,C ;/POINT C AT ~RESULT~ AREA ~)OV06~ 306 Oil AD[ IIO ;/IN SCRATCH 00"!066 117 MOV C,A ;/NON C SET RIGHT 173 MCV A,E ;/NON TEST FOR MUL 00"!070 396 ~00 ANI £OOQ ilTES~ NEGATIVE DEC. EXP. 007072 312 Ilg 016 JZ DIVlT ;/IF /XP IS * THEN DIVIDE 00"7075 315 137 OIR CALL LMUL ;IMULT, 007 O0 171 FINUP: MOV A,C ;/SAVE LOC. OF RESULf ~07 Ol II5 NOV C.t. ;IC=LOC OF NUMBER(It NAS DESfROYED) 007 02 157 MOV L,A ;/SET L TO hOC. OF RESUTL 007 03 17~ MOV A,H ;/SHON RAM TO RAM TRANSFER 007 O~ 315 210 015 CALL COPY ;/~OVE RESULT TO NUMBER 007 ~7 151 GETEX: MOV L,C ;/NON GET DECIMAl. EXP 00~ ~0 054 INR L 007 ~! 303 047 016 JMP GETA ;/USE PART Or GCHR 007 ~g 315 000 011 DIVlT: CALL LDIV ;/DIVIDE 007 !7 303 I00 016 JMP FINUP 007 ~ 315 151 01~ TWOD: CALL CTHO ~/CONVERT TO 2 DIGITS 007 25 107 ~OV 8,A ;/SAVE ONES DIGIT 007 ~6 3~5 107 015 CALL. GETEX ;/GET DECIMAL EXP 007 3] 137 ~OV £,A ;/SAVE A COPY 346 200 ANI 2000 :~TEST FOR NEGATIVE 312 145 016 #Z AODI ;/BUMP EXP BY I SINCE 2 DIGITS 007 37 035 DCR E ;/DECREMENT NEGATIVE EXP SINCE ~ DIGITS 00"~ 40 163 EINIT: MOV ~/RESTORE EXP WITH NEN VALUE 007 4~ [70 MOV A,B ;/NOW DO 2NO DIGIT 007 42 303 25~ 015 JMP [NPOP ;/GO OUT ~ND AND REST FQ DIGITS 007 ~5 034 ADOI: [NR E ;/COHPENSAfE FOR 2 DIGITS 007 4g 303 140 016 JMP FINIT OOV 5~ 036 377 CTNO: HVl E,377Q ;/CONVERT 2 OlGIf BIN TO BCO 00? 53 0~4 LOOP: INR E ;/ADD UP TENS DIGIT 007 54 326 012 SUl 120 ;/SUBTRACT IO 007 56 362 15~ 01~ OP LOOP ;/Tilt NEGATIVE RESULT OOV ~ 30B 01~ AOI 120 ;/RESTORE ONES DIGIT 007 63 107 MOV 8,A ;/SAVE ONES OIGIT 007 6~ 173 MOV A,£ ;/GET ~ENS DIGIT ~07 55 315 303 0[5 CALL DIGO ;/OUTPUT IT ~07~70 170 MOV A,8 ;/SET A TO 2ND DIGIT

A-27 1 8080 MACROASSEMBLER, VER 2.2 ERRORS= O PAGE 28

007171 RET 007]72 COPT: MOV A,C ;,’COPY FROH I0 N TO RAM 007173 306 0O5 ADI 5 0n7~75 NOV C,A ;/SET C TO PLACE TO PUT 007]~S 076 HVl A,(TENS/256) 007200 315 2~0 016 CALL COPY ;/COPY IT 00720~ MOV A,C ;/NON RESET C 007204 326 005 SUI 5 007206 117 MOV ;/lrs RESET 007207 PET 007210 COPY: MOV 8,1"I ;/SAVE RAM H 007211 147 MOV H, A ;/SET TO SOURCEH 007212 176 MOV A,M ;/GET 4 WORDSINrO THE REGS. 007213 054 INR L 007214 126 NOV D,M 007215 05W INR L 007216 136 HOV E,M 007217 05~ ]MR L 007220 156 M0V L.M ;/LAST ONE ERASES L 007221 ~qO HOV H,8 ;/SET TO DESTINATION RAM 00722~ HOV B,L ;/SAVE 4TH WORDIN 8 007223 151 NOV L,C ;/SET TO DESTINATION 007224 167 MOV ;/SAVE FIRST WORD 007225 INR I. 007226 176 NOV A ,M ;/SAVE THIS NORD IN A {INPUT SAVES C HERE 007227 162 MOV M,D ;/NON PUT 2NO NORD 007230 05~ INR L 00723! 163 M0V H.r 007232 05W INR L 007233 160 NOv M,B ;/ALL 4 COPIED NOH 007~3W 311 ;/ALt. DONE

007235 303 120 000 TENS: 08 303Q,I20Q,OQ,21Q ;1303240f0} = 100000. 007241 240 000 000 TEN: 08 240Q,0Q,0G,4Q ;/12(8) = ; ; SCRATCHHAP FOR l/O CONVERSIONROUTINES RELATIVE TO (C+2}USE ; C-2 DIGIT COUNT ; C-I OVERFLOW ; C HIGH NUMBER - MANTISSA ; C+i LOW NUMBER ; C~-2 CHARACTERISTIC ; C÷3 DECIMAL EXPONEXT {SIGN E MAG.] ; C+4 TEN**N ; C+5 TEN**N ; C+6 TEN**N ; C+7 RESULT OF HULT & DIV ; C.8 AND TEMP FOR X2

A-28 80@0 MACRO ASSENBLER, VER 2.L-t. ERRORS = 0 PAGE

C+i3 I. FOR NUMBERTO GO INTO (INPUT ONLY) C+II DIGIT JUST INPU1 (INPU1 ONLY)

,’’***O/GIN INPUT

007245 076 2"77 ERR: MVI A,277Q ;ERROR IN INPUt 007247 315 060 000 CAt.L OUTR ;/SEND A ?{SPACE) 007252 076 240 MVI A,240Q 007254 315 060 000 CALL OUTR ;/OUTPUT SPACE 007257 303 272 JMP PRMT ;/GO PRONPT USER AND RESTART

i/ll 9 II ") c D,G,T) INPUT ROUTINE

/L. POINTS TO WHERETO PU[ INPUT NUMBER /C POINTSTO 13(10) WORDSOF SCRATCH

007252 105 INPUT: MOV 8,L ;/SAVE ADDRESS WHEREDATA IS TO GO 00"7253 17I MOV A,C ;/IN SCRATCH 007264 306 017 ADI 17Q ;/COMPUTE LOC. IN SCRATCH 0072G6 157 MOV L,A 00"7267 160 MOV M,8 ;/PUT IT 007270 INR C ;/OFFSE[ SCRATCH POINTER 00727~ 014 INR C ;/BY 2 007272 07B 272 PRMT: MVl A,~72Q ;IPROMPI USER WITH : 007274 315 060 000 CALL OUTR ;/OUTPUT : 907277 315 305 017 CALL ZROIT ;/ZERO NUMBER 307302 n54 INR L ;/AND ZERO 007303 ~67 MOV M,A ;/DECIMAL EXPONENT 00730’) 315 142 017 CALL GN~M ;/GET INTEGER PAPT OF HUM 00"7307 376 376 CPI 376Q ;/TERM=.? 0073]] 312 034 017 JZ DECPT ;/YES t)07314 376 025 TSTEX: CPI ;/TES] FOR E 007316 3i20Bl 0~7 JZ INEXP ;/YES - HANDLE EXP 007321 375 360 CPI 360Q ;/TEST FOR SPACE 1ERM (2hOB-26OB) 007323 302 2’15 ,.I~Z ERR ;/NOT [.EOAt. TERN 007326 315 253 0!7 CALL FLTSGN ;/FLOAT AND SIGN IT 00733} 315 ]07 016 SCALE: CAL~ GETEX ~/GET DECIMAL EXP 007334 346 1"17 ANI [77~ ;/GET GOOD BITS 007336 137 NOV E,A ;/SAVE COPY 007337 346 I00 ANI IOOO ;/GET SIGN OF EXP 00734] 007 RLC ;/INTO SIGN BIT 007342 267 ORA A ;/SET FLOPS 007~43 107 NOV O,A ;/SAVE SIGN 00734h 1"13 MOV A,£ ;/GET EXP BACK 00"1345 312 353 0!6 JZ AP[.S ;/JHP [S ~ 007350 076 200 MVI A,2000 ;/HAKE MINUS ~

A-29 8080 MACROASSEMBLER, VER 2.2 ERRORS= 0 PAGE 30

007352 223 SUB E ;/NON ITS + G07353 200 API.S: ADD B ;/SIGN NUMBER 007354 NOV M,A ;/SAVE EXP (SIGN & HAG.) 007355 O56 235 MVI L,(TEN5 AND 3770] ;/TRY MORO ~ITH 10’’5 F!RSI 007357 315 !72 OIS CALL. COPT ;/[RANSFFR TO RAM 007362 I07 OIB CALL GETEX ;/GET DECIMAL EXP 007365 346 077 INTS: ANI ??Q ;/GET HAG. 01= EXP 0073£7 376 005 CPI 50 ;/TEST FOR USE O~ lO~ob 007~71 372 005 017 JM TRYTN ;/NONT GO - TRY !O 007374 315 054 CALL MORO ,/~ILL GO SO DO IT 807377 326 005 SUl 5a ;/NAG = MAG -5 007401 157 NOV N,A ;/UPOATE DEC. EXP IN MEN 007402 303 355 016 JMP [NT5 ;/GO TRY A~A]N 007405 056 241 ~RYTN: MVl L,(TEN AND 377Q} ;/PUT TFN IN RAM 00740"? 315 ]72 OJ5 CALL COPT 007412 315 107 015 CALL GETEX I/SET UP FOR LOOP 007415 346 077 [NTI: ANI 77Q ;/GET MAGNITUDE 007~.17 267 ORA A ;/TEST FOR 0 007420 257 017 JZ 5AVEN ;/DONE, MOVE NUN OUT AND GET OUT 007423 315 054 016 CALL MORD ;/NOT DONE - DO 18 007426 326 001 SUI IO ;iEXP = EXP -I 007430 NOVt.l,A ;/UPDATE MEN 00743l 303 015 017 JMP !NT! ;/TRY AGAIN 007~34 151 DECP~: NOV L,C ;IZERO DIGII COUN[ 007435 055 DCR L ;/SINCE ITS NECESSARY 007~36 055 DCR L ;/TO COMPUTE EXP. 007437 000 MVI M,O ;/ZEROED O07u~l 315 245 017 CA~L EPI ;/GNUM IN MIDDLE 007444 HOV E,A ;/SAVE TERMINATOR 007445 151 NOV L,C ;/MOVE DIGIT COUNT I0 007446 DCR L. ;/BACK UP FO DIGIT ~’gLJHT 00?447 055 DCR .. 00?450 NOV B,M ;/GOT DIGIr COU~T 007451 315 107 CALL GETEX ;/SET L TO DEC. IZXF’ 00?454 160 NOV M,8 ;/PUT EXP 007455 NOV A,E ;/TERM BACK TO A 00?456 3O3 314 016 JMP TSTEX ;/TEST FOR E~OR-XX 007461 315 253 017 INEXP: CALL FLTSON ;/FLOAT AND SIGN NUMBER 00?464 315 257 017 CALL E,AVEN :/SAVE NUMBERIN (L) rEF:P 00?48? 305 ~17 CALL ZROIT ;/ZERO OUT NUM. FOR INPUTTING FXP 007472 315 142 017 CALL GNUM ;/NON [NPU[ EXPONENT 007475 378 360 CPI 360Q ;/TEST FOR SPACE FERN. 007477 302 245 JNZ ERR ;/NOT LEGAL -- TRY AGAIN 00750~ 151 NOV L,C ;/GET EXP OU~ OF MEN 007503 054 INR L 00750~ 054 INR L ;/EXP LIMITED TO 5 BITS 007~05 i76 NOV A,N ;/GET LONEST 8 BITS 007506 345 037 ANI 37Q ;/GET O00O BITS 007510 I07 NOV B,A ;/SAVE THEN 007511 054 INR L ;/GET SIGN OF EXP 007512 178 NOV A,N ;/INTO A

A-30 1 8080 MACROASSEMBLER, VER2.2 ERRORS= 0 PAGE 31

{]O’1513 26"1 ORA A ;/SET FLOPS 00"1514 ]70 MOV A,B ;/INCASE NOTHING TO aO 0G’75]5 372 123 017 JM USEIT ;/IF NEG. USE AS + (1~’;520 078 ~00 MVI A,OO /IF" * MAKE- 0r)7522 220 !;LJB /O--X = -X 007523 054 USEII: INR L /POINT Ar EXP 007524 206 ADD M /GET REAL. DEC. EXP 00"1525 157 NOV M,A /PbT IN MEN 007526 I71 NOV A,C /NON GET NUMBER BACK" 007527 306 015 AD] :SO /GET ADO OF L 007531 157 HOV L,A /L POINTS TO L. OF NUMBER 00"1532 156 NOV L,M /NOW L POINTS TO NUMBER C07533 17g MOV A,H ¯ /RAM TO RAM COPY 007534 3]5 210 0]6 CALL COPY /COPY [T BACK 00753"1 303 33] 016 ..JMP SCALE /NO~ ADJUST FOR EXP 007542 315 333 000 GNUM: CALL INP /GET A CHAR 007595 376 240 CP! 2400 /IGNORE LEAO[NG SPACES 00754"1 312 I~2 017 JZ GNUM 007552 376 255 CP[ /TESt rOR - 007554 302 17~ 017 JNZ TRYP ’/NOT H[NUS 007557 151 MOV[.,C -/MINUS SO SET SIGN 007580 054 INR [. ¯ /IN CHAR[.OC. 00758] 054 INR L ./.~*rP 007562 054 INR L 00?563 066 200 MVI M,2OOQ ;/SET - SIGN 007565 303 142 Ol~ JMP GNUM 0075~0 37B 253 TRYP: CPI 253Q ;/IGNORE + 007572 312 [42 017 JZ GNUM 007575 328 260 TSTN: SUI 260Q ;/STRIP ASCII 0075~? 370 RM ;/RETURN IF TERM 007600 376 012 CPI 12Q ;/TEST FOR NUMBER 007602 380 RP ;/ILLEGAL 007603 ;/SAVE DIGIT 00760q 315 277 017 CALL GETN ;ILOC. OF DIGIT STORAGE TO L ,]07G0~ 163 MOV M,E ;/SAVE DIGIT 0076;0 315 327 015 CALL MULTI ;/MULT NUMBERBY [0 0075!3 267 ORA A ;/TEST FOR TOO MANY DIGITS 0075~4 300 RNZ ;/TOO MANY DIGITS 007S15 315 277 017 CALL G£(N ;/GET DIGIT 007620 151 MOV L,C ;/SET L TO NUMBER 00°1621 054 INR L 08"1622 054 INR L ;/*~*TP 00"2523 206 ADD M ;/ADD IN THE DIGIT 007524 1~7 MOV ;/PUT RESULT BACK 007~25 055 BCR ;/NON DO HIGtt 007628 176 MOV A,M ;/GEl HIGH TO ADD IN CARRY 007827 316 000 ACE OO ;/ADD IN CARRY 00753l 157 MOV M,A ;/UPDATE HIGH {)07532 055 BCR L ;/*°*TP EXTENSION 007833 178 MOV A,M 007634 315 000 ACI OO ;/ADD IN CARRY

A-31 ~080 HACRO ASSEMBLER, VER 2.P ERRORS= 0 PAGE 32

007636 i67 MOVft,A ;/**oTP ALl. DONE 007637 330 RC :/OVERFLOW ERROR 007640 055 OCR L ;/BUMP DIGIT COUNT NON 00764l 055 DCR L 007642 105 MOV 8,M ;/GET DIGIT COUNT 007643 002 INR 8 ;/BUMP DIGI! COUNT 007644 160 MOV M,8 ;/UPDATE OIGIT COUNT 007645 315 333 000 EP~: CALL INP ;/GET NEXT CHAR 007650 303 175 01"? JMP T£TN ;’MUST BE NUN, OR TERM 087553 15i Ft.[SON MOV L,C ;POINT L AT NUMBERTO FLOAT 00"7654 303 325 JMP FLOAT ;GO FLOAT IT 00765"7 17} 6AVEN NOV A,C ;/PUT NUMBERIN (1.) 007660 306 015 AOi 15Q :/GET ADO OF L ~07662 }57 MOV L,A 007663 MOV E,M ;/GET L OF RESUt.T 007664 MOV L,E ;/POINT L AT (L~ 00"7655 054 [NR !. ;/SET TO 2NO WORDTO SAVE C 00"7566 I 61 MOV M,C ;/SAVE C IN (L) +I SINCE If WILL BE I)EGTROYED 007667 151 HOV L,C ;/SET UP TO CAt.L COPY 00"/670 I I 3 MOV C,E ;/NON L&C SET 007671 174 MOV A,h ;/RAM [0 RAM COPY 00?672 315 210 016 CALL COPY ;/COPY TO L 007675 117 MOV C,A ;/(L)*I RETURNEDHERE 50 S£1 AS C 0076q6 31 l RET ;/NON EVERYTI41NG HUNKY-~ORRY C07677 171 GEIN: MOV A.C ;/GET DIGIT 007700 306 016 ADI 160 ;~LAST LOC. IN SCRATCH 00"1702 157 MOV L,A ;/PUT [N L 007703 175 MOV A,M ;/GET DIGIT 00"7704 31 I RET 007705 151 ZROIT HOV L,C ;/ZERO NUMBER 007706 257 XRA A 007707 167 HOV M,A 007710 054 INR L ;/*°~TP 007711 167 NOV M,A 00771~ 054 INR L 007713 167 MOV M, A 007714 054 INR L :/NON SET .t;IGN ro -* 007715 157 MOVM, A 007716 311 RET ; / DONE END NO PROGRAMERRORS

A-32 8c’8~: r,I,’,,,,jRO A:-..~,EHB~(.R, VER2.2 ERRORS--- 0 PAGE33

SYHBOL TABLE

: Ol A 00000"! ABCH 005064 ACPR 005757 ADDI 007145 AOOP 00~73~ ADDZ 004726 AGN4 005306 ALDN 006421 AORS 005741 APLS 007353 B 000000 88014 005075 OCI4K (]05342 ~CTL. 006215 RHIN 005042 C 000001 CCHK 006104 CCMP 005533 CFCHE 005514 COMI 005026 COM2 005050 COPT 007|72 COPY 0072|0 CRIN 004515 CSIGN 006151 CSTR 006161 CTNO 00715i CVRT 006440 D 000002 DADD 005406 DCLR 005435 DCMP 005"164 DEtPT 007434 DECR 005724 ¯ DFXL 005316 DIGO 0O6703 OIVIT 007114 DI.ST 005351 DRST 005370 DSQRT 006232 OSU6 005446 DTST2 004422 E 000003 ENTI 006020 ENT2 006012 ~PI 0076~5 EPOS 006302 EQ02 004634 EQUL 004624 * ERR 007245 ERSO 00643i ~[NIT 807140 FINUP 007~00 FLOAT 00532~ FLTSG ~07653 FXL2 0052G3 GCHAR 00550| GCHR 007046 GETA 007047 GETEX 00~107 GETN 007677 GNUM 007542 GOON 004473 GOTV 006556 H 000004 INCR 005666 INCR2 005706 INCR3 005703 INDF! 005604 * INDFC 005650 INEXP 007461 INP 000333 INPOP 006653 INPUT 007262 INTI 007415 INT5 007365 INTR 005177 KPGO 005166 l. 000005 LO00 005106 LOO] 005110 LO02 005037 LO03 005113 [.1~8 005116 LI29 00512] LI31 005124 L.ADD 004534 I. ADG 004542 I_ASD 005002 LDCP 006071 LOIV 004400 LL~B 004577 LHCM 005127 ¯ LHCP 006100 LMUL 005137 LOOP 007153 LSF[ 006~77 LSUB 004540 LXFR 006044 M 000006 MADO 005244 HANT 004757 ~AXOH 0000~7 MO~N 0066l] MOSKP 006627 M~NCH 000300 MORD 007054 MSFH 006171 MUi.f’l 006727 NCHK 004604 NNZRO 006470 NORM 005255 NORMI 005255 ¯ NOTO 004652 NZRO 006525 OF|.~I 005566 OFL~C 006133 OKI 006622 OUTR 000060 OVER 006027 PLSV 007042 POPO 006650 PRMT 00"7272 PSW 000006 REP3 004447 REP5 006046 REP6 005271 SAVEN 0076~7 SCALE 007331 SCCFG 005722 SCHAR 005313 SHIO 0046~4 SIGN 0070~ SP 000006 STORC 006~23 5UOZ 00467~ IEN 007241 TEN5 007235 TLOOP 007002 TLP2 007003 TRYI 006574 TRYP 007570 TRYTN 007405 TSTI 00660~ "[STB 00654~ TSTEX 007314 TSTN 007575 TSTR 00574"? [WOO 007122 UFL.HI 005550 UFLWC 006~2 USEJ’[ 007523 HCHAR 005637 HFLT 001607 NIND 005577 NMANI 005630 HOVR 005561 ~UNO 0055’÷3 NZER 0056i5 W~ERC 00565~ ZCHK 0053~2 ZMCHK 005332 ZROIT 007705

° O2

’ O3

’ 04

RAC/gw

A-33