summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/drivers/namcos22.cpp
blob: 40a8e642693bd81f86cd77f17f0b24c3c737fe39 (plain) (tree)
1
2
3
4
5
6
7
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
                       
                                                      
   
                                                                      

                                  
        




                                          
        
                               
                                                                                                                  


                                                         
                                                                                 
                                                                  


                                                                                                                                    


                                                 

                                                                                                               
                       
                                                                                                       

                                                                                                              
                                                                                                                             

                                                                                                                                               

                                                                                                                          
                                          

                                                                                                                    








                                                                                                                                 

                                                                                                           

                                                                                                





                                                              





























































                                                                                                                
                 


















































                                                                                                           
                                                                                                           
  

                                                            



















                                                                                                                     
                                                                                                          













































































                                                                                                                            
                                                                                                            
                                                                                                                          






























































                                                                                                                            
                                                                                                             

                                                                                                   










                                                                                                                                                                




















































































































































































































































































































































































































































































































































































                                                                                                                              

                                                              











































































                                                                                                              
                                                                                                              


































































































                                                                                                              
                                    



























                                                                                                                             







                                                    
  




















































                                                                                         

   
                
                              
 
                              
                                  

                    



                                                                                                          
 
                                 

                                 
 
                                 
                               
                                 

 


                                                                                
                                       


                                                                                               
           
 



                                             
         

                                            
 

                                 
         
 
 
                                              
 




                                         
 




                                                         
 


                                                   
 



                                           
 




                                                         
 
 
 













































































                                                                                        
 


                      
                                 
 


                    
                     
 
       


                  
 



                  
 



          
 



                   
 



          
 

                 
                                            
 
                       
         




                                          
                                                      
                              
 




                                     
                                                      
                              
 


                              
 
                            
                          
                                                        
                              
 

                              
                                                        
                              
 


                                      
         
 
                                    
 
 




                      
 





                                       
                                                          
 


                                 
         

                                                                                  
         

 
 
                               
 
                      
       

                       
 

                      
       
                 
 

                     

       
 



       
 



       
 



                          
 




                                   
                                           
 


                                          
                                    



                                     
                                                      
                              
 
                                   
                                    



                                     
                                                      
                              
 


                              
 
                            
                          
                                                        
                              
 

                              
                                                        
                              
 



                                      
 
                                    

 








                     
 







                     
 







             
 







                               
 



                             
 


                                                        
 








                                            
 


                                             
 


                              
 


                                 
         

                                                                                  
         

 
 










                                                 
                                                
 
                                                                             

 
                                                 
 
                                 
         


                                           
         
                                            

 
 
                                                
 
                                                                                 
                                               
                                                                             
 
                                              


                                                                                                  




                                                       
 


                                                       
 


                                                       
 


                                                       
 


















                                                         
 


                              
 


                                              
                                                                       
                                   





                                                         

 
                                                 
 
                                                     


   

                                                                         
  
                                                                           
                                                              
   
                                                 
 
                                         



                                                                      
                   

 
                                                  
 
                                                                

 
                                                   
 
                             

 
                                                  
 
                                          

                                              
                                   
                                                          

 
                                                       
 







                                                                                                                             
 


                                          

 
 
           

                                                  
           


                                                                               
           
                                          
 




                                                          
                                                             
 








                                                 
                                                                                                                         






                                                                       
          

                                                                            
           
                                          
 




























                                                                 
                                                                                                                   
 



                                                                   
                                                                                                           
 



                                                     
                                                 
           
                                            
 




                                  
                                                                                                                                                 
                                                                                                                           
 




                                                          
                                                                                                                                    
 






































                                                                                                           
                                           
                                                                                                                         
 







                                                                      
                                                                                                                                             
 


                        
                                           
 




                                                                       
                                                         
 




                                                          
                                                               
 



                                                         
                                                                                                             
 

                           
                                                                                     
           
                                                                 
 


                             
                                                                                                   
 





                                                       
                                                                                                       
 



                                    
                                                                                                                                   
 
 
 
                 
                                                    

                                      
                                                                                                                       
                                                         



                                                                                                                                       
                                                                                                                                                    



                                                                                                                         
                                                                                         
                                                           




                                                                                                                                 
                                                         
                                                                                                                                                           
                                                                 

                                                                                                                                           
                                                 
 
 
 
                  
                                              
 

                                    
                                                                                                   
                                                   
 
                                          



                                                           


                                                                         
                       
         

                                    
 


                                    
 

                                 


         
                                                   

                          
                                                                                             
 


                           
                                               
 

                                     
 
                                                





                                                  
 


                                                  
 


                                                  
 


                              
 
 
                                                   

                          

                                                                          
 






                                                                                               
                                               
 
                                                                                      

 
                                              
 

                                                                                     
 
 
 

                                                  
                                         
 
                                  



                                        
 


                                     
 
                       

                                                               

                                        
 


                                        
         
 
                     
 
 
                                                   
 


                                         
 
                                  
         














                                              
         
 

                                               
 





                                                        
                                                       


                                                   
         

                                                                        
         
            
         

                                                                        
         
 
 
                                                                        
 
                        
                      
         

                                                             


            

                                                             

         



                                
 



                                               
 
 




                                                     
 
                                              
 
                                  

 

                                             
                                                    
 
 

                                              

                                                                                   
 
 
 
                                           
 

                                 
 
                                          
 


                                              



                                                                                                                            
                                                                                         
          




                                               
                              
                                                                          
 

                                          
 




                                                  
                
         
                               



                                                      
                             
                         
                            
                 


                                                               
 





                                                                                                 
 






                                                                                                                        
 










                                                                              
 









                                                                                                     










                                                                                                         
 









                                                                                                  
 










                                                                       
 









                                                                                 
 



                                                                                               
 






                                                                                                                
                                               



                                      

                                                                                                     

                 
 
 




                                                
 



                                              
 



                                               
 








                                                             
                          
 
 





                                                       
 
                                                          
 
                                   
         





                                                                     
                                                            










                                                                                      
                                                           






                                                                 
                                                           


                                              
                                                                                                            

                                              

                              


                                                                      

                              
                                              
                                                                        
                                          
                              
 

                              


         
                                         
 

                                       

 
                                                 
 

                                           

 
                                                  
 

                                                                                                                          
 
 
                                                 
 

                                                    

 
                                                 
 

                                                                                     

 
                                                    
 
                              
                                                                          
 
 
                                                              
 
                              
         





                                                                                 
         
 
 
                                               
 

 
                                         
 
                                                                          

 






































                                                                   
                                                                                            













                                                                   


                                                                
                                                               




                                                      
                                                        
                                                                                                                     



                                                    



                                                                                                       
                                           



                                                                                                                
                                                 



                                                                          
 

 
                                               
 


                  
 


                                                

 
                                                
 
                 
                                        
 
 



















                                                                                

 

















                                                                                                  


                                                        
                                                              
 
 

                                                     
                                                       
 
 

                                                   
                            
                                                                 
 


                                                                        

                                 
                                                                        

                           
                                                                                                           
 
                                                                 
 



                                                                                               





                                               
                                                                   

















                                                                                  
                 
 











                                                                                  


                                                                                              
                                                        
                                                       
 
 

                                                        
                                                            
 
 
 
                        
 
                                                      





                                                                   



                                                                   
                                                    



                                                          




















































                                   

                     


          
                                           
 


                                           
 



                                                            
 






                                                                             
 
                               

 
                                          
 
                               

 
                                           
 
                             
 
 
                                          
 

                                                                   

 
                                           
 
                    

 
                                          
 
                    


                 
                      
                                
 
                                                 

 
                                                   

                                                                                              
                                                        
                                                            
                                                       
                                                                                                                       
                                                          
                                                                                           

 
 




                                                                                               
                                              
 
                                                                        
 
                                                        
                             
 
                                                        
                             

                                      
                                                          






                                               



                                                   




                                                   

                                               



                                             


                                                 

                                            



                                              

                                      
                                                 


                                                  



                                              


                                      
                                            

                                            


                                      




                                            







                                               
                                             
                                            



                                                                    
                                      





                      
                                                                       



                               
                                                  
 
                                           
         

                                                      
                 





                                                                                   
                 
                                           
                 





                                                                                   

                 

                                         

 
 
             
 
                                                                       
 
                                                                                        
                                                                                      

 
                                                                    

                                                    
                                            
 
                       
         
                                                                                                 

                                                                                                
                                                                                                  
                                                 
 
                                                           

                                         
 
                                                                                       
                                                                                                                 






                                                                                  
 
 
                   
 
                                                                   
 

                                                                                                                                     

 
                                                                       
 
                                                        




















                                                                                                
         
                                            
                 

                                                                                                                                  
                 
                    
                 
                                     
                                                                                                



                 
 
 
                                                                                               
 




                                                                                         




                                                                                                                      


                                                      
                                                           

                                                            
                                                    
                                             




                                                       
 








                                                                                                                                      
                         


                                                                             














                                                         
               
 

                                     
 




                                                                                
 

                                                                                                  
                          
                                                         



                                                                                         


                                                      
 

                                    
 
                             
                                                           



                                                            
 






                                                                       
                          
                                                                               


                                                      
 

                                    
 

                                                                               
                                                           



                                                            
               
 
 

                                    

                                                                                                           













                                                                               
 














                                                                                                                                                                               
                         
















                                                         
 

                                   
                                                                                  








                                                                                  
                                             




                                                                               
 

                                                                                                                                      
 




                                                                                                                                   

                         
















                                                                              
                                                                                                                

                                                      
 



                                                        
 










                                                                                                                                                                                           
 






                                                                                                                
               
 

                                   
 
                               



                                                                                                                                              
               
 
                                                                                               
 

                                                 
 
                                      
 
 
                                   







                                                                                      

                                                                                                                                    
                                                      
 
                           
                                                                                                                                           
 
                           
                                                                                                                                                         
 
                         








                                                         
               
 
                                   









                                                                                  
 
                           
                                                                                                                  
 
                           
                                                                                                                  
 
                                                          
                                                                                                                                              
 
                         
                                                         







                                                         
               
 
                                    









                                                                                  
 
                           
                                                                                                                                          
 
                           
                                                                                                                                     
 
                           
                                                                                                                                       
 
                         


                                                                             







                                                         
               
 
                                    








                                                                                  




                                                                          
 
                           
                                                                                                                                          
 
                           
                                                                                                                                     
 
                           
                                                                                                                                       
 
                         
                                                         







                                                         
               
 
                                    







                                                                                  


                                                                         
                                                      
 
                           
                                                                                                                                          
 
                           
                                                                                                                                     
 
                           
                                                                                                                                       
 
                         
                                                                             









                                                         
               
 
                                   









                                                       
 
                           
                                                                                                                           
 
                           
                                                                                                                          
 
                           
                                                                                                                               
 
                         
                                                                             









                                                         
               
 
                                   










                                                       
 
                           
                                                                                                                                      
 

                                                                                                                                                   
 
                         


                                                                             







                                                         
 
















                                                                                                                                                                                                                        










                                                       
 
                           
                                                                                                                               
 
                           
                                                                                                                  
 

                                                                                                                                       
 
                         






                                                         
                                                         
                                                     
               
 
                                    









                                                                               
 
                                            
                                                                                                                                                  
 
                                                                               
                                                                                                                                                 












                                                                             
               
 
 
 
                                                                                               
 
                                          






















                                                                                            
 














                                                                                     
 












                                                                                                        
 
          
 
                                      
                                                                       

                                                                      
 
                                   
                                                                       


                                                                      
 
 

                                    


                                  
 
                                                             

                                                                       
 
 


                                              
 
 


                                            

                                    
                           
                           

                               



                         




































                                                                                         


                                      

















                                                   



                                     











                                              
 
 














                                               
           

                                                     
                                    


                                                                                      
 
                                                                         







                                                                            
                                                                              
                                                                                                                                    
 
                                                                       


                                                                          
                                                                      




                                                                          

                                                                                                                                      
                                                                     
 

                                                                             
                                                                         
 
                                                                 
 
                            




                                                                                       
 

                                                                
 
                            

                                                  
 



                                                     
 

                                                     
                         
 

                                                   
 


                                                 
 
                 
                                                       
 
                         
 
                                    
                                                                                  

                                                                                        
 
                                                             











                                                                                                      
                                                                                                                          
 
                                      
 
                                   
                                                                                   
 
                            
                                                                                    
 

                                                                       
 
                                                      
 
                          
 

                                                                            
 
 
                                                    
 
                          
 
                                                                          
 
                                                                                                        
 
 
                                                      
 
                       
 
                                                                          
 
 
                                                      
 
                          
 
                                               

                                           
 
                                                      
 
                          
 
                                               

                                           
 
                                                      
 
                          
 
                                                                          
 
 
                                                      
 
                          
 

                                                  
 


                                                                    
 
                                                      
 
                          
 

                                                                                                                            
 
 
                                             

                        
 
                                             
                                                                                                                                          
 
 
                                                     
 
                          
 

                                                                                                                                
 
 
 



                                                                                               
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            



                                                                                                                      
 
                                                                          

                                                                                                                  







                                                                                                                  
 
                                                     



                                                                                                                    
 
                                             


                                                                                                               

       
                      
                                                               



                                                                                                                       
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            



                                                                                                                      
 
                                                                          

                                                                                                                  
 






                                                                                                                  
 
                                                     



                                                                                                                    
 
                                             


                                                                                                               

       
                      
                                                               



                                                                                                                       
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            



                                                                                                                      
 
                                                                          

                                                                                                                  
 






                                                                                                                  
 
                                                     



                                                                                                                    
 
                                             


                                                                                                               

       
                      
                                                               



                                                                                                                             
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            



                                                                                                                      
 
                                                                          

                                                                                                                  
 






                                                                                                                  
 
                                                     



                                                                                                                    
 
                                             


                                                                                                               

       
                      
                                                               



                                                                                                                         
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                            
 






                                                                                                                    
 
                                                     



                                                                                                                                                  
 
                                                                                                                     
                                             








                                                                                                                                
 


                                                                                                                            

       
 
                     
                                                               




                                                                                                                         
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             

                                                                                                            
                                                                            




                                                                                                                     
                                                                          


                                                                                                                  
                                                                  






                                                                                                                  
                                                     




                                                                                                                     
                                             


                                                                                                               

       
                      
                                                               




                                                                                                                         
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             

                                                                                                            
                                                                            




                                                                                                                     
                                                                          


                                                                                                                  
                                                                  






                                                                                                                  
                                                     




                                                                                                                     
                                             


                                                                                                               

       
                       
                                                               




                                                                                                                        
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             

                                                                                                            
                                                                            




                                                                                                                     
                                                                          


                                                                                                                  
                                                                  






                                                                                                                  
                                                     




                                                                                                                     
                                             


                                                                                                               

       

                     
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            







                                                                                                                                    
 
                                                                          

                                                                                                                                   
 












                                                                                                                    
 
                                                     



                                                                                                                   
 
                                             


                                                                                                               
 
                                                           
                                                                                                               

       
                     
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            







                                                                                                                                    
 
                                                                          

                                                                                                                                   
 












                                                                                                                    
 
                                                     









                                                                                                                   
                                                           















                                                                                                                       









































                                                                                                                                    
                                                           
















                                                                                                                        



































                                                                                                                                        
 
                                             


                                                                                                               
 
                                                           
                                                                                                               

       

                     
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                             
                                                                                                           
 
                                                                            



                                                                                                                    
 
                                                                          

                                                                                                                 
 
                                                                  





                                                                                                                  
 
                                                     



                                                                                                                     
 
                                             


                                                                                                               

       

                     
                                                               



                                                                                                                        






                                                                                                              
                                                             
                                                                                                            

                                                                            







                                                                                                                      

                                                                          

                                                                                                                                                 
 









                                                                                                                 
 
                                                     



                                                                                                                    
 
                                             


                                                                                                               

       




















































                                                                                                                                                 






                                                                                                                        






                                                                                                              

                                                                                                           
 


                                                                                                                                                     
 








                                                                                                                                                      
 


























                                                                                                                                                  
 
                                                     


                                                                                                                   
 



















                                                                                                                        

                                                                            







                                                                                                                      

                                                                          





















                                                                                                                      

       

                     
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                                    
                                                                                                            
 

                                                                                                                                                     
 







                                                                                                                                                      
 
                                                                          

                                                                                                                                                  
 












                                                                                                                     
 
                                                     


                                                                                                                   
                                                           
                                                                                                                        

       

                     
                                                               



                                                                                                                        
 
                                                             

                                                                                                              
                                                           

                                                                                                              
                                                                    
                                                                                                            
 
                                                                                           

                                                                                                                                                     
 
                                                                            







                                                                                                                                                      
 
                                                                          

                                                                                                                                                  
 














                                                                                                                     
 
                                                     

                                                                                                            
                                                           
                                                                                                                       

       
                     
                                                               



                                                                                                                        






                                                                                                              

                                                                                                            
 
                                                                                           

                                                                                                                                                     
 
                                                                            







                                                                                                                                                      

                                                                          

                                                                                                                                                  
 














                                                                                                                     
 
                                                     
                                                                                                            
 
                                                           
                                                                                                                       

       






                                                                                                                           






                                                                                                              

                                                                                                                    
 
                                                                                           
                                                                                                                    
 






                                                                                                                    

                                                                          

                                                                                                                    
 














                                                                                                                     

                                                              


                                                                                                                    
                                                           
                                                                                                                        

       





                                                                                                                           






                                                                                                              

                                                                                                                    
 
                                                                                           
                                                                                                                    
 






                                                                                                                    

                                                                          

                                                                                                                    
 














                                                                                                                     
 
                                                              

                                                                                                                    
 
                                                           
                                                                                                                        

       






                                                                                                                              






                                                                                                              
                                                                    
                                                                                                                    

                                                                                           
                                                                                                                    
 





                                                                                                                      
 


                                                                                                                    
 






                                                                                                                    
 

                                                                                                                    
 
                                                           
                                                                                                                        
       
 
 





                                                                                                                        
 

                                                                                                              
 

                                                                                                              
 

                                                                                                           
 






                                                                                                                   
 







                                                                                                                      
 


                                                                                                                  
 









                                                                                                                   
 
                                                     
                                                                                                                               

                                                                                                                   
 



                                                                                                                             
 

                                                                                                              
 

                                                                                                              
 

                                                                                                           
 






                                                                                                                   
 







                                                                                                                      
 


                                                                                                                  
 









                                                                                                                   
 
                                                     
                                                                                                                               

                                                                                                                   
 
 





                                                                                                                           
 

                                                                                                              
 

                                                                                                              
 

                                                                                                                    
 




                                                                                                                    
 








                                                                                                                    
 


                                                                                                                    
 












                                                                                                                    
 

                                                                                                                    
 
                                                           
                                                                                                                        
       
 
 



                                                                                                                                
 

                                                                                                              
 

                                                                                                              
 

                                                                                                                    
 


                                                                                                                    
 








                                                                                                                    
 


                                                                                                                    
 









                                                                                                                    
 



                                                                                                                    
 
 





                                                                                                                           
 

                                                                                                              
 

                                                                                                              
 

                                                                                                                    
 



                                                                                                                    
 








                                                                                                                    
 
















                                                                                                                    
 


                                                                                                                    
 
                                                           
                                                                                                                       
       
 
 





                                                                                                                           
 

                                                                                                              
 

                                                                                                              
 

                                                                                                                  
 




                                                                                                                    
 
















                                                                                                                    
 




                                                                                                                    
 












                                                                                                                    
 
                                                              

                                                                                                                                
       
 
 
 
                                                                                               

                                                      

                     
                                                
 
                                                             
         
                                              

         
                       

 
                                             
 
                               

 
                           
                                                
 
                                                             
         
                                              

         
                       


                           
                                               
 
                                                                                          
         
                                              

         
                       

 
                                          
 
                        
                                                                                                                                                                                                             

 
                                           
 
                                                       
                        
                                                                                                                                                                                                               

 
                                           

                                                  
                        
                                                                                                                                                                                                               

 
 
 
                                                                                               
 
                                    
 
                                          
                              

 
                                    
 
                                           
                              

 
                                   
 
                                         
                              

 
                                   
 
                                          
                              

 
                                    
 
                                         
                              

 
                                    
 
                                             
                              

 
                                    
 
                                           
                              
 
                           

 
                                     
 
                                             
                              
 
                           

 
                                     
 
                                            
                              
 
                           

 
                                    
 
                                           
                                                                                     

 
                                     
 
                                                       
 

                                                                    
                                    
 








                                                                                

                                       
 
                                         
                              

 
                                    
 
                                           
                              

 
                                     
 
                                          
                              

 
                                     
 
                                         
                              

 
                                    
 
                                       
                              

 
                                    
 
                                               
                              

 
                                     
 
                                        
                              

 


                                                                                               
 
                                                                                                                       
                 
                                                                                                                                                                                                                        













                                                                                                                                                                                                                                                                                
 
                       













                                                                                                                                                                                                                                                                           
// license:BSD-3-Clause
// copyright-holders:Phil Stroffolino, hap, R. Belmont
/**
 * This driver describes Namco's System22 and System Super22 hardware.
 *
 * driver provided with thanks to:
 * - hap
 * - pstroffo@yahoo.com (Phil Stroffolino)
 * - R. Belmont
 * - trackmaster@gmx.net (Bjorn Sunder)
 * - team vivanonno
 *
 * TODO:
 * - finish slave DSP emulation
 * - emulate System22 I/O board C74 instead of HLE (inputs, outputs, volume control - HLE only handles the inputs)
 * - alpinesa doesn't work, protection related?
 * - C139 for linked cabinets, as well as in RR fullscale
 * - confirm DSP and MCU clocks and their IRQ timing
 * - EEPROM write timing should be around 5ms, it doesn't do any data/rdy polling
 * - where is the steering wheel motor torque output for dirtdash?
 * - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core:
 *       it used to be much worse with the legacy_poly_manager
 * - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash
 * - improve ss22 lighting:
 *       + mountains in alpinr2b selection screen
 *       + ridgerac waving flag shadowing
 *       + cybrcomm enemies should flash white when you shoot them, probably lighting related
 *       + timecris helicopter, car, grenade boxes should flash white when you shoot them (similar to cybrcomm)
 * - improve ss22 spot:
 *       + dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level
 *       + how is it enabled exactly? the enable bit in spotram is set in tokyowar too(which doesn't use spot)
 *       + what is the high bit in spot_factor for? darkness instead of brightness? not used anywhere
 * - PDP command 0xfff9, used in alpinr2b to modify titlescreen logo animation in pointram (should show a snowmelting effect)
 * - support for text layer video partial updates after posirq, alpinesa does raster effects on it
 * - alpha blended sprite/poly with priority over alpha blended text doesn't work right (see dirtdash countdown when you start at jungle level)
 * - ss22 poly translucency is probably more limited than currently emulated, not supporting stacked layers
 * - there's a sprite limit per scanline, eg. timecris submarine explosion smoke partially erases sprites on real hardware
 * - cybrcycc speed dial needle is missing
 * - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw
 * - dirtdash polys are broken at the start section of the mountain level, maybe bad rom?
 * - ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2
 *       czram contents is rather odd here and partly cleared (probably the cause?):
 *        $0000-$0d7f - gradual increase from $00-$7c
 *        $0d80-$0fff - $73, huh, why lower?
 *        $1000-$19ff - $00, huh!? (it's specifically cleared, memsetting czram at boot does not fix the issue)
 *        $1a00-$0dff - $77
 *        $1e00-$1fff - $78
 *
 * - lots of smaller issues
 *
 **********************************************************************************************************
 * Input
 *      - input ports require manual calibration through built-in diagnostics (or canned EEPROM)
 *
 * Output Devices
 *      - Prop Cycle fan (outputs noted at the right MCU port)
 *      - lamps/LEDs on some cabinets
 *      - time crisis has force feedback for the guns
 *
 * Notes:
 *      The "dipswitch" settings are ignored in many games - this isn't a bug.  For example, Prop Cycle software
 *      explicitly clears the chunk of work RAM used to cache the 8 bit dipswitch value immediately after
 *      populating it.  This is apparently done to hide secret debug routines from release versions of games.
 *
 * Self Test Info:
 *    Prop Cycle DSP tests:
 *        MD ROM-PROGRAM      (not-yet-working)
 *        MD-DOWNLOAD       - confirms that main CPU can upload custom code to master DSP
 *        MD-EXTERNAL-RAM   - tests private RAM used by master DSP
 *        C-RAM CHECK BY MD - tests communications RAM, shared by master DSP and main CPU
 *        PDP LOOP TEST     - exercises multi-command DMA transfer
 *        PDP BLOCK MOVE    - exercises DMA block transfer
 *        POINT RAM         - RAM test for "Point RAM" (not directly accessible by any CPU)
 *        CUSTOM IC STATUS  - currently hacked to always report "good"
 *        SD ROM-PRG        - confirms that master DSP can upload custom code to run on slave DSP
 *        SD EXTERNAL-RAM   - tests private RAM used by slave DSP
 *        DATA FLOW TEST 1    (not-yet-working)
 *        DATA FLOW TEST 2    (not-yet-working)
 *        POINT ROM TEST    - checksums the "Point ROMs"
 *
 *    Ridge Racer (Japan) tests:
 *        TEST 1a: MD-EXTERNAL-RAM
 *        TEST 1b: C-RAM CHECK BY MD
 *        TEST 2:  (not-yet-working)
 *        TEST 3:  SD EXTERNAL-RAM
 *        TEST 4:  DATA FLOW TEST 1 (not-yet-working)
 *        TEST 5:  DATA FLOW TEST 2 (not-yet-working)
 *        TEST 6:  POINT RAM
 *
 * IO MCU:
 * - generates sound/music
 * - provides input port management (copying to shared RAM)
 * - coinage handling in most games
 * - manages external physical devices (i.e. lamps, fans, force feedback)
 * - C74 is sound MCU, Mitsubishi M37702 MCU with mask ROM
 * - some external subroutines for C74 are also embedded
 *
 * Master DSP:
 * - S22 has two TI320C25 DSP (printed as C71)
 * - the master DSP provides display list parsing
 *
 * Slave DSP:
 * - serves as a calculation engine for lighting
 *
 * Communications RAM
 * - seen as 32 bit memory by main 68k CPU
 * - seen as 16 bit memory by master DSP (addr 0x8000..0xffff); upper/lower word is selectable
 * - not addressable by slave DSP
 *
 * Point ROMs
 * - encodes 3d model data
 * - not directly addressable by any CPU
 *
 * Point RAM
 * - same address space as Point ROMs
 * - not directly addressable by any CPU
 *
 * Link Feature:
 * - some (typically racing) games may be linked together
 * - serial controller is C139 SCI (same as System21).
 *
 * System Super22
 * - different memory map
 * - different CPU controller register layout
 * - sound CPU uses external ROM (i.e. pr1data.8k) instead of internal BIOS (C74)
 * - additional 2d sprite layer
 * - Point RAM starts at 0xf80000 rather than 0xf00000
 * - "PDP" device, for automated block memory transfers (dsp ram, point ram)
 *
 **********************************************************************************************************
 * SYSTEM22 Known Custom Chips
 *
 * CPU PCB:
 *
 *  C71 TI TMS320C25 DSP
 *  C71 WEYW40116 (TMS320C25 Main/Sub DSP)
 *  C71 D72260FN 980 FE-5CA891W
 *
 *  M5M5178AP-25 (CPU 16R, 17R, 19R, 20R) DSP Work RAM (8K x 8bit x 2 x 2)
 *
 *  C74 Mitsubishi M37702 MCU
 *  C74 159 408600 (OLD SUB)
 *  C74 159 543100 (NEW SUB)
 *  C74 159 414600 (OLD I/O)
 *  C74 159 437600 (NEW I/O)
 *
 * C195 (Shared SRAM Controller)
 * C196 CPP x 6
 * C199 (CPU 18K) x 1
 * C317 IDC (CPU 15E) x 1 (S21B)
 * C337 PFP x 1
 * C342 x 1 (S21B)
 * C352 (32ch PCM)
 * C353 x 1
 *
 *
 * VIDEO PCB:
 *
 * C304 - 4 chips on SS22 Video PCB
 * C305 (Palette)
 * C335
 *  9C, 10C
 *  12D, 12E
 *  14C
 * C300
 *  18B, 18C, 20B, 20C, 22B, 22C
 * Cxxx
 *  34R, 35R
 *
 * TI TBP28L22N (256 x 8bit PROM)
 *  VIDEO 2D, 3D, 4D (RGB Gamma LUT ROM)
 *
 *  RR1.GAM (for Ridge Racer 1/2, Rave Racer)
 **********************************************************************************************************
 *
 *Namco Super System 22 Hardware Overview (last updated 21st
 *December 2012 at 7:15pm)
 *---------------------------------------
 *
 *This document covers all the known Namco Super System 22 games, including....
 *Air Combat 22    (C) Namco, 1995
 *Alpine Racer 1   (C) Namco, 1994
 *Alpine Racer 2   (C) Namco, 1996
 *Alpine Surfer    (C) Namco, 1996
 *Aqua Jet         (C) Namco, 1996
 *Armadillo Racing (C) Namco, 1996 (an undumped prototype/test or early version exists using a different ROM PCB)
 *Cyber Cycles     (C) Namco, 1995
 *Dirt Dash        (C) Namco, 1995
 *Prop Cycle       (C) Namco, 1996
 *Time Crisis      (C) Namco, 1995
 *Tokyo Wars       (C) Namco, 1996
 *
 *The Namco Super System 22 System comprises 4 PCB's plugged into a motherboard. The motherboard contains only
 *some slots and connectors. The 4 PCB's are housed in a metal box with a large fan on the side. The fan mostly cools
 *the video board as these are known to run hot and commonly fail, especially now the system is many years old.
 *
 *CPU PCB   - There are four known revisions of this PCB. Three of them have an extra connector for an
 *            auxiliary PCB. One of the others doesn't have that connector but is are otherwise identical.
 *            All PCBs can be swapped to any game and it will work. However, ALL required IC's must be swapped.
 *            This includes Program ROM PCB, socketed Keycus IC, socketed DATA ROM and socketed WAVE ROM(s).
 *            On most games the EEPROM will re-init itself on bootup. On the others, the EEPROM can re-init itself
 *            to defaults by holding down SERVICE + TEST on power-up. All games are swappable to ANY CPU PCB and will
 *            run ok (all dumped games have been swapped/tested and work fine)
 *DSP PCB   - There is only 1 revision of this PCB. All games use the exact same PCB. The DSP PCB can be swapped to
 *            any other game and works fine (all dumped games tested). Note that some games use different parts of the
 *            DSP PCB and some do more thorough tests on bootup so an old DSP PCB that works fine in one game may come
 *            up as faulty in a different SS22 game.
 *MROM PCB  - These PCB's have many SOP44 ROMs on them and are identical for each game, but the contents of the ROMs
 *            and the number of ROMs vary per game. (a few of the dumped games have had their surface mounted ROMs
 *            swapped to other PCBs and worked fine)
 *FLASH PCB - Flash ROM board used only for a prototype or early version of Armadillo Racing and contains many TSOP56
 *            16M FlashROMs
 *VIDEO PCB - There are three known revisions of this PCB. They're mostly identical apart from some component shuffling
 *            and in the earlier versions (A & B), an Altera FPGA chip is used instead of a Namco custom chip.
 *            All revisions of the Video PCBs are swappable and fully compatible with any SS22 game. The Altera FPGA runs
 *            very hot and almost always fails even if heatsinked! Revision C is the most reliable.
 *MOTHER PCB- There are probably 3 revisions of this PCB, but only the original revision and (C) are documented here.
 *            The differences are very minor, just the amount of connectors on the PCB. The Mother PCB is swappable to
 *            any game as long as the required connectors for that game are present on the PCB. (all dumped games tested
 *            and worked fine using any MOTHER PCB)
 *
 *Each game has a 2 or 3 digit letter code assigned to it. Then a number 1 or 2, Then a Rev. A/B/C/D which denotes the
 *software revision.
 *The 1 denotes a Japanese version. 2 denotes a World version. So far there are no other numbers used other than 1 or 2.
 *For World versions, usually only the main program uses a '2', the rest of the ROM labels use the Japanese region code '1'.
 *There is one exception so far. The World version of Alpine Racer 2, which uses a World version DATA ROM, and also one
 *of the WAVE ROMs is a World version, but one Japanese WAVE ROM is also used.
 *See the CPU PCB, Program ROM Daughterboard and MROM PCB texts below for more details on ROM usage.
 *
 *CPU PCB
 *-------
 *1st Revision
 *SYSTEM SUPER22 CPU PCB 8646960102 (8646970102)
 *
 *2nd Revision
 *SYSTEM SUPER22 CPU(B) PCB 8646962600 (8646972600)
 *
 *3rd Revision
 *SYSTEM SUPER22 CPU(B) PCB 8646962600 (8646972601) <-- very minor?
 *
 *4th Revision
 *SYSTEM SUPER22 CPU(B) PCB 8646962601 (8646972601) <-- very minor?
 *|--------------------------------------------------------------|
 *|      J6                         JC410               3771     |
 *|  N341256(x4)                                           DSW(4)|
 *|                               |-------|                     |--|
 *|                               |MC68EC |                     |  |
 *|                               |020FG25|                     |  |
 *|   *1                          |-------|                     |  |
 *|           DSW(8)        SS22C2         |------|             |  |
 *|                                        | C383 |             |  |
 *|   CAT28C64    KEYCUS    SS22C1         |      |             |  |
 *|                                        |------|             |  |
 *|              |-------|                                      |  |
 *|     N341256  |       |                 |------|             |  |
 *| *3  N341256  | C405  |                 | 139  |             |--|
 *|              |       |       CY7C182   |      |              |
 *| *2           |-------|                 |------|              |
 *|                                                             |--|
 *|        40.000MHz                         137                |  |
 *|                                                             |  |
 *|              DATA.8K         JP1        49.152MHz           |  |
 *|     |------|                 |-------|             4558     |  |
 *|     | C352 |      JP2        |M37710 |                      |  |
 *|     |      |                 |S4BFP  |                      |  |
 *|     |------|                 |-------|                      |  |
 *|LED(x8)                                                      |  |
 *|        J11         SS22C4                MB87078            |  |
 *|      WAVEA.2L                                      4558     |--|
 *| JP3                                                          |
 *|      WAVEB.1L                LC78815M      LC78815M          |
 *|--------------------------------------------------------------|
 *(logic chips omitted from the PCB layout)
 *
 *Notes:
 *      J6           : Custom Namco connector for plug-in program ROM PCB
 *      J11          : Custom Namco connector for optional plug-in WAVE ROM PCB (holds some SOP44 mask ROMs)
 *      JC410        : Custom Namco connector for Optional plug-in Auxiliary PCB (e.g. Gun Control PCB used in Time Crisis
 *                     etc)
 *                     The connector is populated only on the 2nd revision CPU (B) PCB 8646962600 (8646972600)
 *                     and 3rd Revision CPU (B) PCB 8646962600 (8646972601)
 *      JP1          : Jumper for configuration of M37710 (tied to pins 26 & 27 of M37710). Set to 1-2
 *      JP2          : Jumper for configuration of DATA ROM. Set to 1-2 (labelled '4M'), alt. setting 2-3 (labelled '1M/2M')
 *      JP3          : Jumper for configuration of WAVE ROM. Set to 2-3 (labelled '42P32M'), alt. setting 1-2
 *                     (labelled 'OTHER'). 'OTHER' is used when the WAVE ROMs are 16MBit. If the WAVE ROMs are 32MBit
 *                     (i.e. JP3 = 2-3), they're programmed in BYTE mode.
 *      M37710       : Mitsubishi M37710 CPU. Used on SS22 as the sound CPU. Does not have internal ROM (QFP80)
 *      MB87078      : Fujitsu MB87078 electronic volume control IC (SOIC24)
 *      4558         : Op Amp (SOIC8)
 *      LC78815M     : Sanyo LC78815M 2-channel 16-bit D/A converter (x2, SOIC20)
 *      3771         : Fujitsu MB3771 master reset IC (SOIC8)
 *      DSW(4)       : 4 position DIP Switch (1,2,3 are ON, 4 is OFF)
 *      DSW(8)       : 8 position DIP Switch (All OFF)
 *      N341256      : NKK N341256 32k x8 SRAM (x6, SOJ28)
 *      CY7C182      : Cypress 8k x9 SRAM (SOJ28)
 *      MC68EC020FG25: Main CPU, Motorola 68EC020FG25 (QFP100), running at 24.576MHz. Clock source is Namco
 *                     custom clock divider 137. 68EC020 clock = Master Clock of 49.152MHz / 2
 *      C383         : Namco custom C383 (QFP100)
 *      139          : Namco custom 139 Serial Controller Interface IC (QFP64). NOTE! On some PCB's this chip
 *                     has been replaced by a custom C422 chip, though the PCB number is the same. Which means probably
 *                     the function of this chip matches 139
 *      137          : Namco custom clock divider IC (DIP28)
 *      C405         : Namco custom C405 (QFP176)
 *      C352         : Namco custom C352 PCM sound chip (QFP100), clock is 24.576MHz (49.152/2), from pin 6 of C137
 *      SS22C1       : PALCE 22V10H (PLCC28, labelled 'SS22C1')
 *      SS22C2       : PALCE 22V10H (PLCC28, labelled 'SS22C2')
 *      SS22C4       : PALCE 22V10H (PLCC28, labelled 'SS22C4')
 *      CAT28C64     : Catalyst Semiconductor Inc. CAT28C64 8k x8 EEPROM (DIP28)
 *      LEDS         : 8 LEDs of various colors flash (in various pretty patterns) when the CPU PCB is active.
 *      KEYCUS       : Namco custom (DIP32)
 *                                         Air Combat 22    = none
 *                                         Alpine Racer 1   = C391
 *                                         Alpine Racer 2   = C434
 *                                         Alpine Surfer    = C425
 *                                         Aqua Jet         = C429
 *                                         Armadillo Racing = C433
 *                                         Cyber Cycles     = C389
 *                                         Dirt Dash        = C418
 *                                         Prop Cycle       = C428
 *                                         Time Crisis      = C419
 *                                         Tokyo Wars       = C424
 *
 *     *1            : Unpopulated position for PAL16V8 (PLCC20)
 *     *2            : Unpopulated position for Fujitsu MB86601 (QFP100)
 *     *3            : Unpopulated position for 32MHz OSC
 *     DATA.8K       : ST Microelectronics M27C4096 256k x16 EPROM (DIP40, labelled with the gamecode + 'DATA')
 *                     Game                EPROM label
 *                     -------------------------------
 *                     Air Combat 22      'ACS1 DATA'
 *                     Alpine Racer 1     'AR1 DATA B'
 *                     Alpine Racer 2     'ARS2 DATA'
 *                     Alpine Surfer      'AF1 DATA'
 *                     Aqua Jet           'AJ1 DATA'
 *                     Armadillo Racing   'AM1 DATA'
 *                     Cyber Cycles       'CB1 DATA B'
 *                     Dirt Dash          'DT1 DATA A'
 *                     Prop Cycle         'PR1 DATA'
 *                     Time Crisis        'TS1 DATA'
 *                     Tokyo Wars         'TW1 DATA'
 *
 *     WAVEA.2L   \
 *     WAVEB.1L   /  : 16M/32M WAVE mask ROMs. If 32MBit DIP42, they're programmed in BYTE mode (DIP42/SOP44)
 *                     Game                Wave A        Wave B        Type
 *                     ----------------------------------------------------------------------------
 *                     Air Combat 22      'ACS1 WAVE0', 'ACS1 WAVE1' , both SOP44 32M mask ROMs
 *                     Alpine Racer 1     'AR1 WAVEA' ,              , DIP42 16M mask ROM
 *                     Alpine Racer 2     'ARS1 WAVEA', 'ARS2 WAVE B', both DIP42 32M mask ROMs
 *                     Alpine Surfer      'AF1 WAVEA' ,              , DIP42 32M mask ROM
 *                     Aqua Jet           'AJ1 WAVEA' , 'AJ1 WAVEB'  , both DIP42 32M mask ROMs
 *                     Armadillo Racing   'AM1 WAVEA' , 'AM1 WAVEB'  , both DIP42 32M mask ROMs. Prototype version uses TSOP56, mounted on a DIP48 adapter board
 *                     Cyber Cycles       'CB1 WAVEA' , 'CB1 WAVEB'  , WAVE A DIP42 32M mask ROM, WAVE B DIP42 16M mask ROM
 *                     Dirt Dash          'DT1 WAVEA' , 'DT1 WAVEB'  , both DIP42 32M mask ROMs
 *                     Prop Cycle         'PR1 WAVE A', 'PR1 WAVE B' , both DIP42 32M mask ROM
 *                     Time Crisis        'TS1 WAVE A', 'TS1 WAVE B' , WAVE A DIP42 32M mask ROM, WAVE B DIP42 16M mask ROM
 *                     Tokyo Wars         'TW1 WAVE A',              , DIP42 32M mask ROM
 *
 *
 *PROGRAM ROM Daughterboard PCB
 *-----------------------------
 *This PCB holds the main program ROMs. There is a small sticker on each PCB stating the game code and software revision.
 *The actual ROMs are not marked with any codes except the manufacturer's part number.
 *There are 4 known types of program daughterboards used on SS22 games (so far). The most common is the first type.
 *The PCB is very small (approx 2" x 3") containing one custom connector and some FlashROMs, and a PAL (in some cases).
 *The ones that contain a PAL are approx 3" x 3".
 *
 *Type 1
 *SYSTEM SUPER22 MPM(F) PCB 8646961600 (8646971600)
 *|-------------------------|
 *|                         |
 *|                         |
 *| ROM1  ROM2  ROM3  ROM4  |
 *|                         |
 *|                         |
 *|  |-------------------|  |
 *|  |-------------------|  |
 *|-------------------------|
 *Notes:
 *      ROMx: Intel E28F008SA 8MBit FlashROM (x4, TSOP40)
 *
 *      This PCB is used on:
 *                          Game          Software revision
 *                          -------------------------------
 *                          Air Combat 22    'ACS1 Ver.B'
 *                          Alpine Racer     'AR2 Ver.C'
 *                          Alpine Racer     'AR2 Ver.D'
 *                          Aqua Jet         'AJ2 Ver.B'
 *                          Armadillo Racing 'AM1 Ver.A'
 *                          Cyber Cycles     'CB2 Ver.C'
 *                          Prop Cycle       'PR2 Ver.A'
 *                          Time Crisis      'TS2 Ver.B'
 *                          Tokyo Wars       'TW2 Ver.A'
 *
 *Type 2
 *SYSTEM SUPER22 MPM(F16) PCB 8646962500 (8646972500)
 *|-------------------------|
 *|                         |
 *|                         |
 *|      ROM1     ROM2      |
 *|                         |
 *|                         |
 *|                         |
 *|  |-------------------|  |
 *|  |-------------------|  |
 *|-------------------------|
 *Notes:
 *      ROMx: Intel E28F016SA 16MBit FlashROMs (x2, TSOP56)
 *
 *      This PCB is used on:
 *                          Game          Software revision
 *                          -------------------------------
 *                          Time Crisis   'TS2 Ver.A'
 *                          Dirt Dash     'DT2 Ver.A'
 *
 *Type 3
 *SYSTEM SUPER22 MPM(F16X4) PCB 8646962901 (8646972901)
 *|-------------------------|
 *|SS22P1B                  |
 *|                         |
 *|        IC4_LM    IC5_UU |
 *|                         |
 *|                         |
 *|  IC2_LL     IC3_UM      |
 *|                         |
 *|                         |
 *|  |-------------------|  |
 *|  |-------------------|  |
 *|-------------------------|
 *Notes:
 *      ICx*   : Intel E28F016SA 16MBit FlashROMs (x4, TSOP56)
 *      SS22P1B: PALCE16V8H (PLCC20, labelled 'SS22P1B')
 *
 *      This PCB is used on:
 *                          Game           Software revision
 *                          -------------------------------
 *                          Alpine Racer 2 'ARS2 Ver.B'
 *
 *Type 4
 *SYSTEM SUPER22 MPM(F16X4F) PCB 8646963500 (8646973500)
 *SYSTEM SUPER22 MPM(F16X4F) PCB 8646963501 (8646973501) <-- very minor?
 *|-------------------------|
 *|SS22P1B                  |
 *|                         |
 *|                         |
 *| IC2_LL     IC4_UM       |
 *|                         |
 *|      IC3_LM      IC5_UU |
 *|                         |
 *|                         |
 *|  |-------------------|  |
 *|  |-------------------|  |
 *|-------------------------|
 *Notes:
 *      ICx    : Fujitsu 29F016 16MBit FlashROMs (x4, TSOP48)
 *      SS22P1B: PALCE16V8H (PLCC20, labelled 'SS22P1B')
 *               There is a small mod on this PAL as follows....
 *               - Pin 8 is lifted and the pad on the PCB at pin 8
 *                 is tied to pin 16 of the PAL (no other pins are lifted)
 *               - The lifted pin 8 is tied to the MPM PCB connector on pin 1
 *                 That pin traces to pin 6 (OUTPUT Y) of a 74F08 at 15F on the CPU board
 *                 Pins 4 (INPUT A) & 5 (INPUT B) of the 74F08 at 15F trace to Namco custom
 *                 IC C383 pins 53 (A INPUT) & 52 (B INPUT)
 *
 *      This PCB is used on:
 *                          Game           Software revision
 *                          --------------------------------
 *                          Alpine Surfer  'AF2 Ver.A'   note: with PAL modification and using 8646963500 PCB
 *                          Alpine Racer 2 'ARS2 Ver.A'  note: without PAL modification and using 8646963501 PCB
 *
 *
 *Auxillary PCB (connector JC410 on the CPU PCB is used only for Time Crisis)
 *-------------
 *V159 GUN POINT PCB 244790102 (2447970102)
 *|---------------------------------|
 *|                                 |
 *|                      25.175MHz  |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                               J2|
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                                 |
 *|                J1               |
 *|---------------------------------|
 *Notes:
 *      There isn't much on this PCB other than 2 connectors and an oscillator plus a large amount of logic chips.
 *      J1 : Connector joining Gun PCB to a connector on the metal box (which joins to the gun interface PCB in the
 *           cab which supplies 24V for the solenoid in the guns)
 *      J2 : Connector joining to the CPU PCB (to JC410)
 *
 *
 *DSP PCB
 *-------
 *SYSTEM SUPER22 DSP PCB 8646960302 (8646970302)
 *  |--------------------------------------------------------------|
 *  | N341256     |-------|   SS22D1    N341256     |-------|      |
 *  | N341256     |       |             N341256     |       |      |
 *  | |---------| | C71   |                         | C405  |     |--|
 *|--||         | |       |                         |       |     |  |
 *|  ||  C396   | |-------|                         |-------|     |  |
 *|  ||         |                                                 |  |
 *|J ||         |           N341256                 |-------|     |  |
 *|D ||---------|           N341256                 |       |     |  |
 *|3 | |-------|                          N341256   | C405  |     |  |
 *|  | |       |                                    |       |     |  |
 *|  | | C71   |  |---------|                       |-------|     |  |
 *|--| |       |  |         |             |------|                |  |
 *  |  |-------|  |  342    |             | C379 |                |--|
 *  |  |------|   |         |             |      |                 |
 *  |  | C199 |   |         |             |------|  N341256        |
 *  |  |      |   |---------|                       N341256       |--|
 *  |  |------|                                                   |  |
 *  |   |-----|      SS22D5  SS22D4B    40MHz     |---------|     |  |
 *  |   |C353 |                                   |         |     |  |
 *  |   |-----|                                   |  C300   |     |  |
 *  |LED(x8)         SS22D2  SS22D3               |         |     |  |
 *  |   |-----|                                   |         |     |  |
 *  |   | 402 |  |---------|                      |---------|     |  |
 *  |   |-----|  |         |                                      |  |
 *  |            |  C403   |    KM681000   KM681000   KM681000    |  |
 *  |   |-----|  |         |                                      |--|
 *  |   | 402 |  |         |    KM681000   KM681000   KM681000     |
 *  |   |-----|  |---------|                                       |
 *  |--------------------------------------------------------------|
 *(logic chips omitted from the PCB layout)
 *
 *Notes:
 *      JD3          : Custom Namco connector joining this PCB to the MROM PCB with a special flat cable known as a
 *                     'DHD harness'
 *      N341256      : NKK N341256 32k x8 SRAM (x9, SOJ28)
 *      KM681000     : Samsung Electronics KM681000 128k x8 SRAM (x6, SOP32)
 *      342          : Namco custom 342  (QFP160)
 *      402          : Namco custom 402  (x2, TQFP144)
 *      C71          : Namco custom C71, actually a Texas Instruments 320C25 DSP (x2, PLCC68)
 *      C199         : Namco custom C199 (QFP100)
 *      C300         : Namco custom C300 (QFP160)
 *      C353         : Namco custom C353 (QFP120)
 *      C379         : Namco custom C379 (QFP64)
 *      C396         : Namco custom C396 (QFP160)
 *      C403         : Namco custom C403 (QFP136)
 *      C405         : Namco custom C396 (x2, QFP176)
 *      SS22D1       : PALCE 20V8H (PLCC28, labelled 'SS22D1')
 *      SS22D2       : PALCE 16V8H (PLCC20, labelled 'SS22D2')
 *      SS22D3       : PALCE 16V8H (PLCC20, labelled 'SS22D3')
 *      SS22D4B      : PALCE 16V8H (PLCC20, labelled 'SS22D4B')
 *      SS22D5       : PALCE 16V8H (PLCC20, labelled 'SS22D5')
 *      LEDS         : 8 red LEDs flash (in various pretty patterns) when the DSP PCB is active.
 *
 *
 *ROM PCB (type 1)
 *-------
 *SYSTEM SUPER22 MROM PCB 8646960400 (8646970400)
 *  |--------------------------------------------------------------|
 *  | SS22M3      TC551001(x3)                                     |
 *  | JP13                                 CG7.19D    CG5.19B      |
 *  |  PTR-L0.18K  PTR-M0.18J  PTR-U0.18F                          |
 *|--|                                     CG6.18D    CG4.18B      |
 *|  | PTR-L1.16K  PTR-M1.16J  PTR-U1.16F                   CG6.18A|
 *|  |                                     CG5.16D    CG3.16B      |
 *|J | PTR-L2.15K  PTR-M2.15J  PTR-U2.15F                   CG7.15A|
 *|R |                                     CG4.14D    CG2.14B      |
 *|4 | PTR-L3.14K  PTR-M3.14J  PTR-U3.14F                      JP1 |
 *|  |  SCG0.12L              SCG0.12F JP4 CG3.13D    CG1.13B  JP2 |
 *|  |                                 JP5                     JP3 |
 *|--|              SCG7.10J           JP6 CG2.12D    CG0.12B      |
 *  |   SCG1.10L              SCG1.10F                      SS22M1 |
 *  |                                      CG1.10D    SS22M2       |
 *  |                                                              |
 *  |   SCG2.8L     JP10      SCG2.8F      CG0.8D                 |--|
 *|--|              JP11                                          |  |
 *|  |              JP12                                          |  |
 *|  |  SCG3.7L               SCG3.7F      SS22M2     CCR-L.7B    |  |
 *|J |                                                            |  |
 *|R |                                                CCR-H.5B    |  |
 *|3 |  SCG4.5L               SCG4.5F                             |  |
 *|  |              JP7                                           |  |
 *|  |              JP8                                           |  |
 *|--|  SCG5.3L     JP9       SCG5.3F      CCR-L.3D               |  |
 *  |                                                             |--|
 *  |               SCG7.1J                CCR-H.1D                |
 *  |   SCG6.1L               SCG6.1F                              |
 *  |--------------------------------------------------------------|
 *(logic chips omitted from the PCB layout)
 *
 *Notes:
 *      Namco SS22 MROM PCBs have 2 identical sets of CG*, SCG* and CCR-L/CCR-H ROMs on the PCB.
 *      The Japanese region code '1' is appended to all game codes on all MROMs.
 *
 *      JR3, JR4     : Custom Namco connector joining this PCB to the VIDEO & DSP PCBs with a special flat cable known
 *                     as a 'DHD harness'
 *      SS22M1       : PALCE 16V8H (PLCC20, labelled 'SS22M1')
 *      SS22M2       : PALCE 20V8H (x2, PLCC28, labelled 'SS22M2')
 *      SS22M3       : PALCE 16V8H (PLCC20, labelled 'SS22M3')
 *      TC551001     : Toshiba TC551001 128k x8 SRAM (SOP32)
 *      JP1, JP2, JP3: Jumpers to configure CG* ROMs.  Hardwired to '16M' on the PCB. Alt. setting '32M'
 *      JP4, JP5, JP6: Jumpers to configure CG* ROMs.  Hardwired to '16M' on the PCB. Alt. setting '32M'
 *      JP7, JP8, JP9: Jumpers to configure SCG* ROMs. Hardwired to '16M' on the PCB. Alt. setting '32M'
 *   JP10, JP11, JP12: Jumpers to configure SCG* ROMs. Hardwired to '16M' on the PCB. Alt. setting '32M'
 *      JP13         : Jumper  to configure PTR* ROMs. Hardwired to '4M'  on the PCB. Alt. setting '8M'
 *
 *Game               ROMs populated
 *---------------------------------------------------------
 *Air Combat 22      ACS1CCRH.5B, ACS1CCRH.1D    4M SOP32
 *                   ACS1CCRL.7B, ACS1CCRL.3D   16M SOP44
 *                   ACS1CG0.12B, ACS1CG0.8D        "
 *                   ACS1CG1.13B, ACS1CG1.10D       "
 *                   ACS1CG2.14B, ACS1CG2.12D       "
 *                   ACS1CG3.16B, ACS1CG3.13D       "
 *                   ACS1CG4.18B, ACS1CG4.14D       "
 *                   ACS1CG5.19B, ACS1CG5.16D       "
 *                   ACS1CG6.18A, ACS1CG6.18D       "
 *                   ACS1CG7.15A, ACS1CG7.19D       "
 *                   ACS1SCG0.12F,ACS1SCG0.12L      "
 *                   ACS1SCG1.10F,ACS1SCG1.10L      "
 *                   ACS1PTRU0.18F               4M SOP32
 *                   ACS1PTRU1.16F                  "
 *                   ACS1PTRU2.15F                  "
 *                   ACS1PTRU3.14F                  "
 *                   ACS1PTRM0.18J                  "
 *                   ACS1PTRM1.16J                  "
 *                   ACS1PTRM2.15J                  "
 *                   ACS1PTRM3.14J                  "
 *                   ACS1PTRL0.18K                  "
 *                   ACS1PTRL1.16K                  "
 *                   ACS1PTRL2.15K                  "
 *                   ACS1PTRL3.14K                  "
 *
 *Alpine Racer 1     AR1CCRH.5B, AR1CCRH.1D      4M SOP32
 *                   AR1CCRL.7B, AR1CCRL.3D     16M SOP44
 *                   AR1CG0.12B, AR1CG0.8D          "
 *                   AR1CG1.13B, AR1CG1.10D         "
 *                   AR1CG2.14B, AR1CG2.12D         "
 *                   AR1CG3.16B, AR1CG3.13D         "
 *                   AR1CG4.18B, AR1CG4.14D         "
 *                   AR1CG5.19B, AR1CG5.16D         "
 *                   AR1CG6.18A, AR1CG6.18D         "
 *                   AR1CG7.15A, AR1CG7.19D         "
 *                   AR1SCG0.12F,AR1SCG0.12L        "
 *                   AR1SCG1.10F,AR1SCG1.10L        "
 *                   AR1PTRU0.18F                4M SOP32
 *                   AR1PTRU1.16F                   "
 *                   AR1PTRU2.15F                   "
 *                   AR1PTRU3.14F                   "
 *                   AR1PTRM0.18J                   "
 *                   AR1PTRM1.16J                   "
 *                   AR1PTRM2.15J                   "
 *                   AR1PTRM3.14J                   "
 *                   AR1PTRL0.18K                   "
 *                   AR1PTRL1.16K                   "
 *                   AR1PTRL2.15K                   "
 *                   AR1PTRL3.14K                   "
 *
 *Alpine Racer 2     ARS1CCRH.5B, ARS1CCRH.1D    4M SOP32
 *                   ARS1CCRL.7B, ARS1CCRL.3D   16M SOP44
 *                   ARS1CG0.12B, ARS1CG0.8D        "
 *                   ARS1CG1.13B, ARS1CG1.10D       "
 *                   ARS1CG2.14B, ARS1CG2.12D       "
 *                   ARS1CG3.16B, ARS1CG3.13D       "
 *                   ARS1CG4.18B, ARS1CG4.14D       "
 *                   ARS1CG5.19B, ARS1CG5.16D       "
 *                   ARS1SCG0.12F,ARS1SCG0.12L      "
 *                   ARS1PTRU0.18F               4M SOP32
 *                   ARS1PTRU1.16F                  "
 *                   ARS1PTRU2.15F                  "
 *                   ARS1PTRU3.14F                  "
 *                   ARS1PTRM0.18J                  "
 *                   ARS1PTRM1.16J                  "
 *                   ARS1PTRM2.15J                  "
 *                   ARS1PTRM3.14J                  "
 *                   ARS1PTRL0.18K                  "
 *                   ARS1PTRL1.16K                  "
 *                   ARS1PTRL2.15K                  "
 *                   ARS1PTRL3.14K                  "
 *
 *Alpine Surfer      AF1CCRH.5B, AF1CCRH.1D      4M SOP32
 *                   AF1CCRL.7B, AF1CCRL.3D     16M SOP44
 *                   AF1CG0.12B, AF1CG0.8D          "
 *                   AF1CG1.13B, AF1CG1.10D         "
 *                   AF1CG2.14B, AF1CG2.12D         "
 *                   AF1CG3.16B, AF1CG3.13D         "
 *                   AF1CG4.18B, AF1CG4.14D         "
 *                   AF1SCG0B.12F,AF1SCG0B.12L      "
 *                   AF1PTRU0.18F                4M SOP32
 *                   AF1PTRU1.16F                   "
 *                   AF1PTRM0.18J                   "
 *                   AF1PTRM1.16J                   "
 *                   AF1PTRL0.18K                   "
 *                   AF1PTRL1.16K                   "
 *
 *Aqua Jet           AJ1CCRH.5B, AJ1CCRH.1D      4M SOP32
 *                   AJ1CCRL.7B, AJ1CCRL.3D     16M SOP44
 *                   AJ1CG0.12B, AJ1CG0.8D          "
 *                   AJ1CG1.13B, AJ1CG1.10D         "
 *                   AJ1CG2.14B, AJ1CG2.12D         "
 *                   AJ1CG3.16B, AJ1CG3.13D         "
 *                   AJ1CG4.18B, AJ1CG4.14D         "
 *                   AJ1CG5.19B, AJ1CG5.16D         "
 *                   AJ1CG6.18A, AJ1CG6.18D         "
 *                   AJ1CG7.15A, AJ1CG7.19D         "
 *                   AJ1SCG0.12F,AJ1SCG0.12L        "
 *                   AJ1SCG1.10F,AJ1SCG1.10L        "
 *                   AJ1SCG2.8F, AJ1SCG2.8L         "
 *                   AJ1PTRU0.18F                4M SOP32
 *                   AJ1PTRU1.16F                   "
 *                   AJ1PTRU2.15F                   "
 *                   AJ1PTRU3.14F                   "
 *                   AJ1PTRM0.18J                   "
 *                   AJ1PTRM1.16J                   "
 *                   AJ1PTRM2.15J                   "
 *                   AJ1PTRM3.14J                   "
 *                   AJ1PTRL0.18K                   "
 *                   AJ1PTRL1.16K                   "
 *                   AJ1PTRL2.15K                   "
 *                   AJ1PTRL3.14K                   "
 *
 *Armadillo Racing   AM1CCRH.5B, AM1CCRH.1D      4M SOP32
 *                   AM1CCRL.7B, AM1CCRL.3D     16M SOP44
 *                   AM1CG0.12B, AM1CG0.8D          "
 *                   AM1CG1.13B, AM1CG1.10D         "
 *                   AM1CG2.14B, AM1CG2.12D         "
 *                   AM1CG3.16B, AM1CG3.13D         "
 *                   AM1CG4.18B, AM1CG4.14D         "
 *                   AM1CG5.19B, AM1CG5.16D         "
 *                   AM1CG6.18A, AM1CG6.18D         "
 *                   AM1CG7.15A, AM1CG7.19D         "
 *                   AM1SCG0.12F,AM1SCG0.12L        "
 *                   AM1SCG1.10F,AM1SCG1.10L        "
 *                   AM1PTRU0.18F                4M SOP32
 *                   AM1PTRU1.16F                   "
 *                   AM1PTRU2.15F                   "
 *                   AM1PTRU3.14F                   "
 *                   AM1PTRM0.18J                   "
 *                   AM1PTRM1.16J                   "
 *                   AM1PTRM2.15J                   "
 *                   AM1PTRM3.14J                   "
 *                   AM1PTRL0.18K                   "
 *                   AM1PTRL1.16K                   "
 *                   AM1PTRL2.15K                   "
 *                   AM1PTRL3.14K                   "
 *
 *Cyber Cycles       CB1CCRH.5B, CB1CCRH.1D      4M SOP32
 *                   CB1CCRL.7B, CB1CCRL.3D     16M SOP44
 *                   CB1CG0.12B, CB1CG0.8D          "
 *                   CB1CG1.13B, CB1CG1.10D         "
 *                   CB1CG2.14B, CB1CG2.12D         "
 *                   CB1CG3.16B, CB1CG3.13D         "
 *                   CB1CG4.18B, CB1CG4.14D         "
 *                   CB1CG5.19B, CB1CG5.16D         "
 *                   CB1CG6.18A, CB1CG6.18D         "
 *                   CB1SCG0.12F,CB1SCG0.12L        "
 *                   CB1SCG1.10F,CB1SCG1.10L        "
 *                   CB1PTRU0.18F                4M SOP32
 *                   CB1PTRU1.16F                   "
 *                   CB1PTRU2.15F                   "
 *                   CB1PTRU3.14F                   "
 *                   CB1PTRM0.18J                   "
 *                   CB1PTRM1.16J                   "
 *                   CB1PTRM2.15J                   "
 *                   CB1PTRM3.14J                   "
 *                   CB1PTRL0.18K                   "
 *                   CB1PTRL1.16K                   "
 *                   CB1PTRL2.15K                   "
 *                   CB1PTRL3.14K                   "
 *
 *Dirt Dash          DT1CCRH.5B, DT1CCRH.1D      4M SOP32
 *                   DT1CCRL.7B, DT1CCRL.3D     16M SOP44
 *                   DT1CG0.12B, DT1CG0.8D          "
 *                   DT1CG1.13B, DT1CG1.10D         "
 *                   DT1CG2.14B, DT1CG2.12D         "
 *                   DT1CG3.16B, DT1CG3.13D         "
 *                   DT1CG4.18B, DT1CG4.14D         "
 *                   DT1CG5.19B, DT1CG5.16D         "
 *                   DT1CG6.18A, DT1CG6.18D         "
 *                   DT1CG7.15A, DT1CG7.19D         "
 *                   DT1SCG0.12F,DT1SCG0.12L        "
 *                   DT1SCG1.10F,DT1SCG1.10L        "
 *                   DT1PTRU0.18F                4M SOP32
 *                   DT1PTRU1.16F                   "
 *                   DT1PTRU2.15F                   "
 *                   DT1PTRU3.14F                   "
 *                   DT1PTRM0.18J                   "
 *                   DT1PTRM1.16J                   "
 *                   DT1PTRM2.15J                   "
 *                   DT1PTRM3.14J                   "
 *                   DT1PTRL0.18K                   "
 *                   DT1PTRL1.16K                   "
 *                   DT1PTRL2.15K                   "
 *                   DT1PTRL3.14K                   "
 *
 *Prop Cycle         PR1CCRH.5B, PR1CCRH.1D      4M SOP32
 *                   PR1CCRL.7B, PR1CCRL.3D     16M SOP44
 *                   PR1CG0.12B, PR1CG0.8D          "
 *                   PR1CG1.13B, PR1CG1.10D         "
 *                   PR1CG2.14B, PR1CG2.12D         "
 *                   PR1CG3.16B, PR1CG3.13D         "
 *                   PR1CG4.18B, PR1CG4.14D         "
 *                   PR1CG5.19B, PR1CG5.16D         "
 *                   PR1CG6.18A, PR1CG6.18D         "
 *                   PR1CG7.15A, PR1CG7.19D         "
 *                   PR1SCG0.12F,PR1SCG0.12L        "
 *                   PR1SCG1.10F,PR1SCG1.10L        "
 *                   PR1PTRU0.18F                4M SOP32
 *                   PR1PTRU1.16F                   "
 *                   PR1PTRU2.15F                   "
 *                   PR1PTRM0.18J                   "
 *                   PR1PTRM1.16J                   "
 *                   PR1PTRM2.15J                   "
 *                   PR1PTRL0.18K                   "
 *                   PR1PTRL1.16K                   "
 *                   PR1PTRL2.15K                   "
 *
 *Time Crisis        TS1CCRH.5B, TS1CCRH.1D      4M SOP32
 *                   TS1CCRL.7B, TS1CCRL.3D     16M SOP44
 *                   TS1CG0.12B, TS1CG0.8D          "
 *                   TS1CG1.13B, TS1CG1.10D         "
 *                   TS1CG2.14B, TS1CG2.12D         "
 *                   TS1CG3.16B, TS1CG3.13D         "
 *                   TS1CG4.18B, TS1CG4.14D         "
 *                   TS1CG5.19B, TS1CG5.16D         "
 *                   TS1CG6.18A, TS1CG6.18D         "
 *                   TS1CG7.15A, TS1CG7.19D         "
 *                   TS1SCG0.12F,TS1SCG0.12L        "
 *                   TS1SCG1.10F,TS1SCG1.10L        "
 *                   TS1SCG2.8F, TS1SCG2.8L         "
 *                   TS1SCG3.7F, TS1SCG3.7L         "
 *                   TS1SCG4.5F, TS1SCG4.5L         "
 *                   TS1SCG5.3F, TS1SCG5.3L         "
 *                   TS1PTRU0.18F                4M SOP32
 *                   TS1PTRU1.16F                   "
 *                   TS1PTRU2.15F                   "
 *                   TS1PTRM0.18J                   "
 *                   TS1PTRM1.16J                   "
 *                   TS1PTRM2.15J                   "
 *                   TS1PTRL0.18K                   "
 *                   TS1PTRL1.16K                   "
 *                   TS1PTRL2.15K                   "
 *
 *Tokyo Wars         TW1CCRH.5B, TW1CCRH.1D      4M SOP32
 *                   TW1CCRL.7B, TW1CCRL.3D     16M SOP44
 *                   TW1CG0.12B, TW1CG0.8D          "
 *                   TW1CG1.13B, TW1CG1.10D         "
 *                   TW1CG2.14B, TW1CG2.12D         "
 *                   TW1CG3.16B, TW1CG3.13D         "
 *                   TW1CG4.18B, TW1CG4.14D         "
 *                   TW1CG5.19B, TW1CG5.16D         "
 *                   TW1CG6.18A, TW1CG6.18D         "
 *                   TW1CG7.15A, TW1CG7.19D         "
 *                   TW1SCG0.12F,TW1SCG0.12L        "
 *                   TW1SCG1.10F,TW1SCG1.10L        "
 *                   TW1SCG2.8F, TW1SCG2.8L         "
 *                   TW1SCG3.7F, TW1SCG3.7L         "
 *                   TW1PTRU0.18F                4M SOP32
 *                   TW1PTRU1.16F                   "
 *                   TW1PTRU2.15F                   "
 *                   TW1PTRU3.14F                   "
 *                   TW1PTRM0.18J                   "
 *                   TW1PTRM1.16J                   "
 *                   TW1PTRM2.15J                   "
 *                   TW1PTRM3.14J                   "
 *                   TW1PTRL0.18K                   "
 *                   TW1PTRL1.16K                   "
 *                   TW1PTRL2.15K                   "
 *                   TW1PTRL3.14K                   "
 *
 *
 *ROM PCB (type 2)
 *-------
 *SS22DS FLASH PCB 8650961300 (8650971300)
 *  |--------------------------------------------------------------|
 *  |     F13M  F13L                      F12J   F12E    |------|  |
 *  |                                                    |ALTERA|  |
 *  |     F12M  F12L                                     |EPMXXXX  |
 *|--|                                    F11J   F11E    |------|  |
 *|  | HM628128 F11L                                               |
 *|  | HM628128                                             DSF4   |
 *|J | HM628128 F9L                       F9J     F9E              |
 *|R |                                                             |
 *|4 | DSF5A                                                       |
 *|  |                                    F8J     F8E              |
 *|  |                                                             |
 *|--|                                                    SS22DSF3 |
 *  |           F7L   F7M                 F7J     F7E              |
 *  |                                                              |
 *  |                                                              |
 *  |                                     F6J     F6E     SS22DSF3|--|
 *|--|                                                            |  |
 *|  |                                                            |  |
 *|  |          F5L   F5M                 F5J     F5E             |  |
 *|J |                                                            |  |
 *|R |                                                            |  |
 *|3 |                                    F4J     F4E             |  |
 *|  |                                                            |  |
 *|  |          F3L   F3M                                         |  |
 *|--|                                                            |  |
 *  | SS22DSF2                            F2J     F2E             |--|
 *  |                                                              |
 *  | SS22DSF2  F1L   F1M                 F1J     F1E              |
 *  |--------------------------------------------------------------|
 *(logic chips omitted from the PCB layout)
 *
 *Notes:
 *      Namco SS22 FLASH PCBs have 2 identical sets of CG*, SCG* and CCR-L/CCR-H ROMs on the PCB.
 *
 *      JR3, JR4     : Custom Namco connector joining this PCB to the VIDEO & DSP PCBs with a special flat cable known
 *                     as a 'DHD harness'
 *      EPMXXXX      : Altera EPM??? (PLCC84, unknown chip model, possibly EPM7064, sticker on top of it blocking ID markings)
 *      DSF5A        : PALCE 16V8H (PLCC20, labelled 'DSF5A')
 *      DSF4         : PALCE 16V8H (PLCC20, labelled 'DSF4')
 *      SS22DSF3     : EPM7032 (x2, PLCC44, labelled 'SS22DSF3')
 *      SS22DSF2     : EPM7032 (x2, PLCC44, labelled 'SS22DSF2')
 *      HM628128     : Hitachi HM628128 128k x8 SRAM (TSOP32)
 *
 *Game               ROMs populated (All Intel E28F016SA TSOP56 16M FlashROMs)
 *-----------------------------------------------------------------
 *Armadillo Racing   F1E, F1J, F2E, F2J            - CCRL/CCRH
 *ROMs (prototype or
 *early test version)F4E, F4J, F5E, F5J, F6E, F6J, \
 *                   F7E, F7J, F8E, F8J, F9E, F9J, \ CGx ROMs
 *                   F11E, F11J, F12E, F12J        /
 *
 *                   F1L, F1M, F3L, F3M, F5L, F5M, \
 *                   F7L, F7M                      / SCGx ROMs
 *
 *                   F9L, F11L, F12L, F13L,        \
 *                   F12M, F13M                    / PTR ROMs
 *
 *
 *VIDEO PCB
 *---------
 *1st Revision
 *SYSTEM SUPER22 VIDEO 8646960204 (8646970204)
 *
 *2nd Revision
 *SYSTEM SUPER22 VIDEO(B) 8646961200 (8646971200)
 *
 *3rd Revision (PCB layout shown below)
 *SYSTEM SUPER22 VIDEO(C) 8646962700 (8646972700)
 *  |--------------------------------------------------------------|
 *  |                                                              |
 *  |                    HM534251BJ-8(x22)                         |
 *  |                                                   |-----|   |--|
 *  |  |---------| |---------| |---------| |---------|  |C401 |   |  |
 *  |  |         | |         | |         | |         |  |-----|   |  |
 *  |  |   304   | |   304   | |   304   | |   304   |            |  |
 *  |  |         | |         | |         | |         |  |-----|   |  |
 *  |  |         | |         | |         | |         |  |C400 |   |  |
 *  |  |---------| |---------| |---------| |---------|  |-----|   |  |
 *  |  N341256      |-----| |-----| |-----| |-----|               |  |
 *  |  N341256      |C407 | |C401 | |C401 | |C401 |  |---------|  |  |
 *  |               |-----| |-----| |-----| |-----|  |         |  |  |
 *  |   |---------|                                  |  C399   |  |--|
 *  |   |         |         |-----| |-----| |-----|  |         |   |
 *  |   |  C387   |         |C400 | |C400 | |C400 |  |         |   |
 *  |   |         |         |-----| |-----| |-----|  |---------|  |--|
 *|--|  |         |                    |-----|            N341256 |  |
 *|  |  |---------|                    |C406 |  |-----|   N341256 |  |
 *|  |  |-----|                        |-----|  |C381 |           |  |
 *|J |  |C381 |                |---------|      |-----|           |  |
 *|V |  |-----|      N341256   |         |                LC321664|  |
 *|3 |     51.2MHz   N341256   |  C404   |      |---------|       |  |
 *|  | |---------| |---------| |         |      |         |       |  |
 *|  | |         | |         | |         |      |  C361   |       |  |
 *|--| |  C374   | |  C395   | |---------|      |         |       |  |
 *  |  |         | |         | N341256          |         |       |--|
 *  |  |         | |         | N341256          |---------|        |
 *  |  |---------| |---------| N341256                    CXD1178Q |
 *  |--------------------------------------------------------------|
 *(logic chips omitted from the PCB layout)
 *
 *Notes:
 *      JV3          : Custom Namco connector joining this PCB to the MROM PCB with a special flat cable known
 *                     as a 'DHD harness'
 *      N341256      : NKK N341256 32k x8 SRAM (x9, SOJ28)
 *      HM534251BJ-8 : Hitachi HM534251BJ-8 256k x4 FASTPAGE DRAM (x22, SOJ28)
 *      LC321664     : Sanyo LC321664 64k x16 DRAM (SOJ40)
 *      CXD1178Q     : Sony CXD1178Q 8-bit RGB 3-channel D/A converter (QFP48)
 *      304          : Namco custom 304  (x4, QFP120)
 *      C361         : Namco custom C361 (QFP120)
 *      C374         : Namco custom C374 (QFP160)
 *      C381         : Namco custom C381 (x2, QFP144)
 *      C387         : Namco custom C387 (QFP160)
 *      C395         : Namco custom C395 (QFP168)
 *      C399         : Namco custom C399 (QFP160)
 *      C400         : Namco custom C400 (x4, QFP100)
 *                     - x3 on 1st Revision
 *      C401         : Namco custom C401 (x4, QFP64)
 *                     - x5 on 1st Revision
 *      C404         : Namco custom C404 (QFP208)
 *      C406         : Namco custom C406 (TQFP120)
 *      C407         : Namco custom C407 (QFP64) NOTE! On Revision A & B, this position is populated by an
 *                                                     Altera EPM7064 PLCC84 FPGA labelled 'SS22V1B'
 *                                                     The Altera chip runs very hot and fails quite often.
 *                                                     Even if a heatsink is added to the chip it still fails.
 *                                                     The failure of this chip is the primary cause of
 *                                                     video faults on Namco Super System 22 PCBs.
 *                                                     (Second reason for video faults is generally attributed
 *                                                     to failure of RAM on this PCB and/or the DSP PCB)
 *
 *
 *Motherboard PCB
 *---------------
 *1st Revision
 *SYSTEM SUPER22 MOTHER PCB 8646960602 (8646970602)
 *
 *2nd Revision
 *SYSTEM SUPER22 MOTHER(B) PCB (number not known)
 *
 *3rd Revision
 *SYSTEM SUPER22 MOTHER(C) PCB 8646960602 (8646970602)
 *|------------------------------------------------------------------|
 *| J1                  J2           J4           J6           J8    |
 *|           J10                           J5   IC2     J7          |
 *|                     J3          IC3          IC1              J9 |
 *|                                                                  |
 *| JC2 |---------------------|        |---------------------|JC1    |
 *|     |---------------------|        |---------------------|       |
 *|                                                                  |
 *| JD2 |---------------------|        |---------------------|JD1    |
 *|     |---------------------|        |---------------------|       |
 *|                                                                  |
 *|                                    |---------------------|JR1    |
 *|                                    |---------------------|       |
 *|                                                                  |
 *| JV2 |---------------------|        |---------------------|JV1    |
 *|     |---------------------|        |---------------------|       |
 *|------------------------------------------------------------------|
 *Notes:
 *      IC1     : LB1233 (DIP8)
 *      IC2, IC3: LB1235 (DIP8)
 *
 *      JC1, JC2: Connectors to plug in CPU PCB
 *      JD1, JD2: Connectors to plug in DSP PCB
 *      JR1     : Connector  to plug in MROM PCB
 *      JV1, JV2: Connectors to plug in VIDEO PCB
 *
 *      J1 : 9 pin power input socket   Pin  Use
 *                                     -----------
 *                                      1    +5V
 *                                      2    +5V
 *                                      3    +5V
 *                                      4    NC
 *                                      5    Ground
 *                                      6    Ground
 *                                      7    Ground
 *                                      8    NC
 *                                      9    +12V
 *
 *      J2 : 9 pin link connector   Pin  Use
 *                                  --------------
 *                                   1   Ring In+
 *                                   2   Ring In-
 *                                   3   Ring Out2+
 *                                   4   Ground
 *                                   5   /RXD+ (NC)
 *                                   6   /RXD- (NC)
 *                                   7   /TXD  (NC)
 *                                   8   GND   (NC)
 *                                   9   +5V   (NC)
 *
 *      J3 : 9 pin socket   Pin  Use
 *                          -------------------
 *                           1   Service Credit
 *                           2   Test
 *                           3   NC
 *                           4   +12V
 *                           5   Counter
 *                           6   NC
 *                           7   Ground
 *                           8   Coin Sw
 *                           9   NC
 *
 *      J4 : 8 pin connector  Pin  Use
 *                            -------------------------------------
 *                             1   Start
 *                             2   Left Select
 *                             3   Right Select
 *                             4   Safety Free Controls (Ski's etc)
 *                             5   Safety Lock Controls (Ski's etc)
 *                             6   NC
 *                             7   Ground
 *                             8   Ground
 *
 *      J5 : 15 pin socket   Pin  Use
 *                           ---------------
 *                            1   Relay1
 *                            2   Relay1
 *                            3   Mute
 *                            4   Mid Light
 *                            5   Left Light
 *                            6   Right Light
 *                            7   NC
 *                            8   NC
 *                            9   NC
 *                            10  NC
 *                            11  NC
 *                            12  NC
 *                            13  +12V
 *                            14  +5V
 *                            15  NC
 *
 *      J6 : 12 pin audio output connector  Pin  Use
 *                                          ----------
 *                                           1   SPKL+
 *                                           2   SPKL-
 *                                           3   SPKR+
 *                                           4   SPKR-
 *                                           5   NC
 *                                           6   NC
 *                                           7   NC
 *                                           8   NC
 *                                           9   NC
 *                                           10  NC
 *                                           11  NC
 *                                           12  NC
 *
 *      J7 : 12 pin analog controls socket   Pin  Use
 *                                           ---------------------------
 *                                            1   +5V
 *                                            2   5K Ohm Potentiometer 1 (Side Swing on Alpine Racer, Alpine Surfer etc)
 *                                            3   5K Ohm Potentiometer 2 (Tilt on Alpine Racer, Alpine Surfer etc)
 *                                            4   GND                    (Other games may use more/different pots or no pots)
 *                                            5   NC
 *                                            6   NC
 *                                            7   NC
 *                                            8   NC
 *                                            9   NC
 *                                            10  NC
 *                                            11  NC
 *                                            12  NC
 *
 *      J8 : 10 pin connector (not used?)
 *
 *      J9 : 6 pin video output socket   Pin  Use
 *                                       ---------
 *                                        1   Red
 *                                        2   Green
 *                                        3   Blue
 *                                        4   Composite Sync (VSync 15kHz interlaced)
 *                                        5   Ground
 *                                        6   NC
 *
 *      J10: 16 pin flat cable connector (only populated on Mother(C) PCB, use not known)
 *
 *
 *AMP PCB
 *-------
 *SYSTEM SUPER22 AMP(4) PCB 8647960100 (8647970100) (sticker 'AMP(2) PCB 8647961100')
 *|-----------------------------------|
 *|J1  J2   LA4705  J3   *1    *2   J5|
 *|                                   |
 *|-----------------------------------|
 *Notes:
 *      LA4705: 2-channel 15W Power Amp
 *      J1    : 3 pin power input socket   Pin  Use
 *                                         -----------
 *                                          1   +12V
 *                                          2   Ground
 *                                          3   NC
 *
 *      J2    : 4 pin dual speaker output socket   Pin  Use
 *                                                 ---------
 *                                                  1   SP1+
 *                                                  2   SP1-
 *                                                  3   SP2+
 *                                                  4   SP2-
 *
 *      J3    : 8 pin sound data input connector from Mother PCB J6   Pin  Use
 *                                                                    ----------
 *                                                                     1   SPKL+
 *                                                                     2   SPKL-
 *                                                                     3   SPKR+
 *                                                                     4   SPKR-
 *                                                                     5   NC
 *                                                                     6   NC
 *                                                                     7   NC
 *                                                                     8   NC
 *
 *      *1    : Unpopulated position for a 2nd LA4705 Power Amp
 *      *2    : J4 - Unpopulated position for another 4 pin dual speaker output socket
 *      J5    : 2 pin connector used for sound mute  Pin  Use
 *                                                   -----------
 *                                                    1   Mute
 *                                                    2   Ground
 */

#include "emu.h"
#include "includes/namcos22.h"

#include "cpu/m68000/m68000.h"
#include "cpu/tms32025/tms32025.h"
#include "speaker.h"

// 51.2MHz XTAL on video board, pixel clock of 12.8MHz (doubled in MAME because of unemulated interlacing)
// HSync - 15.7248 kHz -> htotal = 814.001
// VSync - 59.9042 Hz  -> vtotal = 524.998 (262+263)
#define PIXEL_CLOCK         (51.2_MHz_XTAL/4*2)

#define HTOTAL              (814)
#define HBEND               (0)
#define HBSTART             (640)

#define VTOTAL              (525)
#define VBEND               (0)
#define VBSTART             (480)


#define MCU_SPEEDUP         1     /* mcu idle skipping */
#define SERIAL_IO_PERIOD    (100) /* lower DSP serial I/O period */
// actual dsp serial freq is unknown, should be much higher than 100Hz of course
// serial comms doesn't work yet anyway

/*********************************************************************************************/

// Main CPU

/* SCI, prelim! */
READ32_MEMBER(namcos22_state::namcos22_sci_r)
{
	switch (offset)
	{
		case 0x0/4:
			return 0x0004 << 16;

		default:
			return 0;
	}
}

WRITE32_MEMBER(namcos22_state::namcos22_sci_w)
{
	/*
	20020000  2 R/W RX Status
	            0x01 : Frame Error
	            0x02 : Frame Received
	            0x04 : ?

	20020002  2 R/W Status/Control Flags
	            0x01 :
	            0x02 : RX flag? (cleared every vsync)
	            0x04 : RX flag? (cleared every vsync)
	            0x08 :

	20020004  2 W   FIFO Control Register
	            0x01 : sync bit enable?
	            0x02 : TX FIFO sync bit (bit-8)

	20020006  2 W   TX Control Register
	            0x01 : TX start/stop
	            0x02 : ?
	            0x10 : ?

	20020008  2 W   -
	2002000a  2 W   TX Frame Size
	2002000c  2 R/W RX FIFO Pointer (0x0000 - 0x0fff)
	2002000e  2 W   TX FIFO Pointer (0x0000 - 0x1fff)
	*/
}


