⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 midiplay.lst

📁 midi file with midi play.it can run in the computer
💻 LST
📖 第 1 页 / 共 5 页
字号:
00008EC3 C3 92       <      		r1 =	[r3]			//get key_code
                     <      	
00008EC4 12 95 C8 00 <      		r2 = [KeyQueueBufPtr]
00008EC6 0A C5 00 08 <      		test    r2,0x0800
00008EC8 19 4E       <      		jnz	?L_ReStartScanKey	//KeyQueueBuf is full
                     <      	?L_KeyBufNotFull:
00008EC9 7A 95       <      		r2 =	r2 lsr 4
00008ECA 47 B4       <      		r2&=	0x0007			//write pointer
00008ECB 62 97       <      		r3 =	r2 lsr 1
00008ECC 0B 07 C9 00 <      		r3+=	KeyQueueBuf
00008ECE C3 98       <      		r4 =	[r3]
00008ECF 41 C4       <      		test    r2,0x0001
00008ED0 05 5E       <      		jz      ?L_SaveKeyLowByte
00008ED1 0C B9 FF 00 <      		r4&=	0x00FF
00008ED3 59 93       <      		r1 =	r1 LSL 4
00008ED4 59 93       <      		r1 =	r1 LSL 4
00008ED5 02 EE       <      		jmp     ?L_KeyValueIsOk
                     <      	?L_SaveKeyLowByte:
00008ED6 0C B9 00 FF <      		r4&=	0xFF00
                     <      	?L_KeyValueIsOk:
00008ED8 04 A3       <      		r1|=	r4
00008ED9 C3 D2       <      		[r3]	= r1			//store key
00008EDA 11 93 C8 00 <      		r1 =	[KeyQueueBufPtr]
00008EDC 09 03 10 01 <      		r1+=	0x0110			//increase writer pointer & size
00008EDE 09 B3 7F FF <      		r1&=	0xFF7F
00008EE0 19 D3 C8 00 <      		[KeyQueueBufPtr] = r1
                     <      	?L_ReStartScanKey:
00008EE2 40 F0 25 8F <      		call    F_ClrKeyStatusBuf
00008EE4 40 92       <      		r1 = S_ReadKeyBeforeBounce	//initialize KeyScanFlag
00008EE5 19 D3 C2 00 <      		[KeyScanFlag] = r1		//scan from R-option line
00008EE7 09 93 8C 8E <      		r1 =	TW_ScanLine
00008EE9 C1 92       <      		r1 =	[r1]
00008EEA 40 F1       <      		int	off
00008EEB 12 95 06 70 <      		r2 =	[P_IOB_Buf]
00008EED 0A B5 E0 00 <      		r2&=	0x00E0
00008EEF 01 A5       <      		r2|=	r1
00008EF0 1A D5 05 70 <      		[P_IOB_Data] = r2		//Set scan line
00008EF2 43 F1       <      		int	fiq,irq
00008EF3 90 9A       <      		retf
                     <      	//-------------------------------------------------------------------------------
                     <      	TB_KeyNumber:
00008EF4 05 00       <      		.DW    5
00008EF5 0A 00       <      		.DW    10
00008EF6 0F 00       <      		.DW    15
00008EF7 14 00       <      		.DW    20
00008EF8 19 00       <      		.DW    25
                     <      	//-------------------------------------------------------------------------------
                     <      	TB_KeyCode:
00008EF9 01 00 02 00 <      	         .DW      C_One,      C_Two,   C_Three, C_Redial, C_Check;
         03 00 20 00
         32 00      
00008EFE 04 00 05 00 <      	         .DW      C_Four,     C_Five,  C_Six,   C_Pause,  C_Vip;   
         06 00 0D 00
         2C 00      
00008F03 07 00 08 00 <      	         .DW      C_Seven,    C_Eight, C_Nine,  C_Store,  C_Hold;  
         09 00 21 00
         28 00      
00008F08 0B 00 0A 00 <      	         .DW      C_Star,     C_Zero,  C_Pound, C_Flash,  C_Review;
         0C 00 1F 00
         27 00      
00008F0D 29 00 23 00 <      	         .DW      C_HandFree, C_Up,    C_Down,  C_Delete, C_Dummy;
         24 00 2A 00
         00 00      
                     <      	//-------------------------------------------------------------------------------
                     <      	//                  IOB0      IOB1     IOB2       IOB3       IOB4     
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//        IOA0  |    1     |   2    |   3    |Redial/Auto| Check     |
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//        IOA1  |    4     |   5    |   6    |Pause/Inhib|  VIP      |
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//        IOA2  |    7     |   8    |   9    |   Store   |Hold       |
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//        IOA3  | * / P->T |   0    |   #    |Flash/Clear|Review/Next|
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//        IOA4  | HandFree |   Up   |  Down  |   Delete  |   Dummy   |
                     <      	//              +----------+--------+--------+-----------+-----------+
                     <      	//
                     <      	//-------------------------------------------------------------------------------
                     <      	F_StartKeyScan:				//initialize key scan
00008F12 40 92       <      		r1 = 0				//clear KeyStatusBuf
00008F13 19 D3 C8 00 <      		[KeyQueueBufPtr] = r1	//clear KeyQueueBufPtr
00008F15 40 F0 25 8F <      		call    F_ClrKeyStatusBuf
00008F17 40 92       <      		r1 = S_ReadKeyBeforeBounce	//initialize KeyScanFlag
00008F18 19 D3 C2 00 <      		[KeyScanFlag] = r1		//scan from R-option line
00008F1A 09 93 8C 8E <      		r1 =	TW_ScanLine
00008F1C C1 92       <      		r1 =	[r1]
00008F1D 12 95 06 70 <      		r2 =	[P_IOB_Buf]
00008F1F 0A B5 E0 00 <      		r2&=	0x00E0
00008F21 01 A5       <      		r2|=	r1
00008F22 1A D5 05 70 <      		[P_IOB_Data] = r2		//Set scan line
00008F24 90 9A       <      		retf
                     <      	//-------------------------------------------------------------------------------
                     <      	F_ClrKeyStatusBuf:
00008F25 0D 9B C3 00 <      		bp =	KeyStatusBuf
00008F27 09 93 FF 00 <      		r1 =	0x00FF
                     <      	?L_ClrBufLoop:
00008F29 C5 94       <      		r2 =	[bp]
00008F2A 01 B5       <      		r2&=	r1
00008F2B D5 D4       <      		[bp++]	= r2
00008F2C 0D 4B C8 00 <      		cmp	bp,KeyStatusBuf+5
00008F2E 46 0E       <      		jb	?L_ClrBufLoop
00008F2F 90 9A       <      		retf
                     <      	//-----------------------------------------------------------------------
                     <      	//Key code constants
                     <      	.const   C_Dummy           =0x0000;
                     <      	.const   C_One             =0x0001;
                     <      	.const   C_Two             =0x0002;
                     <      	.const   C_Three           =0x0003;
                     <      	.const   C_Four            =0x0004;
                     <      	.const   C_Five            =0x0005;
                     <      	.const   C_Six             =0x0006;
                     <      	.const   C_Seven           =0x0007;
                     <      	.const   C_Eight           =0x0008;
                     <      	.const   C_Nine            =0x0009;
                     <      	.const   C_Zero            =0x000A;
                     <      	.const   C_Star            =0x000B;
                     <      	.const   C_Pound           =0x000C;
                     <      	
                     <      	.const   C_Pause           =0x000D;
                     <      	.const   C_Flash           =0x001F;
                     <      	
                     <      	.const   C_Redial          =0x0020;
                     <      	.const   C_Store           =0x0021;
                     <      	.const   C_Up              =0x0023;
                     <      	.const   C_Down            =0x0024;
                     <      	.const   C_Recall          =0x0026;
                     <      	.const   C_Review          =0x0027;
                     <      	.const   C_Hold            =0x0028;
                     <      	.const   C_HandFree        =0x0029;
                     <      	.const   C_Delete          =0x002A;
                     <      	.const   C_Vip             =0x002C;
                     <      	.const   C_Check           =0x0032;
                     <      	//-----------------------------------------------------------------------
                            	//----------------------------------------------------------------------------------------
                            	
                            	//----------------------------------------------------------------------------------------
                            	.const			C_SongTotal		= 8
                            	.const			C_TopVolume		= 0x0003
                            	.const			C_KeyVolumeUp		= C_Delete
                            	.const			C_KeyVolumeDown		= C_Dummy
                            	//----------------------------------------------------------------------------------------
                            	//----------------------------------------------------------------------------------------
00008F30                    	.Code
                            	//----------------------------------------------------------------------------------------
                            	
                            	.public _main;
                            	.public _FIQ;
                            	.public _IRQ0;
                            	.public _IRQ1;
                            	.public _IRQ2;
                            	.public _IRQ3;
                            	.public _IRQ4;
                            	.public _IRQ5;
                            	.public _IRQ6;
                            	.public _IRQ7;
                            	.public _BREAK;
                            	
                            	
                            	_main:
00008F30 40 F1              		int	off
00008F31 09 93 AA 55        		r1 =	0x55aa
00008F33 19 D3 16 70        		[P_Watchdog_Clr] = r1			//Reset watchdog
                            	
00008F35 08 91 FF 05        		sp =	StackBottom			//Initialize stack
                            	
00008F37 09 93 1C 80        		r1 =	B_128Hz+B_512Hz+B_Enable32768
00008F39 19 D3 18 70        		[P_TimeBaseSet] = r1			//Initialize timebase for key scan
                            	
00008F3B 40 92              		r1 =	0x0000
00008F3C 19 D3 02 70        		[P_IOA_Dir] = r1			//Set IOA as input port
                            	
00008F3E 5F 92              		r1 =	0x001f
00008F3F 19 D3 07 70        		[P_IOB_Dir] = r1			//Set IOB0~IOB4 as output ports
                            							//    IOB5~IOB7 as input ports
00008F41 09 93 00 1F        		r1 =	0x1f00
00008F43 19 D3 03 70        		[P_IOA_PullR] = r1			//Enable the pull-up resistor for IOA0~IOA4
                            	
00008F45 60 92              		r1 =	B_512HzInt
00008F46 19 D3 10 70        		[P_Int] = r1
                            	
00008F48 43 F1              		int	fiq,irq
                            	
00008F49 40 F0 12 8F        		call	F_StartKeyScan			//Start key scan
                            	
00008F4B 42 92              		r1 =	0x0002
00008F4C 19 D3 C1 00        		[Volume] = r1
00008F4E 41 92              		r1 =	0x0001
00008F4F 19 D3 C0 00        		[SongIndex] = r1
00008F51 19 D3 BF 00        	     	[PhoneMode] = r1
                            	     	
00008F53 69 92              	     	R1 = 	C_HandFree;			// Play the first song after CPU Power-on
00008F54 40 F0 9F 8F        	     	CALL	F_ModeSelectKeyDeal;
                            	//----------------------------------------------------------------------------------------	 
                            	?L_MainLoop:
00008F56 09 93 AA 55        		r1 =	0x55aa
00008F58 19 D3 16 70        		[P_Watchdog_Clr] = r1
00008F5A 40 F0 32 8E        		call	F_KeyScan
00008F5C 40 F0 7A 8F        		call	F_KeyDeal
00008F5E 40 F0 61 8F        		call	F_PlayMidi
00008F60 4B EE              		jmp	?L_MainLoop
                            	//----------------------------------------------------------------------------------------
                            	F_PlayMidi:
00008F61 11 93 BF 00        		r1 =	[PhoneMode]
00008F63 09 C3 00 80        		test	r1,Flag_PlayMidi
00008F65 13 5E              		jz	?L_PlayMidiOver
                            	
00008F66 40 F0 F2 8C        		call	F_SACM_MS02_ServiceLoop
00008F68 40 F0 F0 8C        		call	F_SACM_MS02_Status
00008F6A 41 C2              		test	r1, 0x0001			//Is song over?
00008F6B 0D 4E              		jnz	?L_PlayMidiOver			//No, function return
                            	
00008F6C 40 F0 19 90        		call    F_StopPlay			//Yes, stop play
                            	
00008F6E 09 93 00 00        		r1 =	C_ModeSelectMode		//Set select mode for key deal
00008F70 09 B3 01 00        		r1&=	C_ModeRelatedBits
00008F72 12 95 BF 00        		r2=	[PhoneMode]
00008F74 0A B5 FE FF        		r2&=	0xffff-C_ModeRelatedBits
00008F76 01 A5              		r2|=	r1
00008F77 1A D5 BF 00        		[PhoneMode] = r2
                            	
                            	?L_PlayMidiOver:
00008F79 90 9A              		retf
                            	
                            	
                            	//----------------------------------------------------------------------------------------
                            	F_KeyDeal:
00008F7A 12 95 C8 00        		R2 =	[KeyQueueBufPtr]
00008F7C 0A C5 00 0F        		test	r2,0x0f00		//Check if have key in key buffer

⌨️ 快捷键说明

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