move File device to new module system
This commit is contained in:
parent
5769f6d470
commit
b71cf4343e
4 changed files with 291 additions and 226 deletions
|
|
@ -5,7 +5,18 @@ let trace = Option.is_some (Sys.getenv_opt "UXNEMU_DEBUG")
|
|||
|
||||
module System = Varvara.System.Make ()
|
||||
module Console = Varvara.Console.Make ()
|
||||
module Devices = Uxn.Device.Compose (System) (Console)
|
||||
|
||||
module File =
|
||||
Uxn.Device.Compose
|
||||
(Varvara.File.Make (struct
|
||||
let start_addr = 0xa0
|
||||
end))
|
||||
(Varvara.File.Make (struct
|
||||
let start_addr = 0xb0
|
||||
end))
|
||||
|
||||
module Devices =
|
||||
Uxn.Device.Compose (Uxn.Device.Compose (System) (Console)) (File)
|
||||
|
||||
let print_stack ~name (Machine.Stack { data; sp }) =
|
||||
Fmt.epr "%s: @[%a@]@." name
|
||||
|
|
@ -14,7 +25,6 @@ let print_stack ~name (Machine.Stack { data; sp }) =
|
|||
|
||||
let run m pc =
|
||||
let dev = Machine.dev m in
|
||||
let ram = Machine.ram m in
|
||||
try Machine.dispatch ~trace m pc with
|
||||
| effect Machine.Trace (pc, instr, args), k ->
|
||||
if trace then begin
|
||||
|
|
@ -34,62 +44,12 @@ let run m pc =
|
|||
| Some v -> continue k v
|
||||
| None -> continue k (Util.get_uint16_wrap dev port))
|
||||
| effect Machine.DEO (port, value), k ->
|
||||
(match port with
|
||||
| _ when Devices.can_handle port -> Devices.deo m port value
|
||||
| 0xaa -> Varvara.File.file_lengths.(0) <- Bytes.get_uint16_be dev 0xaa
|
||||
| 0xa4 ->
|
||||
let addr = Bytes.get_uint16_be dev 0xa4 in
|
||||
let len = Varvara.File.file_lengths.(0) in
|
||||
let result = Varvara.File.file_stat ram 0 addr len in
|
||||
Varvara.File.file_success dev 0xa2 result
|
||||
| 0xa6 ->
|
||||
let result = Varvara.File.file_delete 0 in
|
||||
Varvara.File.file_success dev 0xa2 (if result = 0 then 1 else 0)
|
||||
| 0xa8 ->
|
||||
let addr = Bytes.get_uint16_be dev 0xa8 in
|
||||
let result = Varvara.File.file_init ram 0 addr in
|
||||
Varvara.File.file_success dev 0xa2 result
|
||||
| 0xac ->
|
||||
let addr = Bytes.get_uint16_be dev 0xac in
|
||||
let len = Varvara.File.file_lengths.(0) in
|
||||
let result = Varvara.File.file_read ram 0 addr len in
|
||||
Varvara.File.file_success dev 0xa2 result
|
||||
| 0xae ->
|
||||
let addr = Bytes.get_uint16_be dev 0xae in
|
||||
let len = Varvara.File.file_lengths.(0) in
|
||||
let append = Bytes.get_uint8 dev 0xa7 in
|
||||
let result = Varvara.File.file_write ram 0 addr len append in
|
||||
Varvara.File.file_success dev 0xa2 result
|
||||
| 0xba -> Varvara.File.file_lengths.(1) <- Bytes.get_uint16_be dev 0xba
|
||||
| 0xb4 ->
|
||||
let addr = Bytes.get_uint16_be dev 0xb4 in
|
||||
let len = Varvara.File.file_lengths.(1) in
|
||||
let result = Varvara.File.file_stat ram 1 addr len in
|
||||
Varvara.File.file_success dev 0xb2 result
|
||||
| 0xb6 ->
|
||||
let result = Varvara.File.file_delete 1 in
|
||||
Varvara.File.file_success dev 0xb2 (if result = 0 then 1 else 0)
|
||||
| 0xb8 ->
|
||||
let addr = Bytes.get_uint16_be dev 0xb8 in
|
||||
let result = Varvara.File.file_init ram 1 addr in
|
||||
Varvara.File.file_success dev 0xb2 result
|
||||
| 0xbc ->
|
||||
let addr = Bytes.get_uint16_be dev 0xbc in
|
||||
let len = Varvara.File.file_lengths.(1) in
|
||||
let result = Varvara.File.file_read ram 1 addr len in
|
||||
Varvara.File.file_success dev 0xb2 result
|
||||
| 0xbe ->
|
||||
let addr = Bytes.get_uint16_be dev 0xbe in
|
||||
let len = Varvara.File.file_lengths.(1) in
|
||||
let append = Bytes.get_uint8 dev 0xb7 in
|
||||
let result = Varvara.File.file_write ram 1 addr len append in
|
||||
Varvara.File.file_success dev 0xb2 result
|
||||
| _ -> ());
|
||||
if Devices.can_handle port then Devices.deo m port value;
|
||||
continue k ()
|
||||
|
||||
let main () =
|
||||
if Array.length Sys.argv < 2 then (
|
||||
Fmt.epr "usage: uxnemu file.rom\n";
|
||||
Fmt.epr "usage: uxnemu file.rom ...\n";
|
||||
exit 1);
|
||||
|
||||
let code =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue