11//! Program Loading and Execution
22
33use embedded_sdmmc:: File ;
4- use neotron_loader:: traits:: Source ;
54
65use crate :: {
76 fs:: { BiosBlock , BiosTime } ,
@@ -85,6 +84,19 @@ impl FileSource {
8584 offset_cached : core:: cell:: Cell :: new ( None ) ,
8685 }
8786 }
87+
88+ fn uncached_read (
89+ & self ,
90+ offset : u32 ,
91+ out_buffer : & mut [ u8 ] ,
92+ ) -> Result < ( ) , embedded_sdmmc:: Error < neotron_common_bios:: Error > > {
93+ println ! ( "Reading from {}" , offset) ;
94+ self . file . borrow_mut ( ) . seek_from_start ( offset) . unwrap ( ) ;
95+ self . mgr
96+ . borrow_mut ( )
97+ . read ( & self . volume , & mut self . file . borrow_mut ( ) , out_buffer) ?;
98+ Ok ( ( ) )
99+ }
88100}
89101
90102impl neotron_loader:: traits:: Source for & FileSource {
@@ -99,7 +111,7 @@ impl neotron_loader::traits::Source for &FileSource {
99111 {
100112 // Do a fast copy from the cache
101113 let start = ( offset - offset_cached) as usize ;
102- let end = ( start as usize ) + chunk. len ( ) ;
114+ let end = start + chunk. len ( ) ;
103115 chunk. copy_from_slice ( & self . buffer . borrow ( ) [ start..end] ) ;
104116 return Ok ( ( ) ) ;
105117 }
@@ -220,7 +232,7 @@ impl TransientProgramArea {
220232 for b in ram. iter_mut ( ) {
221233 * b = 0 ;
222234 }
223- ( & source) . read ( ph. p_offset ( ) , & mut ram[ 0 ..ph. p_filesz ( ) as usize ] ) ?;
235+ source. uncached_read ( ph. p_offset ( ) , & mut ram[ 0 ..ph. p_filesz ( ) as usize ] ) ?;
224236 }
225237 }
226238
0 commit comments