mirror of
https://github.com/JetSetIlly/Gopher2600.git
synced 2024-05-20 05:40:49 -04:00
changed when cartridgeloader is created for log/video regression
creating the cartridgeloader later in the regression process gives a clearer indication of when and if the cartridgeloader is closed properly
This commit is contained in:
parent
28ae543e36
commit
7ed001c4c1
|
@ -32,8 +32,14 @@ func decideOnName(ld Loader) string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
name := filepath.Base(ld.Filename)
|
return NameFromFilename(ld.Filename)
|
||||||
name = strings.TrimSuffix(name, filepath.Ext(ld.Filename))
|
}
|
||||||
|
|
||||||
|
// NameFromFilename converts a filename to a shortened version suitable for
|
||||||
|
// display. Useful in some contexts where creating a cartridge loader instance
|
||||||
|
// is inconvenient.
|
||||||
|
func NameFromFilename(filename string) string {
|
||||||
|
name := filepath.Base(filename)
|
||||||
|
name = strings.TrimSuffix(name, filepath.Ext(filename))
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
|
@ -1337,14 +1337,13 @@ func (dbg *Debugger) startComparison(comparisonROM string, comparisonPrefs strin
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// cartload is passed to comparision.CreateFromLoader(). closure will be
|
|
||||||
// handled from there
|
|
||||||
cartload, err := cartridgeloader.NewLoaderFromFilename(comparisonROM, "AUTO")
|
cartload, err := cartridgeloader.NewLoaderFromFilename(comparisonROM, "AUTO")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// comparision emulation handles closure of cartridgeloader
|
// cartload is passed to comparision.CreateFromLoader(). closure will be
|
||||||
|
// handled from there when comparision emulation ends
|
||||||
dbg.comparison.CreateFromLoader(cartload)
|
dbg.comparison.CreateFromLoader(cartload)
|
||||||
|
|
||||||
// check use of comparison prefs
|
// check use of comparison prefs
|
||||||
|
|
|
@ -785,19 +785,14 @@ with the LOG mode. Note that asking for log output will suppress regression prog
|
||||||
|
|
||||||
switch strings.ToUpper(regressMode) {
|
switch strings.ToUpper(regressMode) {
|
||||||
case "VIDEO":
|
case "VIDEO":
|
||||||
cartload, err := cartridgeloader.NewLoaderFromFilename(args[0], mapping)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer cartload.Close()
|
|
||||||
|
|
||||||
statetype, err := regression.NewStateType(state)
|
statetype, err := regression.NewStateType(state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
regressor = ®ression.VideoRegression{
|
regressor = ®ression.VideoRegression{
|
||||||
CartLoad: cartload,
|
Cartridge: args[0],
|
||||||
|
Mapping: mapping,
|
||||||
TVtype: strings.ToUpper(spec),
|
TVtype: strings.ToUpper(spec),
|
||||||
NumFrames: numFrames,
|
NumFrames: numFrames,
|
||||||
State: statetype,
|
State: statetype,
|
||||||
|
@ -811,14 +806,9 @@ with the LOG mode. Note that asking for log output will suppress regression prog
|
||||||
Notes: notes,
|
Notes: notes,
|
||||||
}
|
}
|
||||||
case "LOG":
|
case "LOG":
|
||||||
cartload, err := cartridgeloader.NewLoaderFromFilename(args[0], mapping)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer cartload.Close()
|
|
||||||
|
|
||||||
regressor = ®ression.LogRegression{
|
regressor = ®ression.LogRegression{
|
||||||
CartLoad: cartload,
|
Cartridge: args[0],
|
||||||
|
Mapping: mapping,
|
||||||
TVtype: strings.ToUpper(spec),
|
TVtype: strings.ToUpper(spec),
|
||||||
NumFrames: numFrames,
|
NumFrames: numFrames,
|
||||||
Notes: notes,
|
Notes: notes,
|
||||||
|
|
|
@ -111,7 +111,6 @@ func (plb *Playback) readHeader(lines []string, checkROM bool) error {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// read header
|
|
||||||
plb.CartLoad, err = cartridgeloader.NewLoaderFromFilename(lines[lineCartName], "AUTO")
|
plb.CartLoad, err = cartridgeloader.NewLoaderFromFilename(lines[lineCartName], "AUTO")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("playback: %w", err)
|
return fmt.Errorf("playback: %w", err)
|
||||||
|
|
|
@ -48,7 +48,8 @@ const (
|
||||||
// the run. Regression passes if the subsequent runs produce the same
|
// the run. Regression passes if the subsequent runs produce the same
|
||||||
// log/digest.
|
// log/digest.
|
||||||
type LogRegression struct {
|
type LogRegression struct {
|
||||||
CartLoad cartridgeloader.Loader
|
Cartridge string
|
||||||
|
Mapping string
|
||||||
TVtype string
|
TVtype string
|
||||||
NumFrames int
|
NumFrames int
|
||||||
Notes string
|
Notes string
|
||||||
|
@ -66,18 +67,14 @@ func deserialiseLogEntry(fields database.SerialisedEntry) (database.Entry, error
|
||||||
return nil, fmt.Errorf("log: too few fields")
|
return nil, fmt.Errorf("log: too few fields")
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
reg.Cartridge = fields[videoFieldCartName]
|
||||||
|
reg.Mapping = fields[videoFieldCartMapping]
|
||||||
// string fields need no conversion
|
|
||||||
reg.CartLoad, err = cartridgeloader.NewLoaderFromFilename(fields[videoFieldCartName], fields[videoFieldCartMapping])
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("log: %w", err)
|
|
||||||
}
|
|
||||||
reg.TVtype = fields[logFieldTVtype]
|
reg.TVtype = fields[logFieldTVtype]
|
||||||
reg.digest = fields[logFieldDigest]
|
reg.digest = fields[logFieldDigest]
|
||||||
reg.Notes = fields[logFieldNotes]
|
reg.Notes = fields[logFieldNotes]
|
||||||
|
|
||||||
// convert number of frames field
|
var err error
|
||||||
|
|
||||||
reg.NumFrames, err = strconv.Atoi(fields[logFieldNumFrames])
|
reg.NumFrames, err = strconv.Atoi(fields[logFieldNumFrames])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
msg := fmt.Sprintf("invalid numFrames field [%s]", fields[logFieldNumFrames])
|
msg := fmt.Sprintf("invalid numFrames field [%s]", fields[logFieldNumFrames])
|
||||||
|
@ -95,8 +92,8 @@ func (reg LogRegression) EntryType() string {
|
||||||
// Serialise implements the database.Entry interface.
|
// Serialise implements the database.Entry interface.
|
||||||
func (reg *LogRegression) Serialise() (database.SerialisedEntry, error) {
|
func (reg *LogRegression) Serialise() (database.SerialisedEntry, error) {
|
||||||
return database.SerialisedEntry{
|
return database.SerialisedEntry{
|
||||||
reg.CartLoad.Filename,
|
reg.Cartridge,
|
||||||
reg.CartLoad.Mapping,
|
reg.Mapping,
|
||||||
reg.TVtype,
|
reg.TVtype,
|
||||||
strconv.Itoa(reg.NumFrames),
|
strconv.Itoa(reg.NumFrames),
|
||||||
reg.digest,
|
reg.digest,
|
||||||
|
@ -114,7 +111,9 @@ func (reg LogRegression) CleanUp() error {
|
||||||
func (reg LogRegression) String() string {
|
func (reg LogRegression) String() string {
|
||||||
s := strings.Builder{}
|
s := strings.Builder{}
|
||||||
|
|
||||||
s.WriteString(fmt.Sprintf("[%s] %s [%s] frames=%d", reg.EntryType(), reg.CartLoad.Name, reg.TVtype, reg.NumFrames))
|
s.WriteString(fmt.Sprintf("[%s] %s [%s] frames=%d", reg.EntryType(),
|
||||||
|
cartridgeloader.NameFromFilename(reg.Cartridge),
|
||||||
|
reg.TVtype, reg.NumFrames))
|
||||||
if reg.Notes != "" {
|
if reg.Notes != "" {
|
||||||
s.WriteString(fmt.Sprintf(" [%s]", reg.Notes))
|
s.WriteString(fmt.Sprintf(" [%s]", reg.Notes))
|
||||||
}
|
}
|
||||||
|
@ -146,7 +145,13 @@ func (reg *LogRegression) regress(newRegression bool, output io.Writer, msg stri
|
||||||
// default the hardware preferences
|
// default the hardware preferences
|
||||||
vcs.Env.Normalise()
|
vcs.Env.Normalise()
|
||||||
|
|
||||||
err = setup.AttachCartridge(vcs, reg.CartLoad, true)
|
cartload, err := cartridgeloader.NewLoaderFromFilename(reg.Cartridge, reg.Mapping)
|
||||||
|
if err != nil {
|
||||||
|
return false, "", fmt.Errorf("log: %w", err)
|
||||||
|
}
|
||||||
|
defer cartload.Close()
|
||||||
|
|
||||||
|
err = setup.AttachCartridge(vcs, cartload, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, "", fmt.Errorf("log: %w", err)
|
return false, "", fmt.Errorf("log: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,8 @@ const (
|
||||||
// emulation for N frames and the video recorded at that point. Regression
|
// emulation for N frames and the video recorded at that point. Regression
|
||||||
// passes if subsequenct runs produce the same video value.
|
// passes if subsequenct runs produce the same video value.
|
||||||
type VideoRegression struct {
|
type VideoRegression struct {
|
||||||
CartLoad cartridgeloader.Loader
|
Cartridge string
|
||||||
|
Mapping string
|
||||||
TVtype string
|
TVtype string
|
||||||
NumFrames int
|
NumFrames int
|
||||||
State StateType
|
State StateType
|
||||||
|
@ -76,10 +77,8 @@ func deserialiseVideoEntry(fields database.SerialisedEntry) (database.Entry, err
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// string fields need no conversion
|
// string fields need no conversion
|
||||||
reg.CartLoad, err = cartridgeloader.NewLoaderFromFilename(fields[videoFieldCartName], fields[videoFieldCartMapping])
|
reg.Cartridge = fields[videoFieldCartName]
|
||||||
if err != nil {
|
reg.Mapping = fields[videoFieldCartMapping]
|
||||||
return nil, fmt.Errorf("video: %w", err)
|
|
||||||
}
|
|
||||||
reg.TVtype = fields[videoFieldTVtype]
|
reg.TVtype = fields[videoFieldTVtype]
|
||||||
reg.digest = fields[videoFieldDigest]
|
reg.digest = fields[videoFieldDigest]
|
||||||
reg.Notes = fields[videoFieldNotes]
|
reg.Notes = fields[videoFieldNotes]
|
||||||
|
@ -128,8 +127,8 @@ func (reg VideoRegression) EntryType() string {
|
||||||
// Serialise implements the database.Entry interface.
|
// Serialise implements the database.Entry interface.
|
||||||
func (reg *VideoRegression) Serialise() (database.SerialisedEntry, error) {
|
func (reg *VideoRegression) Serialise() (database.SerialisedEntry, error) {
|
||||||
return database.SerialisedEntry{
|
return database.SerialisedEntry{
|
||||||
reg.CartLoad.Filename,
|
reg.Cartridge,
|
||||||
reg.CartLoad.Mapping,
|
reg.Mapping,
|
||||||
reg.TVtype,
|
reg.TVtype,
|
||||||
strconv.Itoa(reg.NumFrames),
|
strconv.Itoa(reg.NumFrames),
|
||||||
reg.State.String(),
|
reg.State.String(),
|
||||||
|
@ -170,7 +169,9 @@ func (reg VideoRegression) String() string {
|
||||||
state = " [with state]"
|
state = " [with state]"
|
||||||
}
|
}
|
||||||
|
|
||||||
s.WriteString(fmt.Sprintf("[%s] %s [%s] frames=%d%s", reg.EntryType(), reg.CartLoad.Name, reg.TVtype, reg.NumFrames, state))
|
s.WriteString(fmt.Sprintf("[%s] %s [%s] frames=%d%s", reg.EntryType(),
|
||||||
|
cartridgeloader.NameFromFilename(reg.Cartridge),
|
||||||
|
reg.TVtype, reg.NumFrames, state))
|
||||||
if reg.Notes != "" {
|
if reg.Notes != "" {
|
||||||
s.WriteString(fmt.Sprintf(" [%s]", reg.Notes))
|
s.WriteString(fmt.Sprintf(" [%s]", reg.Notes))
|
||||||
}
|
}
|
||||||
|
@ -204,7 +205,13 @@ func (reg *VideoRegression) regress(newRegression bool, output io.Writer, msg st
|
||||||
// default the hardware preferences
|
// default the hardware preferences
|
||||||
vcs.Env.Normalise()
|
vcs.Env.Normalise()
|
||||||
|
|
||||||
err = setup.AttachCartridge(vcs, reg.CartLoad, true)
|
cartload, err := cartridgeloader.NewLoaderFromFilename(reg.Cartridge, reg.Mapping)
|
||||||
|
if err != nil {
|
||||||
|
return false, "", fmt.Errorf("log: %w", err)
|
||||||
|
}
|
||||||
|
defer cartload.Close()
|
||||||
|
|
||||||
|
err = setup.AttachCartridge(vcs, cartload, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, "", fmt.Errorf("video: %w", err)
|
return false, "", fmt.Errorf("video: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -275,7 +282,7 @@ func (reg *VideoRegression) regress(newRegression bool, output io.Writer, msg st
|
||||||
|
|
||||||
if reg.State != StateNone {
|
if reg.State != StateNone {
|
||||||
// create a unique filename
|
// create a unique filename
|
||||||
reg.stateFile, err = uniqueFilename("state", reg.CartLoad.Name)
|
reg.stateFile, err = uniqueFilename("state", reg.Cartridge)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, "", fmt.Errorf("video: %w", err)
|
return false, "", fmt.Errorf("video: %w", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue