#!/usr/bin/env python
# I, Danny Milosavljevic, hereby place this file into the public domain.
import sys
import memory
import math

# before: sound.
A_SPRITE_DMA_REQUEST = 0x14 # W # CPU memory (value*$100) -> sprite memory
A_SOUND_CHANNELS = 0x15 # W
A_JOYSTICK_1 = 0x16 # RW # 8 Byte packets (!)
A_JOYSTICK_2 = 0x17 # RW # 8 Byte packets (!)
"""
original:

$4000..$4017 total

whereas 
	$4000..$4013 are sound
	$4014 write-only. writing a value N causes a DMA transfer from [$100*N] to sprite memory.
	$4015 write-only. Sound channel switch. bits 0..4: enable sound on that channel.
	$4016 RW. Joystick1 + Strobe. bits: #0=joystick data, #1=joystick presence (0=connected)
	$4017 RW. Joystick2 + Strobe. bits: #0=joystick data, #1=joystick presence (0=connected)

Famicom:
$4020..$4033

"""
class SID(memory.Memory):
    def __init__(self, MMU, screen):
        self.MMU = MMU # CPU MMU
        self.screen = screen
    def update_timers(self):
        return(False)
    def read_memory(self, address, size = 1):
        assert size == 1, "PPU.read_memory: size==1"
    def write_memory(self, address, value, size):
        assert size == 1, "PPU.write_memory: size==1"
        if address == A_SPRITE_DMA_REQUEST: # sprite DMA
            values = [self.MMU.read_memory(i, 1) for i in range(0x100*value, 0x100*(value + 1))]
            self.screen.set_sprite_attributes(values)
