]> git.sur5r.net Git - cc65/blobdiff - libsrc/c128/acc_c128_speed.s
Changed c128 accelerator code and documention to include both C64 and C128 support.
[cc65] / libsrc / c128 / acc_c128_speed.s
diff --git a/libsrc/c128/acc_c128_speed.s b/libsrc/c128/acc_c128_speed.s
new file mode 100755 (executable)
index 0000000..c3012b2
--- /dev/null
@@ -0,0 +1,56 @@
+;
+; Marco van den Heuvel, 2018-04-23
+;
+
+; extern unsigned char __fastcall__ set_c128_speed (unsigned char speed);
+;
+;/* Set the speed of the C128 8502 CPU, using SPEED_SLOW will switch to
+; * 1 Mhz (slow) mode, SPEED_2X or SPEED_FAST will switch to 2Mhz (fast) mode.
+; *
+; * Note that any value higher or equal to SPEED_2X will switch to fast mode.
+; *
+; * This function will return the actual speed the CPU is at after trying
+; * to set the requested speed, to my knowledge the switching should not fail.
+; *
+; * For C64 programs a check for a C128 in C64 mode is needed, make sure you
+; * use 'detect_c128();' before using.
+; *
+; * For C128 programs no detect function call is needed.
+; */
+
+; extern unsigned char get_c128_speed (void);
+;
+;/* Get the speed of the C128 8502 CPU.
+; *
+; * Possible return values:
+; * SPEED_SLOW  : Slow mode
+; * SPEED_2X    : Fast mode
+; *
+; * For C64 programs a check for a C128 in C64 mode is needed, make sure you
+; * use 'detect_c128();' before using.
+; *
+; * For C128 programs no detect function call is needed.
+; */
+
+        .export         _set_c128_speed
+        .export         _get_c128_speed
+
+        .include        "accelerator.inc"
+
+_set_c128_speed:
+        cmp     #SPEED_2X
+        bcs     high_speed
+store_speed:
+        sta     C128_VICIIE_CLK
+
+        .byte   $2C              ; skip over the lda #$01
+high_speed:
+        lda     #$01
+        bne     store_speed
+
+_get_c128_speed:
+        lda     C128_VICIIE_CLK
+        and     #$01
+        ldx     #$00
+        rts
+