EXTENDED BASIC for MUSIC PSG MSX1

Page 1/2
| 2

By gasparrini

Champion (329)

gasparrini's picture

04-04-2013, 07:19

Hello Dear Guys,

I tried to make a new EXTENDED BASIC for MUSIC PSG MSX1 with new command from BASIC

Example: CALL MUSICPLAY(1) CALL MUSICSTOP(1)
CALL MUSICPAUSE(1) CALL MUSICCONTINUE(1) ecc.....

Unfortunately, as always at the my source in assembly, there is anything that it doesn't work!!
Therefore: Please, please, correct the program.... (^_^)

I wait your good news
Best Regards....
(O_*)
AG.

part1:

; [YOUR GROUP] MSX Z80 source file.
;
; Prog: 
; Code: [YOUR HANDLE]
; Date:
;
; cmnt:
;
; Coded in TeddyWareZ' Chaos Assembler 3
;
; (C) 2001 [YOUR GROUP]!



; CALL code
        .ORG   $4000          ; hier begint CALL code

; CALL header

        .byte "AB"
        .DW  0               ; geen initialisatie
        .DW  CAL             ; startadres CALL code
        .DW  0               ; geen device
        .DW  0               ; geen BASIC
        .DW  0
        .DW  0
        .DW  0

; Hier springt interpreter naar toe bij CALL commando

CAL:    PUSH  HL              ; HL wijst naar teken na CALL

; Kijk of naam achter CALL commando overeenkomt met
; een van de namen in de tabel

        LD    DE,TABEL        ; begin van de tabel
C_1:    LD    HL,$FD89       ; PROCNM bevat naam
        LD    A,(DE)          ; lengte van naam
        AND   A               ; zet vlaggen goed
        JR    Z,C_ERR         ; einde tabel als A=0
        LD    B,A
        INC   DE

C_2:    LD    A,(DE)          ; vergelijk naam in tabel
        CP    (HL)            ; met naam in PROCNM
        JR    NZ,NEXT1        ; naar NEXT1 als verkeerde naam
        INC   DE
        INC   HL
        DJNZ  C_2

        LD    A,(HL)          ; laatste teken moet nu
        AND   A               ; gelijk zijn aan 0, anders
        JR    NZ,NEXT2        ; is CALL naam te lang

; alles Ok, spring naar CALL routine

        EX    DE,HL           ; HL is plaats in tabel
        LD    E,(HL)          ; low byte sprongadres
        INC   HL
        LD    D,(HL)          ; high byte sprongadres
        EX    DE,HL
        JP    (HL)            ; spring naar dat adres

; Verkeerde naam, ga naar volgende naam in tabel

NEXT1:  LD    C,B
        LD    B,0             ; BC=B
        INC   BC
        INC   BC
        EX    DE,HL
        ADD   HL,BC
        EX    DE,HL
        JR    C_1             ; probeer het nog eens

; Naam te lang, ga naar volgende naam in tabel

NEXT2:  INC   DE              ; sla het sprongadres
        INC   DE              ; over
        JR    C_1             ; probeer het nog eens

; Niet gevonden, einde routine met carry hoog
; Als in andere sloten ook geen kloppend CALL commando
; wordt gevonden, zal BASIC foutmelding geven

C_ERR:  POP   HL
        SCF
        RET

; Handige routines
ILLEGA: LD    IX,$475A       ; Illegal function call
        JP    $0159

SYNTAX: LD    IX,$4055       ; Syntax error
        JP    $0159

R_BYTE: LD    IX,$521C       ; Lees een byte van getokenized
        JP    $0159          ; BASIC, resultaat in A

R_WORD: LD    IX,$6F0B       ; Lees een word van getokenized
        JP    $0159          ; BASIC, resultaat in DE

; Tabel met CALL commando's

TABEL:  .DB  9
        .byte  "MUSICPLAY"
        .DW MUSICPLAY
        
        .DB    4            ; lengte CALL commando
        .byte    "HELP"     ; de naam
        .DW HELP            ; het adres
        
        .DB  0              ; afsluiten

; Voorbeelden

CHGCAP     .EQU	0132H		;CAPS LAMP on/off
CAPST	     .EQU	0FCABH		;CAPS LOCK status
TIMI	     .EQU	0FD9FH		;timer interrupt hook
JPCODE     .EQU	0C3H
TIMER	     .EQU	020H
  
  
MUSICPLAY:    ; CALL MUSICPLAY(1)
   POP  HL 
        LD    A,(HL)
        CP    '('             ; check haakje
        JP    NZ,SYNTAX
        INC   HL

        CALL  R_BYTE          ; registro A
        LD    (_hl),A

        CP 0
        JP Z,EXIT
         
        LD    A,(HL)
        CP    ')'
        JP    NZ,SYNTAX
        INC   HL

        PUSH  HL              ; bewaar pointer
	  
 ;----- interrupt on ----- Note:  restore the former hook
				 ;when changing the hook
      
 CALL START  ; load and initialize STAR MUSIC

; .ORG $C020   ; CONTINUE MUSIC

INTON:	
      DI
	LD	HL,TIMI 	;OLD HOOK SAVE
	LD	DE,HKSAVE
	LD	BC,5
	LDIR

	LD	A,JPCODE	;NEW HOOK SET
	LD	(TIMI),A
	LD	HL,INT
	LD	(TIMI+1),HL
	EI
	RET

;	.ORG	$C050  ; PAUSE MUSIC

;----- interrupt off ----- Note:  restore the reserved hook and exit

INTOFF:
      DI
	LD	HL,HKSAVE
	LD	DE,TIMI
	LD	BC,5
	LDIR
	EI  
	CALL $90 ; resetta canale audio
	RET

;----- interrupt routine -----

INT:	PUSH	AF
	LD	A,(CAPST)
	OR	A
	JR	Z,CAPON

CAPOFF: 
   CALL MUTE  ; silence

CAPON:
   CALL PLAY  ; play 1 quark
   
FIN:
 	POP	AF
	CALL	HKSAVE		;old HOOK call

	RET

COUNT1:
      .DB TIMER
COUNT2:
      .DB TIMER

HKSAVE: 
      NOP			;old HOOK save area
	NOP
	NOP
	NOP
	RET   

;----- interrupt routine -----

#INCLUDE "pt3.asm"
#INCLUDE "minerbankmusic1pt3.asm"  

   
EXIT:
      POP HL
      XOR A 
	RET				; torna al basic


; CALL INFO
; Zet melding op het scherm

HELP:   LD    HL,TEXT         ; begin tekst
INFO_1: LD    A,(HL)          ; ASCII teken
        AND   A
        JR    Z,INFO_2        ; klaar als 0
        CALL  $A2            ; teken naar scherm
        INC   HL
        JR    INFO_1          ; volgende teken

INFO_2: POP   HL              ; HL is pointer naar tokenized BASIC achter cmd
        XOR   A               ; wis carry: CALL commando Ok
        RET

TEXT:   .byte  "EXTENDED BASIC Version 1.0",13,10
        .byte "(C) GAMECAST 2013",13,10
        .byte "MUSICPLAY(1)",13,10
        .byte "HELP - for help",13,10
	; end
        .byte 0


; For use  CALL  R_BYTE          ; registro A

_hl:		.dw 0      

ENCALL: 	nop
		.END

Part2:

; Header voor .BIN file
        ;output "group.bin"
		.org $9000-7
        .DB  $FE
        .DW  EXEC
; 	  .dw STCALL
	.dw EXEC + 16384
        .DW  EXEC

; Initialisatieroutine
; Kopieer CALL code naar $4000
; En zet bitje in SLTATR

EXEC:   LD    A,($F342)      ; slot RAM page 1
        LD    H,$40          ; PAGE 1
        CALL  $24            ; BIOS routine ENASLT
        LD    HL,STCALL
        LD    DE,$4000
	  ld    bc,$4000
        LDIR                  ; verplaats CALL code
        LD    A,($FCC0)      ; slot MAIN ROM
        LD    H,$40
        CALL  $24

        LD    HL,$FCCA       ; $FCC9 + pagenummer (=1)
        LD    BC,$10
        LD    A,($F342)      ; slot RAM page 1
        AND   %00000011      ; primair slotnummer
CLUS1:  JR    Z,CNEXT
        ADD   HL,BC           ; tel primair*16 erbij op
        DEC   A
        JR    CLUS1
CNEXT:  LD    BC,4
        LD    A,($F342)      ; slot RAM page 1
        AND   A               ; zet vlaggen goed
        JP    P,CEINDE        ; is er wel secundair slot
        AND   %00001100      ; secundaire gleuf * 4
        RRCA                  ; secundaire gleuf * 2
        RRCA                  ; secundaire gleuf
CLUS2:  JR    Z,CEINDE
        ADD   HL,BC           ; tel secundair*4 erbij op
        DEC   A
        JR    CLUS2
