Subject: GPL MOVE document

From: <[email-masked]>
Date: 21 Jan 2014 16:29:46 -0800

I can never seem to find that darn doc file that explains the various GPL MOVE commands. Can anyone point me in the right direction?

Thanks,

Tony

---

From: Insane Multitasker <[email-masked]>
Date: Tue, 21 Jan 2014 18:47:54 -0600

Is it because you....

MOVEd the doc?

:)

To: [email-masked]
From: [email-masked]
Date: Tue, 21 Jan 2014 16:29:46 -0800
Subject: [TI994A] GPL MOVE document

Thanks,

Tony

---

From: [email-masked]
Date: Tue, 21 Jan 2014 19:52:33 -0500

You should stick to your day job... comedy ain't your thing. :-)

On 1/21/2014 7:47 PM, Insane Multitasker wrote:
>
>
>  Is it because you....
>
> MOVEd the doc?
>
> :)
>
> ------------------------------------------------------------------------
> I can never seem to find that darn doc file that explains the various 
> GPL MOVE commands. Can anyone point me in the right direction?
>
> Thanks,
>
> Tony
>
> _

---

From: [email-masked]
Date: Wed, 22 Jan 2014 02:22:52 -0000

Tony...
If you're talking about the GPL Programmer's Reference Manual or Heiner
Martin's TI-99/4A Intern, which also documents GPL, They're in the
pinned Development thread on AtariAge here <
http://atariage.com/forums/topic/153704-ti-994a-development-resources/>
.
...lee

---

From: Jeff White <[email-masked]>
Date: Wed, 22 Jan 2014 09:11:02 +0100

How about Thierry's site:

www.nouspikel.com/ti99/titechpages.htm

Scroll down and you should find Thierry's description of GPL and Bug99, which supports GPL disassembly.

Also this folder:

ftp.whtech.com/programming/gpl/

Jeff White

---

From: [email-masked]
Date: Wed, 22 Jan 2014 05:29:38 -0500

On 1/21/2014 9:22 PM, [email-masked] wrote:
>
> Tony...
>
> If you're talking about the /GPL Programmer's Reference Manual/ or 
> Heiner Martin's /TI-99/4A Intern/, which also documents GPL, They're 
> in the pinned Development thread on AtariAge *here* 
> <%20http://atariage.com/forums/topic/153704-ti-994a-development-resources/>.
>
> ...lee
>
I don't believe it's in either of those places, but I found it buried in 
my hard drive.
It's copied below, so I can always find it now. :)

Tony

--------------------------------------------------------------------------------------------------------------------
Listed below are  a number of examples of the GPL  MOVE statement. This is a
LIST file generated by a GPL Assembler.

When the GPL Interpreter talks to  CPU Memory it offsets the CPU address by
 >8300.   This can be seen in the  OPCODES for the third move statement 
which
breaks down as follows:

 >35         MOVE
 >1234       >1234 bytes
 >8F         to   Cpu Memory (non-indexed)  (AF = Vdp memory)
 >9D00       at >2000 (>9D00+>8300=>2000)
 >8F         from Cpu Memory (non-indexed)
 >1D00       at >A000 (>1D00+>8300=>A000)

When the GPL Interpreter talks to CPU Scratch Pad Memory Below >8380 or when
a Scratch  Pad address  is used  for indexing  it is  referenced by one byte
(i.e. >831F will appear as >1F in the Opcode).

In the Examples listed below:  G@ = Grom/Gram Memory
                                V@ = Vdp Memory and
                                 @ = Cpu Memory

99/4 GPL-ASSEMBLER
GROM 3 - MOVE TEST
<0001>
<0002>                      GROM 3
<0003>                      AORG 0
<0004>
<0005>               * GPL  MOVE Statements
<0006>               *
<0007>               *      MOVE #bytes,source,destination
<0008>               *
<0009> 6000 21,12,34        MOVE >1234,G@>C000,G@>E000
        6003 E0,00,C0
        6006 00
<0010> 6007 35,12,34        MOVE >1234,V@>1000,V@>3000
        600A AF,30,00
        600D AF,10,00
<0011> 6010 35,12,34        MOVE >1234,@>A000,@>2000
        6013 8F,9D,00
        6016 8F,1D,00
<0012> 6019 35,12,34        MOVE >1234,@>A000,@>831F
        601C 1F,8F,1D
        601F 00
<0013> 6020 35,12,34        MOVE >1234,@>A000,@>839E
        6023 80,9E,8F
        6026 1D,00
<0014>
<0015> 6028 31,12,34        MOVE >1234,G@>C000,V@>3000
        602B AF,30,00
        602E C0,00
<0016> 6030 31,12,34        MOVE >1234,G@>C000,@>2000
        6033 8F,9D,00
        6036 C0,00
<0017> 6038 31,12,34        MOVE >1234,G@>C000,@>831F
        603B 1F,C0,00
<0018> 603E 31,12,34        MOVE >1234,G@>C000,@>839E
        6041 80,9E,C0
        6044 00
<0019>
<0020> 6045 25,12,34        MOVE >1234,V@>1000,G@>C000
        6048 C0,00,AF
        604B 10,00
<0021> 604D 35,12,34        MOVE >1234,V@>1000,@>2000
        6050 8F,9D,00
        6053 AF,10,00
<0022> 6056 35,12,34        MOVE >1234,V@>1000,@>831F
        6059 1F,AF,10
        605C 00
<0023> 605D 35,12,34        MOVE >1234,V@>1000,@>839E
        6060 80,9E,AF
        6063 10,00
<0024>
<0025> 6065 25,12,34        MOVE >1234,@>2000,G@>C000
        6068 C0,00,8F
        606B 9D,00
<0026> 606D 35,12,34        MOVE >1234,@>2000,V@>1000
        6070 AF,10,00
        6073 8F,9D,00
<0027> 6076 35,12,34        MOVE >1234,@>831F,@>832F
        6079 2F,1F
<0028> 607B 35,12,34        MOVE >1234,@>839E,@>83AE
        607E 80,AE,80
        6081 9E
<0029> 6082 35,12,34        MOVE >1234,@>839E,@>831F
        6085 1F,80,9E
<0030>
<0031>               * INDEXED MOVES -------------------------------
<0032>
<0033> 831F          TEMP1  EQU  >831F
<0034> 839E          TEMP2  EQU  >839E
<0035>
<0036> 6088 29,12,34        MOVE >1234,G@>C000,G@2(@TEMP2)
        608B 00,02,9E
        608E C0,00
<0037> 6090 31,12,34        MOVE >1234,G@>C000,V@2(@TEMP2)
        6093 E0,02,9E
        6096 C0,00
<0038> 6098 31,12,34        MOVE >1234,G@>C000,@2(@TEMP2)
        609B CF,7D,02
        609E 9E,C0,00
<0039> 60A1 31,12,34        MOVE >1234,G@>C000,@>830F(@TEMP1)
        60A4 C0,0F,1F
        60A7 C0,00
<0040> 60A9 2B,12,34        MOVE >1234,G@1(@TEMP1),G@2(@TEMP2)
        60AC 00,02,9E
        60AF 00,01,1F
<0041>
<0042> 60B2 2D,12,34        MOVE >1234,@>A000,G@2(@TEMP2)
        60B5 00,02,9E
        60B8 8F,1D,00
<0043> 60BB 35,12,34        MOVE >1234,V@1(@TEMP1),V@2(@TEMP2)
        60BE E0,02,9E
        60C1 E0,01,1F
<0044> 60C4 35,12,34        MOVE >1234,@1(@TEMP1),@2(@TEMP2)
        60C7 CF,7D,02
        60CA 9E,CF,7D
        60CD 01,1F
<0045>
<0046>               * INDIRECT MOVES ------------------------------
<0047>
<0048> 60CF 31,12,34        MOVE >1234,G@>C000,V*TEMP2
        60D2 B0,9E,C0
        60D5 00
<0049> 60D6 31,12,34        MOVE >1234,G@>C000,*TEMP2
        60D9 90,9E,C0
        60DC 00
<0050> 60DD 31,12,34        MOVE >1234,G@>C000,*>830F(@TEMP1)
        60E0 D0,0F,1F
        60E3 C0,00
<0051> 60E5 33,12,34        MOVE >1234,G@1(@TEMP1),*TEMP2
        60E8 90,9E,00
        60EB 01,1F
<0052>
<0053> 60ED 35,12,34        MOVE >1234,V*1(@TEMP1),V*2(@TEMP2)
        60F0 FF,7D,02
        60F3 9E,FF,7D
        60F6 01,1F
<0054> 60F8 35,12,34        MOVE >1234,*TEMP1,*TEMP2
        60FB 90,9E,90
        60FE 1F
<0055>
<0056>                      END

----------------------------------------------------------------------------

                                  GPL XMLs

If you are using  Gram to store an Assembly  file in, that is in turn MOVED
out by a CALL  or a GPL program  (patch) you can start  the Assembly program
with a GPL XML statement.

The Opcode for GPL XML is >OF xx - where xx  represents the XML table to use
for the  start vector (See the Explorer Manual  page 77 for the XML tables).
For example let's say you used a GPL MOVE to move an 8K assembly program out
of Gram 7 (>E000) to high Memory Expansion and now you want to go out of GPL
and  execute your  Assembly program.  Let's say  that your  Assembly program
starts at address  >A040, this could  be the code  you could use to do this
task.

31 20 00           MYPROG     MOVE >2000,G@>E000,@>A000
8F 1D 00
E0 00

BF 00 A0                      DST  >A040,@>8300       (store start address)
40

0F F0                         XML >F0    (go to >8300 to get start address)

00                            RTN

When your Assembly program is  finished you can then B @>006A to go back to
the GPL Interpreter. Don't forget to reset the Grom Address if your Assembly
program changed it. When the GPL Interpreter starts back up it will grab the
 >00 opcode (RTN) and  return from the CALL MYPROG that  you set up 
somewhere
else in Gram to start  the above routine.  By the way, the Opcode for a CALL
is >06  so the CALL MYPROG  would be 06 xx  xx where xx xx  = the address in
Gram where you placed the above code.

Have Fun.                    ------ MG ------
-----------------------------------------------------------------------------------------------------------------------