00000000: 3B 20 49 4E 54 45 47 45 52 20 41 52 49 54 48 4D |; INTEGER ARITHM|
00000010: 45 54 49 43 20 52 4F 55 54 49 4E 45 53 0D 3B 0D |ETIC ROUTINES.;.|
00000020: 3B 20 52 49 43 48 41 52 44 20 4C 2E 20 52 59 4C |; RICHARD L. RYL|
00000030: 41 4E 44 45 52 20 20 20 20 38 2F 31 32 2F 38 34 |ANDER 8/12/84|
00000040: 0D 3B 0D 3B 20 52 45 56 49 53 45 44 20 31 30 2F |.;.; REVISED 10/|
00000050: 32 39 2F 38 34 20 54 4F 20 41 44 44 20 46 55 4C |29/84 TO ADD FUL|
00000060: 4C 20 44 4F 55 42 4C 45 0D 3B 20 50 52 45 43 49 |L DOUBLE.; PRECI|
00000070: 53 49 4F 4E 20 41 52 47 55 4D 45 4E 54 53 20 49 |SION ARGUMENTS I|
00000080: 4E 20 44 49 56 49 44 45 20 52 4F 55 54 49 4E 45 |N DIVIDE ROUTINE|
00000090: 0D 3B 0D 3B 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |.;.;************|
000000A0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
000000B0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 3B 0D |*************.;.|
000000C0: 3B 20 55 53 45 20 50 41 47 45 20 5A 45 52 4F 20 |; USE PAGE ZERO |
000000D0: 4C 4F 43 41 54 49 4F 4E 53 20 57 48 45 52 45 20 |LOCATIONS WHERE |
000000E0: 50 4F 53 53 49 42 4C 45 20 46 4F 52 0D 3B 20 49 |POSSIBLE FOR.; I|
000000F0: 54 45 52 41 54 49 56 45 20 50 52 4F 43 45 44 55 |TERATIVE PROCEDU|
00000100: 52 45 20 57 4F 52 4B 20 53 50 41 43 45 0D 3B 0D |RE WORK SPACE.;.|
00000110: 4D 4C 50 43 4E 44 20 3D 24 41 43 20 20 20 20 3B |MLPCND =$AC ;|
00000120: 20 4D 55 4C 54 49 50 4C 49 43 41 4E 44 0D 4D 4C | MULTIPLICAND.ML|
00000130: 50 4C 45 52 20 3D 24 41 44 20 20 20 20 3B 20 4D |PLER =$AD ; M|
00000140: 55 4C 54 49 50 4C 49 45 52 0D 50 52 4F 44 20 20 |ULTIPLIER.PROD |
00000150: 20 3D 24 41 45 20 20 20 20 3B 20 50 52 4F 44 55 | =$AE ; PRODU|
00000160: 43 54 0D 3B 0D 44 56 44 4E 44 20 20 3D 24 46 44 |CT.;.DVDND =$FD|
00000170: 20 20 20 20 3B 20 44 49 56 49 44 45 4E 44 2F 51 | ; DIVIDEND/Q|
00000180: 55 4F 54 49 45 4E 54 0D 44 56 53 4F 52 20 20 3D |UOTIENT.DVSOR =|
00000190: 24 46 42 20 20 20 20 3B 20 44 49 56 49 53 4F 52 |$FB ; DIVISOR|
000001A0: 0D 52 4D 4E 44 52 20 20 3D 24 42 34 20 20 20 20 |.RMNDR =$B4 |
000001B0: 3B 20 52 45 4D 41 49 4E 44 45 52 0D 3B 0D 52 41 |; REMAINDER.;.RA|
000001C0: 44 43 4E 44 20 3D 24 41 43 20 20 20 20 3B 20 52 |DCND =$AC ; R|
000001D0: 41 44 49 43 41 4E 44 0D 52 4F 4F 54 20 20 20 3D |ADICAND.ROOT =|
000001E0: 24 30 33 33 43 20 20 3B 20 53 51 55 41 52 45 20 |$033C ; SQUARE |
000001F0: 52 4F 4F 54 0D 3B 0D 54 45 4D 50 20 20 20 3D 24 |ROOT.;.TEMP =$|
00000200: 46 42 0D 3B 0D 3B 20 53 45 54 20 55 50 20 53 45 |FB.;.; SET UP SE|
00000210: 45 44 20 56 41 4C 55 45 53 20 46 4F 52 20 50 53 |ED VALUES FOR PS|
00000220: 45 55 44 4F 2D 52 41 4E 44 4F 4D 20 4E 55 4D 42 |EUDO-RANDOM NUMB|
00000230: 45 52 53 0D 20 20 20 20 20 20 2A 3D 24 43 30 30 |ERS. *=$C00|
00000240: 30 0D 52 4E 44 4D 20 20 20 2E 42 59 54 45 20 24 |0.RNDM .BYTE $|
00000250: 46 46 2C 24 35 35 0D 52 54 45 4D 50 20 20 2E 42 |FF,$55.RTEMP .B|
00000260: 59 54 45 20 24 30 30 2C 24 30 30 0D 3B 0D 3B 0D |YTE $00,$00.;.;.|
00000270: 3B 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |;***************|
00000280: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000290: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 3B 0D 3B 20 4D |**********.;.; M|
000002A0: 55 4C 54 49 50 4C 59 20 53 49 4E 47 4C 45 20 50 |ULTIPLY SINGLE P|
000002B0: 52 45 43 49 53 49 4F 4E 20 4D 55 4C 54 49 50 4C |RECISION MULTIPL|
000002C0: 49 43 41 4E 44 0D 3B 20 42 59 20 53 49 4E 47 4C |ICAND.; BY SINGL|
000002D0: 45 20 50 52 45 43 49 53 49 4F 4E 20 4D 55 4C 54 |E PRECISION MULT|
000002E0: 49 50 4C 49 45 52 20 47 49 56 49 4E 47 0D 3B 20 |IPLIER GIVING.; |
000002F0: 44 4F 55 42 4C 45 20 50 52 45 43 49 53 49 4F 4E |DOUBLE PRECISION|
00000300: 20 50 52 4F 44 55 43 54 20 28 45 4E 54 45 52 20 | PRODUCT (ENTER |
00000310: 41 54 20 22 4D 55 4C 54 22 29 0D 3B 0D 3B 20 53 |AT "MULT").;.; S|
00000320: 50 45 43 49 41 4C 20 43 41 53 45 3A 20 45 4E 54 |PECIAL CASE: ENT|
00000330: 45 52 20 41 54 20 22 53 51 55 41 52 45 22 20 54 |ER AT "SQUARE" T|
00000340: 4F 20 46 49 4E 44 0D 3B 20 53 51 55 41 52 45 20 |O FIND.; SQUARE |
00000350: 4F 46 20 53 49 47 4E 45 44 20 38 2D 42 49 54 20 |OF SIGNED 8-BIT |
00000360: 4E 55 4D 42 45 52 0D 3B 0D 53 51 55 41 52 45 20 |NUMBER.;.SQUARE |
00000370: 4C 44 41 20 4D 4C 50 43 4E 44 20 20 3B 20 45 4E |LDA MLPCND ; EN|
00000380: 54 52 59 20 54 4F 20 53 51 55 41 52 45 0D 20 20 |TRY TO SQUARE. |
00000390: 20 20 20 20 20 42 50 4C 20 50 4F 53 49 54 56 20 | BPL POSITV |
000003A0: 20 3B 20 55 53 45 20 41 42 53 4F 4C 55 54 45 20 | ; USE ABSOLUTE |
000003B0: 56 41 4C 55 45 0D 20 20 20 20 20 20 20 53 45 43 |VALUE. SEC|
000003C0: 20 20 20 20 20 20 20 20 20 3B 20 4E 45 47 41 54 | ; NEGAT|
000003D0: 45 20 49 46 20 4E 45 45 44 45 44 0D 20 20 20 20 |E IF NEEDED. |
000003E0: 20 20 20 4C 44 41 20 23 24 30 30 0D 20 20 20 20 | LDA #$00. |
000003F0: 20 20 20 53 42 43 20 4D 4C 50 43 4E 44 0D 20 20 | SBC MLPCND. |
00000400: 20 20 20 20 20 53 54 41 20 4D 4C 50 43 4E 44 0D | STA MLPCND.|
00000410: 50 4F 53 49 54 56 20 53 54 41 20 4D 4C 50 4C 45 |POSITV STA MLPLE|
00000420: 52 0D 4D 55 4C 54 20 20 20 4C 44 41 20 23 24 30 |R.MULT LDA #$0|
00000430: 30 20 20 20 20 3B 20 45 4E 54 52 59 20 54 4F 20 |0 ; ENTRY TO |
00000440: 4D 55 4C 54 49 50 4C 59 0D 20 20 20 20 20 20 20 |MULTIPLY. |
00000450: 4C 44 58 20 23 24 30 38 0D 4D 4C 4F 4F 50 20 20 |LDX #$08.MLOOP |
00000460: 4C 53 52 20 4D 4C 50 4C 45 52 0D 20 20 20 20 20 |LSR MLPLER. |
00000470: 20 20 42 43 43 20 4E 4F 41 44 44 0D 20 20 20 20 | BCC NOADD. |
00000480: 20 20 20 43 4C 43 0D 20 20 20 20 20 20 20 41 44 | CLC. AD|
00000490: 43 20 4D 4C 50 43 4E 44 0D 4E 4F 41 44 44 20 20 |C MLPCND.NOADD |
000004A0: 52 4F 52 20 41 0D 20 20 20 20 20 20 20 52 4F 52 |ROR A. ROR|
000004B0: 20 50 52 4F 44 0D 20 20 20 20 20 20 20 44 45 58 | PROD. DEX|
000004C0: 0D 20 20 20 20 20 20 20 42 4E 45 20 4D 4C 4F 4F |. BNE MLOO|
000004D0: 50 0D 20 20 20 20 20 20 20 53 54 41 20 50 52 4F |P. STA PRO|
000004E0: 44 2B 31 0D 20 20 20 20 20 20 20 52 54 53 0D 3B |D+1. RTS.;|
000004F0: 0D 3B 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |.;**************|
00000500: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000510: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 3B 0D 3B 20 |***********.;.; |
00000520: 44 49 56 49 44 45 20 44 4F 55 42 4C 45 20 50 52 |DIVIDE DOUBLE PR|
00000530: 45 43 49 53 49 4F 4E 20 44 49 56 49 44 45 4E 44 |ECISION DIVIDEND|
00000540: 0D 3B 20 42 59 20 44 4F 55 42 4C 45 20 50 52 45 |.; BY DOUBLE PRE|
00000550: 43 49 53 49 4F 4E 20 44 49 56 49 53 4F 52 20 47 |CISION DIVISOR G|
00000560: 49 56 49 4E 47 0D 3B 20 44 4F 55 42 4C 45 20 50 |IVING.; DOUBLE P|
00000570: 52 45 43 49 53 49 4F 4E 20 51 55 4F 54 49 45 4E |RECISION QUOTIEN|
00000580: 54 0D 3B 0D 3B 20 44 49 56 49 44 45 4E 44 20 49 |T.;.; DIVIDEND I|
00000590: 53 20 52 45 50 4C 41 43 45 44 20 42 59 20 51 55 |S REPLACED BY QU|
000005A0: 4F 54 49 45 4E 54 0D 3B 20 49 4E 20 54 48 45 20 |OTIENT.; IN THE |
000005B0: 50 52 4F 43 45 53 53 0D 3B 0D 3B 20 51 55 4F 54 |PROCESS.;.; QUOT|
000005C0: 49 45 4E 54 20 49 53 20 52 4F 55 4E 44 45 44 20 |IENT IS ROUNDED |
000005D0: 54 4F 20 4E 45 41 52 45 53 54 20 49 4E 54 45 47 |TO NEAREST INTEG|
000005E0: 45 52 0D 3B 0D 44 49 56 49 44 45 20 4C 44 41 20 |ER.;.DIVIDE LDA |
000005F0: 23 24 30 30 0D 20 20 20 20 20 20 20 53 54 41 20 |#$00. STA |
00000600: 52 4D 4E 44 52 0D 20 20 20 20 20 20 20 53 54 41 |RMNDR. STA|
00000610: 20 52 4D 4E 44 52 2B 31 0D 20 20 20 20 20 20 20 | RMNDR+1. |
00000620: 4C 44 58 20 23 24 31 30 0D 44 4C 4F 4F 50 20 20 |LDX #$10.DLOOP |
00000630: 52 4F 4C 20 44 56 44 4E 44 0D 20 20 20 20 20 20 |ROL DVDND. |
00000640: 20 52 4F 4C 20 44 56 44 4E 44 2B 31 0D 20 20 20 | ROL DVDND+1. |
00000650: 20 20 20 20 52 4F 4C 20 52 4D 4E 44 52 0D 20 20 | ROL RMNDR. |
00000660: 20 20 20 20 20 52 4F 4C 20 52 4D 4E 44 52 2B 31 | ROL RMNDR+1|
00000670: 0D 20 20 20 20 20 20 20 53 45 43 0D 20 20 20 20 |. SEC. |
00000680: 20 20 20 4C 44 41 20 52 4D 4E 44 52 0D 20 20 20 | LDA RMNDR. |
00000690: 20 20 20 20 53 42 43 20 44 56 53 4F 52 0D 20 20 | SBC DVSOR. |
000006A0: 20 20 20 20 20 54 41 59 0D 20 20 20 20 20 20 20 | TAY. |
000006B0: 4C 44 41 20 52 4D 4E 44 52 2B 31 0D 20 20 20 20 |LDA RMNDR+1. |
000006C0: 20 20 20 53 42 43 20 44 56 53 4F 52 2B 31 0D 20 | SBC DVSOR+1. |
000006D0: 20 20 20 20 20 20 42 43 43 20 44 45 43 43 4E 54 | BCC DECCNT|
000006E0: 0D 20 20 20 20 20 20 20 53 54 59 20 52 4D 4E 44 |. STY RMND|
000006F0: 52 0D 20 20 20 20 20 20 20 53 54 41 20 52 4D 4E |R. STA RMN|
00000700: 44 52 2B 31 0D 44 45 43 43 4E 54 20 44 45 58 0D |DR+1.DECCNT DEX.|
00000710: 20 20 20 20 20 20 20 42 4E 45 20 44 4C 4F 4F 50 | BNE DLOOP|
00000720: 0D 20 20 20 20 20 20 20 52 4F 4C 20 44 56 44 4E |. ROL DVDN|
00000730: 44 20 20 20 20 20 3B 20 43 48 45 43 4B 20 49 46 |D ; CHECK IF|
00000740: 20 52 45 4D 41 49 4E 44 45 52 0D 20 20 20 20 20 | REMAINDER. |
00000750: 20 20 52 4F 4C 20 44 56 44 4E 44 2B 31 20 20 20 | ROL DVDND+1 |
00000760: 3B 20 49 53 20 3E 3D 20 31 2F 32 20 4F 46 20 44 |; IS >= 1/2 OF D|
00000770: 49 56 49 44 45 4E 44 0D 20 20 20 20 20 20 20 41 |IVIDEND. A|
00000780: 53 4C 20 52 4D 4E 44 52 20 20 20 20 20 3B 20 46 |SL RMNDR ; F|
00000790: 4F 52 20 52 4F 55 4E 44 49 4E 47 0D 20 20 20 20 |OR ROUNDING. |
000007A0: 20 20 20 52 4F 4C 20 52 4D 4E 44 52 2B 31 0D 20 | ROL RMNDR+1. |
000007B0: 20 20 20 20 20 20 42 43 53 20 52 4F 55 4E 44 0D | BCS ROUND.|
000007C0: 20 20 20 20 20 20 20 53 45 43 0D 20 20 20 20 20 | SEC. |
000007D0: 20 20 4C 44 41 20 44 56 53 4F 52 0D 20 20 20 20 | LDA DVSOR. |
000007E0: 20 20 20 53 42 43 20 52 4D 4E 44 52 0D 20 20 20 | SBC RMNDR. |
000007F0: 20 20 20 20 4C 44 41 20 44 56 53 4F 52 2B 31 0D | LDA DVSOR+1.|
00000800: 20 20 20 20 20 20 20 53 42 43 20 52 4D 4E 44 52 | SBC RMNDR|
00000810: 2B 31 0D 20 20 20 20 20 20 20 42 43 53 20 4E 4F |+1. BCS NO|
00000820: 43 48 4E 47 0D 52 4F 55 4E 44 20 20 49 4E 43 20 |CHNG.ROUND INC |
00000830: 44 56 44 4E 44 0D 20 20 20 20 20 20 20 42 4E 45 |DVDND. BNE|
00000840: 20 4E 4F 43 48 4E 47 0D 20 20 20 20 20 20 20 49 | NOCHNG. I|
00000850: 4E 43 20 44 56 44 4E 44 2B 31 0D 4E 4F 43 48 4E |NC DVDND+1.NOCHN|
00000860: 47 20 52 54 53 0D 3B 0D 3B 2A 2A 2A 2A 2A 2A 2A |G RTS.;.;*******|
00000870: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000880: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000890: 2A 2A 0D 3B 0D 3B 20 54 41 4B 45 20 49 4E 54 45 |**.;.; TAKE INTE|
000008A0: 47 45 52 20 53 51 55 41 52 45 20 52 4F 4F 54 20 |GER SQUARE ROOT |
000008B0: 4F 46 20 41 0D 3B 20 44 4F 55 42 4C 45 20 50 52 |OF A.; DOUBLE PR|
000008C0: 45 43 49 53 49 4F 4E 20 52 41 44 49 43 41 4E 44 |ECISION RADICAND|
000008D0: 20 47 49 56 49 4E 47 0D 3B 20 53 49 4E 47 4C 45 | GIVING.; SINGLE|
000008E0: 20 50 52 45 43 49 53 49 4F 4E 20 52 4F 4F 54 20 | PRECISION ROOT |
000008F0: 28 20 3C 3D 20 52 45 41 4C 20 52 4F 4F 54 20 29 |( <= REAL ROOT )|
00000900: 0D 3B 0D 53 51 52 54 20 20 20 4C 44 58 20 23 24 |.;.SQRT LDX #$|
00000910: 30 38 0D 20 20 20 20 20 20 20 4C 44 41 20 23 24 |08. LDA #$|
00000920: 30 30 0D 20 20 20 20 20 20 20 53 54 41 20 52 4F |00. STA RO|
00000930: 4F 54 0D 20 20 20 20 20 20 20 53 54 41 20 52 4F |OT. STA RO|
00000940: 4F 54 2B 31 0D 20 20 20 20 20 20 20 53 54 41 20 |OT+1. STA |
00000950: 54 45 4D 50 0D 20 20 20 20 20 20 20 53 54 41 20 |TEMP. STA |
00000960: 54 45 4D 50 2B 31 0D 53 51 52 54 31 20 20 41 53 |TEMP+1.SQRT1 AS|
00000970: 4C 20 52 4F 4F 54 0D 20 20 20 20 20 20 20 52 4F |L ROOT. RO|
00000980: 4C 20 52 4F 4F 54 2B 31 0D 20 20 20 20 20 20 20 |L ROOT+1. |
00000990: 49 4E 43 20 52 4F 4F 54 20 20 20 20 3B 20 41 53 |INC ROOT ; AS|
000009A0: 53 55 4D 45 20 43 55 52 52 45 4E 54 20 4C 53 42 |SUME CURRENT LSB|
000009B0: 20 4F 46 0D 20 20 20 20 20 20 20 42 4E 45 20 4E | OF. BNE N|
000009C0: 45 58 54 31 20 20 20 3B 20 52 4F 4F 54 20 57 49 |EXT1 ; ROOT WI|
000009D0: 4C 4C 20 42 45 20 31 0D 20 20 20 20 20 20 20 49 |LL BE 1. I|
000009E0: 4E 43 20 52 4F 4F 54 2B 31 0D 4E 45 58 54 31 20 |NC ROOT+1.NEXT1 |
000009F0: 20 41 53 4C 20 52 41 44 43 4E 44 20 20 3B 20 53 | ASL RADCND ; S|
00000A00: 48 49 46 54 20 52 41 44 49 43 41 4E 44 20 4C 45 |HIFT RADICAND LE|
00000A10: 46 54 0D 20 20 20 20 20 20 20 52 4F 4C 20 52 41 |FT. ROL RA|
00000A20: 44 43 4E 44 2B 31 20 3B 20 54 57 49 43 45 20 49 |DCND+1 ; TWICE I|
00000A30: 4E 54 4F 20 54 45 4D 50 0D 20 20 20 20 20 20 20 |NTO TEMP. |
00000A40: 52 4F 4C 20 54 45 4D 50 0D 20 20 20 20 20 20 20 |ROL TEMP. |
00000A50: 52 4F 4C 20 54 45 4D 50 2B 31 0D 20 20 20 20 20 |ROL TEMP+1. |
00000A60: 20 20 41 53 4C 20 52 41 44 43 4E 44 0D 20 20 20 | ASL RADCND. |
00000A70: 20 20 20 20 52 4F 4C 20 52 41 44 43 4E 44 2B 31 | ROL RADCND+1|
00000A80: 0D 20 20 20 20 20 20 20 52 4F 4C 20 54 45 4D 50 |. ROL TEMP|
00000A90: 0D 20 20 20 20 20 20 20 52 4F 4C 20 54 45 4D 50 |. ROL TEMP|
00000AA0: 2B 31 0D 20 20 20 20 20 20 20 53 45 43 20 20 20 |+1. SEC |
00000AB0: 20 20 20 20 20 20 3B 20 53 55 42 54 52 41 43 54 | ; SUBTRACT|
00000AC0: 20 52 4F 4F 54 20 45 53 54 49 4D 41 54 45 0D 20 | ROOT ESTIMATE. |
00000AD0: 20 20 20 20 20 20 4C 44 41 20 54 45 4D 50 20 20 | LDA TEMP |
00000AE0: 20 20 3B 20 46 52 4F 4D 20 54 45 4D 50 0D 20 20 | ; FROM TEMP. |
00000AF0: 20 20 20 20 20 53 42 43 20 52 4F 4F 54 0D 20 20 | SBC ROOT. |
00000B00: 20 20 20 20 20 54 41 59 0D 20 20 20 20 20 20 20 | TAY. |
00000B10: 4C 44 41 20 54 45 4D 50 2B 31 0D 20 20 20 20 20 |LDA TEMP+1. |
00000B20: 20 20 53 42 43 20 52 4F 4F 54 2B 31 0D 20 20 20 | SBC ROOT+1. |
00000B30: 20 20 20 20 42 43 43 20 52 45 53 54 4F 52 0D 20 | BCC RESTOR. |
00000B40: 20 20 20 20 20 20 53 54 41 20 54 45 4D 50 2B 31 | STA TEMP+1|
00000B50: 20 20 3B 20 53 55 42 54 52 41 43 54 49 4F 4E 20 | ; SUBTRACTION |
00000B60: 4F 4B 0D 20 20 20 20 20 20 20 53 54 59 20 54 45 |OK. STY TE|
00000B70: 4D 50 0D 20 20 20 20 20 20 20 49 4E 43 20 52 4F |MP. INC RO|
00000B80: 4F 54 0D 20 20 20 20 20 20 20 42 4E 45 20 4E 45 |OT. BNE NE|
00000B90: 58 54 32 0D 20 20 20 20 20 20 20 49 4E 43 20 52 |XT2. INC R|
00000BA0: 4F 4F 54 2B 31 0D 4E 45 58 54 32 20 20 44 45 58 |OOT+1.NEXT2 DEX|
00000BB0: 0D 20 20 20 20 20 20 20 42 4E 45 20 53 51 52 54 |. BNE SQRT|
00000BC0: 31 0D 20 20 20 20 20 20 20 4A 4D 50 20 46 49 4E |1. JMP FIN|
00000BD0: 49 0D 52 45 53 54 4F 52 20 53 45 43 20 20 20 20 |I.RESTOR SEC |
00000BE0: 20 20 20 20 20 3B 20 49 47 4E 4F 52 45 20 53 55 | ; IGNORE SU|
00000BF0: 42 54 52 41 43 54 49 4F 4E 0D 20 20 20 20 20 20 |BTRACTION. |
00000C00: 20 4C 44 41 20 52 4F 4F 54 20 20 20 20 3B 20 41 | LDA ROOT ; A|
00000C10: 4E 44 20 52 45 53 45 54 20 4C 53 42 20 4F 46 20 |ND RESET LSB OF |
00000C20: 52 4F 4F 54 0D 20 20 20 20 20 20 20 53 42 43 20 |ROOT. SBC |
00000C30: 23 24 30 31 0D 20 20 20 20 20 20 20 53 54 41 20 |#$01. STA |
00000C40: 52 4F 4F 54 0D 20 20 20 20 20 20 20 42 43 53 20 |ROOT. BCS |
00000C50: 4E 45 58 54 33 0D 20 20 20 20 20 20 20 44 45 43 |NEXT3. DEC|
00000C60: 20 52 4F 4F 54 2B 31 0D 4E 45 58 54 33 20 20 44 | ROOT+1.NEXT3 D|
00000C70: 45 58 0D 20 20 20 20 20 20 20 42 4E 45 20 53 51 |EX. BNE SQ|
00000C80: 52 54 31 0D 46 49 4E 49 20 20 20 52 4F 52 20 52 |RT1.FINI ROR R|
00000C90: 4F 4F 54 2B 31 20 20 3B 20 46 49 4E 41 4C 20 2F |OOT+1 ; FINAL /|
00000CA0: 32 20 54 4F 20 4E 4F 52 4D 41 4C 49 5A 45 0D 20 |2 TO NORMALIZE. |
00000CB0: 20 20 20 20 20 20 52 4F 52 20 52 4F 4F 54 0D 20 | ROR ROOT. |
00000CC0: 20 20 20 20 20 20 52 54 53 0D 3B 0D 3B 2A 2A 2A | RTS.;.;***|
00000CD0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000CE0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************|
00000CF0: 2A 2A 2A 2A 2A 2A 0D 3B 0D 3B 20 47 45 4E 45 52 |******.;.; GENER|
00000D00: 41 54 45 20 50 53 45 55 44 4F 2D 52 41 4E 44 4F |ATE PSEUDO-RANDO|
00000D10: 4D 20 42 59 54 45 53 0D 3B 20 45 58 49 54 20 57 |M BYTES.; EXIT W|
00000D20: 49 54 48 20 50 2D 52 20 42 59 54 45 20 49 4E 20 |ITH P-R BYTE IN |
00000D30: 41 43 43 55 4D 2E 0D 3B 0D 52 41 4E 44 4F 4D 20 |ACCUM..;.RANDOM |
00000D40: 4C 44 41 20 52 4E 44 4D 0D 20 20 20 20 20 20 20 |LDA RNDM. |
00000D50: 53 54 41 20 52 54 45 4D 50 0D 20 20 20 20 20 20 |STA RTEMP. |
00000D60: 20 45 4F 52 20 52 4E 44 4D 2B 31 0D 20 20 20 20 | EOR RNDM+1. |
00000D70: 20 20 20 52 4F 4C 20 52 54 45 4D 50 2B 31 20 20 | ROL RTEMP+1 |
00000D80: 3B 20 52 54 45 4D 50 2B 31 20 50 52 45 53 45 52 |; RTEMP+1 PRESER|
00000D90: 56 45 53 0D 20 20 20 20 20 20 20 52 4F 52 20 41 |VES. ROR A|
00000DA0: 20 20 20 20 20 20 20 20 3B 20 43 41 52 52 59 20 | ; CARRY |
00000DB0: 42 49 54 20 46 4F 52 20 43 59 43 4C 49 4E 47 0D |BIT FOR CYCLING.|
00000DC0: 20 20 20 20 20 20 20 52 4F 52 20 52 54 45 4D 50 | ROR RTEMP|
00000DD0: 2B 31 20 20 3B 20 52 41 4E 44 4F 4D 20 4E 55 4D |+1 ; RANDOM NUM|
00000DE0: 42 45 52 53 0D 20 20 20 20 20 20 20 53 54 41 20 |BERS. STA |
00000DF0: 52 4E 44 4D 0D 20 20 20 20 20 20 20 4C 44 41 20 |RNDM. LDA |
00000E00: 52 54 45 4D 50 0D 20 20 20 20 20 20 20 53 54 41 |RTEMP. STA|
00000E10: 20 52 4E 44 4D 2B 31 0D 20 20 20 20 20 20 20 52 | RNDM+1. R|
00000E20: 54 53 0D 2E 45 4E 44 0D |TS..END. |
; INTEGER ARITHMETIC ROUTINES.;.; RICHAR
D L. RYLANDER 8/12/84.;.; REVISED 10/
29/84 TO ADD FULL DOUBLE.; PRECISION ARG
UMENTS IN DIVIDE ROUTINE.;.;************
*****************************.;.; USE PA
GE ZERO LOCATIONS WHERE POSSIBLE FOR.; I
TERATIVE PROCEDURE WORK SPACE.;.MLPCND =
$AC ; MULTIPLICAND.MLPLER =$AD ; M
ULTIPLIER.PROD =$AE ; PRODUCT.;.DVD
ND =$FD ; DIVIDEND/QUOTIENT.DVSOR =
$FB ; DIVISOR.RMNDR =$B4 ; REMAIN
DER.;.RADCND =$AC ; RADICAND.ROOT =
$033C ; SQUARE ROOT.;.TEMP =$FB.;.; S
ET UP SEED VALUES FOR PSEUDO-RANDOM NUMB
ERS. *=$C000.RNDM .BYTE $FF,$55.R
TEMP .BYTE $00,$00.;.;.;***************
**************************.;.; MULTIPLY
SINGLE PRECISION MULTIPLICAND.; BY SINGL
E PRECISION MULTIPLIER GIVING.; DOUBLE P
RECISION PRODUCT (ENTER AT "MULT").;.; S
PECIAL CASE: ENTER AT "SQUARE" TO FIND.;
SQUARE OF SIGNED 8-BIT NUMBER.;.SQUARE
LDA MLPCND ; ENTRY TO SQUARE. BPL
POSITV ; USE ABSOLUTE VALUE. SEC
; NEGATE IF NEEDED. LDA #
$00. SBC MLPCND. STA MLPCND.
POSITV STA MLPLER.MULT LDA #$00 ; E
NTRY TO MULTIPLY. LDX #$08.MLOOP
LSR MLPLER. BCC NOADD. CLC.
ADC MLPCND.NOADD ROR A. ROR
PROD. DEX. BNE MLOOP.
STA PROD+1. RTS.;.;**************
***************************.;.; DIVIDE D
OUBLE PRECISION DIVIDEND.; BY DOUBLE PRE
CISION DIVISOR GIVING.; DOUBLE PRECISION
QUOTIENT.;.; DIVIDEND IS REPLACED BY QU
OTIENT.; IN THE PROCESS.;.; QUOTIENT IS
ROUNDED TO NEAREST INTEGER.;.DIVIDE LDA
#$00. STA RMNDR. STA RMNDR+1
. LDX #$10.DLOOP ROL DVDND.
ROL DVDND+1. ROL RMNDR. ROL
RMNDR+1. SEC. LDA RMNDR.
SBC DVSOR. TAY. LDA RMND
R+1. SBC DVSOR+1. BCC DECCNT
. STY RMNDR. STA RMNDR+1.DEC
CNT DEX. BNE DLOOP. ROL DVDN
D ; CHECK IF REMAINDER. ROL DV
DND+1 ; IS >= 1/2 OF DIVIDEND. A
SL RMNDR ; FOR ROUNDING. ROL R
MNDR+1. BCS ROUND. SEC.
LDA DVSOR. SBC RMNDR. LDA
DVSOR+1. SBC RMNDR+1. BCS NO
CHNG.ROUND INC DVDND. BNE NOCHNG.
INC DVDND+1.NOCHNG RTS.;.;*******
**********************************.;.; T
AKE INTEGER SQUARE ROOT OF A.; DOUBLE PR
ECISION RADICAND GIVING.; SINGLE PRECISI
ON ROOT ( <= REAL ROOT ).;.SQRT LDX #$
08. LDA #$00. STA ROOT.
STA ROOT+1. STA TEMP. STA
TEMP+1.SQRT1 ASL ROOT. ROL ROOT+1
. INC ROOT ; ASSUME CURRENT LSB
OF. BNE NEXT1 ; ROOT WILL BE 1.
INC ROOT+1.NEXT1 ASL RADCND ; S
HIFT RADICAND LEFT. ROL RADCND+1 ;
TWICE INTO TEMP. ROL TEMP.
ROL TEMP+1. ASL RADCND. ROL
RADCND+1. ROL TEMP. ROL TEMP
+1. SEC ; SUBTRACT ROOT ES
TIMATE. LDA TEMP ; FROM TEMP.
SBC ROOT. TAY. LDA TEMP
+1. SBC ROOT+1. BCC RESTOR.
STA TEMP+1 ; SUBTRACTION OK.
STY TEMP. INC ROOT. BNE NE
XT2. INC ROOT+1.NEXT2 DEX.
BNE SQRT1. JMP FINI.RESTOR SEC
; IGNORE SUBTRACTION. LDA ROO
T ; AND RESET LSB OF ROOT. SBC
#$01. STA ROOT. BCS NEXT3.
DEC ROOT+1.NEXT3 DEX. BNE SQ
RT1.FINI ROR ROOT+1 ; FINAL /2 TO NOR
MALIZE. ROR ROOT. RTS.;.;***
**************************************.;
.; GENERATE PSEUDO-RANDOM BYTES.; EXIT W
ITH P-R BYTE IN ACCUM..;.RANDOM LDA RNDM
. STA RTEMP. EOR RNDM+1.
ROL RTEMP+1 ; RTEMP+1 PRESERVES.
ROR A ; CARRY BIT FOR CYCLING.
ROR RTEMP+1 ; RANDOM NUMBERS.
STA RNDM. LDA RTEMP. STA
RNDM+1. RTS..END.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL