Add the write method on the YMF262 hal and cretead a policy based system to manipulate gpio

This commit is contained in:
Gustavo Henrique Santos Souza de Miranda 2026-06-03 08:59:15 -03:00
parent 682f8e1753
commit 7898563f39
3 changed files with 63 additions and 1 deletions

View File

@ -0,0 +1,19 @@
#ifndef FAKE_GPIO_HPP
#define FAKE_GPIO_HPP
#include <cstdint>
#include "GPIO.hpp"
struct FakeGpio {
void set_data_bus(uint8_t val){}
void set_a0(Port port){}
void set_a1(Bank address_bank){}
void set_cs(State state){}
void set_wr(State state){}
void set_ic(State state){}
void set_rd(State state){}
void delay_ticks(uint32_t n){}
};
#endif

View File

@ -0,0 +1,20 @@
#ifndef GPIO_HPP
#define GPIO_HPP
enum class State{
ACTIVE,
INACTIVE
};
enum class Port{
DATA,
ADDRESS
};
enum class Bank{
BANK_0,
BANK_1,
};
#endif

View File

@ -2,11 +2,13 @@
#define YMF262_HAL_HPP #define YMF262_HAL_HPP
#include <cstdint> #include <cstdint>
#include "GPIO.hpp"
template <class GPIOPolicy> template <class GPIOPolicy>
class YMF262_HAL{ class YMF262_HAL{
private: private:
GPIOPolicy _gpio;
GPIOPolicy _gpio;
uint32_t _t_icw_ticks; uint32_t _t_icw_ticks;
uint32_t _t_as_ticks; uint32_t _t_as_ticks;
uint32_t _t_ah_ticks; uint32_t _t_ah_ticks;
@ -20,6 +22,21 @@ class YMF262_HAL{
uint32_t _t_rdh_ticks; uint32_t _t_rdh_ticks;
uint32_t _t_recovery_ticks; uint32_t _t_recovery_ticks;
void write_bus(Bank bank, Port port, uint8_t data){
_gpio.set_a0(port);
_gpio.set_a1(bank);
_gpio.delay_ticks(_t_as_ticks);
_gpio.set_cs(State::ACTIVE);
_gpio.set_wr(State::ACTIVE);
_gpio.set_data_bus(data);
_gpio.delay_ticks(_t_wds_ticks);
_gpio.set_wr(State::INACTIVE);
_gpio.set_cs(State::INACTIVE);
_gpio.delay_ticks(_t_wdh_ticks);
_gpio.delay_ticks(_t_recovery_ticks);
};
public: public:
@ -38,6 +55,12 @@ class YMF262_HAL{
_t_acc_ticks = (uint32_t)(150 * ticks_per_ns); _t_acc_ticks = (uint32_t)(150 * ticks_per_ns);
_t_rdh_ticks = (uint32_t)(10 * ticks_per_ns); _t_rdh_ticks = (uint32_t)(10 * ticks_per_ns);
}; };
void write(Bank bank, uint8_t reg, uint8_t data){
write_bus(bank,Port::ADDRESS,reg);
write_bus(bank,Port::DATA,data);
};
}; };
#endif #endif