mirror of
https://github.com/cc65/cc65.git
synced 2024-12-26 08:32:00 +00:00
Moved Creativision's playsound() into a separate file.
It won't waste space in a cartridge if it isn't used.
This commit is contained in:
parent
f636d4e634
commit
af3d4581d3
@ -5,21 +5,21 @@
|
||||
;** Screen
|
||||
SCREEN_ROWS = 24
|
||||
SCREEN_COLS = 32
|
||||
SCREEN_PTR = $3A
|
||||
CURSOR_X = $3C
|
||||
CURSOR_Y = $3D
|
||||
SCREEN_PTR := $3A
|
||||
CURSOR_X := $3C
|
||||
CURSOR_Y := $3D
|
||||
|
||||
;** VDP
|
||||
VDP_DATA_R = $2000
|
||||
VDP_STATUS_R = $2001
|
||||
VDP_DATA_W = $3000
|
||||
VDP_CONTROL_W = $3001
|
||||
VDP_DATA_R := $2000
|
||||
VDP_STATUS_R := $2001
|
||||
VDP_DATA_W := $3000
|
||||
VDP_CONTROL_W := $3001
|
||||
|
||||
;** PIA
|
||||
PIA0_DATA = $1000
|
||||
PIA0_STATUS = $1001
|
||||
PIA1_DATA = $1002
|
||||
PIA1_STATUS = $1003
|
||||
PIA0_DATA := $1000
|
||||
PIA0_STATUS := $1001
|
||||
PIA1_DATA := $1002
|
||||
PIA1_STATUS := $1003
|
||||
|
||||
;** General
|
||||
CH_VLINE = 33
|
||||
@ -30,11 +30,11 @@ CH_LLCORNER = 37
|
||||
CH_LRCORNER = 38
|
||||
|
||||
;** I/O (Zero-page variables)
|
||||
ZP_KEYBOARD = $10
|
||||
ZP_JOY0_DIR = $11
|
||||
ZP_JOY1_DIR = $13
|
||||
ZP_JOY0_BUTTONS = $16
|
||||
ZP_JOY1_BUTTONS = $17
|
||||
ZP_KEYBOARD := $10
|
||||
ZP_JOY0_DIR := $11
|
||||
ZP_JOY1_DIR := $13
|
||||
ZP_JOY0_BUTTONS := $16
|
||||
ZP_JOY1_BUTTONS := $17
|
||||
|
||||
;** Joystick direction values (ZP_JOY0_DIR/ZP_JOY1_DIR)
|
||||
JOY_N = $49
|
||||
@ -54,8 +54,13 @@ JOY_WNW = $4C
|
||||
JOY_NW = $4B
|
||||
JOY_NNW = $4A
|
||||
|
||||
;** BIOS
|
||||
BIOS_IRQ1_ADDR = $FF3F
|
||||
BIOS_IRQ2_ADDR = $FF52
|
||||
BIOS_NMI_RESET_ADDR = $F808
|
||||
BIOS_WRITE_VDP_REG = $FE1F
|
||||
;** BIOS routines
|
||||
BIOS_NMI_RESET_ADDR := $F808
|
||||
BIOS_PLAY_TUNE1 := $FBD6
|
||||
BIOS_PLAY_SONG := $FBED
|
||||
BIOS_PLAY_TUNE2 := $FCE6
|
||||
BIOS_WRITE_VDP_REG := $FE1F
|
||||
BIOS_QUIET_PSG := $FE54
|
||||
BIOS_POKE_PSG := $FE77
|
||||
BIOS_IRQ1_ADDR := $FF3F
|
||||
BIOS_IRQ2_ADDR := $FF52
|
||||
|
40
libsrc/creativision/playsound.s
Normal file
40
libsrc/creativision/playsound.s
Normal file
@ -0,0 +1,40 @@
|
||||
; void __fastcall__ bios_playsound (void *a, unsigned char b);
|
||||
|
||||
|
||||
.export _bios_playsound
|
||||
|
||||
.import popax
|
||||
|
||||
.include "creativision.inc"
|
||||
|
||||
|
||||
songptr := $00 ; Points to current tune data
|
||||
volptr := $04 ; Points to current volume table
|
||||
|
||||
|
||||
;* Creativision Sound Player
|
||||
;* Based on BIOS song player.
|
||||
;*
|
||||
;* Pass a pointer to a set of note triples, terminated with a tempo byte;
|
||||
;* and pass the length of the triples and tempo (max 255).
|
||||
;*
|
||||
;* Note: tune data must be stored backwards.
|
||||
|
||||
_bios_playsound:
|
||||
php
|
||||
pha ; Save tune length
|
||||
sei
|
||||
|
||||
lda #<$FCD5 ; BIOS decreasing-volume table
|
||||
ldx #>$FCD5
|
||||
sta volptr
|
||||
stx volptr+1
|
||||
|
||||
jsr popax ; Get tune array pointer
|
||||
sta songptr
|
||||
stx songptr+1
|
||||
|
||||
pla
|
||||
tay
|
||||
dey ; Point to tempo byte
|
||||
jmp BIOS_PLAY_SONG ; Let BIOS do its thing
|
@ -1,27 +1,18 @@
|
||||
; void __fastcall__ psg_outb (unsigned char b);
|
||||
; void __fastcall__ psg_delay (unsigned char b);
|
||||
; void __fastcall__ bios_playsound (void *a, unsigned char b);
|
||||
; void psg_silence (void);
|
||||
|
||||
|
||||
.export _psg_outb, _psg_silence, _psg_delay
|
||||
.export _bios_playsound
|
||||
|
||||
.import popax
|
||||
|
||||
.include "creativision.inc"
|
||||
|
||||
|
||||
songptr := $00 ; Points to current tune data
|
||||
volptr := $04 ; Points to current volume table
|
||||
|
||||
_psg_outb:
|
||||
;* Let BIOS output the value.
|
||||
jmp $FE77
|
||||
;* Let BIOS output the value.
|
||||
_psg_outb := BIOS_POKE_PSG
|
||||
|
||||
|
||||
_psg_silence:
|
||||
jmp $FE54
|
||||
_psg_silence := BIOS_QUIET_PSG
|
||||
|
||||
|
||||
_psg_delay:
|
||||
@ -37,31 +28,3 @@ l3: sbc #1
|
||||
dey
|
||||
bne l1
|
||||
rts
|
||||
|
||||
|
||||
;* Creativision Sound Player
|
||||
;* Based on BIOS song player.
|
||||
;*
|
||||
;* Pass a pointer to a set of note triples, terminated with a tempo byte;
|
||||
;* and pass the length of the triples and tempo (max 255).
|
||||
;*
|
||||
;* Note: tune data must be stored backwards.
|
||||
|
||||
_bios_playsound:
|
||||
php
|
||||
pha ; Save tune length
|
||||
sei
|
||||
|
||||
lda #<$FCD5 ; A BIOS volume table
|
||||
ldx #>$FCD5
|
||||
sta volptr
|
||||
stx volptr+1
|
||||
|
||||
jsr popax ; Get tune array pointer
|
||||
sta songptr
|
||||
stx songptr+1
|
||||
|
||||
pla
|
||||
tay
|
||||
dey ; Point to tempo byte
|
||||
jmp $FBED ; Let BIOS do its thing
|
||||
|
Loading…
Reference in New Issue
Block a user