CEINDE: LD    (HL),$20       ;zet bit 5 aan
        RET                   ;einde initialisatie

STCALL: ; beginadres van code IN FILE
		.end

These two programm in assembly: part1 and part2 it must be put together so that it functions.....

library PT3:

;Vortex Tracker II v1.0 PT3 player for MSX
;Adapted by Alfonso D. C. aka Dioniso 
;09-Jan-05
;From:
;Vortex Tracker II v1.0 PT3 player for ZX Spectrum
;(c)2004 S.V.Bulba  <a href="http://bulba.at.kz" title="http://bulba.at.kz">http://bulba.at.kz</a>

;Release number
;Release: .equ '6'

;Features
;--------
;-Can be compiled at any address (i.e. no need rounding .org
; address).
;-Variables (VARS) can be located at any address (not only after
;code block).
;-INIT subroutine detects module version and rightly generates
; both note and volume tables outside of code block (in VARS).
;-Two portamento (spc. command 3xxx) algorithms (depending of
; module version).
;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
;-Fully compatible with Ay_Emul PT3 player codes.
;-See also notes at the end of this source code.

;Limitations
;-----------
;-Can run in RAM only (self-modified code is used).

;Warning!!! PLAY subroutine can crash if no module are loaded
;into RAM or INIT subroutine was not called before.

;Call MUTE or INIT one more time to mute sound after stopping
;playing 

;Entry and other points
;START initialization
;START+3 initialization with module address in HL
;START+5 play one quark
;START+8 mute
;START+10 setup and status flags
;START+11 pointer to current position value in PT3 module;
;After INIT (START+11) points to Postion0-1 (optimization)

START:
	LD HL,MDLADDR	;Address of PT3 module
	JR INIT		;START+3
	JP PLAY		;START+5
	JR MUTE		;START+8
SETUP:	.db 0 ;set bit0 to 1, if you want to play without looping
	     ;bit7 is set each time, when loop point is passed
CrPsPtr:	.dw 0 

CHECKLP:	LD HL,SETUP
	SET 7,(HL)
	BIT 0,(HL)
	RET Z
	POP HL
	LD HL,DelyCnt
	INC (HL)
	LD HL,ChanA+CHNPRM_NtSkCn
	INC (HL)
MUTE:	XOR A
	LD H,A
	LD L,A
	LD (AYREGS+AR_AmplA),A
	LD (AYREGS+AR_AmplB),HL
	JP ROUT_A0

INIT:
;HL - AddressOfModule

	LD (MODADDR),HL
	LD (MDADDR2),HL
	PUSH HL
	LD DE,100
	ADD HL,DE
	LD A,(HL)
	LD (Delay),A
	PUSH HL
	POP IX
	ADD HL,DE
	LD (CrPsPtr),HL
	LD E,(IX+102-100)
	ADD HL,DE
	INC HL
	LD (LPosPtr),HL
	POP DE
	LD L,(IX+103-100)
	LD H,(IX+104-100)
	ADD HL,DE
	LD (PatsPtr),HL
	LD HL,169
	ADD HL,DE
	LD (OrnPtrs),HL
	LD HL,105
	ADD HL,DE
	LD (SamPtrs),HL
	LD HL,SETUP
	RES 7,(HL)

;note table data depacker
	LD DE,T_PACK
	LD BC,T1_+(2*49)-1
TP_0:	LD A,(DE)
	INC DE
	CP 15*2
	JR NC,TP_1
	LD H,A
	LD A,(DE)
	LD L,A
	INC DE
	JR TP_2
TP_1:	PUSH DE
	LD D,0
	LD E,A
	ADD HL,DE
	ADD HL,DE
	POP DE
TP_2:	LD A,H
	LD (BC),A
	DEC BC
	LD A,L
	LD (BC),A
	DEC BC
	SUB $F0
	JR NZ,TP_0

	LD HL,VARS
	LD (HL),A
	LD DE,VARS+1
	LD BC,VAR0END-VARS-1
	LDIR
	INC A
	LD (DelyCnt),A
	LD HL,$F001 ;H - CHNPRM_Volume, L - CHNPRM_NtSkCn
	LD (ChanA+CHNPRM_NtSkCn),HL
	LD (ChanB+CHNPRM_NtSkCn),HL
	LD (ChanC+CHNPRM_NtSkCn),HL

	LD HL,EMPTYSAMORN
	LD (AdInPtA),HL ;ptr to zero
	LD (ChanA+CHNPRM_OrnPtr),HL ;ornament 0 is "0,1,0"
	LD (ChanB+CHNPRM_OrnPtr),HL ;in all versions from
	LD (ChanC+CHNPRM_OrnPtr),HL ;3.xx to 3.6x and VTII

	LD (ChanA+CHNPRM_SamPtr),HL ;S1 There is no default
	LD (ChanB+CHNPRM_SamPtr),HL ;S2 sample in PT3, so, you
	LD (ChanC+CHNPRM_SamPtr),HL ;S3 can comment S1,2,3; see
				    ;also EMPTYSAMORN comment

	LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
	SUB $30
	JR C,L20
	CP 10
	JR C,L21
L20:	LD A,6
L21:	LD (Version),A
	PUSH AF
	CP 4
	LD A,(IX+99-100) ;TONE TABLE NUMBER
	RLA
	AND 7

;NoteTableCreator (c) Ivan Roshin
;A - NoteTableNumber*2+VersionForNoteTable
;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)

	LD HL,NT_DATA
	PUSH DE
	LD D,B
	ADD A,A
	LD E,A
	ADD HL,DE
	LD E,(HL)
	INC HL
	SRL E
	SBC A,A
	AND $A7 ;$00 (NOP) or $A7 (AND A)
	LD (L3),A
	EX DE,HL
	POP BC ;BC=T1_
	ADD HL,BC

	LD A,(DE)

	LD BC,T_
	ADD A,C
	LD C,A
	ADC A,B

	SUB C
	LD B,A
	PUSH BC
	LD DE,NT_
	PUSH DE

	LD B,12
L1:	PUSH BC
	LD C,(HL)
	INC HL
	PUSH HL
	LD B,(HL)

	PUSH DE
	EX DE,HL
	LD DE,23
	.db $DD,$26,$08	;LD XH,8

L2:	SRL B
	RR C
L3:	.db $19	;AND A or NOP
	LD A,C
	ADC A,D	;=ADC 0
	LD (HL),A
	INC HL
	LD A,B
	ADC A,D
	LD (HL),A
	ADD HL,DE
	.db $DD,$25	;DEC XH
	JR NZ,L2

	POP DE
	INC DE
	INC DE
	POP HL
	INC HL
	POP BC
	DJNZ L1

	POP HL
	POP DE

	LD A,E
	PUSH DE
	LD DE,TCOLD_1
	CP E
	POP DE
	JR NZ,CORR_1
	LD A,$FD
	LD (NT_+$2E),A
	
CORR_1:
	LD A,(DE)
	AND A
	JR Z,TC_EXIT
	RRA
	PUSH AF
	ADD A,A
	LD C,A
	ADD HL,BC
	POP AF
	JR NC,CORR_2
	DEC (HL)
	DEC (HL)
CORR_2:	INC (HL)
	AND A
	SBC HL,BC
	INC DE
	JR CORR_1

TC_EXIT:

	POP AF

;VolTableCreator (c) Ivan Roshin
;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
			   ;5.. - 3.5x..3.6x..VTII1.0)

	CP 5
	LD HL,$11
	LD D,H
	LD E,H
	LD A,$17
	JR NC,M1
	DEC L
	LD E,L
	XOR A
M1:      LD (M2),A

	LD IX,VT_+16
	LD C,$10

INITV2:  PUSH HL

	ADD HL,DE
	EX DE,HL
	SBC HL,HL

INITV1:  LD A,L
M2:      .db $7D
	LD A,H
	ADC A,0
	LD (IX),A
	INC IX
	ADD HL,DE
	INC C
	LD A,C
	AND 15
	JR NZ,INITV1

	POP HL
	LD A,E
	CP $77
	JR NZ,M3
	INC E
M3:      LD A,C
	AND A
	JR NZ,INITV2

	JP ROUT_A0

;pattern decoder
PD_OrSm:	LD (IX-12+CHNPRM_Env_En),0
	CALL SETORN
	LD A,(BC)
	INC BC
	RRCA

PD_SAM:	ADD A,A
PD_SAM_:	LD E,A
	LD D,0
SamPtrs: .equ $+1
	LD HL,$2121
	ADD HL,DE
	LD E,(HL)
	INC HL
	LD D,(HL)
MODADDR: .equ $+1
	LD HL,$2121
	ADD HL,DE
	LD (IX-12+CHNPRM_SamPtr),L
	LD (IX-12+CHNPRM_SamPtr+1),H
	JR PD_LOOP

