home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 3: The Continuation
/
17-Bit_The_Continuation_Disc.iso
/
files
/
2432.dms
/
2432.adf
/
PINKNOISE
/
PINKnoise.s
< prev
Wrap
Text File
|
1992-12-16
|
5KB
|
275 lines
datalen EQU $8000 ; min: $15a , max $1fffe
INCDIR "include:"
INCLUDE "exec/types.i"
INCLUDE "exec/exec_lib.i"
INCLUDE "exec/libraries.i"
INCLUDE "exec/strings.i"
INCLUDE "libraries/dos.i"
INCLUDE "libraries/dos_lib.i"
INCLUDE "libraries/dosextens.i"
INCLUDE "intuition/intuition.i"
INCLUDE "intuition/intuitionbase.i"
INCLUDE "intuition/intuition_lib.i"
INCLUDE "intuition/screens.i"
INCLUDE "graphics/graphics_lib.i"
INCLUDE "hardware/custom.i"
INCLUDE "hardware/dmabits.i"
custom EQU $dff000
***************************************** FAST WB STARTUP CODE
movea.l a0,a3
suba.l a1,a1
movea.l 4.w,a6
jsr _LVOFindTask(a6)
movea.l d0,a2
tst.l pr_CLI(a2)
bne.s defchan
lea pr_MsgPort(a2),a0 ; wb message
jsr _LVOWaitPort(a6)
lea pr_MsgPort(a2),a0
jsr _LVOGetMsg(a6)
movea.l d0,a4
jsr defchan
movea.l a4,a1
movea.l 4.w,a6
jsr _LVOReplyMsg(a6)
moveq #RETURN_OK,d0
rts ; back to wb
***************************************** GET FIRST 0-3 OCCURRENCE IN CMDLINE
defchan move.l #$00030000+DMAF_AUD3,d3 ; default channel
getcmd move.b (a3)+,d0
cmpi.b #"?",d0
beq help
cmpi.b #LF,d0
ble.s kickver
cmpi.b #"0",d0
blt.s getcmd
cmpi.b #"2",d0
bgt.s getcmd
andi.w #%11,d0 ; channels 0,1, or 2
moveq #0,d3
move.w d0,d3
swap d3
bset d0,d3
***************************************** NEW WINDOW'S dY, dH IF KS 2.0+
kickver cmpi.w #34,LIB_VERSION(a6) ; ks 1.3
ble.s openint
addi.w #1,nwindow+nw_TopEdge
addi.w #1,nwindow+nw_Height
openint moveq #RETURN_FAIL+1,d7 ; returncode = 21 - no int.lib
lea intname,a1
moveq #33,d0 ; ks 1.2+
jsr _LVOOpenLibrary(a6)
beq fault
move.l d0,a6
***************************************** GET WB STRUCTURE
addq.l #1,d7 ; returncode = 22 - wb is closed
lea auddata,a0
move.l #sc_SIZEOF,d0
moveq #WBENCHSCREEN,d1
jsr _LVOGetScreenData(a6)
beq clsint
***************************************** SET WINDOW'S TOP EDGE AND HEIGHT
moveq #0,d0
move.b auddata+sc_BarHeight,d0
add.w d0,nwindow+nw_TopEdge
add.w d0,nwindow+nw_Height
; move.l auddata+sc_Width,nwindow+nw_MaxWidth
***************************************** SET WINDOW'S WIDTH
addq.l #1,d7 ; returncode = 23 - no gfx.lib
movea.l a6,a5
movea.l 4.w,a6
lea gfxname,a1
moveq #33,d0 ; ks 1.2+
jsr _LVOOpenLibrary(a6)
beq clsint
move.l d0,a6
move.l wtitle,a0
lea auddata+sc_RastPort,a1
moveq #endwtit-eotitle-1,d0
jsr _LVOTextLength(a6)
add.w d0,nwindow+nw_Width
***************************************** CHECK IF WINDOW'S WIDTH IS OK
move.w nwindow+nw_Width,d0
cmp.w auddata+sc_Width,d0
ble.s minwid
move.w auddata+sc_Width,nwindow+nw_Width
minwid cmpi.w #83,nwindow+nw_Width
bgt.s clsgfx
move.w #83,nwindow+nw_Width
clsgfx movea.l a6,a1
movea.l 4.w,a6
jsr _LVOCloseLibrary(a6)
exg.l a5,a6
***************************************** BUILD PINK-NOISE SAMPLE
lea auddata,a0
move.w #datalen-1,d0
filldat move.b custom+vhposr,d2
eor.b d2,d1
move.b custom+vhposr+1,d2
eor.b d2,d1
move.b -1(a0),d2
eor.b d2,d1
add.b -2(a0),d1
move.b d1,d2
andi.w #%1111,d2
delay dbf d2,delay
move.b d1,(a0)+
dbf d0,filldat
***************************************** PREPARE PAULA'S REGISTERS
lea custom+aud,a0
swap d3
move.w d3,d0
mulu #$10,d0
swap d3
setcust move.l #auddata,ac_ptr(a0,d0.w)
move.w #(datalen/2),ac_len(a0,d0.w)
move.w #200,ac_per(a0,d0.w)
move.w #64,ac_vol(a0,d0.w)
***************************************** OPEN THE WINDOW
addq.l #1,d7 ; returncode = 24 - no window
lea nwindow,a0
jsr _LVOOpenWindow(a6)
beq.s clsint
movea.l d0,a2
**************************************** PLAY THE SAMPLE
bset #DMAB_SETCLR,d3
move.w d3,custom+dmacon
**************************************** WAIT THE USER HITS THE CLS_GAD
exg.l a5,a6
move.l wd_UserPort(a2),a0
jsr _LVOWaitPort(a6)
move.l wd_UserPort(a2),a0
jsr _LVOGetMsg(a6)
movea.l d0,a1
jsr _LVOReplyMsg(a6)
exg.l a5,a6
**************************************** STOP THE SAMPLE
bclr #DMAB_SETCLR,d3
move.w d3,custom+dmacon
**************************************** FREE ALL RESOURCES
movea.l a2,a0
jsr _LVOCloseWindow(a6)
moveq #RETURN_OK,d7
clsint movea.l a6,a1
movea.l 4.w,a6
jsr _LVOCloseLibrary(a6)
**************************************** CLEAR BSS (PURE PGM)
fault lea auddata,a0
move.l #(datalen/4)-1,d0
pure move.l #0,(a0)+
dbf d0,pure
lea purepos,a0
lea nwindow,a1
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l d7,d0
rts
**************************************** FREE ALL RESOURCES
help moveq #RETURN_FAIL+5,d7 ; returncode = 25 - no dos.lib
lea dosname,a1
moveq #33,d0 ; ks 1.2+
jsr _LVOOpenLibrary(a6)
beq.s fault
move.l d0,a6
moveq #RETURN_OK,d7
jsr _LVOOutput(a6)
beq.s clsdos
move.l d0,d1
move.l #wtitle,d2
move.l #endhelp-wtitle,d3
move.b #" ",eotitle
jsr _LVOWrite(a6)
move.b #EOS,eotitle
clsdos movea.l a6,a1
movea.l 4.w,a6
jsr _LVOCloseLibrary(a6)
bra.s fault
SECTION pinksample,bss_c
DS.B 2
auddata DS.B datalen
SECTION strings,data
purepos DC.W 0,1,84,0
nwindow DC.W 0,1
DC.W 84,0
DC.B 0,1
DC.L CLOSEWINDOW
DC.L WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE
DC.L 0
DC.L 0
DC.L wtitle
DC.L 0
DC.L 0
DC.W 0,0,0,0
DC.W WBENCHSCREEN
DC.B "$VER: "
wtitle DC.B "PINKnoise V1.00"
eotitle DC.B EOS,"- by /\/ / /-<",LF
endwtit ; dummy
DC.B "args: [0|1|2|3]/S - default channel is 3",LF
; DC.B "the parser will scan first occurrence of one of the args",LF
endhelp ; dummy
intname INTNAME
gfxname GRAFNAME
dosname DOSNAME
EVEN
END