home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
pdoseric.hdv
/
SOURCE
/
DRUMMACH.SRC.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
7KB
|
231 lines
;
;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+1
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+1
LDA #>PGRM+1
STA TXTTAB
LDA #<QUIT
STA BGN+2
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
;