home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
pdoseric.hdv
/
SOURCE
/
EDITVEL.SRC.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
5KB
|
159 lines
;
; EDIT.SRC0
;
ORG $1000
;
PTR EQU $06 ;SEQUENCE POINTER
DLYCTR EQU $FD ;DELAY COUNTER
SPEED EQU $FF ;SPEED OF PLAYBACK
;
;=================================================
ORIGIN JMP BEGINNIN
;
DURL DFB $00
DURH DFB $00
NOTE DFB $00
VEL DFB $00
;
;=================================================
BEGINNIN JSR INITIAL
;
SENDLOOP LDY #$00 ;GET DURATION HI BYTE
LDA (PTR),Y
BNE SEND4BYT
RTS ;EXIT PGM IF HI DUR = 0 (0-FF-2F-0)
;
INITIAL LDA #$13 ;INIT MIDI CARD
STA $C0A8
LDA #$11
STA $C0A8
LDA #$18 ;SPEED=24
STA SPEED
LDA $2003 ; OR FROM $2003
BEQ INIT1
STA SPEED
INIT1 LDA #$04 ;PTR = $2004
STA PTR
LDA #$20
STA PTR+1
RTS
;
; ;CONVERT VLQ TO 2 BYTE BINARY
SEND4BYT AND #$7F ;CONVERT HI DUR (STRIP HI BIT)
ROR A ;AND ROTATE
STA DURH
LDA #$00 ;GET LO BIT INTO HI BIT
ROR A
INY
ORA (PTR),Y ;OR WITH LO DUR
STA DURL
INY
LDA (PTR),Y
STA NOTE ;GET NOTE AND VEL
INY
LDA (PTR),Y
STA VEL
JSR PROCESS ;PROCESS THE 4 BYTES
JSR INCPTR ;GET NEXT CELL
CLV
BVC SENDLOOP ;LOOP BACK
;=================================================
INCPTR LDA PTR ;ADD 4 TO POINTER (EACH CELL=4 BYTES)
CLC
ADC #$04
STA PTR
LDA PTR+1
ADC #$00
STA PTR+1
RTS
;=================================================
PROCESS LDA DURH
BNE PROCDUR
LDA DURL
BNE PROCDUR
JSR PDL1
JSR NOTEOUT
RTS
;
PROCDUR JSR PROCCMD
JSR NOTEOUT
RTS
;=================================================
NOTEOUT LDA #$90
JSR MIDIOUT
LDA NOTE
JSR MIDIOUT
LDA VEL
JSR MIDIOUT
RTS
;
MIDIOUT STA $C0A9
;
MIDIOUT1 LDA $C0A8
AND #$02
BEQ MIDIOUT1
RTS
;=================================================
PROCCMD LDA DURH ;WE ARE PLAYING SONG, SO PROCESS DURS
STA DLYCTR+1
LDA DURL
STA DLYCTR
;
DELAY1 LDX DLYCTR ;WAIT FOR DELAY TO FINISH
BEQ DELAY2
DEC DLYCTR
LDA SPEED
JSR $FCA8
CLV
BVC DELAY1
;
DELAY2 LDX DLYCTR+1
BEQ CHKKEY
DEC DLYCTR+1
LDA SPEED
JSR $FCA8
DEC DLYCTR ;EX: FROM 200->1FF
CLV
BVC DELAY1
;
; GET PADDLE 1 READING AND SET VELOCITY
;
CHKKEY LDA $C000
BMI GOTAKEY
PDL1 LDA VEL
BEQ DONTPDL ;IF VEL=0 DON'T UPDATE
LDX #$01 ; GET PADDLE 1
JSR $FB1E
TYA
EOR #$FF
LSR A
BNE STORIT
ORA #$01 ; IF 0 MAKE IT 1
STORIT STA VEL ; INTO VEL
LDY #$03 ; AND UPDATE FILE
STA (PTR),Y
JSR $FDDA ; PRINT IT & GO BACK 2
LDA #$88
JSR $FDED
LDA #$88
JSR $FDED
DONTPDL RTS
;
GOTAKEY LDA $C010
AND #$7F
CMP #$08
BNE RTARR
DEC $FF
RTS
;
RTARR CMP #$15
BNE OUT
INC $FF
RTS
;
OUT PLA ; POP OUTTA HERE
PLA
PLA
PLA
RTS