[comp.sys.atari.8bit] ACTION PD RUNTIME

curzon@kaoa01.dec.com (Richard Curzon TRS 5/2 DTN 640-2149) (06/10/88)

     Sorry if you saw this before... seems it didn't make it some places.

     There are 2 runtime packages (at least) for Action!  The one that
was sold by OSS (and now presumably by ICD Inc) is the original by Clint
Parker. It is not PD.  The other one I did a quick review of last year:

    The other (PD) package is by Jeff Reister (sp?) of Mount Vernon,
Washington. It includes an adaptation of the ST Reversi game published
by Analog, and a font editor, along with their source codes, and the
assembler sources for the runtime package code. 

    The actual runtime package is contained in one relatively short file
(RUNTIME.ACT).   It seems to be quite a bit more compact than the OSS
runtime package. There is also a program RTSCAN.COM (with sources) that
scans 1 or more source code files, and compiles a list of each of the
RUNTIME symbols that will be required.  The list can be output to any
device.  It lists symbols in the same order as they appear in the
RUNTIME.ACT file, and the number of calls made to each. Then it is
simple to load a copy of RUNTIME.ACT into the editor, and kill all the
unused routines/variables. 

     Another author (name escapes me) wrote a program call RTWRITE,
that will take the output from RTSCAN (disk file) and write out the
minimum runtime package for you.

    In all, this package makes less demand on your symbol table capacity
than the OSS package (fewer symbols).  And, RTSCAN/RTWRITE makes it easy
to include only the direct and indirect routines needed, to make your
runable binary file as small as possible, and minimize symbol table
demands. 

     If you encounter symbol table capacity problems anyway in compiling
a very large program, this package does not include a routine to
increase symbol table space (like BIGST.ACT distributed with the OSS
package), nor does it have documentation on exactly what system
variables need to be changed. 

    However, BIGST.ACT was released to the world by Clint Parker's BBS,
as copyright but to be freely distributed, so that could be used in
conjunction with this PD runtime package. 

    The package comes with a notice that although this runtime package
is PD, Action! programs can still not be sold for profit unless cleared
with OSS Inc. [PROBABLY ICD INC - NOW] 

    It is a very fine package, and a definite improvement over the OSS
package in ease of use-- no bugs found yet. 

    [I have since used the PD runtime package on a couple of small
programs-- it works great...] 


;-----------cut here----RUNTIME.ACT by Jeff Reister-------------------

PROC _CPYPRM=*()
SET $4EE = _CPYPRM
[$85$A0$86$A1$84$A2$18$68$85$84$69$03
$A8$68$85$85$69$00$48$98$48$A0$01$B1
$84$85$82$C8$B1$84$85$83$C8$B1$84$A8
$B9$A0$00$91$82$88$10$F8$60]


PROC _CHGSGN=*()
[$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00
$E5$C1$AA$68$60]


PROC _FIXSGN=*()
[$86$C2$E0$00$10$03$20 _CHGSGN $85$82
$86$83$A5$85$45$C2$85$C2$A6$85$10$09
$A5$84$20 _CHGSGN $85$84$86$85$60]


PROC _FIXRES=*()
[$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN
$60]


PROC _MUL=*()
SET $4E8 = _MUL
[$20 _FIXSGN $A9$00$85$86$85$87$A5$82
$D0$04$A5$83$F0$22$A5$84$D0$04$A5$85
$F0$1A$46$85$66$84$90$0D$18$A5$86$65
$82$85$86$A5$87$65$83$85$87$06$82$26
$83$38$B0$D6$4C _FIXRES]


PROC _DIV=*()
SET $4EA = _DIV
[$20 _FIXSGN $A9$00$85$86$85$87$85$C1
$A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F
$A5$84$D0$04$A5$85$F0$57$A5$82$C5$84
$A5$83$E5$85$90$0F$A5$C1$30$0B$06$84
$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0
$04$A5$C1$F0$36$A5$82$D0$04$A5$83$F0
$2E$A5$82$C5$84$A5$83$E5$85$90$19$38
$A5$82$E5$84$85$82$A5$83$E5$85$85$83
$A5$86$05$C0$85$86$A5$87$05$C1$85$87
$46$85$66$84$46$C1$66$C0$38$B0$C2$4C
_FIXRES]


