You are here: Home DOCUMENTATION information SBASIC Manual - Page 55

Technological Arts Inc.

Your Shopping Cart

Your Cart is currently empty.

SBASIC Manual - Page 55

Article Index
SBASIC Manual
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Page 28
Page 29
Page 30
Page 31
Page 32
Page 33
Page 34
Page 35
Page 36
Page 37
Page 38
Page 39
Page 40
Page 41
Page 42
Page 43
Page 44
Page 45
Page 46
Page 47
Page 48
Page 49
Page 50
Page 51
Page 52
Page 53
Page 54
Page 55
Page 56
Page 57
Page 58
Page 59
Page 60
Table of Contents
Index
All Pages

     SBasic User's Manual     SBasic Version 2.7             Page 55
     Printed:  December 5, 1999
     The ASMFUNC statement


     The ASMFUNC statement gives SB access to labels and routines within a
     block of assembly language code.  See the section above on the ASM
     statement.  The format for the ASMFUNC statement is:

         asmfunc  foo

     This statement tells the SBasic compiler that subsequent references to
     the label FOO must be passed to the output file as FOO, not as a
     converted label.

     ASMFUNC adds tremendous power to SB, allowing you to write your own
     SBasic extensions in assembly language, then use them as if they were
     an integral part of SB.  For example:

         declare  stack                 ' declare a variable
         asmfunc  getstk                ' define an asm entry point

         main:                          ' enter here
         stack = getstk(0)              ' get addr of return stack
         do  loop                       ' silly loop

         asm                            ' switch to assembly language
         getstk                         ' entry point to getstk()
             tsx                        ' move addr of stack to x
             xgdx                       ' move addr of stack to d
             rts                        ' return addr of stack
         endasm                         ' back to SBasic

         end

     Here, the ASMFUNC statement tells SB that references to the label
     GETSTK are to be passed unchanged to the output file.  Thus, when the
     SB code invokes the function GETSTK() to get the current hardware
     stack address, SB generates a JSR to GETSTK, not a JSR to an address
     with an internal SB label.

     The actual code for subroutine GETSTK exists in the ASM block.  GETSTK
     moves the stack pointer into the 68hc11's D-register and returns.  The
     code generated by SB then stores the D-register into variable STACK
     and falls into the silly loop at the end of the program.

     This example shows how to set up an ASMFUNC statement and its
     associated assembly language.  It also shows how to use an ASMFUNC
     label as a function.  In this case, you must adhere to SBasic's
     general rules regarding functions.  Functions, which return a result
     in the D-register, must be called with an argument.  Since the GETSTK
     routine doesn't need an argument, anything will work, but you must
     include an argument of some kind.  That's why I show an argument of 0
     for GETSTK.