home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
utilpc
/
cc64
/
cc64.d64
/
bl02.asm
next >
Wrap
Assembly Source File
|
1994-09-25
|
4KB
|
252 lines
; CC64 RUNTIME MODULE
; TO RUN IN C64 AT $0801-$A000
; PHILIP ZEMBROD, 10.5.94
; LAST CHANGE : 10.5.94
ZP = $FB
BASE = $FD
ZP1 = $22
ZP2 = $24
STROUT = $AB1E
READY = $E37B
*= $0801
.WORD BASLINK
.WORD 1994
.BYTE $9E,' 2081:'
.BYTE $8F,' CC64 RT-LIB V1.0',0
BASLINK .WORD 0
JMP INIT
JUMPLIST
MAIN.ADR .WORD 0
CODE.LAST .WORD 0
INIT.FIRST .WORD 0
INIT.LAST .WORD 0
JMP (ZP)
JMP SWITCH
JMP MULT
JMP DIVMOD
JMP SHL
JMP SHR
INIT LDA CODE.LAST
STA BASE
LDA CODE.LAST + 1
STA BASE + 1
LDA INIT.LAST
STA ZP2
LDX INIT.LAST + 1
STX ZP2 + 1
LDY #0
INIT1 CMP INIT.FIRST
BNE INIT2
CPX INIT.FIRST + 1
INIT2 BEQ INIT5
SEC
SBC #1
BCS INIT3
DEX
INIT3 STA ZP2
STX ZP2 + 1
LDA (ZP2),Y
STA (BASE),Y
INC BASE
BNE INIT4
INC BASE + 1
INIT4 LDA ZP2
JMP INIT1
INIT5 JMP (MAIN.ADR)
SWITCH TAY
PLA
CLC
ADC #1
STA ZP
PLA
ADC #0
STA ZP+1
TYA
LDY #0
SWITCH1 PHA
LDA (ZP),Y
STA ZP1
INY
ORA (ZP),Y
BEQ SWITCH5
LDA (ZP),Y
STA ZP1+1
INY
; BNE SWITCH2
; INC ZP+1
SWITCH2 PLA
CMP (ZP),Y
PHP
INY
PLP
BNE SWITCH4
PHA
TXA
CMP (ZP),Y
BNE SWITCH3
PLA
JMP (ZP1)
SWITCH3 PLA
SWITCH4 INY
BNE SWITCH1
INC ZP+1
JMP SWITCH1
SWITCH5 SEC
TYA
ADC ZP
BCC SWITCH6
INC ZP+1
SWITCH6 JMP (ZP)
MULT STX ZP1 + 1
LSR ZP1 + 1
ROR
STA ZP1 ; MULTIPLIKATOR
LDA #0
STA ZP2
LDX #16
MU1 BCC MU2
TAY
LDA ZP2
CLC
ADC ZP
STA ZP2
TYA
ADC ZP + 1
MU2 ROR
ROR ZP2
ROR ZP1 + 1
ROR ZP1
DEX
BNE MU1
; TAY
LDA ZP1
LDX ZP1 + 1 ; LO-WORD PRODUKT
; TYA
; TAX
; LDA ZP2 ; HI-WORD PRODUKT
RTS
NEGATE CLC
EOR #$FF
ADC #1
TAY
TXA
EOR #$FF
ADC #0
TAX
TYA
RTS
DIVMOD STX ZP2 ; SIGN OF DIVISOR
BIT ZP2
BPL DIV1
JSR NEGATE
DIV1 TAY
LDA ZP + 1
STX ZP + 1
STA ZP2 + 1 ; SIGN OF DIVIDENT
TAX
EOR ZP2
ASL
ROR ZP2 ; SIGN DIVISOR/RESULT
LDA ZP
STY ZP
BIT ZP2 + 1
BPL DIV2
JSR NEGATE
DIV2 LDY #0
STY ZP1
STY ZP1 + 1
DIV3 CPX ZP + 1
BNE DIV4
CMP ZP
DIV4 BCC DIV5
ASL ZP
ROL ZP + 1
INY
BPL DIV3
LDA #<DIVñZERO
LDY #>DIVñZERO
JSR STROUT
JMP READY
DIV5 DEY
BMI DIV8
LSR ZP + 1
ROR ZP
CPX ZP + 1
BNE DIV6
CMP ZP
DIV6 PHP
BCC DIV7
SBC ZP
PHA
TXA
SBC ZP + 1
TAX
PLA
DIV7 PLP
ROL ZP1
ROL ZP1 + 1
BCC DIV5
BRK ; REMOVE THIS SOME DAY :)
DIV8 BIT ZP2+1
BPL DIV9
JSR NEGATE
DIV9 STA ZP
STX ZP + 1
LDA ZP1
LDX ZP1 + 1
BIT ZP2
BPL DIV10
JSR NEGATE
DIV10 RTS
SHL INY
SHL1 DEY
BEQ DIV10
ASL
PHA
TXA
ROL
TAX
PLA
JMP SHL1
SHR INY
SHR1 DEY
BEQ DIV10
PHA
TXA
ASL
TXA
ROR
TAX
PLA
ROR
JMP SHR1
DIVñZERO .BYTE 'DIVISION BY ZERO',13,0