123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include <../base.hpp>
- #define ST010_CPP
- #include "st010.hpp"
- #include "st010_data.hpp"
- #include "st010_op.cpp"
- int16 ST010::sin(int16 theta) {
- return sin_table[(theta >> 8) & 0xff];
- }
- int16 ST010::cos(int16 theta) {
- return sin_table[((theta + 0x4000) >> 8) & 0xff];
- }
- uint8 ST010::readb(uint16 addr) {
- return ram[addr & 0xfff];
- }
- uint16 ST010::readw(uint16 addr) {
- return (readb(addr + 0) << 0) |
- (readb(addr + 1) << 8);
- }
- uint32 ST010::readd(uint16 addr) {
- return (readb(addr + 0) << 0) |
- (readb(addr + 1) << 8) |
- (readb(addr + 2) << 16) |
- (readb(addr + 3) << 24);
- }
- void ST010::writeb(uint16 addr, uint8 data) {
- ram[addr & 0xfff] = data;
- }
- void ST010::writew(uint16 addr, uint16 data) {
- writeb(addr + 0, data);
- writeb(addr + 1, data >> 8);
- }
- void ST010::writed(uint16 addr, uint32 data) {
- writeb(addr + 0, data);
- writeb(addr + 1, data >> 8);
- writeb(addr + 2, data >> 16);
- writeb(addr + 3, data >> 24);
- }
- //
- void ST010::init() {
- }
- void ST010::enable() {
- }
- void ST010::power() {
- reset();
- }
- void ST010::reset() {
- memset(ram, 0x00, sizeof ram);
- }
- //
- uint8 ST010::read(unsigned addr) {
- return readb(addr);
- }
- void ST010::write(unsigned addr, uint8 data) {
- writeb(addr, data);
- if((addr & 0xfff) == 0x0021 && (data & 0x80)) {
- switch(ram[0x0020]) {
- case 0x01: op_01(); break;
- case 0x02: op_02(); break;
- case 0x03: op_03(); break;
- case 0x04: op_04(); break;
- case 0x05: op_05(); break;
- case 0x06: op_06(); break;
- case 0x07: op_07(); break;
- case 0x08: op_08(); break;
- }
- ram[0x0021] &= ~0x80;
- }
- }
|