Voice Hack


Sourcecode

68HC11 Assembler

/******************************************************/ 
/*           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:

Klaus Schmitt

Zurück zum Voice Hack

Zurück zur Homepage des Robotik-Praktikums