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

📄 2024psg1.asm

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

                CHIP    W65C02S
;<============== Control Register and RAM Define ===========>               
                .INCLUDE        ST2024.INC
;<============== Constant Define Area ======================>
STACK_POINT     .EQU    $7F             ; STACK POINT.

SONG            .EQU    001H            ;
HI0             .EQU    00FH            ; CH0 Volume = Maximum.
MID0            .EQU    008H            ; CH0 Volume = 1/2.
LO0             .EQU    004H            ; CH0 Volume = 1/4.
OFF0            .EQU    000H            ; CH0 Voulme = No Sound.
HI1             .EQU    0F0H            ; CH1 Volume = Maximum.
MID1            .EQU    080H            ; CH1 Volume = 1/2.
LO1             .EQU    040H            ; CH1 Volume = 1/4.
OFF1            .EQU    000H            ; CH1 Voulme = No Sound.
MUTE_END        .EQU    03DH            ; PSG Sound Pause Sign.
MUTE            .EQU    03EH            ; PSG Sound Pause Sign.
ENDC            .EQU    0FFH            ; PSG Sound End Sign.

DAC8_OFF        .EQU    01001111B       ; B6..4(SYSCK) , B32=11(8BIT)
DAC8_ON         .EQU    01001101B       ; B6..4(SYSCK) , B32=11(8BIT)

AD1_HINB        .EQU    05              ;INT_FLAG BIT5=1 : ADPCM1 HI NIBLE
ADPCM_END       .EQU    06              ;INT_FLAG BIT6=1 : ADPCM END
;
DO3             .EQU    000H            ;       011H,001H
RE3B            .EQU    001H            ;       0E8H,001H
RE3             .EQU    002H            ;       0B2H,002H
MI3B            .EQU    003H            ;       071H,003H
MI3             .EQU    004H            ;       026H,004H
FA3             .EQU    005H            ;       0D0H,004H
FA3K            .EQU    006H            ;       071H,005H
SO3             .EQU    007H            ;       008H,006H
SO3K            .EQU    008H            ;       098H,006H
LA3             .EQU    009H            ;       01FH,007H
SI3B            .EQU    00AH            ;       09EH,007H
SI3             .EQU    00BH            ;       017H,008H

DO4             .EQU    00CH            ;       086H,008H
RE4B            .EQU    00DH            ;       0F4H,008H
RE4             .EQU    00EH            ;       059H,009H
MI4B            .EQU    00FH            ;       0B8H,009H
MI4             .EQU    010H            ;       013H,00AH
FA4             .EQU    011H            ;       068H,00AH
FA4K            .EQU    012H            ;       0B8H,00AH
SO4             .EQU    013H            ;       004H,00BH
SO4K            .EQU    014H            ;       04CH,00BH
LA4             .EQU    015H            ;       08FH,00BH
SI4B            .EQU    016H            ;       0CFH,00BH
SI4             .EQU    017H            ;       00BH,00CH

DO5             .EQU    018H            ;       044H,00CH
RE5B            .EQU    019H            ;       07AH,00CH
RE5             .EQU    01AH            ;       0ACH,00CH
MI5B            .EQU    01BH            ;       0DCH,00CH
MI5             .EQU    01CH            ;       009H,00DH
FA5             .EQU    01DH            ;       034H,00DH
FA5K            .EQU    01EH            ;       05CH,00DH
SO5             .EQU    01FH            ;       082H,00DH
SO5K            .EQU    020H            ;       0A6H,00DH
LA5             .EQU    021H            ;       0C7H,00DH
SI5B            .EQU    022H            ;       0E7H,00DH
SI5             .EQU    023H            ;       005H,00EH

DO6             .EQU    024H            ;       022H,00EH
RE6B            .EQU    025H            ;       03DH,00EH
RE6             .EQU    026H            ;       056H,00EH
MI6B            .EQU    027H            ;       06EH,00EH
MI6             .EQU    028H            ;       084H,00EH
FA6             .EQU    029H            ;       09AH,00EH
FA6K            .EQU    02AH            ;       0AEH,00EH
SO6             .EQU    02BH            ;       0C1H,00EH
SO6K            .EQU    02CH            ;       0D3H,00EH
LA6             .EQU    02DH            ;       0E3H,00EH
SI6B            .EQU    02EH            ;       0F3H,00EH
SI6             .EQU    02FH            ;       002H,00FH

DO7             .EQU    030H            ;       012H,00FH
RE7B            .EQU    031H            ;       01FH,00FH
RE7             .EQU    032H            ;       02CH,00FH
MI7B            .EQU    033H            ;       038H,00FH
MI7             .EQU    034H            ;       043H,00FH
FA7             .EQU    035H            ;       04EH,00FH
FA7K            .EQU    036H            ;       058H,00FH
SO7             .EQU    037H            ;       061H,00FH
SO7K            .EQU    038H            ;       06AH,00FH
LA7             .EQU    039H            ;       072H,00FH
SI7B            .EQU    03AH            ;       07AH,00FH
SI7             .EQU    03BH            ;       082H,00FH
;<======================== Macro Define Area ==============================>
SETB:           .MACRO   BITN,ADDR
                .IF     BITN=0
                SMB0    <ADDR
                .ENDIF
                .IF     BITN=1
                SMB1    <ADDR
                .ENDIF
                .IF     BITN=2
                SMB2    <ADDR
                .ENDIF
                .IF     BITN=3
                SMB3    <ADDR
                .ENDIF
                .IF     BITN=4
                SMB4    <ADDR
                .ENDIF
                .IF     BITN=5
                SMB5    <ADDR
                .ENDIF
                .IF     BITN=6
                SMB6    <ADDR
                .ENDIF
                .IF     BITN=7
                SMB7    <ADDR
                .ENDIF
                .ENDM

RESB:           .MACRO   BITN,ADDR
                .IF     BITN=0
                RMB0    <ADDR
                .ENDIF
                .IF     BITN=1
                RMB1    <ADDR
                .ENDIF
                .IF     BITN=2
                RMB2    <ADDR
                .ENDIF
                .IF     BITN=3
                RMB3    <ADDR
                .ENDIF
                .IF     BITN=4
                RMB4    <ADDR
                .ENDIF
                .IF     BITN=5
                RMB5    <ADDR
                .ENDIF
                .IF     BITN=6
                RMB6    <ADDR
                .ENDIF
                .IF     BITN=7
                RMB7    <ADDR
                .ENDIF
                .ENDM

JBS:            .MACRO   BITN,ADDR,LAB
                .IF     BITN=0
                BBS0    <ADDR,LAB
                .ENDIF
                .IF     BITN=1
                BBS1    <ADDR,LAB
                .ENDIF
                .IF     BITN=2
                BBS2    <ADDR,LAB
                .ENDIF
                .IF     BITN=3
                BBS3    <ADDR,LAB
                .ENDIF
                .IF     BITN=4
                BBS4    <ADDR,LAB
                .ENDIF
                .IF     BITN=5
                BBS5    <ADDR,LAB
                .ENDIF
                .IF     BITN=6
                BBS6    <ADDR,LAB
                .ENDIF
                .IF     BITN=7
                BBS7    <ADDR,LAB
                .ENDIF
                .ENDM

JBR:            .MACRO   BITN,ADDR,LAB
              .IF     BITN=0
                BBR0    <ADDR,LAB
                .ENDIF
                .IF     BITN=1
                BBR1    <ADDR,LAB
                .ENDIF
                .IF     BITN=2
                BBR2    <ADDR,LAB
                .ENDIF
                .IF     BITN=3
                BBR3    <ADDR,LAB
                .ENDIF
                .IF     BITN=4
                BBR4    <ADDR,LAB
                .ENDIF
                .IF     BITN=5
                BBR5    <ADDR,LAB
                .ENDIF
                .IF     BITN=6
                BBR6    <ADDR,LAB
                .ENDIF
                .IF     BITN=7
                BBR7    <ADDR,LAB
                .ENDIF
                .ENDM