PD_VOL:	RLCA
	RLCA
	RLCA
	RLCA
	LD (IX-12+CHNPRM_Volume),A
	JR PD_LP2
	
PD_EOff:	LD (IX-12+CHNPRM_Env_En),A
	LD (IX-12+CHNPRM_PsInOr),A
	JR PD_LP2

PD_SorE:	DEC A
	JR NZ,PD_ENV
	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_NNtSkp),A
	JR PD_LP2

PD_ENV:	CALL SETENV
	JR PD_LP2

PD_ORN:	CALL SETORN
	JR PD_LOOP
       
PD_ESAM:	LD (IX-12+CHNPRM_Env_En),A
	LD (IX-12+CHNPRM_PsInOr),A
	CALL NZ,SETENV
	LD A,(BC)
	INC BC
	JR PD_SAM_

PTDECOD: LD A,(IX-12+CHNPRM_Note)
	LD (PrNote+1),A
	LD L,(IX-12+CHNPRM_CrTnSl)
	LD H,(IX-12+CHNPRM_CrTnSl+1)
	LD (PrSlide+1),HL

PD_LOOP:	LD DE,$2010
PD_LP2:	LD A,(BC)
	INC BC
	ADD A,E
	JR C,PD_OrSm
	ADD A,D
	JR Z,PD_FIN
	JR C,PD_SAM
	ADD A,E
	JR Z,PD_REL
	JR C,PD_VOL
	ADD A,E
	JR Z,PD_EOff
	JR C,PD_SorE
	ADD A,96
	JR C,PD_NOTE
	ADD A,E
	JR C,PD_ORN
	ADD A,D
	JR C,PD_NOIS
	ADD A,E
	JR C,PD_ESAM
	ADD A,A
	LD E,A
	
	PUSH DE
	LD DE,$DF20
	LD HL,SPCCOMS	
	ADD HL,DE
	POP DE
	
	ADD HL,DE
	LD E,(HL)
	INC HL
	LD D,(HL)
	PUSH DE
	JR PD_LOOP

PD_NOIS:	LD (Ns_Base),A
	JR PD_LP2

PD_REL:	RES 0,(IX-12+CHNPRM_Flags)
	JR PD_RES
	
PD_NOTE:	LD (IX-12+CHNPRM_Note),A
	SET 0,(IX-12+CHNPRM_Flags)
	XOR A

PD_RES:	LD (PDSP_+1),SP
	LD SP,IX
	LD H,A
	LD L,A
	PUSH HL
	PUSH HL
	PUSH HL
	PUSH HL
	PUSH HL
	PUSH HL
PDSP_:	LD SP,$3131

PD_FIN:	LD A,(IX-12+CHNPRM_NNtSkp)
	LD (IX-12+CHNPRM_NtSkCn),A
	RET

C_PORTM: RES 2,(IX-12+CHNPRM_Flags)
	LD A,(BC)
	INC BC
;SKIP PRECALCULATED TONE DELTA (BECAUSE
;CANNOT BE RIGHT AFTER PT3 COMPILATION)
	INC BC
	INC BC
	LD (IX-12+CHNPRM_TnSlDl),A
	LD (IX-12+CHNPRM_TSlCnt),A
	LD DE,NT_
	LD A,(IX-12+CHNPRM_Note)
	LD (IX-12+CHNPRM_SlToNt),A
	ADD A,A
	LD L,A
	LD H,0
	ADD HL,DE
	LD A,(HL)
	INC HL
	LD H,(HL)
	LD L,A
	PUSH HL
PrNote:	LD A,$3E
	LD (IX-12+CHNPRM_Note),A
	ADD A,A
	LD L,A
	LD H,0
	ADD HL,DE
	LD E,(HL)
	INC HL
	LD D,(HL)
	POP HL
	SBC HL,DE
	LD (IX-12+CHNPRM_TnDelt),L
	LD (IX-12+CHNPRM_TnDelt+1),H
	LD E,(IX-12+CHNPRM_CrTnSl)
	LD D,(IX-12+CHNPRM_CrTnSl+1)
Version: .equ $+1
	LD A,$3E
	CP 6
	JR C,OLDPRTM ;Old 3xxx for PT v3.5-
PrSlide:	LD DE,$1111
	LD (IX-12+CHNPRM_CrTnSl),E
	LD (IX-12+CHNPRM_CrTnSl+1),D
OLDPRTM:	LD A,(BC) ;SIGNED TONE STEP
	INC BC
	EX AF,AF'
	LD A,(BC)
	INC BC
	AND A
	JR Z,NOSIG
	EX DE,HL
NOSIG:	SBC HL,DE
	JP P,SET_STP
	CPL
	EX AF,AF'
	NEG
	EX AF,AF'
SET_STP:	LD (IX-12+CHNPRM_TSlStp+1),A
	EX AF,AF'
	LD (IX-12+CHNPRM_TSlStp),A
	LD (IX-12+CHNPRM_COnOff),0
	RET

C_GLISS:	SET 2,(IX-12+CHNPRM_Flags)
	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_TnSlDl),A
	LD (IX-12+CHNPRM_TSlCnt),A
	LD A,(BC)
	INC BC
	EX AF,AF'
	LD A,(BC)
	INC BC
	JR SET_STP

C_SMPOS:	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_PsInSm),A
	RET

C_ORPOS:	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_PsInOr),A
	RET

C_VIBRT:	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_OnOffD),A
	LD (IX-12+CHNPRM_COnOff),A
	LD A,(BC)
	INC BC
	LD (IX-12+CHNPRM_OffOnD),A
	XOR A
	LD (IX-12+CHNPRM_TSlCnt),A
	LD (IX-12+CHNPRM_CrTnSl),A
	LD (IX-12+CHNPRM_CrTnSl+1),A
	RET

C_ENGLS:	LD A,(BC)
	INC BC
	LD (Env_Del),A
	LD (CurEDel),A
	LD A,(BC)
	INC BC
	LD L,A
	LD A,(BC)
	INC BC
	LD H,A
	LD (ESldAdd),HL
	RET

C_DELAY:	LD A,(BC)
	INC BC
	LD (Delay),A
	RET
	
SETENV:	LD (IX-12+CHNPRM_Env_En),E
	LD (AYREGS+AR_EnvTp),A
	LD A,(BC)
	INC BC
	LD H,A
	LD A,(BC)
	INC BC
	LD L,A
	LD (EnvBase),HL
	XOR A
	LD (IX-12+CHNPRM_PsInOr),A
	LD (CurEDel),A
	LD H,A
	LD L,A
	LD (CurESld),HL
C_NOP:	RET

SETORN:	ADD A,A
	LD E,A
	LD D,0
	LD (IX-12+CHNPRM_PsInOr),D
OrnPtrs:	.equ $+1
	LD HL,$2121
	ADD HL,DE
	LD E,(HL)
	INC HL
	LD D,(HL)
MDADDR2:	.equ $+1
	LD HL,$2121
	ADD HL,DE
	LD (IX-12+CHNPRM_OrnPtr),L
	LD (IX-12+CHNPRM_OrnPtr+1),H
	RET

;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
SPCCOMS: .dw C_NOP
	.dw C_GLISS
	.dw C_PORTM
	.dw C_SMPOS
	.dw C_ORPOS
	.dw C_VIBRT
	.dw C_NOP
	.dw C_NOP
	.dw C_ENGLS
	.dw C_DELAY
	.dw C_NOP
	.dw C_NOP
	.dw C_NOP
	.dw C_NOP
	.dw C_NOP
	.dw C_NOP

CHREGS:	XOR A
	LD (Ampl),A
	BIT 0,(IX+CHNPRM_Flags)
	PUSH HL
	JP Z,CH_EXIT
	LD (CSP_+1),SP
	LD L,(IX+CHNPRM_OrnPtr)
	LD H,(IX+CHNPRM_OrnPtr+1)
	LD SP,HL
	POP DE
	LD H,A
	LD A,(IX+CHNPRM_PsInOr)
	LD L,A
	ADD HL,SP
	INC A
	CP D
	JR C,CH_ORPS
	LD A,E
CH_ORPS:	LD (IX+CHNPRM_PsInOr),A
	LD A,(IX+CHNPRM_Note)
	ADD A,(HL)
	JP P,CH_NTP
	XOR A
CH_NTP:	CP 96
	JR C,CH_NOK
	LD A,95
CH_NOK:	ADD A,A
	EX AF,AF'
	LD L,(IX+CHNPRM_SamPtr)
	LD H,(IX+CHNPRM_SamPtr+1)
	LD SP,HL
	POP DE
	LD H,0
	LD A,(IX+CHNPRM_PsInSm)
	LD B,A
	ADD A,A
	ADD A,A
	LD L,A
	ADD HL,SP
	LD SP,HL
	LD A,B
	INC A
	CP D
	JR C,CH_SMPS
	LD A,E