PROC _MODOP=*()
SET $4EC = _MODOP
[$20 _DIV $A5$82$A6$83$60]


PROC _RSHOP=*()
SET $4E6 = _RSHOP
[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA
$A6$86$60]


PROC _LSHOP=*()
SET $4E4 = _LSHOP
[$A4$84$F0$0A$86$86$0A$26$86$88$D0$FA
$A6$86$60]


PROC _ERROU=*()
[$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A
$38$E9$10$D0$F1$6C$0A$00]

PROC _ERRVEC=*()
[_ERROU]

PROC _DEVIC=*()
[$00]

MODULE
CARD Error=_ERRVEC
BYTE device=_DEVIC



PROC _GOCIO=*()
[$20$56$E4$10$1A$C0$88$F0$06$68$68$98
$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA
$A9$01$9D$C0$05$68$AA$68$60]


PROC _LODCHN=*()
[$C9$08$90$07$68$68$A9$86$6C _ERRVEC
$0A$0A$0A$0A$AA$60]


PROC _STONAM=*()
[$18$69$01$9D$44$03$98$69$00$9D$45$03
$60]


PROC _SHFTR=*()
[$48$8A$A8$68$AA$AD _DEVIC $60]


PROC _CLREOL=*()
[$48$A9$00$85$A5$68$60]


PROC _SETEOL=*()
[$48$A9$01$85$A5$68$60]


PROC _PRECON=*()
[$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]


PROC _DOPRNT=*()
[$86$A3$84$A4$20 _LODCHN $A9$00$9D$49
$03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3
$69$01$9D$44$03$A5$A4$69$00$9D$45$03
$A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0
$12$A9$00$9D$48$03$9D$49$03$A9$0B$9D
$42$03$A9$9B$20 _GOCIO $60]


PROC StrC=*(CARD c, s)
[$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8
$A0$00$B1$F3$30$06$C8$91$A2$38$B0$F6
$29$7F$C8$91$A2$98$A0$00$91$A2$60]


PROC StrB=*(BYTE b CARD s)
[$84$A3$48$8A$A8$A2$00$68$4C StrC]


PROC StrI=*(INT i CARD s)
[$E0$00$30$03$4C StrC   $49$FF$85$A2
$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20
StrC $A0$00$18$B1$A2$69$01$91$A2$A8
$88$B1$A2$C8$91$A2$88$88$D0$F7$C8$A9
$2D$91$A2$60]


PROC _DOPRNC=*()
[$48$20 _PRECON $20 StrC $68$A2$FD$A0
$03$4C _DOPRNT]


PROC DOPRNI=*()
[$48$20 _PRECON $20 StrI $68$A2$FD$A0
$03$4C _DOPRNT]


PROC PrintCD=*(BYTE d CARD c)
[$20 _CLREOL $4C _DOPRNC]


PROC PrintC=*(CARD c)
[$20 _SHFTR $4C PrintCD]


PROC PrintCDE=*(BYTE d CARD c)
[$20 _SETEOL $4C _DOPRNC]


PROC PrintCE=*(CARD c)
[$20 _SHFTR $4C PrintCDE]


PROC PrintBD=*(BYTE d, b)
[$A0$00$4C PrintCD]


PROC PrintB=*(BYTE b)
[$20 _SHFTR $4C PrintBD]


PROC PrintBDE=*(BYTE d, b)
[$A0$00$4C PrintCDE]


PROC PrintBE=*(BYTE b)
[$20 _SHFTR $4C PrintBDE]


PROC PrintID=*(BYTE d INT i)
[$20 _CLREOL $4C _DOPRNI]


PROC PrintI=*(INT i)
[$20 _SHFTR $4C PrintID]


PROC PrintIDE=*(BYTE d INT i)
[$20 _SETEOL $4C _DOPRNI]


PROC PrintIE=*(INT i)
[$20 _SHFTR $4C PrintIDE]


PROC PrintD=*(BYTE d CARD s)
[$20 _CLREOL $4C _DOPRNT]


PROC Print=*(CARD s)
[$20 _SHFTR $4C PrintD]


PROC PrintDE=*(BYTE d CARD s)
[$20 _SETEOL $4C _DOPRNT]


PROC PrintE=*(CARD s)
[$20 _SHFTR $4C PrintDE]