// System Controller

void namcos22_state::syscon_irqlevel(offs_t offset, u8 data)
{
	int line = 1 << offset;
	int oldlevel = m_syscontrol[offset] & 7;
	int newlevel = data & 7;

	m_irq_enabled &= ~line;
	if (m_is_ss22)
		m_irq_enabled |= (newlevel != 0) ? line : 0;
	else
		m_irq_enabled |= (data & 0x10) ? line : 0; // always sets 0x30 to enable

	// change active state
	if (m_irq_state & line)
	{
		if (!(m_irq_enabled & line))
		{
			syscon_irqack(offset, 0);
		}
		else if (oldlevel != newlevel)
		{
			m_maincpu->set_input_line(oldlevel, CLEAR_LINE);
			m_maincpu->set_input_line(newlevel, ASSERT_LINE);
		}
	}
}

void namcos22_state::syscon_irqack(offs_t offset, u8 data)
{
	int line = 1 << offset;
	int level = m_syscontrol[offset] & 7;

	m_irq_state &= ~line;
	m_maincpu->set_input_line(level, CLEAR_LINE);
}

void namcos22_state::syscon_dspcontrol(offs_t offset, u8 data)
{
	if (data == m_syscontrol[offset])
		return;

	if (data == 0)
	{
		// disable DSPs
		master_enable(false);
		slave_enable(false);
		m_dsp_irq_enabled = false;
	}
	else if (data == 1)
	{
		// enable dsp and rendering subsystem
		master_enable(true);
		slave_enable(true);
		m_dsp_irq_enabled = true;
	}
	else if (data == 0xff)
	{
		// used to upload game-specific code to master/slave dsps
		master_enable(true);
		m_dsp_irq_enabled = false;
	}
}

void namcos22_state::syscon_mcucontrol(offs_t offset, u8 data)
{
	// enable/disable mcu
	m_mcu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
}

READ8_MEMBER(namcos22_state::syscon_r)
{
	return m_syscontrol[offset];
}


/* System Controller (System Super22)

0x00: vblank irq level
0x01: hblank irq level
0x02: sci irq level
0x03: unknown irq level (unused?)

0x04: vblank irq ack
0x05: hblank irq ack
0x06: sci irq ack
0x07: unknown irq ack

0x08: ?
0x09: 0x62 or 0x61
0x0a: 0x62
0x0b: 0x57

0x0c: 0x40
0x0d: 0x12
0x0e: 0x52 or 0x50
0x0f: 0x72 or 0x71

0x10: 0xe0
0x11: 0x2c
0x12: 0x50
0x13: 0xff

0x14: watchdog
0x15: ?
0x16: subcpu enable
0x17: 0x0f

0x18: ?
0x19: ?
0x1a: ?
0x1b: 0x01

0x1c: dsp control
*/
WRITE8_MEMBER(namcos22_state::ss22_syscon_w)
{
	switch (offset)
	{
		// irq level / enable irqs
		case 0x00: // vblank
		case 0x01: // hblank
		case 0x02: // SCI
		case 0x03: // unknown
			syscon_irqlevel(offset, data);
			break;

		// acknowledge irqs
		case 0x04: // vblank
		case 0x05: // hblank
		case 0x06: // SCI
		case 0x07: // unknown
			syscon_irqack(offset-4, data);
			break;

		// watchdog
		case 0x14:
			break;

		// mcu reset
		case 0x16:
			syscon_mcucontrol(offset, data);
			break;

		// dsp control
		case 0x1c:
			syscon_dspcontrol(offset, data);
			break;

		// other regs: unknown
		default:
			break;
	}

	m_syscontrol[offset] = data;
}

/*
000064: 0000 8C9A  (1)
000068: 0000 8CA2  (2)
00006C: 0000 8CAA  (3)
000070: 0000 8CB2  (4)

00008bd8: sys[0x01] := 0x01 // scanline
00008be0: sys[0x02] := 0x02 // sci
00008be8: sys[0x03] := 0x03 // unk
00008bf0: sys[0x00] := 0x04 // vblank
00008bf8: sys[0x08] := 0xff // ?
*/
INTERRUPT_GEN_MEMBER(namcos22s_state::namcos22s_interrupt)
{
	// vblank irq
	int line = 1 << 0;
	if (m_irq_enabled & line)
	{
		m_irq_state |= line;
		device.execute().set_input_line(m_syscontrol[0] & 7, ASSERT_LINE);
	}
}


