reorganization and project rename
This commit is contained in:
parent
35b0a4f6dd
commit
def41120c1
20 changed files with 42 additions and 39 deletions
|
|
@ -1,2 +1,5 @@
|
||||||
Yet another Uxn core, this time as an OCaml library.
|
# Kestrel
|
||||||
It has no dependencies, and depends on OCaml >=5.3 for its effect syntax.
|
|
||||||
|
**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.
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
(lang dune 3.20)
|
(lang dune 3.20)
|
||||||
|
|
||||||
(name uxn)
|
(name kestrel)
|
||||||
|
|
||||||
(generate_opam_files true)
|
(generate_opam_files true)
|
||||||
|
|
||||||
(source
|
(source
|
||||||
(codeberg lobo/uxn))
|
(uri https://git.rhzm.org/lobo/kestrel.git))
|
||||||
|
|
||||||
(authors "Javier B. Torres <lobo@quiltro.org>")
|
(authors "Javier B. Torres <lobo@quiltro.org>")
|
||||||
(maintainers "Javier B. Torres <lobo@quiltro.org>")
|
(maintainers "Javier B. Torres <lobo@quiltro.org>")
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
(license LICENSE)
|
(license LICENSE)
|
||||||
|
|
||||||
(package
|
(package
|
||||||
(name uxn)
|
(name kestrel)
|
||||||
(synopsis "Uxn emulator library for OCaml")
|
(synopsis "Uxn emulator library for OCaml")
|
||||||
(description "Uxn emulator library for OCaml")
|
(description "Uxn emulator library for OCaml")
|
||||||
(depends (ocaml (>= 5.3))))
|
(depends (ocaml (>= 5.3))))
|
||||||
|
|
|
||||||
6
exe/dune
6
exe/dune
|
|
@ -1,4 +1,4 @@
|
||||||
(executable
|
(executable
|
||||||
(public_name uxnemu)
|
(public_name kestrel)
|
||||||
(name uxnemu)
|
(name main)
|
||||||
(libraries uxn varvara unix))
|
(libraries kestrel kestrel_varvara unix))
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
open Uxn
|
open Kestrel
|
||||||
open Effect.Deep
|
open Effect.Deep
|
||||||
|
|
||||||
let devices_deo = Hashtbl.create 256
|
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))
|
(fun port -> Hashtbl.add devices_deo port (module D : Device.DEVICE))
|
||||||
D.deo_ports
|
D.deo_ports
|
||||||
|
|
||||||
module System = Varvara.System.Make ()
|
module System = Kestrel_varvara.System.Make ()
|
||||||
module Console = Varvara.Console.Make ()
|
module Console = Kestrel_varvara.Console.Make ()
|
||||||
module Datetime = Varvara.Datetime.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
|
let start = 0xa0
|
||||||
end)
|
end)
|
||||||
|
|
||||||
module File_b = Varvara.File.Make (struct
|
module File_b = Kestrel_varvara.File.Make (struct
|
||||||
let start = 0xb0
|
let start = 0xb0
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ let run m pc =
|
||||||
|
|
||||||
let main () =
|
let main () =
|
||||||
if Array.length Sys.argv < 2 then (
|
if Array.length Sys.argv < 2 then (
|
||||||
Printf.eprintf "usage: uxnemu file.rom ...\n";
|
Printf.eprintf "usage: kestrel file.rom ...\n";
|
||||||
exit 1);
|
exit 1);
|
||||||
|
|
||||||
register_device (module System : Device.DEVICE);
|
register_device (module System : Device.DEVICE);
|
||||||
|
|
@ -5,8 +5,6 @@ description: "Uxn emulator library for OCaml"
|
||||||
maintainer: ["Javier B. Torres <lobo@quiltro.org>"]
|
maintainer: ["Javier B. Torres <lobo@quiltro.org>"]
|
||||||
authors: ["Javier B. Torres <lobo@quiltro.org>"]
|
authors: ["Javier B. Torres <lobo@quiltro.org>"]
|
||||||
license: "LICENSE"
|
license: "LICENSE"
|
||||||
homepage: "https://codeberg.org/lobo/uxn"
|
|
||||||
bug-reports: "https://codeberg.org/lobo/uxn/issues"
|
|
||||||
depends: [
|
depends: [
|
||||||
"dune" {>= "3.20"}
|
"dune" {>= "3.20"}
|
||||||
"ocaml" {>= "5.3"}
|
"ocaml" {>= "5.3"}
|
||||||
|
|
@ -26,5 +24,5 @@ build: [
|
||||||
"@doc" {with-doc}
|
"@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)"]
|
x-maintenance-intent: ["(latest)"]
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
(library
|
|
||||||
(name varvara)
|
|
||||||
(libraries uxn unix))
|
|
||||||
3
lib/dune
3
lib/dune
|
|
@ -1,3 +0,0 @@
|
||||||
(library
|
|
||||||
(name uxn)
|
|
||||||
(libraries unix))
|
|
||||||
2
lib/kestrel/dune
Normal file
2
lib/kestrel/dune
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
(library
|
||||||
|
(name kestrel))
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
type state = { mutable console_vector : int }
|
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
|
type nonrec state = state
|
||||||
|
|
||||||
let state = { console_vector = 0 }
|
let state = { console_vector = 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 [ 0x10; 0x18; 0x19 ]
|
let deo_ports = Kestrel.Device.Int_set.of_list [ 0x10; 0x18; 0x19 ]
|
||||||
let dei _ _ = assert false
|
let dei _ _ = assert false
|
||||||
let dei2 _ _ = assert false
|
let dei2 _ _ = assert false
|
||||||
|
|
||||||
|
|
@ -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
|
type state = unit
|
||||||
|
|
||||||
let state = ()
|
let state = ()
|
||||||
|
|
||||||
let dei_ports =
|
let dei_ports =
|
||||||
Uxn.Device.Int_set.of_list
|
Kestrel.Device.Int_set.of_list
|
||||||
[ 0xc0; 0xc2; 0xc3; 0xc4; 0xc5; 0xc6; 0xc7; 0xc8; 0xca ]
|
[ 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 dei _ port =
|
||||||
let now = Unix.time () in
|
let now = Unix.time () in
|
||||||
|
|
@ -15,14 +15,15 @@ module type ADDR = sig
|
||||||
val start : int
|
val start : int
|
||||||
end
|
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
|
type nonrec state = state
|
||||||
|
|
||||||
let state = { filepath = None; state = Idle; length = 0 }
|
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 =
|
let deo_ports =
|
||||||
Uxn.Device.Int_set.of_list
|
Kestrel.Device.Int_set.of_list
|
||||||
[
|
[
|
||||||
Addr.start + 0x0a;
|
Addr.start + 0x0a;
|
||||||
Addr.start + 0x04;
|
Addr.start + 0x04;
|
||||||
|
|
@ -213,7 +214,7 @@ module Make (Addr : ADDR) : Uxn.Device.DEVICE with type state = state = struct
|
||||||
let dei2 _ _ = assert false
|
let dei2 _ _ = assert false
|
||||||
|
|
||||||
let deo mach port value =
|
let deo mach port value =
|
||||||
let open Uxn in
|
let open Kestrel in
|
||||||
let ram = Machine.ram mach in
|
let ram = Machine.ram mach in
|
||||||
let dev = Machine.dev mach in
|
let dev = Machine.dev mach in
|
||||||
let with_success result = file_success dev (Addr.start + 0x02) result in
|
let with_success result = file_success dev (Addr.start + 0x02) result in
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
open Uxn
|
open Kestrel
|
||||||
|
|
||||||
type state = { banks : bytes array }
|
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
|
type nonrec state = state
|
||||||
|
|
||||||
let state = { banks = Array.init 15 (fun _ -> Bytes.create 65536) }
|
let state = { banks = Array.init 15 (fun _ -> Bytes.create 65536) }
|
||||||
let dei_ports = Uxn.Device.Int_set.of_list [ 0x04; 0x05 ]
|
let dei_ports = Kestrel.Device.Int_set.of_list [ 0x04; 0x05 ]
|
||||||
let deo_ports = Uxn.Device.Int_set.of_list [ 0x02; 0x04; 0x05; 0x0e; 0x0f ]
|
|
||||||
|
|
||||||
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;
|
Printf.eprintf "%s " name;
|
||||||
for i = sp - 8 to sp - 1 do
|
for i = sp - 8 to sp - 1 do
|
||||||
Printf.eprintf "%02x%s"
|
Printf.eprintf "%02x%s"
|
||||||
3
lib/kestrel_varvara/dune
Normal file
3
lib/kestrel_varvara/dune
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
(library
|
||||||
|
(name kestrel_varvara)
|
||||||
|
(libraries kestrel unix))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue