musicedit_sel.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 808 行 · 第 1/2 页

S01
808
字号
	NAME	musicedit_sel(17)
	RSEG	COM_MUSICEDIT_SEL(0)
	RSEG	COM_MUSICEDIT_SEL_C(0)
	RSEG	COM_MUSICEDIT_SEL_D(0)
	PUBLIC	CreateMEIniFile
	PUBLIC	CurDirBackup
	PUBLIC	DeleteAllSelSegment
	EXTERN	DisplayErrInfor
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FCreate
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FRemove
	EXTERN	FS_FWrite
	EXTERN	FS_GetCurDir
	EXTERN	FS_SetCurDir
	PUBLIC	FileDataBuff
	PUBLIC	SaveSelSegment
	PUBLIC	SetDealCommamd
	PUBLIC	sMusicEditIniFileName
	PUBLIC	sSelRootDir
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_CMP_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	EXTERN	?MEMSET_L11
	RSEG	COM_MUSICEDIT_SEL
SaveSelSegment:
; 1.	#include <MusicEdit.h>
; 2.	#include "ap_music.h"
; 3.	
; 4.	#define pMusicEditIniFile ((STRU_MusicEditIniFile*)FileDataBuff)
; 5.	
; 6.	#pragma memory=constseg(COM_MUSICEDIT_SEL_C)
; 7.	const char sMusicEditIniFileName[]="MUSICEDTINI";
; 8.	const char sSelRootDir[]=": ";
; 9.	#pragma memory=default
; 10.	
; 11.	#pragma memory=dataseg(COM_MUSICEDIT_SEL_D)
; 12.	char FileDataBuff[512];
; 13.	long CurDirBackup;
; 14.	#pragma memory=default
; 15.	
; 16.	#pragma codeseg(COM_MUSICEDIT_SEL)
; 17.	
; 18.	/****************************************************************
; 19.	*Description: save selected segment information to music edit INI file
; 20.	*Arguments:
; 21.	*            SelSeg:the segment have been saved 
; 22.	* Returns:
; 23.	*            TRUE: Successful,
; 24.	*            FALSE: Fail.
; 25.	* Notes:
; 26.	****************************************************************/
; 27.	BOOL SaveSelSegment(STRU_SelMusicSegment *SelSeg)
; 28.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	PUSH	AF
	PUSH	DE
	POP	IX
; 29.	    HANDLE temphfile;
; 30.	    uchar IMK_Reg;
; 31.	
; 32.	    IMK_Reg=input8(0x27);
	IN	A,(39)
	LD	HL,0
	ADD	HL,SP
; 33.	    output8(0x27,0);
; 34.	    
; 35.	    CurDirBackup=FS_GetCurDir();
	CALL	LWRD ?0032
; 36.	    FS_CD(sSelRootDir);
; 37.	
; 38.	    temphfile=FS_FOpen(sMusicEditIniFileName,FS_OPEN_NORMAL);
; 39.	    if(temphfile==NULL)
	JR	NZ,?0003
?0002:
; 40.	    {
; 41.	            FS_SetCurDir(CurDirBackup);
	CALL	LWRD ?0033
; 42.	              FS_FClose(temphfile);
; 43.	        output8(0x27,IMK_Reg);
	ADD	HL,SP
; 44.	        DisplayErrInfor(NOSLFILE);
	CALL	LWRD ?0034
; 45.	        return FALSE;
	LD	L,0
; 46.	    }
	JP	LWRD ?0012
?0003:
; 47.	
; 48.	    FS_FRead(FileDataBuff,1,temphfile);
	PUSH	IY
	CALL	LWRD ?0035
	POP	HL
; 49.	
; 50.	        if((pMusicEditIniFile->CurSelSegmemtNO>=MUSICEDIT_MAXSELSEG)||(pMusicEditIniFile->SelSegmemtCount>MUSICEDIT_MAXSELSEG))
	LD	HL,(FileDataBuff+6)
	LD	BC,32780
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0006
	LD	BC,(FileDataBuff+4)
	LD	HL,12
	CALL	LWRD ?SS_CMP_L02
	JR	NC,?0005
?0006:
?0007:
?0004:
; 51.	        {
; 52.	        pMusicEditIniFile->CurSelSegmemtNO=0;
	LD	HL,0
	LD	(FileDataBuff+6),HL
; 53.	                pMusicEditIniFile->SelSegmemtCount=0;
	LD	(FileDataBuff+4),HL
?0005:
; 54.	        }
; 55.	        
; 56.	    pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].StartSec=SelSeg->StartSec;
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,FileDataBuff
	ADD	HL,BC
	LD	BC,57
	ADD	HL,BC
	PUSH	HL
	PUSH	IX
	POP	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	POP	HL
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 57.	    pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].EndSec=SelSeg->EndSec;
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,FileDataBuff
	ADD	HL,BC
	LD	BC,61
	ADD	HL,BC
	LD	C,(IX+6)
	LD	B,(IX+7)
	LD	E,(IX+4)
	LD	(HL),E
	LD	D,(IX+5)
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 58.	    pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].bSelected=TRUE;
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,FileDataBuff
	ADD	HL,BC
	LD	BC,71
	ADD	HL,BC
	LD	(HL),1
; 59.	    pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].Disk=SelSeg->location->disk;
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,FileDataBuff
	ADD	HL,BC
	LD	BC,40
	ADD	HL,BC
	PUSH	HL
	LD	L,(IX+8)
	LD	H,(IX+9)
	LD	B,(HL)
	POP	HL
	LD	(HL),B
; 60.	    pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].ClusterNo=SelSeg->location->ClusterNo;
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,FileDataBuff
	ADD	HL,BC
	LD	BC,41
	ADD	HL,BC
	PUSH	HL
	LD	L,(IX+8)
	LD	H,(IX+9)
	LD	C,9
	ADD	HL,BC
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	POP	HL
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 61.	    memcpy(&(pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].FileName),SelSeg->location->filename,12);
	LD	BC,12
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	DE,FileDataBuff
	ADD	HL,DE
	LD	DE,45
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX+8)
	LD	H,(IX+9)
	LD	C,26
	ADD	HL,BC
	LD	C,12
	LDIR
; 62.	    memcpy(&(pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].StartTime),SelSeg->StartTime,sizeof(time_t));
	LD	C,3
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	DE,FileDataBuff
	ADD	HL,DE
	LD	DE,65
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX+10)
	LD	H,(IX+11)
	LDIR
; 63.	    memcpy(&(pMusicEditIniFile->SelMusicEditSeg[pMusicEditIniFile->CurSelSegmemtNO].EndTime),SelSeg->EndTime,sizeof(time_t));
	LD	C,3
	LD	HL,(FileDataBuff+6)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	DE,FileDataBuff
	ADD	HL,DE
	LD	DE,68
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX+12)
	LD	H,(IX+13)
	LDIR
; 64.	
; 65.	    (pMusicEditIniFile->CurSelSegmemtNO)++;   
	LD	HL,(FileDataBuff+6)
	INC	HL
	LD	(FileDataBuff+6),HL
; 66.	    if(pMusicEditIniFile->CurSelSegmemtNO>=MUSICEDIT_MAXSELSEG)
	LD	HL,(FileDataBuff+6)
	LD	BC,32780
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0009
?0008:
; 67.	        pMusicEditIniFile->CurSelSegmemtNO=0;
	LD	HL,0
	LD	(FileDataBuff+6),HL
?0009:
; 68.	    
; 69.	    if(pMusicEditIniFile->SelSegmemtCount<MUSICEDIT_MAXSELSEG)
	LD	HL,(FileDataBuff+4)
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0011
?0010:
; 70.	        (pMusicEditIniFile->SelSegmemtCount)++;
	LD	HL,(FileDataBuff+4)
	INC	HL
	LD	(FileDataBuff+4),HL
?0011:
; 71.	    
; 72.	    FS_FWrite(FileDataBuff,1,temphfile);
	PUSH	IY
	LD	C,1
	LD	DE,FileDataBuff
	CALL	LWRD FS_FWrite
	POP	HL
; 73.	    FS_FClose(temphfile);
	CALL	LWRD ?0036
; 74.	    
; 75.	    FS_SetCurDir(CurDirBackup);
; 76.	
; 77.	    output8(0x27,IMK_Reg);
	ADD	HL,SP
	LD	A,(HL)
	OUT	(39),A
; 78.	      
; 79.	    return TRUE;
	LD	L,1
; 80.	}
?0012:
	POP	AF
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0032:
	LD	(HL),A
	XOR	A
	OUT	(39),A
	CALL	LWRD FS_GetCurDir
	LD	(CurDirBackup),HL
	LD	(CurDirBackup+2),BC
	LD	DE,sSelRootDir
	CALL	LWRD FS_CD
	LD	C,0
	LD	DE,sMusicEditIniFileName
	CALL	LWRD FS_FOpen
	PUSH	HL
	POP	IY
	LD	A,L
	OR	H
	RET
?0033:
	LD	BC,(CurDirBackup+2)
	LD	DE,(CurDirBackup)
	CALL	LWRD FS_SetCurDir
	PUSH	IY
	POP	DE
	CALL	LWRD FS_FClose
	LD	HL,0
	RET
?0034:
	LD	A,(HL)
	OUT	(39),A
	LD	DE,398
	LD	A,BYTE3 DisplayErrInfor
	LD	HL,LWRD DisplayErrInfor
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0035:
	LD	C,1
	LD	DE,FileDataBuff
	JP	LWRD FS_FRead
?0036:
	PUSH	IY
	POP	DE
	CALL	LWRD FS_FClose
	LD	BC,(CurDirBackup+2)
	LD	DE,(CurDirBackup)
	CALL	LWRD FS_SetCurDir
	LD	HL,0
	RET
SetDealCommamd:
; 81.	
; 82.	/****************************************************************
; 83.	*Description: save the current edit file information and command
; 84.	*Arguments:
; 85.	*              CurSeg:current edit file 
; 86.	*              Cmd:command
; 87.	*              CmdPara:command parameter
; 88.	* Returns:
; 89.	*            TRUE: Successful,
; 90.	*            FALSE: Fail.
; 91.	* Notes:
; 92.	****************************************************************/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?