3
3
#
4
4
5
5
import sys
6
+
6
7
from musashi import m68k
7
8
from register import Register
9
+ from trace import Trace
8
10
9
11
10
12
class Device (object ):
@@ -17,13 +19,15 @@ class Device(object):
17
19
__emu = None
18
20
__root_device = None
19
21
__debug = False
20
- __trace_io = False
22
+ __trace = None
21
23
22
24
__console_output_handler = None
23
25
__console_input_handler = None
24
26
25
27
def __init__ (self , args , name , required_options = None , ** options ):
26
28
self .name = name
29
+ if Device .__trace is None :
30
+ Device .__trace = Trace .get_tracer ()
27
31
28
32
if required_options is not None :
29
33
for optname in required_options :
@@ -56,11 +60,11 @@ def add_device(cls, args, dev, **options):
56
60
57
61
if Device .__root_device is None :
58
62
# one-time init
63
+ Register .init (args )
59
64
m68k .set_int_ack_callback (Device .__cb_int )
60
65
m68k .mem_set_device_handler (Device .__cb_access )
61
- Device .__debug = 'device ' in args .debug_device
66
+ Device .__debug = 'Device ' in args .debug_device
62
67
Device .__emu = options ['emulator' ]
63
- Register .init (args , Device .__emu )
64
68
65
69
Device .__root_device = dev (args = args , ** options )
66
70
Device .__root_device .add_system_devices (args )
@@ -91,7 +95,7 @@ def add_register(self, name, offset, size, access, handler):
91
95
self .size = implied_size
92
96
93
97
if self .debug or self .__class__ .__debug :
94
- Device .__emu . trace ('MAP_REG' , address = reg .address , info = f'{ repr ( reg ) } ' )
98
+ Device .trace (action = 'MAP_REG' , address = reg .address , info = f'{ reg } ' )
95
99
96
100
def add_registers (self , registers ):
97
101
"""
@@ -106,32 +110,10 @@ def __cb_access(cls, operation, address, size, value):
106
110
value = Register .access (address , size , operation , value )
107
111
except KeyError :
108
112
# XXX bus error?
109
- Device .__trace ('DECODE' , f'no register to handle { operation } :{ address :#x} /{ size } ' )
113
+ Device .trace ('DECODE' , f'no register to handle { operation } :{ address :#x} /{ size } ' )
110
114
111
115
return value
112
116
113
- ########################################
114
- # Logging
115
-
116
- def trace (self , address = None , info = '' ):
117
- """
118
- Emit a debug trace message
119
- """
120
- if self .debug :
121
- Device .__emu .trace (self .name , address = address , info = info )
122
-
123
- def diagnostic (self , address = None , info = '' ):
124
- Device .__emu .trace (f'{ self .name } !!' , info = info )
125
-
126
- @classmethod
127
- def __trace (cls , address = None , info = '' ):
128
- if Device .__debug :
129
- Device .__emu .trace ('device' , address = address , info = info )
130
-
131
- @classmethod
132
- def __diagnostic (cls , address = None , info = '' ):
133
- Device .__emu .trace ('device!!' , address = address , info = info )
134
-
135
117
########################################
136
118
# Device callbacks
137
119
@@ -237,9 +219,9 @@ def __set_ipl(cls):
237
219
# an unmasked interrupt we need to end the timeslice to get its
238
220
# attention
239
221
m68k .end_timeslice ()
240
- Device .__trace (info = f'un-masked IPL { ipl } from { asserting_dev .name } ' )
222
+ Device .trace (info = f'un-masked IPL { ipl } from { asserting_dev .name } ' )
241
223
else :
242
- Device .__trace (info = f'masked IPL { ipl } from { asserting_dev .name } ' )
224
+ Device .trace (info = f'masked IPL { ipl } from { asserting_dev .name } ' )
243
225
m68k .set_irq (ipl )
244
226
245
227
@classmethod
@@ -251,9 +233,9 @@ def __cb_int(cls, interrupt):
251
233
if dev ._asserted_ipl == interrupt :
252
234
vector = dev .get_vector (interrupt )
253
235
if vector != m68k .IRQ_SPURIOUS :
254
- Device .__trace (info = f'INTERRUPT, vector { vector } ' )
236
+ Device .trace (info = f'INTERRUPT, vector { vector } ' )
255
237
return vector
256
- Device .__trace (info = 'SPURIOUS_INTERRUPT' )
238
+ Device .trace (info = 'SPURIOUS_INTERRUPT' )
257
239
return m68k .IRQ_SPURIOUS
258
240
259
241
########################################
@@ -328,6 +310,18 @@ def root_device(self):
328
310
def devices (self ):
329
311
return self .__class__ .__devices
330
312
313
+ ########################################
314
+ # Tracing
315
+
316
+ def trace (self , address = None , info = '' ):
317
+ if self .debug :
318
+ Device .__trace .trace (action = self .name , address = address , info = info )
319
+
320
+ @classmethod
321
+ def trace (cls , action = '' , address = None , info = '' ):
322
+ if cls .__debug :
323
+ cls .__trace .trace (action = action , address = address , info = info )
324
+
331
325
########################################
332
326
# Subclass protocol
333
327
0 commit comments