; ; 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