mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2025-02-07 21:30:32 +00:00
- getting ready for major changes for 0.6.0. - be sure to download the 0.5.0 release to ensure proper functionality, as these rountines will not work together in the SRC or BIN folder during the transition - Beginning to significantly alter documentation
65 lines
2.0 KiB
NASM
65 lines
2.0 KiB
NASM
*
|
|
*``````````````````````````````*
|
|
* DIVD16 (NATHAN RIGGS) *
|
|
* *
|
|
* DIVIDE WITH 16-BIT VALUES. *
|
|
* *
|
|
* ADAPTED FROM LISTINGS IN THE *
|
|
* C=64 MAGAZINES. *
|
|
* *
|
|
* INPUT: *
|
|
* *
|
|
* WPAR1 = DIVIDEND *
|
|
* WPAR2 = DIVISOR *
|
|
* *
|
|
* OUTPUT: *
|
|
* *
|
|
* .A = LOBYTE OF RESULT *
|
|
* .X = HIBYTE OF RESULT *
|
|
* RETURN = RESULT (2 BYTES) *
|
|
* RETLEN = RESULT BYTE LENGTH *
|
|
* *
|
|
* DESTROY: AXYNVBDIZCMS *
|
|
* ^^^^ ^^^ *
|
|
* *
|
|
* CYCLES: 92+ *
|
|
* SIZE: 53 BYTES *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
]DVEND EQU WPAR1
|
|
]DVSOR EQU WPAR2
|
|
]REM EQU WPAR3
|
|
]RESULT EQU WPAR1
|
|
*
|
|
DIVD16
|
|
LDA #0 ; RESET REMAINDER
|
|
STA ]REM
|
|
STA ]REM+1
|
|
LDX #16 ; NUMBER OF BITS
|
|
:DVLP
|
|
ASL ]DVEND ; LOBYTE * 2
|
|
ROL ]DVEND+1 ; HIBYTE * 2
|
|
ROL ]REM ; LOBYTE * 2
|
|
ROL ]REM+1 ; HIBYTE * 2
|
|
LDA ]REM
|
|
SEC ; SET CARRY
|
|
SBC ]DVSOR ; SUBTRACT DIVISOR
|
|
TAY ; TO SEE IF IT FITS IN DVEND,
|
|
LDA ]REM+1 ; HOLD LOBYTE IN .Y
|
|
SBC ]DVSOR+1 ; AND DO SAME WITH HIBYTES
|
|
BCC :SKIP ; IF C=0, DVSOR DOESN'T FIT
|
|
*
|
|
STA ]REM+1 ; ELSE SAVE RESULT AS REM
|
|
STY ]REM
|
|
INC ]RESULT ; AND INC RES
|
|
:SKIP
|
|
DEX ; DECREASE BIT COUNTER
|
|
BNE :DVLP ; RELOOP IF > 0
|
|
LDA #2 ; LENGTH OF RESULT IN BYTES
|
|
STA RETLEN ; STORED IN RETLEN
|
|
LDA ]RESULT ; STORE RESULT LOBYTE
|
|
STA RETURN ; IN .A AND RETURN
|
|
LDX ]RESULT+1 ; STORE HIBYTE IN .X
|
|
STX RETURN+1 ; AND IN RETURN+1
|
|
RTS
|