CH_SMPS:	LD (IX+CHNPRM_PsInSm),A
	POP BC
	POP HL
	LD E,(IX+CHNPRM_TnAcc)
	LD D,(IX+CHNPRM_TnAcc+1)
	ADD HL,DE
	BIT 6,B
	JR Z,CH_NOAC
	LD (IX+CHNPRM_TnAcc),L
	LD (IX+CHNPRM_TnAcc+1),H
CH_NOAC: EX DE,HL
	EX AF,AF'
	LD L,A
	LD H,0
	LD SP,NT_
	ADD HL,SP
	LD SP,HL
	POP HL
	ADD HL,DE
	LD E,(IX+CHNPRM_CrTnSl)
	LD D,(IX+CHNPRM_CrTnSl+1)
	ADD HL,DE
CSP_:	LD SP,$3131
	EX (SP),HL
	XOR A
	OR (IX+CHNPRM_TSlCnt)
	JR Z,CH_AMP
	DEC (IX+CHNPRM_TSlCnt)
	JR NZ,CH_AMP
	LD A,(IX+CHNPRM_TnSlDl)
	LD (IX+CHNPRM_TSlCnt),A
	LD L,(IX+CHNPRM_TSlStp)
	LD H,(IX+CHNPRM_TSlStp+1)
	LD A,H
	ADD HL,DE
	LD (IX+CHNPRM_CrTnSl),L
	LD (IX+CHNPRM_CrTnSl+1),H
	BIT 2,(IX+CHNPRM_Flags)
	JR NZ,CH_AMP
	LD E,(IX+CHNPRM_TnDelt)
	LD D,(IX+CHNPRM_TnDelt+1)
	AND A
	JR Z,CH_STPP
	EX DE,HL
CH_STPP: SBC HL,DE
	JP M,CH_AMP
	LD A,(IX+CHNPRM_SlToNt)
	LD (IX+CHNPRM_Note),A
	XOR A
	LD (IX+CHNPRM_TSlCnt),A
	LD (IX+CHNPRM_CrTnSl),A
	LD (IX+CHNPRM_CrTnSl+1),A
CH_AMP:	LD A,(IX+CHNPRM_CrAmSl)
	BIT 7,C
	JR Z,CH_NOAM
	BIT 6,C
	JR Z,CH_AMIN
	CP 15
	JR Z,CH_NOAM
	INC A
	JR CH_SVAM
CH_AMIN:	CP -15
	JR Z,CH_NOAM
	DEC A
CH_SVAM:	LD (IX+CHNPRM_CrAmSl),A
CH_NOAM:	LD L,A
	LD A,B
	AND 15
	ADD A,L
	JP P,CH_APOS
	XOR A
CH_APOS:	CP 16
	JR C,CH_VOL
	LD A,15
CH_VOL:	OR (IX+CHNPRM_Volume)
	LD L,A
	LD H,0
	LD DE,VT_
	ADD HL,DE
	LD A,(HL)
CH_ENV:	BIT 0,C
	JR NZ,CH_NOEN
	OR (IX+CHNPRM_Env_En)
CH_NOEN:	LD (Ampl),A
	BIT 7,B
	LD A,C
	JR Z,NO_ENSL
	RLA
	RLA
	SRA A
	SRA A
	SRA A
	ADD A,(IX+CHNPRM_CrEnSl) ;SEE COMMENT BELOW
	BIT 5,B
	JR Z,NO_ENAC
	LD (IX+CHNPRM_CrEnSl),A
NO_ENAC:	LD HL,AddToEn
	ADD A,(HL) ;BUG IN PT3 - NEED WORD HERE.
		   ;FIX IT IN NEXT VERSION?
	LD (HL),A
	JR CH_MIX
NO_ENSL: RRA
	ADD A,(IX+CHNPRM_CrNsSl)
	LD (AddToNs),A
	BIT 5,B
	JR Z,CH_MIX
	LD (IX+CHNPRM_CrNsSl),A
CH_MIX:	LD A,B
	RRA
	AND $48
CH_EXIT:	LD HL,AYREGS+AR_Mixer
	OR (HL)
	RRCA
	LD (HL),A
	POP HL
	XOR A
	OR (IX+CHNPRM_COnOff)
	RET Z
	DEC (IX+CHNPRM_COnOff)
	RET NZ
	XOR (IX+CHNPRM_Flags)
	LD (IX+CHNPRM_Flags),A
	RRA
	LD A,(IX+CHNPRM_OnOffD)
	JR C,CH_ONDL
	LD A,(IX+CHNPRM_OffOnD)
CH_ONDL:	LD (IX+CHNPRM_COnOff),A
	RET

PLAY:    XOR A
	LD (AddToEn),A
	LD (AYREGS+AR_Mixer),A
	DEC A
	LD (AYREGS+AR_EnvTp),A
	LD HL,DelyCnt
	DEC (HL)
	JR NZ,PL2
	LD HL,ChanA+CHNPRM_NtSkCn
	DEC (HL)
	JR NZ,PL1B
AdInPtA:	.equ $+1
	LD BC,$0101
	LD A,(BC)
	AND A
	JR NZ,PL1A
	LD D,A
	LD (Ns_Base),A
	LD HL,(CrPsPtr)
	INC HL
	LD A,(HL)
	INC A
	JR NZ,PLNLP
	CALL CHECKLP
LPosPtr:	.equ $+1
	LD HL,$2121
	LD A,(HL)
	INC A
PLNLP:	LD (CrPsPtr),HL
	DEC A
	ADD A,A
	LD E,A
	RL D
PatsPtr:	.equ $+1
	LD HL,$2121
	ADD HL,DE
	LD DE,(MODADDR)
	LD (PSP_+1),SP
	LD SP,HL
	POP HL
	ADD HL,DE
	LD B,H
	LD C,L
	POP HL
	ADD HL,DE
	LD (AdInPtB),HL
	POP HL
	ADD HL,DE
	LD (AdInPtC),HL
PSP_:	LD SP,$3131
PL1A:	LD IX,ChanA+12
	CALL PTDECOD
	LD (AdInPtA),BC

PL1B:	LD HL,ChanB+CHNPRM_NtSkCn
	DEC (HL)
	JR NZ,PL1C
	LD IX,ChanB+12
AdInPtB:	.equ $+1
	LD BC,$0101
	CALL PTDECOD
	LD (AdInPtB),BC

PL1C:	LD HL,ChanC+CHNPRM_NtSkCn
	DEC (HL)
	JR NZ,PL1D
	LD IX,ChanC+12
AdInPtC:	.equ $+1
	LD BC,$0101
	CALL PTDECOD
	LD (AdInPtC),BC

Delay:	.equ $+1
PL1D:	LD A,$3E
	LD (DelyCnt),A

PL2:	LD IX,ChanA
	LD HL,(AYREGS+AR_TonA)
	CALL CHREGS
	LD (AYREGS+AR_TonA),HL
	LD A,(Ampl)
	LD (AYREGS+AR_AmplA),A
	LD IX,ChanB
	LD HL,(AYREGS+AR_TonB)
	CALL CHREGS
	LD (AYREGS+AR_TonB),HL
	LD A,(Ampl)
	LD (AYREGS+AR_AmplB),A
	LD IX,ChanC
	LD HL,(AYREGS+AR_TonC)
	CALL CHREGS
;	LD A,(Ampl) ;Ampl = AYREGS+AR_AmplC
;	LD (AYREGS+AR_AmplC),A
	LD (AYREGS+AR_TonC),HL

	LD HL,(Ns_Base_AddToNs)
	LD A,H
	ADD A,L
	LD (AYREGS+AR_Noise),A

AddToEn: .equ $+1
	LD A,$3E
	LD E,A
	ADD A,A
	SBC A,A
	LD D,A
	LD HL,(EnvBase)
	ADD HL,DE
	LD DE,(CurESld)
	ADD HL,DE
	LD (AYREGS+AR_Env),HL

	XOR A
	LD HL,CurEDel
	OR (HL)
	JR Z,ROUT_A0
	DEC (HL)
	JR NZ,ROUT
Env_Del:	.equ $+1
	LD A,$3E
	LD (HL),A
ESldAdd:	.equ $+1
	LD HL,$2121
	ADD HL,DE
	LD (CurESld),HL

ROUT:	XOR A
ROUT_A0:
	LD C,$A0
	LD HL,AYREGS
LOUT:	OUT (C),A
	INC C
	OUTI 
	DEC C
	INC A
	CP 13
	JR NZ,LOUT
	OUT (C),A
	LD A,(HL)
	AND A
	RET M
	INC C
	OUT (C),A
	RET

