Coverage Report - uk.co.javagear.Ports
 
Classes in this File Line Coverage Branch Coverage Complexity
Ports
0% 
0% 
8
 
 1  
 /*
 2  
  * Ports.java
 3  
  *
 4  
  * This file is part of JavaGear.
 5  
  *
 6  
  * JavaGear is free software; you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation; either version 2 of the License, or
 9  
  * (at your option) any later version.
 10  
  *
 11  
  * JavaGear is distributed in the hope that it will be useful,
 12  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  
  * GNU General Public License for more details.
 15  
  *
 16  
  * You should have received a copy of the GNU General Public License
 17  
  * along with JavaGear; if not, write to the Free Software
 18  
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 19  
  */
 20  
 
 21  
 package uk.co.javagear;
 22  
 
 23  
 /**
 24  
  * A class to attach virtual devices to the Z80's ports.
 25  
  *
 26  
  * @author Copyright (C) 2002 Chris White
 27  
  * @version 6th March 2002
 28  
  * @see "JavaGear Final Project Report"
 29  
  */
 30  
 public final class Ports {
 31  
     /**
 32  
      * Pointer to VDP.
 33  
      */
 34  
     private Vdp vdp;
 35  
     
 36  
     /**
 37  
      * Pointer to Controllers.
 38  
      */
 39  
     private Controllers controllers;
 40  
     
 41  
     /**
 42  
      * Pointer to SN76496.
 43  
      */
 44  
     private SN76496 sn76496;
 45  
     
 46  
     /**
 47  
      * Nationalization Bit 1.
 48  
      */
 49  
     private int nat1;
 50  
     
 51  
     /**
 52  
      * Nationalization Bit 2.
 53  
      */
 54  
     private int nat2;
 55  
     
 56  
     /**
 57  
      * European / Domestic System.
 58  
      */
 59  
     private boolean europe;
 60  
     
 61  
     /**
 62  
      * Ports Constructor.
 63  
      *
 64  
      * @param v Vdp
 65  
      * @param c Controllers
 66  
      * @param s SN76496
 67  
      */
 68  0
     public Ports(Vdp v, Controllers c, SN76496 s) {
 69  0
         this.controllers = c;
 70  0
         this.vdp = v;
 71  0
         sn76496 = s;
 72  
         // Reset Nationalization Bits
 73  0
         nat1 = 0;
 74  0
         nat2 = 0;
 75  
         // Default to a European System
 76  0
         europe = true;
 77  0
     }
 78  
     
 79  
     /**
 80  
      * Output to a Z80 port.
 81  
      *
 82  
      * @param port Port Number
 83  
      * @param value Value to Output
 84  
      */
 85  
     public void out(int port, int value) {
 86  0
         switch(port) {
 87  
             // GG Serial Ports
 88  
             case 0x00:
 89  
             case 0x01:
 90  
             case 0x02:
 91  
             case 0x03:
 92  
             case 0x04:
 93  
             case 0x05:
 94  0
                 break;
 95  
                 // VDP Data port
 96  
             case 0xBE:
 97  0
                 vdp.dataWrite(value);
 98  0
                 break;
 99  
                 // VDP Control port (Mirrored at two locations)
 100  
             case 0xBD:
 101  
             case 0xBF:
 102  0
                 vdp.controlWrite(value);
 103  0
                 break;
 104  
                 // Automatic Nationalization
 105  
             case 0x3F:
 106  0
                 nat1 = ((value & 0x20) == 0x20) ? 1 : 0;
 107  0
                 nat2 = ((value & 0x80) == 0x80) ? 1 : 0;
 108  
                 
 109  0
                 if (!europe) {
 110  0
                     nat1 = ~nat1;
 111  0
                     nat2 = ~nat2;
 112  
                 }
 113  
                 break;
 114  
                 // SN76489 PSG Output (Mirrored)
 115  
             case 0x7E:
 116  
             case 0x7F:
 117  0
                 sn76496.write(value);
 118  0
                 break;
 119  
             default:
 120  
                 break;
 121  
         }
 122  0
     }
 123  
     
 124  
     /**
 125  
      * Read from a Z80 Port.
 126  
      *
 127  
      * @param port Port Number
 128  
      *
 129  
      * @return Value from Port Number
 130  
      */
 131  
     public int in(int port) {
 132  0
         int value = 0;
 133  
         
 134  0
         switch(port) {
 135  
             // GameGear (Start Button and Nationalization)
 136  
             case 0x00:
 137  0
                 value = controllers.getGameGearStart();
 138  0
                 value = europe ? (value | 0x40) : (value & ~0x40);
 139  0
                 break;
 140  
                 // GG Serial Communication Ports  -
 141  
                 // Return 0 for now as "OutRun" gets stuck in a loop by returning 0xFF
 142  
             case 0x01:
 143  
             case 0x02:
 144  
             case 0x03:
 145  
             case 0x04:
 146  
             case 0x05:
 147  0
                 value = 0;
 148  0
                 break;
 149  
                 // Controller 1 (mirrored)
 150  
             case 0xC0:
 151  
             case 0xDC:
 152  0
                 value = controllers.getController1();
 153  0
                 break;
 154  
                 // Controller 2 (mirrored) and Nationalization
 155  
             case 0xC1:
 156  
             case 0xDD:
 157  0
                 value = controllers.getController2();
 158  
                 // Reads bits 6 and 7 to determine nationalization
 159  0
                 value = (nat1 == 1) ? (value | 0x40) : (value & ~0x40);
 160  0
                 value = (nat2 == 1) ? (value | 0x80) : (value & ~0x80);
 161  0
                 break;
 162  
                 // Vertical Port
 163  
             case 0x7E:
 164  0
                 value = vdp.getVCount();
 165  0
                 break;
 166  
                 // Horizontal Port (NOT EMULATED)
 167  
             case 0x7F:
 168  
                 //System.out.println("Read to horizontal port");
 169  0
                 break;
 170  
                 // VDP Data port
 171  
             case 0xBE:
 172  0
                 value = vdp.dataRead();
 173  0
                 break;
 174  
                 // VDP Control port
 175  
             case 0xBD:
 176  
             case 0xBF:
 177  0
                 value = vdp.controlRead();
 178  0
                 break;
 179  
                 // Default Value is 0xFF
 180  
             default:
 181  0
                 value = 0xff;
 182  
                 break;
 183  
         }
 184  
         
 185  0
         return value;
 186  
     }
 187  
     
 188  
     /**
 189  
      * Set Console to European / Japanese Model.
 190  
      *
 191  
      * @param value True is European, False is Japanese
 192  
      */
 193  
     public void setEurope(boolean value) {
 194  0
         europe = value;
 195  0
     }
 196  
     
 197  
 }