[net.micro.apple] Language cards

josh@unm-cvax.UUCP (06/20/84)

How can you get the system let you write to the language card?

I want to use it for a program and all I can manage to do is to load
 int basic into it(not what I want!).

Another question comes to mind . . . How to you get the apple tool kit
 to assemble code into relocatable code?

P.S. I have a ][e .


 thanks for all help.

 
          Josh Siegel

{convex,ucbvax,gatech,csu-cs,anl-mcs,lanl-a}!unmvax!unm-cvax!josh

glen@intelca.UUCP (Glen Shires) (06/21/84)

There are a few I/O locations (address $C???) that control the language
cards (write-protect/enable, read RAM/ROM)

They are listed in the documentation you should have received with the
card.

If you can't find them, I can look them up.
-- 
^ ^    Glen Shires, Intel, Santa Clara, Ca.
O O     Usenet: {ucbvax!amd70,pur-ee,hplabs}!intelca!glen
 >      ARPA:   "amd70!intelca!glen"@BERKELEY
\-/    --- stay mellow

clt@pur-phy.UUCP (Carrick Talmadge) (06/25/84)

[Take that, you filthy line eater!]

This is a bit long, but I thought it might be of general interest...

>How can you get the system let you write to the language card?
>
>I want to use it for a program and all I can manage to do is to load
> int basic into it(not what I want!).

Hopefully, the following will answer your questions:

			   Memory Organization
			   -------------------

The Ramcard has 16K of memory, but has an address space allowed for 
it (forgetting for the momment $C080-$C08F) of $D000-$FFFF, or 12K.
To "fit" the entire ram address space into this area, two 4K segments
of memory share the space from $D000-$DFFF.  When you select either
bank one or bank two, you automatically select one of the two 4K
segments plus the other 8K from $E000-$FFFF.  The figure below
illustrates this.

				_________________           $FFFF
				|		|
				|		|
				|		|
				|		|
				|_______________|           $F000
				|		|
				|		|
				|		|
				|		|
			________|_______________|________   $E000
			|		|		|
			|		|		|
			|    BANK 1	|     BANK 2	|
			|		|		|
			|_______________|_______________|   $D000


			Ram Selection/Deselection
			-------------------------

		ADDRESS		Action

		$C080		Read-Deselect Ram(Enable Rom).
				Write protect Ram

		$C081		Read-Deselect Ram. Two sucessive
				Reads write enables Ram.

		$C082		Read-Deselect Ram(Enable Rom).
				Write protect Ram

		$C083		Read-Select Ram.  Two sucessive
				Reads write enables Ram.

		$C084		(Decodes same as $C080).

		$C085		(Decodes same as $C081)

		$C086		(Decodes same as $C082).

		$C087		(Decodes same as $C083)

		$C088-$C08F     Same action as (ADDRESS-8),
				except selects/deselects
				Bank 1 of Ram.

Example:

;
;  RAMSET  
;       Sets up ram card for usage.  Note that it doesn't
;  	copy Basic Rom (excepting enough Rom for Hires graphics
;       routines).
;
RAMSET  LDA $C081
	LDA $C081     		Enable Ramcard for writing

;
; Next a macro to move from,to,length
; This copies the Rom from $F300-$FFFF to ram
;
	MOV $F300,$F300,$D00   

	LDA $C083
	LDA $C083		Finally fully enable second Bank of Ram
;				(Read enable as well as write enable).
				
--------------------

Source:  What's Where in the Apple by W.F. Luebbert (Micro Ink)

    Notice than you should use reads, rather than writes, as the latter
will give unpredictable results (a write will select a memory location
twice, but in rapid sucession, so that the ramcard will notice two
address selections only part of the time).

    Hope this helps some.

				Carrick Talmadge

UUCP:  {decvax,ucbvax,harpo,allegra,inuxc,seismo,teklabs}!pur-ee!Physics:clt
INTERNET:       clt @ pur-phy.UUCP

coller@utah-cs.UUCP (Lee D. Coller) (06/28/84)

<>

One other thing regarding reading and writing language cards.  If one
writes to an address between $D000 and $FFFF, and the card has not been
selected (and has not been write protected), the write is still done on
the language card.  Of course, to read the card one has to select it.

This is out of the Language Card Reference Manual that came with my card
(I bought it in 1981).

Lee Coller
UUCP: harpo!utah-cs!coller
ARPA: coller@utah-cs.ARPA

ags@pucc-i (Seaman) (07/03/84)

>  If one writes to an address between $D000 and $FFFF, and the card has not 
>  been selected (and has not been write protected), the write is still done 
>  on the language card.  Of course, to read the card one has to select it.

This is the basis for an easy way to copy the F8 ROM into RAM (I'll just do
one byte):

	LDA	$C081	;Enable ROM read
	LDA	$C081	; and RAM write (must do it twice)
	LDA	$FFFF	;this fetches from ROM
	STA	$FFFF	;this stores in RAM

Voila!  Write-only memory!

An even easier way on the //e is to call the routine COPYROM at $CF78.
Notice that there is no language card on a //e.  The upper 16K is simply 
called "bank-switched memory," a curious term since ALL the memory on a 
128K //e is bank-switched.
-- 

Dave Seaman			"My hovercraft is full of eels."
..!pur-ee!pucc-i:ags