0100 ;BRICKWORKS - main listing 0110 ;written by Chris York 0120 ; 0170 ; I/O CONTROL BLOCK EQUATES 0180 ; 0260 ICCOM = $0342 0280 ICBADR = $0344 0300 ICBLEN = $0348 0310 ICAUX1 = $034A 0320 ICAUX2 = $034B 0370 ; 0400 ; IOCB COMMAND VALUE EQUATES 0410 ; 0420 COPN = 3 0430 CGBINR = 7 0450 CPBINR = 11 0470 CCLOSE = 12 0860 CIO = $E456 1030 ; 1100 .MACRO @CH 1110 .IF %1>7 1120 LDA %1 1130 ASL A 1140 ASL A 1150 ASL A 1160 ASL A 1170 TAX 1180 .ELSE 1190 LDX #%1*16 1200 .ENDIF 1210 .ENDM 1220 .MACRO @CV 1230 .IF %1<256 1240 LDA #%1 1250 .ELSE 1260 LDA %1 1270 .ENDIF 1280 .ENDM 1290 .MACRO @FL 1300 .IF %1<256 1310 JMP *+%1+4 1320 @F .BYTE %$1,0 1330 LDA # <@F 1340 STA ICBADR,X 1350 LDA # >@F 1360 STA ICBADR+1,X 1370 .ELSE 1380 LDA # <%1 1390 STA ICBADR,X 1400 LDA # >%1 1410 STA ICBADR+1,X 1420 .ENDIF 1430 .ENDM 1440 .PAGE " XIO macro" 1450 .MACRO XIO 1460 .IF %0<2 .OR %0>5 1470 .ERROR "XIO: wrong number of arguments" 1480 .ELSE 1490 @CH %2 1500 @CV %1 1510 STA ICCOM,X 1520 .IF %0>=4 1530 @CV %3 1540 STA ICAUX1,X 1550 @CV %4 1560 STA ICAUX2,X 1570 .ELSE 1580 LDA #0 1590 STA ICAUX1,X 1600 STA ICAUX2,X 1610 .ENDIF 1620 .IF %0=2 .OR %0=4 1630 @FL "S:" 1640 .ELSE 1650 @@IO .= %0 1660 @FL %$(@@IO) 1670 .ENDIF 1680 JSR CIO 1690 .ENDIF 1700 .ENDM 1710 .PAGE " OPEN macro" 1720 .MACRO OPEN 1730 .IF %0<>4 1740 .ERROR "OPEN: wrong number of arguments" 1750 .ELSE 1760 .IF %4<256 1770 XIO COPN,%1,%2,%3,%$4 1780 .ELSE 1790 XIO COPN,%1,%2,%3,%4 1800 .ENDIF 1810 .ENDIF 1820 .ENDM 1830 .PAGE " BGET and BPUT macros" 1840 .MACRO @GP 1850 @CH %1 1860 LDA #%4 1870 STA ICCOM,X 1880 LDA # <%2 1890 STA ICBADR,X 1900 LDA # >%2 1910 STA ICBADR+1,X 1920 LDA # <%3 1930 STA ICBLEN,X 1940 LDA # >%3 1950 STA ICBLEN+1,X 1960 JSR CIO 1970 .ENDM 1980 .MACRO BGET 1990 .IF %0<>3 2000 .ERROR "BGET: wrong number of parameters" 2010 .ELSE 2020 @GP %1,%2,%3,CGBINR 2030 .ENDIF 2040 .ENDM 2050 .MACRO BPUT 2060 .IF %0<>3 2070 .ERROR "BPUT: wrong number of parameters" 2080 .ELSE 2090 @GP %1,%2,%3,CPBINR 2100 .ENDIF 2110 .ENDM 2480 .PAGE " CLOSE macro" 2490 .MACRO CLOSE 2500 .IF %0<>1 2510 .ERROR "CLOSE: wrong number of parameters" 2520 .ELSE 2530 @CH %1 2540 LDA #CCLOSE 2550 STA ICCOM,X 2560 JSR CIO 2570 .ENDIF 2580 .ENDM 2590 ;CHARACTER SETS 2600 ; 2610 ;These are the custom characters that are used by BRICKWORKS for the building blocks. 2620 ; 2630 *= $6000 2640 .BYTE 0,0,0,0,0,0,0,0 2650 .BYTE 85,170,85,170,85,170,85,170 2660 .BYTE 187,238,187,238,187,238,187,238 2670 .BYTE 238,238,238,0,238,238,238,0 2680 .BYTE 255,255,255,255,255,255,255,255 2690 .BYTE 170,170,170,170,85,85,85,85 2700 .BYTE 170,170,170,170,170,170,170,170 2710 .BYTE 255,129,129,129,129,129,129,255 2720 .BYTE 0,126,66,66,66,66,126,0 2730 .BYTE 255,153,153,255,255,153,153,255 2740 .BYTE 51,204,51,204,51,204,51,204 2750 .BYTE 60,60,255,255,255,255,195,195 2760 .BYTE 255,129,129,255,255,129,129,255 2770 .BYTE 255,0,255,0,255,0,255,0 2780 .BYTE 255,254,252,248,240,224,192,128 2790 .BYTE 255,127,63,31,15,7,3,1 2800 .BYTE 255,130,132,136,144,160,192,128 2810 .BYTE 255,65,33,17,9,5,3,1 2820 .BYTE 0,0,0,0,24,60,126,255 2830 .BYTE 128,192,224,240,240,224,192,128 2840 .BYTE 24,36,66,129,129,66,36,24 2850 .BYTE 128,192,224,240,248,252,254,255 2860 .BYTE 1,3,7,15,31,63,127,255 2870 .BYTE 128,192,160,144,136,132,130,255 2880 .BYTE 1,3,5,9,17,33,65,255 2890 .BYTE 255,126,60,24,0,0,0,0 2900 .BYTE 1,3,7,15,15,7,3,1 2910 .BYTE 24,60,126,255,255,126,60,24 2920 .BYTE 0,0,0,230,230,255,255,255 2930 .BYTE 0,0,0,103,103,255,255,255 2940 .BYTE 124,254,254,254,254,254,124,0 2950 .BYTE 24,24,24,24,24,24,24,24 2960 .BYTE 3,7,14,28,56,112,224,192 2970 .BYTE 0,126,129,0,0,129,126,0 2980 .BYTE 129,66,36,24,24,36,66,129 2990 .BYTE 0,0,0,102,102,255,255,255 3000 .BYTE 0,0,0,219,219,255,255,255 3010 .BYTE 124,254,254,238,254,254,124,0 3020 .BYTE 0,0,0,255,255,0,0,0 3030 .BYTE 192,224,112,56,28,14,7,3 3040 .BYTE 0,126,165,36,36,165,126,0 3050 .BYTE 126,66,126,66,126,66,126,66 3060 .BYTE 0,0,0,31,31,24,24,24 3070 .BYTE 0,0,0,255,255,24,24,24 3080 .BYTE 0,0,0,248,248,24,24,24 3090 .BYTE 24,24,24,31,31,24,24,24 3100 .BYTE 24,24,24,255,255,24,24,24 3110 .BYTE 24,24,24,248,248,24,24,24 3120 .BYTE 32,64,184,252,126,62,18,54 3130 .BYTE 24,24,24,31,31,0,0,0 3140 .BYTE 24,24,24,255,255,0,0,0 3150 .BYTE 24,24,24,248,248,0,0,0 3160 .BYTE 126,129,165,129,165,153,129,126 3170 .BYTE 24,24,188,255,61,60,60,60 3180 .BYTE 36,36,36,36,36,36,36,231 3190 .BYTE 20,8,126,235,255,126,36,54 3200 .BYTE 0,126,126,96,96,126,126,0 3210 .BYTE 0,102,102,102,102,126,126,0 3220 .BYTE 0,126,126,24,24,24,24,0 3230 .BYTE 0,126,102,102,126,96,96,0 3240 .BYTE 0,126,102,102,126,102,102,0 3250 .BYTE 0,126,96,126,126,6,126,0 3260 .BYTE 0,126,96,126,126,96,126,0 3270 .BYTE 0,0,0,0,255,0,0,0 3280 ZERO = 203 ;FREE ZERO PAGE 3290 DLIST = 560 ;DISPLAY LIST 3300 SCREEN = 88 ;SCREEN MEM 3310 PMBASE = $D407 ;P/M POINTER 3320 PCOLR0 = 704 ;COLOR PLAYER 0 3330 GPRIOR = 623 ;PRIORITY REG 3340 GRACTL = $D01D ;PLAYER ENABLE 3350 SDMCTL = 559 ;DIR MEM ACCESS 3360 PMSTART = $4400 ;PLAYER MEMORY 3370 PMX = 1536 ;HAND HPOS 3380 PMY = 1537 ;HAND YPOS 3390 HPOSP0 = 53248 ;PLAYER 0 HPOS 3400 PMDAT = $4600 ;PLAYER DATA 3410 RTCLOK = 20 ;R TIME CLOCK 3420 STICK0 = 632 ;JOYSTICK 0 3440 COUNT = 1539 3450 CONSOL = $D01F ;CONSOLE KEYS 3460 OPTION = 1540 ;WHAT COLOR? 3470 SELECT = 1541 ;WHAT BRICKS? 3480 STARTCH = 1542 ;FIRST BRICK 3490 X = 1543 ;X (0-19) 3500 Y = 1544 ;Y (0-23) 3510 CHBASE = 756 ;CHARACTER SET 3520 CHAR = 1545 ;BRICK SELECTED 3530 PCOLR2 = 705 ;COLOR PLAYER 2 3540 COLOR0 = 708 ;COLOR REG 0 3550 CHAR1 = 1547 3560 P2START = $4500 ;PLAYER 2 MEM 3570 HPOSP2 = 53249 ;PLAYER 2 HPOS 3580 STRIG0 = 644 ;TRIGGER 0 3590 SETVBV = $E45C ;SETS VBI 3600 XITVBV = $E462 ;LEAVE VBI 3610 VBILOC = 1548 ;INTERRUPT LOC 3620 PMCHAR = 1550 ;BRICK IN HAND 3630 CH = 764 ;LAST KEY PRESS 3640 KEYBUF = 1565 ;GET CHARACTER 3650 DLZ = $B0 ;CURRENT SCREEN 3660 SMEM = 1567 3670 NUMPM = $46C0 ;SCREEN NUMBER 3680 NMBASE = 57480 ;NUMBER DATA 3690 WHSCR = 1566 ;WHICH SCREEN? 3700 HPOSP3 = 53250 ;PLAYER 3 HPOS 3710 PCOLOR3 = 706 ;COLOR PLAYER 3 3720 CX1 = 1588 ;CUT UPPER X VAL 3730 CY1 = 1589 ;CUT UPPER Y VAL 3740 CX2 = 1590 ;CUT LOWER X VAL 3750 CY2 = 1591 ;CUT LOWER Y VAL 3760 ZCUT1 = $B2 ;USED BY CUT FUNC 3770 ZCUT2 = $B4 ;DITTO 3780 ZCUT3 = $B6 ;LIKEWISE 3790 HEIGHT = 1592 ;CUT BUFFER HEIGHT 3800 WIDTH = 1593 ;CUT BUFFER WIDTH 3810 CUTFLAG = 1594 3820 CUTBUF = $9200 ;CUT BUFFER LOC 3830 AUDCTL = $D208 ;AUDIO CONTROL 3840 SKCTL = $D20F ;SERIAL PORT CNTRL 3850 AUDF1 = $D200 ;TONE FREQUENCY 3860 AUDC1 = $D201 ;DISTORTION/VOLUME 3870 ;MEM LOCS FOR 8 SEPERATE SCREENS 3880 *= 1567 3890 .BYTE $00,$80,$E0,$81,$C0,$83,$A0,$85 3900 .BYTE $80,$87,$60,$89,$40,$8B,$20,$8D 3910 .BYTE $00,$8F,$E0,$90 3920 ;PLAYER/MISSLE DATA 3930 *= $4600 3940 .BYTE 0,0,0,64,33,18,10,14,30,62,62,61,26,4 3950 ; 3960 ; MAIN PROGRAM STARTS HERE 3970 ; 3980 *= $4A00 3990 START CLD ;CHILL DECIMAL 4010 JSR INITDL ;SET UP DLIST 4020 LDA #$31 4030 JSR SCRSWT 4040 JSR CLRSCR ;CLEAR SCREEN 4050 JSR DISPT ;SHOW TITLE 4060 JSR CLRSCR ;CLEAR SCREEN 4070 JSR PMSET ;INIT P/M GRAPH 4080 LDA #51 ;HAND X BEGIN 4090 STA PMX 4100 LDA #32 ;HAND Y BEGIN 4110 STA PMY 4120 LDA #0 ;HAND BEGINS AT 4130 STA X ;0,0 CARTESIAN 4140 STA Y ;COORDINATES 4150 JSR GETCHR 4160 LDA #$60 ;ENABLE CUSTOM 4170 STA CHBASE ;CHARACTERS 4180 JSR DRLIN ;DRAW DIVISION 4190 JSR UPDATE ;SHOW BRICKS 4200 LDY VBILOC ;ENABLE VBI 4210 LDX VBILOC+1 ;FOR MOVEMENT 4220 LDA #7 ;OF HAND 4230 JSR SETVBV 4240 ;*** MAIN PROGRAM LOOP *** 4250 DOCTOR JSR READST ;READ JOYSTICK 4260 JSR TRIG ;READ TRIGGER 4270 JSR CONCHK ;READ CONSOLE 4280 JSR KEYCHK ;READ KEYBOARD 4290 JMP DOCTOR ;ENDLESS LOOP 4300 ;INIT DLIST 4310 INITDL LDA DLIST ;PUT DL LOC 4320 STA ZERO ;ON PAGE 0 4330 LDA DLIST+1 4340 STA ZERO+1 4350 LDY #3 ;PUT GRAPHIC 4360 LDA #70 ;MODE 1 ON 4370 STA (ZERO),Y ;THE SCREEN 4380 LDY #6 4390 LDA #6 4400 LISTLP STA (ZERO),Y 4410 INY 4420 CPY #29 4430 BNE LISTLP 4440 RTS ;LATER! 4450 ;SCREEN CLEAR ROUTINE 4460 CLRSCR LDA #0 4470 LDY #0 4480 CLRLP1 STA (SCREEN),Y ;ROUTINE 4490 INY ;TO CLEAR 4500 CPY #240 ;THE FIRST 4510 BNE CLRLP1 ;240 SPACES 4520 LDA SCREEN ;OF SCREEN 4530 STA ZERO 4540 LDA SCREEN+1 4550 STA ZERO+1 4560 CLC ;ADVANCE TO 4570 LDA ZERO ;BOTTOM HALF 4580 ADC #240 ;OF SCREEN 4590 STA ZERO 4600 LDA ZERO+1 4610 ADC #0 4620 STA ZERO+1 4630 LDA #0 4640 LDY #0 4650 CLRLP2 STA (ZERO),Y ;CLEAR THE 4660 INY ;BOTTOM HALF 4670 CPY #240 ;OF SCREEN 4680 BNE CLRLP2 4690 RTS 4840 ;CLEAR PLAYER/MISSLE AREA 4870 PMSET LDA #62 ;SET P/M 4880 STA SDMCTL ;GRAPHICS 4890 LDA #3 ;TURN ON P/M 4900 STA GRACTL ;GRAPHICS 4902 LDA #$40 ;SET P/M DATA 4904 STA PMBASE ;POINTER 4910 LDA #1 4920 STA GPRIOR ;SET PRIORITIES 4930 LDA #12 4940 STA PCOLR0 ;SET COLORS 4950 STA PCOLOR3 4960 LDA #200 ;X VALUE FOR 4970 STA HPOSP3 ;NUMERAL 4980 RTS ;GOODBYE! 4990 ;TIME DELAY FOR X NUMBER JIFFIES 5000 JIFFY LDA #0 5010 STA RTCLOK 5020 JIFLP CPX RTCLOK ;#JIFFIES IN X 5030 BNE JIFLP 5040 RTS ;HAMMER 5050 ;MOVE HAND UP 5060 HANDUP LDA Y 5070 CMP #0 5080 BEQ HANDUP1 5090 JSR U8 ;UP 8 SCAN LINES 5100 DEC Y 5110 HANDUP1 RTS 5120 ;MOVE HAND DOWN 5130 HANDWN LDA Y 5140 CMP #23 5150 BEQ HANDWN1 5160 JSR D8 ;DOWN 8 SCAN LINES 5170 INC Y 5180 HANDWN1 RTS 5190 ;MOVE HAND NE 5200 HANDNE LDA X 5210 CMP #19 5220 BEQ HANDNE1 5230 LDA Y 5240 CMP #0 5250 BEQ HANDNE1 5260 JSR NE ;UP 8 AND RIGHT 8 5270 INC X 5280 DEC Y 5290 HANDNE1 RTS 5300 ;MOVE HAND UP 8 SCAN LINES 5310 U8 LDA #8 5320 STA COUNT 5330 U8LP LDY PMY ;ALL HAND MOVEMENT 5340 DEY ;IS VBI DRIVEN 5350 STY PMY ;HAND X AND Y 5360 LDX #1 ;LOCATIONS ARE 5370 JSR JIFFY ;STORED IN PMX AND 5380 DEC COUNT ;PMY 5390 LDA COUNT 5400 CMP #0 5410 BNE U8LP 5420 RTS 5430 ;MOVE HAND DOWN 8 AND RIGHT 8 5440 SE LDA #8 5450 STA COUNT 5460 SELP LDY PMX 5470 INY 5480 STY PMX 5490 LDY PMY 5500 INY 5510 STY PMY 5520 LDX #1 ;SLOW MOVEMENT TO 5530 JSR JIFFY ;MAKE IT VISIBLE 5540 DEC COUNT 5550 LDA COUNT 5560 CMP #0 5570 BNE SELP 5580 RTS 5590 ;MOVE HAND DOWN 8 AND LEFT 8 5600 SW LDA #8 5610 STA COUNT 5620 SWLP LDY PMX 5630 DEY 5640 STY PMX ;OVER... 5650 LDY PMY 5660 INY 5670 STY PMY ;AND DOWN 5680 LDX #1 5690 JSR JIFFY 5700 DEC COUNT 5710 LDA COUNT 5720 CMP #0 5730 BNE SWLP 5740 RTS ;GO BACK 5750 ;MOVE HAND UP 8 AND LEFT 8 5760 NW LDA #8 ;SET LOOP FOR 8 5770 STA COUNT ;CYCLES 5780 NWLP LDY PMX 5790 DEY 5800 STY PMX 5810 LDY PMY 5820 DEY 5830 STY PMY 5840 LDX #1 5850 JSR JIFFY 5860 DEC COUNT ;DECREASE COUNTER 5870 LDA COUNT 5880 CMP #0 ;EQUAL TO ZERO? 5890 BNE NWLP ;NO 5900 RTS ;YUP 5910 ;MOVE LEFT 8 COLOR CLOCKS 5920 L8 LDA #8 ;SET THE COUNTER 5930 STA COUNT 5940 L8LP LDY PMX 5950 DEY ;CHANGE HPOSITION 5960 STY PMX 5970 LDX #1 5980 JSR JIFFY ;SLOW IT DOWN 5990 DEC COUNT ;DECREMENT COUNTER 6000 LDA COUNT 6010 CMP #0 6020 BNE L8LP 6030 RTS ;GOOD DAY, EH! 6040 ;MOVE RIGHT 8 COLOR CLOCKS 6050 R8 LDA #8 ;SET THE COUNTER 6060 STA COUNT 6070 R8LP LDY PMX 6080 INY ;UPDATE HPOSITION 6090 STY PMX 6100 LDX #1 6110 JSR JIFFY ;SLOW IT DOWN 6120 DEC COUNT ;DECREMENT COUNTER 6130 LDA COUNT 6140 CMP #0 6150 BNE R8LP 6160 RTS ;LATER! 6170 ;MOVE DOWN 8 SCAN LINES 6180 D8 LDA #8 6190 STA COUNT ;SET COUNTER 6200 D8LP LDY PMY 6210 INY ;CHANGE YPOSITION 6220 STY PMY 6230 LDX #1 6240 JSR JIFFY ;SLOW IT DOWN 6250 DEC COUNT ;DECREMENT COUNTER 6260 LDA COUNT 6270 CMP #0 6280 BNE D8LP 6290 RTS ;GO BACK 6300 ;MOVE HAND NE 6310 NE LDA #8 6320 STA COUNT ;SET THE COUNTER 6330 NELP LDY PMX 6340 INY 6350 STY PMX ;MOVE HAND RIGHT 1 6360 LDY PMY 6370 DEY 6380 STY PMY ;MOVE HAND UP 1 6390 LDX #1 6400 JSR JIFFY ;SLOW IT DOWN 6410 DEC COUNT ;DECREMENT COUNTER 6420 LDA COUNT 6430 CMP #0 6440 BNE NELP 6450 RTS ;EXIT SUBROUTINE 6460 ;MOVE HAND RIGHT 6470 HANDRT LDA X ;IS HAND ALL THE 6480 CMP #19 ;WAY RIGHT? 6490 BEQ HANDRT1 6500 JSR R8 ;NO 6510 INC X 6520 HANDRT1 RTS ;LEAVE SUB 6530 ;MOVE HAND LEFT 6540 HANDLT LDA X ;IS HAND ALL THE 6550 CMP #0 ;WAY LEFT? 6560 BEQ HANDLT1 6570 JSR L8 ;NO 6580 DEC X 6590 HANDLT1 RTS ;BYE! 6600 ;MOVE HAND SE 6610 HANDSE LDA X ;IS HAND ALL THE 6620 CMP #19 ;WAY RIGHT? 6630 BEQ HANDSE1 ;YUP 6640 LDA Y ;IS HAND ALL THE 6650 CMP #23 ;WAY DOWN? 6660 BEQ HANDSE1 ;YUP 6670 JSR SE ;NOPE 6680 INC X 6690 INC Y 6700 HANDSE1 RTS ;ALL DONE!!! 6710 ;MOVE HAND SW 6720 HANDSW LDA X ;IS HAND ALL THE 6730 CMP #0 ;WAY LEFT? 6740 BEQ HANDSW1 ;YUP 6750 LDA Y ;IS HAND ALL THE 6760 CMP #23 ;WAY DOWN? 6770 BEQ HANDSW1 ;YUP 6780 JSR SW ;NOPE 6790 DEC X 6800 INC Y 6810 HANDSW1 RTS ;TAKE OFF! 6820 ;MOVE HAND NW 6830 HANDNW LDA X ;IS HAND ALL THE 6840 CMP #0 ;WAY LEFT? 6850 BEQ HANDNW1 ;YES! 6860 LDA Y ;IS HAND ALL THE 6870 CMP #0 ;WAY UP? 6880 BEQ HANDNW1 ;UH-HUH 6890 JSR NW ;NO WAY, JOSE! 6900 DEC X 6910 DEC Y 6920 HANDNW1 RTS ;HAMMER 6930 ;READ STICK & UPDATE HAND 6940 READST LDA STICK0 6950 CMP #14 ;STICK FORWARD? 6960 BNE STNE ;NO 6970 JSR HANDUP ;YES 6980 RTS 6990 STNE CMP #6 ;STICK NE? 7000 BNE STRT ;NO 7010 JSR HANDNE ;YES 7020 RTS 7030 STRT CMP #7 ;STICK RIGHT? 7040 BNE STSE ;NO 7050 JSR HANDRT ;YES 7060 RTS 7070 STSE CMP #5 ;STICK SE? 7080 BNE STDN ;NO 7090 JSR HANDSE ;YES 7100 RTS 7110 STDN CMP #13 ;STICK BACK? 7120 BNE STSW ;NO 7130 JSR HANDWN ;YES 7140 RTS 7150 STSW CMP #9 ;STICK SW? 7160 BNE STLT ;NO 7170 JSR HANDSW ;YES 7180 RTS 7190 STLT CMP #11 ;STICK LEFT? 7200 BNE STNW ;NO 7210 JSR HANDLT ;YES 7220 RTS 7230 STNW CMP #10 ;STICK NW? 7240 BNE STNO ;NO 7250 JSR HANDNW ;YES 7260 STNO RTS 7270 ;DRAW DIVIDER 7280 DRLIN LDA SCREEN ;GET STARTING 7290 STA ZERO ;SCREEN LOCALE 7300 LDA SCREEN+1 7310 STA ZERO+1 7320 CLC ;MOVE HALFWAY 7330 LDA ZERO ;DOWN SCREEN 7340 ADC #200 7350 STA ZERO 7360 LDA ZERO+1 7370 ADC #0 7380 STA ZERO+1 7390 CLC ;MOVE DOWN TO 7400 LDA ZERO ;LOCALE WHERE THE 7410 ADC #200 ;DIVIDING LINE 7420 STA ZERO ;SHOULD START? 7430 LDA ZERO+1 7440 ADC #0 7450 STA ZERO+1 7460 LDA #63 7470 LDY #0 7480 LINLP STA (ZERO),Y ;DRAW THE 7490 INY ;LINE ACROSS 7500 CPY #19 7510 BNE LINLP 7520 RTS 7530 ;CHECK CONSOLE 7540 CONCHK LDA CONSOL 7550 CMP #7 ;NO KEY PRESSED? 7560 BNE CON1 ;NOPE 7570 RTS ;YES 7580 CON1 CMP #3 ;OPTION PRESSED? 7590 BNE SEL ;NO 7600 CLC 7610 LDA OPTION ;CHANGE THE COLOR 7620 ADC #64 7630 STA OPTION 7640 JMP UPDATE ;UPDATE BRICKS 7650 SEL CMP #5 ;SELECT PRESSED? 7660 BNE GOBAK ;NO 7670 CLC 7680 LDA SELECT ;CHANGE BRICKS 7690 ADC #14 ;AND CHECK FOR 7700 CLC ;POINT TO WRAP 7710 CMP #44 ;BACK TO THE 7720 BCC CON2 ;FIRST BRICKS 7730 LDA #0 7740 CON2 STA SELECT 7750 JMP UPDATE ;UPDATE BRICKS 7760 GOBAK RTS ;EXIT SUBROUTINE 7770 ;ROUTINE TO UPDATE BRICKS 7780 UPDATE CLC 7790 LDA OPTION ;GET COLOR 7800 ADC SELECT ;ADD BRICKS 7810 STA STARTCH ;=FIRST CHAR 7820 LDA SCREEN ;PUT SCREEN 7830 STA ZERO ;LOC ON PAGE 7840 LDA SCREEN+1 ;ZERO 7850 STA ZERO+1 7860 CLC 7870 LDA ZERO ;MOVE HALF- 7880 ADC #210 ;WAY DOWN 7890 STA ZERO ;THE SCREEN 7900 LDA ZERO+1 7910 ADC #0 7920 STA ZERO+1 7930 CLC ;MOVE THE 7940 LDA ZERO ;REST OF THE 7950 ADC #213 ;WAY DOWN 7960 STA ZERO 7970 LDA ZERO+1 7980 ADC #0 7990 STA ZERO+1 8000 LDY #0 8010 LDX STARTCH ;GET 1ST CH 8020 CONLP TXA ;PUT IN A 8030 STA (ZERO),Y ;SHOW BRICK 8040 INY ;ADVANCE BY 8050 INY ;2 SPACES 8060 INX ;+ COUNTER 8070 CPY #14 ;IS = 14? 8080 BNE CONLP ;NOPE 8090 CLC ;SHOW THE 8100 LDA ZERO ;NEXT ROW 8110 ADC #40 ;OF BRICKS 8120 STA ZERO ;IN THE SAME 8130 LDA ZERO+1 ;MANNER AS 8140 ADC #0 ;BEFORE 8150 STA ZERO+1 8160 LDY #0 8170 CONLP2 TXA 8180 STA (ZERO),Y 8190 INY 8200 INY 8210 INX 8220 CPY #14 8230 BNE CONLP2 8240 STAY LDA CONSOL ;GET CONSOLE 8250 CMP #7 ;PRESSED? 8260 BNE STAY ;YUP 8270 JMP GOBAK ;NO 8280 ;DETERMINE SCR LOC IF TRIG PRESS 8290 SCRLOC LDA SCREEN ;PUT SCREEN 8300 STA ZERO ;LOC ON PAGE 8310 LDA SCREEN+1 ;ZERO 8320 STA ZERO+1 8330 LDY #0 8340 SCRLOC1 CPY Y ;ON THIS ROW? 8350 BEQ SCRLOC2 ;YES 8360 CLC ;NO WAY! 8370 LDA ZERO 8380 ADC #20 ;NEXT ROW 8390 STA ZERO ;UPDATE PAGE 0 8400 LDA ZERO+1 8410 ADC #0 8420 STA ZERO+1 8430 INY ;ROW COUNTER 8440 JMP SCRLOC1 ;TRY AGAIN 8450 SCRLOC2 CLC ;ADD HORIZONTAL 8460 LDA ZERO ;POSITION AND 8470 ADC X ;UPDATE PAGE 0 8480 STA ZERO 8490 LDA ZERO+1 8500 ADC #0 8510 STA ZERO+1 8520 RTS ;LEAVE (QUICKLY!) 8530 ;GET CHARACTER 8540 GETCHR JSR SCRLOC ;GET MEM LOC HAND POINTS TO 8550 LDY #0 8560 LDA (ZERO),Y ;GET THAT CHAR 8570 STA CHAR ;STORE IT 8580 AND #63 8590 STA CHAR1 8600 LDY #0 8610 STY ZERO+2 8620 LDY CHBASE ;PUT CHBASE 8630 STY ZERO+3 ;IN PAGE ZERO 8640 LDY #0 8650 GETCHR1 CPY CHAR1 8660 BEQ GETCHRX 8670 CLC 8680 LDA ZERO+2 8690 ADC #8 ;FIND BRICK 8700 STA ZERO+2 ;IN THE CHAR 8710 LDA ZERO+3 ;SET 8720 ADC #0 8730 STA ZERO+3 8740 INY 8750 JMP GETCHR1 8760 GETCHRX LDY #0 8770 GETCHRY LDA (ZERO+2),Y ;STORE 8780 STA PMCHAR,Y ;BRICK DATA 8790 INY ;IN PLAYER 8800 CPY #8 8810 BNE GETCHRY 8820 LDA OPTION 8830 CMP #0 ;COLOR 0? 8840 BNE GETCHR3 ;NO 8850 LDA COLOR0 ;YES 8860 STA PCOLR2 ;PLAYER HUE 8870 GETCHR3 LDA OPTION 8880 CMP #64 ;COLOR 1? 8890 BNE GETCHR4 ;NO 8900 LDA COLOR0+1 ;YES 8910 STA PCOLR2 ;PLAYER HUE 8920 GETCHR4 LDA OPTION 8930 CMP #128 ;COLOR 2? 8940 BNE GETCHR5 ;NO 8950 LDA COLOR0+2 ;YES 8960 STA PCOLR2 ;PLAYER HUE 8970 GETCHR5 LDA OPTION 8980 CMP #192 ;COLOR 3? 8990 BNE GETCHR6 ;NO 9000 LDA COLOR0+3 ;YES 9010 STA PCOLR2 ;PLAYER HUE 9020 GETCHR6 RTS ;FINISHED 9030 ;POSITION HAND AND BRICK (VBI) 9040 P2POS LDX PMX 9050 STX HPOSP0 ;HAND HPOS 9060 DEX 9070 DEX 9080 DEX 9090 STX HPOSP2 ;BRICK HPOS 9100 LDA #0 9110 LDY #30 9120 P2POS1 STA P2START,Y ;ERASE HAND 9130 STA PMSTART,Y ;AND BRICK 9140 INY 9150 CPY #230 9160 BNE P2POS1 9170 LDX PMY ;READ HAND 9180 LDY #0 ;AND BRICK 9190 P2POS2 LDA PMCHAR,Y ;DATA INTO 9200 STA P2START,X ;PLAYERS AT 9210 LDA PMDAT,Y ;PROPER YPOS 9220 STA PMSTART,X 9230 INY 9240 INX 9250 CPY #14 9260 BNE P2POS2 9270 JMP XITVBV ;LEAVE VBI! 9280 ;CHECK BUTTON 9290 TRIG LDA STRIG0 9300 CMP #0 ;TRIG PRESS? 9310 BEQ TRIG1 ;YES 9320 RTS ;NOPE 9330 TRIG1 LDA Y 9340 CLC 9350 CMP #20 ;ON DIVIDER? 9360 BNE TRIG2 ;NO 9370 RTS ;YUP 9380 TRIG2 BCC TRIG3 ;BELOW LINE? 9390 JSR GETCHR ;YES 9400 RTS 9410 TRIG3 JSR SCRLOC ;GET WHERE 9420 LDY #0 9430 LDA CHAR 9440 STA (ZERO),Y ;DROP BRICK 9450 RTS 9460 ;CHECK FOR KEY PRESS 9470 KEYCHK OPEN 1,4,0,"K:" 9480 LDA CH 9490 CMP #$FF ;KEY PRESSED? 9500 BNE KEY1 ;YES 9510 CLOSE 1 ;NO 9520 RTS ;LEAVE 9530 KEY1 BGET 1,KEYBUF,1 ;WHICH KEY WAS IT? 9540 CLOSE 1 9550 LDA KEYBUF 9560 CMP #125 ;CLEAR KEY? 9570 BNE KEY2 ;NO 9580 JMP CLEAR ;SURELY 9590 KEY2 CLC ;WAS IT A NUMBER 9600 CMP #$31 ;KEY (1-8)? 9610 BCC KEY3 ;NO WAY 9620 CLC ;YUP 9630 CMP #$39 9640 BCS KEY3 9650 JMP SCRSWT ;SWITCH SCREEN 9660 KEY3 CMP #$3C ;LESS THAN KEY? 9670 BNE KEY4 ;NOPE 9680 JMP SCRD ;BACK A SCREEN 9690 KEY4 CMP #$3E ;MORE THAN KEY? 9700 BNE KEY5 ;NOPE 9710 JMP SCRU ;AHEAD A SCREEN 9720 KEY5 CMP #$13 ;CTRL-S? 9730 BNE KEY6 ;NOPE 9740 JMP SAVE ;SAVE SCREENS 9750 KEY6 CMP #$0C ;CTRL-L 9760 BNE KEY7 ;NOPE 9770 JMP LOAD ;LOAD SCREENS 9780 KEY7 CMP #$43 ;C KEY PRESSED? 9790 BNE KEY8 ;NOPE 9800 JMP CUT ;CUT IT OUT!!! 9810 KEY8 CMP #$50 ;P KEY PRESSED? 9820 BNE KEY9 ;NOPE 9830 JMP PASTE ;PASTE IT BACK 9840 KEY9 CMP #$20 ;SPACEBAR PRESSED? 9850 BNE KEY10 ;NOPE 9860 JMP CHCOL ;CHANGE COLORS 9870 KEY10 CMP #$42 ;B KEY PRESSED? 9880 BNE KEY11 ;NOPE 9890 LDY #4 9900 JMP STCOL ;BACKGROUND COLOR 9910 KEY11 NOP ;TAKE A REST! 9920 LDA #$FF 9930 STA CH ;STORE NULCHAR 9940 RTS ;RETURN 9950 ;CLEAR SCREEN 9960 CLEAR JSR CLRSCR ;CLEAR SCREEN 9970 JSR DRLIN ;DRAW LINE 9980 JSR UPDATE ;UPDATE BRICKS 9990 RTS ;ALL DONE 010000 ;SWITCH SCREENS 010010 SCRSWT CLC 010020 SBC #48 010030 STA WHSCR 010040 INTER LDA WHSCR ;SCREEN # 010050 ASL A ;TIMES 2 010060 TAX ;PUT IN X 010070 LDA SMEM,X ;GET MEM FOR 010080 STA SCREEN ;THAT SCREEEN AND 010090 INX ;PUT ON PAGE ZERO 010100 LDA SMEM,X 010110 STA SCREEN+1 010120 LDA DLIST ;DO THE 010130 STA DLZ ;ACTUAL PAGE 010140 LDA DLIST+1 ;FLIPPING 010150 STA DLZ+1 010160 CLC 010170 LDA DLZ 010180 ADC #4 010190 STA DLZ 010200 LDA DLZ+1 010210 ADC #0 010220 STA DLZ+1 010230 DEX 010240 LDY #0 010250 LDA SMEM,X 010260 STA (DLZ),Y 010270 INY 010280 INX 010290 LDA SMEM,X 010300 STA (DLZ),Y 010310 JSR DRLIN ;DRAW LINE 010320 JSR UPDATE ;UPDATE BRICKS 010330 JSR NUMSCR ;CHANGE SCREEN # 010340 RTS ;HAMMER! 010350 ;DISPLAY NUMBER OF SCREEN 010360 NUMSCR LDA WHSCR ;GET SCREEN# 010370 ASL A ;TIMES 2 010380 ASL A ;TIMES 4 010390 ASL A ;TIMES 8 010400 TAY ;PUT IN Y 010410 LDX #0 010420 NUMSCR1 LDA NMBASE,Y ;READ CHAR 010430 STA NUMPM,X ;DATA FOR # 010440 INY ;AND PUT IN 010450 INX ;PLAYER 010460 CPX #8 010470 BNE NUMSCR1 010480 RTS ;GET OUT!!! 010490 ;GO BACK ONE SCREEN 010500 SCRD DEC WHSCR ;DEC SCREEN # 010510 LDA WHSCR ;AND CHECK WRAP 010520 CMP #$FF 010530 BNE SCRD1 010540 LDA #$07 010550 STA WHSCR 010560 SCRD1 JMP INTER ;IF O.K., SWITCH 010570 ;GO AHEAD ONE SCREEN 010580 SCRU INC WHSCR ;INC SCREEN # 010590 LDA WHSCR ;AND CHECK WRAP 010600 CMP #$08 010610 BNE SCRU1 010620 LDA #$00 010630 STA WHSCR 010640 SCRU1 JMP INTER ;IF O.K., SWITCH 010650 ;ROUTINE TO ACCEPT A FILENAME 010660 FNG1 = 1595 010670 FNG2 = 1596 010680 FNG3 = 1597 010690 FNG4 = 1598 010700 FNG5 = 1599 010710 FNZ = $B8 010720 FNGET LDA SCREEN ;SWITCH TO 010730 STA FNG1 ;INPUT SCREEN 010740 LDA SCREEN+1 010750 STA FNG2 010760 LDA #$80 010770 STA SCREEN 010780 LDA #$96 010790 STA SCREEN+1 010800 LDA DLIST 010810 STA FNZ 010820 LDA DLIST+1 010830 STA FNZ+1 010840 CLC 010850 LDA FNZ 010860 ADC #4 010870 STA FNZ 010880 LDA FNZ+1 010890 ADC #0 010900 STA FNZ+1 010910 LDY #0 010920 LDA SCREEN 010930 STA (FNZ),Y 010940 LDA SCREEN+1 010950 INY 010960 STA (FNZ),Y 010970 JSR CLRSCR ;CLEAR SCREEN 010980 LDA SCREEN 010990 STA FNZ 011000 LDA SCREEN+1 011010 STA FNZ+1 011020 CLC ;POSITION CURSOR 011030 LDA FNZ 011040 ADC #200 011050 STA FNZ 011060 LDA FNZ+1 011070 ADC #0 011080 STA FNZ+1 011090 LDA #224 ;RESTORE NORMAL 011100 STA CHBASE ;CHARACTER SET 011110 JMP FNGET1 011120 FN .BYTE "D:" ;DISK HEADER 011130 FN1 8 ;FILENAME SPACE 011140 .BYTE ".PIC",$9B ;EXTENDER 011150 PR .SBYTE "FNAME? *" ;PROMPT 011160 FNGET1 LDA #$20 ;CLEAR OUT THE 011170 LDY #0 ;DATA SPACE 011180 FNGET9 STA FN1,Y ;FOR THE EIGHT 011190 INY ;CHARACTER 011200 CPY #8 ;FILENAME 011210 BNE FNGET9 011220 LDY #0 011230 LDX #0 011240 FNGET2 LDA PR,Y 011250 STA (FNZ),Y 011260 INY 011270 CPY #8 011280 BNE FNGET2 011290 LDY #7 011300 FNGET3 STY FNG4 011310 STX FNG5 011320 OPEN 1,4,0,"K:" ;GET A 011330 BGET 1,FNG3,1 ;KEYBOARD 011340 CLOSE 1 ;CHARACTER 011350 LDY FNG4 011360 LDX FNG5 011370 LDA FNG3 011380 CMP #$7E ;BACKSPACE? 011390 BNE FNGT1 ;NOPE 011400 JMP BACKSP ;YUP 011410 FNGT1 CMP #$9B ;RETURN KEY? 011420 BNE FNGET4 ;NO 011430 JMP RETURN ;YES 011440 FNGET4 CLC ;PUT THAT 011450 CMP #$41 ;CHARACTER ON 011460 BCC FNGET3 ;THE SCREEN IF 011470 CMP #$5B ;IT IS A LETTER 011480 BCS FNGET3 011490 CLC 011500 SBC #31 011510 STA (FNZ),Y 011520 CLC 011530 ADC #32 011540 STA FN1,X 011550 LDA #10 011560 INY 011570 INX 011580 STA (FNZ),Y 011590 CPX #8 011600 BEQ EIGHT 011610 JMP FNGET3 011620 EIGHT STY FNG4 ;THIS ROUTINE 011630 STX FNG5 ;HANDLES THE 011640 OPEN 1,4,0,"K:" ;EIGTH 011650 BGET 1,FNG3,1 ;CHARACTER 011660 CLOSE 1 ;INDEPENDANTLY 011670 LDY FNG4 011680 LDX FNG5 011690 LDA FNG3 011700 CMP #$7E 011710 BEQ BACKSP 011720 CMP #$9B 011730 BEQ RETURN 011740 JMP EIGHT 011750 BACKSP CPY #7 ;IF USER IS NOT 011760 BNE BACKSP1 ;ON THE FIRST 011770 JMP FNGET3 ;LETTER, THEN 011780 BACKSP1 LDA #$20 ;BACK UP A 011790 CLC ;CHARACTER 011800 SBC #$1F 011810 STA (FNZ),Y 011820 CLC 011830 ADC #$1F 011840 STA FN1,X 011850 DEX 011860 DEY 011870 LDA #10 011880 STA (FNZ),Y 011890 JMP FNGET3 011900 RETURN CPY #7 ;IF THE RETURN 011910 BNE RETRN ;KEY WAS 011920 PLA ;PRESSED, AND 011930 PLA ;EVERYTHING 011940 JSR RESTORE ;CHECKED OUT 011950 RTS ;THEN GET GOING 011960 RETRN LDA #0 011970 STA (FNZ),Y 011980 LDA #$2E 011990 STA FN1,X 012000 INX 012010 LDA #$50 012020 STA FN1,X 012030 INX 012040 LDA #$49 012050 STA FN1,X 012060 INX 012070 LDA #$43 012080 STA FN1,X 012090 INX 012100 LDA #$9B 012110 STA FN1,X 012120 RTS 012130 RESTORE LDA FNG1 ;ROUTINE TO 012140 STA SCREEN ;GO BACK TO 012150 LDA FNG2 ;REGULAR 012160 STA SCREEN+1 ;DISPLAY 012170 LDA DLIST 012180 STA FNZ 012190 LDA DLIST+1 012200 STA FNZ+1 012210 CLC 012220 LDA FNZ 012230 ADC #4 012240 STA FNZ 012250 LDA FNZ+1 012260 ADC #0 012270 STA FNZ+1 012280 LDY #0 012290 LDA FNG1 012300 STA (FNZ),Y 012310 INY 012320 LDA FNG2 012330 STA (FNZ),Y 012340 LDA #$60 ;RESTORE THE 012350 STA CHBASE ;MODIFIED CHSET 012360 JSR DRLIN 012370 JSR UPDATE 012380 RTS 012390 ;SAVE SCREENS TO DISK 012400 SAVE JSR FNGET ;GET FILENAME 012410 OPEN 1,8,0,FN 012420 BPL NOERR ;ERROR? 012430 JMP RESTORE ;YES 012440 NOERR 012450 ;SAVE ROUTINE 012460 ; 012470 BPUT 1,$8000,$FF 012480 BPUT 1,$80FF,$FF 012490 BPUT 1,$81FE,$FF 012500 BPUT 1,$82FD,$FF 012510 BPUT 1,$83FC,$FF 012520 BPUT 1,$84FB,$FF 012530 BPUT 1,$85FA,$FF 012540 BPUT 1,$86F9,$FF 012550 BPUT 1,$87F8,$FF 012560 BPUT 1,$88F7,$FF 012570 BPUT 1,$89F6,$FF 012580 BPUT 1,$8AF5,$FF 012590 BPUT 1,$8BF4,$FF 012600 BPUT 1,$8CF3,$FF 012610 BPUT 1,$8DF2,$FF 012620 BPUT 1,$8EF1,$FF 012630 BPUT 1,$8FF0,$FF 012640 BPUT 1,$02C4,$05 012650 CLOSE 1 012660 JSR RESTORE 012670 RTS 012680 ;LOAD SCREENS FROM DISK 012690 LOAD JSR FNGET ;GET FILENAME 012700 OPEN 1,4,0,FN 012710 BPL NOERR1 ;ERROR? 012720 JMP RESTORE ;YES 012730 NOERR1 012740 ;LOAD ROUTINE 012750 ; 012760 BGET 1,$8000,$FF 012770 BGET 1,$80FF,$FF 012780 BGET 1,$81FE,$FF 012790 BGET 1,$82FD,$FF 012800 BGET 1,$83FC,$FF 012810 BGET 1,$84FB,$FF 012820 BGET 1,$85FA,$FF 012830 BGET 1,$86F9,$FF 012840 BGET 1,$87F8,$FF 012850 BGET 1,$88F7,$FF 012860 BGET 1,$89F6,$FF 012870 BGET 1,$8AF5,$FF 012880 BGET 1,$8BF4,$FF 012890 BGET 1,$8CF3,$FF 012900 BGET 1,$8DF2,$FF 012910 BGET 1,$8EF1,$FF 012920 BGET 1,$8FF0,$FF 012930 BGET 1,$02C4,$05 012940 CLOSE 1 012950 JSR RESTORE ;PUT DISPLAY BACK TO NORMAL 012960 RTS 012970 ;CUT ROUTINE 012980 CUT JSR WRCUT ;WRITE 'CUT' 012990 CUTE JSR READST ;UPDATE HAND 013000 LDA STRIG0 013010 CMP #$00 ;TRIGGER PRESSED? 013020 BEQ CUT1 ;YUP 013030 JMP CUTE ;NOPE 013040 CUT1 LDA Y ;GET HAND YPOS 013050 CMP #20 ;IS BELOW DIVIDER? 013060 BCS CUTE ;YES 013070 JSR BEEP ;NOPE, MAKE SOUND 013080 LDA X ;GET HAND X 013090 STA CX1 ;STORE IT 013100 LDA Y ;GET HAND Y 013110 STA CY1 ;STORE IT 013120 KEEP LDA STRIG0 013130 CMP #0 ;TRIGGER PRESSED? 013140 BEQ KEEP ;YES 013150 CUT2 JSR READST ;UPDATE HAND 013160 LDA STRIG0 013170 CMP #$00 ;TRIGGER PRESSED? 013180 BEQ CUT3 ;SURE 013190 JMP CUT2 ;NO WAY 013200 CUT3 CLC 013210 LDA Y 013220 CMP #20 ;IS BELOW LINE? 013230 BCS CUT2 ;YES 013240 LDA X 013250 CMP CX1 ;IS X>1ST X 013260 BCC CUT2 ;NO 013270 LDA Y 013280 CMP CY1 ;IS Y>1ST Y 013290 BCC CUT2 ;NO 013300 JSR BEEP ;YES, MAKE SOUND 013310 LDA X ;GET HAND X 013320 STA CX2 ;STORE IT 013330 LDA Y ;GET HAND Y 013340 STA CY2 ;STORE IT 013350 LDA SCREEN 013360 STA ZCUT2 013370 LDA SCREEN+1 013380 STA ZCUT2+1 013390 LDA ZCUT3 013400 STA ZCUT1 013410 LDA ZCUT3+1 013420 STA ZCUT1+1 013430 LDY #0 ;THE REST OF 013440 CUT4 LDA (ZCUT2),Y ;THIS ROUTINE 013450 STA (ZCUT1),Y ;STORES THE 013460 INY ;CUT OUT 013470 CPY #200 ;RECTANLGE 013480 BNE CUT4 ;IN MEMORY 013490 CLC 013500 LDA ZCUT1 013510 ADC #200 013520 STA ZCUT1 013530 LDA ZCUT1+1 013540 ADC #0 013550 STA ZCUT1+1 013560 CLC 013570 LDA ZCUT2 013580 ADC #200 013590 STA ZCUT2 013600 LDA ZCUT2+1 013610 ADC #0 013620 STA ZCUT2+1 013630 LDY #0 013640 CUT5 LDA (ZCUT2),Y 013650 STA (ZCUT1),Y 013660 INY 013670 CPY #200 013680 BNE CUT5 013690 LDA #1 013700 STA CUTFLAG 013710 KEEP1 LDA STRIG0 013720 CMP #0 ;IS TRIG PRESSED? 013730 BEQ KEEP1 ;YES 013740 JSR DRLIN ;NO, DRAW DIVIDER 013750 RTS ;LEAVE 013760 ;PASTE FUNCTION 013770 PASTE LDA CUTFLAG 013780 CMP #1 ;BUFFER FULL? 013790 BEQ PASTE1 ;YES 013800 RTS ;NO 013810 PASTE1 JSR WRPASTE ;WRITE 'PASTE' 013820 CLC 013830 LDA CX2 ;FIND THE WIDTH OF 013840 SBC CX1 ;THE CUT BUFFER 013850 STA WIDTH 013860 CLC 013870 LDA CY2 ;FIND THE HEIGHT 013880 SBC CY1 ;OF THE CUT BUFFER 013890 STA HEIGHT 013900 PASTE2 JSR READST ;UPDATE HAND 013910 LDA STRIG0 013920 CMP #0 ;TRIGGER PRESSED? 013930 BEQ PASTE3 ;YES 013940 JMP PASTE2 ;NOPE 013950 PASTE3 LDA Y 013960 CMP #20 ;BELOW LINE? 013970 BCS PASTE2 ;YUP 013980 CLC ;NO 013990 LDA WIDTH ;CALCULATE WHETHER 014000 CMP #255 ;THE RECTANGLE 014010 BEQ PASTE4 ;WILL FIT ON THE 014020 CLC ;SCREEN WHERE IT 014030 ADC X ;HAS BEEN PLACED 014040 CLC 014050 CMP #19 014060 BCC PASTE4 014070 JMP PASTE2 014080 PASTE4 CLC 014090 LDA HEIGHT 014100 CMP #255 014110 BEQ PASTE5 014120 CLC 014130 ADC Y 014140 CLC 014150 CMP #19 014160 BCC PASTE5 014170 JMP PASTE2 014180 PASTE5 JSR BEEP ;MAKE SOUND 014190 JSR SCRLOC 014200 LDA ZERO ;THE REST OF THE 014210 STA ZCUT2 ;PASTE ROUTINE 014220 LDA ZERO+1 ;PLACES THE 014230 STA ZCUT2+1 ;RECTANGLE ON 014240 LDA ZCUT3 ;THE SCREEN 014250 STA ZCUT1 014260 LDA ZCUT3+1 014270 STA ZCUT1+1 014280 LDY CY1 014290 CPY #0 014300 BEQ PASTEA 014310 PASTE6 CLC 014320 LDA ZCUT1 014330 ADC #20 014340 STA ZCUT1 014350 LDA ZCUT1+1 014360 ADC #0 014370 STA ZCUT1+1 014380 DEY 014390 CPY #0 014400 BNE PASTE6 014410 PASTEA CLC 014420 LDA ZCUT1 014430 ADC CX1 014440 STA ZCUT1 014450 LDA ZCUT1+1 014460 ADC #0 014470 STA ZCUT1+1 014480 LDX HEIGHT 014490 INX 014500 PASTE9 LDY WIDTH 014510 INY 014520 PASTE7 LDA (ZCUT1),Y 014530 STA (ZCUT2),Y 014540 DEY 014550 CPY #255 014560 BNE PASTE7 014570 CLC 014580 LDA ZCUT1 014590 ADC #20 014600 STA ZCUT1 014610 LDA ZCUT1+1 014620 ADC #0 014630 STA ZCUT1+1 014640 CLC 014650 LDA ZCUT2 014660 ADC #20 014670 STA ZCUT2 014680 LDA ZCUT2+1 014690 ADC #0 014700 STA ZCUT2+1 014710 DEX 014720 CPX #255 014730 BEQ PASTE8 014740 JMP PASTE9 014750 PASTE8 LDA STRIG0 014760 CMP #0 ;TRIG PRESSED? 014770 BEQ PASTE8 ;YES 014780 JSR DRLIN ;NO, DRAW LINE 014790 RTS ;TAKE OFF! 014800 ;WRITE THE WORD CUT ON THE SCREEN 014810 WRCUT JSR DRLIN ;DRAW DIVIDER 014820 LDY #0 014830 LDA #248 ;C 014840 STA (ZERO),Y 014850 INY 014860 LDA #249 ;U 014870 STA (ZERO),Y 014880 INY 014890 LDA #250 ;T 014900 STA (ZERO),Y 014910 RTS ;MAKE HASTE 014920 ;WRITE THE WORD PASTE ON THE SCREEN 014930 WRPASTE JSR DRLIN ;DRAW DIVIDER 014940 LDY #0 014950 LDA #187 ;P 014960 STA (ZERO),Y 014970 INY 014980 LDA #188 ;A 014990 STA (ZERO),Y 015000 INY 015010 LDA #189 ;S 015020 STA (ZERO),Y 015030 INY 015040 LDA #186 ;T 015050 STA (ZERO),Y 015060 INY 015070 LDA #190 ;E 015080 STA (ZERO),Y 015090 RTS ;GOOD-BYE! 015100 ;MAKE A SHORT BEEPING SOUND 015110 BEEP LDA #0 015120 STA AUDCTL 015130 LDA #3 015140 STA SKCTL 015150 LDA #50 ;SET TONE 015160 STA AUDF1 015170 LDA #170 ;VOLUME/DISTORTION 015180 STA AUDC1 015190 LDX #6 015200 JSR JIFFY ;DELAY... 015210 LDA #0 ;THAT'S ENOUGH, 015220 STA AUDF1 ;I'M GETTING A 015230 STA AUDC1 ;HEADACHE!!! 015240 RTS 015250 ;SHOW THE TITLE SCREEN 015260 DISPT JMP DISPT1 015270 TITLE .SBYTE "BriCKwoRKs" 015280 CHRIS .SBYTE "BY: chris york" 015290 DISPT1 LDA SCREEN ;POSITION 015300 STA ZERO ;CURSOR FOR 015310 LDA SCREEN+1 ;PROG TITLE 015320 STA ZERO+1 015330 CLC 015340 LDA ZERO 015350 ADC #165 015360 STA ZERO 015370 LDA ZERO+1 015380 ADC #0 015390 STA ZERO+1 015400 LDY #0 015410 DISPT2 LDA TITLE,Y ;WRITE TITLE 015420 STA (ZERO),Y 015430 INY 015440 CPY #10 015450 BNE DISPT2 015460 CLC ;POSITION CURSOR 015470 LDA ZERO ;FOR MY NAME 015480 ADC #118 015490 STA ZERO 015500 LDA ZERO+1 015510 ADC #0 015520 STA ZERO+1 015530 LDY #0 015540 DISPT3 LDA CHRIS,Y ;WRITE MY 015550 STA (ZERO),Y ;NAME TO THE 015560 INY ;SCREEN 015570 CPY #14 015580 BNE DISPT3 015590 LDX #240 015600 JSR JIFFY ;WAIT 480 JIFFIES 015610 JSR JIFFY 015620 RTS ;STOP SHOWING TITLE 015630 ;COLOR CHANGE ROUTINES 015640 ; 015650 ;Allows user to change colors using the joystick. 015660 ; 015670 ; 015680 CHCOL LDA OPTION ;CHECK WHICH 015690 CMP #0 ;COLOR IS TO 015700 BNE CHCOL1 ;BE CHANGED 015710 LDY #0 015720 JMP STCOL 015730 CHCOL1 CMP #64 015740 BNE CHCOL2 015750 LDY #1 015760 JMP STCOL 015770 CHCOL2 CMP #128 015780 BNE CHCOL3 015790 LDY #2 015800 JMP STCOL 015810 CHCOL3 LDY #3 015820 STCOL JSR BEEP ;MAKE A SOUND! 015830 LDA #0 015840 STA GRACTL ;GOODBYE HAND 015850 SCOLR LDX #10 ;DELAY TO 015860 JSR JIFFY ;HELP CONTROL 015870 LDA STICK0 015880 CMP #14 ;+ BRIGHTNESS 015890 BNE STCOL2 015900 LDX COLOR0,Y 015910 INX 015920 TXA 015930 STA COLOR0,Y 015940 JMP STCOL1 015950 STCOL2 CMP #13 ;- BRIGHTNESS 015960 BNE STCOL3 015970 LDX COLOR0,Y 015980 DEX 015990 TXA 016000 STA COLOR0,Y 016010 JMP STCOL1 016020 STCOL3 CMP #7 ;AHEAD A COLOR 016030 BNE STCOL4 016040 CLC 016050 LDA COLOR0,Y 016060 ADC #16 016070 STA COLOR0,Y 016080 JMP STCOL1 016090 STCOL4 CMP #11 ;BACK A COLOR 016100 BNE STCOL1 016110 CLC 016120 LDA COLOR0,Y 016130 SBC #15 016140 STA COLOR0,Y 016150 STCOL1 LDA STRIG0 ;CHECK TRIGGER 016160 CMP #0 016170 BEQ STCOL5 016180 JMP SCOLR 016190 STCOL5 JSR BEEP ;MAKE A SOUND! 016200 SCOLR1 LDA STRIG0 016210 CMP #0 016220 BEQ SCOLR1 016230 LDA #3 016240 STA GRACTL ;HELLO HAND! 016250 RTS 016260 ;Initializes CUT buffer, VBI, and location for autorun on load. 016270 ; 016280 ;CUT BUFFER LOCATION 016290 *= ZCUT3 016300 .WORD CUTBUF 016310 ;VBI LOCATION 016320 *= 1548 016330 .WORD P2POS 016340 ;AUTORUN PROGRAM 016350 *= $02E0 016360 .WORD START