/* System Controller (System22)

0x00: hblank irq level
0x01: ?
0x02: sci irq level
0x03: unknown irq level

0x04: vblank irq level
0x05: hblank irq ack
0x06: ?
0x07: sci irq ack

0x08: unknown irq ack
0x09: vblank irq ack
0x0a: ?
0x0b: ?

0x0c: ?
0x0d: ?
0x0e: ?
0x0f: ?

0x10: ?
0x11: ?
0x12: ?
0x13: ?

0x14: ?
0x15: ? (cyc1)
0x16: Watchdog timer reset
0x17: ?

0x18: 0 or 1 -> mcu reset?
0x19: ?
0x1a: 0 or 1 or 0xff -> DSP control
0x1b: ?
*/
WRITE8_MEMBER(namcos22_state::s22_syscon_w)
{
	switch (offset)
	{
		// irq level / enable irqs
		case 0x00: // hblank
		case 0x01: // ?
		case 0x02: // SCI
		case 0x03: // unknown
		case 0x04: // vblank
			syscon_irqlevel(offset, data);
			break;

		// acknowledge irqs
		case 0x05: // hblank
		case 0x06: // ?
		case 0x07: // SCI
		case 0x08: // unknown
		case 0x09: // vblank
			syscon_irqack(offset-5, data);
			break;

		// watchdog
		case 0x16:
			break;

		// mcu reset
		case 0x18:
			syscon_mcucontrol(offset, data);
			break;

		// dsp control
		case 0x1a:
			syscon_dspcontrol(offset, data);
			break;

		// other regs: unknown
		default:
			break;
	}

	m_syscontrol[offset] = data;
}

/* namcos22_interrupt
Ridge Racer:
    1:0a0b6
    2:09fe8 (rte)
    3:09fe8 (rte)
    4:09f9a (vblank)
    5:14dee (SCI)
    6:09fe8 (rte)
    7:09fe8 (rte)

Ridge Racer 2:
    1:0d10c  40000005
    2:0cfa2 (rte)
    3:0cfa2 (rte)
    4:0cfa2 (rte)
    5:0cef0
    6:1bbcc
    7:0cfa2 (rte)

Ace Driver:
    9f8 (rte)
    9fa (rte)
    9fc (rte)
    9fe (rte)
    a00
    a46
    a4c (rte)

Victory Lap:
    a54 indir to 21c2 (hblank?)
    a5a (rte)
    a5c (rte)
    a5e (rte)
    a60 irq
    abe indirect to 27f1e (SCI)
    ac4 (rte)

Cyber Commando:
    move.b  #$36, $40000002.l
    move.b  # $0, $40000003.l
    move.b  #$35, $40000004.l

    move.b  #$34, $40000004.l
*/
INTERRUPT_GEN_MEMBER(namcos22_state::namcos22_interrupt)
{
	switch (m_gametype)
	{
		case NAMCOS22_RIDGE_RACER:
		case NAMCOS22_RIDGE_RACER2:
		case NAMCOS22_RAVE_RACER:
		case NAMCOS22_ACE_DRIVER:
		case NAMCOS22_VICTORY_LAP:
			handle_driving_io();
			break;

		case NAMCOS22_CYBER_COMMANDO:
			handle_cybrcomm_io();
			break;

		default:
			break;
	}

	// vblank irq
	int line = 1 << 4;
	if (m_irq_enabled & line)
	{
		m_irq_state |= line;
		device.execute().set_input_line(m_syscontrol[4] & 7, ASSERT_LINE);
	}
}


READ16_MEMBER(namcos22_state::namcos22_shared_r)
{
	return m_shareram[offset];
}

WRITE16_MEMBER(namcos22_state::namcos22_shared_w)
{
	COMBINE_DATA(&m_shareram[offset]);
}


READ32_MEMBER(namcos22_state::namcos22_dspram_r)
{
	return m_polygonram[offset] | 0xff000000; // only d0-23 are connected
}

WRITE32_MEMBER(namcos22_state::namcos22_dspram_w)
{
	if (ACCESSING_BITS_16_23)
	{
		// only d0-23 are connected
		mem_mask |= 0xff000000;
		data = signed24(data); // !
	}
	COMBINE_DATA(&m_polygonram[offset]);
}


READ16_MEMBER(namcos22_state::namcos22_keycus_r)
{
	// Like other Namco hardware, this chip is used for protection as well as
	// reading random values in some games.
	// It works in combination with keycus_w, but not yet understood how.

	// protection (not used for all games)
	// note: some games will XOR this register against a magic value, but that doesn't mean
	// that the magic value is the keycus id. For example dirtdash XORs against $2c79, but its
	// keycus id is $01a2 evident from a simple compare.
	switch (m_gametype)
	{
		case NAMCOS22_RIDGE_RACER2:
			if (offset == 0) return 0x0172;
			break;

		case NAMCOS22_ACE_DRIVER:
			if (offset == 3) return 0x0173;
			break;

		case NAMCOS22_CYBER_COMMANDO:
			if (offset == 1) return 0x0185;
			break;

		case NAMCOS22_ALPINE_RACER:
			if (offset == 1) return 0x0187;
			break;

		case NAMCOS22_CYBER_CYCLES:
			if (offset == 0xf) return 0x0387;
			break;

		case NAMCOS22_VICTORY_LAP:
			if (offset == 2) return 0x0188;
			break;

		case NAMCOS22_DIRT_DASH:
			if (offset == 0) return 0x01a2;
			break;

		case NAMCOS22_ALPINE_SURFER:
			if (offset == 1) return 0x01a9;
			break;

		case NAMCOS22_TOKYO_WARS:
			if (offset == 4) return 0x01a8;
			break;

		default:
			break;
	}

	if (machine().side_effects_disabled())
		return 0;

	// pick a random number, but don't pick the same twice in a row
	u16 old_rng = m_keycus_rng;
	do
	{
		m_keycus_rng = machine().rand() & 0xffff;
	} while(m_keycus_rng == old_rng);

	return m_keycus_rng;
}

WRITE16_MEMBER(namcos22_state::namcos22_keycus_w)
{
	// for obfuscating keycus and/or random seed?
}

/**
 * Some port values are read serially one bit at a time via word reads at
 * 0x50000008 and 0x5000000a
 *
 * Writes to 0x50000008 and 0x5000000a reset the state of the input buffer.
 * It appears to be meant for debugging, not all games use it.
 */
READ16_MEMBER(namcos22_state::namcos22_portbit_r)
{
	u16 ret = m_portbits[offset] & 1;

	if (!machine().side_effects_disabled())
		m_portbits[offset] = m_portbits[offset] >> 1 | 0x8000;

	return ret;
}

WRITE16_MEMBER(namcos22_state::namcos22_portbit_w)
{
	m_portbits[offset] = m_custom[offset].read_safe(0xffff);
}

READ16_MEMBER(namcos22_state::namcos22_dipswitch_r)
{
	return m_dsw->read();
}

WRITE16_MEMBER(namcos22_state::namcos22_cpuleds_w)
{
	// 8 leds on cpu board, 0=on 1=off
	// on System22: two rows of 4 red leds
	// on SS22: GYRGYRGY green/yellow/red
	for (int i = 0; i < 8; i++)
		m_cpuled[i] = (~data << i & 0x80) ? 0 : 1;
}

WRITE32_MEMBER(namcos22s_state::namcos22s_chipselect_w)
{
	// assume that this register is for chip enable/disable
	// it's written many times during boot-up, and most games don't touch it afterwards (last value usually 0038 or 0838)
	// 8000: spot related (set in dirtdash night driving)
	// 4000: spot related (set in dirtdash and testmode)
	// 0800: fade related?
	// other bits: no clue
	if (ACCESSING_BITS_16_23)
		m_chipselect = data >> 16;

	// 8-bit access? (see alpinerd)
	else if (ACCESSING_BITS_24_31)
		m_chipselect = data >> 24;
}


// System22
void namcos22_state::namcos22_am(address_map &map)
{
	/**
	 * Program ROM (2M bytes)
	 * Mounted position: LLB: CPU 4D, LMB: CPU 2D, UMB: CPU 8D, UUB: CPU 6D
	 * Known ROM chip type: TI TMS27C040-10, ST M27C4001-10, M27C4001-12Z
	 */
	map(0x00000000, 0x001fffff).rom();

	/**
	 * Main RAM (128K bytes)
	 * Mounted position: CPU 3D, 5D, 7D, 9D
	 * Known DRAM chip type: TC55328P-25, N3441256P-15
	 */
	map(0x10000000, 0x1001ffff).ram().mirror(0x08000000);

	/**
	 * KEYCUS
	 * Mounted position: CPU 13R
	 * Known chip type:
	 *     C370  (Ridge Racer, Ridge Racer 2)
	 *     C388  (Rave Racer)
	 *     C389? (Cyber Cycles)
	 *     C392? (Ace Driver Victory Lap)
	 */
	map(0x20000000, 0x2000000f).rw(FUNC(namcos22_state::namcos22_keycus_r), FUNC(namcos22_state::namcos22_keycus_w));

	/**
	 * C139 SCI Buffer
	 * Mounted position: CPU 4N
	 * Known chip type: M5M5179AP-25 (8k x 9bit SRAM)
	 *
	 * Note: Boot time check: 20010000 - 20011fff / bits=0x000001ff
	 *
	 *     20010000 - 20011fff  TX Buffer
	 *     20012000 - 20013fff  RX FIFO Buffer (also used for TX Buffer)
	 */
	map(0x20010000, 0x20013fff).ram();

	/**
	 * C139 SCI Register
	 * Mounted position: CPU 4R
	 *
	 *     20020000  2  R/W RX Status
	 *         0x01 : Frame Error
	 *         0x02 : Frame Received
	 *         0x04 : ?
	 *
	 *     20020002  2  R/W Status/Control Flags
	 *         0x01 :
	 *         0x02 : RX flag? (cleared every vsync)
	 *         0x04 : RX flag? (cleared every vsync)
	 *         0x08 :
	 *
	 *     20020004  2  W   FIFO Control Register
	 *         0x01 : sync bit enable?
	 *         0x02 : TX FIFO sync bit (bit-8)
	 *
	 *     20020006  2  W   TX Control Register
	 *         0x01 : TX start/stop
	 *         0x02 : ?
	 *         0x10 : ?
	 *
	 *     20020008  2  W   -
	 *     2002000a  2  W   TX Frame Size
	 *     2002000c  2  R/W RX FIFO Pointer (0x0000 - 0x0fff)
	 *     2002000e  2  W   TX FIFO Pointer (0x0000 - 0x1fff)
	 */
	map(0x20020000, 0x2002000f).rw(FUNC(namcos22_state::namcos22_sci_r), FUNC(namcos22_state::namcos22_sci_w));

	/**
	 * System Controller: Interrupt Control, Peripheral Control
	 *
	 */
	map(0x40000000, 0x4000001f).rw(FUNC(namcos22_state::syscon_r), FUNC(namcos22_state::s22_syscon_w));

	/**
	 * Unknown Device (optional for diagnostics?)
	 *
	 * zero means not-connected.
	 * may be related to device at 0x90040000
	 */
	map(0x48000000, 0x4800003f).noprw();

	/**
	 * DIPSW
	 *     0x50000000 - DIPSW3
	 *     0x50000001 - DIPSW2
	 */
	map(0x50000000, 0x50000003).rw(FUNC(namcos22_state::namcos22_dipswitch_r), FUNC(namcos22_state::namcos22_cpuleds_w)).umask32(0xffff0000);
	map(0x50000008, 0x5000000b).rw(FUNC(namcos22_state::namcos22_portbit_r), FUNC(namcos22_state::namcos22_portbit_w));

	/**
	 * EEPROM
	 * Mounted position: CPU 9E
	 * Known chip type: HN58C65P-25 (8k x 8bit EEPROM)
	 */
	map(0x58000000, 0x58001fff).rw(m_eeprom, FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));

	/**
	 * C74 (Mitsubishi M37702 MCU) Shared RAM (0x60004000 - 0x6000bfff)
	 * Mounted position: CPU 11L, 12L
	 * Known chip type: TC55328P-25, N341256P-15
	 *
	 * DATA ROM for C74 (SEQ data and external code):
	 * Known chip type: NEC D27C4096D-12
	 * Notes: C74(CPU PCB) sends/receives I/O data from C74(I/O PCB) by SIO.
	 *
	 * 0x60004020 b4 = 1 : ???
	 * 0x60004022.w     Volume(R)
	 * 0x60004024.w     Volume(L)
	 * 0x60004026.w     Volume(R) (maybe rear channels, not put on real PCB)
	 * 0x60004028.w     Volume(L) (maybe rear channels, not put on real PCB)
	 * 0x60004030 b0     : system type 0
	 * 0x60004030 b1 = 0 : COIN2
	 * 0x60004030 b2 = 0 : TEST SW
	 * 0x60004030 b3 = 0 : SERVICE SW
	 * 0x60004030 b4 = 0 : COIN1
	 * 0x60004030 b5     : system type 1
	 * (system type on RR2 (00:50inch, 01:two in one, 20:standard, 21:deluxe))
	 * 0x60004031 b0 = 0 : SWITCH1 (for manual transmission)
	 * 0x60004031 b1 = 0 : SWITCH2
	 * 0x60004031 b2 = 0 : SWITCH3
	 * 0x60004031 b3 = 0 : SWITCH4
	 * 0x60004031 b4 = 0 : CLUTCH
	 * 0x60004031 b6 = 0 : VIEW SW
	 * 0x60004032.w     Handle A/D (=steering wheel, default of center value is different in each game)
	 * 0x60004034.w     Gas A/D
	 * 0x60004036.w     Brake A/D
	 * 0x60004038.w     A/D3 (reserved)
	 * (some GOUT (general outputs for lamps, etc) is also mapped this area)
	 * 0x60004080       Data/Code for Sub-CPU
	 * 0x60004200       Data/Code for Sub-CPU
	 * 0x60005000 - 0x6000bfff  Sound Work
	 * +0x0000 - 0x003f Song Request #00 to 31
	 * +0x0100 - 0x02ff Parameter RAM from Main MPU (for SEs)
	 * +0x0300 - 0x03ff?    Song Title (put messages here from Sound CPU)
	 */
	map(0x60000000, 0x60003fff).nopw();
	map(0x60004000, 0x6000bfff).rw(FUNC(namcos22_state::namcos22_shared_r), FUNC(namcos22_state::namcos22_shared_w));

	/**
	 * C71 (TI TMS320C25 DSP) Shared RAM (0x70000000 - 0x70020000)
	 * Mounted position:
	 *     C71: CPU 15R, 21R
	 *     RAM: CPU 15K, 13E, 12E
	 * Known chip type: TC55328P-25, N341256P-15
	 * Notes: connected bits = 0x00ffffff (24bit)
	 */
	map(0x70000000, 0x7001ffff).rw(FUNC(namcos22_state::namcos22_dspram_r), FUNC(namcos22_state::namcos22_dspram_w)).share("polygonram");

	/**
	 * LED on PCB(?)
	 */
	map(0x90000000, 0x90000003).nopw();

	/**
	 * Depth-cueing Look-up Table (fog density between near to far)
	 * Mounted position: VIDEO 8P
	 * Known chip type: TC55328P-25
	 */
	map(0x90010000, 0x90017fff).ram().share("czram");

	/**
	 * C305 (Display Controller)
	 * Mounted position: VIDEO 7D (C305)
	 * Notes: Boot time check: 0x90020100 - 0x9002027f
	 */
	map(0x90020000, 0x90027fff).ram().share("video_mixer");

	/**
	 * Mounted position: VIDEO 6B, 7B, 8B (near C305)
	 * Note: 0xff00-0xffff are for Tilemap (16 x 16)
	 */
	map(0x90028000, 0x9003ffff).ram().w(FUNC(namcos22_state::namcos22_paletteram_w)).share("paletteram");

	/**
	 * unknown (option)
	 * Note: This device may be optional. This may relate to device at 0x48000000
	 */
	map(0x90040000, 0x9007ffff).nopr(); /* diagnostic ROM? */

	/**
	 * Tilemap PCG Memory
	 */
	map(0x90080000, 0x9009dfff).ram().w(FUNC(namcos22_state::namcos22_cgram_w)).share("cgram");

	/**
	 * Tilemap Memory (64 x 64)
	 * Mounted position: VIDEO  2K
	 * Known chip type: HM511664 (64k x 16bit SRAM)
	 * Note: Self test: 90084000 - 9009ffff
	 */
	map(0x9009e000, 0x9009ffff).ram().w(FUNC(namcos22_state::namcos22_textram_w)).share("textram");

	/**
	 * Tilemap Register
	 * Mounted position: unknown
	 */
	map(0x900a0000, 0x900a000f).rw(FUNC(namcos22_state::namcos22_tilemapattr_r), FUNC(namcos22_state::namcos22_tilemapattr_w));
}


// System Super22
void namcos22s_state::namcos22s_am(address_map &map)
{
	map(0x000000, 0x3fffff).rom();
	map(0x400000, 0x40001f).rw(FUNC(namcos22s_state::namcos22_keycus_r), FUNC(namcos22s_state::namcos22_keycus_w));
	map(0x410000, 0x413fff).ram(); // C139 SCI buffer
	map(0x420000, 0x42000f).rw(FUNC(namcos22s_state::namcos22_sci_r), FUNC(namcos22s_state::namcos22_sci_w)); // C139 SCI registers
	map(0x430000, 0x430003).w(FUNC(namcos22s_state::namcos22_cpuleds_w)).umask32(0xffff0000);
	map(0x440000, 0x440003).r(FUNC(namcos22s_state::namcos22_dipswitch_r)).umask32(0xffff0000);
	map(0x450008, 0x45000b).rw(FUNC(namcos22s_state::namcos22_portbit_r), FUNC(namcos22s_state::namcos22_portbit_w));
	map(0x460000, 0x463fff).rw(m_eeprom, FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask32(0xff00ff00);
	map(0x700000, 0x70001f).rw(FUNC(namcos22s_state::syscon_r), FUNC(namcos22s_state::ss22_syscon_w));
	map(0x800000, 0x800003).w(FUNC(namcos22s_state::namcos22s_chipselect_w));
	map(0x810000, 0x81000f).rw(FUNC(namcos22s_state::namcos22s_czattr_r), FUNC(namcos22s_state::namcos22s_czattr_w));
	map(0x810200, 0x8103ff).rw(FUNC(namcos22s_state::namcos22s_czram_r), FUNC(namcos22s_state::namcos22s_czram_w));
	map(0x820000, 0x8202ff).nopw(); // leftover of old (non-super) video mixer device
	map(0x824000, 0x8243ff).ram().share("video_mixer");
	map(0x828000, 0x83ffff).ram().w(FUNC(namcos22s_state::namcos22_paletteram_w)).share("paletteram");
	map(0x860000, 0x860007).rw(FUNC(namcos22s_state::spotram_r), FUNC(namcos22s_state::spotram_w));
	map(0x880000, 0x89dfff).ram().w(FUNC(namcos22s_state::namcos22_cgram_w)).share("cgram");
	map(0x89e000, 0x89ffff).ram().w(FUNC(namcos22s_state::namcos22_textram_w)).share("textram");
	map(0x8a0000, 0x8a000f).rw(FUNC(namcos22s_state::namcos22_tilemapattr_r), FUNC(namcos22s_state::namcos22_tilemapattr_w));
	map(0x900000, 0x90ffff).ram().share("vics_data");
	map(0x940000, 0x94007f).rw(FUNC(namcos22s_state::namcos22s_vics_control_r), FUNC(namcos22s_state::namcos22s_vics_control_w)).share("vics_control");
	map(0x980000, 0x9affff).ram().share("spriteram"); // C374
	map(0xa04000, 0xa0bfff).rw(FUNC(namcos22s_state::namcos22_shared_r), FUNC(namcos22s_state::namcos22_shared_w)); // COM RAM
	map(0xc00000, 0xc1ffff).rw(FUNC(namcos22s_state::namcos22_dspram_r), FUNC(namcos22s_state::namcos22_dspram_w)).share("polygonram");
	map(0xe00000, 0xe3ffff).ram(); // workram
}


// Time Crisis gun
READ16_MEMBER(namcos22s_state::timecris_gun_r)
{
	u16 xpos = m_opt[0]->read();
	u16 ypos = m_opt[1]->read();
	// ypos is not completely understood yet, there should be a difference between case 1 and 2
	// game determines real y = 430004 + 430008

	// use screen edges for off-screen
	const u16 xmin = m_opt[0]->field(0xffff)->minval();
	const u16 xmax = m_opt[0]->field(0xffff)->maxval();
	const u16 ymin = m_opt[1]->field(0xffff)->minval();
	const u16 ymax = m_opt[1]->field(0xffff)->maxval();
	if (xpos == xmin || xpos == xmax || ypos == ymin || ypos == ymax)
		xpos = ypos = 0;

	switch (offset)
	{
		case 0: // 430000
			return xpos;

		case 1: // 430004
		case 2: // 430008
			return ypos;

		default:
			return 0;
	}
}

void namcos22s_state::timecris_am(address_map &map)
{
	namcos22s_am(map);
	map(0x430000, 0x43000f).r(FUNC(namcos22s_state::timecris_gun_r)).umask32(0xffff0000);
}


// Alpine Surfer protection
READ32_MEMBER(namcos22s_state::alpinesa_prot_r)
{
	return m_alpinesa_protection;
}

WRITE32_MEMBER(namcos22s_state::alpinesa_prot_w)
{
	switch (data)
	{
		case 0:
			m_alpinesa_protection = 0;
			break;

		case 1:
			m_alpinesa_protection = 1;
			break;

		case 3:
			m_alpinesa_protection = 2;
			break;

		default:
			break;
	}
}

void namcos22s_state::alpinesa_am(address_map &map)
{
	namcos22s_am(map);
	map(0x200000, 0x200003).r(FUNC(namcos22s_state::alpinesa_prot_r));
	map(0x300000, 0x300003).w(FUNC(namcos22s_state::alpinesa_prot_w));
}



/*********************************************************************************************/

// DSPs

void namcos22_state::master_enable(bool enable)
{
	m_master->set_input_line(INPUT_LINE_RESET, enable ? CLEAR_LINE : ASSERT_LINE);
}

void namcos22_state::slave_enable(bool enable)
{
	m_slave->set_input_line(INPUT_LINE_RESET, enable ? CLEAR_LINE : ASSERT_LINE);
	m_slave_simulation_active = enable;
}


READ16_MEMBER(namcos22_state::namcos22_dspram16_r)
{
	u32 value = m_polygonram[offset];

	switch (m_dspram_bank & 3)
	{
		case 0:
			value &= 0xffff;
			break;

		case 1:
			value >>= 16;
			break;

		case 2:
			if (!machine().side_effects_disabled())
				m_dspram16_latch = value >> 16;
			value &= 0xffff;
			break;

		case 3:
			// ready status?
			return 0;
	}

	return value;
}

WRITE16_MEMBER(namcos22_state::namcos22_dspram16_w)
{
	u32 value = m_polygonram[offset];
	u16 lo = value & 0xffff;
	u16 hi = value >> 16;

	switch (m_dspram_bank & 3)
	{
		case 0:
			COMBINE_DATA(&lo);
			break;

		case 1:
			COMBINE_DATA(&hi);
			break;

		case 2:
			COMBINE_DATA(&lo);
			hi = m_dspram16_latch;
			break;

		default:
			break;
	}

	m_polygonram[offset] = (hi << 16) | lo;
}

WRITE16_MEMBER(namcos22_state::namcos22_dspram16_bank_w)
{
	COMBINE_DATA(&m_dspram_bank);
}


void namcos22_state::point_write(offs_t offs, u32 data)
{
	offs &= 0x00ffffff; /* 24 bit addressing */
	if (m_is_ss22)
	{
		if (offs >= 0xf80000 && offs < 0xfa0000)
			m_pointram[offs - 0xf80000] = data & 0x00ffffff;
	}
	else
	{
		if (offs >= 0xf00000 && offs < 0xf20000)
			m_pointram[offs - 0xf00000] = data & 0x00ffffff;
	}
}

s32 namcos22_state::pointram_read(offs_t offs) // called from point_read
{
	s32 result = -1;
	if (m_is_ss22)
	{
		if (offs >= 0xf80000 && offs < 0xfa0000)
			result = m_pointram[offs - 0xf80000];
	}
	else
	{
		if (offs >= 0xf00000 && offs < 0xf20000)
			result = m_pointram[offs - 0xf00000];
	}

	// sign extend or crop
	return signed24(result);
}


WRITE16_MEMBER(namcos22_state::point_address_w)
{
	m_point_address <<= 16;
	m_point_address |= data;
}

WRITE16_MEMBER(namcos22_state::point_loword_iw)
{
	m_point_data |= data;
	point_write(m_point_address++, m_point_data);
}

WRITE16_MEMBER(namcos22_state::point_hiword_w)
{
	m_point_data = data << 16;
}

READ16_MEMBER(namcos22_state::point_loword_r)
{
	return point_read(m_point_address) & 0xffff;
}

READ16_MEMBER(namcos22_state::point_hiword_ir)
{
	// high bit is unknown busy signal (ridgerac, ridgera2, raveracw, cybrcomm)
	return 0x8000 | (point_read(m_point_address++) >> 16 & 0x00ff);
}


READ16_MEMBER(namcos22_state::pdp_status_r)
{
	return m_dsp_master_bioz;
}

READ16_MEMBER(namcos22_state::pdp_begin_r)
{
	if (machine().side_effects_disabled())
		return 0;

	/**
	* This presumably kickstarts the PDP(polygon display parser/processor?)
	* It parses through the displaylist and sends commands to the 3D render device.
	* In MAME, this main task is done in simulate_slavedsp instead. Ideally, we'd make the PDP a device with execute_run
	* SS22 supports more than just "goto" and render commands, they are handled here.
	*/
	m_pdp_frame = m_screen->frame_number();
	if (m_screen->vblank())
		m_pdp_frame++;
	m_pdp_render_done = true;

	m_dsp_master_bioz = 1;
	u16 offs = (m_is_ss22) ? pdp_polygonram_read(0x7fff) : m_pdp_base;

	if (m_is_ss22)
		pdp_handle_commands(offs);

	return 0;
}

void namcos22_state::pdp_handle_commands(u16 offs)
{
	for (;;)
	{
		offs &= 0x7fff;
		u16 start = offs;
		u16 cmd = pdp_polygonram_read(offs++);
		u32 srcAddr;
		u32 dstAddr;
		u16 numWords;
		u32 data;
		switch (cmd)
		{
			case 0xfff0:
				// NOP? used in 'PDP LOOP TEST'
				break;

			case 0xfff5:
				// write to point ram
				dstAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				data    = pdp_polygonram_read(offs++); // 24 bit data
				point_write(dstAddr, data);
				break;

			case 0xfff6:
				/* read word from point ram */
				srcAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				dstAddr = pdp_polygonram_read(offs++); // CommRAM address; receives 24 bit PointRAM data
				data    = point_read(srcAddr);
				pdp_polygonram_write(dstAddr, data);
				break;

			case 0xfff7:
				// block move (CommRAM to CommRAM)
				srcAddr  = pdp_polygonram_read(offs++);
				dstAddr  = pdp_polygonram_read(offs++);
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = pdp_polygonram_read(srcAddr++);
					pdp_polygonram_write(dstAddr++, data);
				}
				break;

			case 0xfff8:
				// unknown
				data = pdp_polygonram_read(offs++); // address probably, whatfor?
				break;

			case 0xfff9:
				// unknown, modify pointram somehow?
				logerror("unknown PDP cmd=0x%04x, offs=0x%x\n", cmd, 4 * (offs - 1));
				return;

			case 0xfffa:
				// read block from point ram
				srcAddr  = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				dstAddr  = pdp_polygonram_read(offs++); // CommRAM address; receives data
				numWords = pdp_polygonram_read(offs++); // block size
				while (numWords--)
				{
					data = point_read(srcAddr++);
					pdp_polygonram_write(dstAddr++, data);
				}
				break;

			case 0xfffb:
				// write block to point ram
				dstAddr  = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				numWords = pdp_polygonram_read(offs++); // block size
				while (numWords--)
				{
					data = pdp_polygonram_read(offs++); // 24 bit source data
					point_write(dstAddr++, data);
				}
				break;

			case 0xfffc:
				// point ram to point ram
				srcAddr  = pdp_polygonram_read(offs++);
				dstAddr  = pdp_polygonram_read(offs++);
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = point_read(srcAddr++);
					point_write(dstAddr++, data);
				}
				break;

			case 0xfffd:
				// direct command to render device
				// len -> command (eg. BB0003) -> data
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = pdp_polygonram_read(offs++);
					//namcos22_WriteDataToRenderDevice(data);
				}
				break;

			case 0xfffe:
				// unknown
				data = pdp_polygonram_read(offs++); // ??? (usually 0x400 or 0)
				break;

			case 0xffff:
				// "goto" command
				offs = pdp_polygonram_read(offs) & 0x7fff;
				if (offs == start)
				{
					// MAME will get stuck with a "goto self", so bail out
					// in reality, the cpu can overwrite this address or retrigger pdp_begin
					return;
				}
				break;

			default:
				logerror("unknown PDP cmd=0x%04x, offs=0x%x\n", cmd, 4 * (offs - 1));
				return;
		}
	}
}

READ16_MEMBER(namcos22_state::dsp_hold_signal_r)
{
	/* STUB */
	return 0;
}

WRITE16_MEMBER(namcos22_state::dsp_hold_ack_w)
{
	/* STUB */
}

WRITE16_MEMBER(namcos22_state::dsp_xf_output_w)
{
	/* STUB */
}

WRITE16_MEMBER(namcos22_state::dsp_unk2_w)
{
	/**
	* Used by Ridge Racer (Japan) to specify baseaddr
	* for post-processed display-list output.
	*
	* Prop Cycle doesn't use this; instead it writes this
	* addr to the uppermost word of CommRAM.
	*/
	m_pdp_base = data;
}

READ16_MEMBER(namcos22_state::dsp_unk_port3_r)
{
	m_dsp_master_bioz = 0;
	m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_READY;
	return 0;
}

