zemu 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b90e15af47b7ba86466e516ad1d1695c391095e43349536679433d4ac056aa7c
4
- data.tar.gz: 1d2b05874a9b666c28c467426017ff12fdd1b25fafaadb71d8fcc44e33c89879
3
+ metadata.gz: 2155a9588f54ef36a46f88d07f6ef7a1cb01a27ef8f8b104a2e1118cddbbdfb6
4
+ data.tar.gz: fd698260726fc03616d6f42c72039e9a04e4a34f77f04e2d3832a604e7c1ec64
5
5
  SHA512:
6
- metadata.gz: 5cb969fc0731adb33864a27eb80314afd926bee8c8a59e3b01164cd0794c764522c3e3171a86d5fccd2babd9273c1067913d8641d8b23e7f41f796670fc0b794
7
- data.tar.gz: b2a7c1edf04f6a47b0a20ec05e00cd3861d028e81e34d460f98c8006d0f50d792f896dfc7d6d59c1c87b5612f6e72c069025105a4a1a71ab22fa8a1917b64f77
6
+ metadata.gz: da88a0cc1dbbd30c9849b400c2fbfea989ff81f500fb51dd0c2fffd8af81a65fca231ddb1937e51205a4b9a7ac0a72ffa435ad0aa8941d9350b4edd42aca9027
7
+ data.tar.gz: 4a430f4fa54f8514d4c41a561e0ca92957d361025ce69ffb77a797a2d12b858b2462543ad5cc0eb8b87cd6d1688fa2c826179bd0255085f9d328de8e8629ab0d
data/lib/zemu/config.rb CHANGED
@@ -241,14 +241,15 @@ module Zemu
241
241
 
242
242
  # Parameters accessible by this configuration object.
243
243
  def params
244
- return %w(name compiler output_directory)
244
+ return %w(name compiler output_directory clock_speed)
245
245
  end
246
246
 
247
247
  # Initial value for parameters of this configuration object.
248
248
  def params_init
249
249
  return {
250
250
  "compiler" => "clang",
251
- "output_directory" => "bin"
251
+ "output_directory" => "bin",
252
+ "clock_speed" => 0
252
253
  }
253
254
  end
254
255
 
data/lib/zemu/instance.rb CHANGED
@@ -38,6 +38,8 @@ module Zemu
38
38
  }
39
39
 
40
40
  def initialize(configuration)
41
+ @clock = configuration.clock_speed
42
+
41
43
  @wrapper = make_wrapper(configuration)
42
44
 
43
45
  @serial = []
@@ -47,6 +49,11 @@ module Zemu
47
49
  @wrapper.zemu_reset(@instance)
48
50
  end
49
51
 
52
+ # Returns the clock speed of this instance in Hz.
53
+ def clock_speed
54
+ return @clock
55
+ end
56
+
50
57
  # Returns a hash containing current values of the emulated
51
58
  # machine's registers. All names are as those given in the Z80
52
59
  # reference manual.
@@ -115,6 +115,9 @@ module Zemu
115
115
  actual_cycles = 0
116
116
 
117
117
  while ((cycles == -1) || (cycles_left > 0))
118
+ # Get time before execution.
119
+ start = Time.now
120
+
118
121
  old_pc = r16("PC")
119
122
 
120
123
  process_serial
@@ -122,6 +125,18 @@ module Zemu
122
125
  cycles_left -= cycles_done
123
126
  actual_cycles += cycles_done
124
127
 
128
+ # Get time after execution.
129
+ ending = Time.now
130
+
131
+ # Get elapsed time and calculate padding time to match clock speed.
132
+ if @instance.clock_speed > 0
133
+ elapsed = ending - start
134
+
135
+ execution_time = actual_cycles * (1/@instance.clock_speed)
136
+ padding = execution_time - elapsed
137
+ sleep(padding) unless padding < 0
138
+ end
139
+
125
140
  # Have we hit a breakpoint or HALT instruction?
126
141
  if @instance.break?
127
142
  log "Hit breakpoint at #{r16("PC")}."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zemu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Valentine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-18 00:00:00.000000000 Z
11
+ date: 2020-02-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Zemu is a gem which allows the user to configure a Z80-based system