Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
51
Task/Machine-code/M2000-Interpreter/machine-code-1.m2000
Normal file
51
Task/Machine-code/M2000-Interpreter/machine-code-1.m2000
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
Module Checkit {
|
||||
Buffer DataMem as Long*10
|
||||
Return DataMem, 1:=500 ' second Long
|
||||
Print Eval(DataMem, 1)+5100+5=5605
|
||||
\\ Now we do math executing machine code
|
||||
Buffer Code ExecMem as byte*1024
|
||||
Address=0
|
||||
EmbLong(0xb8, 5100) ' mov eax,5100
|
||||
EmbByteByte(0x83, 0xC0, 5) ' add eax,0x5
|
||||
EmbByteLong(0x3,0x5, DataMem(1)) ' add eax, [DataMem(1)]
|
||||
EmbLong(0xa3, DataMem(0)) ' mov [DataMem(0)], eax
|
||||
\\ split rem to execute xor eax eax (eax=0)
|
||||
Rem : EmbByte(0x31, 0xC0) ' xor eax, eax
|
||||
Ret() ' Return
|
||||
\\
|
||||
Try ok {
|
||||
Execute Code ExecMem, 0
|
||||
}
|
||||
\\If Eax <>0 then we get error, so we read error as Uint()
|
||||
\\ Error read once then change to zero
|
||||
m=Uint(Error)
|
||||
\\ Hex is Print Hexadecimal for unsigned numbers
|
||||
Hex m
|
||||
Print m=5605
|
||||
Print Error=0, ok=False
|
||||
|
||||
Print Eval(DataMem, 0)=5605, Eval(DataMem, 0)
|
||||
\\ sub used as Exit here
|
||||
Sub Ret()
|
||||
Return ExecMem, Address:=0xC3
|
||||
Address++
|
||||
End Sub
|
||||
Sub EmbByteByte()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number
|
||||
Address+=3
|
||||
End Sub
|
||||
Sub EmbByte()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number
|
||||
Address+=2
|
||||
End Sub
|
||||
Sub EmbLong()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number as Long
|
||||
Address+=5
|
||||
End Sub
|
||||
Sub EmbByteLong()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number as Long
|
||||
Address+=6
|
||||
End Sub
|
||||
|
||||
}
|
||||
CheckIt
|
||||
42
Task/Machine-code/M2000-Interpreter/machine-code-2.m2000
Normal file
42
Task/Machine-code/M2000-Interpreter/machine-code-2.m2000
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
Function MyAdd {
|
||||
Buffer DataMem as Long*2
|
||||
Buffer Code ExecMem as byte*32
|
||||
Address=0
|
||||
EmbByte(0x31, 0xC0)
|
||||
EmbByteLong(0x3,0x5, DataMem(0)) ' add eax, [DataMem(0)]
|
||||
EmbByteLong(0x3,0x5, DataMem(1)) ' add eax, [DataMem(1)]
|
||||
EmbLong(0xa3, DataMem(0)) ' mov [DataMem(0)], eax
|
||||
Rem :
|
||||
EmbByte(0x31, 0xC0) ' xor eax, eax
|
||||
Ret() ' Return
|
||||
=lambda ExecMem, DataMem (a as double, b as double)-> {
|
||||
Return DataMem, 0:=a, 1:=b
|
||||
Try ok {
|
||||
Execute Code ExecMem, 0
|
||||
}
|
||||
If not ok then {
|
||||
=Uint(Error)
|
||||
} Else {
|
||||
=Eval(DataMem, 0)
|
||||
}
|
||||
}
|
||||
Sub Ret()
|
||||
Return ExecMem, Address:=0xC3
|
||||
Address++
|
||||
End Sub
|
||||
Sub EmbByte()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number
|
||||
Address+=2
|
||||
End Sub
|
||||
Sub EmbLong()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number as Long
|
||||
Address+=5
|
||||
End Sub
|
||||
Sub EmbByteLong()
|
||||
Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number as Long
|
||||
Address+=6
|
||||
End Sub
|
||||
}
|
||||
\\ Produce a lambda function with machine code inside
|
||||
UnsingedAdd=MyAdd()
|
||||
Print UnsingedAdd(12, 7), UnsingedAdd(500, 100)
|
||||
Loading…
Add table
Add a link
Reference in a new issue