PROC _HEXSTR=*()
[$85$84$86$85$A9$FD$85$A2$A9$03$85$A3
$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9
$00$A2$04$06$84$26$85$2A$CA$D0$F8$69
$30$C9$3A$90$02$69$06$C8$91$A2$C0$05
$D0$E5$60]


PROC PrintF=*(CARD s,a,b,c,d,e,f,g)
[$85$82$86$83$84$A2$AD _DEVIC $0A$0A
$0A$0A$85$C1$A0$00$84$87$84$C0$B1$82
$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86
$F0$02$B0$3E$B1$82$C9$25$D0$3E$E6$C0
$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0
$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4
$B5$A2$48$B5$A3$E8$E8$86$87$AA$68$C0
$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0
$53$F0$3F$38$B0$1D$60$38$B0$B2$A9$9B
$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9
$0B$9D$42$03$98$20 _GOCIO $38$B0$E4
$A0$03$84$A3$A0$FD$20 StrC $38$B0$0F
$A0$03$84$A3$A0$FD$20 StrI $38$B0$03
$20 _HEXSTR $A9$FD$A2$03$85$84$86$85
$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5
$9D$48$03$18$A5$84$69$01$9D$44$03$A5
$85$69$00$9D$45$03$A9$0B$9D$42$03$20
_GOCIO $38$B0$98]


PROC PutD=*(BYTE d, c)
[$86$A0$20 _LODCHN $A9$00$9D$48$03$9D
$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO
$60]


PROC PutDE=*(BYTE d)
[$A2$9B$4C PutD]


PROC Put=*(BYTE c)
[$AA$AD _DEVIC $4C PutD]


PROC PutE=*()
[$A9$9B$4C Put]


BYTE FUNC ValB=*(CARD a)
CARD FUNC ValC=*(CARD a)
INT FUNC ValI=*(CARD a)
[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5
$A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9
$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0
$31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26
$48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1
$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85
$A1$18$68$65$A0$85$A0$90$CD$E6$A1$38
$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85
$A0$A9$00$E5$A1$85$A1$60]


PROC _DOINPT=*()
[$86$A4$84$A5$20 _LODCHN $18$A5$A4$69
$01$9D$44$03$A5$A5$69$00$9D$45$03$A5
$A3$F0$18$9D$48$03$A9$00$9D$49$03$A9
$05$9D$42$03$20 _GOCIO $BD$48$03$F0
$03$38$E9$01$A0$00$91$A4$A5$A6$F0$07
$A5$A4$A6$A5$4C ValC $60]


BYTE FUNC InputBD=*(BYTE d)
CARD FUNC InputCD=*(BYTE d)
INT FUNC InputID=*(BYTE d)
[$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD
$A0$03$4C _DOINPT]


BYTE FUNC InputB=*()
CARD FUNC InputC=*()
INT FUNC InputI=*()
[$AD _DEVIC$4C InputCD]


PROC InputMD=*(BYTE d CARD s BYTE l)
[$48$A9$00$85$A6$68$4C _DOINPT]


PROC InputSD=*(BYTE d CARD s)
[$48$A9$FF$85$A3$68$4C InputMD]


PROC InputS=*(CARD s)
[$20 _SHFTR $4C InputSD]


CHAR FUNC GetD=*(BYTE d)
[$20 _LODCHN $A9$00$9D$48$03
$9D$49$03$A9$07$9D$42$03$20 _GOCIO
$85$A0$60]


PROC Open=*(BYTE d CARD s BYTE m, a)
[$86$A1$20 _LODCHN $A5$A1$20
 _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B
$03$A9$03$9D$42$03$20 _GOCIO $8A$4A
$4A$4A$4A$AA$A9$00$9D$C0$05$60]


PROC Close=*(BYTE d)
[$20 _LODCHN $A9$0C$9D$42$03$20
_GOCIO $60]


PROC XIO=*(BYTE d,z,c,a1,a2 CARD s)
[$20 _LODCHN $98$9D$42$03$A5$A3$9D$4A
$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20
_STONAM $20 _GOCIO $60]


PROC Note=*(BYTE d CARD s, o)
[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42
$03$20 _GOCIO $A0$00$BD$4C$03$91$A1
$BD$4E$03$91$A3$BD$4D$03$C8$91$A1$60]


PROC Point=*(BYTE d CARD s BYTE o)
[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98
$9D$4D$03$A5$A3$9D$4E$03$A9$25$9D$42
$03$20 _GOCIO $60]


PROC Graphics=*(BYTE m)
[$48$A2$60$A9$0C$9D$42$03$20$56$E4$68
$9D$4B$03$49$10$09$0C$9D$4A$03$A9$53
$85$A0$A9$3A$85$A1$A9$A0$9D$44$03$A9
$00$9D$45$03$A9$03$9D$42$03$20 _GOCIO
$60]


PROC SetColor=*(BYTE r, h, l)
[$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$85
$A1$98$29$0F$05$A1$A6$A0$9D$C4$02$60]


PROC Position=*(CARD x BYTE y)
[$85$55$86$56$84$54$60]


PROC Plot=*(CARD x BYTE y)
[$20 Position $A9$06$AE$FD$02$4C
PutD]


PROC DrawTo=*(CARD x BYTE y)
[$20 Position $A2$60$A9$11
$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO
$60]


PROC Fill=*(CARD x BYTE y)
[$20 Position $A2$60$A9$12
$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO
$60]


BYTE FUNC Locate=*(CARD x BYTE y)
[$20 Position $A9$06$4C GetD]


PROC Sound=*(BYTE c, p, d, v)
[$C9$04$B0$25$86$A1$0A$AA$A9$00$8D$08
$D2$A9$03$8D$0F$D2$A5$A3$29$0F$85$A3
$98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2
$A5$A1$9D$00$D2$60]


PROC SndRst=*()
[$A9$00$A2$07$9D$00$D2$CA$10$FA$60]


BYTE FUNC Paddle=*(BYTE p)
[$29$07$AA$BD$70$02$85$A0$60]


BYTE FUNC PTrig=*(BYTE p)
[$29$07$AA$BD$7C$02$85$A0$60]


BYTE FUNC Stick=*(BYTE p)
[$29$03$AA$BD$78$02$85$A0$60]


BYTE FUNC STrig=*(BYTE p)
[$29$03$AA$BD$84$02$85$A0$60]


INT FUNC SCompare=*(CARD s1, s2)
[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1
$B1$A4$85$A6$B1$A2$85$A7$C4$A6$F0$15
$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90
$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5
$A7$F0$F9$B0$F0$90$F1]


PROC SCopy=*(CARD d, s)
[$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$B1
$A2$91$A0$C0$00$F0$04$88$38$B0$F4$60]


PROC SCopyS=*(CARD d, s BYTE b, e)
[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2
$C5$A5$B0$02$85$A5$A5$A4$F0$15$C5$A5
$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6
$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91
$A0$60]


PROC SAssign=*(CARD d, s BYTE b, e)
[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5
$F0$02$B0$35$85$A7$C6$A7$A0$00$84$A8
$B1$A0$85$A9$B1$A2$85$AA$A5$A7$C5$A5
$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8
$B1$A2$E6$A7$A4$A7$91$A0$38$B0$E5$A5
$A7$C5$A9$90$04$A0$00$91$A0$60]


BYTE FUNC Rand=*(BYTE r)
[$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A
$38$B0$F7$85$A3$AD$0A$D2$25$A3$C5$A2
$F0$04$90$02$B0$F3$85$A0$60]


PROC Poke=*(CARD a BYTE v)
[$85$A0$86$A1$98$A0$00$91$A0$60]


PROC PokeC=*(CARD a, v)
[$20 Poke $C8$A5$A3$91$A0$60]


BYTE FUNC Peek=*(CARD a)
CARD FUNC PeekC=*(CARD a)
[$85$A2$86$A3$A0$00$B1$A2$85$A0$C8$B1
$A2$85$A1$60]


PROC SetBlock=*(CARD a, l, v)
[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04
$A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E6
$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38
$B0$E2$60]


PROC Zero=*(CARD a, l)
[$48$A9$00$85$A4$68$4C SetBlock]


PROC MoveBlock=*(CARD d, s, l)
[$85$A0$86$A1$84$A2$A0$00$A5$A4$D0$04
$A5$A5$F0$18$B1$A2$91$A0$C8$D0$04$E6
$A1$E6$A3$C6$A4$A5$A4$C9$FF$D0$E5$C6
$A5$38$B0$E0$60]


MODULE


;--------end of RUNTIME.ACT------------