Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -16,54 +16,53 @@ iValeur: .skip 4 @ reserve 4 bytes in memory
|
|||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
main:
|
||||
ldr r0,=szMessage @ adresse of message short program
|
||||
bl affichageMess @ call function
|
||||
@ or
|
||||
ldr r0,iAdrszMessage @ adresse of message big program (size code > 4K)
|
||||
bl affichageMess @ call function
|
||||
@ or
|
||||
ldr r0,iAdrszMessage @ adresse of message big program (size code > 4K)
|
||||
bl affichageMess @ call function
|
||||
|
||||
ldr r1,=iValDeb @ adresse of variable -> r1 short program
|
||||
ldr r0,[r1] @ value of iValdeb -> r0
|
||||
ldr r1,iAdriValDeb @ adresse of variable -> r1 big program
|
||||
ldr r0,[r1] @ value of iValdeb -> r0
|
||||
|
||||
|
||||
/* set variables */
|
||||
ldr r1,=iValeur @ adresse of variable -> r1 short program
|
||||
str r0,[r1] @ value of r0 -> iValeur
|
||||
ldr r1,iAdriValeur @ adresse of variable -> r1 big program
|
||||
str r0,[r1] @ value of r0 -> iValeur
|
||||
ldr r1,=iValDeb @ adresse of variable -> r1 short program
|
||||
ldr r0,[r1] @ value of iValdeb -> r0
|
||||
ldr r1,iAdriValDeb @ adresse of variable -> r1 big program
|
||||
ldr r0,[r1] @ value of iValdeb -> r0
|
||||
|
||||
|
||||
/* set variables */
|
||||
ldr r1,=iValeur @ adresse of variable -> r1 short program
|
||||
str r0,[r1] @ value of r0 -> iValeur
|
||||
ldr r1,iAdriValeur @ adresse of variable -> r1 big program
|
||||
str r0,[r1] @ value of r0 -> iValeur
|
||||
|
||||
|
||||
/* end of program */
|
||||
mov r0, #0 @ return code
|
||||
mov r7, #EXIT @ request to exit program
|
||||
swi 0 @ perform the system call
|
||||
iAdriValDeb: .int iValDeb
|
||||
iAdriValeur: .int iValeur
|
||||
iAdriValDeb: .int iValDeb
|
||||
iAdriValeur: .int iValeur
|
||||
iAdrszMessage: .int szMessage
|
||||
iAdrszRetourLigne: .int szRetourLigne
|
||||
iAdrszRetourLigne: .int szRetourLigne
|
||||
/******************************************************************/
|
||||
/* affichage des messages avec calcul longueur */
|
||||
/******************************************************************/
|
||||
/* r0 contient l adresse du message */
|
||||
affichageMess:
|
||||
push {fp,lr} /* save des 2 registres */
|
||||
push {r0,r1,r2,r7} /* save des autres registres */
|
||||
mov r2,#0 /* compteur longueur */
|
||||
1: /*calcul de la longueur */
|
||||
push {fp,lr} /* save des 2 registres */
|
||||
push {r0,r1,r2,r7} /* save des autres registres */
|
||||
mov r2,#0 /* compteur longueur */
|
||||
1: /*calcul de la longueur */
|
||||
ldrb r1,[r0,r2] /* recup octet position debut + indice */
|
||||
cmp r1,#0 /* si 0 c est fini */
|
||||
beq 1f
|
||||
add r2,r2,#1 /* sinon on ajoute 1 */
|
||||
b 1b
|
||||
1: /* donc ici r2 contient la longueur du message */
|
||||
mov r1,r0 /* adresse du message en r1 */
|
||||
mov r0,#STDOUT /* code pour écrire sur la sortie standard Linux */
|
||||
cmp r1,#0 /* si 0 c est fini */
|
||||
beq 1f
|
||||
add r2,r2,#1 /* sinon on ajoute 1 */
|
||||
b 1b
|
||||
1: /* donc ici r2 contient la longueur du message */
|
||||
mov r1,r0 /* adresse du message en r1 */
|
||||
mov r0,#STDOUT /* code pour écrire sur la sortie standard Linux */
|
||||
mov r7, #WRITE /* code de l appel systeme 'write' */
|
||||
swi #0 /* appel systeme */
|
||||
pop {r0,r1,r2,r7} /* restaur des autres registres */
|
||||
pop {fp,lr} /* restaur des 2 registres */
|
||||
bx lr /* retour procedure */
|
||||
|
||||
pop {r0,r1,r2,r7} /* restaur des autres registres */
|
||||
pop {fp,lr} /* restaur des 2 registres */
|
||||
bx lr /* retour procedure */
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
The_Address : System.Address;
|
||||
I : Integer;
|
||||
The_Address := I'Address;
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
I : Integer;
|
||||
for I'Address use 16#A100#;
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
I : Integer;
|
||||
J : Integer;
|
||||
for I'Address use J'Address;
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
use std, array (: array.arg also defines pointer operators :)
|
||||
use std, array (: array.arg also defines pointer operators :)
|
||||
let var = 42
|
||||
let ptr = &var (: value of ptr is address of var :)
|
||||
print var (: prints 42 :)
|
||||
(*ptr)++ (: increments value pointed by ptr :)
|
||||
print var (: prints 43 :)
|
||||
let ptr = &var (: value of ptr is address of var :)
|
||||
print var (: prints 42 :)
|
||||
(*ptr)++ (: increments value pointed by ptr :)
|
||||
print var (: prints 43 :)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
use std, array
|
||||
=:mac:= -> int& { * (0x400000 as int*) }
|
||||
printf "%x\n" mac (: may crash depending on operating system :)
|
||||
printf "%x\n" mac (: may crash depending on operating system :)
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 ptr USAGE POINTER.
|
||||
01 var PIC X(64).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
SET ptr TO ADDRESS OF var.
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
OCOBOL*> Rosetta Code set address example
|
||||
*> tectonics: cobc -x setaddr.cob && ./setaddr
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. setaddr.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 prealloc PIC X(8) VALUE 'somedata'.
|
||||
01 var PIC X(8) BASED.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
SET ADDRESS OF var TO ADDRESS OF prealloc
|
||||
DISPLAY var END-DISPLAY
|
||||
*> 'somedata'
|
||||
GOBACK.
|
||||
|
||||
END PROGRAM setaddr.
|
||||
|
|
@ -2,13 +2,13 @@ MODULE AddressVar;
|
|||
IMPORT SYSTEM,StdLog;
|
||||
|
||||
VAR
|
||||
x: INTEGER;
|
||||
|
||||
x: INTEGER;
|
||||
|
||||
PROCEDURE Do*;
|
||||
BEGIN
|
||||
StdLog.String("ADR(x):> ");StdLog.IntForm(SYSTEM.ADR(x),StdLog.hexadecimal,8,'0',TRUE);StdLog.Ln
|
||||
StdLog.String("ADR(x):> ");StdLog.IntForm(SYSTEM.ADR(x),StdLog.hexadecimal,8,'0',TRUE);StdLog.Ln
|
||||
END Do;
|
||||
|
||||
BEGIN
|
||||
x := 10;
|
||||
x := 10;
|
||||
END AddressVar.
|
||||
|
|
|
|||
|
|
@ -45,13 +45,13 @@ END
|
|||
|
||||
SUB MainHandler
|
||||
|
||||
SELECT @CLASS
|
||||
SELECT @CLASS
|
||||
|
||||
CASE @IDCLOSEWINDOW
|
||||
CASE @IDCLOSEWINDOW
|
||||
|
||||
Close=1
|
||||
Close=1
|
||||
|
||||
ENDSELECT
|
||||
ENDSELECT
|
||||
|
||||
RETURN
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
var
|
||||
i: integer;
|
||||
p: ^integer;
|
||||
i: integer;
|
||||
p: ^integer;
|
||||
begin
|
||||
p := @i;
|
||||
writeLn(p^);
|
||||
p := @i;
|
||||
writeLn(p^);
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
var
|
||||
crtMode: integer absolute $0040;
|
||||
str: string[100];
|
||||
strLen: byte absolute str;
|
||||
crtMode: integer absolute $0040;
|
||||
str: string[100];
|
||||
strLen: byte absolute str;
|
||||
|
|
|
|||
|
|
@ -2,26 +2,26 @@ extends MainLoop
|
|||
|
||||
|
||||
func _process(_delta: float) -> bool:
|
||||
var a := Node.new()
|
||||
var b := Node.new()
|
||||
var a := Node.new()
|
||||
var b := Node.new()
|
||||
|
||||
# a and b are different objects with different RIDs
|
||||
print(a.get_instance_id())
|
||||
print(b.get_instance_id())
|
||||
# a and b are different objects with different RIDs
|
||||
print(a.get_instance_id())
|
||||
print(b.get_instance_id())
|
||||
|
||||
assert(a != b)
|
||||
assert(a.get_instance_id() != b.get_instance_id())
|
||||
assert(a != b)
|
||||
assert(a.get_instance_id() != b.get_instance_id())
|
||||
|
||||
# Set b to refer to the same object as a
|
||||
b.free()
|
||||
b = a
|
||||
# Set b to refer to the same object as a
|
||||
b.free()
|
||||
b = a
|
||||
|
||||
# a and b are now the same object and have the same RID
|
||||
print(a.get_instance_id())
|
||||
print(b.get_instance_id())
|
||||
# a and b are now the same object and have the same RID
|
||||
print(a.get_instance_id())
|
||||
print(b.get_instance_id())
|
||||
|
||||
assert(a == b)
|
||||
assert(a.get_instance_id() == b.get_instance_id())
|
||||
assert(a == b)
|
||||
assert(a.get_instance_id() == b.get_instance_id())
|
||||
|
||||
a.free()
|
||||
return true # Exit
|
||||
a.free()
|
||||
return true # Exit
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
"fmt"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func main() {
|
||||
myVar := 3.14
|
||||
myPointer := &myVar
|
||||
fmt.Println("Address:", myPointer, &myVar)
|
||||
fmt.Printf("Address: %p %p\n", myPointer, &myVar)
|
||||
myVar := 3.14
|
||||
myPointer := &myVar
|
||||
fmt.Println("Address:", myPointer, &myVar)
|
||||
fmt.Printf("Address: %p %p\n", myPointer, &myVar)
|
||||
|
||||
var addr64 int64
|
||||
var addr32 int32
|
||||
ptr := unsafe.Pointer(myPointer)
|
||||
if unsafe.Sizeof(ptr) <= unsafe.Sizeof(addr64) {
|
||||
addr64 = int64(uintptr(ptr))
|
||||
fmt.Printf("Pointer stored in int64: %#016x\n", addr64)
|
||||
}
|
||||
if unsafe.Sizeof(ptr) <= unsafe.Sizeof(addr32) {
|
||||
// Only runs on architectures where a pointer is <= 32 bits
|
||||
addr32 = int32(uintptr(ptr))
|
||||
fmt.Printf("Pointer stored in int32: %#08x\n", addr32)
|
||||
}
|
||||
addr := uintptr(ptr)
|
||||
fmt.Printf("Pointer stored in uintptr: %#08x\n", addr)
|
||||
var addr64 int64
|
||||
var addr32 int32
|
||||
ptr := unsafe.Pointer(myPointer)
|
||||
if unsafe.Sizeof(ptr) <= unsafe.Sizeof(addr64) {
|
||||
addr64 = int64(uintptr(ptr))
|
||||
fmt.Printf("Pointer stored in int64: %#016x\n", addr64)
|
||||
}
|
||||
if unsafe.Sizeof(ptr) <= unsafe.Sizeof(addr32) {
|
||||
// Only runs on architectures where a pointer is <= 32 bits
|
||||
addr32 = int32(uintptr(ptr))
|
||||
fmt.Printf("Pointer stored in int32: %#08x\n", addr32)
|
||||
}
|
||||
addr := uintptr(ptr)
|
||||
fmt.Printf("Pointer stored in uintptr: %#08x\n", addr)
|
||||
|
||||
fmt.Println("value as float:", myVar)
|
||||
i := (*int32)(unsafe.Pointer(&myVar))
|
||||
fmt.Printf("value as int32: %#08x\n", *i)
|
||||
fmt.Println("value as float:", myVar)
|
||||
i := (*int32)(unsafe.Pointer(&myVar))
|
||||
fmt.Printf("value as int32: %#08x\n", *i)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,34 +1,34 @@
|
|||
module checkVarptr {
|
||||
declare GetMem8 lib "msvbvm60.GetMem8" {Long addr, Long retValue}
|
||||
long long x=1234567812345678&&, z
|
||||
dim k(2,2,2) as long long
|
||||
call GetMem8(VarPtr(x), VarPtr(z))
|
||||
call GetMem8(VarPtr(x), VarPtr(k(1,0,1)))
|
||||
print z=x
|
||||
print k(1,0,1)=x
|
||||
link z to m
|
||||
print VarPtr(z)=VarPtr(m)
|
||||
checkref(&z)
|
||||
sub checkref(&p)
|
||||
print VarPtr(z)=VarPtr(p)
|
||||
end sub
|
||||
declare GetMem8 lib "msvbvm60.GetMem8" {Long addr, Long retValue}
|
||||
long long x=1234567812345678&&, z
|
||||
dim k(2,2,2) as long long
|
||||
call GetMem8(VarPtr(x), VarPtr(z))
|
||||
call GetMem8(VarPtr(x), VarPtr(k(1,0,1)))
|
||||
print z=x
|
||||
print k(1,0,1)=x
|
||||
link z to m
|
||||
print VarPtr(z)=VarPtr(m)
|
||||
checkref(&z)
|
||||
sub checkref(&p)
|
||||
print VarPtr(z)=VarPtr(p)
|
||||
end sub
|
||||
}
|
||||
checkVarptr
|
||||
module checkVarptr {
|
||||
// Using byref at GemMem8 signature
|
||||
declare GetMem8 lib "msvbvm60.GetMem8" {long &addr, long &retValue}
|
||||
declare PutMem8 lib "msvbvm60.PutMem8" {long &addr, retValue as long long}
|
||||
long long x=1234567812345678&&, z
|
||||
dim k(2,2,2) as long long
|
||||
call GetMem8(&x, &z)
|
||||
call GetMem8(&x, &k(1,0,1))
|
||||
print z=x
|
||||
print k(1,0,1)=x
|
||||
checkref(&z)
|
||||
print z=987654321987654321&&
|
||||
sub checkref(&p)
|
||||
print VarPtr(z)=VarPtr(p)
|
||||
call PutMem8(&p, 987654321987654321&&)
|
||||
end sub
|
||||
// Using byref at GemMem8 signature
|
||||
declare GetMem8 lib "msvbvm60.GetMem8" {long &addr, long &retValue}
|
||||
declare PutMem8 lib "msvbvm60.PutMem8" {long &addr, retValue as long long}
|
||||
long long x=1234567812345678&&, z
|
||||
dim k(2,2,2) as long long
|
||||
call GetMem8(&x, &z)
|
||||
call GetMem8(&x, &k(1,0,1))
|
||||
print z=x
|
||||
print k(1,0,1)=x
|
||||
checkref(&z)
|
||||
print z=987654321987654321&&
|
||||
sub checkref(&p)
|
||||
print VarPtr(z)=VarPtr(p)
|
||||
call PutMem8(&p, 987654321987654321&&)
|
||||
end sub
|
||||
}
|
||||
checkVarptr
|
||||
|
|
|
|||
|
|
@ -1,18 +1,11 @@
|
|||
-- 7 Aug 2025
|
||||
include Settings
|
||||
-- 23 Aug 2025
|
||||
include Setting
|
||||
|
||||
say 'ADDRESS OF A VARIABLE'
|
||||
say version
|
||||
say
|
||||
if Pos('Regina',version) > 0 then
|
||||
call Library
|
||||
call Primes 10
|
||||
call SysDumpVariables
|
||||
call DumpVariables
|
||||
exit
|
||||
|
||||
Library:
|
||||
call RxFuncAdd 'SysLoadFuncs','RegUtil','SysLoadFuncs'
|
||||
call SysLoadFuncs
|
||||
return
|
||||
|
||||
include Math
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ a = 1
|
|||
&a
|
||||
|
||||
function f(x) {
|
||||
return(x+1)
|
||||
return(x+1)
|
||||
}
|
||||
|
||||
&f()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
fn main() {
|
||||
var := 42
|
||||
address_of_var := &var // pointer to variable
|
||||
println(&address_of_var) // reference
|
||||
println(*address_of_var) // dereference a reference // 42
|
||||
var := 42
|
||||
address_of_var := &var // pointer to variable
|
||||
println(&address_of_var) // reference
|
||||
println(*address_of_var) // dereference a reference // 42
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue