home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
eric.hdv
/
SOURCE
/
MULTIADJ.SC2.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
7KB
|
248 lines
; *****************************
; * MULTI.SRC2 *
; * (C) 1992, ERIC RANGELL *
; *****************************
;
;
; PAGE FAULT LOGIC
;
; GO BACK UNTIL YOU FIND FILE POSITION WHERE NEXT PART TO BE LOADED
;
PGFAULT LDX CURRTRK
LDA CURADRL,X
STA BACKPTR
LDA CURADRH,X ;GOT CURRENT ADDRESS OF FAULTING TRACK
STA BACKPTR+1
JSR DECRBACK
ONEMORE JSR DECRBACK ;SUBTRACT 2
LDY #$00
LDA (BACKPTR),Y ;IF STS BYTE GO BACK ONE MORE
BMI ONEMORE
INC BACKPTR ;ADD 1
BNE DONTADD1
INC BACKPTR+1
;
;
DONTADD1 LDX CURRTRK ;WE ARE POINTING TO 1ST BYTE OF INSTRUCTION
SEC ;WE WILL LOAD TRACK FROM THIS POSITION
LDA BACKPTR
SBC BUFRADRL,X ;SUBTRACT STARTING ADRS OF TRACK
STA BACKPTR ;FROM BACKPTR
LDA BACKPTR+1 ;TO GET RELATIVE OFFSET
SBC BUFRADRH,X
STA BACKPTR+1
CLC ;THEN ADD BACKPTR TO FILE POSN POINTER
LDA BACKPTR
ADC POSPTRL,X
STA POSPTRL,X
LDA BACKPTR+1
ADC POSPTRM,X
STA POSPTRM,X
LDA #$00
ADC POSPTRH,X
STA POSPTRH,X
JMP DOMLI
;
MLIERROR JSR $FDDA ;PRINT RETURN CODE AND ABEND IF MLI ERROR
BRK
;
DOMLI LDA CURRTRK ;CREATE FILENAME FROM TRACK #: EX: T0, T1, T2
CLC
ADC #$30
STA FILENUM
;
JSR MLI
DFB $C8 ;OPEN FILE
DFB >OPENPRM,<OPENPRM
BCS MLIERROR
;
LDA OPENREF
STA POSNREF
STA READREF
STA CLOSREF
LDX CURRTRK
LDA POSPTRL,X
STA POSNL
LDA POSPTRM,X
STA POSNM
LDA POSPTRH,X
STA POSNH
;
JSR MLI
DFB $CE ; SET POSITION
DFB >POSNPARM,<POSNPARM
BCS MLIERROR
;
LDX CURRTRK
LDA BUFRADRL,X
STA READBUF
LDA BUFRADRH,X
STA READBUF+1
LDA BUFRLENL,X
STA READLEN
LDA BUFRLENH,X
STA READLEN+1
;
JSR MLI
DFB $CA ; READ REQUEST
DFB >READPARM,<READPARM
BCS MLIERROR
;
JSR MLI
DFB $CC ; CLOSE REQUEST
DFB >CLOSPARM,<CLOSPARM
BCS MLIERROR
;
; UPDATE POINTERS AFTER SUCCESSFUL READ FROM RAMDISK
;
LDX CURRTRK
LDA BUFRADRL,X
STA CURADRL,X
LDA BUFRADRH,X
STA CURADRH,X
;
JSR PRCSDLY ;DO THE DELAY & JUMP BACK
JMP MAINLINE
;
;
OPENPRM DFB $03
DFB >FILENAME,<FILENAME ;PATHNAME ADDRESS
DFB >MLIBUFR,<MLIBUFR ;FILE BUFFER ADDRESS
OPENREF DFB $00 ;REFERENCE NUMBER
;
FILENAME DFB $02
DFB $54 ;FILENAME = T0, T1,T2
FILENUM DFB $30
;
POSNPARM DFB $02
POSNREF DFB $01 ;FILE REFERENCE #
POSNL DFB $00 ;NEW FILE POSITION
POSNM DFB $00
POSNH DFB $00
;
READPARM DFB $04
READREF DFB $01 ;FILE REFERENCE #
READBUF DFB $00,$20 ;DATA BUFFER ADDRESS
READLEN DFB $00,$08 ; REQUESTED LENGTH
DFB $00,$00 ; ACTUAL LENGTH
;
CLOSPARM DFB $01
CLOSREF DFB $01 ;REFERENCE #
;
;================================================
;ADJUSTMENT ROUTINES - TO MAKE MUSIC SOUND MORE HUMAN
;ADJUST DURATION AND VELOCITY VALUES BY UP TO 2 STANDARD DEVIATIONS
;FOR DURATION: IF DUR > 30, ADJUST BY UP TO +-15
;FOR VELOCITY: IF VEL >=20 AND VEL <=115, ADJUST BY UP TO +-10
;
RND EQU $EFAE ;PUTS RANDOM # IN FAC
FACBYTE EQU $9F ;MIDDLE BYTE OF FAC
;
TEMPA DFB $00
TEMPX DFB $00
TEMPY DFB $00
;
ADJDRTN STA TEMPA
STX TEMPX
STY TEMPY
LDA SMALLEST+2 ;HI BYTE
BNE ADJDRTN0 ;IF >0, DEFINITELY ADJUST
LDA SMALLEST+3 ;ELSE CHECK LO BYTE
CMP #30
BEQ ADJDROUT
BCC ADJDROUT
ADJDRTN0 JSR RND
LDA FACBYTE
AND #$0F ;RANDOM # 0-15
LDX FACBYTE
BMI SUBTRIT
CLC
ADC SMALLEST+3
STA SMALLEST+3
LDA #$00
ADC SMALLEST+2
STA SMALLEST+2
JMP EXIT
SUBTRIT SEC
SBC SMALLEST+3
STA SMALLEST+3
LDA #$00
SBC SMALLEST+2
STA SMALLEST+2
ADJDROUT JMP EXIT
;
; FOR ADJVOL, BYTE IS IN ASAVE.
; FIRST FIGURE OUT IF WE HAVE A VOL BYTE.
; IF ADJ MADE, PUT BACK IN ASAVE.
ADJVOL STA TEMPA
STX TEMPX
STY TEMPY
LDA ASAVE
STA INBYTE
LDA STS
BEQ CHK90
LDA INBYTE
BPL STS91
CHK90 LDA INBYTE
AND #$F0
CMP #$90
BNE INVAL
LDA #$91
STA STS
JMP EXIT
INVAL LDA #$00
STA STS
JMP EXIT
STS91 LDA STS
CMP #$91
BNE STS92
LDA #$92
STA STS
JMP EXIT
STS92 LDA STS
CMP #$92
BNE STSEXIT
LDA #$91
STA STS
LDA INBYTE
BEQ STSEXIT ;NOTEOFF - EXIT
;
; WE GOT IT!
CMP #20 ;CHECK IF IN BOUNDS
BCC STSEXIT
CMP #116
BCS STSEXIT
JSR RND
LDA FACBYTE
AND #$0F ;RANDOM # 0-15
CMP #$0A
BCS INRANGE
SEC
SBC #$06
INRANGE LDX FACBYTE
BMI SUBIT
CLC
ADC ASAVE
STA ASAVE
JMP EXIT
SUBIT SEC
SBC ASAVE
STA ASAVE
STSEXIT JMP EXIT
;
EXIT LDA TEMPA
LDX TEMPX
LDY TEMPY
RTS
;
INBYTE DFB $00
STS DFB $91
;
;=================================================
EOF DFB $FF ;EOF MARKER
;
;ADJUST ORIGIN BELOW DEPENDING ON LENGTH OF CODE
;
ORG START+$700
MLIBUFR DS $400