AppleIIAsm-Collection/source/diskX_minidisk_A/T.MIN.SUB.DIVD16
nathanriggs c8cac53c5e Rev 0.4 updates
Massive updates that changes the way most subroutines are handled. Major bugfixes, various utilities added, started higher-level libraries.
2019-04-26 18:49:10 -04:00

160 lines
3.3 KiB
Plaintext

UDIVD16
LDA #0
BEQ UDIVMD
UREMD16
LDA #2
UDIVMD
STA _RSLTI
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA _DVSOR
PLA
STA _DVSOR+1
PLA
STA _DVEND
PLA
STA _DVEND+1
JSR UDIV
BCC DIVOK
DIVERR JMP EREXIT
DIVOK JMP OKEXIT
SDIVD16
LDA #0
BEQ SDIVMD
SREMD16
LDA #2
BNE SDIVMD
SDIVMD
STA _RSLTI ;RESULT INDEX;0=Q,2=R
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA _DVSOR
PLA
STA _DVSOR+1
PLA
STA _DVEND
PLA
STA _DVEND+1
LDA _DVEND+1
EOR _DVSOR+1
STA _SQUOT
LDA _DVEND+1
STA _SREMD
LDA _DVSOR+1
BPL CHKDE
LDA #0
SEC
SBC _DVSOR
STA _DVSOR
LDA #0
SBC _DVSOR+1
STA _DVSOR+1
CHKDE
LDA _DVEND+1
BPL DODIV
LDA #0
SEC
SBC _DVEND
STA _DVEND
LDA #0
SBC _DVEND+1
STA _DVEND+1
DODIV
JSR UDIV
BCS EREXIT
LDA _SQUOT
BPL DOREM
LDA #0
SEC
SBC _DVEND
STA _DVEND
LDA #0
SBC _DVEND+1
STA _DVEND+1
DOREM
LDA _SREMD
BPL OKEXIT
LDA #0
SEC
SBC _DVEND+2
STA _DVEND+2
LDA #0
SBC _DVEND+3
STA _DVEND+3
JMP OKEXIT
EREXIT
LDA #0
STA _DVEND
STA _DVEND+1 ;QUOTIENT = 0
STA _DVEND+2
STA _DVEND+3
STA RETURN
STA RETURN+1
LDA #2
STA RETLEN
SEC
BCS DVEXIT
OKEXIT
CLC
DVEXIT
LDX _RSLTI ;GET INDEX TO RESULT
LDA _DVEND,X
TAY
LDA _DVEND+1,X
TAX
STY RETURN
STX RETURN+1
LDA #2
STA RETLEN
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
UDIV
LDA #0
STA _DVEND+2
STA _DVEND+3
LDA _DVSOR
ORA _DVSOR+1
BNE OKUDIV
SEC
RTS
OKUDIV
LDX #16
DIVLP
ROL _DVEND ;SHFT CARRY INTO BIT 0 OF DVEND
ROL _DVEND+1 ;WHICH WILL BE THE QUOTIENT AND
ROL _DVEND+2 ;SHFT DVEND AT THE SAME TIME
ROL _DVEND+3
CHKLT
SEC
LDA _DVEND+2
SBC _DVSOR
TAY
LDA _DVEND+3
SBC _DVSOR+1 ;SUB HIGHBYTES W RES IN A
BCC DECCNT
STY _DVEND+2
STA _DVEND+3 ;VEN(1)=DVEND(1)-DVSOR
DECCNT
DEX
BNE DIVLP
ROL _DVEND ;SHFT IN LAST CAR FOR QUOT
ROL _DVEND+1
CLC
RTS
_DVSOR DS 2
_DVEND DS 4
_SQUOT DS 1
_SREMD DS 1
_RSLTI DS 1