home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
nasm20b
/
libinc
/
header
/
16bit.h65
next >
Wrap
Text File
|
1993-01-19
|
5KB
|
267 lines
.if .not .def _16BIT_
_16BIT_ = 1
.if .not .def _STDDEF_
.include #stddef
.endif
; usage: inc.w <address> increments 16 bit word
.macro inc.w
.if .def @__0
.undef @__0
.endif
inc %1
bne @__0
inc %1+1
@__0
.endm
; usage: dec.w <address> decrements 16 bit word
; destroys A
.macro dec.w
.if .def @__0
.undef @__0
.endif
lda %1
bne @__0
dec %1+1
@__0 dec %1
.endm
; usage: lsr.w <address> shifts 16 bit word right
; LSBit in carry
.macro lsr.w
lsr %1+1
ror %1
.endm
; usage: asl.w <address> shifts 16 bit word left
; MSBit in carry
.macro asl.w
asl %1
rol %1+1
.endm
; usage: rol.w <address> rotates 16 bit word left
; destroys A
; MSBit in carry
.macro rol.w
.warning "untested macro"
lda %1
asl a
rol %1+1
rol %1
.endm
; usage: ror.w <address> rotates 16 bit word right
; destroys A
; LSBit in carry
.macro ror.w
.warning "untested macro"
lda %1+1
lsr a
ror %1
ror %1+1
.endm
; usage: adc.w <value or address>,<address>[,select]
; Adds two 16 bit words together, like 68000 ADD.W src,dst
; destroys A
; Carry as usual
.macro adc.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if .not [@0 & @special]
clc
.endif
lda %2
.if @0 & @p1
adc #<%1
sta %2
lda %2+1
adc #>%1
.else
adc %1
sta %2
lda %2+1
adc %1+1
.endif
sta %2+1
.endm
; usage: adc8.w <src: value or address>,<dst: address> [,select]
; Adds 8 bit byte two 16 bit word.
;
; destroys A
; NO carry
.macro adc8.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if .def @__0
.undef @__0
.endif
.if .not [@0 & @special]
clc
.endif
lda %2
.if @0 & @p1
adc #<%1
.else
adc %1
.endif
sta %2
bcc @__0
inc %2+1
@__0
.endm
; usage: cmp.w <value or address>,<address>[,select]
; Compares two 16 bit words.
; like lda <address>
; cmp <value or address>
; destroys A
; NO carry
.macro cmp.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if .def @__0
.undef @__0
.endif
lda %2+1
.if @0 & @p1
cmp #>%1
bne @__0
lda %2
cmp #<%1
.else
cmp %1+1
bne @__0
lda %2
cmp %1
.endif
@__0
.endm
; usage: sbc.w <value or address>,<address>[,select]
; Subtracts two 16 bit words from another
; like SUB.W 16,value,@p1
; subtracts #16 from value
; destroys A
; Carry as usual
.macro sbc.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if .not [@0 & @special]
sec
.endif
lda %2
.if @0 & @p1
sbc #<%1
sta %2
lda %2+1
sbc #>%1
.else
sbc %1
sta %2
lda %2+1
sbc %1+1
.endif
sta %2+1
.endm
; usage: eor.w <value or address>,<address>[,select]
; Exclusiv ors two 16 bit words together
; destroys A
.macro eor.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if @0 & @p1
lda %2
eor #<%1
sta %2
lda %2+1
eor #>%1
sta %2+1
.else
lda %2
eor %1+1
sta %2
lda %2+1
eor %1+1
sta %2+1
.endif
.endm
; usage: and.w <value or address>,<address>[,select]
; Bitwise ANDs two 16 bit words together
; destroys A
.macro and.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if @0 & @p1
lda %2
and #<%1
sta %2
lda %2+1
and #>%1
sta %2+1
.else
lda %2
and %1+1
sta %2
lda %2+1
and %1+1
sta %2+1
.endif
.endm
; usage: ora.w <value or address>,<address>[,select]
; Bitwise ORs two 16 bit words together
; destroys A
.macro ora.w
@0 .= @p1
.if %0=3
@0 .= %3
.endif
.if @0 & @p1
lda %2
ora #<%1
sta %2
lda %2+1
ora #>%1
sta %2+1
.else
lda %2
ora %1+1
sta %2
lda %2+1
ora %1+1
sta %2+1
.endif
.endm
.macro neg.w
eor.w $FFFF,%1
inc.w %1
.endm
.endif