⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2024psg1.asm

📁 关于利用ST2024进行的PSG原DEMO程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                STZ     PB
                STZ     VOL

                LDA     #01000000B      ; PSGCK=SYSCK,PSG Use Of Tone Generator
                STA     PSGC_BUF
                STA     PSGC
                LDA     #09H            ; BASE TIMER OSCX/64*256 (0.5 SEC) ##S
                STA     BTM

                LDX     #STACK_POINT    ; Set STACK Pointer
                TXS

                LDA     #$F8            ; Set Timer1 8 Counters trigger 
                STA     T1C             ; Timer1=7.8125 ms 
                LDA     #$1B            ; Timer1 Clock Source=OSCX/32
                STA     T1M             ; Counter Has Auto-Reload

                LDA     #00000100B      ; System Clock=OSC,Enable OSC,OSCX.
                STA     SYS             ; WAI-1 mode
;<============= FOR POWER ON RESET ========================================>
                LDA     #00100000B      ; Base Timer Interrupt Enable.
                STA     IENA
                WAI                     ; Delay 0.5 second
                STZ     IREQ
                WAI                     ; Delay 0.5 second
                STZ     IREQ
                WAI                     ; Delay 0.5 second
                STZ     IREQ
;<============= FOR POWER ON RESET ========================================>
;<============== CLEAR SYSTEM RAM RANGE 80H - FF ==========================>
                LDX     #$80
CLR_RAM:
                STZ     $007F,X
                DEX
                BNE     CLR_RAM
                LDA     #00010100B      ; System Clock=OSC,Enable OSC,OSCX.
                STA     SYS             ;
                LDA     #00001000B      ; Set Timer1 Enable 
                STA     IENA
                CLI
;<================== DEMO CHANNEL0 MELODY =================================>
DEMO_CH0:
                SETB    7,MELODY_FLAG   ; Set CH0 Volume Has Change
                LDA     #01000010B      ; PSG Use Of Tone Generator,PSG0 ON
                STA     PSGC_BUF
                STA     PSGC
                LDA     #SONG           ; Firts Music Number = 1
                STA     SOUND_FLAG0
WAIT_CH0_END:
                LDA     SOUND_FLAG0
                BNE     WAIT_CH0_END
;<================== DEMO CHANNEL0,CHANNEL1 MELODY ========================>
DEMO_CH0_CH1:
                SETB    7,MELODY_FLAG   ; Set CH0 Volume Has Change
                SETB    3,MELODY_FLAG   ; Set CH1 Volume Has Change
                LDA     #01000110B      ; PSG Use Of Tone Generator,PSG0,1 ON
                STA     PSGC_BUF
                STA     PSGC
                LDA     #SONG           ; Firts Music Number = 1
                STA     SOUND_FLAG0
                STA     SOUND_FLAG1
WAIT_END:
                LDA     SOUND_FLAG0
                ORA     SOUND_FLAG1
                BNE     WAIT_END
                LDA     #$3F            ; PRESCALER : /1
                STA     PSG1L
                LDA     #$0F            ; SAMPLE RATE ABOUT 16K
                STA     PSG1H
                LDA     #01             ; FIRST VOICE
                JSR     PLAY_V
                LDA     #02             ; LAST VOICE
                JSR     PLAY_V
LOOP:
                BRA     LOOP

PLAY_V:                                 ;
                TAX                     ;
                LDA     ST_ADRL,X       ;
                STA     AD1_ADRL        ;
                LDA     ST_ADRH,X       ;
                STA     AD1_ADRH        ;
                LDA     ST_BANK,X       ;
                STA     AD1_BANK        ;
                LDA     END_ADRL,X      ;
                STA     END1_ADRL       ;
                LDA     END_ADRH,X      ;
                STA     END1_ADRH       ;
                LDA     END_BANK,X      ;
                STA     END1_BANK       ;
                                        ;
                STZ     OUT_DAC1        ;
                STZ     AD1_INDEX       ;
                LDA     INT_FLAG        ;
                AND     #10011111B      ;
                STA     INT_FLAG        ;
