󠠠򠠠젠庍򠠠젠󮠠箠򠠠䍠󺠠֠¦נ֠堠򠠠젠󠠠򠠠䮠젠򺍠堠䮠堠򠠠庠󺍠䮠堠򠠠䠠Š󍠠䠠堠Š堠庠占庠̠ӠĠŠٍ֠ϮDZ蠠ı̱򮍠󠠠ı̲ĠŠƠǍ󠠠󍠠젠젠썠Š̠ӠŠ٠ΠƠ̠ΠԠȠō à          젠젠썠ϮDZ蠠ı̱򮍠 àĠŠƠǍ󠠠󍠠Š̠ӠŠ٠ΠƠ̠ΠԠȠźō                         ̠젠𠠠𠠠젠쮍󠠠󠠠񠠠򠠠젠󺍠󠠠󠠠ᠠ󠠠򠠠젠젠󺍠󠠠󠠠󠠠򠠠젠󺍠庍ᠠ젠堠󠠠򠠠젠庍堠򠠠ƨ³ųƨųijıóij³ųijıóij ƨ³ųƨųijıóij³ųijıóij³ų䮠ijıóij³ųijıóij³ų򠠠ijıóij³ųijıóij³ų󠠠ƨ³ųƨųĠŠƠǍ򺍠堠ƨ³ųƨųIJıòIJ²Ų젠ƲƲƲƲƲƲƲͨƲƲ àIJ²Ų򠠠ƨ²ŲƨŲIJıòIJ²Ųƨ²ŲƨŲIJıòIJ²ŲIJıòƨ²ŲƨŲIJıòIJ²ŲIJıòIJ²Ų堠IJıòIJ²ŲIJıòIJ²Ų䮠IJıòIJ²ŲIJıòIJ²Ų䮠ƨ²ŲƨŲűııñı±ű󺍠ƨ²ŲƨŲ庠ƨ±űƨűƱııñı±󍠠䠠堠Š堠ٍ֠堠򠠠䠠ŠӠ󠠠ı̲庠占庠̠ӠĠŠζıõĵµŵĵıõĵµŵƨµŵƨŵĵıõĵµŵƨµŵƨŵĵǍ庍ƨµŵƨŵĵıõĵµŵƴƴƴͨƴƵƴƴƴƴƵ àĠŠƠĴıôĴ´ŴĴıôĴ´Ŵ젠ƴƴıôĴ´ŴĴıôĴ´Ŵ򠠠ƨ´ŴƨŴĴıôĴ´Ŵƨ´ŴƨŴĴĴıôĴ´Ŵ򠠠ƨ´ŴƨŴĴıôĴ´Ŵ箠ƨ´ŴƨŴĴıôĴ´Ŵƨ´ŴƨŴĴıôĴ´ŴĴıôĴ´Ŵ堠ĴıôĴ´ŴĴıôĴ´Ŵ󮠠ĴıôĴ´ŴĴıôĴ´Ŵ¦נ֠ƨ´ŴƨŴƳƳƳƳ䍠󺍠֠ƨ´ŴƨŴijıóij³ų젠ƳƳƳƳͨƳƳijıóij³ų򠠠ƨ³ųƨųijıóij³ųų堠ƨ³ųƨųijıóij³ų¸ŸƨŸĸıøĸ¸Ÿĸıøĸ¸ŸƷƷ àĠŠƠǍ󺍠Ơķı÷ķ·ŷ젠ƷƷƷͨƷƷŷ堠ƨ·ŷƨŷķı÷ķ·ŷƨ·ŷƨŷķı÷ķ·ŷķı÷ķ·ŷƨŷķı÷ķ·ŷķı÷ķ·ŷ젠ƶƶƶͨƶƶƶƶƶ庍ᠠƨ·ĶıöͶŶĶıöͶŶ젠ĶıöͶŶĶıöͶŶ򠠠ƨ¶ŶƨŶĶıöͶŶ󠠠ƨ¶ŶƨŶĶıöͶŶ򠠠ƨ¶ŶƨŶĶıöͶŶ堠ƨ¶ŶƨŶĶıöͶŶŵ젠ƵƵƵͨƵƶƵƵƵƶ庠ƨµŵƨŵĵıõĵµŵĵıõĵµŵƨŵĵıõĵµŵĵıõĵµŵ򠠠ĵıõĵµŵĵıõĵµŵ󠠠ƨ´ııñı±ű젠ƹƱƱƱƱƱͨƹƱııñı±ű򠠠ƨ±űƨűııñı±ű񠠠ƨ±űƨűııñı±űƨ±űƨűııñı±űııñı±űııñı±űııñı±űᠠııñı±űııñı±ű󠠠ƨ±űƨűƹƹƹƹƹͨƹƹ󺍠󠠠ƨ±űƨűĹıùĹ¹ŹĹıùĹ¹Ź젠ĹıùĹ¹ŹĹıùĹ¹Ź򠠠ƨ¹ŹƨŹĹıùĹ¹Ź󠠠ƨ¹ŹƨŹͨƸƸ󺍠󠠠ƨ¹ŹƨŹĹıùĹ¹Źĸıøĸ¸Ÿĸıøĸ¸Ÿ젠ƸƸƸƸƸƸƸƸĸıøĸ¸Ÿ򠠠ƨ¸ŸƨŸĸıøĸ¸Ÿ󠠠ƨ¸ŸƨŸĸıøĸ¸ŸŸ󠠠ƨ¸ŸƨŸĸıøĸ¸Ÿƨ¸ŸƨŸĸıøĸ¸Ÿĸıøĸ¸砠堠󍠠󺠠렠堠󍠠󺠠렠󺠠캍蠠堠󍠠󠠠썠ӠӠŠԠӠ̠ɠ ɠ̠ɠԠɠŠӍ堠溠ԠȠԠĠŠƠǠȠɠʠˠ̠̠̍ҺŠ̠ԠĠĠůӠԠƠ̠ӠĠԠȠźō                     ҩƱƲƳƵƶƨͨDZDZƱƷƷƸƹƱƱͨDZDZ̠ƱƲƳƵƶƨͨDZDZƱƷƷƸƹƱƱͨDZDZııñı±ű젠ƱƱƱƱƱͨƱƱııñı±ű𠠠ƨ±űƨűııñı±ű𠠠ƨ±űƨűııñı±űƨ±űƨűııñı±űııñı±űııñı±űııñı±ű󠠠 àĠŠƠǍ쮍󠠠ƨ±űƨű󺍠Ƴ󍠠Ǡ󠠠Ƶﭱ堠Ҡ䍠堠Ʊ󍠠󠠠Ʋ婍堠𩍠溠󠦠󍠠젠堠ɠʠˠ̍堠亍堠˱˱˱ƱƱƱ˱˱˱ĠŠƠǠȠ젠ƱƱƱͨƱƱ젠˱˱˱ͨ˱˱ƱƱƱ􍠠򠠠􍠠󍠠䠠à󍠠󠠠󍠠󠠠堠亍󠠠䩍󠠠Ԡ˱˱˱ƱƱ˱˱˱˱庠󍠠򍠠젠ƱƱƱͨƱƱ젠˱˱˱ͨ˱˱ƱƱƱ􍠠󠠠占􍠠􍠠ծӠ󠦠 占􍠠蠠溠ƱƱƱ˱˱˱ƱƱƱ˱˱˱򍠠젠ƱƱƱͨƱƱ젠˱˱˱ͨ˱˱䍠󺠠፠򠠠獠󠠠󺍠󠠠占젠썠ΠΠՠ̠ɠΠàϠ͠ŠΠΠՠ̠ŠӠԠɠ͠ԠŠĠŠؠРŠΠӠŠӍĠŠƠǠȠɠʠˠ̍ԠȠDẔ̱̱ͨDZDZҩ̱̱ͨҩΠԠӠƨƱƱƱ̠ҠԠɠӠƨ˱˱˱˱˱ƱƱͨDZDZ͠젠˱˱˱˱ͨ˱˱򍠠젠ƱƱƱͨƱƱƱƱƱ̠Š󠠠󍠠䠠򍠠󠠠堠˱˱˱󺍠󠺠󠠠˱˱˱ƱƱƱ˱˱˱Ҭ˱˱˱ƱƱƱͨƱƱ˱˱˱ƱƱƱ򍠠젠ƱƱƱƨͨƱƱ젠˱˱˱ͨ˱˱ƱƱƱƱ󠠠Ʊ㮠Ʊ󍠠򠠠Ƹ占󠠠ƹ占ƶﭲ䮍Ʒ򍠠堠Ʒ͠箍ԍ󠽠ҍ栺Ի󠺠٠۱ݠƠһһɠҮɍ   Щٍٍٍ٠ҠòĻŠ⠨򩻍΍፠٠Щٍٍٍ٠٠Š廍΍፠ҠõĻŠ⠨򩻍΍፠٠Щٍٍٍ٠٠  ƨ˲˲̲̲̲̲ͨͨҩ˲˲˲̠ԠĠӠ˲˲˲˲˲˲˲󍠠򍠠젠˲˲˲ͨ荠占庍󍠠ƲƲƲͨƲƲҩƲƲƲƲ󺍠󍠠̠ŠƲƲƲƨƲͨƲƲ젠˲˲˲ͨ˲˲˲˲򍠠󠦠򍠠젦 ҍҠԠ٭ԠĠƍ占Рà፠ààάٍٍӍԠƍ Ԡҍҍ􍍍Ԡ宠򍪪卪Ԯ٭ Ԡҍҍ䍠Š占ɲɫɲɫ堷άؠؽ؍ؠŠؠٍٍ؍РɲӠɠة占ҠԠ􍍍􍍍Ġ̠ōР䬍ŠРҍ፠Р Ӡ䍪宍٭ҠԠҠԠ占à荠άٍٍؠ宍٠؍ؠŠ占ٍ٠٠堷έٍٍŠٽōɫӍ卪Ҡư󮍍Šؠٍؠ٠ؠ뮍٠٠Ӡ卍ÍΠİɠưɲ·ɠĠðŠðҠƶǠ卍ōɫ         `HHȄ<Ȅ=H= m< mȢ< mɪLeɛ hhhLHJJJJ vh) 0:9`:PR$:(4);"PREFIX";PR$ 3300 D$(4):IN6:UP11:C$" " 3200 8::"YOUR OPTIONS ARE:"  IN:UP: čŠ堨ީԠ橍čō΍ƻĠĻƻҨĮ󩻍󩻍ҨŠԠ栨橠ύ΍Ơ󍠠΍΍Ơ橍΍΍̠ݠҠ㠽堧ĻΠ堨ź᪪Šƻ΍ÍҠčĻŠҠҩҠ㠺һΠ㠺ԍ㠺㠫堨ݩŠԠӍӍӠҠˠԍˠРԠҠ׍ҍ٠ŠԠҍРƬٍΠ٠ԍŠĠҠӍРŠӍɠōĠԠԠӍĠŠƠԠӠˍŠˠˠԍРŠŠӍààՠɠՠưҠԠӍǠРԠԠӠҍР֠ŠԠҍԠҠΪĠˠ٠ō٠ΠˍĠȠΠύΠՠŠΠ΍          ŠӠōӍԠƍ͍Ġˍ٠вŠٍӠΠǍŠՠķƠĠˠҠōؠðŠӠōҠŠϠˠŠōðō٠ð͠ĠŠ͍Ġˍ٠вŠٍӠΠǍŠՠķƠĠˠҠōؠðŠӠōҠŠϠˠŠōðϠŠŠĠ΍ˠԠӮՠķŠĠˠҠōвՠؠ٠вŠ٠Ǎ٠ð͠įԠˍҠĠˠԠҠ؍ԠɠӠҠԍΠӍԠƬٍٍӍΠˠŠӠΠŠˍҠŠϠҠ؍Ġ٠ϠӠčàԍҠҠ؍ԠԠɠӠҠԍϠҠϠӠϠìčҠҠӠϠƬҠҠӠϠٍĠΠϠҠԍЍӍ٠Ԡ͠ؠӫҠŠҠҠҠϠҠҠȠϠҠϠ٠ϠϠҠԍҠԠ٠ӠՠÍƠՠǠԠРŠӍɠԠӍҠؠŠŠˍɠŠӍӠȽӠĽ٠Ω٠ȠϽȠٽҠȍΠӠˠŠΠԠ΍͠ӠϠǮàԠԠϠԠҍ٬ϬĬȬͬӠӽӠͽ|A׈L `x X |׍ |jjjj. u u׍ |׍(` ) : e:: e:`)Ixʎ)H ט hX`) `;PR$ 3300 D$(4):IN6:UP11:C$" " 3200 8::"YOUR OPTIONS ARE:"  IN:UP:our Apple II computer like mine, with very few or no empty DBslots? Has this kept you from buying the latest and greatest new A?device? Without an empty slot, is the UniDisk 3.5 just just a A?dream? Are you interested in Apple Mouse software, but  Slot Saver Clock Driver For TheVersacard Multifunction boardBy Ken Kashmarek15 March 1986@Slot Saver Clock Driver by Ken Kashmarek Page DB Is y7L$O=====|====|====|====|====|====|====|====|====|====|====|====|====|====|====|===8"                     ԠˠōĠŠӠٍĠˠӍҠӍӍԠƍðˠӍؠؠԠˠӍؠҠϠ̠ԍĭ̠ՠĠ̠ԍҠՠ̪ðˠ̠ԍĠՠ̪ðˠӍؠؠԠˠӍؠҠϠ̠ԍԠԠɠӠҠԍԠҠ؍ԠɠӠҠԍΠӍԠƬٍٍӍӠϠҠҠԠˠӍϠҠ؍Ġ٠ϠӠčàԍҠҠ؍٠ϠҠϠӠϠìčҠҠӠϠƬҠҠӠϠٍĠΠϠӠҠԍӍԠ٠Ԡ͠ؠӫҠŠҠҠҠϠҠҠȠϠҠϠ٠ϠϠҠԍҠԠӠԠƠŠԍҮԠӠԠŠɠҠɮԠϠĠԠҠӠŠŠӍҠŠĠˠԠŮӠՠÍƠՠӍŠ΍ӍΠˠƠĠɠΠōӠ נōӠ ĠˠԠōӠŠӠŠҠԠҍ֠ŠˠӍҍӫԠҠӫҠɠŠԠ̍ נҍԠҠɠˠϠӍ ŠԠ̍נӍŠ΍ŠˠӍҍɠנϠ΍Ӎ٠ŠԠҍвƬٍٍ٠ŠвΠԠΠ΍ҍРŠӍà̠ŠȠӍӍ̠ҠԠˍٍ̠ЍҠԠԠˠ٠άӍбƬٍάٍٍ٠ Ϡ٠ˠӍŠбthe ProDOS global page."The ProDOS Global Page LocationsCA The date value locations are $BF90 (low byte) and $BF91 (high ,byte). The definition for the 16 bits is:; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0< ntrol port can be directly addressed as memory location DB$C0A2 and the data port can be addressed as memory location $C0A3 B@(index register not needed). Data for the date and time values @>are taken directly from the clock data port and placed in h the Y register containing $n0 A?where 'n' is the slot number. The clock data port is accessed @>using LDA $C083,Y (either access may be with STA for changing data).EC On my Apple II computer, the Versacard is installed in slot 2. @>The code in the ROM. The @>Versacard clock can also be accessed without the phantom slot DBassignment. The actual clock I/O ports are available through the @>physical slot address of the card. The clock control port is @>accessed using LDA $C082,Y witction is changed to a JMP instruction ($4C).The Versacard Clock PortA? The standard ProDOS clock driver accesses the clock through <:the Thunderclock compatible interface. This needs a slot ?=assignment to reach the on board clock coboot time, ProDOS will place an RTS instruction ($60) in location CA$BF06 if a Thunderclock compatible card is not found. Locations CA$BF07 and $BF08 contain the value $D742 (ProDOS Version 1.1.1). CAAfter installing a clock routine, the RTS instruust get the clock values from the clock I/O port and @>place the data into the ProDOS global page at locations $BF90 ?=through $BF93. The clock routine in the ProDOS kernel is at B@$D742 in the first 4K RAM bank of the language card memory. At DB #10 provides information for installing ?=your own clock card driver. This technical note is found on CAvolume /IAC.43 available from the International Apple Core. The CAreplacement clock driver routine can be 125 bytes long. A clock ?=driver mriver for DBthe Versacard clock. With this change, I can continue to use the >table that will run out January 1, 1988. The Versacard clock Ae and time locations before and after installing the new DBdriver. Then issue a CAT command to force ProDOS to make a clock Ccard call. Check the date and time locations to be certain they DBrepresent what you expect. Note that the time value omentation). Your former phantom slot is now available to be -used for a different device interface card.DB You can replace the current clock driver at any time by simply A?BRUNing the VERSACARD CLOCK DRIVER module. Be sure to examine B@the datis modified, you must then disable the phantom slot B@address by setting the dip switches on the Versacard controller @>board (labeled CLK). The new address must be the same as the <:physical slot that the board occupies (see your Versacard CAdocuund, the clock driver module is executed. ?=The first 29 bytes move the code to overlay the clock driver @>memory locations in the language card. The RTS in the global DBpage is then replaced with a JMP instruction. After your STARTUP >disabled; bit 5 of the data byte loaded from the data port). B@This status is saved and then restored to maintain proper clockinto their Drespective locations in the ProDOS global page. Year, month, and @>day need a small amount of bit manipulation to get the values !into the correct bit positions.=; Since we are not using the on board ROM, this code must B@suppoAthe address of the data item that is needed. This is documented DBin the VERSACARD CLOCK DRIVER program listing. After the control A?byte is stored, the data value is read (loaded) from the clock =;data port. Hour and minute are stored directly BF90, $BF93, $BF92).The Versacard Clock Driver@> Accessing data from the clock port is a two step process. A?First, a control byte is written (stored) to the clock control A?port. The control byte must have the read bit set and contain Cring of data A?(by date). The same is true for the time word ($BF92-$BF93). DBThe two words can be treated as a single 32 bit field for sorting :8by date and time (logical order of data bytes from most @significant to least significant: $BF91, $d clock value is needed (usually during file operations).CA Note the layout of the two words for date and time. The date DBword ($BF90-$BF91) can be stored as data in a file. The file can CAbe sorted on this field to obtain chronological orde | $BF92 |< +-----------------------+----------------------+; 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0;9 ProDOS executes the GET TIME MLI call to update these ?=locations whenever an update 13 12 11 10 9 8 7 6 5 4 3 2 1 0< +-----------------------+----------------------+< | HOUR | MINUTE |< +-----------------------+----------------------+< | $BF93 -----------------------+----------------------+; 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0CA The time value locations are $BF92 (low byte) and $BF93 (high ,byte). The definition for the 16 bits is:; 15 14 +--------------------+-----------+-------------+< | YEAR | MONTH | DAY |< +--------------------+--+--------+-------------+< | $BF91 | $BF90 |< +ks for this information).>< The sample Applesoft program shows how to load the clock CAdriver code, use the clock output routine, create different date >the Thunderclock. This routine is much simpler, but contains 5instructions specific to the Versacard interface. But Wainstructions does not enable interrupts. CA In its present form, the program outputs the clock value to a DBfixed location in the 40 column screen buffer (upper right corner <of the display). It must be changed for 80 column output.A? This prupts. Since CLOCK DBDISPLAY is an interrupt handler, it cannot allow interrupts to be B@enabled during its execution. Therefore, it uses a simpler set CAof instructions to fetch the date and time values from the clock Edata ports. This set of CK OUTPUT ?=program to get the date and time values. However, the CLOCK B@OUTPUT routine uses parts of the CLOCK DRIVER as subroutines to A?fetch the data bytes and preserve the clock interrupt status. @>Those subroutines inhibit and enable intering the ProDOS ALLOCATE INTERRUPT MLI call. It is =;removed with the DEALLOCATE INTERRUPT call. These are the CAstandard ProDOS interfaces for installing and removing interrupt handlers.B@ This program uses code similar to the VERSACARD CLOVersacard and update a time value CAon the Apple II screen. This routine assumes that jumper JH1 on > The sample Applesoft program shows how this information is 5accessed and used to present a date and time stamp.Clock Display@> VERSACARD CLOCK DISPLAY presents an interrupt handler that DBwill activate interrupts on the OUTPUT is a routine that will obtain clock DBdata for use in your Applesoft programs. This routine is similar DBto the clock driver, but it stores the data values as ASCII bytes B@in the keyboard input buffer. It also provides day of week and @Applesoft programs to write a one byte format code to the clock ?=and read back a variety of date and time formats. Since the @>phantom slot assignment is no longer available, the Applesoft $program interface no longer works.@> VERSACARD CLOCKration program. Applesoft Clock Read RoutineA? After the new driver is installed, and the dip switches are @>changed, you can no longer access the Versacard clock via the B@Thunderclock compatible interface. That interface allowed your B?driver routine always gets the correct year from the Versacard ,clock (provided that it is set correctly).?= Once the Versacard clock driver is assembled (with Merlin DBPro), it can be installed using the sample Applesoft clock driver demonstz#     ĮҠĮٮӠ Įˠ9 ٠ųԮנųԮנLųԮנ3 Ԯ ԮŠҮР ӮŠ ӮŮӠ  d U17, the 6850 UART. This was not A?documented, nor was a jumper supplied with my Versacard. Once CAJH4 was set, all interrupts worked okay (JH4 must also be set to 1use the serial port with a modem at 1200 BAUD). is <:located just above chip U17, the 6850 UART. This was not A?documented, nor was a jumper supplied with my Versacard. Once CAJH4 was set, all interrupts worked okay (JH4 must also be set to 1use the serial port with a modem at 1200 BAUD). is <:located justumpers J1 and JH1 must be set to use B@interrupts. J1 was already set on the card when delivered. To CAgenerate one interrupt per second, JH1 must be set to the center @>pin selection. However, jumper JH4 must also be set. JH4 is <:located justnput buffer for use by Applesoft. However, these could ?=be binary values as well, or stored in some different memory #location (zero page for example).?= A quick note on using interrupts with the Versacard. The DBdocumentation indicates the j00) is where the program will be loaded in B@memory. The second is used to generate addresses for code that ;is to be moved to an absolute location in memory ($D742).DB The clock output and clock display routines return ASCII bytes B@to the iuld be entered and assembled with @>Merlin Pro. If you use another assembler, be sure the output ?=agrees with the program listings. In particular, Merlin Pro B@allows multiple ORG specifications. The first ORG in the clock @>driver routine ($03