1000 ; LISTING 2 PMCURSOR.SRC›1010 ; PLAYER CURSOR BY JERRY WHITE›1020 ; AND CARLOS REYES›1030 ;›1040 ;System Equates›1050 ;›1060 ROWCRS=$54›1070 COLCRS=$55›1080 DINDEX=$57›1090 FR0=$D4›1100 SRTIMR=$22B›1110 SDMCTL=$22F›1120 GPRIOR=$26F›1130 TXTROW=$290›1140 TXTCOL=$291›1150 TINDEX=$293›1160 BOTSCR=$2BF›1170 PCOLR2=$2C2›1180 CRSINH=$2F0›1190 HPOSP2=$D002›1200 SIZEP2=$D00A›1210 COLPM2=$D014›1220 GRACTL=$D01D›1230 PRIOR=$D01B›1240 DMACTL=$D400›1250 PMBASE=$D407›1260 SETVBV=$E45C›1270 XITVBV=$E462›1280 ;›1290 ;Program Equates›1300 ;›1310 PSTART=0›1320 PLAYER2=PSTART+$600›1330 PSHAPE=PSTART+$600 ;Shape data›1340 PCOLOR=10›1350 PRATE=8›1360 PFLASH=PSHAPE+8›1370 ;›1380 ;Call from BASIC where ROUTINE›1390 ;is the address of this routine›1400 ;CURSOR=USR(ROUTINE)›1410 ;›1420 *=$4000 ;Relocatable›1430 ;›1440 INIT›1450 PLA ;# arguments=0›1460 LDA FR0 ;FR0=INIT›1470 CLC›1480 ADC #MAIN-INIT&$FF›1490 STA FR0›1500 LDA FR0+1›1510 ADC #MAIN-INIT/$100›1520 STA FR0+1 ;FR0=MAIN›1530 LDX #8-1 ;Move cursor data›1540 LDY #SHAPE-MAIN+7›1550 LOOP›1560 LDA (FR0),Y›1570 STA PSHAPE,X›1580 DEY›1590 DEX›1600 BPL LOOP›1610 LDY FR0 ;Enable VBLANK›1620 LDX FR0+1›1630 LDA #7 ;Deferred›1640 JMP SETVBV ;Return›1650 ;›1660 ;Start of the VBLANK routine›1670 ;›1680 MAIN›1690 LDA CRSINH ;PEEK(752)›1700 BEQ ERASE ;No PM cursor›1710 LDA SRTIMR ;Key pressed?›1720 BEQ SKIP›1730 LDA #0 ;Yes, show cursor›1740 BEQ SKIP1 ;Forced branch›1750 SKIP›1760 LDA PFLASH ;Flashing logic›1770 CLC›1780 ADC #PRATE›1790 SKIP1›1800 STA PFLASH›1810 BMI ERASE ;Cursor invisible›1820 LDY #255 ;Clear the player RAM›1830 LDA #0›1840 LOOP1›1850 STA PLAYER2,Y›1860 DEY›1870 CPY #8›1880 BNE LOOP1›1890 LDA #PCOLOR ;Init PM variables›1900 STA PCOLR2 ;Player 2 color›1910 STA COLPM2›1920 LDA #1›1930 STA GPRIOR›1940 STA PRIOR›1950 LDA #0›1960 STA SIZEP2›1970 LDA #PSTART/$100›1980 STA PMBASE›1990 LDA #2›2000 STA GRACTL›2010 LDA #2+32+8+16›2020 STA SDMCTL›2030 STA DMACTL›2040 LDX COLCRS ;Check screen mode›2050 LDY ROWCRS›2060 LDA DINDEX›2070 ORA TINDEX›2080 BEQ SKIP2 ;Full screen›2090 LDA BOTSCR›2100 CMP #4›2110 BNE ERASE ;No text window›2120 TYA ;Add offset to line›2130 CLC›2140 ADC #20›2150 TAY›2160 SKIP2›2170 TXA ;Find hor. pos.›2180 ASL A›2190 ASL A›2200 ADC #48›2210 STA HPOSP2›2220 TYA ;Find vert. pos.›2230 ASL A›2240 ASL A›2250 ASL A›2260 ADC #32+7›2270 TAY ;Move cursor into›2280 LDX #7 ;position›2290 LOOP2›2300 LDA PSHAPE,X›2310 STA PLAYER2,Y›2320 DEY›2330 DEX›2340 BPL LOOP2›2350 JMP XITVBV ;RETURN›2380 ;›2390 ERASE›2400 LDA #0 ;Move player›2410 STA HPOSP2 ;off screen›2420 JMP XITVBV›2430 ;›2440 ;Data for underline shape›2450 ;›2460 SHAPE›2470 .BYTE 0,0,0,0,0,0,0,240›