WRITE16_MEMBER(namcos22_state::upload_code_to_slave_dsp_w)
{
	switch (m_dsp_upload_state)
	{
		case NAMCOS22_DSP_UPLOAD_READY:
			logerror("UPLOAD_READY; cmd = 0x%x\n", data);

			switch (data)
			{
				case 0x00:
					slave_enable(false);
					break;

				case 0x01:
					m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DEST;
					break;

				case 0x02:
					/* custom IC poke */
					break;

				case 0x03:
					slave_enable(true);
					break;

				case 0x04:
					break;

				case 0x10:
					/* serial i/o related? */
					slave_enable(true);
					break;

				default:
					logerror("%08x: master port#7: 0x%04x\n", m_master->pcbase(), data);
					break;
			}
			break;

		case NAMCOS22_DSP_UPLOAD_DEST:
			m_UploadDestIdx = data;
			m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DATA;
			break;

		case NAMCOS22_DSP_UPLOAD_DATA:
			m_slave_extram[m_UploadDestIdx & 0x1fff] = data;
			m_UploadDestIdx++;
			break;

		default:
			break;
	}
}

READ16_MEMBER(namcos22_state::dsp_unk8_r)
{
	/* bit 0x0001 is busy signal */
	return 0x0000;
}

READ16_MEMBER(namcos22_state::custom_ic_status_r)
{
	/* bit 0x0001 signals completion */
	return 0x0063;
}

READ16_MEMBER(namcos22_state::dsp_upload_status_r)
{
	/* bit 0x0001 is polled to confirm that code/data has been successfully uploaded to the slave dsp via port 0x7. */
	return 0x0000;
}

WRITE16_MEMBER(namcos22_state::slave_serial_io_w)
{
	m_SerialDataSlaveToMasterNext = data;
	logerror("slave_serial_io_w(%04x)\n", data);
}

READ16_MEMBER(namcos22_state::master_serial_io_r)
{
	logerror("master_serial_io_r() == %04x\n", m_SerialDataSlaveToMasterCurrent);
	return m_SerialDataSlaveToMasterCurrent;
}

INTERRUPT_GEN_MEMBER(namcos22_state::dsp_vblank_irq)
{
	if (m_dsp_irq_enabled)
		device.execute().set_input_line(TMS32025_INT0, HOLD_LINE);
}

TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_serial_pulse)
{
	if (m_dsp_irq_enabled)
	{
		m_SerialDataSlaveToMasterCurrent = m_SerialDataSlaveToMasterNext;

		m_master->set_input_line(TMS32025_RINT, HOLD_LINE);
		m_master->set_input_line(TMS32025_XINT, HOLD_LINE);
		m_slave->set_input_line(TMS32025_RINT, HOLD_LINE);
		m_slave->set_input_line(TMS32025_XINT, HOLD_LINE);
	}
}

WRITE16_MEMBER(namcos22_state::dsp_unk_porta_w)
{
}

WRITE16_MEMBER(namcos22_state::dsp_led_w)
{
	/* I believe this port controls diagnostic LEDs on the DSP PCB. */
}

/**
 * master dsp usage pattern:
 *
 * 4059: out  $10,PA$8
 * 405A: in   $09,PA$8; lac  $09,0h; andk 0001h,0h; bnz  $405A *
 * 4060: out  $11,PA$8
 *
 * 4061: out  $10,PA$F
 * 4062: nop; rpt  *+; out  *+,PA$C // send data to 'render device'
 * 4065: out  $11,PA$F
 *
 * 4066: out  $10,PA$9
 * 4067: nop
 * 4068: out  $11,PA$9
 **************************************************************
 * 0x03a2 // 0x0fff zcode lo
 * 0x0001 // 0x000f zcode hi
 * 0xbd00 // color
 * 0x13a2 // flags
 *
 * 0x0100 0x009c // u,v
 * 0x0072 0xf307 // sx,sy
 * 0x602b 0x9f28 // i,zpos
 *
 * 0x00bf 0x0060 // u,v
 * 0x0040 0xf3ec // sx,sy
 * 0x602b 0xad48 // i,zpos
 *
 * 0x00fb 0x00ca // u,v
 * 0x0075 0xf205 // sx,sy
 * 0x602b 0x93e8 // i,zpos
 *
 * 0x00fb 0x00ca // u,v
 * 0x0075 0xf205 // sx,sy
 * 0x602b 0x93e8 // i,zpos
 */
WRITE16_MEMBER(namcos22_state::dsp_unk8_w)
{
	m_RenderBufSize = 0;
	m_render_refresh = true; // this one is more likely controlled by slavedsp somewhere
}

WRITE16_MEMBER(namcos22_state::master_render_device_w)
{
	if (m_RenderBufSize < NAMCOS22_MAX_RENDER_CMD_SEQ)
	{
		m_RenderBufData[m_RenderBufSize++] = data;
		if (m_RenderBufSize == NAMCOS22_MAX_RENDER_CMD_SEQ)
		{
			draw_direct_poly(m_RenderBufData);
		}
	}
}

void namcos22_state::master_dsp_program(address_map &map)
{
	map(0x0000, 0x0fff).rom(); /* internal ROM (4k words) */
	map(0x4000, 0x7fff).ram().share("masterextram").nopw();
}

void namcos22_state::master_dsp_data(address_map &map)
{
	map(0x1000, 0x3fff).ram();
	map(0x4000, 0x7fff).ram().share("masterextram");
	map(0x8000, 0xffff).rw(FUNC(namcos22_state::namcos22_dspram16_r), FUNC(namcos22_state::namcos22_dspram16_w));
}

void namcos22_state::master_dsp_io(address_map &map)
{
	map(0x0, 0x0).rw(FUNC(namcos22_state::point_loword_r), FUNC(namcos22_state::point_loword_iw));
	map(0x1, 0x1).rw(FUNC(namcos22_state::point_hiword_ir), FUNC(namcos22_state::point_hiword_w));
	map(0x2, 0x2).rw(FUNC(namcos22_state::pdp_begin_r), FUNC(namcos22_state::dsp_unk2_w));
	map(0x3, 0x3).rw(FUNC(namcos22_state::dsp_unk_port3_r), FUNC(namcos22_state::point_address_w));
	map(0x4, 0x4).nopw(); /* unknown */
	map(0x7, 0x7).w(FUNC(namcos22_state::upload_code_to_slave_dsp_w));
	map(0x8, 0x8).rw(FUNC(namcos22_state::dsp_unk8_r), FUNC(namcos22_state::dsp_unk8_w)); /* trigger irq? */
	map(0x9, 0x9).r(FUNC(namcos22_state::custom_ic_status_r)).nopw(); /* trigger irq? */
	map(0xa, 0xa).w(FUNC(namcos22_state::dsp_unk_porta_w));
	map(0xb, 0xb).nopw(); /* RINT-related? */
	map(0xc, 0xc).w(FUNC(namcos22_state::master_render_device_w));
	map(0xd, 0xd).w(FUNC(namcos22_state::namcos22_dspram16_bank_w));
	map(0xe, 0xe).w(FUNC(namcos22_state::dsp_led_w));
	map(0xf, 0xf).r(FUNC(namcos22_state::dsp_upload_status_r)).nopw();
}


READ16_MEMBER(namcos22_state::dsp_slave_bioz_r)
{
	/* STUB */
	return 1;
}

READ16_MEMBER(namcos22_state::dsp_slave_port3_r)
{
	return 0x0010; /* ? */
}

READ16_MEMBER(namcos22_state::dsp_slave_port4_r)
{
	return 0;
	//return ReadDataFromSlaveBuf();
}

READ16_MEMBER(namcos22_state::dsp_slave_port5_r)
{
#if 0
	int numWords = SlaveBufSize();
	int mode = 2;
	return (numWords<<4) | mode;
#endif
	return 0;
}

READ16_MEMBER(namcos22_state::dsp_slave_port6_r)
{
	/* bit 0x9 indicates whether device at port2 is ready to receive data */
	/* bit 0xd indicates whether data is available from port4 */
	return 0;
}

WRITE16_MEMBER(namcos22_state::dsp_slave_portc_w)
{
	/* Unknown; used before transmitting a command sequence. */
}

READ16_MEMBER(namcos22_state::dsp_slave_port8_r)
{
	/* This reports  status of the device mapped at port 0xb. */
	/* The slave dsp waits for bit 0x0001 to be zero before writing a new command sequence. */
	return 0; /* status */
}

READ16_MEMBER(namcos22_state::dsp_slave_portb_r)
{
	/* The slave DSP reads before transmitting a command sequence. */
	return 0;
}

WRITE16_MEMBER(namcos22_state::dsp_slave_portb_w)
{
	/* The slave dsp uses this to transmit a command sequence to an external device. */
}

void namcos22_state::slave_dsp_program(address_map &map)
{
	map(0x0000, 0x0fff).rom(); /* internal ROM */
	map(0x8000, 0x9fff).ram().share("slaveextram").nopw();
}

void namcos22_state::slave_dsp_data(address_map &map)
{
	map(0x8000, 0x9fff).ram().share("slaveextram");
}

void namcos22_state::slave_dsp_io(address_map &map)
{
	/* unknown signal */
	map(0x3, 0x3).r(FUNC(namcos22_state::dsp_slave_port3_r));

	map(0x4, 0x4).r(FUNC(namcos22_state::dsp_slave_port4_r));
	map(0x5, 0x5).r(FUNC(namcos22_state::dsp_slave_port5_r));
	map(0x6, 0x6).r(FUNC(namcos22_state::dsp_slave_port6_r)).nopw();

	/* render device state */
	map(0x8, 0x8).r(FUNC(namcos22_state::dsp_slave_port8_r)).nopw();

	/* render device */
	map(0xb, 0xb).rw(FUNC(namcos22_state::dsp_slave_portb_r), FUNC(namcos22_state::dsp_slave_portb_w));

	map(0xc, 0xc).w(FUNC(namcos22_state::dsp_slave_portc_w));
}


/*********************************************************************************************/

/*
  MCU memory map
  --------------
  000000-00027f: internal MCU registers and RAM
  002000-002fff: C352 PCM chip
  004000-00bfff: shared RAM with host CPU
  00c000-00ffff: BIOS ROM (internal on System22, external on Super)
  200000-27ffff: data ROM
  301000-301001: watchdog?
  308000-308003: unknown (I/O?)

  pin hookups
  -----------
  5 (IRQ0): C383 custom (probably vsync)
  7 (IRQ2): 74F244 at 8c, pin 3

  port assignments
  ----------------
  port 4: "bankswitches" the controls read at port 5, probably other functions too
  port 5: on read, digital controls (buttons, coins, start, service switch)
          on write, various outputs (lamps, the fan in prop cycle, etc)
  ADC   : analog inputs

*/

// System22 37702

READ8_MEMBER(namcos22_state::mcu_port4_s22_r)
{
	// for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role
	return 0x10;
}

READ8_MEMBER(namcos22_state::iomcu_port4_s22_r)
{
	// for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role
	return 0x00;
}

void namcos22_state::mcu_s22_program(address_map &map)
{
	map(0x002000, 0x002fff).rw("c352", FUNC(c352_device::read), FUNC(c352_device::write));
	map(0x004000, 0x00bfff).ram().share("shareram");
	map(0x200000, 0x27ffff).rom().region("mcu", 0);
}

void namcos22_state::iomcu_s22_program(address_map &map)
{
	// is there any external memory or MMIO on this one?
}


// System Super22 M37710

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::mcu_irq)
{
	int scanline = param;

	/* TODO: real sources of these */
	if (scanline == 480)
		m_mcu->set_input_line(M37710_LINE_IRQ0, HOLD_LINE);
	else if (scanline == 240)
		m_mcu->set_input_line(M37710_LINE_IRQ2, HOLD_LINE);
}

WRITE8_MEMBER(namcos22s_state::mb87078_gain_changed)
{
	m_c352->set_output_gain(offset ^ 3, data / 100.0);
}

/*
  SS22 MCU outputs
  ----------------
  sent to mcuoutx where x = 0 to 15
  mcuout0 = coincounter

  Air Combat 22:
  1 = start button lamp

  Alpine Racer 1,2, Alpine Surfer:
  1 = steplock motor lock
  2 = steplock motor on
  4 = start button lamp
  5 = left button lamp
  6 = right button lamp

  Aqua Jet:
  1 = ?
  2 = fan motor
  4 = start button lamp
  7 = air spring

  Armadillo Racing:
  4 = start button lamp

  Cyber Cycles:
  1 = 1 lamp
  2 = 2 lamp
  3 = 3 lamp
  4 = 4 lamp
  5 = red lamp
  6 = yellow lamp
  7 = blue lamp
  8 = green lamp
  9 = start button lamp

  Dirt Dash:
  1 = steering wheel motor on
  4 = front left valve
  5 = front right valve
  6 = rear left valve
  7 = rear right valve
  where is steering wheel torque?

  Prop Cycle:
  1 = fan motor
  2 = start button lamp

  Time Crisis:
  1 = gun solenoid

  Tokyo Wars:
  1 = start button lamp
  4 = handle solenoid
  6 = seat motor
  other: ?
*/

WRITE8_MEMBER(namcos22s_state::mcu_port4_w)
{
	// d3: input port select for port 5
	// d4: port 5 direction?
	// d5,d6: output strobe for port 5

	if (~m_mcu_iocontrol & data & 0x20)
	{
		for (int i = 0; i < 8; i++)
			m_mcuout[i] = BIT(m_mcu_outdata, i);

		machine().bookkeeping().coin_counter_w(0, m_mcu_outdata & 1);
	}
	if (~m_mcu_iocontrol & data & 0x40)
	{
		for (int i = 0; i < 8; i++)
			m_mcuout[8+i] = BIT(m_mcu_outdata, i);
	}

	m_mcu_iocontrol = data;
}

READ8_MEMBER(namcos22s_state::mcu_port4_r)
{
	return m_mcu_iocontrol;
}

WRITE8_MEMBER(namcos22s_state::mcu_port5_w)
{
	m_mcu_outdata = data;
}

READ8_MEMBER(namcos22s_state::mcu_port5_r)
{
	u16 inputs = m_inputs->read();
	return (m_mcu_iocontrol & 8) ? inputs & 0xff : inputs >> 8;
}

WRITE8_MEMBER(namcos22s_state::mcu_port6_w)
{
	// always 2?
}

READ8_MEMBER(namcos22s_state::mcu_port6_r)
{
	// discarded
	return 0;
}

template <int Channel>
u16 namcos22s_state::mcu_adc_r()
{
	return m_adc_ports[Channel].read_safe(0);
}

void namcos22s_state::mcu_program(address_map &map)
{
	map(0x002000, 0x002fff).rw("c352", FUNC(c352_device::read), FUNC(c352_device::write));
	map(0x004000, 0x00bfff).ram().share("shareram");
	map(0x00c000, 0x00ffff).rom().region("mcu", 0xc000);
	map(0x200000, 0x27ffff).rom().region("mcu", 0);
	map(0x300000, 0x300001).nopr(); // ? (cybrcycc, alpinesa - writes data to RAM, but then never reads from there)
	map(0x301000, 0x301001).nopw(); // watchdog? LEDs?
	map(0x308000, 0x308003).w("mb87078", FUNC(mb87078_device::data_w)).umask16(0x00ff);
}


/*********************************************************************************************/

// custom input handling

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_coinage(u16 flags)
{
	int coin_state = (flags & 0x1000) >> 12 | (flags & 0x0200) >> 8;

	if (!(coin_state & 1) && (m_old_coin_state & 1))
		m_credits1++;

	if (!(coin_state & 2) && (m_old_coin_state & 2))
		m_credits2++;

	m_old_coin_state = coin_state;
	m_shareram[0x3a/2] = m_credits1 << 8 | m_credits2;
}

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_driving_io()
{
	if (m_syscontrol[0x18] != 0)
	{
		u16 flags = m_inputs->read();
		u16 steer = m_adc_ports[0]->read();
		u16 gas   = m_adc_ports[1]->read();
		u16 brake = m_adc_ports[2]->read();

		switch (m_gametype)
		{
			case NAMCOS22_RIDGE_RACER:
			case NAMCOS22_RIDGE_RACER2:
				steer <<= 4;
				steer += 0x160;
				gas <<= 3;
				gas += 884;
				brake <<= 3;
				brake += 809;
				break;

			case NAMCOS22_RAVE_RACER:
				steer <<= 4;
				steer += 32;
				gas <<= 3;
				gas += 992;
				brake <<= 3;
				brake += 3008;
				break;

			case NAMCOS22_ACE_DRIVER:
			case NAMCOS22_VICTORY_LAP:
				steer <<= 4;
				steer += 2048;
				gas <<= 3;
				gas += 992;
				brake <<= 3;
				brake += 3008;
				break;

			default:
				steer <<= 4;
				gas <<= 3;
				brake <<= 3;
				break;
		}

		m_shareram[0x030/2] = flags;
		m_shareram[0x032/2] = steer;
		m_shareram[0x034/2] = gas;
		m_shareram[0x036/2] = brake;
		handle_coinage(flags);
	}
}

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_cybrcomm_io()
{
	if (m_syscontrol[0x18] != 0)
	{
		u16 flags = m_inputs->read();
		m_shareram[0x030/2] = flags;
		m_shareram[0x032/2] = m_adc_ports[0]->read() * 0x10;
		m_shareram[0x034/2] = m_adc_ports[1]->read() * 0x10;
		m_shareram[0x036/2] = m_adc_ports[2]->read() * 0x10;
		m_shareram[0x038/2] = m_adc_ports[3]->read() * 0x10;
		handle_coinage(flags);
	}
}


// Alpine skiing games

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::alpine_steplock_callback)
{
	m_motor_status = param;
}

WRITE8_MEMBER(namcos22s_state::alpine_mcu_port4_w)
{
	if (~m_mcu_iocontrol & data & 0x20)
	{
		// bits 1+2 are steplock motor outputs
		if ((m_mcu_outdata & 6) == 6)
		{
			if (m_motor_status == 2)
			{
				// free steps
				m_motor_status = 0;
				m_motor_timer->adjust(attotime::from_msec(500), 1);
			}
		}
		else if (m_mcu_outdata & 4)
		{
			if (m_motor_status == 1)
			{
				// lock steps
				m_motor_status = 0;
				m_motor_timer->adjust(attotime::from_msec(500), 2);
			}
		}
	}

	mcu_port4_w(space, offset, data);
}


// Prop Cycle

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::propcycl_pedal_interrupt)
{
	m_mcu->set_input_line(M37710_LINE_TIMERA3OUT, param ? ASSERT_LINE : CLEAR_LINE);
	m_mcu->pulse_input_line(M37710_LINE_TIMERA3IN, m_mcu->minimum_quantum_time());
}

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::propcycl_pedal_update)
{
	// arbitrary timer for reading optical pedal
	int pedal = m_opt[0]->read() - 0x80;

	if (pedal != 0)
	{
		// the pedal has a simple 1-bit "light interrupted" sensor. the faster you pedal,
		// the faster it pulses.  this is connected to the clock input for timer A3,
		// and timer A3 is configured by the MCU program to cause an interrupt each time
		// it's clocked. by counting the number of interrupts in a frame, we can determine
		// how fast the user is pedaling.

		// these values(in usec) may need tweaking:
		const int base = 750;
		const int range = 100000;

		attotime freq = attotime::from_usec(base + range * (1.0 / abs(pedal)));
		m_pc_pedal_interrupt->adjust(std::min(freq, m_pc_pedal_interrupt->time_left()), pedal < 0, freq);
	}
	else
	{
		// not moving
		m_pc_pedal_interrupt->adjust(attotime::never, 0, attotime::never);
	}
}


// Armadillo Racing

TIMER_CALLBACK_MEMBER(namcos22s_state::adillor_trackball_interrupt)
{
	m_mcu->set_input_line((param & 1) ? M37710_LINE_TIMERA2OUT : M37710_LINE_TIMERA3OUT, (param & 2) ? ASSERT_LINE : CLEAR_LINE);
	m_mcu->pulse_input_line((param & 1) ? M37710_LINE_TIMERA2IN : M37710_LINE_TIMERA3IN, m_mcu->minimum_quantum_time());
}

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::adillor_trackball_update)
{
	// arbitrary timer for reading optical trackball
	// -1.0 .. 1.0
	double x = (double)(int)(m_opt[0]->read() - 0x80) / 127.0;
	double y = (double)(int)(m_opt[1]->read() - 0x80) / 127.0;

	// note that it is rotated by 45 degrees, so instead of axes like (+), they are like (x)
	double ox = x, oy = y;
	double a = M_PI / 4.0;
	x = ox*cos(a) - oy*sin(a);
	y = ox*sin(a) + oy*cos(a);

	// tied to mcu A2/A3 timer (speed determines frequency)
	double t[2];
	t[0] = fabs(y); // y -> A2
	t[1] = fabs(x); // x -> A3
	int params[2] = { (y >= 0.0) ? 2 : 0, (x <= 0.0) ? 3 : 1 };

	// these values(in hz) may need tweaking:
	const double base = 20;
	const double range = 1250;

	for (int axis = 0; axis < 2; axis++)
	{
		if (t[axis] > (1.0 / range))
		{
			attotime freq = attotime::from_hz(base + range * t[axis]);
			m_ar_tb_interrupt[axis]->adjust(std::min(freq, m_ar_tb_interrupt[axis]->remaining()), params[axis], freq);
		}
		else
		{
			// not moving
			m_ar_tb_interrupt[axis]->adjust(attotime::never, axis, attotime::never);
		}
	}
}



/*********************************************************************************************/

static INPUT_PORTS_START( ridgera )
	PORT_START("INPUTS")
	/*  1 3 5   When the cabinet is set to Deluxe, the stick shift is basically
	    |-|-|   an 8-way joystick that locks into place.
	    2 4 6   Standard (default) setup uses a racing shifter like in Ace Driver. */
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )    PORT_NAME("Shift Down")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )  PORT_NAME("Shift Up")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )  PORT_NAME("Shift Left")  // not used in Standard Cabinet
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Shift Right") // "
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Clutch Pedal")       // "
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_CONFNAME( 0x0100, 0x0000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x0100, "Deluxe" )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x20, 0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0xff, 0x00, IPT_PEDAL )  PORT_MINMAX(0x00, 0xd0) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x0001, 0x0001, "Test Mode" ) PORT_DIPLOCATION("SW2:1")
	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" )
INPUT_PORTS_END

static INPUT_PORTS_START( ridgeracf )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Ignition Key")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("AT Switch")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("MT Switch")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE2 )

	// DIP3-1 to DIP3-3 are for setting up the viewing angle (game used one board per screen?)
	// Some of the other dipswitches are for debugging, like with Ridge Racer 2.
	PORT_MODIFY("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" )
	PORT_DIPNAME( 0x0002, 0x0000, "Unknown" ) PORT_DIPLOCATION("SW2:2") // always on?
	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPNAME( 0x8000, 0x8000, "Test Mode 2" ) PORT_DIPLOCATION("SW3:8")
	PORT_DIPSETTING(      0x8000, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
INPUT_PORTS_END

static INPUT_PORTS_START( ridgera2 )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_CONFNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, "50 Inch" )
	PORT_CONFSETTING(      0x0100, "Twin" )
	PORT_CONFSETTING(      0x2000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x2100, "Deluxe" )

	/* Some dipswitches seem to be for debug purposes, for example:
	    2-4 : background drawing related
	    2-5 : background drawing related
	    2-6 : debug link-up
	    2-8 : no game over when time runs out (cheat)
	    3-7 : debug polygons
	*/
	PORT_MODIFY("DSW")
	PORT_DIPNAME( 0x8000, 0x8000, "Test Mode 2" ) PORT_DIPLOCATION("SW3:8")
	PORT_DIPSETTING(      0x8000, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
INPUT_PORTS_END

static INPUT_PORTS_START( raveracw )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("View Change")
	PORT_CONFNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, "50 Inch" )
	PORT_CONFSETTING(      0x0100, "Twin" )
	PORT_CONFSETTING(      0x2000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x2100, "Deluxe" )
INPUT_PORTS_END


static INPUT_PORTS_START( cybrcomm )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")    // placed on both sticks
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button") // placed on both sticks
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )

	// The ranges here are based on the test mode which displays +-224
	// The eeprom is calibrated using these settings. If the SUBCPU handling changes then these might end up needing to change again too.
	// Default key arrangement is based on dual-joystick 'Tank' arrangement found in Assault and CyberSled
	PORT_START("ADC.0") // right joystick: vertical
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2)

	PORT_START("ADC.1") // left joystick: vertical
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1)

	PORT_START("ADC.2") // right joystick: horizontal
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2)

	PORT_START("ADC.3") // left joystick: horizontal
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1)

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" )
INPUT_PORTS_END

static INPUT_PORTS_START( acedrvr )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop")

	PORT_START("ADC.0")
	PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x20, 0xe0) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0xff, 0x00, IPT_PEDAL )  PORT_MINMAX(0x00, 0x90) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00, 0x48) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" )
	PORT_DIPNAME( 0x4000, 0x4000, "Test Mode?" ) PORT_DIPLOCATION("SW3:7")
	PORT_DIPSETTING(      0x4000, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPNAME( 0x8000, 0x8000, "Test Mode?" ) PORT_DIPLOCATION("SW3:8") // enter test mode if SW3:7 is on
	PORT_DIPSETTING(      0x8000, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )

	PORT_START("DEV")
	PORT_CONFNAME( 0x01, 0x00, "Enable Dev Inputs" )
	PORT_CONFSETTING(    0x00, DEF_STR( No ) )
	PORT_CONFSETTING(    0x01, DEF_STR( Yes ) )

	PORT_START("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") // also "REC" start
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit") // also "REC" stop
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Unknown 1") // enters free camera view while in attract mode
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Unknown 2") // resets game?
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Left")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Right")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Up")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Down")
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)

	PORT_START("CUSTOM.1")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) // pauses game?
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

static INPUT_PORTS_START( victlap )
	PORT_INCLUDE( acedrvr )

	PORT_MODIFY("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter")
	PORT_BIT( 0xfe0e, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

/*********************************************************************************************/

template <int N>
READ_LINE_MEMBER(namcos22s_state::alpine_motor_r)
{
	return BIT(m_motor_status, N);
}

static INPUT_PORTS_START( alpiner )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // Decision / View Change
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY // L Selection
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_16WAY // R Selection
	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(namcos22s_state, alpine_motor_r<0>) // steps are free
	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(namcos22s_state, alpine_motor_r<1>) // steps are locked
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x080, 0x380) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_NAME("Steps Swing")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x080, 0x380) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_PLAYER(2) PORT_NAME("Steps Edge")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( airco22 )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12)

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_Y ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12)

	PORT_START("ADC.2") // throttle stick auto-centers
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_Z ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12) PORT_NAME("Throttle Stick")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( cybrcycc )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x004, 0x3fc) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x0001, 0x0001, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( dirtdash )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_CONFNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x0200, "Deluxe" ) // car suspension valves
	PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x001, 0x3ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(12) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x140) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( tokyowar )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Right Trigger")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Left Trigger")
	PORT_CONFNAME( 0x0080, 0x0080, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0080, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x0000, "Deluxe" ) // cannon recoil motors
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Steering Wheel")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")

	PORT_START("ADC.3")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x0001, 0x0001, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( aquajet )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x1fc, IPT_PADDLE ) PORT_MINMAX(0x000, 0x3f8) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x0e0, IPT_PEDAL ) PORT_MINMAX(0x0e0, 0x1fc) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x1fc, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x3f8) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("DSW")
	PORT_DIPNAME( 0x0001, 0x0001, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( adillor )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("OPT.0")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(8) PORT_NAME("Trackball X")

	PORT_START("OPT.1")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(8) PORT_NAME("Trackball Y") PORT_REVERSE

	PORT_START("DSW")
	PORT_DIPNAME( 0x0001, 0x0001, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )

	PORT_START("DEV")
	PORT_CONFNAME( 0x01, 0x00, "Enable Dev Inputs" )
	PORT_CONFSETTING(    0x00, DEF_STR( No ) )
	PORT_CONFSETTING(    0x01, DEF_STR( Yes ) )

	PORT_START("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Left")
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Right") // when in normal testmode, press this to enter the extra testmode
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Up")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Down")
	PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