NT_DATA:	.db (T_NEW_0-T1_)*2
	.db TCNEW_0-T_
	.db (T_OLD_0-T1_)*2+1
	.db TCOLD_0-T_
	.db (T_NEW_1-T1_)*2+1
	.db TCNEW_1-T_
	.db (T_OLD_1-T1_)*2+1
	.db TCOLD_1-T_
	.db (T_NEW_2-T1_)*2
	.db TCNEW_2-T_
	.db (T_OLD_2-T1_)*2
	.db TCOLD_2-T_
	.db (T_NEW_3-T1_)*2
	.db TCNEW_3-T_
	.db (T_OLD_3-T1_)*2
	.db TCOLD_3-T_

T_:

TCOLD_0:	.db $00+1,$04+1,$08+1,$0A+1,$0C+1,$0E+1,$12+1,$14+1
	.db $18+1,$24+1,$3C+1,0
TCOLD_1:	.db $5C+1,0
TCOLD_2:	.db $30+1,$36+1,$4C+1,$52+1,$5E+1,$70+1,$82,$8C,$9C
	.db $9E,$A0,$A6,$A8,$AA,$AC,$AE,$AE,0
TCNEW_3:	.db $56+1
TCOLD_3:	.db $1E+1,$22+1,$24+1,$28+1,$2C+1,$2E+1,$32+1,$BE+1,0
TCNEW_0:	.db $1C+1,$20+1,$22+1,$26+1,$2A+1,$2C+1,$30+1,$54+1
	.db $BC+1,$BE+1,0
TCNEW_1: .equ TCOLD_1
TCNEW_2:	.db $1A+1,$20+1,$24+1,$28+1,$2A+1,$3A+1,$4C+1,$5E+1
	.db $BA+1,$BC+1,$BE+1,0

EMPTYSAMORN: .equ $-1
	.db 1,0,$90 ;delete $90 if you don't need default sample

;first 12 values of tone tables (packed)

T_PACK:	.db $06EC*2/256,$06EC*2
	.db $0755-$06EC
	.db $07C5-$0755
	.db $083B-$07C5
	.db $08B8-$083B
	.db $093D-$08B8
	.db $09CA-$093D
	.db $0A5F-$09CA
	.db $0AFC-$0A5F
	.db $0BA4-$0AFC
	.db $0C55-$0BA4
	.db $0D10-$0C55
	.db $066D*2/256,$066D*2
	.db $06CF-$066D
	.db $0737-$06CF
	.db $07A4-$0737
	.db $0819-$07A4
	.db $0894-$0819
	.db $0917-$0894
	.db $09A1-$0917
	.db $0A33-$09A1
	.db $0ACF-$0A33
	.db $0B73-$0ACF
	.db $0C22-$0B73
	.db $0CDA-$0C22
	.db $0704*2/256,$0704*2
	.db $076E-$0704
	.db $07E0-$076E
	.db $0858-$07E0
	.db $08D6-$0858
	.db $095C-$08D6
	.db $09EC-$095C
	.db $0A82-$09EC
	.db $0B22-$0A82
	.db $0BCC-$0B22
	.db $0C80-$0BCC
	.db $0D3E-$0C80
	.db $07E0*2/256,$07E0*2
	.db $0858-$07E0
	.db $08E0-$0858
	.db $0960-$08E0
	.db $09F0-$0960
	.db $0A88-$09F0
	.db $0B28-$0A88
	.db $0BD8-$0B28
	.db $0C80-$0BD8
	.db $0D60-$0C80
	.db $0E10-$0D60
	.db $0EF8-$0E10

;vars from here can be stripped
;you can move VARS to any other address

VARS:

;ChannelsVars
;struc	CHNPRM
;reset group
CHNPRM_PsInOr:	.equ 0	;RESB 1
CHNPRM_PsInSm:	.equ 1	;RESB 1
CHNPRM_CrAmSl:	.equ 2	;RESB 1
CHNPRM_CrNsSl:	.equ 3	;RESB 1
CHNPRM_CrEnSl:	.equ 4	;RESB 1
CHNPRM_TSlCnt:	.equ 5	;RESB 1
CHNPRM_CrTnSl:	.equ 6	;RESW 1
CHNPRM_TnAcc:	.equ 8	;RESW 1
CHNPRM_COnOff:	.equ 10	;RESB 1
;reset group

CHNPRM_OnOffD:	.equ 11	;RESB 1

;IX for PTDECOD here (+12)
CHNPRM_OffOnD:	.equ 12	;RESB 1
CHNPRM_OrnPtr:	.equ 13	;RESW 1
CHNPRM_SamPtr:	.equ 15	;RESW 1
CHNPRM_NNtSkp:	.equ 17	;RESB 1
CHNPRM_Note:	.equ 18	;RESB 1
CHNPRM_SlToNt:	.equ 19	;RESB 1
CHNPRM_Env_En:	.equ 20	;RESB 1
CHNPRM_Flags:	.equ 21	;RESB 1
 ;Enabled - 0,SimpleGliss - 2
CHNPRM_TnSlDl:	.equ 22	;RESB 1
CHNPRM_TSlStp:	.equ 23	;RESW 1
CHNPRM_TnDelt:	.equ 25	;RESW 1
CHNPRM_NtSkCn:	.equ 27	;RESB 1
CHNPRM_Volume:	.equ 28	;RESB 1
CHNPRM_Size	.equ 29	;RESB 1
;endstruc

ChanA:	.ds CHNPRM_Size
ChanB:	.ds CHNPRM_Size
ChanC:	.ds CHNPRM_Size

;struc	AR
AR_TonA:	.equ 0	;RESW 1
AR_TonB:	.equ 2	;RESW 1
AR_TonC:	.equ 4	;RESW 1
AR_Noise:	.equ 6	;RESB 1
AR_Mixer:	.equ 7	;RESB 1
AR_AmplA:	.equ 8	;RESB 1
AR_AmplB:	.equ 9	;RESB 1
AR_AmplC:	.equ 10	;RESB 1
AR_Env:	.equ 11	;RESW 1
AR_EnvTp:	.equ 13	;RESB 1
;endstruc

;GlobalVars
DelyCnt:	.db 0
CurESld:	.dw 0
CurEDel:	.db 0
Ns_Base_AddToNs:
Ns_Base:	.db 0
AddToNs:	.db 0

AYREGS:

VT_:	.ds 256 ;CreatedVolumeTableAddress

EnvBase:	.equ VT_+14

T1_:	.equ VT_+16 ;Tone tables data depacked here

T_OLD_1:	.equ T1_
T_OLD_2:	.equ T_OLD_1+24
T_OLD_3:	.equ T_OLD_2+24
T_OLD_0:	.equ T_OLD_3+2
T_NEW_0:	.equ T_OLD_0
T_NEW_1:	.equ T_OLD_1
T_NEW_2:	.equ T_NEW_0+24
T_NEW_3:	.equ T_OLD_3

NT_:	.ds 192 ;CreatedNoteTableAddress

;local var
Ampl:	.equ AYREGS+AR_AmplC

VAR0END:	.equ VT_+16 ;INIT zeroes from VARS to VAR0END-1

VARSEND: .equ $

MDLADDR: .equ $		;Place your song here.

;Release 0 steps:
;11.Sep.2004 - Note tables creator
;12.Sep.2004 - Volume tables creator; INIT subroutine
;13.Sep.2004 - Play counters, position counters
;14.Sep.2004 - Patterns decoder subroutine
;15.Sep.2004 - Resting (no code)
;16.Sep.2004 - CHREGS subroutine; global debugging; 1st stable
;version was born
;17.Sep.2004 - Debugging and optimization. First release!
;Release 1 steps:
;20.Sep.2004 - local vars moved to code (selfmodified code
;smaller and faster)
;22.Sep.2004 - added mute sound entry at START+8; position
;pointer moved to START+11; added setup and status byte at
;START+10 noloop mode and loop passed flags added
;Release 2 steps:
;28.Sep.2004 - Optimization: code around CHREGS's volume and
;vibrato faster now; zeroing PD_RES through stack; Ton and Ampl
;moved from channel vars to global ones; first position selector
;removed from INIT; optimization for packers(Ivan Roshin method)
;Release 3 steps:
;2.Oct.2004 - optimization in INIT and PD_LOOP (thanks to Ivan
;Roshin)
;4.Oct.2004 - load delay from (hl) in INIT (2 bytes shorter)
;5.Oct.2004 - optimization in PD_LOOP (->PD_LP2)
;7.Oct.2004 - swaping some commands for better packing
;Release 4 steps:
;9.Oct.2004 - optimization around LD HL,SPCCOMS (thanks to Ivan
;Roshin); in PTDECOD swapped BC and DE to optimize C_PORTM;
;removed sam and orn len and loop channel vars; CHREGS totally
;optimized
;Release 5 steps:
;11.Oct.2004 - PD_OrSm and C_PORTM optimized; Ivan Roshin's
;volume tables creator algorithm (51 bytes shorter than mine)
;12.Oct.2004 - Ivan Roshin's note tables creator algorithm (74
;bytes shorter than mine)
;Release 6 steps:
;14.Oct.2004 - loop and next position calculations moved to INIT
;15.Oct.2004 - AdInPt moved to code
;19.Oct.2004 - Env_Del moved to code
;20.Oct.2004 - Version PUSH and POP (1 byte shorter, thanks to
;Ivan Roshin)
;22.Oct.2004 - Env_En moved from Flags' bit to byte (shorter and
;faster code)
;25.Oct.2004 - SETENV optimized
;29.Oct.2004 - Optimized around AddToEn (SBC A,A, thanks to Ivan
;Roshin)
;3.Nov.2004 - Note tables data was compressed; with depacker it
;is 9 bytes shorter than uncompressed (thanks to Ivan Roshin)
;4.Nov.2004 - default sample and ornament both are fixed now
;and placed into code block (6 bytes shorter)
;7.Nov.2004 - LD A,(Ns_Base):LD L,A changed to LD HL,(Ns_Base)
;(thanks to Dima Bystrov)
;9.Nov.2004 - Ns_Base and AddToNs are merged to Ns_Base_AddToNs;
;LD A,255 changed to DEC A (at start of PLAY); added ROUT_A0
;12.Nov.2004 - NtSkCn&Volume are merged (8 bytes smaller init);
;LD BC,T1_ changed to PUSH DE...POP BC in note table creator
;19.Dec.2004 - NT_DATA reorganized (6 bytes shorter, thanks to
;Ivan Roshin); C_PORTM and C_GLISS are merged via SET_STP (48
;tacts slower, but 8 bytes smaller, thanks to Ivan Roshin)
;09.Jan.2005 - Adapted to MSX by Alfonso D.C. a.k.a. Dioniso

;Notes:
;Pro Tracker 3.4r can not be detected by header, so PT3.4r tone
;tables realy used only for modules of 3.3 and older versions.

Song FACTOR.PT3 converted to HEX values:
minerbankmusic1pt3.asm

        .db $56,$6f,$72,$74,$65,$78,$20,$54,$72,$61,$63,$6b,$65,$72,$20,$49
        .db $49,$20,$31,$2e,$30,$20,$6d,$6f,$64,$75,$6c,$65,$3a,$20,$20,$20
        .db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        .db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$62
        .db $79,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        .db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        .db $20,$20,$20,$01,$03,$18,$00,$e2,$00,$00,$00,$ed,$07,$6f,$08,$f1
        .db $08,$73,$09,$f5,$09,$77,$0a,$f9,$0a,$7f,$0b,$05,$0c,$87,$0c,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$09,$0d,$0c,$0d,$2e,$0d,$50
        .db $0d,$72,$0d,$94,$0d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$06,$06,$06,$09,$0c
        .db $0c,$0c,$0f,$12,$15,$18,$15,$1b,$1e,$1b,$1e,$21,$24,$27,$2a,$2d
        .db $30,$ff,$48,$01,$69,$01,$8b,$01,$aa,$01,$d2,$01,$ee,$01,$04,$02
        .db $2c,$02,$ee,$01,$aa,$01,$45,$02,$ee,$01,$64,$02,$98,$02,$ee,$01
        .db $b9,$02,$3f,$03,$55,$03,$b9,$02,$7f,$03,$d2,$03,$f4,$03,$7a,$04
        .db $cc,$04,$b9,$02,$7f,$03,$f2,$04,$b9,$02,$7f,$03,$1b,$05,$f4,$03
        .db $7a,$04,$1b,$05,$b9,$02,$7f,$03,$61,$05,$f4,$03,$7a,$04,$83,$05
        .db $a9,$05,$2f,$06,$89,$06,$af,$06,$35,$07,$8f,$07,$a9,$05,$2f,$06
        .db $ad,$07,$af,$06,$35,$07,$cb,$07,$f0,$02,$c6,$09,$b1,$04,$59,$03
        .db $c7,$d0,$c8,$59,$c9,$d0,$59,$ca,$d0,$59,$cb,$d0,$5b,$cc,$d0,$5b
        .db $cd,$d0,$5b,$ce,$d0,$5e,$cf,$d0,$00,$c6,$b1,$04,$d0,$f0,$04,$c7
        .db $7f,$c8,$d0,$c9,$b1,$08,$78,$ca,$84,$cb,$7f,$cc,$7f,$cd,$b1,$04
        .db $78,$7d,$ce,$b1,$08,$d0,$cf,$b1,$04,$d0,$00,$f0,$04,$c6,$b1,$04
        .db $78,$c7,$d0,$c8,$84,$c9,$d0,$7f,$ca,$d0,$78,$cb,$d0,$78,$cc,$d0
        .db $84,$cd,$d0,$7f,$ce,$84,$78,$cf,$7f,$00,$1e,$00,$10,$08,$40,$cf
        .db $09,$b1,$08,$60,$03,$bf,$00,$10,$60,$bf,$00,$10,$60,$bf,$00,$10
        .db $60,$bf,$00,$12,$5e,$bf,$00,$12,$5e,$bf,$00,$12,$5e,$bf,$00,$12
        .db $5e,$00,$f0,$06,$cf,$b1,$10,$7f,$b1,$06,$7d,$7b,$b1,$04,$7a,$b1
        .db $0c,$7b,$b1,$02,$7d,$7b,$b1,$08,$7a,$b1,$04,$76,$78,$00,$f0,$04
        .db $ce,$b1,$04,$78,$7f,$84,$78,$7f,$84,$78,$7f,$78,$7f,$84,$78,$7f
        .db $84,$78,$7f,$00,$1e,$00,$14,$08,$40,$cf,$09,$b1,$08,$5c,$03,$bf
        .db $00,$14,$5c,$bf,$00,$14,$5c,$bf,$00,$14,$5c,$bf,$00,$18,$59,$bf
        .db $00,$18,$59,$bf,$00,$10,$5b,$bf,$00,$10,$5b,$00,$cf,$b1,$1c,$d0
        .db $f0,$06,$b1,$02,$7a,$7b,$b1,$06,$7d,$7b,$b1,$04,$7a,$b1,$06,$7f
        .db $82,$b1,$04,$73,$00,$f0,$06,$cf,$b1,$10,$84,$d5,$b1,$06,$8b,$d3
        .db $89,$b1,$04,$87,$b1,$02,$86,$87,$86,$b1,$06,$84,$b1,$08,$82,$7f
        .db $b1,$04,$7b,$00,$1e,$00,$14,$08,$40,$cf,$09,$b1,$08,$5c,$03,$bf
        .db $00,$14,$5c,$bf,$00,$14,$5c,$bf,$00,$14,$5c,$bf,$00,$18,$59,$bf
        .db $00,$18,$59,$bf,$00,$10,$5b,$bf,$00,$10,$b1,$04,$5b,$bf,$00,$20
        .db $b1,$02,$67,$bf,$00,$10,$5b,$00,$f0,$06,$cf,$01,$b1,$04,$7e,$01
        .db $ff,$ff,$d6,$b1,$0c,$7f,$ce,$b1,$04,$d0,$cd,$d0,$cc,$d0,$d3,$cf
        .db $b1,$02,$7a,$7b,$b1,$10,$7d,$76,$00,$1e,$00,$10,$08,$40,$cf,$09
        .db $b1,$04,$60,$03,$bf,$00,$08,$b1,$02,$6c,$bf,$00,$10,$60,$d7,$b0
        .db $76,$d4,$bf,$00,$20,$54,$bf,$00,$10,$60,$bf,$00,$08,$6c,$bf,$00
        .db $10,$b1,$04,$60,$bf,$00,$08,$b1,$02,$6c,$bf,$00,$10,$60,$d7,$b0
        .db $76,$d4,$bf,$00,$20,$54,$bf,$00,$10,$60,$bf,$00,$08,$6c,$bf,$00
        .db $10,$b1,$04,$60,$bf,$00,$08,$b1,$02,$6c,$bf,$00,$10,$60,$d7,$b0
        .db $76,$d4,$bf,$00,$20,$54,$bf,$00,$10,$60,$bf,$00,$08,$6c,$bf,$00
        .db $10,$b1,$04,$60,$bf,$00,$08,$b1,$02,$6c,$bf,$00,$10,$60,$d7,$b0
        .db $76,$d4,$bf,$00,$20,$54,$bf,$00,$08,$6c,$bf,$00,$10,$60,$00,$f0
        .db $10,$cf,$b1,$08,$76,$76,$76,$76,$76,$76,$76,$b1,$02,$76,$d7,$76
        .db $d8,$76,$d7,$76,$00,$f0,$06,$cf,$b1,$04,$78,$ce,$d0,$cd,$d0,$cc
        .db $d0,$cb,$d0,$ca,$d0,$c9,$d0,$c8,$d0,$c7,$d0,$c6,$d0,$c5,$d0,$c4
        .db $d0,$c3,$d0,$c2,$d0,$d9,$41,$cf,$78,$42,$b1,$02,$78,$78,$00,$f0
        .db $10,$cf,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40,$76,$d9,$42
        .db $b1,$04,$78,$43,$b1,$02,$76,$d8,$40,$76,$d9,$43,$cb,$76,$cf,$76
        .db $42,$78,$d8,$40,$76,$d3,$6c,$78,$84,$d8,$b1,$04,$76,$d9,$42,$b1
        .db $02,$78,$78,$d8,$40,$76,$d9,$42,$b1,$04,$78,$43,$b1,$02,$7b,$d8
        .db $40,$76,$d9,$43,$cb,$7b,$42,$cf,$78,$78,$d8,$40,$76,$d3,$6c,$78
        .db $84,$00,$cf,$b1,$08,$d0,$f0,$06,$b1,$04,$78,$73,$b1,$06,$76,$b1
        .db $02,$78,$b1,$10,$c0,$b1,$04,$73,$76,$7a,$b1,$02,$7b,$7a,$c0,$76
        .db $b1,$04,$c0,$00,$1e,$00,$14,$08,$40,$cf,$09,$b1,$04,$5c,$03,$bf
        .db $00,$0a,$b1,$02,$68,$bf,$00,$14,$5c,$d7,$b0,$76,$d4,$bf,$00,$1e
        .db $5c,$bf,$00,$14,$68,$bf,$00,$0a,$74,$bf,$00,$14,$b1,$04,$5c,$bf
        .db $00,$0a,$b1,$02,$68,$bf,$00,$14,$5c,$d7,$b0,$76,$d4,$bf,$00,$1e
        .db $5c,$bf,$00,$14,$68,$bf,$00,$0a,$74,$bf,$00,$18,$b1,$04,$59,$bf
        .db $00,$0c,$b1,$02,$65,$bf,$00,$18,$59,$d7,$b0,$76,$d4,$bf,$00,$24
        .db $59,$bf,$00,$18,$65,$bf,$00,$24,$71,$bf,$00,$20,$b1,$04,$5b,$bf
        .db $00,$15,$b1,$02,$73,$bf,$00,$20,$5b,$d7,$b0,$76,$d4,$bf,$00,$20
        .db $5b,$bf,$00,$10,$67,$bf,$00,$08,$73,$00,$f0,$10,$cf,$b1,$04,$76
        .db $d9,$42,$b1,$02,$78,$78,$d8,$40,$76,$d9,$42,$b1,$04,$78,$43,$b1
        .db $02,$76,$d8,$40,$76,$d9,$43,$cb,$76,$cf,$76,$42,$78,$d8,$40,$76
        .db $d3,$6c,$78,$84,$d8,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40
        .db $76,$d9,$42,$b1,$04,$78,$43,$b1,$02,$74,$d8,$40,$76,$d9,$43,$cb
        .db $74,$cf,$76,$76,$d8,$40,$76,$d3,$6c,$78,$84,$00,$f0,$12,$cf,$b1
        .db $08,$78,$d3,$b1,$04,$78,$73,$b1,$06,$7b,$b1,$02,$78,$b1,$10,$c0
        .db $b1,$04,$87,$84,$82,$b1,$02,$7d,$7f,$cb,$d0,$cf,$82,$cb,$d0,$cf
        .db $84,$00,$cc,$b1,$02,$d0,$cb,$d0,$ca,$d0,$c9,$d0,$f0,$06,$cf,$b1
        .db $04,$78,$73,$b1,$06,$76,$b1,$02,$78,$b1,$10,$c0,$b1,$04,$73,$76
        .db $7a,$b1,$02,$7b,$7a,$c0,$76,$b1,$04,$c0,$00,$f4,$14,$cf,$b1,$02
        .db $78,$ce,$d0,$cd,$d0,$cc,$d0,$cb,$d0,$ca,$d0,$c9,$d0,$c8,$d0,$cf
        .db $84,$ce,$d0,$cd,$d0,$cc,$d0,$cb,$d0,$ca,$d0,$c9,$d0,$c8,$d0,$cf
        .db $78,$ce,$d0,$cd,$d0,$cc,$d0,$cb,$d0,$ca,$d0,$c9,$d0,$c8,$d0,$45
        .db $cf,$7b,$ce,$d0,$cd,$d0,$cc,$d0,$cb,$d0,$ca,$d0,$c9,$d0,$c8,$d0
        .db $00,$cf,$b1,$08,$c0,$f0,$06,$b1,$04,$78,$73,$b1,$06,$76,$b1,$02
        .db $78,$b1,$10,$c0,$b1,$04,$73,$76,$7a,$b1,$02,$7b,$7a,$c0,$76,$b1
        .db $04,$c0,$00,$f0,$12,$cf,$b1,$08,$78,$d3,$b1,$04,$78,$73,$b1,$06
        .db $7b,$b1,$02,$78,$b1,$10,$c0,$b1,$04,$87,$84,$82,$b1,$02,$7d,$7f
        .db $cb,$d0,$cf,$82,$cb,$d0,$cf,$7f,$00,$1e,$00,$14,$08,$40,$cf,$09
        .db $b1,$04,$5c,$03,$bf,$00,$0a,$b1,$02,$68,$bf,$00,$14,$5c,$d7,$b0
        .db $76,$d4,$bf,$00,$1e,$5c,$bf,$00,$14,$68,$bf,$00,$0a,$74,$bf,$00
        .db $14,$b1,$04,$5c,$bf,$00,$0a,$b1,$02,$68,$bf,$00,$14,$5c,$d7,$b0
        .db $76,$d4,$bf,$00,$1e,$5c,$bf,$00,$14,$68,$bf,$00,$0a,$74,$bf,$00
        .db $12,$b1,$04,$5e,$bf,$00,$09,$b1,$02,$6a,$bf,$00,$12,$5e,$d7,$b0
        .db $76,$d4,$bf,$00,$24,$52,$bf,$00,$12,$5e,$bf,$00,$09,$6a,$bf,$00
        .db $12,$b1,$04,$5e,$bf,$00,$09,$b1,$02,$6a,$bf,$00,$12,$5e,$d7,$b0
        .db $76,$d4,$bf,$00,$24,$52,$bf,$00,$12,$5e,$bf,$00,$09,$6a,$00,$f0
        .db $10,$cf,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40,$b1,$04,$76
        .db $d9,$42,$b1,$02,$78,$78,$d8,$40,$b1,$04,$76,$d9,$42,$b1,$02,$78
        .db $78,$d8,$40,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40,$b1,$04
        .db $76,$d9,$43,$b1,$02,$76,$76,$d8,$40,$b1,$04,$76,$d9,$43,$b1,$02
        .db $76,$76,$d8,$40,$b1,$04,$76,$d9,$43,$b1,$02,$76,$76,$d8,$40,$b1
        .db $04,$76,$d9,$43,$b1,$02,$76,$76,$00,$cf,$b1,$14,$d0,$f0,$0a,$b1
        .db $06,$7f,$d3,$7b,$b1,$0c,$7d,$b1,$02,$76,$78,$d5,$b1,$04,$7d,$01
        .db $b1,$02,$d0,$01,$01,$00,$d6,$b1,$06,$7b,$d3,$b1,$04,$76,$00,$1e
        .db $00,$15,$08,$40,$cf,$09,$b1,$04,$5b,$03,$bf,$00,$10,$b1,$02,$73
        .db $bf,$00,$15,$5b,$d7,$b0,$76,$d4,$bf,$00,$20,$5b,$bf,$00,$15,$67
        .db $bf,$00,$10,$73,$bf,$00,$15,$b1,$04,$5b,$bf,$00,$10,$b1,$02,$67
        .db $bf,$00,$15,$5b,$d7,$b0,$76,$d4,$bf,$00,$20,$5b,$bf,$00,$15,$67
        .db $bf,$00,$10,$73,$bf,$00,$20,$b1,$04,$60,$bf,$00,$10,$b1,$02,$6c
        .db $bf,$00,$20,$60,$d7,$b0,$76,$d4,$bf,$00,$20,$54,$bf,$00,$10,$60
        .db $bf,$00,$08,$6c,$bf,$00,$20,$b1,$04,$60,$bf,$00,$10,$b1,$02,$6c
        .db $bf,$00,$20,$60,$d7,$b0,$76,$d4,$bf,$00,$20,$54,$bf,$00,$10,$60
        .db $bf,$00,$08,$6c,$00,$f0,$10,$cf,$b1,$04,$76,$d9,$43,$b1,$02,$76
        .db $76,$d8,$40,$b1,$04,$76,$d9,$43,$b1,$02,$76,$76,$d8,$40,$b1,$04
        .db $76,$d9,$43,$b1,$02,$76,$76,$d8,$40,$b1,$04,$76,$d9,$43,$b1,$02
        .db $76,$76,$d8,$40,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40,$b1
        .db $04,$76,$d9,$42,$b1,$02,$78,$78,$d8,$40,$b1,$04,$76,$d9,$42,$b1
        .db $02,$78,$78,$d8,$40,$b1,$04,$76,$d9,$42,$b1,$02,$78,$78,$00,$f0
        .db $06,$cf,$b1,$10,$7a,$d5,$b1,$06,$7b,$d3,$7a,$b1,$04,$76,$b1,$10
        .db $78,$d9,$b1,$02,$78,$7a,$7b,$7d,$7f,$82,$84,$86,$00,$f0,$0a,$cf
        .db $b1,$14,$8b,$b1,$06,$8b,$d3,$8e,$b1,$0c,$90,$b1,$01,$90,$89,$84
        .db $82,$d5,$b1,$06,$87,$d3,$89,$b1,$04,$84,$00,$f0,$06,$cf,$b1,$0c
        .db $86,$b1,$02,$87,$86,$d5,$b1,$06,$84,$d3,$82,$b1,$04,$7f,$b1,$10
        .db $84,$d9,$b1,$02,$7b,$7a,$78,$73,$6f,$6e,$6c,$6a,$00,$1f,$20,$13
        .db $0f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$01,$8f,$00,$00,$18
        .db $20,$01,$8f,$00,$00,$01,$8e,$00,$00,$01,$8d,$01,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$00
        .db $00,$18,$20,$01,$8e,$00,$00,$01,$8f,$00,$00,$01,$8e,$01,$00,$01
        .db $8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01
        .db $8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01
        .db $8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01
        .db $8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01,$8d,$02,$00,$01
        .db $8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$fe,$ff,$01
        .db $8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$01,$00,$01,$8d,$02,$00,$01
        .db $8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01,$8d,$fe,$ff,$01
        .db $8d,$ff,$ff,$1f,$20,$03,$0d,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$18,$20,$01,$8e,$13,$00,$01,$8f,$10,$00,$01
        .db $8e,$0c,$00,$01,$8d,$09,$00,$01,$8d,$07,$00,$01,$8d,$04,$00,$01
        .db $8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01
        .db $8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01
        .db $8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01,$00,$01
        .db $8d,$02,$00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01
        .db $8d,$fe,$ff,$01,$8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$01,$00,$01
        .db $8d,$02,$00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff,$ff,$01
        .db $8d,$fe,$ff,$01,$8d,$ff,$ff,$18,$20,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$01
        .db $00,$01,$8d,$02,$00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff
        .db $ff,$01,$8d,$fe,$ff,$01,$8d,$ff,$ff,$01,$8d,$00,$00,$01,$8d,$01
        .db $00,$01,$8d,$02,$00,$01,$8d,$01,$00,$01,$8d,$00,$00,$01,$8d,$ff
        .db $ff,$01,$8d,$fe,$ff,$01,$8d,$ff,$ff,$20,$21,$21,$0e,$64,$00,$11
        .db $0e,$c8,$00,$11,$0e,$2c,$01,$01,$85,$00,$00,$01,$85,$00,$00,$21
        .db $0d,$64,$00,$11,$0d,$c8,$00,$11,$0c,$2c,$01,$11,$0b,$90,$01,$11
        .db $0a,$f4,$01,$11,$09,$58,$02,$11,$08,$bc,$02,$11,$07,$20,$03,$11
        .db $06,$84,$03,$11,$05,$00,$00,$11,$03,$00,$00,$10,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$90,$00,$00,$20
        .db $21,$0f,$0e,$c8,$00,$01,$8d,$90,$01,$01,$8c,$58,$02,$01,$8a,$20
        .db $03,$01,$87,$e8,$03,$01,$83,$b0,$04,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00
        .db $00,$01,$90,$00,$00,$1f,$20,$01,$8f,$00,$00,$01,$8f,$00,$00,$01
        .db $8e,$00,$00,$01,$8d,$00,$00,$01,$8c,$00,$00,$01,$8b,$00,$00,$01
        .db $8a,$00,$00,$01,$8a,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01,$89,$00,$00,$01
        .db $89,$00,$00,$01,$89,$00,$00,$1f,$20,$01,$8f,$00,$00,$01,$8e,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00,$00,$01,$8d,$00
        .db $00,$01,$8d,$00,$00,$01,$8d,$00,$00,$00,$01,$00,$1d,$20,$00,$02
        .db $07,$00,$02,$07,$00,$02,$07,$00,$02,$07,$00,$02,$07,$00,$02,$07
        .db $00,$02,$07,$00,$02,$07,$00,$02,$07,$00,$02,$07,$00,$02,$1d,$20
        .db $00,$03,$07,$00,$03,$07,$00,$03,$07,$00,$03,$07,$00,$03,$07,$00
        .db $03,$07,$00,$03,$07,$00,$03,$07,$00,$03,$07,$00,$03,$07,$00,$03
        .db $1d,$20,$00,$04,$07,$00,$04,$07,$00,$04,$07,$00,$04,$07,$00,$04
        .db $07,$00,$04,$07,$00,$04,$07,$00,$04,$07,$00,$04,$07,$00,$04,$07
        .db $00,$04,$1a,$20,$00,$00,$00,$0c,$0c,$0c,$00,$00,$00,$0c,$0c,$0c
        .db $00,$00,$00,$0c,$0c,$0c,$00,$00,$00,$0c,$0c,$0c,$00,$00,$00,$0c
        .db $0c,$0c,$00,$00,$17,$20,$00,$00,$00,$04,$04,$04,$07,$07,$07,$00
        .db $00,$00,$04,$04,$04,$07,$07,$07,$00,$00,$00,$04,$04,$04,$07,$07
        .db $07,$00,$00,$00,$04,$04
Login or register to post comments

By anonymous

incognito ergo sum (116)

anonymous's picture

04-04-2013, 13:34

Hi, I don't know anything about assembly, but somewhere in the "library PT3" code it says

MDLADDR: .equ $ ;Place your song here.

...should there be some reference (address or filename) to the song there?

By gasparrini

Champion (329)

gasparrini's picture

04-04-2013, 14:24

Quote:

MDLADDR: .equ $ ;Place your song here. ?_?

?_?

I think that this MDLADDR: .equ $ it is not good for me.......!!
need to find a solution as soon as possible .... Thanks... (^_^)

By gasparrini

Champion (329)

gasparrini's picture

04-04-2013, 14:54

Toc..Toc.... you are Nyrikky ?? you could give me a hand? Please?

By NYYRIKKI

Enlighted (6016)

NYYRIKKI's picture

04-04-2013, 16:12

Have you ever considered making games for C64? It is a really nice platform...

By gasparrini

Champion (329)

gasparrini's picture

04-04-2013, 17:08

but just because you say that?? I thought the two of us were friends, somehow ..... at least I thought ......

For me, the C64 has always been my biggest enemy .......

The fact that I wrote simply: Toc .... Toc ... it's just a little joke ......
But I have serious intentions with our standard MSX!

force people here have to work for this new extended basic!
there many aspects.......

