mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
256 lines
8.5 KiB
Plaintext
256 lines
8.5 KiB
Plaintext
ZMP Overlay Update Information
|
||
|
||
This file contains information on updating ZMP overlays designed for
|
||
previous versions to the current version. Newer versions appear first in
|
||
this file.
|
||
|
||
Updates to ZMP14 Overlays for use with ZMP15.
|
||
---------------------------------------------
|
||
|
||
The changes required here are associated with ZMP15's ability to access
|
||
either of two UART ports, if available on the specific machine. One entry
|
||
needs to be added to the jump table, and an extra routine needs to be added
|
||
to set which port is in use. Lines which must be added to the overlay have
|
||
an asterisk at the beginning.
|
||
|
||
1. Add an entry to the jump table.
|
||
|
||
Add the following instruction at the end of the jump table, after the
|
||
'jp getvars' instruction and before the spare jumps:
|
||
|
||
* jp setport ; Set the modem port being used
|
||
|
||
2. Add the setport routine.
|
||
|
||
The following routine should be added into the code. A good place is
|
||
immediately following the UART init code.
|
||
|
||
*;
|
||
*; Set the port. ZMP supplies either 0 or 1 as a parameter. You're on your
|
||
*; own here -- your system is bound to be different from any other! You may
|
||
*; implement a software switch on all the modem-dependent routines, or perhaps
|
||
*; you can have one or two centralised routines for accessing the UARTs and
|
||
*; modify the code from this routine to select one or the other. (Who said
|
||
*; there was anything wrong with self-modifying code?). If you have only one
|
||
*; UART port, or if you don't want to go through all the hassles, just have
|
||
*; this routine returning with no changes made. Note that ZMP calls this
|
||
*; routine twice -- once for each port value -- on initialisation.
|
||
*;
|
||
*setport:
|
||
* ld hl,2 ; get port number
|
||
* add hl,sp
|
||
* ex de,hl
|
||
* call getparm ; in HL (values are 0 and 1)
|
||
*
|
||
* ; <== Insert your own code here
|
||
*
|
||
* ; <== End of your own code
|
||
* ret
|
||
*
|
||
*port: ds 1
|
||
*
|
||
|
||
End of changes ZMP14 --> ZMP15.
|
||
|
||
-- Ron Murray
|
||
25/3/89
|
||
|
||
===============================================================================
|
||
|
||
Updates to ZMP13 Overlays for use with ZMP14.
|
||
---------------------------------------------
|
||
|
||
Some changes need to be made to accommodate the user-specification
|
||
of drive/user area for the .OVR files. Changes need to be made in three
|
||
places in your overlay (asterisks at the start of lines indicate which lines
|
||
should be added):
|
||
|
||
1. Specify the required drive/user area.
|
||
|
||
Add the following section after the mspeed equate:
|
||
|
||
*;Set the following two equates to the drive and user area which will contain
|
||
*; ZMP's .OVR files, .CFG file, .FON file and .HLP file. Set both to zero
|
||
*; (null) to locate them on the drive from which ZMP was invoked.
|
||
*
|
||
*overdrive equ 'A' ; Drive to find overlay files on ('A'-'P')
|
||
*overuser equ 0 ; User area to find files
|
||
|
||
2. Add to the jump table
|
||
|
||
Add the following instruction at the end of the jump table, after the
|
||
'jp userout' instruction and before the spare jumps:
|
||
|
||
* jp getvars ; get system variables
|
||
|
||
|
||
3. Add code at the end to get the system variables:
|
||
|
||
Add the following code just in front of the overlay size test:
|
||
|
||
*;Get address of user-defined variables
|
||
*
|
||
*getvars:
|
||
* ld hl,uservars
|
||
* ret
|
||
*
|
||
*uservars:
|
||
* dw overdrive ; .OVR etc. drive/user
|
||
* dw overuser
|
||
*
|
||
|
||
End of ZMP14 overlay modifications.
|
||
|
||
-- Ron Murray, 20/11/88
|
||
|
||
===============================================================================
|
||
|
||
Updates to ZMP12 Overlays for use with ZMP13.
|
||
---------------------------------------------
|
||
|
||
There have been very few changes made to the overlay structure in ZMP13.
|
||
Some shuffling of module orders has allowed the origin to be set at 0145 hex,
|
||
and here it should stay (unless I fiddle with the startup code -- MOST
|
||
unlikely!). So, set your 'userdef' equate to 0145h and you should be able to
|
||
leave it there.
|
||
There is also a bug fix which should be installed in all overlays.
|
||
|
||
1. Fix a bug in the wait routines
|
||
|
||
Two routines in the user overlays are misnamed. You would expect wait1s
|
||
to pause for one second, and wait1ms to pause for one millisecond, wouldn't
|
||
you? Well they don't. Blame it on a lack of sleep on my part. They actually
|
||
pause for a number of seconds (milliseconds) in hl. I suggest renaming them
|
||
to waithls amd waithlms. The main consequence of this has been the pause in
|
||
the middle of the 'send break' routine: there was originally a ld hl, 1 before
|
||
the call to wait1s, but it got lost somewhere along the way. In any case, one
|
||
second is probably too long for this, and I suggest you change it to
|
||
|
||
ld hl, 300 ; wait 300 mS
|
||
call waithlms
|
||
|
||
There are two faults in the waithls (formerly wait1s) routine. The first
|
||
is a misplaced jr instruction that caused waits of more than 1 second to be
|
||
much longer than intended. The other concerns z80 machines with a clock speed
|
||
greater than 9 MHz: these will cause 16-bit overflow in the ld de,6667
|
||
instruction. (It had never occurred to me that anyone would have a z80 running
|
||
at this speed!). Both these faults can be solved by replacing the whole
|
||
waithls routine with the following:
|
||
|
||
;Wait seconds in HL
|
||
waithls:
|
||
push bc ; save bc
|
||
push de ; de
|
||
push ix ; and ix
|
||
ld ix,0 ; then point ix to 0
|
||
; so we don't upset memory-mapped i/o
|
||
|
||
;Calculate values for loop constants. Need to have two loops to avoid
|
||
; 16-bit overflow with clock speeds above 9 MHz.
|
||
|
||
outerval equ (clkspd / 10) + 1
|
||
innerval equ (6667 / outerval) * clkspd
|
||
|
||
wait10:
|
||
ld b,outerval
|
||
|
||
wait11:
|
||
ld de,innerval
|
||
|
||
wait12:
|
||
bit 0,(ix) ; time-wasters
|
||
bit 0,(ix)
|
||
bit 0,(ix) ; 20 T-states each
|
||
bit 0,(ix)
|
||
bit 0,(ix)
|
||
bit 0,(ix)
|
||
dec de
|
||
ld a,e
|
||
ld a,d
|
||
or e
|
||
jr nz,wait12 ; 150 T-states per inner loop
|
||
djnz wait11 ; decrement outer loop
|
||
dec hl ; ok, decrement count in hl
|
||
ld a,h
|
||
or l
|
||
jr nz,wait10
|
||
pop ix ; done -- restore ix
|
||
pop de ; de
|
||
pop bc ; and bc
|
||
ret
|
||
|
||
; End of changes to waithls routine
|
||
|
||
The remaining changes concern baud rates. Firstly, ZMP13 will reject a
|
||
selected baud rate if the machine is not capable of it. It does this by
|
||
determining if the value in mspeed (location 3c hex) has changed. Thus if
|
||
you modify your overlay to only change 003ch (mspeed) if the new baud rate
|
||
is valid, then incorrect baud rates cannot be selected. No code is given for
|
||
this as all overlays are different. Note that the only penalty for not making
|
||
this change is that all baud rates are accepted, whether valid or not. Older
|
||
overlays always set mspeed to the new value.
|
||
In response to numerous requests (well, actually, two), ZMP13 will accept
|
||
speeds of 38400, 57600 and 76800 baud. This means that it accepts the numbers
|
||
for these -- mspeed values are 10, 11 and 12 respectively. If you think that
|
||
you can get your machine to actually work at these speeds, then go ahead. But
|
||
don't blame me if it doesn't work. (Personally, I doubt if successful
|
||
transfers in both directions with a 4 MHz machine can be done at much over
|
||
4800 baud. But don't let me stop you.)
|
||
|
||
-- Ron Murray
|
||
11/10/88
|
||
|
||
|
||
End of changes ZMP12 --> ZMP13
|
||
===============================================================================
|
||
|
||
Updates to ZMP11 Overlays for ZMP12.
|
||
------------------------------------
|
||
|
||
Some additions to the jump table have been made to allow for user-defined
|
||
routines to be executed on entry/exit from ZMP. Modify your overlay as
|
||
follows:
|
||
|
||
1. Adding to the jump table
|
||
|
||
Add the following code to the end of the jump table after the line:
|
||
|
||
jp mswait ; wait milliseconds (Last entry of old table)
|
||
|
||
==> Insert this stuff
|
||
jp userin ; user-defined entry routine
|
||
jp userout ; user-defined exit routine
|
||
|
||
;Spare jumps for compatibility with future versions
|
||
jp spare ; spares for later use
|
||
jp spare ; spares for later use
|
||
jp spare ; spares for later use
|
||
jp spare ; spares for later use
|
||
jp spare ; spares for later use
|
||
==> End of inserted jump codes
|
||
|
||
2. Adding the 'spare' code
|
||
|
||
The following code can be added anywhere. A good idea is to put the
|
||
'spare:' label in front of an existing ret instruction.
|
||
|
||
spare:
|
||
ret
|
||
|
||
3. Adding the user routines
|
||
|
||
Add the following code to your overlay. Anywhere will do. The code
|
||
you put in here depends on what you want to do.
|
||
|
||
;User-defined entry routine: leave empty if not used
|
||
userin:
|
||
ret
|
||
|
||
;User-defined exit routine: leave empty if not used
|
||
userout:
|
||
ret
|
||
|
||
End of changes ZMP11 --> ZMP12
|
||
===============================================================================
|
||
|
||
|