00000000: 3B 20 57 44 49 56 20 2D 20 31 36 20 42 49 54 20 |; WDIV - 16 BIT |
00000010: 55 4E 53 49 47 4E 45 44 20 44 49 56 49 44 45 0D |UNSIGNED DIVIDE.|
00000020: 20 44 45 46 20 57 44 49 56 20 53 59 54 4D 50 25 | DEF WDIV SYTMP%|
00000030: 20 2C 20 53 59 50 4E 54 25 20 2C 20 2E 53 59 43 | , SYPNT% , .SYC|
00000040: 4E 54 0D 20 20 49 46 20 53 59 50 4E 54 20 4F 52 |NT. IF SYPNT OR|
00000050: 20 53 59 50 4E 54 2B 31 20 3D 20 30 20 47 4F 54 | SYPNT+1 = 0 GOT|
00000060: 4F 20 53 59 57 44 45 0D 20 20 4C 44 58 20 23 31 |O SYWDE. LDX #1|
00000070: 0D 53 59 57 44 31 20 4C 45 54 20 53 59 50 4E 54 |.SYWD1 LET SYPNT|
00000080: 2B 31 20 41 4E 44 20 24 38 30 20 3A 20 42 4E 45 |+1 AND $80 : BNE|
00000090: 20 53 59 57 44 32 0D 20 20 49 4E 58 20 3A 20 41 | SYWD2. INX : A|
000000A0: 53 4C 20 53 59 50 4E 54 20 3A 20 52 4F 4C 20 53 |SL SYPNT : ROL S|
000000B0: 59 50 4E 54 2B 31 0D 20 20 47 4F 54 4F 20 53 59 |YPNT+1. GOTO SY|
000000C0: 57 44 31 0D 53 59 57 44 32 20 4C 45 54 20 30 20 |WD1.SYWD2 LET 0 |
000000D0: 2D 3E 20 53 59 54 4D 50 31 20 2D 3E 20 53 59 54 |-> SYTMP1 -> SYT|
000000E0: 4D 50 31 2B 31 0D 53 59 57 44 33 20 4C 45 54 20 |MP1+1.SYWD3 LET |
000000F0: 53 59 54 4D 50 20 2D 20 53 59 50 4E 54 20 3A 20 |SYTMP - SYPNT : |
00000100: 54 41 59 0D 20 20 4C 44 41 20 53 59 54 4D 50 2B |TAY. LDA SYTMP+|
00000110: 31 20 3A 20 53 42 43 20 53 59 50 4E 54 2B 31 0D |1 : SBC SYPNT+1.|
00000120: 20 20 42 43 43 20 53 59 57 44 34 0D 20 20 53 54 | BCC SYWD4. ST|
00000130: 41 20 53 59 54 4D 50 2B 31 20 3A 20 54 59 41 20 |A SYTMP+1 : TYA |
00000140: 3A 20 53 54 41 20 53 59 54 4D 50 0D 20 20 53 45 |: STA SYTMP. SE|
00000150: 43 0D 53 59 57 44 34 20 52 4F 4C 20 53 59 54 4D |C.SYWD4 ROL SYTM|
00000160: 50 31 20 3A 20 52 4F 4C 20 53 59 54 4D 50 31 2B |P1 : ROL SYTMP1+|
00000170: 31 0D 20 20 4C 53 52 20 53 59 50 4E 54 2B 31 20 |1. LSR SYPNT+1 |
00000180: 3A 20 52 4F 52 20 53 59 50 4E 54 0D 20 20 44 45 |: ROR SYPNT. DE|
00000190: 58 20 3A 20 42 4E 45 20 53 59 57 44 33 0D 53 59 |X : BNE SYWD3.SY|
000001A0: 57 44 35 20 4C 45 54 20 53 59 50 4E 54 20 3D 20 |WD5 LET SYPNT = |
000001B0: 53 59 43 4E 54 0D 20 20 4C 45 54 20 53 59 50 4E |SYCNT. LET SYPN|
000001C0: 54 2B 31 20 3D 20 53 59 43 4E 54 2B 31 0D 20 20 |T+1 = SYCNT+1. |
000001D0: 4C 44 59 20 23 30 20 3A 20 4C 45 54 20 28 53 59 |LDY #0 : LET (SY|
000001E0: 50 4E 54 29 2C 59 20 3D 20 53 59 54 4D 50 31 0D |PNT),Y = SYTMP1.|
000001F0: 20 20 49 4E 59 20 3A 20 4C 45 54 20 28 53 59 50 | INY : LET (SYP|
00000200: 4E 54 29 2C 59 20 3D 20 53 59 54 4D 50 31 2B 31 |NT),Y = SYTMP1+1|
00000210: 0D 20 20 52 45 54 55 52 4E 0D 53 59 57 44 45 20 |. RETURN.SYWDE |
00000220: 4C 45 54 20 24 46 46 20 2D 3E 20 53 59 54 4D 50 |LET $FF -> SYTMP|
00000230: 31 20 2D 3E 20 53 59 54 4D 50 31 2B 31 0D 20 20 |1 -> SYTMP1+1. |
00000240: 47 4F 54 4F 20 53 59 57 44 35 0D 20 45 4E 44 44 |GOTO SYWD5. ENDD|
00000250: 45 46 20 57 44 49 56 0D 00 00 00 FF |EF WDIV..... |
; WDIV - 16 BIT UNSIGNED DIVIDE. DEF WDI
V SYTMP% , SYPNT% , .SYCNT. IF SYPNT OR
SYPNT+1 = 0 GOTO SYWDE. LDX #1.SYWD1 L
ET SYPNT+1 AND $80 : BNE SYWD2. INX : A
SL SYPNT : ROL SYPNT+1. GOTO SYWD1.SYWD
2 LET 0 -> SYTMP1 -> SYTMP1+1.SYWD3 LET
SYTMP - SYPNT : TAY. LDA SYTMP+1 : SBC
SYPNT+1. BCC SYWD4. STA SYTMP+1 : TYA
: STA SYTMP. SEC.SYWD4 ROL SYTMP1 : ROL
SYTMP1+1. LSR SYPNT+1 : ROR SYPNT. DE
X : BNE SYWD3.SYWD5 LET SYPNT = SYCNT.
LET SYPNT+1 = SYCNT+1. LDY #0 : LET (SY
PNT),Y = SYTMP1. INY : LET (SYPNT),Y =
SYTMP1+1. RETURN.SYWDE LET $FF -> SYTMP
1 -> SYTMP1+1. GOTO SYWD5. ENDDEF WDIV.
....
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL