diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..7ed0e72 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "rogue"] + path = rogue + url = https://gitlab.com/slederer/ecl-rogue-m.git diff --git a/examples/pictviewer.pas b/examples/pictviewer.pas index 6c79a5c..6fffe95 100644 --- a/examples/pictviewer.pas +++ b/examples/pictviewer.pas @@ -40,6 +40,4 @@ begin loadPalette(pic); loadPic(pic); - write('Press any key...'); - read(ch); end. diff --git a/pcomp/Makefile b/pcomp/Makefile index 3a6d10b..5234607 100644 --- a/pcomp/Makefile +++ b/pcomp/Makefile @@ -33,6 +33,7 @@ nativeprogs: nativecomp $(PCOMP) ../progs/xfer.pas $(SASM) ../lib/rommon.s $(SASM) -A ../lib/rommon.s ../lib/rom.mem + examples: nativecomp $(PCOMP) ../tests/readtest.pas $(PCOMP) ../tests/readchartest.pas @@ -41,6 +42,7 @@ examples: nativecomp -$(PCOMP) ../examples/chase.pas $(PCOMP) ../tests/cchangetest.pas $(PCOMP) ../tests/tree.pas - + -$(MAKE) -C ../rogue -f Makefile.tridoracpu + clean: rm -f pcomp sasm sdis libgen lsymgen *.o *.s diff --git a/pcomp/make.bat b/pcomp/make.bat index 41275cc..7f9bc0a 100644 --- a/pcomp/make.bat +++ b/pcomp/make.bat @@ -39,3 +39,11 @@ py pcomp.py ..\tests\test133.pas py pcomp.py ..\examples\chase.pas py pcomp.py ..\tests\cchangetest.pas py pcomp.py ..\tests\tree.pas + +if not exist ..\rogue\rogue.pas exit /b + +cd ..\rogue +..\pcomp\pcomp rogue.pas +..\pcomp\sasm rogue.s + +cd ..\pcomp diff --git a/rogue b/rogue new file mode 160000 index 0000000..412f961 --- /dev/null +++ b/rogue @@ -0,0 +1 @@ +Subproject commit 412f961abab7bf769d2dc7eadbc530a0285503ee diff --git a/tests/arraytest.pas b/tests/arraytest.pas new file mode 100644 index 0000000..6f28276 --- /dev/null +++ b/tests/arraytest.pas @@ -0,0 +1,8 @@ +program arraytest; +var arr:array[-5..5] of integer; + var s:string[5]; +begin + arr[-5] := 10; + arr[5] := 11; + writeln(arr[-5], ' ', arr[5]); +end. diff --git a/tests/nestedtest.pas b/tests/nestedtest.pas new file mode 100644 index 0000000..8df6ebd --- /dev/null +++ b/tests/nestedtest.pas @@ -0,0 +1,49 @@ +program NestedTest; +var g:integer; + +procedure first; +var f:integer; + + procedure second; + var s:integer; + + procedure third1; + var t1:integer; + begin + t1 := 310; + s := 31; + writeln('t1:', t1); + end; + + procedure third2; + var t2:integer; + begin + t2 := 320; + s := 32; + writeln('t2:', t2); + if g <> 21 then + begin + g := 21; + second; + end; + end; + + begin + f := 2; + writeln('g:',g); + third1; + writeln('g:', g); + third2; + writeln('s:',s); + end; + +begin + second; + writeln('f:', f); +end; + +begin + g := 0; + first; + writeln('g:', g); +end. diff --git a/tests/settest2.pas b/tests/settest2.pas new file mode 100644 index 0000000..c96826c --- /dev/null +++ b/tests/settest2.pas @@ -0,0 +1,20 @@ +program settest2; +type weekday = (Mon,Tue,Wed,Thu,Fri,Sat,Sun); + days = set of weekday; + +var s:days; + d:weekday; + +begin + s := [Sat,Sun]; (* set literal *) + + d := Sun; + if d in [Sat,Sun] then (* array literal *) + writeln('weekend'); + + if d in s then + writeln('also weekend'); + + d := Mon; + s := s + [d]; +end. diff --git a/utils/tdrimg.py b/utils/tdrimg.py index 6b6f0a4..14cfe47 100644 --- a/utils/tdrimg.py +++ b/utils/tdrimg.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 -# Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details +# Copyright 2021-2025 Sebastian Lederer. See the file LICENSE.md for details import struct import sys @@ -372,6 +372,31 @@ def writetoimg(img, pathname, infilepath): putfile(infilepath, filename, img, vol, vol.startBlock, slotno) +def initfs(f, partno): + part = getpartslot(f, partno) + partstart = part.startBlock + dir_slots = part.dirSize + extent_size = part.extentSize + slots_per_extent = extent_size // 64 + reserved_slots = dir_slots // slots_per_extent + + print() + print("Partition {} at {}".format(part.name, part.startBlock)) + + print("creating",reserved_slots, "reserved directory slots") + for a in range(0,reserved_slots): + d = createdirslot("DIR", SlotReserved, 0, 0, 0, 0, 0) + putdirslot(f, partstart, a, d) + + print("creating", dir_slots - reserved_slots, "free slots") + + for a in range(reserved_slots, dir_slots): + d = createdirslot("", SlotFree, 0, 0, 0, 0, 0) + putdirslot(f, partstart, a, d) + + return (part, partstart, reserved_slots) + + def create_image_with_stuff(imgfile): bootimage = "../lib/coreloader.prog" dir_slots = 256 @@ -381,22 +406,27 @@ def create_image_with_stuff(imgfile): f = open(imgfile,"w+b") - b = createpart("PHYS", PartPhysical, 0, 12288, 4096, 0, 0) + b = createpart("PHYS", PartPhysical, 0, 16384, 4096, 0, 0) #print(b) f.write(b) with open(bootimage, "rb") as bf: bootdata = bf.read() bootBlocks = len(bootdata) // 512 + 1 + b = createpart("BOOT", PartBoot, 16, 112, 0, 0, bootBlocks) f.write(b) + b = createpart("Testvolume 1", PartEnabled, 128, 3968, 8192, 248) f.write(b) b = createpart("SYSTEM", PartEnabled, 4096, 4096, 8192, 256) f.write(b) - b = createpart("Examples", PartEnabled + PartLast, 8192, 4096, 8192, 256) + b = createpart("Examples", PartEnabled, 8192, 4096, 8192, 256) + f.write(b) + + b = createpart("Rogue", PartEnabled + PartLast, 12288, 4096, 8192, 256) f.write(b) part = getpartslot(f, 2) @@ -572,7 +602,6 @@ def create_image_with_stuff(imgfile): slotnr = putfile("../examples/lines.pas", None , f, part, partstart, slotnr) slotnr = putfile("../examples/pictviewer.pas", None , f, part, partstart, slotnr) - # slotnr = putfile("viewpict.prog", None , f, part, partstart, slotnr) slotnr = putfile("../examples/ara.pict", "ara.pict" , f, part, partstart, slotnr) slotnr = putfile("../examples/shinkansen.pict", "shinkansen.pict" , f, part, partstart, slotnr) slotnr = putfile("../examples/snow_leopard.pict", "snow_leopard.pict" , f, part, partstart, slotnr) @@ -581,6 +610,13 @@ def create_image_with_stuff(imgfile): listdir(f, part) + part, partstart, slotnr = initfs(f, 5) + slotnr = putfile("../rogue/rogue.init", None, f, part, partstart, slotnr) + slotnr = putfile("../rogue/rogue.message", None, f, part, partstart, slotnr) + slotnr = putfile("../rogue/rogue.prog", None, f, part, partstart, slotnr) + + listdir(f, part) + write_bootimage(f, 16, bootdata) f.close()