Update to recent 2022 version, adjusted for newer compiler version
This commit is contained in:
parent
5ff8534b96
commit
93555b6307
3 changed files with 103 additions and 8 deletions
BIN
test.byc
Normal file
BIN
test.byc
Normal file
Binary file not shown.
51
vm.pb
51
vm.pb
|
@ -12,8 +12,9 @@ EndStructure
|
||||||
Procedure writeblock (fid, *opco.opi)
|
Procedure writeblock (fid, *opco.opi)
|
||||||
; used by compile to write compiled code to file
|
; used by compile to write compiled code to file
|
||||||
WriteByte(fid, *opco\code)
|
WriteByte(fid, *opco\code)
|
||||||
WriteLong(fid, Len(*opco\args))
|
WriteLong(fid, MemorySize(@*opco\args));Len(*opco\args))
|
||||||
WriteData(fid, @*opco\args, Len(*opco\args))
|
WriteData(fid, @*opco\args, MemorySize(@*opco\args));Len(*opco\args)*2) using memorysize to make it work over a decade later because unicode
|
||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
Procedure readblock (fid, *opci.opi)
|
Procedure readblock (fid, *opci.opi)
|
||||||
|
@ -21,35 +22,69 @@ Procedure readblock (fid, *opci.opi)
|
||||||
*opci\code = ReadByte(fid)
|
*opci\code = ReadByte(fid)
|
||||||
*opci\args = Space(ReadLong(fid))
|
*opci\args = Space(ReadLong(fid))
|
||||||
ReadData(fid, @*opci\args, Len(*opci\args))
|
ReadData(fid, @*opci\args, Len(*opci\args))
|
||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
;for demo purposes we hard wire the code
|
;for demo purposes we hard wire the code
|
||||||
|
|
||||||
opcobj.opi\code = $01
|
opcobj.opi\code = $01
|
||||||
opcobj.opi\args = "Hi world"
|
opcobj.opi\args = "Bacon ipsum dolor amet beef kevin turducken pork loin, jerky short loin sirloin alcatra doner."
|
||||||
|
|
||||||
; now write bytecode to file
|
; now write bytecode to file
|
||||||
|
|
||||||
OpenFile(0,"test.byc")
|
OpenFile(0,"test.byc")
|
||||||
|
|
||||||
|
Debug("Before write " + Loc(0))
|
||||||
|
|
||||||
writeblock(0, opcobj)
|
writeblock(0, opcobj)
|
||||||
|
Debug("After write " + Loc(0))
|
||||||
|
|
||||||
|
opcobjj.opi\code = $02
|
||||||
|
opcobjj.opi\args = "Hamburger pork chop pork, t-bone buffalo shank biltong fatback ham. Tail pork porchetta cupim, tenderloin jowl bacon bresaola alcatra strip steak andouille short ribs flank spare ribs chislic."
|
||||||
|
|
||||||
|
writeblock(0, opcobjj)
|
||||||
|
|
||||||
|
Debug("After write 2 " + Loc(0))
|
||||||
|
|
||||||
CloseFile(0)
|
CloseFile(0)
|
||||||
|
|
||||||
; now read
|
; now read
|
||||||
|
|
||||||
OpenFile(1,"test.byc")
|
OpenFile(1,"test.byc")
|
||||||
|
|
||||||
|
Debug("Before read " + Loc(1))
|
||||||
|
|
||||||
readblock(1, opcoobj.opi)
|
readblock(1, opcoobj.opi)
|
||||||
|
|
||||||
|
Debug("After read " + Loc(1))
|
||||||
|
|
||||||
|
readblock(1, opcoobjj.opi)
|
||||||
|
|
||||||
|
Debug("After read2 " + Loc(1))
|
||||||
|
|
||||||
CloseFile(1)
|
CloseFile(1)
|
||||||
|
|
||||||
;run
|
;run
|
||||||
|
|
||||||
Select opcoobj\code
|
Select opcoobj\code
|
||||||
|
|
||||||
Case $01 : MessageRequester("ouput",opcoobj\args)
|
Case $01 : MessageRequester("ouput",opcoobj\args)
|
||||||
|
|
||||||
EndSelect
|
EndSelect
|
||||||
|
|
||||||
; IDE Options = PureBasic 4.61 (Windows - x86)
|
;Debug(opcoobjj\args)
|
||||||
; CursorPosition = 3
|
|
||||||
|
Select opcoobjj\code
|
||||||
|
|
||||||
|
Case $02: MessageRequester("ouput",opcoobjj\args)
|
||||||
|
|
||||||
|
Default
|
||||||
|
MessageRequester("ouput",opcoobjj\args)
|
||||||
|
|
||||||
|
EndSelect
|
||||||
|
; IDE Options = PureBasic 6.00 LTS (Linux - x64)
|
||||||
|
; CursorPosition = 42
|
||||||
|
; FirstLine = 11
|
||||||
; Folding = -
|
; Folding = -
|
||||||
; EnableXP
|
; EnableXP
|
||||||
; Executable = ..\Desktop\vm.exe
|
; Executable = vm
|
60
vm2.pb
Normal file
60
vm2.pb
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
; vm
|
||||||
|
|
||||||
|
Structure opi
|
||||||
|
code.l
|
||||||
|
args.s
|
||||||
|
dat.s
|
||||||
|
EndStructure
|
||||||
|
|
||||||
|
; In theory this is a byte code interpreter
|
||||||
|
; Also mad science and may not work
|
||||||
|
|
||||||
|
|
||||||
|
Procedure writeblock (fid, *opco.opi)
|
||||||
|
; used by compile to write compiled code to file
|
||||||
|
WriteByte(fid, *opco\code)
|
||||||
|
WriteLong(fid, Len(*opco\args))
|
||||||
|
WriteData(fid, @*opco\args, MemorySize(@*opco\args))
|
||||||
|
WriteLong(fid, Len(*opco\dat))
|
||||||
|
WriteData(fid, @*opco\dat, MemorySize(@*opco\dat))
|
||||||
|
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
Procedure readblock (fid, *opci.opi)
|
||||||
|
; should not need to be explained
|
||||||
|
*opci\code = ReadByte(fid)
|
||||||
|
*opci\args = Space(ReadLong(fid))
|
||||||
|
ReadData(fid, @*opci\args, MemorySize(@*opci\args))
|
||||||
|
*opci\dat = Space(ReadLong(fid))
|
||||||
|
ReadData(fid, @*opci\dat, MemorySize(@*opci\dat))
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
;for demo purposes we hard wire the code
|
||||||
|
|
||||||
|
opcobj.opi\code = $01
|
||||||
|
opcobj.opi\args = "Hi world"
|
||||||
|
opcobj.opi\dat = "Bye world!"
|
||||||
|
|
||||||
|
; now write bytecode to file
|
||||||
|
|
||||||
|
OpenFile(0,"test.byc")
|
||||||
|
writeblock(0, opcobj)
|
||||||
|
CloseFile(0)
|
||||||
|
|
||||||
|
; now read
|
||||||
|
|
||||||
|
OpenFile(1,"test.byc")
|
||||||
|
readblock(1, opcoobj.opi)
|
||||||
|
CloseFile(1)
|
||||||
|
|
||||||
|
;run
|
||||||
|
|
||||||
|
Select opcoobj\code
|
||||||
|
|
||||||
|
Case $01 : MessageRequester("ouput",opcoobj\dat)
|
||||||
|
|
||||||
|
EndSelect
|
||||||
|
; IDE Options = PureBasic 6.00 LTS (Linux - x64)
|
||||||
|
; CursorPosition = 35
|
||||||
|
; Folding = -
|
||||||
|
; EnableXP
|
Loading…
Add table
Add a link
Reference in a new issue