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