Skip to content

Instantly share code, notes, and snippets.

@kuninet
Last active October 31, 2018 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kuninet/076711eaa23081edcc7a2f6cc4f8f92c to your computer and use it in GitHub Desktop.
Save kuninet/076711eaa23081edcc7a2f6cc4f8f92c to your computer and use it in GitHub Desktop.
SBC6303 YM2151 VGM PLAYER
;
; YM2151 Play for SBC6303
;
ORG $0100
;
; LILBUG INTERNAL ROUTINE
PDATA1 EQU $F80C
LIL_MAIN EQU $F952
;
MUSIC EQU $3000
OPN_IO EQU $C000
;
START EQU *
LDS #STACK
STS SP
;
LDX #MESG
JSR PDATA1
BSR MAIN
;
JMP LIL_MAIN ;PGM END
;
MAIN EQU *
LDX #MUSIC
LOOP EQU *
LDAA 0,X
CMPA #$54
BEQ PLAY
CMPA #$61
BEQ WAIT11
CMPA #$62
BEQ WAIT22
CMPA #$63
BEQ WAIT33
CMPA #$64
BEQ WAIT33
CMPA #$66
BEQ END_RTN
;
CMPA #$70
BEQ WAIT4
BGT CHK_WAIT
NEXT EQU *
INX
BRA LOOP
;
END_RTN EQU *
RTS
;
WAIT11 EQU *
JMP WAIT1
WAIT33 EQU *
JMP WAIT3
WAIT22 EQU *
JMP WAIT2
;
PLAY EQU *
INX
LDAA 0,X
PSHA
INX
LDAB 0,X
;
WRITEOPN EQU *
LDAA OPN_IO+1
ROLA
BCS WRITEOPN
;
PULA
STAA OPN_IO
NOP ;DUMMY
NOP ;DUMMY
STAB OPN_IO+1
JMP NEXT
;
CHK_WAIT EQU *
CMPA #$80
BLT NEXT
;
WAIT4 EQU *
ANDA $0F
INCA
STAA WAIT_T+1
LDAA #0
STAA WAIT_T
JSR WAIT
JMP NEXT
;
WAIT1 EQU *
INX
LDAA 0,X
STAA WAIT_T+1
INX
LDAA 0,X
STAA WAIT_T
BSR WAIT
JMP NEXT
;
WAIT2 EQU *
STS SP
LDS #735
STS WAIT_T
LDS SP
BSR WAIT
JMP NEXT
;
WAIT3 EQU *
STS SP
LDS #882
STS WAIT_T
LDS SP
BSR WAIT
JMP NEXT
;
;
WAIT EQU *
STX X_BUF
LDX WAIT_T
;
WAIT_LOOP EQU *
BSR WAIT1MS
DEX
BEQ WAIT_END
BRA WAIT_LOOP
;
WAIT_END EQU *
LDX X_BUF
RTS
;
WAIT1MS EQU *
LDAA #1
WAIT1MS_LOOP EQU *
DECA
NOP ;DUMMY
NOP ;DUMMY
NOP ;DUMMY
BNE WAIT1MS_LOOP
RTS
; MESSAGE
MESG FCB $0D,$0C
FCC "** YM2151 PLAY for SBC6303 **"
FCB $0D,$0C,4
; RAM
SP RMB 2 ; STACK POINTER STORE
X_BUF RMB 2 ; IX BUFF
WAIT_T RMB 2
; STACK
RMB 46
STACK RMB 1 ;STACK POINTER
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment