You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
4.3 KiB

ZSDOS CLOCK SPECIFICATIONS
--------------------------
Clocks that are used with ZSDOS/ZDDOS and are loaded with the
SETUPZST utility must conform to the following specifications.
SETUPZST contains a MicroSoft REL format linker. The clock module
must be assembled as a single source file by either SLR's Z80ASM or
SLR180 or with Al Hawley's ZMAC.
Five different segments are used within each clock module. The
segments are differentiated by using different relocation bases for
each. The segments are:
_CLKID_ [100H] Static year pointer, clock name, clock description
_PARM_ [100H] Configuration parameters and prompt strings
CSEG Actual clock driver code
_POST_ [100H] Image patch code that places _PARM_ into CSEG
_PRE_ Clock validation code
The _PARM_ and _POST_ segments are used only while SETUPZST is active
and do not appear in the final load module. Note that unlike named
commons in NZCOM and JETLDR, these relocation bases have length and
code associated with them. SETUPZST contains an internal linker that
is responsible for resolving these addresses.
All segments MUST be present in the file!
CODING GUIDELINES:
------------------
The actual code for the clock driver is part of the operating
system and as such must save and restore ANY non-8080 registers it
uses. All routines may assume 4 levels of system stack are avaliable.
No 8080 registers need be preserved unless noted. SETUPZST does not
affect interrupts, nor does the loader. The author of the overlay is
responsible to ensure that interrupts are disabled and re-enabled if
this is required.
Several macros and constants are defined in CLOCKS.LIB. The
normal clock validation code is located in PRECLOCK.LIB. Make use of
these where applicable.
STRUCTURE OF INDIVIDUAL SEGMENTS:
---------------------------------
INCLUDE CLOCKS.LIB ;get normal defines and macros
; Clock ID segment
COMMON /_CLKID_/
DESCST: DEFW 0 ;static year pointer
CLKNAM: DEFB 'Name of clock Vx.x'
DEFS CLKNAM+23-$,' '
DEFB 0 ;exactly 24 bytes
DESCR: DEFZ 'What this clock runs on'
;segment size must be < 256 bytes
; Parameter fetch structure
COMMON /_PARM_/
PARBAS: DEFW NPARMS ;# of parameters
DEFW STRS ;pointer to prompt strings
NP0: DEFB BYTE ;byte/word flag - defined in CLOCK.LIB
XMHZ: DEFW 4 ;default clock speed
DEFB BYTE
PARM1: DEFW PRM1 ;value of parm1
... ;more parms as required...
NPARMS EQU [$-NP0]/3
STRS: DEFZ 'Clock speed in MHZ'
DEFZ 'Prompt string 1'
...
; Actual clock driver code
CSEG
; Header for clock with Read and Set
; Call with: HL pointing to 6 byte user buffer for time
; Returns: HL pointing to user buffer + 5
; E = original contents of user buffer + 5
; A = 01H if successful, 0FFH if error
JP GETTIM ;read clock
JP PUTTIM ;set clock
VMHZ: DEFB 0 ;cpu speed (if needed)
...
; Header for clock with read only
JP GETTIM ;read clock
DEFB 0 ;filler or data that's never 0C3H
VMHZ: DEFB 0 ;cpu speed (if needed)
GETTIM: ...
LD E,(HL) ;hl pointing to last byte of buffer
LD (HL),A ;store new data
JP TIMXT
SETTIM: ...
LD E,(HL) ;hl pointing to last byte of buffer
LD (HL),A ;store new data
TIMXT: XOR A
INC A ;set a to one for success
RET ;and return to caller
; Install configuration items into code segment
COMMON /_POST_/
SETBYT XMHZ,VMHZ ;macro defined in CLOCKS.LIB
RET
; Validate clock prior to install - returns cy set if OK
COMMON /_PRE_/
INCLUDE PRECLOCK.LIB ;normal validation code