{{htmlmetatags>metatag-robots=() metatag-title=(DECLARE PROC | ugBASIC User Manual) metatag-keywords=(ugBASIC,Commodore 64,Commodore PLUS/4,ZX Spectrum) metatag-description=(Manual page for DECLARE PROC) metatag-media-og:image=(:ugbasic:logo-ugbasic-fb.png) metatag-og:title=(DECLARE PROC | ugBASIC User Manual) metatag-og:description=(Manual page for DECLARE PROC) }} ====== ugBASIC User Manual ====== ===== DECLARE PROC ✓ ===== ===== SYNTAX ===== DECLARE [SYSTEM] PROC name AT address [ ( par1 [, par2 [, ... ] ] ) ] [ ON targets ] par : name AS type ON register par : name AS type ON STACK(width) width: BYTE | WORD | DWORD targets : name of targets, separated by comma (,) ==== PURPOSE ==== The ''DECLARE PROC'' is a way to define and call external procedures written in machine language and to insert assembly into the sources. The procedures defined in this way can be called as if they were an integral part of the language. Once the procedure has been declared, it will be sufficient to invoke it with one of the following syntaxes: CALL test PROC test test[] as if it were any ugBASIC procedure. If desired, parameters can be added. For each it is obviously necessary to indicate how the value will be passed to the function written in machine language. The ugBASIC compiler allows you to declare functions and procedures that are “system”. What does “system” mean? It means that the machine code resides in a ROM, preloaded at run time and therefore already made available to any program that knows how to call it. However, since ugBASIC makes available all memory space allowed by the hardware, it is possible that the ROMs have been disabled or otherwise made unreachable. Indicating that you want to call a procedure or a system function, ugBASIC will take care of re-enabling the ROM before executing the request, deactivating it on exit. To declare a procedure or function to be system, simply use the ''SYSTEM'' keyword. ==== EXAMPLE ==== DECLARE SYSTEM PROCEDURE test ON CPC, ZX See also the following example files: * ''[[https://github.com/spotlessmind1975/ugbasic/tree/main/examples/extern_example_11.bas|extern_example_11.bas]]'' ==== ABBREVIATION ==== Dec Prb ==== AVAILABLE ON ==== * Atari (400/800) * Atari XL/XE * Commodore 128 (MOS 8502) * Commodore 128 (Zilog Z80) * Commodore 64 * Commodore 64+REU * TRS-80 Color Computer * TRS-80 Color Computer 3 * ColecoVision * Amstrad CPC 664 * Dragon 32 * Dragon 64 * Thomson MO5 * Thomson MO5 * Olivetti Prodest PC128 * Commodore PLUS/4 * SEGA SC-3000 * SEGA SG-1000 * VG-5000 * Commodore VIC-20 * ZX Spectrum 48 ==== ANY PROBLEM? ==== If you have encountered a problem using this command, if you think there is a bug or the explanation is unclear, please [[https://github.com/spotlessmind1975/ugbasic/issues/new?title=ISSUE ON DECLARE PROC|open an issue]] for this keyword on GitHub. Thank you!===== POWERED BY ===== [[:ugbasic:user:index|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]