@nataliapc/mcp-openmsx
Version:
Model context protocol server for openMSX automation and control
67 lines (50 loc) • 2.18 kB
Markdown
# USR()
## Effect
This function calls a subroutine in machine language, passing a value to it. The location of the subroutine has to be defined first, using the `DEF USR` instruction.
The value goes into the system variable `DAC` (&HF7F6, 8 bytes), and its type to `VALTYP` (&HF663, 1 byte). The return value of the function is taken from the same variable, so if it's not modified by the machine language subroutine, it returns the same value that it's passed.
## Syntax
`USR<Number>(<Value>)`
## Parameters
`<Number>` is optional and can range from 0 to 9. When omitted, 0 is assumed.
`<Value>` is a value, a variable or a string that can be retrieved by the machine subroutine.
## Example
```basic
10 ' Example of USR function usage by NYYRIKKI
11 ''''''''''''''''''''''''''''''''''''''''''''''''''''
12 ' ML-Program to read PSG (See SOUND-command)
13 ''''''''''''''''''''''''''''''''''''''''''''''''''''
14 DATA"1E 05 LD E,5 ;Illegal function call
15 DATA"3A 63 F6 LD A,(#F663) ;VALTYP
16 DATA"FE 02 CP 2 ;Integer type
17 DATA"C2 6F 40 JP NZ,#406F ;Error handler
18 DATA"2A F8 F7 LD HL,(#F7F8) ;Input integer
19 DATA"7C LD A,H
20 DATA"A7 AND A
21 DATA"C2 6F 40 JP NZ,#406F ;>256 = ERROR
22 DATA"7D LD A,L
23 DATA"FE 10 CP 16
24 DATA"D2 6F 40 JP NC,#406F ;>15 = Error
25 DATA"CD 96 00 CALL #96 ;Read PSG
26 DATA"32 F8 F7 LD (#F7F8),A ;Return value
27 DATA"C9 RET
28 ''''''''''''''''''''''''''''''''''''''''''''''''''''
29 ' Put program to memory
30 ''''''''''''''''''''''''''''''''''''''''''''''''''''
31 DEFINT A-Z:AD=&HC000
32 READ A$:P=1
33 B$=MID$(A$,P,2):IF B$=" " THEN 32 ELSE P=P+3
34 POKE AD,VAL("&H"+B$):AD=AD+1:IF B$<>"C9" THEN 33
35 ''''''''''''''''''''''''''''''''''''''''''''''''''''
36 ' Example of how to use USR function
37 ''''''''''''''''''''''''''''''''''''''''''''''''''''
38 DEFUSR=&HC000 ' This defines USR() start address
39 PLAY"CDE"
40 X=USR(0)+USR(1)*256:IF OX<>X THEN PRINT X:OX=X
41 IF INKEY$="" THEN 40
```
## Related to
`DEF USR`
## Compatibility
MSX-BASIC 1.0 or higher
## Source
Retrieved from "https://www.msx.org/wiki/USR()"