Acme-6502
view release on metacpan or search on metacpan
lib/Acme/6502.pm view on Meta::CPAN
459460461462463464465466467468469470471472473474475476477478479
my
$addr
=
shift
;
$self
->{ mem }->[
$addr
++ ] =
$_
for
@_
;
}
sub
load_rom {
my
$self
=
shift
;
my
(
$f
,
$a
) =
@_
;
open
my
$fh
,
'<'
,
$f
or croak
"Can't read $f ($!)\n"
;
binmode
$fh
;
my
$sz
= -s
$fh
;
sysread
$fh
,
my
$buf
,
$sz
or croak
"Error reading $f ($!)\n"
;
close
$fh
;
$self
->write_chunk(
$a
,
$buf
);
}
sub
call_os {
croak
"call_os() not supported"
;
}
lib/Acme/6502/Tube.pm view on Meta::CPAN
208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237my
$name
=
$self
->read_str(
$self
->read_16(
$blk
) );
my
$load
=
$self
->read_32(
$blk
+ 2 );
my
$exec
=
$self
->read_32(
$blk
+ 6 );
my
$start
=
$self
->read_32(
$blk
+ 10 );
my
$end
=
$self
->read_32(
$blk
+ 14 );
# printf("%-20s %08x %08x %08x %08x\n", $name, $load, $exec, $start, $end);
if
(
$a
== 0x00 ) {
# Save
open
my
$fh
,
'>'
,
$name
or
die
"Can't write $name\n"
;
binmode
$fh
;
my
$buf
=
$self
->read_chunk(
$start
,
$end
);
syswrite
$fh
,
$buf
or
die
"Error writing $name\n"
;
$self
->set_a( 1 );
}
elsif
(
$a
== 0xFF ) {
# Load
if
( -f
$name
) {
open
my
$fh
,
'<'
,
$name
or
die
"Can't read $name\n"
;
binmode
$fh
;
my
$len
= -s
$fh
;
sysread
$fh
,
my
$buf
,
$len
or
die
"Error reading $name\n"
;
$load
= PAGE
if
$exec
& 0xFF;
$self
->write_chunk(
$load
,
$buf
);
$self
->write_32(
$blk
+ 2,
$load
);
$self
->write_32(
$blk
+ 6, 0x00008023 );
$self
->write_32(
$blk
+ 10,
$len
);
$self
->write_32(
$blk
+ 14, 0x00000000 );
$self
->set_a( 1 );
}
( run in 0.348 second using v1.01-cache-2.11-cpan-00829025b61 )