home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sys.apple2
- Path: sparky!uunet!comp.vuw.ac.nz!actrix!David.Empson
- From: David.Empson@bbs.actrix.gen.nz
- Subject: Re: ZipGSX programming...
- Organization: Actrix Information Exchange
- Date: Thu, 28 Jan 1993 10:36:40 GMT
- Message-ID: <1993Jan28.103640.24485@actrix.gen.nz>
- References: <djshaw01.727980535@starbase.spd.louisville.edu>
- Sender: David.Empson@actrix.gen.nz (David Empson)
- Lines: 88
-
- In article <djshaw01.727980535@starbase.spd.louisville.edu> djshaw01@romulus.spd.louisville.edu (Daniel Shaw) writes:
- > how does one recognize whether a zip exists in a slot from a program...
-
- Well, you can't tell _which_ slot the ZIP is in. It has no I/O
- locations, ROM or anything else in the slot's space. The slot is used
- to support the card, provide power, and to access signals that aren't
- available at the processor (such as DMA).
-
- > I noticed in thye cH..'s code that it accesses the annunciators to
- > turn it on or off....????? it doesn't really make sense...if anyone
- > knows how.. email or better.. post!!!!...let everyone know how to do
- > it..
-
- The ZIP uses the same locations as the annunciators to access its
- registers. However, they aren't accessable at all times. You have to
- go through a special 'unlock ZIP registers' sequence to access them.
- While the ZIP is 'unlocked', the annunciators cannot be accessed.
- After you've finished with the ZIP, you have to 'lock' the registers
- again to restore annunciator access.
-
- I posted a file containing a description of the ZIP registers to
- comp.binaries.apple2, well over a year ago. Andy McFadden's "ZIPPY"
- program includes this file (I don't know if Andy used the information
- to write ZIPPY). I got the details from ZIP, and reworked it into a
- single page summary.
-
-
- Detecting the ZIP is somewhat of a black art. The best way to identify
- it (IMO) is to use the following sequence (interrupts should be
- disabled for security):
-
- - Enable the ZIP registers
- - Save the current 'percentage speed' setting
- - Change the 'percentage speed' to something else
- - Read back the 'percentage speed'. If it doesn't match what you
- wrote, there is no ZIP.
- - Restore the original percentage speed.
- - Read it back again. If it doesn't match, there is no ZIP.
- - Disable the ZIP registers
-
- Another possibility would be to verify that other ZIP registers can be
- read and written. Reading from an annunciator will produce a random
- value.
-
- Unfortunately, the detection sequence will affect the state of the
- annunciators if there is no ZIP in the system, which may cause
- problems if you are using them to control external devices (for
- example, I have an infra-red transmitter connected to AN2, which is
- affected by accesses to $C05C or $C05D).
-
- The following routine will detect the ZIP, returning with A=$00 and
- carry clear if the ZIP is present, A=$01 and carry set if not.
- Emulation mode (or 8-bit native mode) is assumed.
-
- CHKZIP SEI
- LDA #$55 ; Unlock the ZIP registers
- STA $C05A
- STA $C05A
- STA $C05A
- STA $C05A
- LDA $C05A ; Save the percentage speed
- AND #$F0 ; Extract the speed bits
- TAX
- EOR #$F0 ; Toggle the speed to something else
- STA $C05D ; Write the percentage speed
- ORA #$0F ; Set up bits to match
- CMP $C05A ; Expect speed in top bits, 1111 in bottom bits
- BNE NOZIP
- STX $C05D ; Restore the original speed
- TXA
- ORA #$0F ; Set up bits to match
- CMP $C05A ; Expect speed in top bits, 1111 in bottom bits
- BNE NOZIP
- LDA #$AA ; Lock the ZIP registers
- STA $C05A
- LDA #$00 ; Tests passed: ZIP is present!
- CLC
- CLI
- RTS
- NOZIP LDA #$01 ; The ZIP is not present
- SEC
- CLI
- RTS
- --
- David Empson
-
- Internet: David.Empson@bbs.actrix.gen.nz EMPSON_D@kosmos.wcc.govt.nz
- Snail mail: P.O. Box 27-103, Wellington, New Zealand
-