[Contents] [Commodore] [New] [Search] [Home]

Commodore 128 CP/M v3.0
6502 assembly macros

        ; This macro library is to be used with DRI's MAC or RMAC
	;   (MAC and RMAC are registered trademarks of Digital Research)
	;
	; The code structure is the same as normal 6502 asmabler
	; with the following differences:
	;
	;   Hex numbers '$00' are replaced with a number followed by an h
	;   i.e. normal 8080 type numbers  (also have binary, and octal)
	;
	;   The immediate instruction's format is different. Below is an
	;   example:
	;		normal 6502 ASM		LIB 6502 ASM

	;		lda	#$A5		lda	 0A5h,#
	;


	; Written by	Von Ertwine
	; 26 July 84
	;

xaaa	macro	@W,@Y,@Z
	 if	nul @Z
          if    @Y<256
	   db	@W+4,@Y
	  else
	   db	@W+12
	   dw	@Y	
	  endif
	 else
	  if	'&@Z'='X)'
	   db	@W,@Y&)
	  else
	   if	'&@Z'='X'
            if  @Y<256
	     db	@W+20,@Y
	    else
	     db	@W+28
	     dw	@Y
	    endif
	   else
	    if	'&@Z'='Y'
	     @A	set 0
	     irpc	@x,@y
	      if	'&@X'='('
	       @A	set 1
	      endif
	     endm
	     if	@A=1
	      db	@W+16,@Y
	     else
	      db	@W+24
	      dw	@Y
	     endif
	    else
	     if	'&@Z'='#'
              if        @Y<256
	       db	@W+8,@Y
	      else
	       db	@W,0,0
	       'Error'
	      endif
	     endif
	    endif
	   endif
	  endif
	 endif
	endm

xbb	macro	@W,@Y,@Z
	 @A	set 0
	 if	not nul @Z
	  @A	set 16
	  if	(@W=86h) or (@W=84h)
           if   @Y<256
	    'Error'
	   endif
	  endif
	 endif
         if     @Y<256
	  db	@W+@A,@Y
	 else
	  db	@W+@A+8
	  dw	@Y
	 endif
	endm

xbbb	macro	@W,@Y,@Z
	 if	NUL @Z
	  @A	set	0
	  irpc	@X,@Y
	   @A	set @A+1
	  endm
	  if	@A=1
	   if	'&@Y'='A'
	    db	@W+8
	   else
            if  @Y<256
	     db	@W+4,@Y
	    else
	     db	@W+12
	     dw	@Y
	    endif
	   endif
	  else	
           if   @Y<256
	    db	@W+4,@Y
	   else
	    db	@W+12
	    dw	@Y
	   endif
	  endif
	 else
          if    @Y<256
	   db	@W+20,@Y
	  else
	   db	@W+28
	   dw	@Y
	  endif
	 endif
	endm

xcc	macro	@W,@Y,@Z
	 if	NUL @Z
          if    @Y<256
	   db	@W+4,@Y
	  else
	   db	@W+12
	   dw	@Y
	  endif
	 else
	  if '&@Z'='#'
	   db	@W,@Y
	  else
	   'Error'
	  endif
	 endif
	endm

xddd	macro	@W,@Y,@Z
	 if	NUL @Z
          if    @Y<256
	   db	@W+4,@Y
	  else
	   db	@W+12
	   dw	@Y
	  endif
	 else
	  if	'&@Z'='#'
	   db	@W,@Y
	  else
           if   @Y<256
	    db	@W+20,@Y
	   else
	    db	@W+28
	    dw	@Y
	   endif
	  endif
	 endif
	endm



@adc	macro	@u,@v
	xaaa	61h,@u,@v
	endm

@and	macro	@u,@v
	xaaa	21h,@u,@v
	endm

@asl	macro	@u,@v
	xbbb	2,@u,@v
	endm

@bcc	macro	@u
	db	90h,@u-$-1
	endm

@bcs	macro	@u
	db	0b0h,@u-$-1
	endm

@beq	macro	@u
	db	0f0h,@u-$-1
	endm

@bit	macro	@u
         if     @u<256
	  db	24h,@u
	 else
	  db	2ch
	  dw	@u
	 endif
	endm

@bmi	macro	@u
	db	30h,@u-$-1
	endm

@bne	macro	@u
	db	0d0h,@u-$-1
	endm

@bpl	macro	@u
	db	10h,@u-$-1
	endm

@brk	macro
	db	00h
	endm

@bvc	macro	@u
	db	50h,@u-$-1
	endm

@bvs	macro	@u
	db	70h,@u-$-1
	endm

@clc	macro
	db	018h
	endm

@cld	macro
	db	0d8h
	endm

@cli	macro
	db	058h
	endm

@clv	macro
	db	0b8h
	endm

@cmp	macro	@u,@v
	xaaa	0c1h,@u,@v
	endm

@cpx	macro	@u,@v
	xcc	0e0h,@u,@v
	endm

@cpy	macro	@u,@v
	xcc	0c0h,@u,@v
	endm

@dec	macro	@u,@v
	xbb	0c6h,@u,@v
	endm

@dex	macro
	db	0cah
	endm

@dey	macro
	db	088h
	endm

@eor	macro	@u,@v
	xaaa	41h,@u,@v
	endm

@inc	macro	@u,@v
	xbb	0e6h,@u,@v
	endm

@inx	macro
	db	0e8h
	endm

@iny	macro
	db	0c8h
	endm

@jmp	macro	@u
	@A	set 0
	 irpc	@X,@u
	  if	'&@X'='('
	   @A	set 20h
	  endif
	 endm
	db	4ch+@A
	dw	@U
	endm

@jsr	macro	@u
	db	20h
	dw	@u
	endm

@lda	macro	@u,@v
	xaaa	0a1h,@u,@v
	endm

@ldx	macro	@u,@v
	xddd	0a2h,@u,@v
	endm

@ldy	macro	@u,@v
	xddd	0a0h,@u,@v
	endm

@lsr	macro	@u,@v
	xbbb	42h,@u,@v
	endm

@nop	macro
	db	0eah
	endm

@ora	macro	@u,@v
	xaaa	1,@u,@v
	endm

@pha	macro
	db	048h
	endm

@php	macro
	db	008h
	endm

@pla	macro
	db	068h
	endm

@plp	macro
	db	028h
	endm

@rol	macro	@u,@v
	xbbb	22h,@u,@v
	endm

@ror	macro	@u,@v
	xbbb	62h,@u,@v
	endm

@rti	macro
	db	040h
	endm

@rts	macro
	db	060h
	endm

@sbc	macro	@u,@v
	xaaa	0e1h,@u,@v
	endm

@sec	macro
	db	038h
	endm

@sed	macro
	db	0f8h
	endm

@sei	macro
	db	078h
	endm

@sta	macro	@u,@v
	xaaa	81h,@u,@v
	endm

@stx	macro	@u,@v
	xbb	86h,@u,@v
	endm

@sty	macro	@u,@v
	xbb	84h,@u,@v
	endm

@tax	macro
	db	0aah
	endm

@tay	macro
	db	0a8h
	endm

@tsx	macro
	db	0bah
	endm

@txa	macro
	db	08ah
	endm

@txs	macro
	db	09ah
	endm

@tya	macro
	db	098h
	endm

@skip1	macro
	db	024h
	endm

@skip2	macro
	db	02ch
	endm

[Contents] [Commodore] [New] [Search] [Home]
This page has been created by Sami Rautiainen.
Read the small print. Last updated September 05, 2020.