[Info-vax] BASIC and AST routines

John Doppke jdoppke at gmail.com
Thu Nov 18 09:07:35 EST 2021


On Wednesday, November 17, 2021 at 8:18:45 PM UTC-5, Dave Froble wrote:
> On 11/17/2021 6:14 PM, John Doppke wrote: 
> > So I've been playing with writing AST routines (stubbornly) in BASIC. They work ok, but I've found I have to declare the routine as having 5 'standard' parameters - "function long AST long (p1, p2, p3, p4, p5)". I'm not sure what the 5 parameters are, but doing anything with them is usually a bad idea. I communicate with my main program using common or event flags. 
> > 
> > Now I need an AST for a call that requires a parameter - SMG$ENABLE_UNSOLICITED_INPUT. I've tried adding a parameter in my usual list in different ways but I can't get it to work. Every time it's called I get a reserved opcode exception. (A DCLAST call with my AST works ok). 
> > 
> > Can anyone shed some light on what the parameters are that BASIC is getting? I'll probably end up writing this one in MACRO, but I want to understand what is happening. 
> > 
> > -John 
> >
> From the 7.3 docs: 
> 
> Table 8–3 AST Arguments for VAX Systems and Alpha Systems 
> VAX System Arguments Alpha System Arguments 
> AST parameter AST parameter 
> R0 R0 
> R1 R1 
> PC PC 
> PSL PS 
> Registers R0 and R1, the program counter (PC), and the processor status 
> longword (PSL) on VAX systems, or processor status (PS) on Alpha systems were 
> saved when the process was interrupted by delivery of the AST. 
> The AST parameter is an argument passed to the AST service routine so that 
> it can identify the event that caused the AST. When you call a system service 
> requesting an AST, or when you call the SYS$DCLAST system service, you 
> can supply a value for the AST parameter. If you do not specify a value, the 
> parameter defaults to 0. 
> 
> Not formatted so well, but the important data is there. 
> 
> You get to pass a longword to the AST routine. The other 4 parameters appear to 
> be set by the OS, or whatever. Not by you! I don't know what you'd do with R0, 
> R1, PC, and PLS/PS. 
> 
> Other communications would be via global data, a COMMON block, a PSECT, and 
> whatever. 
> 
> As an example, something I've done, set a timer on some I/O. When the AST 
> fires, you want to do something because of the timeout. I pass the channel # 
> for the I/O and have the AST cancel the I/O on that channel and return. That 
> causes I/O completion in the code that set the timer. 
> 
> I've not used SMG, so I'm not much help in what you're doing. But I'd guess the 
> "SMG$ENABLE_UNSOLICITED_INPUT" would be an external value, and the use of an 
> INCLUDE statement would make it available, or, in global data shared with the 
> calling code. 
> 
> Apologies if I've not understood your question. 
> 
> -- 
> David Froble Tel: 724-529-0450 
> Dave Froble Enterprises, Inc. E-Mail: da... at tsoft-inc.com 
> DFE Ultralights, Inc. 
> 170 Grimplin Road 
> Vanderbilt, PA 15486

Thanks.  It also helps if you don't have a typo referring to your function.  BASIC will happily compile and link and not say a word.



More information about the Info-vax mailing list