00010 *KERNEL EXAMPLE - MULTICOLORED PLAYER -MOVES WITH JOYSTICK 00020 *CODED BY DAN PINAL 6000: 00040 PDATA EQ $6000 D407: 00050 PMBASE EQ $D407 0230: 00060 SDLSTL EQ $230 D000: 00070 HPOSP0 EQ $D000 02C0: 00080 PCOLR0 EQ $2C0 D012: 00090 COLPM0 EQ $D012 D40A: 00100 WSYNC EQ $D40A D40B: 00110 VCOUNT EQ $D40B D20E: 00120 IRQEN EQ $D20E D40E: 00130 NMIEN EQ $D40E 0200: 00140 VDSLST EQ $200 0224: 00150 VVBLKD EQ $224 022F: 00160 SDMCTL EQ $22F D400: 00170 DMACTL EQ $D400 D01D: 00180 GRACTL EQ $D0ID E45C: 00190 SETVBV EQ $E45C E462: 00200 XITVBV EQ $E462 6300: 00210 MISSL0 EQ PDATA+$300 6400: 00220 PLAYR0 EQ MISSL0+$100 6500: 00230 PLAYR1 EQ PLAYR0+$100 6600: 00240 PLAYR2 EQ PLAYR1+$100 6700: 00250 PLAYR3 EQ PLAYR2+$100 0278: 00260 STICK0 EQ $278 00270 *ZERO PAGE EQUATES 00F0: 00280 VTEMP0 EQ $F0 00F1: 00290 VTEMP1 EQ $Fl 00F8: 00300 P0TMP0 EQ $F8 00F9: 00310 P0TMP1 EQ $F9 00340 00350 00360 INIT 4000: A9 F9 00370 LDA MIST 4002: 8D 30 02 00380 STA SDLSTL 4005: A9 40 00390 LDA /DLIST 4007: 8D 31 02 00400 STA SDLSTL+l 400A: A9 98 00410 LDA #KERNEL SET DISPLAY LIST INTERRUPT 400C: 8D 00 02 00420 STA VDSLST 400F: A9 40 00430 LDA /KERNEL 4011: 8D 01 02 00440 STA VDSLST+l 4014: A0 56 00450 LDY #VBLANK SET VERTICAL BLANK 4016: A2 40 00460 LDX /VBLANK 4018: A9 07 00470 LDA #$07 ;DEFFERRED 401A: 20 5C E4 00480 JSR SETVBV 401D: A9 60 00490 LDA /PDATA ; INIT PM GRAPHICS 401F: 8D 07 D4 00500 STA PMBASE 4022: A9 3E 00510 LDA WE 4024: 8D 2F 02 00520 STA SDMCTL 4027: A9 03 00530 LDA #03 4029: 8D 1D D0 00540 STA GRACTL 402C: A9 63 00550 LDA /MISSL0 CLEAR PLAYER/MISSILE RAM 402E: 85 F9 00560 STA P0TMP1 4030: A9 00 00570 LDA #00 4032: 85 F8 00580 STA P0TMP0 4034: A8 00590 TAY 4035: A2 05 00600 LDX 005 5 PAGES 00610 CLEARP 4037: 91 F8 00620 STA (P0TMP0),Y 4039: C8 00630 INY 403A: D0 FB 00640 BNE CLEARP 403C: E6 F9 00650 INC P0TMPI 403E: CA 00660 DEX 403F: D0 F6 00670 BNE CLEARP 4041: A9 0E 00680 LDA #$0E WHITE 4043: 8D C0 02 00690 STA PCOLR0 4046: A9 80 00700 LDA #$80 4048: 8D FD 40 00710 STA PLAYRH 404B: 8D FE 40 00720 STA PLAYRV 00730 ; ENABLE INTERRUPTS 404E: A9 C0 00740 LDA #$C0 4050: 8D 0E D4 00750 STA NMIEN 00760 HERE 4053: 4C 53 40 00770 JMP HERE ;ENDLESS LOOP OUTSIDE VBLANK 00780 *VBLANK ROUTINE 00790 VBLANK 4056: A9 C0 00800 LDA #$C0 4058: 8D 0E D4 00810 STA NMIEN REENABLE DLI (FOR REV. A O.S.) 405B: AE 78 02 00820 LDX STICK0 JOYSTICK0 VALUE 405E: 18 00830 CLC 405F: AD FD 40 00840 LDA PLAYRH LOAD OLD HORIZ. PLAYER POS 4062: 7D D5 40 00850 ADC HOFF,X ADD HORIZ DIRECTION VECTOR 4065: C9 30 00860 CMP #$30 00870 CHECK IF PAST RIGHT OR LEFT EDGE 4067: 90 0A 00880 BCC NEWT 4069: C9 D0 00890 CMP #$D0 406B: B0 06 00900 BCS NEWV 406D: 8D FD 40 00910 STA PLAYRH;STORE NEW HORIZ PLAYER POSITION 4070: 8D 00 D0 00920 STA HPOSP0 ;TELL ANTIC 00930 NEWV 4073: 18 00940 CLC 4074: AD FE 40 00950 LDA PLAYRV ;LOAD OLD VERT PLAYER POS 4077: 7D E5 40 00960 ADC VOFF,X ;ADD VERT DIRECTION VECTOR 00970 CHECK IF PAST TOP OR BOTTOM 407A: C9 22 00980 CMP #$22 407C: 90 17 00990 BCC XVBLANK 407E: C9 D0 01000 CMP #$D0 4080: B0 13 01010 BCS XVBLANK 4082: 8D FE 40 01020 STA PLAYRV;STORE NEW VERT POSITION 4085: 85 F0 01030 STA VTEMPO ;LO BYTE OF P/M AREA 4087: A9 64 01040 LDA /PLAYR0 4089: 85 F1 01050 STA VTEMP1 ;HI BYTE OF P/M AREA 408B: A0 13 01060 LDY #$13 ;20 ELEMENTS 01070 PDRAW 408D: B9 C2 40 01080 LDA IMAGE,Y ;GET BYTE FROM SHAPE TABLE 4090: 91 F0 01090 STA (VTEMP0),Y ;STORE BYTE IN P/M AREA 4092: 88 01100 DEY ;NEXT BYTE 4093: 10 F8 01110 BPL PDRAW ;DONE? 01120 XVBLANK 4095: 4C 62 E4 01130 JMP XITVBV 01140 * 01150 KERNEL 4098: 48 01160 PHA SAVE REGISTERS 4099: 8A 01170 TXA 409A: 48 01180 PHA 409B: 98 01190 TYA 409C: 48 01200 PHA 409D: A2 03 01210 LDX #$03 USE X FOR INDEX To COLOR TABLE 409F: AD FE 40 01220 LDA PLAYRV GET VERT. POS. 40A2: 4A 01230 LSR VCOUNT COUNTS EVERY OTHER LINE 40A3: A8 01240 TAY 40A4: C8 01250 INY 01260 UNTIL 40A5: 8D 0A D4 01270 STA WSYNC ;WAIT TILL OFF SCREEN 40A8: CC 0B D4 01280 CPY VCOUNT ;ARE WE AT LINE TO BFGIN CHANGING 40AB: B0 F8 01290 BCS UNTIL ;NO HAVEN'T REACHED IT-BRANCH 01300 CHANGE 40AD: BD F5 40 01310 LDA COLOR,X GET COLOR 40B0: 8D 12 D0 01320 STA COLPM0 STUFF COLOR 40B3: 8D 0A D4 01330 STA WSYNC WAIT 3 LINES # DO NEXT CHANGE 40B6: 8D 0A D4 01340 STA WSYNC 40B9: 8D 0A D4 01350 STA WSYNC 40BC: CA 01360 DEX 40BD: 10 EE 01370 BPL CHANGE GO BACK TILL ALL CHANGES MADE 40BF: 4C 62 E4 01380 JMP XITVBV LET O.S. RESTORE REGISTERS 01390 40C2: 00 00 10 40C5: 10 10 10 40C8: 38 38 01400 IMAGE HS 0000101010103838 40CA: 38 38 7C 40CD: 7C 7C FE 40D0: FE 54 01410 HS 38387C7C7CFEFE54 40D2: 54 00 00 01420 HS 540000 40D5: 00 00 00 40D8: 00 00 02 40DB: 02 02 01430 HOFF HS 0000000000020202 40DD: 00 FE FE 40E0: FE 00 00 40E3: 00 00 01440 HS 00FEFEFE00000000 40E5: 00 00 00 40E8: 00 00 02 40EB: FE 00 01450 VOFF HS 000000000002FE00 40ED: 00 02 FE 40F0: 00 00 02 40F3: FE 00 01460 HS 0002FE000002FE00 40F5: 44 76 B8 40F8: 3A 01470 COLOR HS 4476B83A 40F9: 80 41 01480 DUST HS 8041 40FB: F9 40 01490 DA DLIST 40FD: 00 01500 PLAYRH HS 00 40FE: 00 01510 PLAYRV HS 00