Jump to content
IGNORED

Action! Toolkit and Action! Reference Guide Manuals


AtariGeezer

Recommended Posts

Thanks Jay.

If someone could convert all into a single-page-across PDF file it would be greatly appreciated. We are getting close to have all the OSS manuals available in one spot on Atarimania.com. I'm uploading a ton of Atari books and manuals today now that I got my Windows XP working again.

 

Allan

 

Link to comment
Share on other sites

a reference manual for The Action! System

http://www.noniandjim.com/Jim/atari/ACTION_Reference_Manual-Def_Ed.pdf

 

Same as above but a typed version:

http://www.noniandjim.com/Jim/atari/ACTION_REF_MANUAL.pdf

 

A Reference GUIDE to Using The ACTION! Run Time Package with Atari Computers

http://atariwiki.strotmann.de/wiki/attach/ACTION/The%20ACTION!%20Run%20Time%20Package-A%20Reference%20GUIDE.pdf

Edited by Madi
  • Like 1
Link to comment
Share on other sites

  • 2 months later...

Working on a fully re-edited version of all Action! manuals in one guide for a while now, the work is nearly finished. Currently I try to validate some descriptions, which I cannot resolve in meaning (maybe because it's not my mother tongue). One of it is this section in the chapter library:

6.1.4 PROC SAssign
------------------
purpose: to copy one string into part of another
string.
Format: PROC SAssign(<dest>,<source>, BYTE start,stop
parameters: <dest> - is the identifier of the
destination string (CHAR ARRAY)
for the string copy.
<source> - is the string with double quotes
or identifier of the CHAR ARRAY
used as the source string for
the copy.
start - is the starting point in <dest>
for the copy.
stop - is the stopping point in <dest>
for the copy. If 'stop' is
greater than the length of <dest>,

then the length of <dest> is

changed to 'stop'.

description:
This procedure is used to copy one string (<source>)

into part of another (<dest>). <source> will be copied

starting at element 'start' of <dest>, and the copying

will stop at element 'stop' of <dest>. If the space

allowed (stop-start+l) in <dest> is greater than the

length of <source>, then 'stop' will be changed to make

the space available and the length equal.

The copying this procedure does will overwrite the old
elements of <dest> as it puts in <source>.

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

This reads to me as if the dest string will be enlarged to the needs of the copy. Since dest is an already defined string/array, something will be overwritten then and very likely destroy some code.

 

Can somebody explain please?

 

An excerpt of the running project is available on my homepage.

Link to comment
Share on other sites

At one time it seemed that Action was intended to handle strings ~dynamically, that is they could be changed on the fly. There was only a single blurb by Bill Wilkinson <I think> saying ~don't try it, allocate all space for strings.

 

I have always interpreted this to mean: In spite of what is said in the manuals, it is the programmers responsibility to make sure everything fits.

 

*IF* you want to double check, you can compile that part of the RT that is used and use a debugger to see what the actual code produced looks like. Of course if you are machine language guru you could probably do it from the HEX. :)

I'm guessing the last SCopy+14 is just a jump to the 14th byte of the Scopy procedure. I didn't check for any other JMPs or JSRs that transfer control to OS or other routines.

 

PROC SCopy=*(BYTE ARRAY d,s)
[$A085$A186$A284$A0$0$A2B1$A091$8F0$A8$A2B1$A091$88$F9D0$60]

 

PROC SAssign=*(BYTE ARRAY d,s,BYTE b,e)
[$A085$A186$A284$A0$0$A2B1$DF0$A685$A4C6$38$A5A5$A4E5$2F0
$1B0$AA60$A6C5$890$18$A6A5$AA$A465$A585
$A5A5$A0D1$390$A091$18$A0A5$A465$A085$290
$A1E6$4C8ASCopy+14]

Link to comment
Share on other sites

Disassembled with Altirra:

SCopy:
2000: 85 A0             STA $A0
2002: 86 A1             STX $A1
2004: 84 A2             STY $A2
2006: A0 00             LDY #$00
2008: B1 A2             LDA ($A2),Y
200A: 91 A0             STA ($A0),Y
200C: F0 08             BEQ $2016
200E: A8                TAY
200F: B1 A2             LDA ($A2),Y
2011: 91 A0             STA ($A0),Y
2013: 88                DEY
2014: D0 F9             BNE $200F
2016: 60                RTS
SAssign:
2017: 85 A0             STA $A0
2019: 86 A1             STX $A1
201B: 84 A2             STY $A2
201D: A0 00             LDY #$00
201F: B1 A2             LDA ($A2),Y
2021: F0 0D             BEQ $2030
2023: 85 A6             STA $A6
2025: C6 A4             DEC $A4
2027: 38                SEC
2028: A5 A5             LDA $A5
202A: E5 A4             SBC $A4
202C: F0 02             BEQ $2030
202E: B0 01             BCS $2031
2030: 60                RTS
2031: AA                TAX
2032: C5 A6             CMP $A6
2034: 90 08             BCC $203E
2036: 18                CLC
2037: A5 A6             LDA $A6
2039: AA                TAX
203A: 65 A4             ADC $A4
203C: 85 A5             STA $A5
203E: A5 A5             LDA $A5
2040: D1 A0             CMP ($A0),Y
2042: 90 03             BCC $2047
2044: 91 A0             STA ($A0),Y
2046: 18                CLC
2047: A5 A0             LDA $A0
2049: 65 A4             ADC $A4
204B: 85 A0             STA $A0
204D: 90 02             BCC $2051
204F: E6 A1             INC $A1
2051: 8A                TXA
2052: 4C 0E 20          JMP $200E

Haven't had time to analyze it yet. What are Action!'s calling conventions?

Link to comment
Share on other sites

I'm doing this on the fly so it is just about a sure thing I am making mistakes. The manual gives parameters passed to Procedures in order register A, X, Y, address $A3 on the rest.

 

So if you pass byte values Fubar(byte one, two) the A reg will have the value one, the X reg the value of two. It automatically passes card/int values in 6502 low/high format. In the string functions the Sassign call will have something like

 

page zero $A0-$A1 destination string address

page zero $A2-$A3 source string address

page zero $A4 byte start

page zero $A5 byte end

 

Then uses SOP (indirect), Y addressing to do the move.

Action! only allows for 256 byte strings and the first byte of the string is string length so the

201F: B1 A2 LDA ($A2),Y
2021: F0 0D BEQ $2030

...

2030: 60 RTS

checks for a zero => source string length zero and bails to an RTS.

Link to comment
Share on other sites

Thanks for the help ...

Of course if you are machine language guru you could probably do it from the HEX. icon_smile.gif

Unfortunately I am not.

I believe it means if the source string is shorter than the requested number of characters to copy (stop - start + 1) then stop will be decreased to make sure you do not copy past the end of the source string.

Yes, that's what I also found while testing around. I guess one wouldn't figure this out when reading the corresponding description.

Yes, it means stop will be truncated to the available length. So if I pass in 20, and then available length is 10, then stop gets forced to 10.

confirmed twice, that's good :-).

So I guess the description should read like this:

This procedure is used to copy one string (<source>)
into part of another (<dest>). <source> will be copied
starting at element 'start' of <dest>, and the copying
will stop at element 'stop' of <dest>. If the space
allowed (stop-start+1) in <dest> is greater than the
length of <source>, then 'stop' will be changed to
the length <source>.

The copying this procedure does will overwrite the old
elements of <dest> as it puts in <source>.

And, I found one more thing:

Bug sheet #3 gives advice to change this
|->

5. On page 17 of the Reference Guide for the Runtime Package, the DEFINE for ROM will cause incorrect code if you use local variables.

Fix: Use the following form of definition, instead:

DEFINE ROM = "BYTE ZZQQJUNK
SET $680 = $E^
SET $B5 = $5800
SET $E = $682^"

<-|

Of course the underline chars have been take away before testing ...

Can someone provide a proper example please that works?

As far as I can see now this is the last issue to be solved, before the manual can go online.
Possibly another appendix showing a disassembled run time in table format might be added.

Link to comment
Share on other sites

This will be the final product:

 

A manual, comprising all parts of Action!, revised and updated using the known sources. The zipped pdf file is approx. 750KiB in size.

 

It reflects the current status of the cart system, run time package and toolkit. Please see the preface for more details.

 

The print format is an A5 sized book.

 

Currently another proof reading session is going on to minimize typing errors and layout flaws. If you are an experienced Action! user and interested in supporting the proof reading, I'd be happy to share it.

 

What I am not really happy with is that I was not able to find a proper font. So courier had to do it, which is lacking the dashed zero. Therefore in Appendix J another font was used to differ 0 and O more easily.

 

 

post-18804-0-87490500-1413733767_thumb.jpg

post-18804-0-85424300-1413733850_thumb.jpg

post-18804-0-08294300-1413734141_thumb.jpg

Link to comment
Share on other sites

  • 1 month later...

This will be the final product:

 

A manual, comprising all parts of Action!, revised and updated using the known sources. The zipped pdf file is approx. 750KiB in size.

Hopefully all typos are found and deleted. Let me know what your impressions are ...

 

 

If there are any failures to fix, please let me know.

 

For those who are not familiar with e.g. Adobe Reader: F4, F8, F9 helps.

To open it please use my pseudo.

action_rev_3-4_GBXL_2014.zip

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...