mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2025-03-20 07:29:34 +00:00
127 lines
2.9 KiB
ArmAsm
Executable File
127 lines
2.9 KiB
ArmAsm
Executable File
********************************
|
|
* Mathematical routines used *
|
|
* by Jewel of Kaldun *
|
|
********************************
|
|
|
|
|
|
********************************
|
|
* Integer division routine. *
|
|
* NUM0 = routine scratch *
|
|
* space *
|
|
* NUM1 = numerator *
|
|
* NUM2 = denominator *
|
|
* RESULT = quotient *
|
|
* remainder is in NUM1 after *
|
|
* completion of division. *
|
|
********************************
|
|
|
|
IDIV LDA #0
|
|
STA RESULT
|
|
STA RESULT+1
|
|
LDA NUM2
|
|
ORA NUM2+1
|
|
BNE :PREP
|
|
SEC
|
|
RTS
|
|
:PREP LDX #0
|
|
LDA NUM2
|
|
STA NUM0
|
|
LDA NUM2+1
|
|
STA NUM0+1
|
|
:99 ASL NUM0
|
|
ROL NUM0+1
|
|
BCS :GO
|
|
INX
|
|
JMP :99
|
|
:GO LDA NUM2
|
|
STA NUM0
|
|
LDA NUM2+1
|
|
STA NUM0+1
|
|
TXA
|
|
TAY
|
|
BEQ :SKIP
|
|
:0 ASL NUM0
|
|
ROL NUM0+1
|
|
DEY
|
|
BNE :0
|
|
:SKIP LDA NUM0+1
|
|
CMP NUM1+1
|
|
BEQ :1
|
|
BGE :CONT
|
|
BLT :2
|
|
:1 LDA NUM0
|
|
CMP NUM1
|
|
BEQ :2
|
|
BGE :CONT
|
|
:2 SEC
|
|
LDA NUM1
|
|
SBC NUM0
|
|
STA NUM1
|
|
LDA NUM1+1
|
|
SBC NUM0+1
|
|
STA NUM1+1
|
|
LDA #0
|
|
STA NUM0+1
|
|
LDA #1
|
|
STA NUM0
|
|
TXA
|
|
TAY
|
|
BEQ :11
|
|
:10 ASL NUM0
|
|
ROL NUM0+1
|
|
DEY
|
|
BNE :10
|
|
:11 CLC
|
|
LDA RESULT
|
|
ADC NUM0
|
|
STA RESULT
|
|
LDA RESULT+1
|
|
ADC NUM0+1
|
|
STA RESULT+1
|
|
:CONT DEX
|
|
BPL :GO
|
|
CLC
|
|
RTS
|
|
|
|
********************************
|
|
* Integer multiplication *
|
|
* routine: *
|
|
* NUM1 = one number *
|
|
* NUM2 = second number *
|
|
* RESULT = answer to NUM1xNUM2 *
|
|
********************************
|
|
|
|
IMUL LDA #0
|
|
STA RESULT
|
|
STA RESULT+1
|
|
:MORE LDA NUM2
|
|
BNE :GO
|
|
LDA NUM2+1
|
|
BNE :GO
|
|
RTS
|
|
:GO LSR NUM2+1
|
|
ROR NUM2
|
|
BCC :SHIFT
|
|
CLC
|
|
LDA NUM1
|
|
ADC RESULT
|
|
STA RESULT
|
|
LDA NUM1+1
|
|
ADC RESULT+1
|
|
STA RESULT+1
|
|
:SHIFT ASL NUM1
|
|
ROL NUM1+1
|
|
JMP :MORE
|
|
|
|
********************************
|
|
* Variables used by the *
|
|
* integer multiplication and *
|
|
* division routines: *
|
|
********************************
|
|
|
|
NUM0 HEX 0000
|
|
NUM1 HEX 0000
|
|
NUM2 HEX 0000
|
|
RESULT HEX 0000
|
|
|