From 03ba3f74730e0898dabba33cff6ded1ebecb7d2c Mon Sep 17 00:00:00 2001 From: Marco van den Heuvel <blackystardust68@yahoo.com> Date: Fri, 23 Mar 2018 14:27:15 -0700 Subject: [PATCH] Added c16/plus4 fast(), isfast() and slow() functions, and updated the documentation accordingly. --- asminc/plus4.inc | 1 + doc/c128.sgml | 16 +++++++++--- doc/c16.sgml | 12 +++++++++ doc/funcref.sgml | 59 +++++++++++++++++++++++++------------------ doc/plus4.sgml | 13 ++++++++++ include/plus4.h | 8 ++++++ libsrc/plus4/fast.s | 22 ++++++++++++++++ libsrc/plus4/isfast.s | 22 ++++++++++++++++ libsrc/plus4/slow.s | 22 ++++++++++++++++ 9 files changed, 148 insertions(+), 27 deletions(-) create mode 100644 libsrc/plus4/fast.s create mode 100644 libsrc/plus4/isfast.s create mode 100644 libsrc/plus4/slow.s diff --git a/asminc/plus4.inc b/asminc/plus4.inc index 3b2f08c54..5ea4dcf88 100644 --- a/asminc/plus4.inc +++ b/asminc/plus4.inc @@ -73,6 +73,7 @@ TED_CURSLO := $FF0D TED_V1FRQLO := $FF0E TED_V2FRQLO := $FF0F TED_V2FRQHI := $FF10 +TED_CLK := $FF13 TED_BGCOLOR := $FF15 TED_COLOR1 := $FF16 TED_COLOR2 := $FF17 diff --git a/doc/c128.sgml b/doc/c128.sgml index 14c874998..2bfb37a3d 100644 --- a/doc/c128.sgml +++ b/doc/c128.sgml @@ -85,9 +85,6 @@ url="funcref.html" name="function reference"> for declaration and usage. <itemize> <item>videomode <item>c64mode -<item>fast -<item>slow -<item>isfast </itemize> @@ -123,6 +120,19 @@ declaration and usage. </itemize> +<sect1>CBM specific CPU functions<p> + +Some CPU related functions are available for some of the Commodore +machines. See the <url url="funcref.html" name="function reference"> for +declaration and usage. + +<itemize> +<item>fast +<item>slow +<item>isfast +</itemize> + + <sect1>Hardware access<p> The following pseudo variables declared in the <tt/c128.h/ header file do diff --git a/doc/c16.sgml b/doc/c16.sgml index 1614516b7..27938ff1e 100644 --- a/doc/c16.sgml +++ b/doc/c16.sgml @@ -126,6 +126,18 @@ declaration and usage. </itemize> +<sect1>CBM specific CPU functions<p> + +Some CPU related functions are available for some of the Commodore +machines. See the <url url="funcref.html" name="function reference"> for +declaration and usage. + +<itemize> +<item>fast +<item>slow +<item>isfast +</itemize> + <sect1>Hardware access<p> The following pseudo variables declared in the <tt/c16.h/ header file do diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 193a10c52..5f90cfd3e 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -140,6 +140,12 @@ function. <sect1><tt/c16.h/<label id="c16.h"><p> +<itemize> +<item><ref id="fast" name="fast"> +<item><ref id="isfast" name="isfast"> +<item><ref id="slow" name="slow"> +</itemize> + (incomplete) @@ -502,6 +508,12 @@ It does not declare any functions. <sect1><tt/plus4.h/<label id="plus4.h"><p> +<itemize> +<item><ref id="fast" name="fast"> +<item><ref id="isfast" name="isfast"> +<item><ref id="slow" name="slow"> +</itemize> + (incomplete) @@ -3292,21 +3304,21 @@ program, it may not be able to read it. <quote> <descrip> -<tag/Function/Switch the C128 into 2MHz mode. -<tag/Header/<tt/<ref id="c128.h" name="c128.h">/ +<tag/Function/Switch the CPU into fast mode (C128: 2MHz mode, C16/Plus4: double clock mode). +<tag/Header/<tt/<ref id="c128.h" name="c128.h">, +<ref id="c16.h" name="c16.h">, <ref id="plus4.h" name="plus4.h">/ <tag/Declaration/<tt/void fast (void);/ -<tag/Description/The function will switch the clock of the C128 to 2MHz. This -will nearly double the speed compared to slow mode. +<tag/Description/The function will switch the clock of the CPU to fast mode. For the C128 +target it means switching the CPU into 2MHz mode. For the C16/Plus4 target it means +switching the CPU into double clock mode. <tag/Notes/<itemize> -<item>The function is specific to the C128. -<item>2MHz clock will not work in 40 column mode. +<item>The function is specific to the C128, C16 and Plus4. +<item>On the C128 the 2MHz clock will not work in 40 column mode. </itemize> -<tag/Availability/C128 +<tag/Availability/cc65 (not all platforms) <tag/See also/ <ref id="isfast" name="isfast">, <ref id="slow" name="slow">, -<ref id="toggle_videomode" name="toggle_videomode">, -<ref id="videomode" name="videomode"> <tag/Example/None. </descrip> </quote> @@ -3960,19 +3972,18 @@ fastcall function, so it may only be used in presence of a prototype. <quote> <descrip> -<tag/Function/Check if the C128 is in 2MHz mode. -<tag/Header/<tt/<ref id="c128.h" name="c128.h">/ +<tag/Function/Check if the CPU is in fast mode (C128: 2MHz mode, C16/Plus4: double clock mode). +<tag/Header/<tt/<ref id="c128.h" name="c128.h">, +<ref id="c16.h" name="c16.h">, <ref id="plus4.h" name="plus4.h">/ <tag/Declaration/<tt/unsigned char isfast (void);/ -<tag/Description/The function returns a 1 if the C128 is in 2MHz mode. +<tag/Description/The function returns a 1 if the CPU is in fast mode (C128: 2MHz mode, C16/Plus4: double clock mode). <tag/Notes/<itemize> -<item>The function is specific to the C128. +<item>The function is specific to the C128, C16 and Plus4. </itemize> -<tag/Availability/C128 +<tag/Availability/cc65 (not all platforms) <tag/See also/ <ref id="fast" name="fast">, <ref id="slow" name="slow">, -<ref id="toggle_videomode" name="toggle_videomode">, -<ref id="videomode" name="videomode"> <tag/Example/None. </descrip> </quote> @@ -6086,20 +6097,20 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Switch the C128 into 1MHz mode. -<tag/Header/<tt/<ref id="c128.h" name="c128.h">/ +<tag/Function/Switch the CPU into slow mode (C128: 1MHz mode, C16/Plus4: single clock mode). +<tag/Header/<tt/<ref id="c128.h" name="c128.h">, +<ref id="c16.h" name="c16.h">, <ref id="plus4.h" name="plus4.h">/ <tag/Declaration/<tt/void slow (void);/ -<tag/Description/The function will switch the clock of the C128 to 1MHz. This -will halve the speed compared to fast mode. +<tag/Description/The function will switch the clock of the CPU to slow mode. for the C128 +target it means switching the CPU into 1MHz mode. for the C16/Plus4 target it means +switching the CPU into single clock mode. <tag/Notes/<itemize> -<item>The function is specific to the C128. +<item>The function is specific to the C128, C16 and Plus4. </itemize> -<tag/Availability/C128 +<tag/Availability/cc65 (not all platforms) <tag/See also/ <ref id="fast" name="fast">, <ref id="isfast" name="isfast">, -<ref id="toggle_videomode" name="toggle_videomode">, -<ref id="videomode" name="videomode"> <tag/Example/None. </descrip> </quote> diff --git a/doc/plus4.sgml b/doc/plus4.sgml index 36d53e753..c1b6165f6 100644 --- a/doc/plus4.sgml +++ b/doc/plus4.sgml @@ -124,6 +124,19 @@ declaration and usage. </itemize> +<sect1>CBM specific CPU functions<p> + +Some CPU related functions are available for some of the Commodore +machines. See the <url url="funcref.html" name="function reference"> for +declaration and usage. + +<itemize> +<item>fast +<item>slow +<item>isfast +</itemize> + + <sect1>Hardware access<p> The following pseudo variables declared in the <tt/plus4.h/ header file do diff --git a/include/plus4.h b/include/plus4.h index 81e3c5286..6edb947e5 100644 --- a/include/plus4.h +++ b/include/plus4.h @@ -59,6 +59,14 @@ extern void plus4_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void plus4_stdser_ser[]; +void fast (void); +/* Switch the CPU into double clock mode. */ + +void slow (void); +/* Switch the CPU into single clock mode. */ + +unsigned char isfast (void); +/* Returns 1 if the CPU is in double clock mode. */ /* End of plus4.h */ diff --git a/libsrc/plus4/fast.s b/libsrc/plus4/fast.s new file mode 100644 index 000000000..e48813969 --- /dev/null +++ b/libsrc/plus4/fast.s @@ -0,0 +1,22 @@ +; +; Marco van den Heuvel, 2018-03-20 +; +; void fast (void); +; /* Switch the CPU into double clock mode. */ +; + + .export _fast + + .include "plus4.inc" + + +.proc _fast + + lda TED_CLK + and #%11111101 + sta TED_CLK + rts + +.endproc + + diff --git a/libsrc/plus4/isfast.s b/libsrc/plus4/isfast.s new file mode 100644 index 000000000..ff104d97f --- /dev/null +++ b/libsrc/plus4/isfast.s @@ -0,0 +1,22 @@ +; +; Marco van den Heuvel, 2018-03-20 +; +; unsigned char isfast (void); +; /* Returns 1 if the CPU is in double clock mode. */ +; + + .export _isfast + + .include "plus4.inc" + + +.proc _isfast + + lda TED_CLK + lsr + and #$01 + ldx #$00 + rts + +.endproc + diff --git a/libsrc/plus4/slow.s b/libsrc/plus4/slow.s new file mode 100644 index 000000000..18b8c231c --- /dev/null +++ b/libsrc/plus4/slow.s @@ -0,0 +1,22 @@ +; +; Marco van den Heuvel, 2018-03-28 +; +; void slow (void); +; /* Switch the CPU into single clock mode. */ +; + + .export _slow + + .include "plus4.inc" + + +.proc _slow + + lda TED_CLK + ora #%00000010 + sta TED_CLK + rts + +.endproc + +