File: psg.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (63 lines) | stat: -rw-r--r-- 1,353 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
; void __fastcall__ psg_outb( unsigned char b );
; void __fastcall__ psg_delayms( unsigned char c);
; void __fastcall__ bios_playsound( void *b, unsigned char c);
; void psg_silence( void );

        .export          _psg_outb, _psg_silence, _psg_delay
        .export          _bios_playsound
        .import          popa
        .include        "creativision.inc"

_psg_outb:

        ;* Let BIOS output the value
        jmp $FE77

_psg_silence:

        jmp $FE54


_psg_delay:

        tay
l1:     lda #200
l2:     sbc #1
        bne l2

        lda #200
l3:     sbc #1
        bne l3

        dey
        bne l1

        rts


;* Creativision Sound Player
;*
;* Based on BIOS sound player.
;* Pass a pointer to a set of note triples, terminated with a tempo byte
;* and the len (max 255)

_bios_playsound:

        pha                     ; Save Length Byte
        sei

        lda         #$D5        ; BIOS volume table low
        sta         $4
        lda         #$FC        ; BIOS volume table high
        sta         $5

        jsr         popa        ; Get Sound table pointer low
        sta         $0
        jsr         popa        ; Get Sound table pointer high
        sta         $1

        pla
        tay                     ; Put length in Y
        dey
        php
        jmp         $FBED       ; Let BIOS do it's thing