
; ---------------------------------------------------------------------------
; Subroutine to detect an 816. Returns
;
;   - carry clear and 0 in A for a NMOS 6502 CPU
;   - carry set and 1 in A for CMOS 6502 CPUs
;   - carry set and 2 in A for a 65816
;
; This function uses a $1A opcode which is a INA on the 816 and C02, and
; ignored (interpreted as a NOP) on a NMOS 6502. Detection of the 65816 is
; done by the xba instruction which is a NOP on the 65C02s.

GetCPU:	lda	#0
      	inc	a	      	; .byte $1a
      	cmp	#1
       	bcc    	@L9

; This is at least a 65C02, check for a 65816

      	xba		    	; .byte $eb, put $01 in B accu
      	dec	a     		; .byte $3a, A=$00 if 65C02
       	xba    	       	       	; .byte $eb, get $01 back if 65816
       	inc    	a      	       	; .byte $1a, make $01/$02
@L9:	rts

--
Ullrich von Bassewitz                                  uz@musoftware.de

