home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / atari / atari800-0.8.6 / pokey.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-10  |  2.9 KB  |  166 lines

  1. #include <stdlib.h>
  2. #ifdef VMS
  3. #include <types.h>
  4. #else
  5. #include <sys/types.h>
  6. #endif
  7. #include <time.h>
  8.  
  9. #include "atari.h"
  10. #include "pia.h"
  11. #include "pokey.h"
  12. #include "gtia.h"
  13. #include "sio.h"
  14. #include "platform.h"
  15.  
  16. #define FALSE 0
  17. #define TRUE 1
  18.  
  19. static char *rcsid = "$Id: pokey.c,v 1.11 1998/02/21 15:20:28 david Exp $";
  20.  
  21. UBYTE KBCODE;
  22. UBYTE IRQST;
  23. UBYTE IRQEN;
  24. int SHIFT_KEY = FALSE, KEYPRESSED = FALSE;
  25.  
  26. UBYTE POKEY_GetByte(UWORD addr)
  27. {
  28.     UBYTE byte;
  29.     static int rand_init = 0;
  30.  
  31.     addr &= 0xff0f;
  32.     switch (addr) {
  33.     case _KBCODE:
  34.         byte = KBCODE;
  35.         break;
  36.     case _IRQST:
  37.         byte = IRQST;
  38. #ifdef DEBUG1
  39.         printf("RD: IRQST = %x, PC = %x\n", byte, PC);
  40. #endif
  41.         break;
  42.     case _POT0:
  43.         byte = Atari_POT(0);
  44.         break;
  45.     case _POT1:
  46.         byte = Atari_POT(1);
  47.         break;
  48.     case _POT2:
  49.         byte = Atari_POT(2);
  50.         break;
  51.     case _POT3:
  52.         byte = Atari_POT(3);
  53.         break;
  54.     case _POT4:
  55.         byte = Atari_POT(4);
  56.         break;
  57.     case _POT5:
  58.         byte = Atari_POT(5);
  59.         break;
  60.     case _POT6:
  61.         byte = Atari_POT(6);
  62.         break;
  63.     case _POT7:
  64.         byte = Atari_POT(7);
  65.         break;
  66.     case _RANDOM:
  67.         if (!rand_init) {
  68.             srand((int) time((time_t *) NULL));
  69.             rand_init = 1;
  70.         }
  71.         byte = rand();
  72.         break;
  73.     case _SERIN:
  74.         byte = SIO_SERIN();
  75. /*
  76.    colour_lookup[8] = colour_translation_table[byte];
  77.  */
  78. #ifdef DEBUG1
  79.         printf("RD: SERIN = %x, BUFRFL = %x, CHKSUM = %x, BUFR = %02x%02x, BFEN=%02x%02x, PC = %x\n",
  80.             byte, memory[0x38], memory[0x31], memory[0x33], memory[0x32],
  81.                memory[0x35], memory[0x34], PC);
  82.         printf("AR RD: SERIN = %x, BUFRFL = %x, CHKSUM = %x, BUFR = %02x%02x, BFEN=%02x%02x, PC = %x\n",
  83.              byte, memory[0x38], memory[0x23c], memory[0x1], memory[0x0],
  84.                memory[0x23b], memory[0x23a], PC);
  85. #endif
  86.         break;
  87.     case _SKSTAT:
  88.         byte = 0xff;
  89.         if (SHIFT_KEY)
  90.             byte &= ~8;
  91.         if (KEYPRESSED)
  92.             byte &= ~4;
  93.         break;
  94.     }
  95.  
  96.     return byte;
  97. }
  98.  
  99. int POKEY_PutByte(UWORD addr, UBYTE byte)
  100. {
  101.     addr &= 0xff0f;
  102.     switch (addr) {
  103.     case _AUDC1:
  104.         Atari_AUDC(1, byte);
  105.         break;
  106.     case _AUDC2:
  107.         Atari_AUDC(2, byte);
  108.         break;
  109.     case _AUDC3:
  110.         Atari_AUDC(3, byte);
  111.         break;
  112.     case _AUDC4:
  113.         Atari_AUDC(4, byte);
  114.         break;
  115.     case _AUDCTL:
  116.         Atari_AUDCTL(byte);
  117.         break;
  118.     case _AUDF1:
  119.         Atari_AUDF(1, byte);
  120.         break;
  121.     case _AUDF2:
  122.         Atari_AUDF(2, byte);
  123.         break;
  124.     case _AUDF3:
  125.         Atari_AUDF(3, byte);
  126.         break;
  127.     case _AUDF4:
  128.         Atari_AUDF(4, byte);
  129.         break;
  130.     case _IRQEN:
  131.         IRQEN = byte;
  132. #ifdef DEBUG1
  133.         printf("WR: IRQEN = %x, PC = %x\n", IRQEN, PC);
  134. #endif
  135.         IRQST |= (~byte);
  136.         break;
  137.     case _POTGO:
  138.         break;
  139.     case _SEROUT:
  140.         {
  141.             int cmd_flag = (PBCTL & 0x08) ? 0 : 1;
  142.  
  143. #ifdef DEBUG1
  144.             printf("WR: SEROUT = %x, BUFRFL = %x, CHKSUM = %x, BUFL = %02x%02x, BFEN = %02x%02x, PC = %x\n",
  145.                    byte, memory[0x38], memory[0x31],
  146.                    memory[0x33], memory[0x32],
  147.                    memory[0x35], memory[0x34],
  148.                    PC);
  149. #endif
  150.  
  151. /*
  152.    colour_lookup[8] = colour_translation_table[byte];
  153.  */
  154.             SIO_SEROUT(byte, cmd_flag);
  155.         }
  156.         break;
  157.     case _STIMER:
  158. #ifdef DEBUG1
  159.         printf("WR: STIMER = %x\n", byte);
  160. #endif
  161.         break;
  162.     }
  163.  
  164.     return FALSE;
  165. }
  166.