static INPUT_PORTS_START( propcycl )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x1ff, IPT_AD_STICK_X ) PORT_MINMAX(0x0bf, 0x33f) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x1ff, IPT_AD_STICK_Y ) PORT_MINMAX(0x0bf, 0x33f) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)

	PORT_START("OPT.0")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Cycle Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW4:8" )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( timecris )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Foot Pedal")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("OPT.0") // tuned for CRT
	PORT_BIT( 0xffff, 68+626/2, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(68, 68+626) PORT_SENSITIVITY(48) PORT_KEYDELTA(10)

	PORT_START("OPT.1") // tuned for CRT - can't shoot below the statusbar?
	PORT_BIT( 0xffff, 43+241/2, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(43, 43+241) PORT_SENSITIVITY(64) PORT_KEYDELTA(4)

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW4:7" )
	PORT_DIPNAME( 0x0080, 0x0080, "Test Mode" ) PORT_DIPLOCATION("SW4:8")
	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END



/*********************************************************************************************/

/* System Super22 supports a sprite layer.
 * Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute.
 * Each sprite has explicit placement/color/zoom controls.
 */
static const gfx_layout sprite_layout =
{
	32,32,
	RGN_FRAC(1,1),
	8,
	{ 0,1,2,3,4,5,6,7 },
	{
		0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,
		8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8,
		16*8,17*8,18*8,19*8,20*8,21*8,22*8,23*8,
		24*8,25*8,26*8,27*8,28*8,29*8,30*8,31*8
	},
	{
		0*32*8,1*32*8,2*32*8,3*32*8,4*32*8,5*32*8,6*32*8,7*32*8,
		8*32*8,9*32*8,10*32*8,11*32*8,12*32*8,13*32*8,14*32*8,15*32*8,
		16*32*8,17*32*8,18*32*8,19*32*8,20*32*8,21*32*8,22*32*8,23*32*8,
		24*32*8,25*32*8,26*32*8,27*32*8,28*32*8,29*32*8,30*32*8,31*32*8
	},
	32*32*8
};

static const gfx_layout texture_tile_layout =
{
	16,16,
	RGN_FRAC(1,1),
	8,
	{ 0,1,2,3,4,5,6,7 },
	{
		0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8
	},
	{
		0*16*8,1*16*8,2*16*8,3*16*8,4*16*8,5*16*8,6*16*8,7*16*8,
		8*16*8,9*16*8,10*16*8,11*16*8,12*16*8,13*16*8,14*16*8,15*16*8
	},
	16*16*8
};

/* text layer uses a set of 16x16x8bpp tiles defined in RAM */
#define XOR(a) WORD2_XOR_BE(a)
static const gfx_layout namcos22_cg_layout =
{
	16,16,
	0x400, /* 0x3c0 */
	4,
	{ 0,1,2,3 },
	{ XOR(0)*4,  XOR(1)*4,  XOR(2)*4,  XOR(3)*4,  XOR(4)*4,  XOR(5)*4,  XOR(6)*4,  XOR(7)*4,
		XOR(8)*4,  XOR(9)*4, XOR(10)*4, XOR(11)*4, XOR(12)*4, XOR(13)*4, XOR(14)*4, XOR(15)*4 },
	{ 64*0,64*1,64*2,64*3,64*4,64*5,64*6,64*7,64*8,64*9,64*10,64*11,64*12,64*13,64*14,64*15 },
	64*16
};

#undef XOR

static GFXDECODE_START( gfx_namcos22 )
	GFXDECODE_ENTRY( nullptr,   0, namcos22_cg_layout,   0, 0x800 )
	GFXDECODE_ENTRY( "textile", 0, texture_tile_layout,  0, 0x80 )
GFXDECODE_END

static GFXDECODE_START( gfx_super )
	GFXDECODE_ENTRY( nullptr,   0, namcos22_cg_layout,   0, 0x800 )
	GFXDECODE_ENTRY( "textile", 0, texture_tile_layout,  0, 0x80 )
	GFXDECODE_ENTRY( "sprite",  0, sprite_layout,        0, 0x80 )
GFXDECODE_END


void namcos22_state::machine_reset()
{
	master_enable(false);
	slave_enable(false);
	m_dsp_irq_enabled = false;

	m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
	if (!m_is_ss22)
		m_iomcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}

void namcos22_state::device_post_load()
{
	m_gfxdecode->gfx(0)->mark_all_dirty();
}

// allow save_item on a non-fundamental type
ALLOW_SAVE_TYPE(namcos22_dsp_upload_state);

void namcos22_state::machine_start()
{
	m_mcuout.resolve();
	m_cpuled.resolve();
	m_portbits[0] = 0xffff;
	m_portbits[1] = 0xffff;

	m_keycus_rng = 0;
	m_su_82 = 0;
	m_irq_state = 0;
	m_old_coin_state = 0;
	m_credits1 = m_credits2 = 0;

	// register for savestates, stuff that isn't done in video_start()
	// note: namcos22_renderer class doesn't need saving, it is refreshed every frame
	save_item(NAME(m_poly_translucency));
	save_item(NAME(m_mixer_flags));
	save_item(NAME(m_fog_r));
	save_item(NAME(m_fog_g));
	save_item(NAME(m_fog_b));
	save_item(NAME(m_fog_colormask));
	save_item(NAME(m_screen_fade_r));
	save_item(NAME(m_screen_fade_g));
	save_item(NAME(m_screen_fade_b));
	save_item(NAME(m_screen_fade_factor));
	save_item(NAME(m_poly_fade_r));
	save_item(NAME(m_poly_fade_g));
	save_item(NAME(m_poly_fade_b));
	save_item(NAME(m_poly_fade_enabled));

	save_item(NAME(m_syscontrol));
	save_item(NAME(m_dsp_irq_enabled));
	save_item(NAME(m_dsp_master_bioz));
	save_item(NAME(m_old_coin_state));
	save_item(NAME(m_credits1));
	save_item(NAME(m_credits2));
	save_item(NAME(m_point_address));
	save_item(NAME(m_point_data));
	save_item(NAME(m_SerialDataSlaveToMasterNext));
	save_item(NAME(m_SerialDataSlaveToMasterCurrent));
	save_item(NAME(m_RenderBufSize));
	save_item(NAME(m_RenderBufData));
	save_item(NAME(m_portbits));
	save_item(NAME(m_irq_state));
	save_item(NAME(m_irq_enabled));
	save_item(NAME(m_dsp_upload_state));
	save_item(NAME(m_UploadDestIdx));
	save_item(NAME(m_su_82));
	save_item(NAME(m_keycus_id));
	save_item(NAME(m_keycus_rng));
	save_item(NAME(m_cz_adjust));
	save_item(NAME(m_dspram_bank));
	save_item(NAME(m_dspram16_latch));
	save_item(NAME(m_slave_simulation_active));
	save_item(NAME(m_absolute_priority));
	save_item(NAME(m_objectshift));
	save_item(NAME(m_viewmatrix));
	save_item(NAME(m_LitSurfaceInfo));
	save_item(NAME(m_SurfaceNormalFormat));
	save_item(NAME(m_LitSurfaceCount));
	save_item(NAME(m_LitSurfaceIndex));
	save_item(NAME(m_tilemapattr));
	save_item(NAME(m_spot_factor));
	save_item(NAME(m_text_palbase));
	save_item(NAME(m_bg_palbase));
	save_item(NAME(m_camera_zoom));
	save_item(NAME(m_camera_vx));
	save_item(NAME(m_camera_vy));
	save_item(NAME(m_camera_vu));
	save_item(NAME(m_camera_vd));
	save_item(NAME(m_camera_vl));
	save_item(NAME(m_camera_vr));
	save_item(NAME(m_camera_lx));
	save_item(NAME(m_camera_ly));
	save_item(NAME(m_camera_lz));
	save_item(NAME(m_camera_ambient));
	save_item(NAME(m_camera_power));
	save_item(NAME(m_reflection));
	save_item(NAME(m_cullflip));
	save_item(NAME(m_skipped_this_frame));
	save_item(NAME(m_pdp_render_done));
	save_item(NAME(m_render_refresh));
	save_item(NAME(m_pdp_frame));
	save_item(NAME(m_pdp_base));
}

void namcos22s_state::machine_start()
{
	namcos22_state::machine_start();

	m_mcu_iocontrol = 0;

	save_item(NAME(m_spotram_enable));
	save_item(NAME(m_spotram_address));
	save_item(NAME(m_alpinesa_protection));
	save_item(NAME(m_motor_status));
	save_item(NAME(m_mcu_iocontrol));
	save_item(NAME(m_mcu_outdata));
	save_item(NAME(m_chipselect));
}

// System22
void namcos22_state::namcos22(machine_config &config)
{
	/* basic machine hardware */
	M68020(config, m_maincpu, 49.152_MHz_XTAL/2); // MC68020RP25E
	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22_state::namcos22_am);
	m_maincpu->set_vblank_int("screen", FUNC(namcos22_state::namcos22_interrupt));

	tms32025_device& master(TMS32025(config, m_master, 40_MHz_XTAL));
	master.set_addrmap(AS_PROGRAM, &namcos22_state::master_dsp_program);
	master.set_addrmap(AS_DATA, &namcos22_state::master_dsp_data);
	master.set_addrmap(AS_IO, &namcos22_state::master_dsp_io);
	master.bio_in_cb().set(FUNC(namcos22_state::pdp_status_r));
	master.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
	master.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
	master.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
	master.dr_in_cb().set(FUNC(namcos22_state::master_serial_io_r));
	master.set_vblank_int("screen", FUNC(namcos22_state::dsp_vblank_irq));
	TIMER(config, "dsp_serial").configure_periodic(FUNC(namcos22_state::dsp_serial_pulse), attotime::from_hz(SERIAL_IO_PERIOD));

	tms32025_device& slave(TMS32025(config, m_slave, 40_MHz_XTAL));
	slave.set_addrmap(AS_PROGRAM, &namcos22_state::slave_dsp_program);
	slave.set_addrmap(AS_DATA, &namcos22_state::slave_dsp_data);
	slave.set_addrmap(AS_IO, &namcos22_state::slave_dsp_io);
	slave.bio_in_cb().set(FUNC(namcos22_state::dsp_slave_bioz_r));
	slave.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
	slave.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
	slave.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
	slave.dx_out_cb().set(FUNC(namcos22_state::slave_serial_io_w));

	NAMCO_C74(config, m_mcu, 49.152_MHz_XTAL/3); // C74 on the CPU board has no periodic interrupts, it runs entirely off Timer A0
	m_mcu->set_addrmap(AS_PROGRAM, &namcos22_state::mcu_s22_program);
	m_mcu->p4_in_cb().set(FUNC(namcos22_state::mcu_port4_s22_r));

	NAMCO_C74(config, m_iomcu, 6.144_MHz_XTAL);
	m_iomcu->set_addrmap(AS_PROGRAM, &namcos22_state::iomcu_s22_program);
	m_iomcu->p4_in_cb().set(FUNC(namcos22_state::iomcu_port4_s22_r));

	EEPROM_2864(config, "eeprom").write_time(attotime::zero);

	/* video hardware */
	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
	//m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
	m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
	m_screen->set_screen_update(FUNC(namcos22_state::screen_update_namcos22));
	m_screen->screen_vblank().set(FUNC(namcos22_state::screen_vblank));

	PALETTE(config, m_palette).set_entries(0x8000);
	GFXDECODE(config, m_gfxdecode, m_palette, gfx_namcos22);

	/* sound hardware */
	SPEAKER(config, "lspeaker").front_left();
	SPEAKER(config, "rspeaker").front_right();

	C352(config, m_c352, 49.152_MHz_XTAL/2, 288);
	m_c352->add_route(0, "lspeaker", 1.00);
	m_c352->add_route(1, "rspeaker", 1.00);
}

void namcos22_state::cybrcomm(machine_config &config)
{
	namcos22(config);

	SPEAKER(config, "rear_left").rear_left();
	SPEAKER(config, "rear_right").rear_right();

	m_c352->add_route(2, "rear_left", 1.00);
	m_c352->add_route(3, "rear_right", 1.00);
}

// System Super22
void namcos22s_state::namcos22s(machine_config &config)
{
	namcos22(config);

	/* basic machine hardware */
	M68EC020(config.replace(), m_maincpu, 49.152_MHz_XTAL/2); // MC68EC020FG25
	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22s_state::namcos22s_am);
	m_maincpu->set_vblank_int("screen", FUNC(namcos22s_state::namcos22s_interrupt));

	M37710S4(config.replace(), m_mcu, 49.152_MHz_XTAL/3);
	m_mcu->set_addrmap(AS_PROGRAM, &namcos22s_state::mcu_program);
	m_mcu->p4_in_cb().set(FUNC(namcos22s_state::mcu_port4_r));
	m_mcu->p4_out_cb().set(FUNC(namcos22s_state::mcu_port4_w));
	m_mcu->p5_in_cb().set(FUNC(namcos22s_state::mcu_port5_r));
	m_mcu->p5_out_cb().set(FUNC(namcos22s_state::mcu_port5_w));
	m_mcu->p6_in_cb().set(FUNC(namcos22s_state::mcu_port6_r));
	m_mcu->p6_out_cb().set(FUNC(namcos22s_state::mcu_port6_w));
	m_mcu->an0_cb().set(FUNC(namcos22s_state::mcu_adc_r<0>));
	m_mcu->an1_cb().set(FUNC(namcos22s_state::mcu_adc_r<1>));
	m_mcu->an2_cb().set(FUNC(namcos22s_state::mcu_adc_r<2>));
	m_mcu->an3_cb().set(FUNC(namcos22s_state::mcu_adc_r<3>));
	TIMER(config, "mcu_irq").configure_scanline(FUNC(namcos22s_state::mcu_irq), "screen", 0, 240);
	config.set_maximum_quantum(attotime::from_hz(9000)); // erratic inputs otherwise, probably mcu vs maincpu shareram

	config.device_remove("iomcu");

	MB87078(config, m_mb87078);
	m_mb87078->gain_changed().set(FUNC(namcos22s_state::mb87078_gain_changed));

	/* video hardware */
	m_screen->set_screen_update(FUNC(namcos22s_state::screen_update_namcos22s));

	GFXDECODE(config.replace(), m_gfxdecode, m_palette, gfx_super);
}

void namcos22s_state::airco22b(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "bodysonic").backrest();
	m_c352->add_route(2, "bodysonic", 0.50); // to subwoofer behind back
}

void namcos22s_state::alpine(machine_config &config)
{
	namcos22s(config);

	m_mcu->p4_out_cb().set(FUNC(namcos22s_state::alpine_mcu_port4_w));

	TIMER(config, m_motor_timer).configure_generic(FUNC(namcos22s_state::alpine_steplock_callback));
}

void namcos22s_state::alpinesa(machine_config &config)
{
	alpine(config);

	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22s_state::alpinesa_am);
}

void namcos22s_state::cybrcycc(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "tank", 0.0, 0.0, 0.0);
	m_c352->add_route(2, "tank", 1.00);
}

void namcos22s_state::dirtdash(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "road", 0.0, 0.0, 0.0);
	m_c352->add_route(3, "road", 1.00);
}

void namcos22s_state::timecris(machine_config &config)
{
	namcos22s(config);

	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22s_state::timecris_am);
}

void namcos22s_state::tokyowar(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "vibration").seat();
	SPEAKER(config, "seat").headrest_center();

	m_c352->add_route(2, "vibration", 0.50); // to "bass shaker"
	m_c352->add_route(3, "seat", 1.00);
}

void namcos22s_state::propcycl(machine_config &config)
{
	namcos22s(config);

	TIMER(config, "pc_p_upd").configure_periodic(FUNC(namcos22s_state::propcycl_pedal_update), attotime::from_msec(20));
	TIMER(config, m_pc_pedal_interrupt).configure_generic(FUNC(namcos22s_state::propcycl_pedal_interrupt));
}

MACHINE_START_MEMBER(namcos22s_state,adillor)
{
	machine_start();

	for (auto & elem : m_ar_tb_interrupt)
		elem = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos22s_state::adillor_trackball_interrupt),this));
}

void namcos22s_state::adillor(machine_config &config)
{
	namcos22s(config);

	TIMER(config, "ar_tb_upd").configure_periodic(FUNC(namcos22s_state::adillor_trackball_update), attotime::from_msec(20));
	MCFG_MACHINE_START_OVERRIDE(namcos22s_state,adillor)
}



/*********************************************************************************************/