MAC_VOLUME      .MACRO  VOLUME,CHANNEL
                .IF     CHANNEL=0
                LDA     VOL_BUF
                AND     #$F0                    ; CHANNEL 0 USE VOL BIT3-0
                ORA     VOLUME
                STA     VOL
                STA     VOL_BUF
                .ENDIF
                .IF     CHANNEL=1
                LDA     VOL_BUF
                AND     #$0F                    ; CHANNEL 1 USE VOL BIT7-4
                ORA     VOLUME
                STA     VOL
                STA     VOL_BUF
                .ENDIF
                .ENDM

SIGN_LIMIT:     .MACRO
                BVC     NO_OVERFS#      ;
                BMI     P_OVER#         ;
                LDA     #$80            ;MIN
                BRA     NO_OVERFS#      ;
P_OVER#         LDA     #$7F            ;MAX
NO_OVERFS#                              ;
                .ENDM
;<======================= ROM Area (24K BYTES) ============================>
                .ORG    $A000
BASETIMER_VECT: JMP     BASETIMER_VT
PORT_VECT:      JMP     PORT_VT
TIMER1_VECT:    JMP     TIMER1_VT
TIMER0_VECT:    JMP     TIMER0_VT
DAC_VECT:       JMP     DAC_VT
INTX_VECT:      JMP     INTX_VT
NMI_VECT:       JMP     NMI_VT
RESET_VECT:     JMP     RESET_VT
BRK_VECT:       JMP     BRK_VT

BASETIMER_VT:
                RTI
PORT_VT:
                RTI
;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;;%  Function : TIMER1 INTERRUPT(7.8125 ms)                               %
;;%  Note     : MELODY_FLAG BIT7==0 ==>CH0 VOLUME EFFECT OFF              %
;;%           : MELODY_FLAG BIT7==1 ==>CH0 VOLUME EFFECT ON               %
;;%           : MELODY_FLAG BIT6==0 ==>CH0 DATA START ADDRESS NOT LOAD    %
;;%           : MELODY_FLAG BIT6==1 ==>CH0 DATA START ADDRESS ALREADY LOAD%
;;%           : MELODY_FLAG BIT5==1 ==>CH0 NOW SOUND DATA LENGTH >=20     %
;;%           : MELODY_FLAG BIT5==1 ==>CH0 NOW SOUND DATA LENGTH < 20     %
;;%           : MELODY_FLAG BIT3==0 ==>CH1 VOLUME EFFECT OFF              %
;;%           : MELODY_FLAG BIT3==1 ==>CH1 VOLUME EFFECT ON               %
;;%           : MELODY_FLAG BIT2==0 ==>CH1 DATA START ADDRESS NOT LOAD    %
;;%           : MELODY_FLAG BIT2==1 ==>CH1 DATA START ADDRESS ALREADY LOAD%
;;%           : MELODY_FLAG BIT1==1 ==>CH1 NOW SOUND DATA LENGTH >=20     %
;;%           : MELODY_FLAG BIT1==1 ==>CH1 NOW SOUND DATA LENGTH < 20     %
;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TIMER1_VT:
                PHA
                PHX
                PHY

                LDA     SOUND_FLAG0
                BNE     GET_CHANNEL0_DATA
                JMP     EXIT_CHANNEL0_MELODY
GET_CHANNEL0_DATA:
                JBS     6,MELODY_FLAG,OUT_CHANNEL0_SOUND
                TAX
                LDY     MUSIC_REPEAT_TAB-1,X
                STY     REPEAT_TIMES0
                SETB    6,MELODY_FLAG           ; DATA START ADDRESS ALREADY LOAD
LOAD_CHANNEL0_DATA:
                ASL     A
                TAX
                LDA     MUSIC_NUM_TAB-2,X       ; GET MUSIC TABLE HI ADDRESS
                STA     MUSIC_POINTER0          ; 
                LDA     MUSIC_NUM_TAB-1,X       ; GET MUSIC TABLE LO ADDRESS
                STA     MUSIC_POINTER1
GET_NEXT_DEGREE:
                LDY     #$00
                LDA     (MUSIC_POINTER0),Y      ; GET DEGREE
                CMP     #ENDC
                BEQ     CHECK_REPEAT_TIMES
                CMP     #MUTE
                BEQ     IS_CHANNEL0_MUTE
                CMP     #MUTE_END
                BNE     CHANNEL0_NOT_MUTE

⌨️ 快捷键说明

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