Heaven/TQA Posted May 3, 2015 Share Posted May 3, 2015 to assemble a bin/cart image... I need to have assembling in OPT f+ mode in MADS... no problem to sort the segments into RAM/ROM ascending order... but how did you 5200 guys handled the RMT player itself with it's buffers etc? or workaround is to stop Altirra by loading and then save the bin file with .filemem ? Quote Link to comment Share on other sites More sharing options...
+JAC! Posted May 3, 2015 Share Posted May 3, 2015 I always use direct assignments for the memory used by RMT instead of the "ORG *+" stuff. You have to be all little careful to actually leave enough space for the ZP parts (so it does not extended into $100+). Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 4, 2015 Author Share Posted May 4, 2015 did someone managed to get RMT player stick in ROM? what is minimum RAM I need except for ZP variables? it takes $400 buffers prior player but do I need all of them in RAM? I guess not... Quote Link to comment Share on other sites More sharing options...
MaPa Posted May 4, 2015 Share Posted May 4, 2015 (edited) RMT player uses self modifying code (variables defined as operand of LD? # instructions etc.) so it has to be in RAM. Only way is to modify the source code. I just looked into it and it seems that is uses 9 variables like LD? # operands. So you can move them somewhere in RAM, and replace the instructions.. then it will not run anyway as you need move the variables before the player, but it should be just changing some ORG. Edited May 4, 2015 by MaPa Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 4, 2015 Author Share Posted May 4, 2015 Thanks MaPa.... any experience regarding the tables at player-$0400? are these dynamic? Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 4, 2015 Author Share Posted May 4, 2015 basicly it uses ldy #$ff v_audctl equ *-1 fex.... so actually I try to spot every of these code segments and try to set them according to the module. Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 4, 2015 Author Share Posted May 4, 2015 and such stuff is not good for using in ROM: lsr @ lsr @ sta jmx+1 jmx bcc * jmp cmd0 nop jmp cmd1 IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd2 EIF IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd3 EIF IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd4 EIF IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd5 EIF IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd6 EIF IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd7 EIF EIF ELS IFT FEAT_FILTER||FEAT_BASS16 lda reg2 sta trackn_command,x EIF EIF Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 4, 2015 Author Share Posted May 4, 2015 ok... my player works now... Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 5, 2015 Author Share Posted May 5, 2015 and MaPa... I was wondering... isn't POKEY officially at $ebxx and not $E8xx? Quote Link to comment Share on other sites More sharing options...
MaPa Posted May 5, 2015 Share Posted May 5, 2015 No... in XASM help is mentioned $e8xx.. on wiki is $E8xx too (http://en.wikipedia.org/wiki/POKEY#Registers) Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 5, 2015 Author Share Posted May 5, 2015 (edited) v_maxtracklen equ $b7 v_speed equ $b8 v_instrspeed equ $b9 v_ainstrspeed equ $ba v_abeat equ $bb v_bspeed equ $bc v_audctl equ $bd music_patch equ $bc TRACKS equ 4 PLAYER equ rmtplayer ;* ;* RMT FEATures definitions file ;* For optimizations of RMT player routine to concrete RMT modul only! ;* --------BEGIN-------- ;* C:\jac\wudsn\Workspace\Atari800\Voxel\ars4_b000.rmt FEAT_SFX equ 0 FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable FEAT_NOSTARTINGSONGLINE equ 1 FEAT_INSTRSPEED equ 1 FEAT_CONSTANTSPEED equ 3 ;(0 times) FEAT_COMMAND1 equ 1 ;(18 times) FEAT_COMMAND2 equ 0 ;(0 times) FEAT_COMMAND3 equ 0 ;(0 times) FEAT_COMMAND4 equ 0 ;(0 times) FEAT_COMMAND5 equ 1 ;(4 times) FEAT_COMMAND6 equ 1 ;(10 times) FEAT_COMMAND7SETNOTE equ 0 ;(0 times) FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times) FEAT_PORTAMENTO equ 1 ;(10 times) FEAT_FILTER equ 1 ;(20 times) FEAT_FILTERG0L equ 1 ;(20 times) FEAT_FILTERG1L equ 0 ;(0 times) FEAT_FILTERG0R equ 0 ;(0 times) FEAT_FILTERG1R equ 0 ;(0 times) FEAT_BASS16 equ 0 ;(0 times) FEAT_BASS16G1L equ 0 ;(0 times) FEAT_BASS16G3L equ 0 ;(0 times) FEAT_BASS16G1R equ 0 ;(0 times) FEAT_BASS16G3R equ 0 ;(0 times) FEAT_VOLUMEONLYG0L equ 0 ;(0 times) FEAT_VOLUMEONLYG2L equ 0 ;(0 times) FEAT_VOLUMEONLYG3L equ 0 ;(0 times) FEAT_VOLUMEONLYG0R equ 0 ;(0 times) FEAT_VOLUMEONLYG2R equ 0 ;(0 times) FEAT_VOLUMEONLYG3R equ 0 ;(0 times) FEAT_TABLETYPE equ 1 ;(1 times) FEAT_TABLEMODE equ 0 ;(0 times) FEAT_TABLEGO equ 0 ;(0 times) FEAT_AUDCTLMANUALSET equ 1 ;(2 times) FEAT_VOLUMEMIN equ 0 ;(0 times) FEAT_EFFECTVIBRATO equ 1 ;(2 times) FEAT_EFFECTFSHIFT equ 0 ;(0 times) ;* --------END-------- ;* RMT ZeroPage addresses org 203 p_tis p_instrstable org *+2 p_trackslbstable org *+2 p_trackshbstable org *+2 p_song org *+2 ns org *+2 nr org *+2 nt org *+2 reg1 org *+1 reg2 org *+1 reg3 org *+1 tmp org *+1 IFT FEAT_COMMAND2 frqaddcmd2 org *+1 EIF COLBK equ $D01A WSYNC equ $D40A HSCROLL equ $D404 HS equ 16 BACKCOLOR equ $00 track_variables equ $220 ;PLAYER-$400+$e0 trackn_db equ track_variables+TRACKS trackn_hb equ track_variables+2*TRACKS trackn_idx equ track_variables+3*TRACKS trackn_pause equ track_variables+4*TRACKS trackn_note equ track_variables+5*TRACKS trackn_volume equ track_variables+6*TRACKS trackn_shiftfrq equ track_variables+7*TRACKS IFT FEAT_PORTAMENTO trackn_portafrqc equ track_variables+8*TRACKS trackn_portafrqa equ track_variables+9*TRACKS trackn_portaspeed equ track_variables+10*TRACKS trackn_portaspeeda equ track_variables+11*TRACKS trackn_portadepth equ track_variables+12*TRACKS EIF trackn_instrx2 equ track_variables+13*TRACKS trackn_instrdb equ track_variables+14*TRACKS trackn_instrhb equ track_variables+15*TRACKS trackn_instridx equ track_variables+16*TRACKS trackn_instrlen equ track_variables+17*TRACKS trackn_instrlop equ track_variables+18*TRACKS trackn_instrreachend equ track_variables+19*TRACKS trackn_volumeslidedepth equ track_variables+20*TRACKS trackn_volumeslidevalue equ track_variables+21*TRACKS IFT FEAT_VOLUMEMIN trackn_volumemin equ hhh; org *+TRACKS EIF FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT IFT FEAT_EFFECTS trackn_effdelay equ equ track_variables+22*TRACKS EIF IFT FEAT_EFFECTVIBRATO trackn_effvibratoa equ track_variables+23*TRACKS EIF IFT FEAT_EFFECTFSHIFT trackn_effshift equ hhh; org *+TRACKS EIF trackn_tabletypespeed equ track_variables+24*TRACKS IFT FEAT_TABLEMODE trackn_tablemode equ hhh ;org *+TRACKS EIF trackn_tablenote equ track_variables+25*TRACKS trackn_tablea equ track_variables+26*TRACKS trackn_tableend equ track_variables+27*TRACKS IFT FEAT_TABLEGO trackn_tablelop equ hhh ;org *+TRACKS EIF trackn_tablespeeda equ track_variables+28*TRACKS IFT FEAT_FILTER||FEAT_BASS16 trackn_command equ track_variables+29*TRACKS EIF IFT FEAT_BASS16 trackn_outnote equ hhh ;org *+TRACKS EIF IFT FEAT_FILTER trackn_filter equ track_variables+30*TRACKS EIF trackn_audf equ track_variables+31*TRACKS trackn_audc equ track_variables+32*TRACKS IFT FEAT_AUDCTLMANUALSET trackn_audctl equ track_variables+33*TRACKS EIF v_aspeed equ track_variables+34*TRACKS track_endvariables .if music=1 org msx ins "ars4_b000.rmt",6 ;* ;* Raster Music Tracker, RMT Atari routine version 1.20090108 ;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009 ;* http://raster.atari.org ;* ;* Warnings: ;* ;* 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed ;* from any other routines) as well as cca 1KB of memory before the "PLAYER" ;* address for frequency tables and functionary variables. It's: ;* a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer ;* b) from PLAYER-$0320 to PLAYER for mono RMTplayer ;* ;* 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page. ;* i.e. "PLAYER" address can be $..00 only! ;* ;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time. ;* ;* STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono ;* ;1 => compile RMTplayer for 8 tracks stereo ;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 ;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 ;* org PLAYER-$100-$140-$40+2 INSTRPAR equ 12 tabbeganddistor dta frqtabpure-frqtab,$00 dta frqtabpure-frqtab,$20 dta frqtabpure-frqtab,$40 dta frqtabbass1-frqtab,$c0 dta frqtabpure-frqtab,$80 dta frqtabpure-frqtab,$a0 dta frqtabbass1-frqtab,$c0 dta frqtabbass2-frqtab,$c0 IFT FEAT_EFFECTVIBRATO vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0 vib0 dta 0 vib1 dta 1,-1,-1,1 vib2 dta 1,0,-1,-1,0,1 vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1 vibtabnext dta vib0-vib0+0 dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0 dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0 dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0 EIF org PLAYER-$100-$140 IFT FEAT_BASS16 frqtabbasslo dta $F2,$33,$96,$E2,$38,$8C,$00,$6A,$E8,$6A,$EF,$80,$08,$AE,$46,$E6 dta $95,$41,$F6,$B0,$6E,$30,$F6,$BB,$84,$52,$22,$F4,$C8,$A0,$7A,$55 dta $34,$14,$F5,$D8,$BD,$A4,$8D,$77,$60,$4E,$38,$27,$15,$06,$F7,$E8 dta $DB,$CF,$C3,$B8,$AC,$A2,$9A,$90,$88,$7F,$78,$70,$6A,$64,$5E,$00 EIF org PLAYER-$100-$100 frqtab ERT [<frqtab]!=0 ;* frqtab must begin at the memory page bound! (i.e. $..00 address) frqtabbass1 dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$F2,$E6,$DA,$CE,$BF,$B6,$AA,$A1 dta $98,$8F,$89,$80,$7A,$71,$6B,$65,$5F,$5C,$56,$50,$4D,$47,$44,$3E dta $3C,$38,$35,$32,$2F,$2D,$2A,$28,$25,$23,$21,$1F,$1D,$1C,$1A,$18 dta $17,$16,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07 frqtabbass2 dta $FF,$F1,$E4,$D8,$CA,$C0,$B5,$AB,$A2,$99,$8E,$87,$7F,$79,$73,$70 dta $66,$61,$5A,$55,$52,$4B,$48,$43,$3F,$3C,$39,$37,$33,$30,$2D,$2A dta $28,$25,$24,$21,$1F,$1E,$1C,$1B,$19,$17,$16,$15,$13,$12,$11,$10 dta $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00 frqtabpure dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80,$79,$72,$6C,$66 dta $60,$5B,$55,$51,$4C,$48,$44,$40,$3C,$39,$35,$32,$2F,$2D,$2A,$28 dta $25,$23,$21,$1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00,$00 IFT FEAT_BASS16 frqtabbasshi dta $0D,$0D,$0C,$0B,$0B,$0A,$0A,$09,$08,$08,$07,$07,$07,$06,$06,$05 dta $05,$05,$04,$04,$04,$04,$03,$03,$03,$03,$03,$02,$02,$02,$02,$02 dta $02,$02,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00 dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 EIF org PLAYER-$0100 volumetab dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 dta $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01 dta $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02 dta $00,$00,$00,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$03,$03,$03 dta $00,$00,$01,$01,$01,$01,$02,$02,$02,$02,$03,$03,$03,$03,$04,$04 dta $00,$00,$01,$01,$01,$02,$02,$02,$03,$03,$03,$04,$04,$04,$05,$05 dta $00,$00,$01,$01,$02,$02,$02,$03,$03,$04,$04,$04,$05,$05,$06,$06 dta $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07 dta $00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07,$08 dta $00,$01,$01,$02,$02,$03,$04,$04,$05,$05,$06,$07,$07,$08,$08,$09 dta $00,$01,$01,$02,$03,$03,$04,$05,$05,$06,$07,$07,$08,$09,$09,$0A dta $00,$01,$01,$02,$03,$04,$04,$05,$06,$07,$07,$08,$09,$0A,$0A,$0B dta $00,$01,$02,$02,$03,$04,$05,$06,$06,$07,$08,$09,$0A,$0A,$0B,$0C dta $00,$01,$02,$03,$03,$04,$05,$06,$07,$08,$09,$0A,$0A,$0B,$0C,$0D dta $00,$01,$02,$03,$04,$05,$06,$07,$07,$08,$09,$0A,$0B,$0C,$0D,$0E dta $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F org PLAYER ;* ;* Set of RMT main vectors: ;* jmp rmt_init jmp rmt_play jmp rmt_p3 jmp rmt_silence jmp SetPokey IFT FEAT_SFX jmp rmt_sfx ;* A=note(0,..,60),X=channel(0,..,3 or 0,..,7),Y=instrument*2(0,2,4,..,126) EIF rmt_init stx ns sty ns+1 IFT FEAT_NOSTARTINGSONGLINE==0 pha EIF IFT track_endvariables-track_variables>255 ldy #0 tya ri0 sta track_variables,y sta track_endvariables-$100,y iny bne ri0 ELS ldy #136 ;track_endvariables-track_variables lda #0 ri0 sta track_variables-1,y dey bne ri0 EIF ldy #4 lda (ns),y sta v_maxtracklen iny IFT FEAT_CONSTANTSPEED==0 lda (ns),y sta v_speed EIF IFT FEAT_INSTRSPEED==0 iny lda (ns),y sta v_instrspeed sta v_ainstrspeed ELI FEAT_INSTRSPEED>1 lda #FEAT_INSTRSPEED sta v_ainstrspeed EIF ldy #8 ri1 lda (ns),y sta p_tis-8,y iny cpy #8+8 bne ri1 IFT FEAT_NOSTARTINGSONGLINE==0 pla pha IFT TRACKS>4 asl @ asl @ asl @ clc adc p_song sta p_song pla php and #$e0 asl @ rol @ rol @ rol @ ELS asl @ asl @ clc adc p_song sta p_song pla php and #$c0 asl @ rol @ rol @ EIF plp adc p_song+1 sta p_song+1 EIF jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 rmt_silence IFT STEREOMODE>0 lda #0 sta $eb08 sta $e818 ldy #2 sty $eb0f sty $e81f ldy #8 si1 sta $eb00,y sta $e810,y dey bpl si1 ELS lda #0 sta $eb08 ldy #2 sty $eb0f ldy #8 si1 sta $eb00,y dey bpl si1 EIF IFT FEAT_INSTRSPEED==0 lda v_instrspeed ELS lda #FEAT_INSTRSPEED EIF rts GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 GetSongLine ldx #0 stx v_abeat nn0 nn1 txa tay lda (p_song),y cmp #$fe bcs nn2 tay lda (p_trackslbstable),y sta trackn_db,x lda (p_trackshbstable),y sta trackn_hb,x lda #0 sta trackn_idx,x lda #1 nn1a2 sta trackn_pause,x lda #$80 sta trackn_instrx2,x inx cpx #TRACKS bne nn1 lda p_song clc adc #TRACKS sta p_song bcc GetTrackLine inc p_song+1 jmp GetTrackLine nn2 beq nn3 lda #0 beq nn1a2 nn3 ldy #2 lda (p_song),y tax iny lda (p_song),y sta p_song+1 stx p_song ldx #0 beq nn0 GetTrackLine IFT FEAT_CONSTANTSPEED==0 lda v_speed sta v_bspeed EIF ldx #-1 oo1 inx dec trackn_pause,x bne oo1x lda trackn_db,x sta ns lda trackn_hb,x sta ns+1 oo1i ldy trackn_idx,x inc trackn_idx,x lda (ns),y sta reg1 and #$3f cmp #61 beq oo1a bcs oo2 sta trackn_note,x IFT FEAT_BASS16 sta trackn_outnote,x EIF iny lda (ns),y lsr @ and #$3f*2 sta trackn_instrx2,x oo1a lda #1 sta trackn_pause,x ldy trackn_idx,x inc trackn_idx,x lda (ns),y lsr @ ror reg1 lsr @ ror reg1 lda reg1 IFT FEAT_GLOBALVOLUMEFADE sec sbc #$00 RMTGLOBALVOLUMEFADE equ *-1 bcs voig lda #0 voig EIF and #$f0 sta trackn_volume,x oo1x cpx #TRACKS-1 bne oo1 IFT FEAT_CONSTANTSPEED==0 lda v_bspeed sta v_speed ELS lda #FEAT_CONSTANTSPEED EIF sta v_aspeed jmp InitOfNewSetInstrumentsOnly oo2 cmp #63 beq oo63 lda reg1 and #$c0 beq oo62_b asl @ rol @ rol @ sta trackn_pause,x jmp oo1x oo62_b iny lda (ns),y sta trackn_pause,x inc trackn_idx,x jmp oo1x oo63 lda reg1 IFT FEAT_CONSTANTSPEED==0 bmi oo63_1X iny lda (ns),y sta v_bspeed inc trackn_idx,x jmp oo1i oo63_1X EIF cmp #255 beq oo63_11 iny lda (ns),y sta trackn_idx,x jmp oo1i oo63_11 jmp GetSongLine p2xrmtp3 jmp rmt_p3 p2x0 dex bmi p2xrmtp3 InitOfNewSetInstrumentsOnly ldy trackn_instrx2,x bmi p2x0 IFT FEAT_SFX jsr SetUpInstrumentY2 jmp p2x0 rmt_sfx sta trackn_note,x IFT FEAT_BASS16 sta trackn_outnote,x EIF lda #$f0 ;* sfx note volume*16 sta trackn_volume,x EIF SetUpInstrumentY2 lda (p_instrstable),y sta trackn_instrdb,x sta nt iny lda (p_instrstable),y sta trackn_instrhb,x sta nt+1 IFT FEAT_FILTER lda #1 sta trackn_filter,x EIF IFT FEAT_TABLEGO IFT FEAT_FILTER tay ELS ldy #1 EIF lda (nt),y sta trackn_tablelop,x iny ELS ldy #2 EIF lda (nt),y sta trackn_instrlen,x iny lda (nt),y sta trackn_instrlop,x iny lda (nt),y sta trackn_tabletypespeed,x IFT FEAT_TABLETYPE||FEAT_TABLEMODE and #$3f EIF sta trackn_tablespeeda,x IFT FEAT_TABLEMODE lda (nt),y and #$40 sta trackn_tablemode,x EIF IFT FEAT_AUDCTLMANUALSET iny lda (nt),y sta trackn_audctl,x iny ELS ldy #6 EIF lda (nt),y sta trackn_volumeslidedepth,x IFT FEAT_VOLUMEMIN iny lda (nt),y sta trackn_volumemin,x IFT FEAT_EFFECTS iny EIF ELS IFT FEAT_EFFECTS ldy #8 EIF EIF IFT FEAT_EFFECTS lda (nt),y sta trackn_effdelay,x IFT FEAT_EFFECTVIBRATO iny lda (nt),y tay lda vibtabbeg,y sta trackn_effvibratoa,x EIF IFT FEAT_EFFECTFSHIFT ldy #10 lda (nt),y sta trackn_effshift,x EIF EIF lda #128 sta trackn_volumeslidevalue,x sta trackn_instrx2,x asl @ sta trackn_instrreachend,x sta trackn_shiftfrq,x tay lda (nt),y sta trackn_tableend,x adc #0 sta trackn_instridx,x lda #INSTRPAR sta trackn_tablea,x tay lda (nt),y sta trackn_tablenote,x IFT FEAT_SFX rts ELS jmp p2x0 EIF rmt_play jsr SetPokey IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 dec v_ainstrspeed bne rmt_p3 EIF IFT FEAT_INSTRSPEED==0 lda v_instrspeed sta v_ainstrspeed ELI FEAT_INSTRSPEED>1 lda #FEAT_INSTRSPEED sta v_ainstrspeed EIF dec v_aspeed bne rmt_p3 inc v_abeat lda v_abeat cmp v_maxtracklen beq p2o3 jmp GetTrackLine p2o3 jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 go_ppnext jmp ppnext rmt_p3 lda #>frqtab sta nr+1 ldx #TRACKS-1 pp1 lda trackn_instrhb,x beq go_ppnext sta ns+1 lda trackn_instrdb,x sta ns ldy trackn_instridx,x lda (ns),y sta reg1 iny lda (ns),y sta reg2 iny lda (ns),y sta reg3 iny tya cmp trackn_instrlen,x bcc pp2 beq pp2 lda #$80 sta trackn_instrreachend,x lda trackn_instrlop,x pp2 sta trackn_instridx,x lda reg1 IFT TRACKS>4 cpx #4 bcc pp2s lsr @ lsr @ lsr @ lsr @ pp2s EIF and #$0f ora trackn_volume,x tay lda volumetab,y sta tmp lda reg2 and #$0e tay lda tabbeganddistor,y sta nr lda tmp ora tabbeganddistor+1,y sta trackn_audc,x IFT FEAT_EFFECTS lda trackn_effdelay,x beq ei2 cmp #1 bne ei1 lda trackn_shiftfrq,x IFT FEAT_EFFECTFSHIFT clc adc trackn_effshift,x EIF IFT FEAT_EFFECTVIBRATO clc ldy trackn_effvibratoa,x adc vib0,y EIF sta trackn_shiftfrq,x IFT FEAT_EFFECTVIBRATO lda vibtabnext,y sta trackn_effvibratoa,x EIF jmp ei2 ei1 dec trackn_effdelay,x ei2 EIF ldy trackn_tableend,x cpy #INSTRPAR+1 bcc ei3 lda trackn_tablespeeda,x bpl ei2f tya cmp trackn_tablea,x bne ei2c2 IFT FEAT_TABLEGO lda trackn_tablelop,x ELS lda #INSTRPAR EIF sta trackn_tablea,x bne ei2a ei2c2 inc trackn_tablea,x ei2a lda trackn_instrdb,x sta nt lda trackn_instrhb,x sta nt+1 ldy trackn_tablea,x lda (nt),y IFT FEAT_TABLEMODE ldy trackn_tablemode,x beq ei2e clc adc trackn_tablenote,x ei2e EIF sta trackn_tablenote,x lda trackn_tabletypespeed,x IFT FEAT_TABLETYPE||FEAT_TABLEMODE and #$3f EIF ei2f sec sbc #1 sta trackn_tablespeeda,x ei3 lda trackn_instrreachend,x bpl ei4 lda trackn_volume,x beq ei4 IFT FEAT_VOLUMEMIN cmp trackn_volumemin,x beq ei4 bcc ei4 EIF tay lda trackn_volumeslidevalue,x clc adc trackn_volumeslidedepth,x sta trackn_volumeslidevalue,x bcc ei4 tya sbc #16 sta trackn_volume,x ei4 IFT FEAT_COMMAND2 lda #0 sta frqaddcmd2 EIF IFT FEAT_COMMAND1||FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY lda reg2 IFT FEAT_FILTER||FEAT_BASS16 sta trackn_command,x EIF and #$70 IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]] beq cmd0 ELS lsr @ lsr @ ;*4 insert relative jump bne @+ jmp cmd0 @ cmp #$04 bne @+ jmp cmd1 @ cmp #$08 bne @+ jmp cmd2 @ cmp #$0c bne @+ jmp cmd3 @ cmp #$10 bne @+ jmp cmd4 @ cmp #$14 bne @+ jmp cmd5 @ cmp #$18 bne @+ jmp cmd6 @ cmp #$1c bne @+ jmp cmd7 @ jmp cmd0 ; sta jmx+1 jmx bcc *+$14+1 jmp cmd0 nop jmp cmd1 IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd2 EIF IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd3 EIF IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd4 EIF IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd5 EIF IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd6 EIF IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY nop jmp cmd7 EIF EIF ELS IFT FEAT_FILTER||FEAT_BASS16 cmd00 lda reg2 sta trackn_command,x EIF EIF cmd1 IFT FEAT_COMMAND1 lda reg3 jmp cmd0c EIF cmd2 IFT FEAT_COMMAND2 lda reg3 sta frqaddcmd2 lda trackn_note,x jmp cmd0a EIF cmd3 IFT FEAT_COMMAND3 lda trackn_note,x clc adc reg3 sta trackn_note,x jmp cmd0a EIF cmd4 IFT FEAT_COMMAND4 lda trackn_shiftfrq,x clc adc reg3 sta trackn_shiftfrq,x lda trackn_note,x jmp cmd0a EIF cmd5 IFT FEAT_COMMAND5&&FEAT_PORTAMENTO IFT FEAT_TABLETYPE lda trackn_tabletypespeed,x bpl cmd5a1 ldy trackn_note,x lda (nr),y clc adc trackn_tablenote,x jmp cmd5ax EIF cmd5a1 lda trackn_note,x clc adc trackn_tablenote,x cmp #61 bcc cmd5a2 lda #63 cmd5a2 tay lda (nr),y cmd5ax sta trackn_portafrqc,x ldy reg3 bne cmd5a sta trackn_portafrqa,x cmd5a tya lsr @ lsr @ lsr @ lsr @ sta trackn_portaspeed,x sta trackn_portaspeeda,x lda reg3 and #$0f sta trackn_portadepth,x lda trackn_note,x jmp cmd0a ELI FEAT_COMMAND5 lda trackn_note,x jmp cmd0a EIF cmd6 IFT FEAT_COMMAND6&&FEAT_FILTER lda reg3 clc adc trackn_filter,x sta trackn_filter,x lda trackn_note,x jmp cmd0a ELI FEAT_COMMAND6 lda trackn_note,x jmp cmd0a EIF cmd7 IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY IFT FEAT_COMMAND7SETNOTE lda reg3 IFT FEAT_COMMAND7VOLUMEONLY cmp #$80 beq cmd7a EIF sta trackn_note,x jmp cmd0a EIF IFT FEAT_COMMAND7VOLUMEONLY cmd7a lda trackn_audc,x ora #$f0 sta trackn_audc,x lda trackn_note,x jmp cmd0a EIF EIF cmd0 lda trackn_note,x clc adc reg3 cmd0a IFT FEAT_TABLETYPE ldy trackn_tabletypespeed,x bmi cmd0b EIF clc adc trackn_tablenote,x cmp #61 bcc cmd0a1 lda #0 sta trackn_audc,x lda #63 cmd0a1 IFT FEAT_BASS16 sta trackn_outnote,x EIF tay lda (nr),y clc adc trackn_shiftfrq,x IFT FEAT_COMMAND2 clc adc frqaddcmd2 EIF IFT FEAT_TABLETYPE jmp cmd0c cmd0b cmp #61 bcc cmd0b1 lda #0 sta trackn_audc,x lda #63 cmd0b1 tay lda trackn_shiftfrq,x clc adc trackn_tablenote,x clc adc (nr),y IFT FEAT_COMMAND2 clc adc frqaddcmd2 EIF EIF cmd0c sta trackn_audf,x IFT FEAT_PORTAMENTO lda trackn_portaspeeda,x beq pp10 dec trackn_portaspeeda,x bne pp10 lda trackn_portaspeed,x sta trackn_portaspeeda,x lda trackn_portafrqa,x cmp trackn_portafrqc,x beq pp10 bcs pps1 adc trackn_portadepth,x bcs pps8 cmp trackn_portafrqc,x bcs pps8 jmp pps9 pps1 sbc trackn_portadepth,x bcc pps8 cmp trackn_portafrqc,x bcs pps9 pps8 lda trackn_portafrqc,x pps9 sta trackn_portafrqa,x pp10 lda reg2 and #$01 beq pp11 lda trackn_portafrqa,x clc adc trackn_shiftfrq,x sta trackn_audf,x pp11 EIF ppnext dex bmi rmt_p4 jmp pp1 rmt_p4 IFT FEAT_AUDCTLMANUALSET lda trackn_audctl+0 ora trackn_audctl+1 ora trackn_audctl+2 ora trackn_audctl+3 tax ELS ldx #0 EIF stx v_audctl IFT FEAT_FILTER IFT FEAT_FILTERG0L lda trackn_command+0 bpl qq2 lda trackn_audc+0 and #$0f beq qq2 lda trackn_audf+0 clc adc trackn_filter+0 sta trackn_audf+2 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L lda trackn_audc+2 and #$10 bne qq1a EIF lda #0 sta trackn_audc+2 qq1a txa ora #4 tax EIF qq2 IFT FEAT_FILTERG1L lda trackn_command+1 bpl qq3 lda trackn_audc+1 and #$0f beq qq3 lda trackn_audf+1 clc adc trackn_filter+1 sta trackn_audf+3 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3L lda trackn_audc+3 and #$10 bne qq2a EIF lda #0 sta trackn_audc+3 qq2a txa ora #2 tax EIF qq3 IFT FEAT_FILTERG0L||FEAT_FILTERG1L cpx v_audctl bne qq5 EIF EIF IFT FEAT_BASS16 IFT FEAT_BASS16G1L lda trackn_command+1 and #$0e cmp #6 bne qq4 lda trackn_audc+1 and #$0f beq qq4 ldy trackn_outnote+1 lda frqtabbasslo,y sta trackn_audf+0 lda frqtabbasshi,y sta trackn_audf+1 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0L lda trackn_audc+0 and #$10 bne qq3a EIF lda #0 sta trackn_audc+0 qq3a txa ora #$50 tax EIF qq4 IFT FEAT_BASS16G3L lda trackn_command+3 and #$0e cmp #6 bne qq5 lda trackn_audc+3 and #$0f beq qq5 ldy trackn_outnote+3 lda frqtabbasslo,y sta trackn_audf+2 lda frqtabbasshi,y sta trackn_audf+3 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L lda trackn_audc+2 and #$10 bne qq4a EIF lda #0 sta trackn_audc+2 qq4a txa ora #$28 tax EIF EIF qq5 stx v_audctl IFT TRACKS>4 IFT FEAT_AUDCTLMANUALSET lda trackn_audctl+4 ora trackn_audctl+5 ora trackn_audctl+6 ora trackn_audctl+7 tax ELS ldx #0 EIF stx v_audctl2 IFT FEAT_FILTER IFT FEAT_FILTERG0R lda trackn_command+0+4 bpl qs2 lda trackn_audc+0+4 and #$0f beq qs2 lda trackn_audf+0+4 clc adc trackn_filter+0+4 sta trackn_audf+2+4 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R lda trackn_audc+2+4 and #$10 bne qs1a EIF lda #0 sta trackn_audc+2+4 qs1a txa ora #4 tax EIF qs2 IFT FEAT_FILTERG1R lda trackn_command+1+4 bpl qs3 lda trackn_audc+1+4 and #$0f beq qs3 lda trackn_audf+1+4 clc adc trackn_filter+1+4 sta trackn_audf+3+4 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3R lda trackn_audc+3+4 and #$10 bne qs2a EIF lda #0 sta trackn_audc+3+4 qs2a txa ora #2 tax EIF qs3 IFT FEAT_FILTERG0R||FEAT_FILTERG1R cpx v_audctl2 bne qs5 EIF EIF IFT FEAT_BASS16 IFT FEAT_BASS16G1R lda trackn_command+1+4 and #$0e cmp #6 bne qs4 lda trackn_audc+1+4 and #$0f beq qs4 ldy trackn_outnote+1+4 lda frqtabbasslo,y sta trackn_audf+0+4 lda frqtabbasshi,y sta trackn_audf+1+4 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0R lda trackn_audc+0+4 and #$10 bne qs3a EIF lda #0 sta trackn_audc+0+4 qs3a txa ora #$50 tax EIF qs4 IFT FEAT_BASS16G3R lda trackn_command+3+4 and #$0e cmp #6 bne qs5 lda trackn_audc+3+4 and #$0f beq qs5 ldy trackn_outnote+3+4 lda frqtabbasslo,y sta trackn_audf+2+4 lda frqtabbasshi,y sta trackn_audf+3+4 IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R lda trackn_audc+2+4 and #$10 bne qs4a EIF lda #0 sta trackn_audc+2+4 qs4a txa ora #$28 tax EIF EIF qs5 stx v_audctl2 EIF IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 lda v_ainstrspeed ELS lda #1 EIF rts SetPokey IFT STEREOMODE==1 ;* L1 L2 L3 L4 R1 R2 R3 R4 ldy v_audctl2 lda trackn_audf+0+4 ldx trackn_audf+0 xstastx01 sta $e810 stx $eb00 lda trackn_audc+0+4 ldx trackn_audc+0 xstastx02 sta $e811 stx $eb01 lda trackn_audf+1+4 ldx trackn_audf+1 xstastx03 sta $e812 stx $eb02 lda trackn_audc+1+4 ldx trackn_audc+1 xstastx04 sta $e813 stx $eb03 lda trackn_audf+2+4 ldx trackn_audf+2 xstastx05 sta $e814 stx $eb04 lda trackn_audc+2+4 ldx trackn_audc+2 xstastx06 sta $e815 stx $eb05 lda trackn_audf+3+4 ldx trackn_audf+3 xstastx07 sta $e816 stx $eb06 lda trackn_audc+3+4 ldx trackn_audc+3 xstastx08 sta $e817 stx $eb07 lda v_audctl xstysta01 sty $e818 sta $eb08 ELI STEREOMODE==0 ;* L1 L2 L3 L4 ldy v_audctl ;v_audctl equ *-1 lda trackn_audf+0 ldx trackn_audc+0 sta $eb00 stx $eb01 lda trackn_audf+1 ldx trackn_audc+1 sta $eb00+2 stx $eb01+2 lda trackn_audf+2 ldx trackn_audc+2 sta $eb00+4 stx $eb01+4 lda trackn_audf+3 ldx trackn_audc+3 sta $eb00+6 stx $eb01+6 sty $eb08 ELI STEREOMODE==2 ;* L1 R2 R3 L4 ldy v_audctl lda trackn_audf+0 ldx trackn_audc+0 sta $eb00 stx $eb01 sta $e810 lda trackn_audf+1 ldx trackn_audc+1 sta $e810+2 stx $e811+2 lda trackn_audf+2 ldx trackn_audc+2 sta $e810+4 stx $e811+4 sta $eb00+4 lda trackn_audf+3 ldx trackn_audc+3 sta $eb00+6 stx $eb01+6 sta $e810+6 sty $e818 sty $eb08 ELI STEREOMODE==3 ;* L1 L2 R3 R4 ldy v_audctl lda trackn_audf+0 ldx trackn_audc+0 sta $eb00 stx $eb01 lda trackn_audf+1 ldx trackn_audc+1 sta $eb00+2 stx $eb01+2 lda trackn_audf+2 ldx trackn_audc+2 sta $e810+4 stx $e811+4 sta $eb00+4 lda trackn_audf+3 ldx trackn_audc+3 sta $e810+6 stx $e811+6 sta $eb00+6 sty $e818 sty $eb08 EIF rts ;; .endif org $bfe8 .byte "** HEAVEN/DESIRE ** " ;20 characters title .byte 'xx' ;2 characters year .word start_rom Edited May 5, 2015 by Heaven/TQA Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted May 5, 2015 Author Share Posted May 5, 2015 http://www.eskimo.com/~tmcintos/atari/5200.notes.txt regarding POKEY... Quote Link to comment Share on other sites More sharing options...
MaPa Posted May 5, 2015 Share Posted May 5, 2015 Yes, I read the same info (identical text) on other page, but I think it's wrong maybe due to OCRing paper magazine and 8 is similar to B. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.