By PingPong

Prophet (4093)

PingPong's picture

04-04-2013, 22:02

REALLY: i cannot believe ..... there should be a limit..... oO oO oO Shocked!

By NYYRIKKI

Enlighted (6016)

NYYRIKKI's picture

04-04-2013, 22:31

Quote:

but just because you say that?? I thought the two of us were friends, somehow ..... at least I thought ......

Do you realize, that you (once again) posted >1500 lines of code, that you expect someone else to debug for you? ... and of course: "it is not good for me.......!! need to find a solution as soon as possible ...."

I'm pretty sure that there are PLENTY of people (including me), who like to help you with YOUR problems, but you need to do the basic work by your self and ask detailed questions. You just can't expect people to read >100 lines of code. It just does not work! (as you might have already noticed)

The problem is the amount of help you need compared to amount of work you are willing do your self. If you can't do any debugging your self, then you should select another hobby, go play golf or something. Not everything suits for everyone, I have a feeling that you have not understood the basics of what skills you need to become an 8bit programmer.

Quote:

For me, the C64 has always been my biggest enemy .......

If you ask me, you should not think like that... It's not 80's anymore, we are living 2013 when all the 8bit hobbyists should help each other. All of our expert groups are getting smaller, but we share the common love towards these limited computers.

After saying that, I'm sure the playful competition is always welcome. Smile

(On my previous post I did not actually mean any harm to C64 hobbyists)

By JohnHassink

Ambassador (5655)

JohnHassink's picture

04-04-2013, 22:30

♪♫ That's no good for me... ♪♫ Wink
http://www.youtube.com/watch?v=svJvT6ruolA

By wolf_

Ambassador_ (10088)

wolf_'s picture

04-04-2013, 23:22

The code at least tells me we could use a codebox tag (a size-limited frame with scrollbars). Hannibal

By ARTRAG

Enlighted (6923)

ARTRAG's picture

04-04-2013, 23:52

or just remove this kind of posts whose actual result is to spam the forum ....

Page 1/2
| 2