/******************************************************/ /* Rug Warrior Spracherweiterung */ /* Spielt 1Bit-Samples mit 11 KHz ab */ /*----------------------------------------------------*/ /* Aufruf aus IC: */ /* voice(x); x = int Nummer des Samples */ /*----------------------------------------------------*/ /* (c) Klaus Schmitt Sept.96 */ /******************************************************/ ORG MAIN_START subroutine_voice: lslb /* uebergebener Parameter *2 */ ldx #sample_tab /* Tabelle der Sample-Woerter */ abx /* Gewuenschtes Wort anwaehlen */ ldy $00,x /* y zeigt auf den Sample-Start */ ldx $02,x /* x zeigt auf das Sample-Ende */ stx endmarker /* Das Ende des Samples merken */ ldx #$1000 /* Adresse des PortA (Speaker) */ sei /* Sperre alle IRQs */ bclr $20,#$01,x /* trenne Speaker vom Timer */ bclr $00,#$08,x /* schalte Speaker aus (ruhe!) */ /* Bei 8MHz CPU-CLK gibt es 2Mio Befehls-Zyklen pro s */ /* Bei 46 Zyklen pro Samplewert => 44KHz max.Frequenz */ bigloop: ldaa $00,y /* 5 hole aktuelles Samplepaket */ iny /* 4 zeige auf naechstes Paket */ ldab #$08 /* 2 acht Schleifendurchlaeufe */ loop: lsla /* 2 schiebe das MSB ins Carry */ bcc silence /* 3 kein Carry set dann leise */ bset $00,#$08,x /* 7 sonst schalte Speaker an */ bra next /* 3 */ silence: bclr $00,#$08,x /* 7 schalte Speaker aus */ bra next /* 3 Sprung genau wie oben! */ nop /* nur damit nix wegopt. wird */ next: cmpb #$08 /* 2 gerade Bit 8 bearbeitet? */ beq bit8 /* 3 nein, dann verbrate Zeit */ nop /* 2 */ nop /* 2 Ersetzt genau den Overhead */ nop /* 2 der beim Holen des neues */ nop /* 2 Samplepaketes anfaellt! */ nop /* 2 */ tst $00,y /* 7 sinnlos! (ungerade Zyklen) */ nop /* 2 */ nop /* 2 */ bit8: bsr wait /* 6 Anpassung an Samplefreq. */ decb /* 2 Alle 8 Bits rum? */ bne loop /* 3 Nein, dann weiter im Paket */ cpy endmarker /* 7 Alle Samplewerte rum? */ bne bigloop /* 3 Nein, dann neues Paket */ /* Hier ist das Ende der Abspielschleife !!! */ bclr $00,#$08,x /* schalte Speaker aus */ cli /* IRQs wieder an */ clrb /* Rueckgabe 0 an IC, alles OK */ clra /* Die Rueckgabe ist 16 Bit tief*/ rts /* Verbrate insg.135 Zyklen (incl. Aufruf: bsr_wait) */ wait: staa save_a /* 4 Rette Akku A */ ldaa #$10 /* 2 16 Schleifendurchlaeufe */ loopy: nop /* 2 * 16 */ deca /* 2 * 16 */ bne loopy /* 3 * 16 */ nop /* 2 */ ldaa save_a /* 4 Restauriere Akku A */ rts /* 5 */ save_a: fcb 0 endmarker: fdb 0 /* Hier die eigenen Samples einfach reinquetschen! */ /* endesample ist nur ein Marker zum Stoppen. */ sample_tab: fdb yessir,letsdoit,endesample yessir: fcb $3F,$FF,$F8,$00,$00,$00,$00,$00,$12,$DF,$FF,$60 fcb $00,$00,$00,$00,$00,$00,$00,$00,$01,$7F,$FF,$F4,$00,$00,$00,$00 fcb $1F,$F8,$00,$00,$00,$00,$00,$02,$FF,$FF,$60,$00,$00,$00,$04,$A5 fcb $E8,$00,$00,$00,$00,$00,$16,$FF,$FA,$00,$00,$00,$00,$02,$FF,$F0 fcb $00,$00,$00,$00,$00,$02,$DF,$FB,$00,$00,$00,$00,$05,$FF,$40,$00 fcb $00,$00,$00,$00,$12,$DB,$48,$00,$00,$00,$05,$2D,$FE,$00,$00,$00 fcb $00,$00,$02,$FF,$FA,$00,$00,$00,$02,$BF,$FF,$C0,$00,$00,$00,$00 fcb $DF,$FF,$E8,$00,$00,$00,$3F,$FF,$C0,$00,$00,$00,$03,$FF,$FF,$80 fcb $00,$00,$3F,$FF,$80,$00,$00,$02,$6D,$FE,$E9,$00,$09,$FF,$FF,$C0 fcb $00,$00,$03,$7F,$DF,$22,$19,$FF,$FF,$FF,$C0,$00,$01,$1B,$EE,$11 fcb $9C,$EE,$23,$BF,$E4,$00,$00,$CD,$B3,$1C,$CE,$B1,$9F,$FE,$00,$00 fcb $06,$6F,$8C,$E7,$38,$C7,$FF,$80,$00,$01,$9E,$63,$1F,$E3,$1D,$FF fcb $10,$00,$01,$9E,$71,$9E,$71,$0F,$FF,$00,$00,$06,$70,$06,$FC,$86 fcb $7F,$E1,$08,$00,$77,$80,$3F,$C0,$3F,$EE,$1C,$00,$06,$F0,$07,$F8 fcb $03,$FE,$71,$C0,$00,$FE,$00,$FF,$80,$7F,$E0,$E4,$00,$3F,$C0,$3F fcb $E0,$3F,$F8,$38,$00,$0F,$70,$27,$E0,$07,$FC,$03,$80,$00,$FF,$00 fcb $FE,$00,$FF,$C0,$FC,$00,$07,$00,$3F,$F0,$7F,$FE,$0E,$00,$00,$03 fcb $3C,$3F,$FF,$FF,$FF,$F8,$00,$00,$00,$00,$31,$FF,$FF,$FF,$F0,$00 fcb $00,$00,$00,$00,$30,$3F,$FF,$FF,$FE,$84,$00,$00,$00,$00,$15,$6F fcb $AB,$EB,$55,$02,$00,$00,$04,$0A,$D2,$15,$A5,$0A,$20,$10,$00,$00 fcb $02,$12,$A4,$05,$4A,$AA,$00,$55,$02,$80,$80,$55,$28,$01,$14,$28 fcb $00,$40,$01,$4A,$10,$54,$2A,$52,$A5,$08,$41,$00,$09,$52,$82,$15 fcb $52,$81,$02,$A5,$00,$00,$50,$80,$A5,$05,$40,$20,$A1,$50,$02,$02 fcb $80,$85,$2A,$95,$42,$84,$29,$40,$02,$00,$00,$02,$84,$08,$40,$24 fcb $28,$50,$94,$0A,$50,$84,$00,$20,$10,$00,$0A,$10,$80,$02,$94,$80 fcb $40,$00,$00,$52,$94,$0A,$10,$02,$14,$82,$14,$84,$00,$00,$00,$04 fcb $21,$02,$08,$52,$85,$2A,$52,$90,$02,$02,$14,$20,$42,$50,$00,$A0 fcb $00,$04,$2D,$28,$54,$00,$05,$4A,$40,$00,$90,$00,$A1,$00,$14,$A4 fcb $29,$4A,$80,$00,$08,$52,$00,$00,$48,$0A,$08,$4A,$25,$00,$12,$90 fcb $52,$84,$A4,$80,$84,$80,$85,$4A,$10,$A5,$40,$00,$A1,$20,$00,$00 fcb $08,$40,$00,$00,$04,$00,$12,$94,$00,$00,$94,$28,$02,$41,$0A,$49 fcb $48,$4A,$10,$00,$14,$82,$10,$10,$80,$84,$00,$29,$42,$94,$A2,$52 fcb $94,$48,$48,$14,$94,$A4,$82,$52,$94,$21,$24,$02,$14,$22,$50,$24 fcb $29,$49,$42,$C0,$00,$94,$80,$4A,$4A,$42,$54,$A5,$29,$4A,$A5,$24 fcb $A5,$29,$00,$21,$01,$00,$00,$52,$94,$81,$4A,$00,$04,$29,$4A,$94 fcb $90,$08,$94,$81,$05,$21,$2A,$54,$A5,$29,$52,$92,$94,$A5,$00,$A5 fcb $40,$24,$12,$84,$20,$42,$40,$48,$05,$4A,$4A,$09,$09,$01,$0A,$4A fcb $50,$01,$28,$49,$4A,$10,$21,$08,$42,$92,$94,$00,$49,$00,$80,$52 fcb $00,$42,$81,$49,$01,$28,$42,$01,$25,$69,$4B,$49,$25,$25,$29,$52 fcb $49,$4B,$42,$92,$89,$49,$01,$00,$4A,$54,$28,$49,$64,$A4,$92,$10 fcb $32,$92,$1A,$29,$24,$90,$90,$9C,$08,$16,$40,$00,$12,$4D,$B6,$FE fcb $FF,$C0,$00,$01,$BF,$FF,$FF,$FF,$C0,$00,$1E,$7F,$1C,$1F,$FF,$C0 fcb $00,$0F,$1F,$8F,$0F,$FF,$E0,$00,$1F,$1F,$0F,$1F,$FF,$F0,$00,$1E fcb $3E,$1F,$3F,$FF,$30,$00,$1E,$7C,$1E,$7F,$FE,$F0,$00,$38,$F8,$38 fcb $FF,$FD,$E0,$00,$78,$F8,$78,$FD,$F9,$E0,$00,$38,$F8,$78,$FC,$F9 fcb $E0,$00,$3C,$F8,$38,$7C,$7D,$F0,$00,$0E,$3C,$1E,$3F,$3F,$FE,$00 fcb $01,$E3,$C3,$C3,$E3,$DF,$C0,$00,$0F,$1E,$1C,$1F,$1C,$7C,$60,$00 fcb $1E,$3C,$30,$7E,$78,$7D,$E0,$00,$07,$8F,$08,$3F,$CE,$0F,$FE,$1C fcb $00,$0F,$1C,$18,$7F,$00,$3F,$EE,$1C,$00,$03,$C7,$87,$1F,$E0,$07 fcb $FF,$1C,$70,$00,$03,$87,$0E,$3F,$FD,$0F,$9F,$0E,$38,$00,$00,$3C fcb $F8,$F1,$FF,$C0,$7F,$F8,$E1,$C0,$00,$00,$1F,$1E,$3F,$FF,$00,$1E fcb $38,$1F,$EC,$00,$00,$00,$1F,$3C,$3C,$F8,$00,$3C,$30,$FF,$C6,$00 fcb $00,$00,$07,$8F,$0F,$3E,$00,$1F,$1C,$1F,$F8,$00,$00,$00,$00,$3C fcb $78,$79,$F8,$F0,$78,$60,$01,$F1,$E1,$80,$00,$00,$07,$8F,$0F,$3F fcb $00,$07,$0C,$00,$3F,$FF,$0C,$00,$00,$00,$03,$E7,$87,$9F,$00,$03 fcb $86,$06,$1F,$8F,$0E,$00,$00,$00,$00,$03,$E7,$83,$0F,$00,$03,$CF fcb $00,$0F,$1E,$00,$00,$00,$00,$00,$00,$3C,$78,$61,$FC,$00,$00,$00 fcb $00,$38,$00,$00,$00,$00,$00,$00,$00,$0E,$38,$00,$00,$00,$00,$70 fcb $78 letsdoit: fcb $7F,$F0,$00,$00,$00,$00,$1F,$FF,$C0,$00,$00,$00,$00,$07,$E0,$00 fcb $00,$00,$00,$FF,$FF,$80,$00,$00,$0F,$E0,$00,$00,$00,$00,$FF,$FF fcb $00,$00,$00,$00,$00,$F0,$00,$00,$00,$00,$FF,$FF,$E0,$00,$00,$0F fcb $FF,$00,$00,$00,$00,$7F,$FF,$F0,$00,$3F,$FF,$FC,$00,$00,$00,$03 fcb $FF,$FF,$C0,$01,$FF,$FF,$80,$00,$00,$00,$7F,$FF,$F8,$00,$FF,$FF fcb $80,$00,$00,$00,$FF,$FF,$E0,$03,$FF,$FC,$00,$00,$00,$7F,$FF,$F8 fcb $01,$FF,$FF,$80,$00,$00,$7F,$F9,$FC,$00,$FF,$FE,$00,$00,$01,$FF fcb $9F,$E0,$1F,$FF,$F0,$00,$00,$7F,$F0,$00,$D0,$3F,$FF,$00,$00,$1F fcb $FF,$A0,$10,$BF,$FF,$80,$00,$3F,$F6,$00,$F8,$1F,$FE,$00,$07,$C1 fcb $83,$F8,$13,$7C,$00,$3E,$01,$B7,$C0,$9F,$1F,$88,$00,$3E,$4C,$BF fcb $20,$7D,$B0,$7F,$81,$E7,$87,$9F,$07,$F8,$00,$7C,$C9,$F3,$07,$DD fcb $02,$78,$11,$E0,$0F,$D0,$78,$C0,$1B,$32,$6F,$81,$3E,$00,$FC,$C3 fcb $7E,$01,$E3,$82,$00,$E4,$89,$BE,$47,$FC,$01,$FC,$01,$FE,$00,$FA fcb $00,$39,$83,$3E,$41,$FF,$00,$3B,$82,$7E,$C1,$FF,$00,$3F,$C0,$3F fcb $C0,$5F,$81,$9F,$90,$7F,$80,$E0,$36,$C9,$3F,$E0,$0F,$F0,$0F,$F8 fcb $03,$FC,$01,$8E,$70,$CF,$B8,$00,$8E,$99,$67,$DC,$13,$E6,$00,$37 fcb $C0,$1F,$F0,$00,$08,$31,$27,$60,$01,$C0,$00,$00,$00,$3F,$20,$09 fcb $00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00,$07,$FE,$00,$00,$00 fcb $00,$00,$FF,$FC,$00,$00,$00,$00,$00,$1F,$00,$00,$00,$00,$00,$00 fcb $00,$00,$04,$C0,$02,$48,$00,$00,$00,$00,$00,$27,$DF,$69,$A0,$00 fcb $00,$00,$00,$3F,$FB,$FE,$40,$00,$00,$00,$00,$00,$01,$00,$14,$A8 fcb $40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 fcb $00,$00,$00,$00,$01,$8C,$00,$00,$00,$00,$00,$20,$00,$00,$00,$00 fcb $86,$01,$00,$29,$40,$21,$02,$10,$00,$00,$42,$11,$00,$80,$08,$94 fcb $08,$09,$00,$80,$A4,$C0,$00,$00,$08,$40,$02,$62,$99,$02,$01,$A0 fcb $00,$80,$00,$10,$20,$00,$20,$10,$08,$09,$10,$00,$84,$40,$80,$84 fcb $02,$10,$04,$10,$00,$00,$50,$01,$0A,$40,$00,$00,$10,$4A,$80,$18 fcb $4E,$00,$84,$31,$08,$04,$01,$04,$20,$00,$08,$00,$82,$10,$00,$21 fcb $00,$00,$44,$20,$02,$00,$14,$00,$12,$80,$01,$25,$00,$92,$82,$18 fcb $04,$00,$00,$94,$01,$00,$00,$40,$00,$80,$20,$00,$00,$00,$00,$00 fcb $00,$00,$00,$00,$04,$00,$80,$10,$00,$00,$00,$00,$20,$02,$00,$00 fcb $00,$00,$00,$00,$03,$7F,$FF,$FF,$00,$00,$00,$00,$03,$FF,$FF,$FF fcb $FF,$00,$00,$00,$00,$00,$07,$FF,$FF,$FF,$FF,$80,$00,$00,$00,$00 fcb $3F,$FF,$FF,$FF,$FC,$00,$00,$00,$00,$03,$FF,$FF,$FF,$FF,$E0,$00 fcb $00,$00,$00,$7F,$FF,$FF,$FF,$F8,$00,$00,$00,$00,$0F,$FF,$FF,$FF fcb $FF,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$F0,$00,$00,$00,$00,$03 fcb $FF,$FF,$FF,$FF,$80,$00,$00,$00,$00,$03,$FF,$FF,$FF,$FE,$80,$00 fcb $00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$07,$FF fcb $FF,$FF,$F0,$00,$00,$00,$00,$00,$00,$07,$FF,$FF,$FF,$80,$00,$00 fcb $00,$00,$00,$00,$07,$FF,$FF,$FE,$00,$00,$00,$00,$00,$00,$00,$3F fcb $FF,$FF,$F0,$00,$00,$06,$69,$00,$00,$09,$B7,$FF,$FF,$FD,$66,$10 fcb $00,$00,$06,$FF,$FF,$FF,$FE,$80,$00,$00,$01,$1D,$FF,$FF,$FF,$FD fcb $A0,$00,$00,$11,$FF,$FF,$FF,$FF,$E0,$00,$09,$33,$F6,$6C,$CF,$FB fcb $C0,$00,$12,$6F,$FC,$C1,$9F,$F3,$00,$04,$49,$BF,$B3,$06,$7F,$EC fcb $00,$19,$B7,$7A,$64,$4C,$FF,$98,$00,$26,$DE,$69,$86,$3B,$FF,$00 fcb $01,$9B,$79,$26,$13,$6F,$F4,$00,$08,$B3,$D9,$31,$93,$7F,$20,$00 fcb $8B,$3D,$B3,$4B,$3F,$F2,$00,$19,$B7,$93,$2D,$36,$FB,$60,$01,$36 fcb $FA,$65,$F7,$CF,$6C,$00,$66,$FB,$4C,$BE,$D9,$FD,$80,$0D,$BE,$D9 fcb $3D,$B3,$FB,$20,$03,$67,$C6,$4F,$6D,$9F,$D8,$00,$2C,$F8,$59,$7C fcb $B8,$F8,$00,$09,$BF,$93,$0F,$27,$9F,$C0,$01,$B3,$F0,$64,$F4,$7E fcb $7C,$00,$0F,$A7,$83,$C3,$E0,$FE,$F8,$00,$1F,$BF,$03,$F1,$F2,$7E fcb $00,$00,$7E,$FC,$0F,$E7,$D0,$FF,$00,$00,$7E,$FC,$0F,$F9,$B0,$3F fcb $00,$00,$3F,$B2,$03,$FC,$4C,$1F,$F0,$00,$0F,$F2,$60,$7F,$81,$91 fcb $FF,$00,$00,$7F,$80,$89,$F8,$07,$6F,$F8,$00,$03,$7F,$80,$3E,$7C fcb $03,$FF,$A0,$00,$01,$C3,$FE,$36,$6F,$81,$FF,$F8,$00,$03,$83,$07 fcb $FC,$C8,$BF,$07,$EF,$C0,$80,$70,$3C,$0F,$C7,$C3,$F8,$00,$FF,$E0 fcb $04,$E8,$0F,$F3,$91,$C9,$F1,$00,$FF,$C0,$00,$B0,$07,$F8,$3F,$F8 fcb $33,$F0,$21,$F8,$00,$F0,$01,$FF,$83,$BF,$03,$3E,$00,$7E,$40,$EF fcb $00,$3F,$E0,$1E,$E0,$6F,$C0,$0F,$E0,$0F,$A0,$27,$E0,$06,$1C,$60 fcb $EF,$88,$79,$C1,$3F,$00,$7F,$80,$7F,$81,$8E,$60,$EF,$04,$FD,$83 fcb $FC,$01,$FC,$03,$F8,$03,$B8,$83,$B8,$03,$FE,$01,$FF,$00,$3F,$00 fcb $1F,$C0,$07,$31,$87,$70,$07,$FC,$03,$FC,$43,$98,$00,$04,$60,$00 fcb $39,$CC,$39,$E2,$0C,$E3,$18,$F7,$9C,$E0,$00,$01,$C6,$00,$06,$7E fcb $00,$9B,$00,$61,$98,$30,$C1,$9C,$00,$00,$00,$00,$00,$00,$00,$00 fcb $1C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 fcb $00,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 fcb $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00 fcb $18,$00,$30,$08,$00,$24,$31,$18,$20,$00,$00,$00,$00,$04,$21,$00 fcb $24,$10,$8A,$58,$40,$10,$02,$84,$00,$84,$02,$01,$00,$04,$00,$92 fcb $22,$49,$09,$02,$08,$41,$00,$40,$00,$00,$00,$00,$00,$00,$80,$10 fcb $20,$18,$41,$08,$61,$0C,$30,$83,$10,$41,$0C,$61,$08,$21,$80,$31 fcb $04,$50,$0A,$40,$08,$00,$40,$00,$00,$08,$02,$00,$00,$02,$00,$00 fcb $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$70,$06 endesample: |