ROM_START( ridgerac )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr3prgll.4d", 0x00003, 0x80000, CRC(856fe5ec) SHA1(72d95b8bd5da551c3d358b8ab266373a89f8aa6a) )
	ROM_LOAD32_BYTE( "rr3prglm.2d", 0x00002, 0x80000, CRC(1e9ef0a9) SHA1(a4577bcdf13673568793d8a324945fca30b10f43) )
	ROM_LOAD32_BYTE( "rr3prgum.8d", 0x00001, 0x80000, CRC(e160f63f) SHA1(9b4b7a13eb4bc19fcb53daedb87e4945c20a1b8e) )
	ROM_LOAD32_BYTE( "rr3prguu.6d", 0x00000, 0x80000, CRC(f07c78c0) SHA1(dbed76d868b761711faf5b6e11f2c9affb91db5d) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracb )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) )
	ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) )
	ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) )
	ROM_LOAD32_BYTE( "rr2pruu.6d", 0x00000, 0x80000, CRC(a79e456f) SHA1(049c596e01e53e3a401c5c4260517f170688d387) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracj )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) )
	ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) )
	ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) )
	ROM_LOAD32_BYTE( "rr1pruu.6d", 0x00000, 0x80000, CRC(c1371f96) SHA1(a78e0bf6c147c034487a85efa0a8470f4e8f4bf0) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgerac3 )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr3prgll-3s.4d", 0x000003, 0x080000, CRC(2c3d8cb7) SHA1(46a7b62938fe3edde5c52ce3fdfe447000cd6af0) )
	ROM_LOAD32_BYTE( "rr3prglm-3s.2d", 0x000002, 0x080000, CRC(b15343f2) SHA1(3056eb5a3036a74b2ac641a4c3221986c0be1e27) )
	ROM_LOAD32_BYTE( "rr3prgum-3s.8d", 0x000001, 0x080000, CRC(8fda06ac) SHA1(7e9adba198eb0941100cda64ecedac504f6ac696) )
	ROM_LOAD32_BYTE( "rr3prguu-3s.6d", 0x000000, 0x080000, CRC(868398df) SHA1(422e0f9884904b0df93fcacd1468b8da0458eb8e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracf )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrf2prgll.4d", 0x00003, 0x80000, CRC(23c6144d) SHA1(99f70e2c60fba7551cafdce12b07da1f8ab8aad6) )
	ROM_LOAD32_BYTE( "rrf2prglm.2d", 0x00002, 0x80000, CRC(1ad638a1) SHA1(505a7f4ba60bbc4e735865fbc5d664311b6045d9) )
	ROM_LOAD32_BYTE( "rrf2prgum.8d", 0x00001, 0x80000, CRC(d7e0aa16) SHA1(cab4578cdd3af84b865114be4105cfdc2e7abf36) )
	ROM_LOAD32_BYTE( "rrf2prguu.6d", 0x00000, 0x80000, CRC(12c808bb) SHA1(64e84686d4ceb8145b9a59b75d0dced830884c9d) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrf1data.6r", 0, 0x080000, CRC(ce3c6ed6) SHA1(23e033364bc967c10c49fd1d5413dda837670633) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrf2potl0.l0", 0x80000*0, 0x80000, CRC(9b762e60) SHA1(50b67ff6678bacba140bad3aedda75c30851fa7a) )
	ROM_LOAD( "rrf2potl1.l1", 0x80000*1, 0x80000, CRC(ab4d66b0) SHA1(59020b3dc2efff99cd528752ca7168b64ae96ac4) )
	ROM_LOAD( "rrf2potm0.m0", 0x80000*2, 0x80000, CRC(02d4daa3) SHA1(9b4e48d3234cb91146b5d31ffcf42ad199ccb903) )
	ROM_LOAD( "rrf2potm1.m1", 0x80000*3, 0x80000, CRC(37e005c2) SHA1(036ae1c44aaa6a6904e6d4938572035ccc6854ed) )
	ROM_LOAD( "rrf2potu0.u0", 0x80000*4, 0x80000, CRC(86b3fe98) SHA1(f242d33f7488e233ccdc0b5d309c64510d7a622d) )
	ROM_LOAD( "rrf2potu1.u1", 0x80000*5, 0x80000, CRC(e0c6ce3d) SHA1(cc559a2237ccb753cb1397fecba64733455a8c43) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrf1wave0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rrf1wave1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rrf1wave2.10n", 0x100000*1, 0x100000,CRC(4ceeae12) SHA1(ae3a6583f8912bc784c7bc63d32448228cf217ba) ) // differs from normal sets
	ROM_LOAD( "rrf1wave3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	/* this stuff was missing from this version, and shouldn't be the same (bad textures if we use these roms) */
	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rrf1gam.2d",   0x0000, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rrf1gam.3d",   0x0100, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rrf1gam.4d",   0x0200, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrf1cg0.bin", 0x200000*0x4, 0x200000, BAD_DUMP CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rrf1cg1.bin", 0x200000*0x5, 0x200000, BAD_DUMP CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rrf1cg2.bin", 0x200000*0x6, 0x200000, BAD_DUMP CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rrf1cg3.bin", 0x200000*0x7, 0x200000, BAD_DUMP CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrf1ccrl.bin",0x000000, 0x200000, BAD_DUMP CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rrf1ccrh.bin",0x200000, 0x080000, BAD_DUMP CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )
ROM_END


ROM_START( ridgera2 )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs2prll.4d",  0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) )
	ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) )
	ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) )
	ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgera2j )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs1prllb.4d", 0x00003, 0x80000, CRC(22f069e5) SHA1(fcaec3aa83853c39d713ed01c511060663027ccd) )
	ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) )
	ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) )
	ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgera2ja )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs1prll.4d", 0x00003, 0x80000, CRC(fbf785a2) SHA1(b9333c7623f68f48aa6ae50913a22a527a19576a) )
	ROM_LOAD32_BYTE( "rrs1prlm.2d", 0x00002, 0x80000, CRC(562f747a) SHA1(79d818b87c9a992fc9706fb39e6d560c2b0aa392) )
	ROM_LOAD32_BYTE( "rrs1prum.8d", 0x00001, 0x80000, CRC(93259fb0) SHA1(c29787e873797a003db27adbd20d7b852e26d8c6) )
	ROM_LOAD32_BYTE( "rrs1pruu.6d", 0x00000, 0x80000, CRC(31cdefe8) SHA1(ae836d389bed43dd156eb4cf3e97b6f1ad68181e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( raveracw )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv2prllb.4d", 0x00003, 0x80000, CRC(3017cd1e) SHA1(ccd648b4a5dfc74fd141815af2969f423311042f) )
	ROM_LOAD32_BYTE( "rv2prlmb.2d", 0x00002, 0x80000, CRC(894be0c3) SHA1(4dba93dc3ca1cf502c5f54018b64ad79bb2a632b) )
	ROM_LOAD32_BYTE( "rv2prumb.8d", 0x00001, 0x80000, CRC(6414a800) SHA1(c278ff644909d12a43ba6fc2bf8d2092e469c3e6) )
	ROM_LOAD32_BYTE( "rv2pruub.6d", 0x00000, 0x80000, CRC(a9f18714) SHA1(8e7b17749d151f92020f68d1ac06003cf1f5c573) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END

ROM_START( raveracj )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv1prllb.4d", 0x00003, 0x80000, CRC(71da3eea) SHA1(8a641bb23e0ad89cae5ee1570f8a3627b2434d20) )
	ROM_LOAD32_BYTE( "rv1prlmb.2d", 0x00002, 0x80000, CRC(6ab7e9ce) SHA1(0c6376ca5a63409aeea344bbc201af6c47afe9ab) )
	ROM_LOAD32_BYTE( "rv1prumb.8d", 0x00001, 0x80000, CRC(375fabcf) SHA1(448e3db3e3fab8c7c27e214ab5a5fa84e5f84366) )
	ROM_LOAD32_BYTE( "rv1pruub.6d", 0x00000, 0x80000, CRC(92f834d6) SHA1(028368790f0293fcfea5c7b12f7f315e27a62f77) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END

ROM_START( raveracja )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv1prll.4d", 0x00003, 0x80000, CRC(5dfce6cd) SHA1(1aeeca1e507ae4cbe3d39ca5efd1cc4fe1ab03a8) )
	ROM_LOAD32_BYTE( "rv1prlm.2d", 0x00002, 0x80000, CRC(0d4d9f74) SHA1(f886b0629cbf5a369af1f44e53c6fd3f51b3fbc9) )
	ROM_LOAD32_BYTE( "rv1prum.8d", 0x00001, 0x80000, CRC(28e503e3) SHA1(a3071461f840f28c65c660de215c73f812f356b3) )
	ROM_LOAD32_BYTE( "rv1pruu.6d", 0x00000, 0x80000, CRC(c47d9ff4) SHA1(4d7c4ac4151a3b306e7277937add8eee26e561a6) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END


ROM_START( cybrcomm )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "cy1prgll.4d", 0x00003, 0x80000, CRC(b3eab156) SHA1(2a5c4e0360c3b9500687a4d70f7110a0c30da2a5) )
	ROM_LOAD32_BYTE( "cy1prglm.2d", 0x00002, 0x80000, CRC(884a5b0e) SHA1(0e27ae366b8a2695fe112b4740c8c9013bb97e26) )
	ROM_LOAD32_BYTE( "cy1prgum.8d", 0x00001, 0x80000, CRC(c9c4a921) SHA1(76a52461165a8bd8d984a34063fbeb4cb73624af) )
	ROM_LOAD32_BYTE( "cy1prguu.6d", 0x00000, 0x80000, CRC(5f22975b) SHA1(a1a5cb66358d64a3c564b912f2eeafa182786b1e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "cy1data.6r", 0x00000, 0x20000, CRC(10d0005b) SHA1(10508eeaf74d24a611b44cd3bb12417ceb78904f) )
	ROM_RELOAD(             0x20000, 0x20000)
	ROM_RELOAD(             0x40000, 0x20000)
	ROM_RELOAD(             0x60000, 0x20000)

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "cyc1cg0.1a", 0x200000*0x4, 0x200000,CRC(e839b9bd) SHA1(fee43d37dcca7f1fb952a6bfb886b7ee30b7d75c) ) /* cyc1cg0.6a */
	ROM_LOAD( "cyc1cg1.2a", 0x200000*0x5, 0x200000,CRC(7d13993f) SHA1(96ac82bcc63afe395bae73f005eb66dad7742d48) ) /* cyc1cg1.7a */
	ROM_LOAD( "cyc1cg2.3a", 0x200000*0x6, 0x200000,CRC(7c464566) SHA1(69817ac3a7c6e43b960e8a904962b58b23417163) ) /* cyc1cg2.8a */
	ROM_LOAD( "cyc1cg3.5a", 0x200000*0x7, 0x200000,CRC(2222e16f) SHA1(562bcd4d43b1543303d8fd66d9f0d9a8e3702492) ) /* cyc1cg3.9a */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */

	//cyc1ccrl.1c FIXED BITS (xxxxxxxx11xxxxxx)
	ROM_LOAD( "cyc1ccrl.1c",     0x000000, 0x100000,CRC(1a0dc5f0) SHA1(bf0093d9cbdcb45a82705e966c48a1f408fa344e) ) /* cyc1ccrl.8c */

	//cyc1ccrh.2c 1xxxxxxxxxxxxxxxxxx = 0xFF
	ROM_LOAD( "cyc1ccrh.2c",     0x200000, 0x080000,CRC(8c4090b8) SHA1(456d548a48833e840c5d39d47b2dcca03f8d6321) ) /* cyc1ccrh.7c */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "cyc1ptl0.5b", 0x80000*0x0, 0x80000,CRC(d91de03d) SHA1(05819d285f6111867c41337bda9c4b9ad5394b6b) )
	ROM_LOAD( "cyc1ptl1.4b", 0x80000*0x1, 0x80000,CRC(e5b98021) SHA1(7416cbf74da969f822e0363ced7a25b967277e28) )
	ROM_LOAD( "cyc1ptl2.3b", 0x80000*0x2, 0x80000,CRC(7ba786c6) SHA1(1a5319dec495453bab9d70ae773a807f0036b355) )
	ROM_LOAD( "cyc1ptm0.5c", 0x80000*0x3, 0x80000,CRC(d454b5c6) SHA1(95ae6f0455e9fd7dff066e74cd4343c94d1bc212) )
	ROM_LOAD( "cyc1ptm1.4c", 0x80000*0x4, 0x80000,CRC(74fdf8cc) SHA1(f2627f400e247b6d4c4157eaf0ec69d57212e566) )
	ROM_LOAD( "cyc1ptm2.3c", 0x80000*0x5, 0x80000,CRC(b9c99a45) SHA1(c86cf594b416776eaf9a32c3cb9d34acc79777e9) )
	ROM_LOAD( "cyc1ptu0.5d", 0x80000*0x6, 0x80000,CRC(4d40897f) SHA1(ffe2a0ab66443553c83512f9a1be94b2e385cf2f) )
	ROM_LOAD( "cyc1ptu1.4d", 0x80000*0x7, 0x80000,CRC(3bdaeeeb) SHA1(826f97e2165af8569cfec03874b16030a9486559) )
	ROM_LOAD( "cyc1ptu2.3d", 0x80000*0x8, 0x80000,CRC(a0e73674) SHA1(1e22142a564e664031c12b250664fc82e3b3d43b) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "cy1wav0.10r", 0x000000, 0x100000, CRC(c6f366a2) SHA1(795dbee09df159d3501c748fb3de16cca81742d6) )
	ROM_LOAD( "cy1wav1.10p", 0x200000, 0x100000, CRC(f30b5e37) SHA1(9f5a94d82741ef9688c6e415ebb9009c906737c9) )
	ROM_LOAD( "cy1wav2.10n", 0x100000, 0x100000, CRC(b98c1ca6) SHA1(4b66aa05f82be5ef3315acc30031872698ff4391) )
	ROM_LOAD( "cy1wav3.10l", 0x300000, 0x100000, CRC(43dbac19) SHA1(83fd4ae4e7ec264fc217ed18caf59bf438af0c3d) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(8432c066) SHA1(99d4bfda3f8aec288dbeaf291bce85fe9009a1de) )
ROM_END


ROM_START( acedrvrw )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ad2prgll.4d", 0x00003, 0x80000, CRC(808c5ff8) SHA1(119c90ecb5aa099a0e5d1d7944c004beacead367) )
	ROM_LOAD32_BYTE( "ad2prglm.2d", 0x00002, 0x80000, CRC(5f726a10) SHA1(d077312c6a387fbdf906d278c73c6a3730687f32) )
	ROM_LOAD32_BYTE( "ad2prgum.8d", 0x00001, 0x80000, CRC(d5042d6e) SHA1(9ae93e7ea7126302831a879ba0aadcb6e5b842f5) )
	ROM_LOAD32_BYTE( "ad2prguu.6d", 0x00000, 0x80000, CRC(86d4661d) SHA1(2a1529a51ca5466994a2d0d84c7aab13cef95a11) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "ad1data.6r", 0, 0x080000, CRC(82024f74) SHA1(711ab0c4f027716aeab18e3a5d3d06fa82af8007) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ad1cg0.1a", 0x200000*0x4, 0x200000,CRC(faaa1ee2) SHA1(878f2b74587ed4d06c5110a0eb0020c49ddc5dfa) )
	ROM_LOAD( "ad1cg1.2a", 0x200000*0x5, 0x200000,CRC(1aab1eb7) SHA1(b8f9eeafec7e0de340cf48e38fa55dd14404c867) )
	ROM_LOAD( "ad1cg2.3a", 0x200000*0x6, 0x200000,CRC(cdcd1874) SHA1(5a7a4a0d897cca4956b0a4f178f39f618c921861) )
	ROM_LOAD( "ad1cg3.5a", 0x200000*0x7, 0x200000,CRC(effdd2cd) SHA1(9ff156e7e38c103b8fa6f3c29776dd38482d9cf2) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ad1ccrl.1c", 0x000000, 0x200000,CRC(bc3c9b12) SHA1(088e861e5c4b37c54b7f72963113a10870bf7927) )
	ROM_LOAD( "ad1ccrh.2c", 0x200000, 0x080000,CRC(71f44526) SHA1(bb4811fc5de626380ce6a17bee73e5e47926d850) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ad1potl0.5b", 0x80000*0, 0x80000,CRC(dfc7e729) SHA1(5e3deef66d0a5dd2ff0584b8c8be4bf5e798e4d0) )
	ROM_LOAD( "ad1potl1.4b", 0x80000*1, 0x80000,CRC(5914ef8e) SHA1(f6db9c3061ceda76eef0a9538d9c048366b71124) )
	ROM_LOAD( "ad1potm0.5c", 0x80000*2, 0x80000,CRC(844bcd6b) SHA1(629b8dc0a7e94410c08c8874b69d9f4bc22f3e4f) )
	ROM_LOAD( "ad1potm1.4c", 0x80000*3, 0x80000,CRC(515cf541) SHA1(db1522813ea3e982d479cc1903d18799bf75aea9) )
	ROM_LOAD( "ad1potu0.5d", 0x80000*4, 0x80000,CRC(e0f44949) SHA1(ffdb64d600883974b05edaa9ed3071af355ee17f) )
	ROM_LOAD( "ad1potu1.4d", 0x80000*5, 0x80000,CRC(f2cd2cbb) SHA1(19fe6e3454a1e4353c7fe0a0d7a71742fea946de) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ad1wave0.10r", 0x100000*0, 0x100000,CRC(c7879a72) SHA1(ae04d664858b0944583590ed0003a9420032d5ca) )
	ROM_LOAD( "ad1wave1.10p", 0x100000*2, 0x100000,CRC(69c1d41e) SHA1(b5cdfe7b75075c585dfd842347f8e4e692bb2781) )
	ROM_LOAD( "ad1wave2.10n", 0x100000*1, 0x100000,CRC(365a6831) SHA1(ddaa44a4436d6de120b64a5d130b1ee18f872e19) )
	ROM_LOAD( "ad1wave3.10l", 0x100000*3, 0x100000,CRC(cd8ecb0b) SHA1(7950b5a3a81f5554f57accabc7a623b8265a21a1) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( victlapw )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "advprgll.4d", 0x00003, 0x80000, CRC(4dc1b0ab) SHA1(b5913388d16f824af6dbb01b5b0350d510667a87) )
	ROM_LOAD32_BYTE( "advprglm.2d", 0x00002, 0x80000, CRC(7b658bef) SHA1(cf982b49fde0c1897c4c16e77f9eb2a145d8cd42) )
	ROM_LOAD32_BYTE( "advprgum.8d", 0x00001, 0x80000, CRC(af67f2fb) SHA1(f391843ee0d053e33660c60e3718871142d932f2) )
	ROM_LOAD32_BYTE( "advprguu.6d", 0x00000, 0x80000, CRC(b60e5d2b) SHA1(f5740615c2864c5c6433275cf4388bda5122b7a7) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "adv1cg0.2a",  0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) )
	ROM_LOAD( "adv1cg1.1c",  0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) )
	ROM_LOAD( "adv1cg2.2d",  0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) )
	ROM_LOAD( "adv1cg3.1e",  0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) )
	ROM_LOAD( "adv1cg4.2f",  0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) )
	ROM_LOAD( "adv1cg5.1j",  0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) )
	ROM_LOAD( "adv1cg6.2k",  0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) )
	ROM_LOAD( "adv1cg7.1n",  0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "adv1ccrl.5a",     0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */
	ROM_LOAD( "adv1ccrh.5c",     0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) )
	ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) )
	ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) )
	ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) )
	ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) )
	ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) )
	ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) )
	ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) )
	ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) )
	ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) )
	ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) )
	ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( victlapj )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "adv1_prgllc.4d", 0x00003, 0x80000, CRC(1c630018) SHA1(c4cddeb18c6b81c768e25489f1d5af0e9c0bbfa5) )
	ROM_LOAD32_BYTE( "adv1_prglmc.2d", 0x00002, 0x80000, CRC(78413604) SHA1(08245cc1f8d97a166b6c0022fc03c423d92a3653) )
	ROM_LOAD32_BYTE( "adv1_prgumc.8d", 0x00001, 0x80000, CRC(464388d9) SHA1(afad780532aff175b0a547392e80c9f01efbf9d9) )
	ROM_LOAD32_BYTE( "adv1_prguuc.6d", 0x00000, 0x80000, CRC(ad3cb5f9) SHA1(9a62043f60de4d4c82c5bec169ec975add271367) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "adv1cg0.2a",  0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) )
	ROM_LOAD( "adv1cg1.1c",  0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) )
	ROM_LOAD( "adv1cg2.2d",  0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) )
	ROM_LOAD( "adv1cg3.1e",  0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) )
	ROM_LOAD( "adv1cg4.2f",  0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) )
	ROM_LOAD( "adv1cg5.1j",  0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) )
	ROM_LOAD( "adv1cg6.2k",  0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) )
	ROM_LOAD( "adv1cg7.1n",  0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "adv1ccrl.5a",     0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */
	ROM_LOAD( "adv1ccrh.5c",     0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) )
	ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) )
	ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) )
	ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) )
	ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) )
	ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) )
	ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) )
	ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) )
	ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) )
	ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) )
	ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) )
	ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( propcycl )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "pr2ver-a.1", 0x00003, 0x100000, CRC(3f58594c) SHA1(5fdd8c61b47b51088a201799ce0c2f08c32ef852) )
	ROM_LOAD32_BYTE( "pr2ver-a.2", 0x00002, 0x100000, CRC(c0da354a) SHA1(f27a71a62385b842404fcd8ed6513158e3639b8f) )
	ROM_LOAD32_BYTE( "pr2ver-a.3", 0x00001, 0x100000, CRC(74bf4b74) SHA1(02713aa07238cc9e30163ae24d12c034aa972ff3) )
	ROM_LOAD32_BYTE( "pr2ver-a.4", 0x00000, 0x100000, CRC(cf4d5638) SHA1(2ddd00d6ec3b85c234820507650d201e176c94a2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* SS22-BIOS ver1.41 */
	ROM_LOAD( "pr1data.8k", 0, 0x080000, CRC(2e5767a4) SHA1(390bf05c90044d841fe2dd4a427177fa1570b9a6) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "pr1scg0.12f", 0x200000*0, 0x200000,CRC(2d09a869) SHA1(ce8beabaac255e1de29d944c9866022bad713519) ) /* identical to "pr1scg0.12l" */
	ROM_LOAD( "pr1scg1.10f", 0x200000*1, 0x200000,CRC(7433c5bd) SHA1(a8fd4e73de66e3d443c0cb5b5beef8f467014815) ) /* identical to "pr1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "pr1cg0.12b",  0x200000*0x0, 0x200000,CRC(0a041238) SHA1(da5688970432f7fe39337ee9fb46ca25a53fdb11) ) /* identical to "pr1cg0.8d" */
	ROM_LOAD( "pr1cg1.10d",  0x200000*0x1, 0x200000,CRC(7d09e6a7) SHA1(892317ee0bd796fa5c70d64912ef2e696792a2d4) ) /* identical to "pr1cg1.13b" */
	ROM_LOAD( "pr1cg2.12d",  0x200000*0x2, 0x200000,CRC(659f006e) SHA1(23362a922cb1100950181fac4858b953d8fc0794) ) /* identical to "pr1cg2.14b" */
	ROM_LOAD( "pr1cg3.13d",  0x200000*0x3, 0x200000,CRC(d30bffa3) SHA1(2f05227d91d257db9fa8cae114974de602d98729) ) /* identical to "pr1cg3.16b" */
	ROM_LOAD( "pr1cg4.14d",  0x200000*0x4, 0x200000,CRC(f4636cc9) SHA1(4e01a476e418e5790878572e83a8a11536ce30ae) ) /* identical to "pr1cg4.18b" */
	ROM_LOAD( "pr1cg5.16d",  0x200000*0x5, 0x200000,CRC(97d333de) SHA1(e8f8383f49aae834dd8b57231b25899703cef966) ) /* identical to "pr1cg5.19b" */
	ROM_LOAD( "pr1cg6.18a",  0x200000*0x6, 0x200000,CRC(3e081c03) SHA1(6ccb162952f6076359b2785b5d800b39a9a3c5ce) ) /* identical to "pr1cg6.18d" */
	ROM_LOAD( "pr1cg7.15a",  0x200000*0x7, 0x200000,CRC(ec9fc5c8) SHA1(16de614b26f06bbddae3ab56cebba45efd6fe81b) ) /* identical to "pr1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "pr1ccrl.3d",  0x000000, 0x200000,CRC(e01321fd) SHA1(5938c6eff8e1b3642728c3be733f567a97cb5aad) ) /* identical to "pr1ccrl.7b" */
	ROM_LOAD( "pr1ccrh.1d",  0x200000, 0x080000,CRC(1d68bc31) SHA1(d534d0daebe7018e83b57cc7919c294ab89bddc8) ) /* identical to "pr1ccrh.5b" */
	/* These two ROMs define a huge texture tilemap using the tiles from "textile".
	 * The tilemap has 0x100 columns.
	 *
	 * pr1ccrl contains little endian 16 bit words.  Each word references a 16x16 tile.
	 *
	 * pr1ccrh.1d contains packed nibbles.  Each nibble encodes three tile attributes:
	 *  0x8 = swapxy
	 *  0x4 = flipx
	 *  0x2 = flipy
	 *  0x1 = tile bank (used in some sys22 games)
	 */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "pr1ptrl0.18k", 0x80000*0, 0x80000,CRC(fddb27a2) SHA1(6e837b45e3f9ed7ca3d1a457d0f0124de5618d1f) )
	ROM_LOAD( "pr1ptrl1.16k", 0x80000*1, 0x80000,CRC(6964dd06) SHA1(f38a550165504693d20892a7dcfaf01db19b04ef) )
	ROM_LOAD( "pr1ptrl2.15k", 0x80000*2, 0x80000,CRC(4d7ed1d4) SHA1(8f72864a06ff8962e640cb36d062bddf5d110308) )

	ROM_LOAD( "pr1ptrm0.18j", 0x80000*3, 0x80000,CRC(b6f204b7) SHA1(3b34f240b399b6406faaf338ae0ab536247e64a6) )
	ROM_LOAD( "pr1ptrm1.16j", 0x80000*4, 0x80000,CRC(949588b7) SHA1(fdaf50ff2496200b9c981efc18b035f3c0a96ace) )
	ROM_LOAD( "pr1ptrm2.15j", 0x80000*5, 0x80000,CRC(dc1cef0a) SHA1(8cbc02cf73fac3cc110b676d77602ae628385eae) )

	ROM_LOAD( "pr1ptru0.18f", 0x80000*6, 0x80000,CRC(5d66a7c4) SHA1(c9ed1c18724192d45c1f6b40096f15d02baf2401) )
	ROM_LOAD( "pr1ptru1.16f", 0x80000*7, 0x80000,CRC(e9a3f72b) SHA1(f967e1adf8eee4fffdf4288d36a93c5bb4f9a126) )
	ROM_LOAD( "pr1ptru2.15f", 0x80000*8, 0x80000,CRC(c346a842) SHA1(299bc0a30d0e74d8adfa3dc605aebf6439f5bc18) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "pr1wavea.2l", 0x000000, 0x400000, CRC(320f3913) SHA1(3887b7334ca7762794c14198dd24bab47fcd9505) )
	ROM_LOAD( "pr1waveb.1l", 0x800000, 0x400000, CRC(d91acb26) SHA1(c2161e2d70e08aed15cbc875ffee685190611daf) )
ROM_END


ROM_START( airco22b )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "acs1verb.1", 0x00003, 0x100000, CRC(062c4f61) SHA1(98e1c75dd0f493eb6ebb64b46543217c1d40116e) )
	ROM_LOAD32_BYTE( "acs1verb.2", 0x00002, 0x100000, CRC(8ae69711) SHA1(4c5323fa8f0419275e330fec66d1fb2b89bb3795) )
	ROM_LOAD32_BYTE( "acs1verb.3", 0x00001, 0x100000, CRC(71738e67) SHA1(eb8c66dedbeff911b6166ebbda466fb9656ef0fb) )
	ROM_LOAD32_BYTE( "acs1verb.4", 0x00000, 0x100000, CRC(3b193add) SHA1(5e3bca13905bfa3a2947f4f16ca01878b0a14a3a) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.20 */
	ROM_LOAD( "acs1data.8k", 0, 0x080000, CRC(33824bc9) SHA1(80ec63883770e5eec1f5f1ddc16a85ef8f22a48b) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "acs1scg0.12l", 0x200000*0, 0x200000,CRC(e5235404) SHA1(3133b71d1bde3a9815cd02e97382b8078b62b0bb) )
	ROM_LOAD( "acs1scg1.10l", 0x200000*1, 0x200000,CRC(828e91e7) SHA1(8383b029cd29fbad107fd49e866defb50c11c99a) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "acs1cg0.8d",  0x200000*0x0, 0x200000,CRC(1f31343e) SHA1(25ba730cec74e0ed0b404f5c4430b7c3368c9b52) )
	ROM_LOAD( "acs1cg1.10d", 0x200000*0x1, 0x200000,CRC(ccd5481d) SHA1(050e6fc7d4e0591f8ffc9552d140b6bd4533c06d) )
	ROM_LOAD( "acs1cg2.12d", 0x200000*0x2, 0x200000,CRC(14e5d0d2) SHA1(3147ad11098030e9cfd93fbc0a1b3aafa8b8aba6) )
	ROM_LOAD( "acs1cg3.13d", 0x200000*0x3, 0x200000,CRC(1a7bcc16) SHA1(bbc4ca5b208bea8394d1679e4e2d17d22331e2c8) )
	ROM_LOAD( "acs1cg4.14d", 0x200000*0x4, 0x200000,CRC(1920b7fb) SHA1(56318f2a96c55998bb9a8d791d56be3dfb39867e) )
	ROM_LOAD( "acs1cg5.16d", 0x200000*0x5, 0x200000,CRC(3dd109b7) SHA1(a7f914b9b80f1bca1afb6144698578a29ca74676) )
	ROM_LOAD( "acs1cg6.18d", 0x200000*0x6, 0x200000,CRC(ec71c8a3) SHA1(86892a91883d483ca0d422b78fa36042e02f3ad3) )
	ROM_LOAD( "acs1cg7.19d", 0x200000*0x7, 0x200000,CRC(82271757) SHA1(023c935e78b14da310e4c29da8785b82aa3241ac) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "acs1ccrl.3d",     0x000000, 0x200000,CRC(07088ba1) SHA1(a962c0821d5af28ed508cfdbd613675454e306e3) )
	ROM_LOAD( "acs1ccrh.1d",     0x200000, 0x080000,CRC(62936af6) SHA1(ca80b68415aa2cd2ce4e90404f10640d0ae38be9) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "acs1ptl0.18k", 0x80000*0x0, 0x80000,CRC(bd5896c7) SHA1(58ec7d0f1e0bfdbf4908e1d920bbd7f094993777) )
	ROM_LOAD( "acs1ptl1.16k", 0x80000*0x1, 0x80000,CRC(e583b975) SHA1(beb0cc2b44bc69af057c2bb744cd7e1b95de577a) )
	ROM_LOAD( "acs1ptl2.15k", 0x80000*0x2, 0x80000,CRC(802d737a) SHA1(3d99a369db70d13fb87c2ff26c82b4b39afe94d9) )
	ROM_LOAD( "acs1ptl3.14k", 0x80000*0x3, 0x80000,CRC(fe556ecb) SHA1(9d9dbbb4f1d3688fb763001834640d79d9987d47) )

	ROM_LOAD( "acs1ptm0.18j", 0x80000*0x4, 0x80000,CRC(949b6c58) SHA1(6ea016551b10f5d5764921dcc5a4b81d2b93d701) )
	ROM_LOAD( "acs1ptm1.16j", 0x80000*0x5, 0x80000,CRC(8b2b99d9) SHA1(89c3545c4035509307728a9577018c1100ce3a54) )
	ROM_LOAD( "acs1ptm2.15j", 0x80000*0x6, 0x80000,CRC(f1515080) SHA1(27a87217a140477a6840a610c95ae57abc0d01a6) )
	ROM_LOAD( "acs1ptm3.14j", 0x80000*0x7, 0x80000,CRC(e364f4aa) SHA1(3af6a864765871664cccad82c4795f677be68d51) )

	ROM_LOAD( "acs1ptu0.18f", 0x80000*0x8, 0x80000,CRC(746b3084) SHA1(73397d1f22300fb3a81a0a068da4d0a8cfdc0a36) )
	ROM_LOAD( "acs1ptu1.16f", 0x80000*0x9, 0x80000,CRC(b44f1d3b) SHA1(f3f1a85c082053653e4da7d7f01f1baef1a013c8) )
	ROM_LOAD( "acs1ptu2.15f", 0x80000*0xa, 0x80000,CRC(fdd2d778) SHA1(0269f971d778e908a1efb5a63b08fb3365d98c2a) )
	ROM_LOAD( "acs1ptu3.14f", 0x80000*0xb, 0x80000,CRC(38b425d4) SHA1(8ff6dd6775d42afdff4c9fb2232e4d72b38e515a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "acs1wav0.1", 0x400000, 0x400000, CRC(52fb9762) SHA1(125c163e62d701c2e17ba0b572ed27c944ca0412) )
	ROM_LOAD( "acs1wav1.2", 0x800000, 0x400000, CRC(b568dca2) SHA1(503deb277691d801acac1380ded2868a5d5ac501) )
ROM_END


ROM_START( cybrcycc )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "cb2ver-c.1", 0x00003, 0x100000, CRC(a8e07a14) SHA1(9bef7068c9bf792960df922ea79e4565d7680433) )
	ROM_LOAD32_BYTE( "cb2ver-c.2", 0x00002, 0x100000, CRC(054c504f) SHA1(9bde803ff09be0402f9b0388e55407362a2508e3) )
	ROM_LOAD32_BYTE( "cb2ver-c.3", 0x00001, 0x100000, CRC(47e6306c) SHA1(39d6fc2c3cb9b4c9d3569cedb79b916a90537115) )
	ROM_LOAD32_BYTE( "cb2ver-c.4", 0x00000, 0x100000, CRC(398426e4) SHA1(f20cd4892420e7b978baa51c9129b362422a3895) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "cb1datab.8k", 0, 0x080000, CRC(e2404221) SHA1(b88810dd45aee8a5475c30806cdfded25fa14e0e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "cb1scg0.12f", 0x200000*0, 0x200000,CRC(7aaca90d) SHA1(9808819db5d86d555a03bb20a2fbedf060d04f0e) ) /* identical to "cb1scg0.12l" */

	ROM_REGION( 0x200000*7, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "cb1cg0.12b",  0x200000*0x0, 0x200000,CRC(762a47a0) SHA1(8a49c700dca7afec5d8d6a38fedcd3ad4b0e6713) ) /* identical to "cb1cg0.8d" */
	ROM_LOAD( "cb1cg1.10d",  0x200000*0x1, 0x200000,CRC(df92c3e6) SHA1(302d7ee7e073a45e7baa948543bd30251f903a6d) ) /* identical to "cb1cg1.13b" */
	ROM_LOAD( "cb1cg2.12d",  0x200000*0x2, 0x200000,CRC(07bc508e) SHA1(7675694d10b50e57bb10b350559bd321df75d1ea) ) /* identical to "cb1cg2.14b" */
	ROM_LOAD( "cb1cg3.13d",  0x200000*0x3, 0x200000,CRC(50c86dea) SHA1(7837a1d2bd3ade470f7fbc732513dd598badd219) ) /* identical to "cb1cg3.16b" */
	ROM_LOAD( "cb1cg4.14d",  0x200000*0x4, 0x200000,CRC(e93b8894) SHA1(4d28b557b7ed2667e6af9f970f3e99cda785b940) ) /* identical to "cb1cg4.18b" */
	ROM_LOAD( "cb1cg5.16d",  0x200000*0x5, 0x200000,CRC(9ee610a1) SHA1(ebc7892b6a66461ca6b6b912a264da1594340b2d) ) /* identical to "cb1cg5.19b" */
	ROM_LOAD( "cb1cg6.18a",  0x200000*0x6, 0x200000,CRC(ddc3b5cc) SHA1(34edffee9eb6fbf4a00fce0da34d9354b1a1155f) ) /* identical to "cb1cg6.18d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "cb1ccrl.3d",  0x000000, 0x200000,CRC(2f171c48) SHA1(52b76213e37379b4a5cea7de40cf5396dc2998d8) ) /* identical to "cb1ccrl.7b" */
	ROM_LOAD( "cb1ccrh.1d",  0x200000, 0x080000,CRC(86124b93) SHA1(f2cfd726313cbeff162d402a15de2360377630e7) ) /* identical to "cb1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "cb1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(f1393a03) SHA1(c9e808601eef5839e6bff630e5f83380e073c5c0) )
	ROM_LOAD( "cb1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(2ad51de7) SHA1(efd102b960ca10cda70da84661acf61e4bbb9f00) )
	ROM_LOAD( "cb1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(78f77c0d) SHA1(5183a8909c2ac0a3d80e707393bcbb4441d79a3c) )
	ROM_LOAD( "cb1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(804bfb4a) SHA1(74b3fc3931265398e23605d3da7ca84a002da632) )
	ROM_LOAD( "cb1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(f4eece49) SHA1(3f34d1ae5986f0d340563ab0fb637bfdacb8712c) )
	ROM_LOAD( "cb1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(5f3cbd7d) SHA1(d00d0a96b71d6a3b98907c4ba7c702e549dd0adb) )
	ROM_LOAD( "cb1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(02c7e4af) SHA1(6a541a28163b1026a824f6f8aed05d0eb0c8ae93) )
	ROM_LOAD( "cb1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(ace3123b) SHA1(2b590ed967572d77b3cc6b37e341a5bdc55c762f) )
	ROM_LOAD( "cb1ptru0.18f", 0x80000*0x8, 0x80000,CRC(58d35341) SHA1(a5fe00bdcf39521f0465743664ff0dd78be5d6e8) )
	ROM_LOAD( "cb1ptru1.16f", 0x80000*0x9, 0x80000,CRC(f4d005b0) SHA1(0862ed1dd0818bfb765d97f1f9d996c321b0ec83) )
	ROM_LOAD( "cb1ptru2.15f", 0x80000*0xa, 0x80000,CRC(68ffcd50) SHA1(5ca5f71b6b079fde14d76c869d211a815bffae68) )
	ROM_LOAD( "cb1ptru3.14f", 0x80000*0xb, 0x80000,CRC(d89c1c2b) SHA1(9c25df696b2d120ce33d7774381460297740007a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "cb1wavea.2l", 0x000000, 0x400000, CRC(b79a624d) SHA1(c0ee358a183ba6d0835731dbdd191b64718fde6e) )
	ROM_LOAD( "cb1waveb.1l", 0x800000, 0x200000, CRC(33bf08f6) SHA1(bf9d68b26a8158ea1abfe8428b7454cac25242c5) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "cybrcycc_defaults.nv", 0x0000, 0x2000, CRC(57fbd7d3) SHA1(c93e0d7875f5e66a661aed757fb4a314fe2025c2) )
ROM_END


ROM_START( alpinerd )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ar2ver-d.1", 0x00003, 0x100000, CRC(fa3380b9) SHA1(2a46988745bd2672f8082399a68ae0d0ab3d28f2) )
	ROM_LOAD32_BYTE( "ar2ver-d.2", 0x00002, 0x100000, CRC(76141352) SHA1(0f7230dd9cd6f1b83d499034affc7bc2c4385ab5) )
	ROM_LOAD32_BYTE( "ar2ver-d.3", 0x00001, 0x100000, CRC(9beffe6a) SHA1(d8efd1e3829d32bb06537d7cecb59f8df9b6d663) )
	ROM_LOAD32_BYTE( "ar2ver-d.4", 0x00000, 0x100000, CRC(1f3f1134) SHA1(0afa78444d1463d214f1afd7ec500af76d567489) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */
	ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ar1cg0.12b",  0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */
	ROM_LOAD( "ar1cg1.10d",  0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */
	ROM_LOAD( "ar1cg2.12d",  0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */
	ROM_LOAD( "ar1cg3.13d",  0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */
	ROM_LOAD( "ar1cg4.14d",  0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */
	ROM_LOAD( "ar1cg5.16d",  0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */
	ROM_LOAD( "ar1cg6.18a",  0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */
	ROM_LOAD( "ar1cg7.15a",  0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ar1ccrl.3d",  0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */
	ROM_LOAD( "ar1ccrh.1d",  0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) )
	ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) )
	ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) )
	ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) )

	ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) )
	ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) )
	ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) )
	ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) )

	ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) )
	ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) )
	ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) )
	ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x2000, CRC(efbef3d8) SHA1(459035600655cd83780db6c59aba044981cdcdc4) )
ROM_END

ROM_START( alpinerc )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ar2ver-c.1", 0x00003, 0x100000, CRC(61323842) SHA1(e3c33248340bee252f230124fa9b7fa935a60565) )
	ROM_LOAD32_BYTE( "ar2ver-c.2", 0x00002, 0x100000, CRC(43795b2d) SHA1(e060f3259661279a36300431c5ca7347bde8b6ec) )
	ROM_LOAD32_BYTE( "ar2ver-c.3", 0x00001, 0x100000, CRC(acb3003b) SHA1(ea0cbf3a1607b06b108df051f38fec1f214f42d2) )
	ROM_LOAD32_BYTE( "ar2ver-c.4", 0x00000, 0x100000, CRC(800acc21) SHA1(41d26766da2db46954a2351bbc50aea94bc1d564) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */
	ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ar1cg0.12b",  0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */
	ROM_LOAD( "ar1cg1.10d",  0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */
	ROM_LOAD( "ar1cg2.12d",  0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */
	ROM_LOAD( "ar1cg3.13d",  0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */
	ROM_LOAD( "ar1cg4.14d",  0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */
	ROM_LOAD( "ar1cg5.16d",  0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */
	ROM_LOAD( "ar1cg6.18a",  0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */
	ROM_LOAD( "ar1cg7.15a",  0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ar1ccrl.3d",  0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */
	ROM_LOAD( "ar1ccrh.1d",  0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) )
	ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) )
	ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) )
	ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) )

	ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) )
	ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) )
	ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) )
	ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) )

	ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) )
	ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) )
	ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) )
	ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x2000, CRC(efbef3d8) SHA1(459035600655cd83780db6c59aba044981cdcdc4) )
ROM_END


ROM_START( alpinr2b )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ars2ver-b.2",  0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) )
	ROM_LOAD32_BYTE( "ars2ver-b.3",  0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) )
	ROM_LOAD32_BYTE( "ars2ver-b.4",  0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) )
	ROM_LOAD32_BYTE( "ars2ver-b.5",  0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ars2data.8k",  0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) )

	ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ars1cg0.8d",   0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) )
	ROM_LOAD( "ars1cg1.10d",  0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) )
	ROM_LOAD( "ars1cg2.12d",  0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) )
	ROM_LOAD( "ars1cg3.13d",  0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) )
	ROM_LOAD( "ars1cg4.14d",  0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) )
	ROM_LOAD( "ars1cg5.16d",  0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ars1ccrl.3d",  0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) )
	ROM_LOAD( "ars1ccrh.1d",  0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) )
	ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) )
	ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) )
	ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) )

	ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) )
	ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) )
	ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) )
	ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) )

	ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) )
	ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) )
	ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) )
	ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) )
	ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x2000, CRC(1f21154e) SHA1(a141d7d235955d042c60d013a89619d35c02308f) )
ROM_END

ROM_START( alpinr2a )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ars2ver-a.2",  0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) )
	ROM_LOAD32_BYTE( "ars2ver-a.3",  0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) )
	ROM_LOAD32_BYTE( "ars2ver-a.4",  0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) )
	ROM_LOAD32_BYTE( "ars2ver-a.5",  0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ars2data.8k",  0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) )

	ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ars1cg0.8d",   0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) )
	ROM_LOAD( "ars1cg1.10d",  0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) )
	ROM_LOAD( "ars1cg2.12d",  0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) )
	ROM_LOAD( "ars1cg3.13d",  0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) )
	ROM_LOAD( "ars1cg4.14d",  0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) )
	ROM_LOAD( "ars1cg5.16d",  0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ars1ccrl.3d",  0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) )
	ROM_LOAD( "ars1ccrh.1d",  0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) )
	ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) )
	ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) )
	ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) )

	ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) )
	ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) )
	ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) )
	ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) )

	ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) )
	ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) )
	ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) )
	ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) )
	ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x2000, CRC(1f21154e) SHA1(a141d7d235955d042c60d013a89619d35c02308f) )
ROM_END


