diff --git a/README.md b/README.md index c486be7..cbbb12f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ -Yet another Uxn core, this time as an OCaml library. -It has no dependencies, and depends on OCaml >=5.3 for its effect syntax. +# Kestrel + +**Kestrel** is an implementation of the +[Uxn](https://wiki.xxiivv.com/site/uxn.html) virtual machine and +[Varvara](https://wiki.xxiivv.com/site/varvara.html) ecosystem in OCaml. diff --git a/dune-project b/dune-project index 3e8d74b..7c5f210 100644 --- a/dune-project +++ b/dune-project @@ -1,11 +1,11 @@ (lang dune 3.20) -(name uxn) +(name kestrel) (generate_opam_files true) (source - (codeberg lobo/uxn)) + (uri https://git.rhzm.org/lobo/kestrel.git)) (authors "Javier B. Torres ") (maintainers "Javier B. Torres ") @@ -13,7 +13,7 @@ (license LICENSE) (package - (name uxn) + (name kestrel) (synopsis "Uxn emulator library for OCaml") (description "Uxn emulator library for OCaml") (depends (ocaml (>= 5.3)))) diff --git a/exe/dune b/exe/dune index 9d5c776..a6d5204 100644 --- a/exe/dune +++ b/exe/dune @@ -1,4 +1,4 @@ (executable - (public_name uxnemu) - (name uxnemu) - (libraries uxn varvara unix)) + (public_name kestrel) + (name main) + (libraries kestrel kestrel_varvara unix)) diff --git a/exe/uxnemu.ml b/exe/main.ml similarity index 90% rename from exe/uxnemu.ml rename to exe/main.ml index f16026b..2d7b691 100644 --- a/exe/uxnemu.ml +++ b/exe/main.ml @@ -1,4 +1,4 @@ -open Uxn +open Kestrel open Effect.Deep let devices_deo = Hashtbl.create 256 @@ -12,15 +12,15 @@ let register_device (module D : Device.DEVICE) = (fun port -> Hashtbl.add devices_deo port (module D : Device.DEVICE)) D.deo_ports -module System = Varvara.System.Make () -module Console = Varvara.Console.Make () -module Datetime = Varvara.Datetime.Make () +module System = Kestrel_varvara.System.Make () +module Console = Kestrel_varvara.Console.Make () +module Datetime = Kestrel_varvara.Datetime.Make () -module File_a = Varvara.File.Make (struct +module File_a = Kestrel_varvara.File.Make (struct let start = 0xa0 end) -module File_b = Varvara.File.Make (struct +module File_b = Kestrel_varvara.File.Make (struct let start = 0xb0 end) @@ -53,7 +53,7 @@ let run m pc = let main () = if Array.length Sys.argv < 2 then ( - Printf.eprintf "usage: uxnemu file.rom ...\n"; + Printf.eprintf "usage: kestrel file.rom ...\n"; exit 1); register_device (module System : Device.DEVICE); diff --git a/uxn.opam b/kestrel.opam similarity index 79% rename from uxn.opam rename to kestrel.opam index 9fa8c71..53c852d 100644 --- a/uxn.opam +++ b/kestrel.opam @@ -5,8 +5,6 @@ description: "Uxn emulator library for OCaml" maintainer: ["Javier B. Torres "] authors: ["Javier B. Torres "] license: "LICENSE" -homepage: "https://codeberg.org/lobo/uxn" -bug-reports: "https://codeberg.org/lobo/uxn/issues" depends: [ "dune" {>= "3.20"} "ocaml" {>= "5.3"} @@ -26,5 +24,5 @@ build: [ "@doc" {with-doc} ] ] -dev-repo: "git+https://codeberg.org/lobo/uxn.git" +dev-repo: "https://git.rhzm.org/lobo/kestrel.git" x-maintenance-intent: ["(latest)"] diff --git a/lib/Varvara/dune b/lib/Varvara/dune deleted file mode 100644 index 600c2de..0000000 --- a/lib/Varvara/dune +++ /dev/null @@ -1,3 +0,0 @@ -(library - (name varvara) - (libraries uxn unix)) diff --git a/lib/dune b/lib/dune deleted file mode 100644 index 03870e8..0000000 --- a/lib/dune +++ /dev/null @@ -1,3 +0,0 @@ -(library - (name uxn) - (libraries unix)) diff --git a/lib/Device.ml b/lib/kestrel/Device.ml similarity index 100% rename from lib/Device.ml rename to lib/kestrel/Device.ml diff --git a/lib/Instr.ml b/lib/kestrel/Instr.ml similarity index 100% rename from lib/Instr.ml rename to lib/kestrel/Instr.ml diff --git a/lib/Instr.mli b/lib/kestrel/Instr.mli similarity index 100% rename from lib/Instr.mli rename to lib/kestrel/Instr.mli diff --git a/lib/Machine.ml b/lib/kestrel/Machine.ml similarity index 100% rename from lib/Machine.ml rename to lib/kestrel/Machine.ml diff --git a/lib/Machine.mli b/lib/kestrel/Machine.mli similarity index 100% rename from lib/Machine.mli rename to lib/kestrel/Machine.mli diff --git a/lib/Util.ml b/lib/kestrel/Util.ml similarity index 100% rename from lib/Util.ml rename to lib/kestrel/Util.ml diff --git a/lib/Util.mli b/lib/kestrel/Util.mli similarity index 100% rename from lib/Util.mli rename to lib/kestrel/Util.mli diff --git a/lib/kestrel/dune b/lib/kestrel/dune new file mode 100644 index 0000000..cbd2f44 --- /dev/null +++ b/lib/kestrel/dune @@ -0,0 +1,2 @@ +(library + (name kestrel)) diff --git a/lib/Varvara/Console.ml b/lib/kestrel_varvara/Console.ml similarity index 70% rename from lib/Varvara/Console.ml rename to lib/kestrel_varvara/Console.ml index b782f97..c22beab 100644 --- a/lib/Varvara/Console.ml +++ b/lib/kestrel_varvara/Console.ml @@ -1,11 +1,11 @@ type state = { mutable console_vector : int } -module Make () : Uxn.Device.DEVICE with type state = state = struct +module Make () : Kestrel.Device.DEVICE with type state = state = struct type nonrec state = state let state = { console_vector = 0 } - let dei_ports = Uxn.Device.Int_set.empty - let deo_ports = Uxn.Device.Int_set.of_list [ 0x10; 0x18; 0x19 ] + let dei_ports = Kestrel.Device.Int_set.empty + let deo_ports = Kestrel.Device.Int_set.of_list [ 0x10; 0x18; 0x19 ] let dei _ _ = assert false let dei2 _ _ = assert false diff --git a/lib/Varvara/Datetime.ml b/lib/kestrel_varvara/Datetime.ml similarity index 82% rename from lib/Varvara/Datetime.ml rename to lib/kestrel_varvara/Datetime.ml index 3d43a40..9bd42b8 100644 --- a/lib/Varvara/Datetime.ml +++ b/lib/kestrel_varvara/Datetime.ml @@ -1,13 +1,13 @@ -module Make () : Uxn.Device.DEVICE with type state = unit = struct +module Make () : Kestrel.Device.DEVICE with type state = unit = struct type state = unit let state = () let dei_ports = - Uxn.Device.Int_set.of_list + Kestrel.Device.Int_set.of_list [ 0xc0; 0xc2; 0xc3; 0xc4; 0xc5; 0xc6; 0xc7; 0xc8; 0xca ] - let deo_ports = Uxn.Device.Int_set.empty + let deo_ports = Kestrel.Device.Int_set.empty let dei _ port = let now = Unix.time () in diff --git a/lib/Varvara/File.ml b/lib/kestrel_varvara/File.ml similarity index 97% rename from lib/Varvara/File.ml rename to lib/kestrel_varvara/File.ml index fcbc78a..fe0b719 100644 --- a/lib/Varvara/File.ml +++ b/lib/kestrel_varvara/File.ml @@ -15,14 +15,15 @@ module type ADDR = sig val start : int end -module Make (Addr : ADDR) : Uxn.Device.DEVICE with type state = state = struct +module Make (Addr : ADDR) : Kestrel.Device.DEVICE with type state = state = +struct type nonrec state = state let state = { filepath = None; state = Idle; length = 0 } - let dei_ports = Uxn.Device.Int_set.empty + let dei_ports = Kestrel.Device.Int_set.empty let deo_ports = - Uxn.Device.Int_set.of_list + Kestrel.Device.Int_set.of_list [ Addr.start + 0x0a; Addr.start + 0x04; @@ -213,7 +214,7 @@ module Make (Addr : ADDR) : Uxn.Device.DEVICE with type state = state = struct let dei2 _ _ = assert false let deo mach port value = - let open Uxn in + let open Kestrel in let ram = Machine.ram mach in let dev = Machine.dev mach in let with_success result = file_success dev (Addr.start + 0x02) result in diff --git a/lib/Varvara/System.ml b/lib/kestrel_varvara/System.ml similarity index 92% rename from lib/Varvara/System.ml rename to lib/kestrel_varvara/System.ml index 8ae73a8..073fbad 100644 --- a/lib/Varvara/System.ml +++ b/lib/kestrel_varvara/System.ml @@ -1,15 +1,17 @@ -open Uxn +open Kestrel type state = { banks : bytes array } -module Make () : Uxn.Device.DEVICE with type state = state = struct +module Make () : Kestrel.Device.DEVICE with type state = state = struct type nonrec state = state let state = { banks = Array.init 15 (fun _ -> Bytes.create 65536) } - let dei_ports = Uxn.Device.Int_set.of_list [ 0x04; 0x05 ] - let deo_ports = Uxn.Device.Int_set.of_list [ 0x02; 0x04; 0x05; 0x0e; 0x0f ] + let dei_ports = Kestrel.Device.Int_set.of_list [ 0x04; 0x05 ] - let print_stack ~name (Machine.Stack { data; sp }) = + let deo_ports = + Kestrel.Device.Int_set.of_list [ 0x02; 0x04; 0x05; 0x0e; 0x0f ] + + let print_stack ~name (Kestrel.Machine.Stack { data; sp }) = Printf.eprintf "%s " name; for i = sp - 8 to sp - 1 do Printf.eprintf "%02x%s" diff --git a/lib/kestrel_varvara/dune b/lib/kestrel_varvara/dune new file mode 100644 index 0000000..a0457e5 --- /dev/null +++ b/lib/kestrel_varvara/dune @@ -0,0 +1,3 @@ +(library + (name kestrel_varvara) + (libraries kestrel unix))