11use crate :: core:: cp15:: TcmState ;
22use crate :: core:: emu:: Emu ;
33use crate :: core:: memory:: mmu:: { MmuArm7 , MmuArm9 , MMU_PAGE_SHIFT , MMU_PAGE_SIZE } ;
4- use crate :: core:: memory:: oam:: Oam ;
5- use crate :: core:: memory:: palettes:: Palettes ;
64use crate :: core:: memory:: regions;
75use crate :: core:: memory:: regions:: { OAM_SIZE , STANDARD_PALETTES_SIZE } ;
86use crate :: core:: memory:: vram:: Vram ;
@@ -39,15 +37,6 @@ macro_rules! create_io_read_lut {
3937 Self :: read_io_ports,
4038 Self :: read_palettes,
4139 Self :: read_vram,
42- Self :: read_oam,
43- Self :: read_gba,
44- Self :: read_gba,
45- Self :: read_gba,
46- Self :: read_invalid,
47- Self :: read_invalid,
48- Self :: read_invalid,
49- Self :: read_invalid,
50- Self :: read_bios,
5140 ]
5241 } ;
5342}
@@ -62,8 +51,6 @@ macro_rules! create_io_write_lut {
6251 Self :: write_io_ports,
6352 Self :: write_palettes,
6453 Self :: write_vram,
65- Self :: write_oam,
66- Self :: write_gba,
6754 ]
6855 } ;
6956}
@@ -209,12 +196,12 @@ struct MemoryIo<const CPU: CpuType, const TCM: bool, T: Convert> {
209196}
210197
211198impl < const CPU : CpuType , const TCM : bool , T : Convert > MemoryIo < CPU , TCM , T > {
212- const READ_LUT : [ fn ( u32 , & mut Emu ) -> T ; 16 ] = create_io_read_lut ! ( ) ;
213- const WRITE_LUT : [ fn ( u32 , T , & mut Emu ) ; 9 ] = create_io_write_lut ! ( ) ;
199+ const READ_LUT : [ fn ( u32 , & mut Emu ) -> T ; 7 ] = create_io_read_lut ! ( ) ;
200+ const WRITE_LUT : [ fn ( u32 , T , & mut Emu ) ; 7 ] = create_io_write_lut ! ( ) ;
214201
215202 fn read ( addr : u32 , emu : & mut Emu ) -> T {
216203 read_dtcm ! ( CPU , TCM , addr, emu, shm_offset, { utils:: read_from_mem( & emu. mem. shm, shm_offset) } ) ;
217- Self :: READ_LUT [ ( ( addr >> 24 ) & 0xF ) as usize ] ( addr, emu)
204+ unsafe { Self :: READ_LUT . get_unchecked ( ( ( addr >> 24 ) & 0xF ) as usize ) ( addr, emu) }
218205 }
219206
220207 fn read_itcm ( addr : u32 , emu : & mut Emu ) -> T {
@@ -244,35 +231,14 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryIo<CPU, TCM, T> {
244231 )
245232 }
246233
247- fn read_palettes ( addr : u32 , emu : & mut Emu ) -> T {
234+ fn read_palettes ( _ : u32 , _ : & mut Emu ) -> T {
248235 unsafe { unreachable_unchecked ( ) }
249236 }
250237
251238 fn read_vram ( addr : u32 , emu : & mut Emu ) -> T {
252239 emu. vram_read :: < CPU , _ > ( addr)
253240 }
254241
255- fn read_oam ( addr : u32 , emu : & mut Emu ) -> T {
256- unsafe { unreachable_unchecked ( ) }
257- }
258-
259- fn read_gba ( _: u32 , _: & mut Emu ) -> T {
260- println ! ( "{CPU:?} read gba" ) ;
261- T :: from ( 0xFFFFFFFF )
262- }
263-
264- fn read_invalid ( _: u32 , _: & mut Emu ) -> T {
265- unsafe { unreachable_unchecked ( ) }
266- }
267-
268- fn read_bios ( _: u32 , _: & mut Emu ) -> T {
269- println ! ( "{CPU:?} read bios" ) ;
270- match CPU {
271- ARM9 => T :: from ( 0 ) ,
272- ARM7 => unsafe { unreachable_unchecked ( ) } ,
273- }
274- }
275-
276242 fn write ( addr : u32 , value : T , emu : & mut Emu ) {
277243 write_dtcm ! ( CPU , TCM , addr, emu, shm_offset, { utils:: write_to_mem( & mut emu. mem. shm, shm_offset, value) } ) ;
278244 let func = unsafe { Self :: WRITE_LUT . get_unchecked ( ( ( addr >> 24 ) & 0xF ) as usize ) } ;
@@ -306,36 +272,28 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryIo<CPU, TCM, T> {
306272 ) ;
307273 }
308274
309- fn write_palettes ( addr : u32 , value : T , emu : & mut Emu ) {
275+ fn write_palettes ( _ : u32 , _ : T , _ : & mut Emu ) {
310276 unsafe { unreachable_unchecked ( ) }
311277 }
312278
313279 fn write_vram ( addr : u32 , value : T , emu : & mut Emu ) {
314280 write_vram ! ( addr, size_of:: <T >( ) , emu, { emu. vram_write:: <CPU , _>( addr, value) } ) ;
315281 }
316-
317- fn write_oam ( addr : u32 , value : T , emu : & mut Emu ) {
318- unsafe { unreachable_unchecked ( ) }
319- }
320-
321- fn write_gba ( _: u32 , _: T , _: & mut Emu ) {
322- println ! ( "{CPU:?} write gba" ) ;
323- }
324282}
325283
326284struct MemoryMultipleSliceIo < const CPU : CpuType , const TCM : bool , T : Convert > {
327285 _data : PhantomData < T > ,
328286}
329287
330288impl < const CPU : CpuType , const TCM : bool , T : Convert > MemoryMultipleSliceIo < CPU , TCM , T > {
331- const READ_LUT : [ fn ( u32 , & mut [ T ] , & mut Emu ) ; 16 ] = create_io_read_lut ! ( ) ;
332- const WRITE_LUT : [ fn ( u32 , & [ T ] , & mut Emu ) ; 9 ] = create_io_write_lut ! ( ) ;
289+ const READ_LUT : [ fn ( u32 , & mut [ T ] , & mut Emu ) ; 7 ] = create_io_read_lut ! ( ) ;
290+ const WRITE_LUT : [ fn ( u32 , & [ T ] , & mut Emu ) ; 7 ] = create_io_write_lut ! ( ) ;
333291
334292 fn read ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
335293 read_dtcm ! ( CPU , TCM , addr, emu, shm_offset, {
336294 utils:: read_from_mem_slice( & emu. mem. shm, shm_offset, slice) ;
337295 } ) ;
338- Self :: READ_LUT [ ( ( addr >> 24 ) & 0xF ) as usize ] ( addr, slice, emu) ;
296+ unsafe { Self :: READ_LUT . get_unchecked ( ( ( addr >> 24 ) & 0xF ) as usize ) ( addr, slice, emu) } ;
339297 }
340298
341299 fn read_itcm ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
@@ -386,7 +344,7 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryMultipleSliceIo<CPU,
386344 ) ;
387345 }
388346
389- fn read_palettes ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
347+ fn read_palettes ( _ : u32 , _ : & mut [ T ] , _ : & mut Emu ) {
390348 unsafe { unreachable_unchecked ( ) }
391349 }
392350
@@ -397,24 +355,6 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryMultipleSliceIo<CPU,
397355 }
398356 }
399357
400- fn read_oam ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
401- unsafe { unreachable_unchecked ( ) }
402- }
403-
404- fn read_gba ( addr : u32 , slice : & mut [ T ] , _: & mut Emu ) {
405- println ! ( "{CPU:?} read slice gba {addr:x} {TCM} {}" , size_of:: <T >( ) ) ;
406- slice. fill ( T :: from ( 0xFFFFFFFF ) ) ;
407- }
408-
409- fn read_invalid ( _: u32 , _: & mut [ T ] , _: & mut Emu ) {
410- unsafe { unreachable_unchecked ( ) }
411- }
412-
413- fn read_bios ( _: u32 , slice : & mut [ T ] , _: & mut Emu ) {
414- println ! ( "{CPU:?} read slice bios" ) ;
415- slice. fill ( T :: from ( 0 ) ) ;
416- }
417-
418358 fn write ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
419359 write_dtcm ! ( CPU , TCM , addr, emu, shm_offset, {
420360 utils:: write_to_mem_slice( & mut emu. mem. shm, shm_offset as usize , slice) ;
@@ -461,37 +401,29 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryMultipleSliceIo<CPU,
461401 )
462402 }
463403
464- fn write_palettes ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
404+ fn write_palettes ( _ : u32 , _ : & [ T ] , _ : & mut Emu ) {
465405 unsafe { unreachable_unchecked ( ) }
466406 }
467407
468408 fn write_vram ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
469409 emu. vram_write_slice :: < CPU , _ > ( addr, slice) ;
470410 emu. jit . invalidate_block ( addr, size_of_val ( slice) ) ;
471411 }
472-
473- fn write_oam ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
474- unsafe { unreachable_unchecked ( ) }
475- }
476-
477- fn write_gba ( _: u32 , _: & [ T ] , _: & mut Emu ) {
478- println ! ( "{CPU:?} write slice gba" ) ;
479- }
480412}
481413
482414struct MemoryFixedSliceIo < const CPU : CpuType , const TCM : bool , T : Convert > {
483415 _data : PhantomData < T > ,
484416}
485417
486418impl < const CPU : CpuType , const TCM : bool , T : Convert > MemoryFixedSliceIo < CPU , TCM , T > {
487- const READ_LUT : [ fn ( u32 , & mut [ T ] , & mut Emu ) ; 16 ] = create_io_read_lut ! ( ) ;
488- const WRITE_LUT : [ fn ( u32 , & [ T ] , & mut Emu ) ; 9 ] = create_io_write_lut ! ( ) ;
419+ const READ_LUT : [ fn ( u32 , & mut [ T ] , & mut Emu ) ; 7 ] = create_io_read_lut ! ( ) ;
420+ const WRITE_LUT : [ fn ( u32 , & [ T ] , & mut Emu ) ; 7 ] = create_io_write_lut ! ( ) ;
489421
490422 fn read ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
491423 read_dtcm ! ( CPU , TCM , addr, emu, shm_offset, {
492424 slice. fill( utils:: read_from_mem( & emu. mem. shm, shm_offset) ) ;
493425 } ) ;
494- Self :: READ_LUT [ ( ( addr >> 24 ) & 0xF ) as usize ] ( addr, slice, emu) ;
426+ unsafe { Self :: READ_LUT . get_unchecked ( ( ( addr >> 24 ) & 0xF ) as usize ) ( addr, slice, emu) } ;
495427 }
496428
497429 fn read_itcm ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
@@ -541,32 +473,14 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryFixedSliceIo<CPU, TC
541473 )
542474 }
543475
544- fn read_palettes ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
476+ fn read_palettes ( _ : u32 , _ : & mut [ T ] , _ : & mut Emu ) {
545477 unsafe { unreachable_unchecked ( ) }
546478 }
547479
548480 fn read_vram ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
549481 slice. fill ( emu. vram_read :: < CPU , _ > ( addr) ) ;
550482 }
551483
552- fn read_oam ( addr : u32 , slice : & mut [ T ] , emu : & mut Emu ) {
553- unsafe { unreachable_unchecked ( ) }
554- }
555-
556- fn read_gba ( _: u32 , slice : & mut [ T ] , _: & mut Emu ) {
557- println ! ( "{CPU:?} read fixed gba" ) ;
558- slice. fill ( T :: from ( 0xFFFFFFFF ) ) ;
559- }
560-
561- fn read_invalid ( _: u32 , _: & mut [ T ] , _: & mut Emu ) {
562- unsafe { unreachable_unchecked ( ) }
563- }
564-
565- fn read_bios ( _: u32 , slice : & mut [ T ] , _: & mut Emu ) {
566- println ! ( "{CPU:?} read fixed bios" ) ;
567- slice. fill ( T :: from ( 0 ) ) ;
568- }
569-
570484 fn write ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
571485 write_dtcm ! ( CPU , TCM , addr, emu, shm_offset, {
572486 utils:: write_to_mem( & mut emu. mem. shm, shm_offset, unsafe { slice. last( ) . unwrap_unchecked( ) } )
@@ -608,7 +522,7 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryFixedSliceIo<CPU, TC
608522 ) ;
609523 }
610524
611- fn write_palettes ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
525+ fn write_palettes ( _ : u32 , _ : & [ T ] , _ : & mut Emu ) {
612526 unsafe { unreachable_unchecked ( ) }
613527 }
614528
@@ -617,22 +531,14 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryFixedSliceIo<CPU, TC
617531 emu. vram_write :: < CPU , _ > ( addr, slice[ i] ) ;
618532 }
619533 }
620-
621- fn write_oam ( addr : u32 , slice : & [ T ] , emu : & mut Emu ) {
622- unsafe { unreachable_unchecked ( ) }
623- }
624-
625- fn write_gba ( _: u32 , _: & [ T ] , _: & mut Emu ) {
626- println ! ( "{CPU:?} write gba" ) ;
627- }
628534}
629535
630536struct MemoryMultipleMemsetIo < const CPU : CpuType , const TCM : bool , T : Convert > {
631537 _data : PhantomData < T > ,
632538}
633539
634540impl < const CPU : CpuType , const TCM : bool , T : Convert > MemoryMultipleMemsetIo < CPU , TCM , T > {
635- const WRITE_LUT : [ fn ( u32 , T , usize , & mut Emu ) ; 9 ] = create_io_write_lut ! ( ) ;
541+ const WRITE_LUT : [ fn ( u32 , T , usize , & mut Emu ) ; 7 ] = create_io_write_lut ! ( ) ;
636542
637543 fn write ( addr : u32 , value : T , size : usize , emu : & mut Emu ) {
638544 write_dtcm ! ( CPU , TCM , addr, emu, shm_offset, {
@@ -683,8 +589,8 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryMultipleMemsetIo<CPU
683589 )
684590 }
685591
686- fn write_palettes ( addr : u32 , value : T , size : usize , emu : & mut Emu ) {
687- todo ! ( "{CPU:?} {addr:x} {TCM}" ) ;
592+ fn write_palettes ( _ : u32 , _ : T , _ : usize , _ : & mut Emu ) {
593+ unsafe { unreachable_unchecked ( ) }
688594 }
689595
690596 fn write_vram ( addr : u32 , value : T , size : usize , emu : & mut Emu ) {
@@ -693,14 +599,6 @@ impl<const CPU: CpuType, const TCM: bool, T: Convert> MemoryMultipleMemsetIo<CPU
693599 emu. vram_write :: < CPU , _ > ( addr + ( i << write_shift) as u32 , value) ;
694600 }
695601 }
696-
697- fn write_oam ( addr : u32 , value : T , size : usize , emu : & mut Emu ) {
698- unsafe { unreachable_unchecked ( ) }
699- }
700-
701- fn write_gba ( _: u32 , _: T , _: usize , _: & mut Emu ) {
702- println ! ( "{CPU:?} write memset gba" ) ;
703- }
704602}
705603
706604impl Memory {
0 commit comments