ROM_START( alpinesa )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(e776159d) SHA1(5110364afb7ec606074d58a1d216d7d687b9df62) )
	ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(c5333d38) SHA1(9486cead964f95f8e56dac2f88486f3b98561aa6) )
	ROM_LOAD32_BYTE( "af2ver-a_um.ic4", 0x000001, 0x200000, CRC(5977fc6e) SHA1(19b8041789f8987934fa461972976a3570b1b87b) )
	ROM_LOAD32_BYTE( "af2ver-a_uu.ic5", 0x000000, 0x200000, CRC(54ee33a1) SHA1(0eaa8707ab13a0a66551f61a08986c98f5c9e446) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "af1data.8k",   0x000000, 0x080000, CRC(ef13ebe8) SHA1(5d3f697994d4b5b19ee7fea1e2aef8e39449b68e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "af1scg0b.12f", 0x000000, 0x200000, CRC(46a6222a) SHA1(5322ef60690625b9b8dbe1cfe0c49dcd9c8b1a4c) )

	ROM_REGION( 0x200000*5, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "af1cg0.8d",    0x200000*0, 0x200000, CRC(7423f3ff) SHA1(6a2fd44823ef46111deb57d328b1b75cc355d413) )
	ROM_LOAD( "af1cg1.10d",   0x200000*1, 0x200000, CRC(ea76689a) SHA1(73dd3af737a3e9903abe5ed9c9ae7eded51d8350) )
	ROM_LOAD( "af1cg2.12d",   0x200000*2, 0x200000, CRC(2a38943a) SHA1(15d737996f49bf6374ef6191bbfbe0298d398378) )
	ROM_LOAD( "af1cg3.13d",   0x200000*3, 0x200000, CRC(7f5a3e0f) SHA1(241f9995323b28df23d20a75e1f43ce6e05434cd) )
	ROM_LOAD( "af1cg4.14d",   0x200000*4, 0x200000, CRC(a5ee13e2) SHA1(48fd3c912690f21cbbc2a39bed0a82be41a0d011) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "af1ccrl.3d",   0x000000, 0x200000, CRC(6c054698) SHA1(8537607646b183883c5aa4060fb0af640da4af87) )
	ROM_LOAD( "af1ccrh.1d",   0x200000, 0x080000, CRC(95a02a27) SHA1(32ee87b76ae9fcec6d825e3cf4d5cbb97db39544) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "af1ptrl0.18k", 0x80000*0, 0x80000, CRC(31ce46d3) SHA1(568fb9ee9ac14e613a4fd7668cb38315c10be62b) )
	ROM_LOAD( "af1ptrl1.16k", 0x80000*1, 0x80000, CRC(e869bf00) SHA1(b3c3026891ae3958d1774c905e97c3b57a414ea7) )
	ROM_LOAD( "af1ptrm0.18j", 0x80000*2, 0x80000, CRC(ef7f4d8a) SHA1(02f77c68004b7dccc99b61126e7d07960eb15028) )
	ROM_LOAD( "af1ptrm1.16j", 0x80000*3, 0x80000, CRC(7dd01d52) SHA1(adc1087435d31ed6163ad046466955f01517450f) )
	ROM_LOAD( "af1ptru0.18f", 0x80000*4, 0x80000, CRC(177f1591) SHA1(3969e780e5603eca0a65f65c1ad14d1cef918b39) )
	ROM_LOAD( "af1ptru1.16f", 0x80000*5, 0x80000, CRC(7521d18e) SHA1(dc03ef369db16f59c138ff4e22260d1c04782d1f) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "af1wavea.2l",  0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpinesa_defaults.nv", 0x0000, 0x2000, CRC(d9e74daa) SHA1(aa2ddec61d8e9ae69726bab8ed5701e4c41b833b) )
ROM_END


ROM_START( timecris )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ts2ver-b.1", 0x00003, 0x100000, CRC(29b377f7) SHA1(21864ba964602115c1268fd5edd8006a13a86cfc) )
	ROM_LOAD32_BYTE( "ts2ver-b.2", 0x00002, 0x100000, CRC(79512e25) SHA1(137a215ec192e76e93511456ad504481a566c9c9) )
	ROM_LOAD32_BYTE( "ts2ver-b.3", 0x00001, 0x100000, CRC(9f4ced33) SHA1(32768b5ff263a9e3d11b7b36f6b2d7e951e07419) )
	ROM_LOAD32_BYTE( "ts2ver-b.4", 0x00000, 0x100000, CRC(3e0cfb38) SHA1(3c56342bd73b1617ea579a0d53e19d59bb04fd99) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) )
	ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) )
	ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) )
	ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) )
	ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) )
	ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ts1cg0.8d",   0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) )
	ROM_LOAD( "ts1cg1.10d",  0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) )
	ROM_LOAD( "ts1cg2.12d",  0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) )
	ROM_LOAD( "ts1cg3.13d",  0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) )
	ROM_LOAD( "ts1cg4.14d",  0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) )
	ROM_LOAD( "ts1cg5.16d",  0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) )
	ROM_LOAD( "ts1cg6.18d",  0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ts1ccrl.3d",  0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) )
	ROM_LOAD( "ts1ccrh.1d",  0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) )

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) )
	ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) )
	ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) )
	ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) )
	ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) )
	ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) )
	ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) )
	ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) )
	ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD16_WORD_SWAP( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) )
	ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) )
ROM_END

ROM_START( timecrisa )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "ts2ver-a.1", 0x00002, 0x200000, CRC(d57eb74b) SHA1(536dd9305d0ac44110c575776333310cc57b5242) )
	ROM_LOAD32_WORD_SWAP( "ts2ver-a.2", 0x00000, 0x200000, CRC(671588af) SHA1(63f992c6795521fd263a0ebf230f8dc88cbfc443) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) )
	ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) )
	ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) )
	ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) )
	ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) )
	ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ts1cg0.8d",   0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) )
	ROM_LOAD( "ts1cg1.10d",  0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) )
	ROM_LOAD( "ts1cg2.12d",  0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) )
	ROM_LOAD( "ts1cg3.13d",  0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) )
	ROM_LOAD( "ts1cg4.14d",  0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) )
	ROM_LOAD( "ts1cg5.16d",  0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) )
	ROM_LOAD( "ts1cg6.18d",  0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ts1ccrl.3d",  0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) )
	ROM_LOAD( "ts1ccrh.1d",  0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) )

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) )
	ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) )
	ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) )
	ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) )
	ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) )
	ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) )
	ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) )
	ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) )
	ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD16_WORD_SWAP( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) )
	ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) )
ROM_END


ROM_START( tokyowar )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "tw2ver-a.1",   0x000003, 0x100000, CRC(2b17ca92) SHA1(7bcb1658059c59fb1a0131a41ede7157855130a8) )
	ROM_LOAD32_BYTE( "tw2ver-a.2",   0x000002, 0x100000, CRC(12da84e3) SHA1(a9406d0b77f60ba930c30e60bf4b3656c8905585) )
	ROM_LOAD32_BYTE( "tw2ver-a.3",   0x000001, 0x100000, CRC(7d42c516) SHA1(28c1596dd55c15207bbb41a8b9a5abc97abc2bc8) )
	ROM_LOAD32_BYTE( "tw2ver-a.4",   0x000000, 0x100000, CRC(b904ed16) SHA1(773e11536e1b3fe4971608a63a8e6eca702f8667) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "tw1data.8k",   0x000000, 0x080000, CRC(bd046e4b) SHA1(162bc4ab69959ccab49fd69de291d34d472fb1c8) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "tw1scg0.12f",  0x000000, 0x200000, CRC(e3ec4daa) SHA1(f3a71ae9820d62075b814ffa2fecf3343ae09ffe) )
	ROM_LOAD( "tw1scg1.10f",  0x200000, 0x200000, CRC(b18a06e9) SHA1(ecf6a1e11603b8ea5119a036a57595dea021d778) )
	ROM_LOAD( "tw1scg2.8f",   0x400000, 0x200000, CRC(36f8c3d8) SHA1(d5c965d5cdd258c77b9db3137ce33404a5a3641c) )
	ROM_LOAD( "tw1scg3.7f",   0x600000, 0x200000, CRC(8e14d013) SHA1(ca63105a5c07bb9653499eef7a757db52612b59b) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "tw1cg0.8d",    0x000000, 0x200000, CRC(98b9b070) SHA1(cb920a34700dab330c967cc634717134c04b7e1d) )
	ROM_LOAD( "tw1cg1.10d",   0x200000, 0x200000, CRC(f96a723a) SHA1(5ba14963a4c51c875ac8d3b42049bc334de90038) )
	ROM_LOAD( "tw1cg2.12d",   0x400000, 0x200000, CRC(573e9ded) SHA1(815bda1ac000532c915c2d65ffdb04fee6fa8201) )
	ROM_LOAD( "tw1cg3.13d",   0x600000, 0x200000, CRC(302d5c74) SHA1(5a823f6842cf0f79eb93da47d5bf8c5f51e420db) )
	ROM_LOAD( "tw1cg4.14d",   0x800000, 0x200000, CRC(ab8aa1df) SHA1(355192d999f493e0761fbc822fa9b30c33d8e1c4) )
	ROM_LOAD( "tw1cg5.16d",   0xa00000, 0x200000, CRC(5063f3d0) SHA1(ad8dd2f4184373a3a3ca748b411a5eec1835dc97) )
	ROM_LOAD( "tw1cg6.18d",   0xc00000, 0x200000, CRC(d764027c) SHA1(5cbf93392683885c220628936ba50c09cb40fcfb) )
	ROM_LOAD( "tw1cg7.19d",   0xe00000, 0x200000, CRC(12da0a43) SHA1(99287348a5219146bcd3e61fde3f2bc26b0c5a25) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "tw1ccrl.3d",   0x000000, 0x200000, CRC(d08f5794) SHA1(336a97a2b060505e259e3bcedb9eb8aa4ea8815e) )
	ROM_LOAD( "tw1ccrh.1d",   0x200000, 0x080000, CRC(ad17e693) SHA1(4f06dc82c03159894fb8e10383862920f94563b1) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "tw1ptrl0.18k", 0x000000, 0x080000, CRC(44ac5e86) SHA1(5e42db58f2e352c0fe5e49588a9283817dd15ab1) )
	ROM_LOAD( "tw1ptrl1.16k", 0x080000, 0x080000, CRC(3c769860) SHA1(19b32c3d262f2a9d07354fbd6ac6be97b05f176e) )
	ROM_LOAD( "tw1ptrl2.15k", 0x100000, 0x080000, CRC(6e94103c) SHA1(ee90b77939a9f5780ce271882133cdf977eb643e) )
	ROM_LOAD( "tw1ptrl3.14k", 0x180000, 0x080000, CRC(e3ce5eb2) SHA1(4e15a6f630be15eb017cd51c5e7901db3138a061) )
	ROM_LOAD( "tw1ptrm0.18j", 0x200000, 0x080000, CRC(e170cea2) SHA1(ca259508d76fdab97a9d0502f871f0e560e6c308) )
	ROM_LOAD( "tw1ptrm1.16j", 0x280000, 0x080000, CRC(36a32237) SHA1(f46851dc5c094810ddc42d56310a9f85908bf715) )
	ROM_LOAD( "tw1ptrm2.15j", 0x300000, 0x080000, CRC(c426c278) SHA1(64232ac3c1649e0d0adb4b03e58b8b5ea4013f83) )
	ROM_LOAD( "tw1ptrm3.14j", 0x380000, 0x080000, CRC(d9b9a651) SHA1(0c49a051526081149d894d629f19cb0f2b66a698) )
	ROM_LOAD( "tw1ptru0.18f", 0x400000, 0x080000, CRC(62a9e9fb) SHA1(24739adba029b0acf2d7078962c9d01098a29a6c) )
	ROM_LOAD( "tw1ptru1.16f", 0x480000, 0x080000, CRC(2fd36177) SHA1(368b915261d914be01ae9daeb52571bead52d14d) )
	ROM_LOAD( "tw1ptru2.15f", 0x500000, 0x080000, CRC(ceacb1c9) SHA1(b86cf576e16bbe26ad0d6d6df8bf28d0071c25e2) )
	ROM_LOAD( "tw1ptru3.14f", 0x580000, 0x080000, CRC(939044c2) SHA1(f4c1c0a1c2f07ca7f784d59ef4162a2a6a8bbc43) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "tw1wavea.2l",  0x000000, 0x400000, CRC(ebce6366) SHA1(44ebe90ff3c7af5bebbf1baba3b7a2b1863daebb) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "tokyowar_defaults.nv", 0x0000, 0x2000, CRC(e8bd7d09) SHA1(7e59017b9d5eb78984b4f177b50a4727ad72a623) )
ROM_END


ROM_START( dirtdash )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "dt2vera.1",    0x000002, 0x200000, CRC(402a3d73) SHA1(009b57ed0ea228ccedb139d945b9eaf2a36e2502) )
	ROM_LOAD32_WORD_SWAP( "dt2vera.2",    0x000000, 0x200000, CRC(66ed140d) SHA1(a472fdc7b6aaeb4b3643ecdafd32fa665e7c7aa2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "dt1dataa.8k",  0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "dt1scg0.12f",  0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) )
	ROM_LOAD( "dt1scg1.10f",  0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "dt1cg0.8d",    0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) )
	ROM_LOAD( "dt1cg1.10d",   0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) )
	ROM_LOAD( "dt1cg2.12d",   0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) )
	ROM_LOAD( "dt1cg3.13d",   0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) )
	ROM_LOAD( "dt1cg4.14d",   0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) )
	ROM_LOAD( "dt1cg5.16d",   0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) )
	ROM_LOAD( "dt1cg6.18d",   0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) )
	ROM_LOAD( "dt1cg7.19d",   0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "dt1ccrl.3d",   0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) )
	ROM_LOAD( "dt1ccrh.1d",   0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) )

	ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) )
	ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) )
	ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) )
	ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) )
	ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(d68541fc) SHA1(6b00079bd8f2db26e71968de289cea93458aebe9) )
	ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) )
	ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) )
	ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) )
	ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "dt1wavea.2l",  0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) )
	ROM_LOAD( "dt1waveb.1l",  0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) )
ROM_END


ROM_START( aquajet )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "aj2ver-b.1",   0x000003, 0x100000, CRC(3a67b9f4) SHA1(8cd51f319e082297fdb99634486fe297a0ace654) )
	ROM_LOAD32_BYTE( "aj2ver-b.2",   0x000002, 0x100000, CRC(f5e8fc96) SHA1(e23fcf6f84724d1de15870ff578ff8a6b26e8f31) )
	ROM_LOAD32_BYTE( "aj2ver-b.3",   0x000001, 0x100000, CRC(ef6ebcf7) SHA1(358973b678b9a3065e945fb589af16e8102d437b) )
	ROM_LOAD32_BYTE( "aj2ver-b.4",   0x000000, 0x100000, CRC(7799b909) SHA1(e40005f96f51742b2778605926b8184c9b2c1ad2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "aj1data.8k",   0x000000, 0x080000, CRC(52bcc6d5) SHA1(25319ea6db35cc9bdcb39cc83d597a2a9f1690f3) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "aj1scg0.12f",  0x000000, 0x200000, CRC(13ea766c) SHA1(a1a259bd8f468b90cbc891f1c2875fe03bba9802) )
	ROM_LOAD( "aj1scg1.10f",  0x200000, 0x200000, CRC(cb3638de) SHA1(0af99aaf00782036d7f479b00b0c3d9d7ad4fc37) )
	ROM_LOAD( "aj1scg2.8f",   0x400000, 0x200000, CRC(1048a09b) SHA1(6859533e24db5ac54e28d480aaac7b411a648dfe) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "aj1cg0.8d",    0x000000, 0x200000, CRC(b814e1eb) SHA1(1af29897dcfd0a58743b4fcdd5049d9e6e3d4cbd) )
	ROM_LOAD( "aj1cg1.10d",   0x200000, 0x200000, CRC(dc63d496) SHA1(d3c3eea6b134850004062dd513c0f26096101227) )
	ROM_LOAD( "aj1cg2.12d",   0x400000, 0x200000, CRC(71fbb571) SHA1(40f84ab5a4a7bb4438fb53751762609671d17800) )
	ROM_LOAD( "aj1cg3.13d",   0x600000, 0x200000, CRC(e28052e2) SHA1(3dbc446d7a13312ed4c1d20c2e1209947853f2c4) )
	ROM_LOAD( "aj1cg4.14d",   0x800000, 0x200000, CRC(c77ae1a0) SHA1(e15f2ccbadb8634f6e5cfd2cf48f428d68bd92e1) )
	ROM_LOAD( "aj1cg5.16d",   0xa00000, 0x200000, CRC(15be0080) SHA1(ca14dfd2a66996f0b32fa1155c04f21d300e8f30) )
	ROM_LOAD( "aj1cg6.18d",   0xc00000, 0x200000, CRC(1a4f733a) SHA1(60a991f06e73667fa2c9016189999c4301cba24f) )
	ROM_LOAD( "aj1cg7.19d",   0xe00000, 0x200000, CRC(ea118130) SHA1(24ef22e5c8c6f6e8a01c72466be1e7acbfba63bc) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "aj1ccrl.3d",   0x000000, 0x200000, CRC(3cc7a247) SHA1(336e4dd506d932987e20a5890dd3b0db75c02ccf) )
	ROM_LOAD( "aj1ccrh.1d",   0x200000, 0x080000, CRC(9d936030) SHA1(a383bcca494a9f8d9a08fbe9940c8071d4525d65) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "aj1ptrl0.18k", 0x000000, 0x080000, CRC(16205d45) SHA1(7e9681af852e2e875f80cbbe350e4982eaf80884) )
	ROM_LOAD( "aj1ptrl1.16k", 0x080000, 0x080000, CRC(6f114da7) SHA1(a1e7349ef8eb0ef043fce06f88bfbb76c2967393) )
	ROM_LOAD( "aj1ptrl2.15k", 0x100000, 0x080000, CRC(719b73f0) SHA1(bf8530a706097ae663769090177f1f259c540aa6) )
	ROM_LOAD( "aj1ptrl3.14k", 0x180000, 0x080000, CRC(9555fe31) SHA1(03bdd0784817191b3600d643b775191181a21706) )
	ROM_LOAD( "aj1ptrm0.18j", 0x200000, 0x080000, CRC(89bee2e0) SHA1(d84b06ef1318814fcf4782fef09a85ae1a87beb8) )
	ROM_LOAD( "aj1ptrm1.16j", 0x280000, 0x080000, CRC(0ecf88c7) SHA1(20b7cb09a6a13599cac024ef19c73612ce2952f6) )
	ROM_LOAD( "aj1ptrm2.15j", 0x300000, 0x080000, CRC(829bc7ba) SHA1(7104d66a027911e38ecf521f01ff098ccb76d5fb) )
	ROM_LOAD( "aj1ptrm3.14j", 0x380000, 0x080000, CRC(7d0a222a) SHA1(e78c405d00429580015c6c7d1bcd35393317a769) )
	ROM_LOAD( "aj1ptru0.18f", 0x400000, 0x080000, CRC(90d4e36a) SHA1(bdc44aac6aef5266d289f03c816aa2abdb263e9b) )
	ROM_LOAD( "aj1ptru1.16f", 0x480000, 0x080000, CRC(bf0cf4bf) SHA1(bbf06c7605c083d2fb8c72528c5c9d3b8b067073) )
	ROM_LOAD( "aj1ptru2.15f", 0x500000, 0x080000, CRC(91ffbb77) SHA1(fbfe7d32ef22037f7190d1b8263b5e8c55f2d892) )
	ROM_LOAD( "aj1ptru3.14f", 0x580000, 0x080000, CRC(d83d8d42) SHA1(e1561ce4538b01db92b7e645ad008cd1a2ddaf8a) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "aj1wavea.2l",  0x000000, 0x400000, CRC(8c72ea59) SHA1(3ae8dbd8baae08f1daab2b218932ba9d9451231d) )
	ROM_LOAD( "aj1waveb.1l",  0x800000, 0x400000, CRC(ab5a457f) SHA1(c34531fd574eb0c3e78fc31a9af8658df3446adc) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "aquajet_defaults.nv", 0x0000, 0x2000, CRC(a00b3e44) SHA1(6bdbb46f4176314b61bd5063ecc968189212cb4c) )
ROM_END


ROM_START( adillor )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) )
	ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) )
	ROM_LOAD32_BYTE( "am1vera.rom3", 0x000001, 0x100000, CRC(af0983bc) SHA1(136d2e14485864e20d7a6947d640577b8a85243c) )
	ROM_LOAD32_BYTE( "am1vera.rom4", 0x000000, 0x100000, CRC(4424047f) SHA1(d0ca736c085db58d33b603813b7a54c8ce995bac) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "am1scg0.12f",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10f",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )
	ROM_LOAD( "am1scg0.12l",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10l",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "am1cg0.8d",    0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.10d",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.12d",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.13d",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.14d",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.16d",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18d",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.19d",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )
	ROM_LOAD( "am1cg0.12b",   0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.13b",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.14b",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.16b",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.18b",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.19b",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18a",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.15a",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )

	ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "am1ccrl.3d",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.1d",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )
	ROM_LOAD( "am1ccrl.7b",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.5b",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) )
	ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) )
	ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) )
	ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) )
	ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) )
	ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) )
	ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) )
	ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) )
	ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) )
	ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) )
	ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) )
	ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD16_WORD_SWAP( "am1wavea.2l",  0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) )
	ROM_LOAD16_WORD_SWAP( "am1waveb.1l",  0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) )
ROM_END



/*********************************************************************************************/

// MCU speed cheats (every bit helps with these games)

// for MCU BIOS v1.41
READ16_MEMBER(namcos22s_state::mcu141_speedup_r)
{
	if ((m_mcu->pc() == 0xc12d) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

WRITE16_MEMBER(namcos22_state::mcu_speedup_w)
{
	COMBINE_DATA(&m_su_82);
}

// for MCU BIOS v1.20/v1.30
READ16_MEMBER(namcos22s_state::mcu130_speedup_r)
{
	if ((m_mcu->pc() == 0xc12a) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

// for NSTX7702 v1.00 (C74)
READ16_MEMBER(namcos22_state::mcuc74_speedup_r)
{
	if (((m_mcu->pc() == 0xc0df) || (m_mcu->pc() == 0xc101)) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

void namcos22_state::install_c74_speedup()
{
	if (MCU_SPEEDUP)
		m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x80, 0x81, read16_delegate(*this, FUNC(namcos22_state::mcuc74_speedup_r)), write16_delegate(*this, FUNC(namcos22_state::mcu_speedup_w)));
}

void namcos22s_state::install_130_speedup()
{
	// install speedup cheat for 1.20/1.30 MCU BIOS
	if (MCU_SPEEDUP)
		m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(*this, FUNC(namcos22s_state::mcu130_speedup_r)), write16_delegate(*this, FUNC(namcos22s_state::mcu_speedup_w)));
}

void namcos22s_state::install_141_speedup()
{
	// install speedup cheat for 1.41 MCU BIOS
	if (MCU_SPEEDUP)
		m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(*this, FUNC(namcos22s_state::mcu141_speedup_r)), write16_delegate(*this, FUNC(namcos22s_state::mcu_speedup_w)));
}



/*********************************************************************************************/

void namcos22_state::init_ridgeraj()
{
	m_gametype = NAMCOS22_RIDGE_RACER;
	install_c74_speedup();
}

void namcos22_state::init_ridger2j()
{
	m_gametype = NAMCOS22_RIDGE_RACER2;
	install_c74_speedup();
}

void namcos22_state::init_acedrvr()
{
	m_gametype = NAMCOS22_ACE_DRIVER;
	install_c74_speedup();
}

void namcos22_state::init_victlap()
{
	m_gametype = NAMCOS22_VICTORY_LAP;
	install_c74_speedup();
}

void namcos22_state::init_raveracw()
{
	m_gametype = NAMCOS22_RAVE_RACER;
	install_c74_speedup();
}

void namcos22_state::init_cybrcomm()
{
	m_gametype = NAMCOS22_CYBER_COMMANDO;
	install_c74_speedup();
}

void namcos22s_state::init_alpiner()
{
	m_gametype = NAMCOS22_ALPINE_RACER;
	install_130_speedup();

	m_motor_status = 2;
}

void namcos22s_state::init_alpiner2()
{
	m_gametype = NAMCOS22_ALPINE_RACER_2;
	install_130_speedup();

	m_motor_status = 2;
}

void namcos22s_state::init_alpinesa()
{
	m_gametype = NAMCOS22_ALPINE_SURFER;
	install_141_speedup();

	m_motor_status = 2;
}

void namcos22s_state::init_airco22()
{
	m_gametype = NAMCOS22_AIR_COMBAT22;
	install_130_speedup(); // S22-BIOS ver1.20 namco all rights reserved 94/12/21
}

void namcos22s_state::init_propcycl()
{
	u32 *ROM = (u32 *)memregion("maincpu")->base();

	// patch out strange routine (uninitialized-eeprom related?)
	// maybe needs more accurate 28C64 eeprom device emulation
	ROM[0x1992C/4] = 0x4e754e75;

	/**
	 * The dipswitch reading routine in Prop Cycle polls the
	 * dipswitch value, but promptly overwrites with zero, discarding
	 * it.
	 *
	 * By patching out this behavior, we expose an additional "secret" test.
	 *
	 * DIP5: real time display of "INST_CUNT, MODE_NUM, MODE_CUNT"
	 */
	//ROM[0x22296/4] &= 0xffff0000;
	//ROM[0x22296/4] |= 0x00004e75;

	m_gametype = NAMCOS22_PROP_CYCLE;
	install_141_speedup();
}

void namcos22s_state::init_cybrcyc()
{
	m_gametype = NAMCOS22_CYBER_CYCLES;
	install_130_speedup();
}

void namcos22s_state::init_timecris()
{
	m_gametype = NAMCOS22_TIME_CRISIS;
	install_130_speedup();
}

void namcos22s_state::init_tokyowar()
{
	m_gametype = NAMCOS22_TOKYO_WARS;
	install_141_speedup();
}

void namcos22s_state::init_aquajet()
{
	m_gametype = NAMCOS22_AQUA_JET;
	install_141_speedup();
}

void namcos22s_state::init_adillor()
{
	m_gametype = NAMCOS22_ARMADILLO_RACING;
	install_141_speedup();
}

void namcos22s_state::init_dirtdash()
{
	m_gametype = NAMCOS22_DIRT_DASH;
	install_141_speedup();
}



/*********************************************************************************************/

/*     YEAR, NAME,    PARENT,    MACHINE,   INPUT,     CLASS,          INIT,          MNTR, COMPANY, FULLNAME, FLAGS */
// System22 games
GAME( 1993, ridgerac,  0,        namcos22,  ridgera,   namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17, RR3 means USA?
GAME( 1993, ridgerac3, ridgerac, namcos22,  ridgera,   namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, no indication that this really is a 3-screen version.
GAME( 1993, ridgeracb, ridgerac, namcos22,  ridgera,   namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracj, ridgerac, namcos22,  ridgera,   namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracf, ridgerac, namcos22,  ridgeracf, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer Full Scale (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump.
GAME( 1994, ridgera2,  0,        namcos22,  ridgera2,  namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2j, ridgera2, namcos22,  ridgera2,  namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2ja,ridgera2, namcos22,  ridgera2,  namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-13
GAME( 1994, cybrcomm,  0,        cybrcomm,  cybrcomm,  namcos22_state, init_cybrcomm, ROT0, "Namco", "Cyber Commando (Rev. CY1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 10/14/94
GAME( 1995, raveracw,  0,        namcos22,  raveracw,  namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (Rev. RV2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveracj,  raveracw, namcos22,  raveracw,  namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1 Ver.B, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveracja, raveracw, namcos22,  raveracw,  namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 06/29/95
GAME( 1994, acedrvrw,  0,        namcos22,  acedrvr,   namcos22_state, init_acedrvr,  ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
GAME( 1996, victlapw,  0,        namcos22,  victlap,   namcos22_state, init_victlap,  ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:50:06
GAME( 1996, victlapj,  victlapw, namcos22,  victlap,   namcos22_state, init_victlap,  ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:29:10

// System Super22 games
GAME( 1994, alpinerd, 0,         alpine,    alpiner,   namcos22s_state, init_alpiner,  ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, alpinerc, alpinerd,  alpine,    alpiner,   namcos22s_state, init_alpiner,  ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, airco22b, 0,         airco22b,  airco22,   namcos22s_state, init_airco22,  ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, cybrcycc, 0,         cybrcycc,  cybrcycc,  namcos22s_state, init_cybrcyc,  ROT0, "Namco", "Cyber Cycles (Rev. CB2 Ver.C, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, dirtdash, 0,         dirtdash,  dirtdash,  namcos22s_state, init_dirtdash, ROT0, "Namco", "Dirt Dash (Rev. DT2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56
GAME( 1995, timecris, 0,         timecris,  timecris,  namcos22s_state, init_timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00
GAME( 1995, timecrisa,timecris,  timecris,  timecris,  namcos22s_state, init_timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09
GAME( 1996, propcycl, 0,         propcycl,  propcycl,  namcos22s_state, init_propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13
GAME( 1996, alpinesa, 0,         alpinesa,  alpiner,   namcos22s_state, init_alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/07/01 15:19:23. major problems, protection?
GAME( 1996, tokyowar, 0,         tokyowar,  tokyowar,  namcos22s_state, init_tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:08:47
GAME( 1996, aquajet,  0,         cybrcycc,  aquajet,   namcos22s_state, init_aquajet,  ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30
GAME( 1996, alpinr2b, 0,         alpine,    alpiner,   namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/01/10 17:10:59
GAME( 1996, alpinr2a, alpinr2b,  alpine,    alpiner,   namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/12/06 13:45:05
GAME( 1997, adillor,  0,         adillor,   adillor,   namcos22s_state, init_adillor,  ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41