]> git.sur5r.net Git - cc65/commitdiff
added 4510 cpu detection to getcpu.s
authorSven Oliver Moll <svolli@svolli.de>
Wed, 7 Sep 2016 17:44:11 +0000 (19:44 +0200)
committerSven Oliver Moll <svolli@svolli.de>
Wed, 7 Sep 2016 17:44:11 +0000 (19:44 +0200)
include/6502.h
libsrc/common/getcpu.s

index 6c104c83af512858cc0e3cdfb6a9ec77ff9ebc8b..31398e5c10da1774467124f7ed3daaa1a628f897 100644 (file)
@@ -50,6 +50,7 @@ typedef unsigned size_t;
 #define CPU_6502        0
 #define CPU_65C02       1
 #define CPU_65816       2
+#define CPU_4510        3
 
 unsigned char getcpu (void);
 /* Detect the CPU the program is running on */
index b7954f52f065c69396e758b356c6237fae334c13..1e60a5d39710d633498d37af518f24b3d96a09c3 100644 (file)
@@ -12,6 +12,7 @@
 ;   - carry clear and 0 in A for a NMOS 6502 CPU
 ;   - carry set and 1 in A for some CMOS 6502 CPU
 ;   - carry set and 2 in A for a 65816
+;   - carry set and 3 in A for a 4510
 ;
 ; This function uses a $1A opcode which is a INA on the 816 and ignored
 ; (interpreted as a NOP) on a NMOS 6502. There are several CMOS versions
 
 _getcpu:
         lda     #0
-        inc     a               ; .byte $1A
+        inc     a               ; .byte $1A ; nop on nmos, inc on every cmos
         cmp     #1
         bcc     @L9
 
-; This is at least a 65C02, check for a 65816
+; This is at least a 65C02, check for a 4510
+
+        .byte   $42,$ea         ; neg on 4510, nop #$ea on 65c02, wdm $ea on 65816
+        cmp     #1
+        bne     @L8
+
+; check for 65816; after 4510, because $eb there is row (rotate word)
 
         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
+        .byte $2c               ; bit instruction to skip next command
+@L8:    lda     #3              ; CPU_4510 constant
 @L9:    ldx     #0              ; Load high byte of word
         rts