Annotation of nono/vm/ssg.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2024 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // SSG (YM2149)
                      9: //
                     10: 
                     11: #pragma once
                     12: 
                     13: #include "device.h"
                     14: #include "monitor.h"
                     15: 
                     16: // レジスタ
                     17: struct SSG
                     18: {
                     19:        //      7   6   5   4   3   2   1   0
                     20:        //    +---+---+---+---+---+---+---+---+
                     21:        // R0 |              Low              |
                     22:        //    +---------------+---------------+ Frequency of channel A
                     23:        // R1 |       -       |      High     |
                     24:        //    +---+---+---+---+---+---+---+---+
                     25:        //
                     26:        //    +---+---+---+---+---+---+---+---+
                     27:        // R2 |              Low              |
                     28:        //    +---------------+---------------+ Frequency of channel B
                     29:        // R3 |       -       |      High     |
                     30:        //    +---+---+---+---+---+---+---+---+
                     31:        //
                     32:        //    +---+---+---+---+---+---+---+---+
                     33:        // R4 |              Low              |
                     34:        //    +---------------+---------------+ Frequency of channel C
                     35:        // R5 |       -       |      High     |
                     36:        //    +---+---+---+---+---+---+---+---+
                     37:        //
                     38:        //    +-----------+---+---+---+---+---+
                     39:        // R6 |     -     |       freq        | Frequency of noise
                     40:        //    +-----------+---+---+---+---+---+
                     41:        //
                     42:        //    +---+---+---+---+---+---+---+---+
                     43:        // R7 |  I/O  |   Noise   |   Tone    | I/O port and mixer settings
                     44:        //    | B | A | C | B | A | C | B | A |
                     45:        //    +---+---+---+---+---+---+---+---+
                     46:        //
                     47:        //    +-----------+---+---+---+---+---+
                     48:        // R8 |     -     | M |     level     | Level of channel A
                     49:        //    +-----------+---+---+---+---+---+
                     50:        //    +-----------+---+---+---+---+---+
                     51:        // R9 |     -     | M |     level     | Level of channel B
                     52:        //    +-----------+---+---+---+---+---+
                     53:        //    +-----------+---+---+---+---+---+
                     54:        // RA |     -     | M |     level     | Level of channel C
                     55:        //    +-----------+---+---+---+---+---+
                     56:        //
                     57:        //    +-------------------------------+
                     58:        // RB |           freq (Low)          | Frequency of envelope
                     59:        // RC |           freq (High)         |
                     60:        //    +-------------------------------+
                     61:        //
                     62:        //    +---------------+---+---+---+---+
                     63:        // RD |       -       |CNT|ATT|ALT|HLD| Shape of envelope
                     64:        //    +---------------+---+---+---+---+
                     65:        //
                     66:        //    +-------------------------------+
                     67:        // RE |           8 bit data          | Data of I/O port A
                     68:        //    +-------------------------------+
                     69:        // RF |           8 bit data          | Data of I/O port B
                     70:        //    +-------------------------------+
                     71: 
                     72:        uint freq[3];
                     73:        uint noise_freq;
                     74:        uint settings;
                     75:        bool ampmode[3];
                     76:        uint amplevel[3];
                     77:        uint envelope_freq;
                     78:        uint envelope_shape;
                     79:        uint dataA;
                     80:        uint dataB;
                     81: 
                     82:        // Rn の値を返す
                     83:        uint32 Get(uint n) const;
                     84: 
                     85:        // レベルレジスタの値を返す
                     86:        uint32 GetLevelReg(int n) const {
                     87:                return (ampmode[n] ? 0x10 : 0) | amplevel[n];
                     88:        }
                     89: };
                     90: 
                     91: class SSGDevice : public IODevice
                     92: {
                     93:        using inherited = IODevice;
                     94: 
                     95:        // マスタークロック (1.536MHz)
                     96:        static const uint fMaster = 1536000;
                     97: 
                     98:  public:
                     99:        SSGDevice();
                    100:        ~SSGDevice() override;
                    101: 
                    102:        void ResetHard(bool poweron) override;
                    103: 
                    104:        busdata Read1(uint32 addr) override;
                    105:        busdata Write1(uint32 addr, uint32 data) override;
                    106:        busdata Peek1(uint32 addr) override;
                    107: 
                    108:  private:
                    109:        DECLARE_MONITOR_CALLBACK(MonitorUpdate);
                    110: 
                    111:        uint32 GetReg(uint32 n) const;
                    112: 
                    113:        uint32 regno {};
                    114:        SSG reg {};
                    115: 
                    116:        Monitor monitor { this };
                    117: };
                    118: 
                    119: static inline SSGDevice *GetSSGDevice() {
                    120:        return Object::GetObject<SSGDevice>(OBJ_SSG);
                    121: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.