;---------------------------------------;;DAC ON
                LDA     #DAC8_ON        ;
                STA     PSGC            ;
                STZ     DAC             ;CLEAR DAC.
                RESB    2,IREQ          ;
                SETB    1,IENA_BUF      ;ENABLE DAC
                LDA     IENA_BUF        ;
                STA     IENA            ;
                CLI                     ;
;---------------------------------------;;WAIT
WAIT_ADM1:                              ;
                JBR     ADPCM_END,INT_FLAG,WAIT_ADM1
;---------------------------------------;;QUIT PLAY
Q_PLAYV:                                ;
                STZ     DAC             ;CLEAR DAC.
                RESB    1,IENA_BUF      ;DISABLE DAC
                LDA     IENA_BUF        ;
                STA     IENA            ;
                LDA     #DAC8_OFF       ;
                STA     PSGC            ;
                RTS                     ;
;<=================== ADPCM REFERENCE TABLE ===============================>
DIFF_TAB:
                .DB     0,1,2,3,5,6,7,8
                .DB     0,1,3,4,6,7,9,10
                .DB     0,1,3,4,7,8,10,11
                .DB     1,3,5,7,9,11,13,15
                .DB     1,3,5,7,10,12,14,16
                .DB     1,3,6,8,11,13,16,18
                .DB     1,3,6,8,12,14,17,19
                .DB     1,4,7,10,13,16,19,22
                .DB     1,4,7,10,14,17,20,23
                .DB     1,4,8,11,15,18,22,25
                .DB     2,6,10,14,18,22,26,30
                .DB     2,6,10,14,19,23,27,31
                .DB     2,6,11,15,21,25,30,34
                .DB     2,7,12,17,23,28,33,38
                .DB     2,7,13,18,25,30,36,41
                .DB     3,9,15,21,28,34,40,46
                .DB     3,10,17,24,31,38,45,52
                .DB     3,10,18,25,34,41,49,56
                .DB     4,12,21,29,38,46,55,63
                .DB     4,13,22,31,41,50,59,68
                .DB     5,15,25,35,46,56,66,76
                .DB     5,16,27,38,50,61,72,83
                .DB     6,18,31,43,56,68,81,93
                .DB     6,19,33,46,61,74,88,101
                .DB     7,22,37,52,67,82,97,112
                .DB     8,24,41,57,74,90,107,123
                .DB     9,27,45,63,82,100,118,127
                .DB     10,30,50,70,90,110,127,127
                .DB     11,33,55,77,99,121,127,127
                .DB     12,36,60,84,109,127,127,127
                .DB     13,39,66,92,120,127,127,127
                .DB     14,43,73,102,127,127,127,127
INDEX_ADJ_TAB:
                .DB     $F8,$F8,$F8,$F8,$10,$20,$30,$40
                .DB     $F8,$F8,$F8,$F8,$10,$20,$30,$40
