; ;DRUMMACH.SRC - DRUM MACHINE SOUNDS THRU MOCKINGBOARD ; ; ;*============================================================== ;* ML.INTEGRATOR - integrates basic pgm and ml code @ $804 ;* from NIBBLE, April 1990, (c) 1990 Stephen M. Hall, Mindcraft ;*============================================================== ; ORG $0801 ; TXTTAB EQU $67 BUF EQU $200 DOSVEC EQU $3D0 RUN EQU $D566 ; MSLOT EQU $C400 MSTS EQU MSLOT MDTA EQU MSTS+1 ; ;*===========* ;* SECTION 1 * ;*===========* ; BGN JMP STARTUP ; *** SEE SECTION 4 *** ;=================================================== ; BASIC INTERFACE: POKE 2055,DRUM NUMBER, CALL 2052 ; POKE 2056,SPEAKER ($00 OR $80) ;==================================================== JMP ORIGIN ; CALL 2052 ; DRUM DFB $01 ; POKE 2055, DRUM ; SPEAKER DFB $00 ;00=LEFT, 80=RIGHT ; REGISTER DFB $08 ; POKE 2057, REGISTER ; DATA DFB $00 ; POKE 2058, DATA ; JMP POKEREG ; CALL 2059 JMP INITMOCK ; CALL 2062 ; ORIGIN LDA DRUM CMP #$0 BCC EXIT CMP #$5 BCS EXIT JSR INITMOCK JSR SETNOISE LDA DRUM TAX LDA NOISE,X STA DATA LDA #$06 STA REGISTER JSR POKEREG LDA COARSE,X STA DATA LDA #$0C STA REGISTER JSR POKEREG JSR SOUNDNOW EXIT RTS ; ; INSTRUMENT DATA: NOISE PERIOD, COARSE TONE PERIOD ; ;CYMBAL, HIHAT, SNARE, TOMTOM, BASSDRUM NOISE DFB $01,$01,$04,$10,$1F COARSE DFB $10,$02,$04,$02,$04 ; ;==================================== ; POKE REGISTER WITH DATA ; POKEREG LDA SPEAKER ;GET SPEAKER (L/R) INTO Y AND #$80 TAY LDA REGISTER ;GET REGISTER # AND #$0F STA MDTA,Y LDA #$07 ;SEND REGISTER # STA MSTS,Y LDA #$04 STA MSTS,Y LDA DATA ;GET DATA BYTE STA MDTA,Y LDA #$06 ;SEND DATA BYTE STA MSTS,Y LDA #$04 STA MSTS,Y RTS ; INITMOCK LDA #$FF ;INIT STA MSLOT+$03 STA MSLOT+$83 LDA #$07 STA MSLOT+$02 STA MSLOT+$82 LDA #$00 ;RESET ALL PARMS TO 0 STA MSTS STA MSLOT+$80 LDA #$04 STA MSTS STA MSLOT+$80 RTS ; ;;;ALLOW USER TO PICK SPEAKER ;;; LDA #$00 ;SPEAKER= LEFT ;;; STA SPEAKER SETNOISE LDA #$07 ;ENABLE STA REGISTER LDA #$07 ; ALL NOISE STA DATA JSR POKEREG ;SEND IT LDA #$08 STA REGISTER LDA #$10 STA DATA JSR POKEREG INC REGISTER JSR POKEREG INC REGISTER JSR POKEREG RTS ; SOUNDNOW LDA #$0D STA REGISTER LDA #$09 ;ENVELOPE SHAPE STA DATA JSR POKEREG RTS ; EOF BRK ; ; ; ;*===========* ;* SECTION 2 * ;*===========* ;this can be called at end of BASIC program using CALL 2049 ; QUIT LDA #BGN STA TXTTAB LDA #$00 STA BGN STA BGN+1 STA BGN+2 JMP DOSVEC ; ;*===========* ;* SECTION 3 * ;*===========* ;this section gets written over by your BASIC program ;only used if running under DOS 3.3 - it is a one line program ; PGRM BRK DW PGRM1 DW $000A DFB $BA ;TOKEN FOR PRINT DFB $22,$04 ;"ctrl-D ; ;*** EDASM SETS HI BIT OF ASCII CHARACTERS - WE'LL GET RID OF THEM LATER RUNCMD ASC 'RUN ' ASC 'DRUMMACH.BAS' ;CHANGE TO YOUR BASIC PGM NAME ; DFB $00 ;MARKER FOR END OF STATEMENT PGRM1 BRK BRK ; ;*===========* ;* SECTION 4 * ;*===========* ;set up ptrs to new program and vector to quit exit ; STARTUP LDA #PGRM+1 STA TXTTAB LDA #QUIT STA BGN+1 ; ; you can add extra stuff here ; ex: &vectors, reset vectors, interface initialization, welcome message ; ;*===========* ;* SECTION 5 * ;*===========* ;used to run the basic program from PRODOS - setup filename at bottom ; LDA $BF00 CMP #$4C BNE NOPRODOS LDX CMD INX LDA #$8D STR STA BUF-1,X DEX BMI RUNPRO LDA CMD,X JMP STR ; RUNPRO JSR $BE03 ;BI VECTOR LDA $BE0F ;IF ERROR JSR $BE0C ;PRINT MSG RTS ; ; ***================================*** ; *** SET UP PRODOS RUN COMMAND HERE *** ; ***================================*** ; CMD DFB 16 ; LENGTH OF STRING BELOW ASC 'RUN DRUMMACH.BAS' ; (EDASM SETS HI BITS FOR US) ; ; ***-----------------*** ; *** DOS 3.3 ROUTINE *** ; ***-----------------*** NOPRODOS LDX #$00 ;FOR DOS 3.3, CONVERT PGM NAME TO ASCLOOP LDA RUNCMD,X ;ASCII WITH HI BIT CLEAR. BEQ RUNIT AND #$7F STA RUNCMD,X INX BNE ASCLOOP ; RUNIT JMP RUN BRK ;