	TITLE	"Clock module name - (REL clock name here)"
	SUBTTL	"Description of Clock Module"
;================================================================
; Place brief description and machine clock I/O parameters here
; along with any version and date data
;================================================================

VERS	EQU	01
	.Z80
	NAME	CCLOK		; Change this to no more than 6-char
				; name for the REL driver module

	MACLIB	CLOCK.LIB	; Some useful equates are here

; This first section contains identification information for the driver
; The information is not placed in the clock driver code section, but are
; located in a different area located by the _CLKID Named Common directive.

	COMMON	/_CLKID/

DESCST:	DEFW	0000		; Add label here if a static year byte
				; is used by your clock driver.  The
				; label should point to the year byte

CLKNAM:	DEFB	'Myclock                 '	; Exactly 24 chars in name
	DEFB	VERS/10+'0','.',VERS MOD 10 +'0',0

DESCR:	DEFB	'  This description may be longer than the brief',CR,LF
	DEFB	'  name string above, and must be null-terminated',0

	  IF  [$-DESCST] > 256
	OVER2			; This must be less than or equal to 256 bytes
	  ENDIF

	PAGE
	SUBTTL	"Configurable Clock Hardware Parameters"
;---------------------------------------------------------------------
; This section contains any configurable parameters needed for the
; clock driver.  They must be structured in the manner shown in order
; for the loader to properly match and set the values.
; The values in this section are not loaded in the same code section
; as the actual driver code, but are located in another base referenced
; by the _PARM_ Named Common directive.

	COMMON	/_PARM_/

PARBAS:	DEFW	NPARAMS		; # of parameters (Set to 00 if none)
	DEFW	STRS		; Pointer to STRS (Set to 00 if none)
NP0:
XYR	EQU	$+1
	DEFB	BYTE		; EXAMPLE! - This shows a byte value
	DEFW	88H		;    "     - ..and default value in Set

XPORT	EQU	$+1
	DEFB	WORD		; EXAMPLE! - This shows a 16-bit value
	DEFW	0F013H		;    "     - ..and default value in Set

NPARAMS	EQU	($-NP0)/3

STRS:	DEFB	'Default Year',0	; EXAMPLE! - Text prompt for XYR
	DEFB	'Default Port',0	; EXAMPLE! - Text prompt for XPORT

	PAGE
	SUBTTL	"Clock Code - SB180 HeartBeat"
;------------------------------------------------------------------
; This section should contain the actual Clock Driver code, and all
; entries here are located in the CSEG, or Code Segment.

	CSEG

; Add any needed equates here if they are not included in CLOCK.LIB

TIMOFF	EQU	36H		; EXAMPLE! - Bios offset for clock ptr

;-----------------------------------------------------------
;	    Z S D O S    C L O C K    H E A D E R
;-----------------------------------------------------------
; Enter: HL points to a 6-byte buffer to Get/Set time
; Exit :  A=1 on Success, A=FFH if error
;	 HL points to last char in buffer
; NOTE: If clock Set is not included, comment these two jumps
;	out to save a few bytes.  The loader, SETUPZST, uses
;	these two jumps to recognize a full ZSDOS clock and
;	modify the interface code.

PRGBAS:	JP	GETTIM		; Jump to Read Clock
	JP	WRCLK		; Jump to Set Clock

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		R e a d    T h e    C l o c k
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Clock READ code starts here.

GETTIM:				; The work of reading the clock
				; goes here.  Values needing to be set
				; during installation are referenced as:
;YPORT1	EQU	$+1
;	LD	BC,0000		; EXAMPLE! - this will set a 16-bit value
;				;	in the configuration process
;YYR	EQU	$+1		; EXAMPLE! - This will set an 8-bit value
;	LD	A,00		;	in the configuration process

; ... Place the meat of the driver in this section ...

OKRET:	LD	A,01		; Set OK status return
	RET

ERRET:	OR	0FFH		; Set Error code if needed
	RET

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		S e t    T h e    C l o c k
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Clock Set code placed here if needed.  If Clock Setting
; is not being added, comment out this section to save a
; byte of code.

WRCLK:
	RET

	PAGE
	SUBTTL	"Run-Time Configuration of Ports and Masks"
;-------------------------------------------------------------
; This code installs configurable items into the clock module
; Enter with DE pointing to the physical base address of the
;	 relocatable module.  DE MUST BE USED TO SET VALUES IN
;	 THE CSEG PORTION OF CODE!
; NOTE: Code in this section is not added to the actual clock
;	driver, but placed in a different area referenced to
;	the common base _POST_.

	COMMON	/_POST_/

; Values in the _PARM_, _POST_ and _PRE_ sections may be loaded
; and saved directly, since their addresses are constant from
; linkage through execution.  Setting or reading values in the
; CSEG must be indirect based on the value in the DE register
; pair.  The following examples show how to access the various
; sections.
;
;	LD	A,(XYR)		; EXAMPLE - Get byte from _PARM_ directly
;	LD	HL,YYR		;    "    - Begin offset into CSEG indirectly
;	ADD	HL,DE		;    "    - HL now addresses relocated loc'n
;	LD	(HL),A		;    "    - ..so value can be stored
;
; Likewise, 16-bit values must be accessed indirectly, and may use
; the BC register pair as transfer storage.
;
;	LD	BC,(XPORT)	; EXAMPLE - Get word from _PARM_ directly
;	LD	HL,YPORT1	;    "    - Begin offset into CSEG indirectly
;	ADD	HL,DE		;    "    - HL now addresses relocated loc'n
;	LD	(HL),C		;    "    - ..so value can be saved..
;	INC	HL		;    "    - ...a byte..
;	LD	(HL),B		;    "    - ....at a time..
;
;	LD	(YPORT2),BC	; EXAMPLE - Values can be stored directly into
;				     "    - other sections such as _PRE_

	RET		; This RETURN MUST be present even if no other
			; code is included in this section


	PAGE
	SUBTTL	"Pre-Execution Clock Checks (Check for ticking)"
;----------------------------------------------------------------
; This module is executed just prior to installing the module to
;   insure that a valid clock is present
; Enter with DE pointing to base of relocated clock code segment

	COMMON	/_PRE_/

; Optional final setup of the clock module may go here.  Examples of such
; code would be installation-dependant items such as physical RAM location
; for the driver module.  If any code is added here, the DE register pair
; MUST be preserved to properly inter PRECLOCK code (If included).

;YPORT2	EQU	$+1		; EXAMPLE - just to show accessing method
;	LD	BC,0000		;    "    - ..from _POST_ code.

	INCLUDE	PRECLOCK.LIB	; This section of code merely calls the
				; clock and waits an arbitrary period of
				; time (>> 1 second) to see if the time
				; changes.  It returns an error if not.
	END