;<=================== Degree Table For PSG Generator ======================>
NOTE_TAB:
                .DB     011H,001H       ; DO3  (C3)
                .DB     0E8H,001H       ; RE3B (Db3)
                .DB     0B2H,002H       ; RE3  (D3)
                .DB     071H,003H       ; MI3B (Eb3)
                .DB     026H,004H       ; MI3  (E3)
                .DB     0D0H,004H       ; FA3  (F3)
                .DB     071H,005H       ; FA3K (F#3)
                .DB     008H,006H       ; SO3  (G3)
                .DB     098H,006H       ; SO3K (G#3)
                .DB     01FH,007H       ; LA3  (A3)
                .DB     09EH,007H       ; SI3B (Bb3)
                .DB     017H,008H       ; SI3  (B3)

                .DB     086H,008H       ; DO4
                .DB     0F4H,008H       ; RE4B
                .DB     059H,009H       ; RE4
                .DB     0B8H,009H       ; MI4B
                .DB     013H,00AH       ; MI4
                .DB     068H,00AH       ; FA4
                .DB     0B8H,00AH       ; FA4K
                .DB     004H,00BH       ; SO4
                .DB     04CH,00BH       ; SO4K
                .DB     08FH,00BH       ; LA4
                .DB     0CFH,00BH       ; SI4B
                .DB     00BH,00CH       ; SI4

                .DB     044H,00CH       ; DO5
                .DB     07AH,00CH       ; RE5B
                .DB     0ACH,00CH       ; RE5
                .DB     0DCH,00CH       ; MI5B
                .DB     009H,00DH       ; MI5
                .DB     034H,00DH       ; FA5
                .DB     05CH,00DH       ; FA5K
                .DB     082H,00DH       ; SO5
                .DB     0A6H,00DH       ; SO5K
                .DB     0C7H,00DH       ; LA5
                .DB     0E7H,00DH       ; SI5B
                .DB     005H,00EH       ; SI5

                .DB     022H,00EH       ; DO6
                .DB     03DH,00EH       ; RE6B
                .DB     056H,00EH       ; RE6
                .DB     06EH,00EH       ; MI6B
                .DB     084H,00EH       ; MI6
                .DB     09AH,00EH       ; FA6
                .DB     0AEH,00EH       ; FA6K
                .DB     0C1H,00EH       ; SO6
                .DB     0D3H,00EH       ; SO6K
                .DB     0E3H,00EH       ; LA6
                .DB     0F3H,00EH       ; SI6B
                .DB     002H,00FH       ; SI6

                .DB     012H,00FH       ; DO7
                .DB     01FH,00FH       ; RE7B
                .DB     02CH,00FH       ; RE7
                .DB     038H,00FH       ; MI7B
                .DB     043H,00FH       ; MI7
                .DB     04EH,00FH       ; FA7
                .DB     058H,00FH       ; FA7K
                .DB     061H,00FH       ; SO7
                .DB     06AH,00FH       ; SO7K
                .DB     072H,00FH       ; LA7
                .DB     07AH,00FH       ; SI7B
                .DB     082H,00FH       ; SI7
;<============= Music Data Start Address Table ============================>
MUSIC_NUM_TAB:
                DW      MUSIC1
;<============= Music Repeat Play Times Table =============================>
MUSIC_REPEAT_TAB:
                DB      01              ; Music1 Repeat 2 Times
;<============= Music Data Table ==========================================>
;First Byte=Degree,Second Byte=Tempo
MUSIC1:                                 ; For Elise
                DB      MI5,021H
                DB      MI5B,021H
                DB      MI5,021H
                DB      MI5B,021H
                DB      MI5,021H
                DB      SI4,021H
                DB      RE5,021H
                DB      DO5,021H
                DB      LA4,061H
                DB      DO4,021H
                DB      MI4,021H
                DB      LA4,021H
                DB      SI4,061H
                DB      MI4,021H
                DB      SO4K,021H
                DB      SI4,021H
                DB      DO5,061H
                DB      MI4,021H
                DB      MI5,021H
                DB      MI5B,021H
                DB      MI5,021H
                DB      MI5B,021H
                DB      MI5,021H
                DB      SI4,021H
                DB      RE5,021H
                DB      DO5,021H
                DB      LA4,061H
                DB      DO4,021H
                DB      MI4,021H
                DB      LA4,021H
                DB      SI4,061H
                DB      MI4,021H
                DB      DO5,021H
                DB      SI4,021H
                DB      LA4,061H
                DB      ENDC
;<============= ADPCM Data START,END ADDRESS TABLE ========================>
                .INCLUDE        ADPCM_TB.ASM
;<============= ADPCM Data Table ==========================================>
                .ORG            $A600
                .INCLUDE        BLK01.ASM
;<============================ Vector Begin ===============================>
                .ORG    $FFEE
                .WORD   BASETIMER_VECT  ;BASE TIMER OVERFLOW.
                .WORD   PORT_VECT       ;PORTA[7-0] VECTOR.
                .WORD   TIMER1_VECT     ;TIMER 2 OVERFLOW.
                .WORD   TIMER0_VECT     ;TIMER 1 OVERFLOW.
                .WORD   DAC_VECT        ;RELOAD DAC DATA.
                .WORD   INTX_VECT       ;PORTA[0]/INTX VECTOR.
                .WORD   NMI_VECT        ;NMI VECTOR. (RESERVED)
                .WORD   RESET_VECT      ;RESET VECTOR. (SAME 6502)
                .WORD   BRK_VECT        ;BREAK VECTOR. (SAME 6502)
                .END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -