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

📄 keyboard.lis

📁 用ST92163开发的鼠标
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 1103              	
 1104              		.globl P1DR
 1105              		.desc	P1DR, 8bit register
 1106              	P1DR=	225
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 25


 1107              	
 1108              		.globl P6DR
 1109              		.desc	P6DR, 8bit register
 1110              	P6DR=	251
 1111              	
 1112              		.globl P5DR
 1113              		.desc	P5DR, 8bit register
 1114              	P5DR=	229
 1116              	
 1117              		.globl cols_poll
 1118              	
 1119              		.desc	cols_poll, near
 1120              		.proc	cols_poll
 1121              	cols_poll:
 348:../src/keyboard.c **** 
 349:../src/keyboard.c **** void cols_poll( void)
 350:../src/keyboard.c **** {
 1123 011b 74D8     		pushw	rr8
 1124              	.LMM53:
 351:../src/keyboard.c **** 	BYTE	bit ;
 1126              	.LBB4:
 1127              	.LMM54:
 352:../src/keyboard.c **** 	BYTE	col = 0 ;
 353:../src/keyboard.c **** 
 354:../src/keyboard.c **** 	/* Poll Row0 */
 355:../src/keyboard.c **** 	P3DR = 0x7F ;
 1129 011d F5E37F   		ld  	@P3DR,#127
 1130              	.LMM55:
 356:../src/keyboard.c **** 	cols[ col] = get_key() ;
 1132 0120 D200EE   		call 	@get_key   
 1133 0123 C5F10008 		ld  	dpr:pof(@cols),r1
 1134              	.LMM56:
 357:../src/keyboard.c **** 	col += 1 ;
 358:../src/keyboard.c **** 	P3DR = 0xFF ;
 1136 0127 8CFF     		ld  	r8,#255
 1137 0129 89E3     		ld  	@P3DR,r8
 1138              	.LMM57:
 359:../src/keyboard.c **** 	
 360:../src/keyboard.c **** 	/* Poll Row1 */
 361:../src/keyboard.c **** 	P1DR = 0x40 ;
 1140 012b F5E140   		ld  	@P1DR,#64
 1141              	.LMM58:
 362:../src/keyboard.c **** 	cols[ col] = get_key() ;
 1143 012e D200EE   		call 	@get_key   
 1144 0131 C5F10009 		ld  	dpr:pof(@cols+1),r1
 1145              	.LMM59:
 363:../src/keyboard.c **** 	col += 1 ;
 1147 0135 9C02     		ld  	r9,#2
 1148              	.LMM60:
 364:../src/keyboard.c **** 	P1DR = 0xFF ;
 1150 0137 89E1     		ld  	@P1DR,r8
 1151              	.LMM61:
 365:../src/keyboard.c **** 	
 366:../src/keyboard.c **** 	/* Poll Row2-7 */
 367:../src/keyboard.c **** 	spp( P6C_PG) ;
 1153              	; #APP
 1154 0139 C70E     		spp #3
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 26


 1155              	; #NO_APP
 1156              	.LMM62:
 368:../src/keyboard.c **** 	for( bit = 0x20 ; bit ; bit >>= 1)
 1158 013b 8C20     		ld  	r8,#32
 1159              	.L42:
 1160              	.LMM63:
 369:../src/keyboard.c **** 	{
 370:../src/keyboard.c **** 		P6DR = ~bit ;
 1162 013d 08D8     		ld  	r0,r8
 1163 013f 80D0     		cpl 	r0
 1164 0141 09FB     		ld  	@P6DR,r0
 1165              	.LMM64:
 371:../src/keyboard.c **** 		cols[ col] = get_key() ;
 1167 0143 D200EE   		call 	@get_key   
 1168 0146 38D9     		ld   	r3,r9
 1169 0148 2C00     		ld   	r2,#0
 1170 014a 26F20008 		ld  	dpr:pof(@cols)(rr2),r1
 1170      D1
 1171              	.LMM65:
 372:../src/keyboard.c **** 		col += 1 ;
 1173 014f 50D9     		inc  	r9
 1174              	.LMM66:
 1176 0151 11       		rcf  
 1177 0152 D0D8     		rrc  	r8
 1178 0154 EBE7     		jxnz 	.L42
 1179              	.LMM67:
 373:../src/keyboard.c **** 	}
 374:../src/keyboard.c **** 
 375:../src/keyboard.c **** 	P6DR = 0xFF ;
 1181 0156 F5FBFF   		ld  	@P6DR,#-1
 1182              	.LMM68:
 376:../src/keyboard.c **** 
 377:../src/keyboard.c **** 	/* Poll Row8-14 */
 378:../src/keyboard.c **** 	for( bit = 1 ; bit < 0x80 ; bit <<= 1)
 1184 0159 8C01     		ld  	r8,#1
 1185              	.L47:
 1186              	.LMM69:
 379:../src/keyboard.c **** 	{
 380:../src/keyboard.c **** 		P5DR = ~bit ;
 1188 015b 08D8     		ld  	r0,r8
 1189 015d 80D0     		cpl 	r0
 1190 015f 09E5     		ld  	@P5DR,r0
 1191              	.LMM70:
 381:../src/keyboard.c **** 		cols[ col] = get_key() ;
 1193 0161 D200EE   		call 	@get_key   
 1194 0164 38D9     		ld   	r3,r9
 1195 0166 2C00     		ld   	r2,#0
 1196 0168 26F20008 		ld  	dpr:pof(@cols)(rr2),r1
 1196      D1
 1197              	.LMM71:
 382:../src/keyboard.c **** 		col += 1 ;
 1199 016d 50D9     		inc  	r9
 1200              	.LMM72:
 1202 016f 4288     		add  	r8,r8
 1203 0171 95D87F   		cp   	r8,#127
 1204 0174 3BE5     		jxule	.L47
 1205              	.LMM73:
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 27


 383:../src/keyboard.c **** 	}
 384:../src/keyboard.c **** 
 385:../src/keyboard.c **** 	P5DR = 0xFF ;
 1207 0176 8CFF     		ld  	r8,#255
 1208 0178 89E5     		ld  	@P5DR,r8
 1209              	.LMM74:
 386:../src/keyboard.c **** 
 387:../src/keyboard.c **** //	if( !configuration_status[ 3])	/* Joystick is not active */
 388:../src/keyboard.c **** //	{
 389:../src/keyboard.c **** //		P5DR = 0x7F ;
 390:../src/keyboard.c **** //		cols[ col] = get_key() ;
 391:../src/keyboard.c **** //		P5DR = 0xFF ;
 392:../src/keyboard.c **** //	}
 393:../src/keyboard.c **** 
 394:../src/keyboard.c **** /* Row 15: Joystick buttons */
 395:../src/keyboard.c **** 	P5DR = 0x7F ;
 1211 017a F5E57F   		ld  	@P5DR,#127
 1212              	.LMM75:
 396:../src/keyboard.c **** 	cols[ col] = get_key() ;
 1214 017d D200EE   		call 	@get_key   
 1215 0180 38D9     		ld   	r3,r9
 1216 0182 2C00     		ld   	r2,#0
 1217 0184 26F20008 		ld  	dpr:pof(@cols)(rr2),r1
 1217      D1
 1218              	.LMM76:
 397:../src/keyboard.c **** 	P5DR = 0xFF ;
 1220 0189 89E5     		ld  	@P5DR,r8
 1221              	.LMM77:
 398:../src/keyboard.c **** }
 1223              	.LBE4:
 1224 018b 75D8     		popw 	rr8
 1225 018d 46       		ret 
 1226              		.endproc
 1231              	.Lscope4:
 1234              	
 1235              		.desc	check_ghost, near
 1236              		.proc	check_ghost
 1237              	check_ghost:
 399:../src/keyboard.c **** 
 400:../src/keyboard.c **** BYTE	ghost_f ;
 401:../src/keyboard.c **** 
 402:../src/keyboard.c **** static BYTE check_ghost( void)
 403:../src/keyboard.c **** {
 1239 018e 66DA     		push 	r10
 1240 0190 74D8     		pushw	rr8
 1241              	.LMM79:
 404:../src/keyboard.c **** 	BYTE i, j, t ;
 1243              	.LBB5:
 1244              	.LMM80:
 405:../src/keyboard.c **** 
 406:../src/keyboard.c **** 	for( i = 0 ; i < 15 ; i++)
 1246 0192 90D5     		clr 	r5
 1247 0194 BFD80008 		ldw  	rr8,#dpr:pof(@cols)
 1248              	.L53:
 1249              	.LMM81:
 407:../src/keyboard.c **** 	{
 408:../src/keyboard.c **** 		for( j = i + 1 ; j < 16 ; j++)
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 28


 1251 0198 48D5     		ld  	r4,r5
 1252 019a 50D4     		inc  	r4
 1253 019c 95D40F   		cp   	r4,#15
 1254 019f BB35     		jxugt	.L52
 1255 01a1 78D5     		ld   	r7,r5
 1256 01a3 6C00     		ld   	r6,#0
 1257              	.L57:
 1258              	.LMM82:
 409:../src/keyboard.c **** 		{
 410:../src/keyboard.c **** 			if( cols[ i] & cols[ j])	/* At least one bit in common */
 1260 01a5 18D4     		ld   	r1,r4
 1261 01a7 0C00     		ld   	r0,#0
 1262 01a9 6078FA   		ld  	r10,rr6(rr8)
 1263 01ac 6018AA   		tm   	r10,rr0(rr8)
 1264 01af 6B1E     		jxz  	.L56
 1265              	.LMM83:
 411:../src/keyboard.c **** 			{
 412:../src/keyboard.c **** 				t = cols[ i] | cols[ j] ;	/* Ghost key effect */
 1267 01b1 6078FA   		ld  	r10,rr6(rr8)
 1268 01b4 60180A   		or 	r10,rr0(rr8)
 1269 01b7 08DA     		ld  	r0,r10
 1270              	.LMM84:
 413:../src/keyboard.c **** 				if( t & ~( t & -t))		/* Check at least 2 bits */
 1272 01b9 18D0     		ld   	r1,r0
 1273 01bb 0C00     		ld   	r0,#0
 1274 01bd 6E22     		xorw 	rr2,rr2
 1275 01bf 5E20     		subw 	rr2,rr0
 1276 01c1 1E20     		andw 	rr2,rr0
 1277 01c3 67D3FFFF 		xorw 	rr2,#-1
 1278 01c7 AE02     		tmw  	rr0,rr2
 1279 01c9 6B04     		jxz  	.L56
 1280              	.LMM85:
 414:../src/keyboard.c **** 					return 1 ;
 1282 01cb 1C01     		ld  	r1,#1
 1283 01cd 8B10     		jxt  	.L62
 1284              	.LMM86:
 1286              	.L56:
 1287 01cf 50D4     		inc  	r4
 1288 01d1 95D40F   		cp   	r4,#15
 1289 01d4 3BCF     		jxule	.L57
 1290              	.LMM87:
 1292              	.L52:
 1293 01d6 50D5     		inc  	r5
 1294 01d8 95D50E   		cp   	r5,#14
 1295 01db 3BBB     		jxule	.L53
 1296              	.LMM88:
 415:../src/keyboard.c **** 			}
 416:../src/keyboard.c **** 		}
 417:../src/keyboard.c **** 	}
 418:../src/keyboard.c **** 
 419:../src/keyboard.c **** 	return 0 ;
 1298 01dd 90D1     		clr 	r1
 1299              	.L62:
 1300              	.LMM89:
 420:../src/keyboard.c **** #if 0		
 421:../src/keyboard.c **** 		j = cols[ i] ;
 422:../src/keyboard.c **** 		if( j & ~( j & -j))	/* if at least 2 bits are set */
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 29


 423:../src/keyboard.c **** 		{
 424:../src/keyboard.c **** 			BYTE	sum ;
 425:../src/keyboard.c **** 
 426:../src/keyboard.c **** 			sum = 0 ;		
 427:../src/keyboard.c **** 			for( j = i + 1 ; j < 16 ; j++)
 428:../src/keyboard.c **** 			{
 429:../src/keyboard.c **** //				if( i != j)
 430:../src/keyboard.c **** //					sum |= cols[ j] ;
 431:../src/keyboard.c **** //			}
 432:../src/keyboard.c **** 		
 433:../src/keyboard.c **** 				if( cols[ i] & cols[ j])
 434:../src/keyboard.c **** 				{
 435:../src/keyboard.c **** 					return 1 ;
 436:../src/keyboard.c **** 				}
 437:../src/keyboard.c **** 			}
 438:../src/keyboard.c **** 		}
 439:../src/keyboard.c **** 	}
 440:../src/keyboard.c **** 	
 441:../src/keyboard.c **** 	return 0 ;
 442:../src/keyboard.c **** #endif
 443:../src/keyboard.c **** }
 1302              	.LBE5:
 1303 01df 75D8     		popw 	rr8
 1304 01e1 76DA     		pop  	r10
 1305 01e3 46       		ret 
 1306              		.endproc
 1312              	.Lscope5:
 1315              	
 1316              		.globl kbd_poll
 1317              	
 1318              		.desc	kbd_poll, near
 1319              		.proc	kbd_poll
 1320              	kbd_poll:
 444:../src/keyboard.c **** 
 445:../src/keyboard.c **** void kbd_poll( void)
 446:../src/keyboard.c **** {
 1322 01e4 74DA     		pushw	rr10
 1323 01e6 66D8     		push 	r8
 1324              	.LMM91:
 447:../src/keyboard.c **** 	BYTE	col ;
 1326              	.LBB6:
 1327              	.LMM92:
 448:../src/keyboard.c **** 
 449:../src/keyboard.c **** 	cols_poll() ;
 1329 01e8 D2011B   		call 	@cols_poll  
 1330              	.LMM93:
 450:../src/keyboard.c **** 	ghost_f = check_ghost() ;
 1332 01eb D2018E   		call 	@check_ghost   
 1333 01ee C5F10000 		ld  	dpr:pof(@ghost_f),r1
 1334              	.LMM94:
 451:../src/keyboard.c **** 	if( ghost_f)
 1336 01f2 0211     		or 	r1,r1
 1337 01f4 6B06     		jxz  	.L64
 1338              	.LMM95:
 452:../src/keyboard.c **** 	{
 453:../src/keyboard.c **** 		kbd_rollover() ;
 1340 01f6 D20000   		call 	@kbd_rollover  
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s 			page 30


 1341              	.LMM96:
 454:../src/keyboard.c **** 	}
 1343 01f9 8D02A0   		jxt  	.L65
 1344              	.L64:
 1345              	.LMM97:
 455:../src/keyboard.c **** 	else
 456:../src/keyboard.c **** 	{
 457:../src/keyboard.c **** 		kbd_idx = 2 ;	/* Index for insertion in Buffer */
 1347 01fc 2FF10200 		ld  	dpr:pof(@kbd_idx),#2
 1347      00
 1348              	.LMM98:
 458:../src/keyboard.c **** 		kbd_Buffer[ 0] = kbd_Buffer[ 1] = 0 ;
 1350 0201 90D0     		clr 	r0
 1351 0203 C5F00001 		ld  	dpr:pof(@kbd_Buffer+1),r0
 1352 0207 C5F00000 		ld  	dpr:pof(@kbd_Buffer),r0
 1353              	.LMM99:
 459:../src/keyboard.c **** 		for( col = 0 ; col < 15 ; col++)
 1355 020b 88D0     		ld  	r8,r0
 1356 020d BFDA0008 		ldw  	rr10,#dpr:pof(@cols)
 1357              	.L69:
 1358              	.LMM100:
 460:../src/keyboard.c **** 		{
 461:../src/keyboard.c **** 			if( cols[ col] != 0)
 1360 0211 18D8     		ld   	r1,r8
 1361 0213 0C00     		ld   	r0,#0
 1362 0215 601AF5   		ld  	r5,rr0(rr10)
 1363 0218 0255     		or 	r5,r5
 1364 021a 6B07     		jxz  	.L68
 1365              	.LMM101:
 462:../src/keyboard.c **** 				do_col( col, cols[ col]) ;
 1367 021c 18D5     		ld  	r1,r5
 1368 021e 08D8     		ld  	r0,r8
 1369 0220 D2003F   		call 	@do_col  
 1370              	.LMM102:
 1372              	.L68:
 1373 0223 50D8     		inc  	r8
 1374 0225 95D80E   		cp   	r8,#14
 1375 0228 3BE7     		jxule	.L69
 1376              	.LMM103:
 463:../src/keyboard.c **** 		}
 464:../src/keyboard.c **** 
 465:../src/keyboard.c **** 		if( configuration_status[ 3])	/* Joystick is active */
 1378 022a 2F910000 		cp 	dpr:pof(@configuration_status+3),#0
 1378      03
 1379 022f 6B0A     		jxz  	.L72
 1380              	.LMM104:
 466:../src/keyboard.c **** 		{
 467:../src/keyboard.c **** 			extern

⌨️ 快捷键说明

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