0100 .OPT NO LIST 0110 ;----------------------- 0120 ; 0130 ;Scrolling Screen Editor 0140 ;for SNOWPLOW! 0150 ; 0160 ;by: Barry Kolbe 0170 ;and Bryan Schappel 0180 ; 0190 ;----------------------- 0200 ; 0210 *= 0 0220 PASS .= PASS+1 0230 .IF PASS=1 0240 .INCLUDE #D:SYSEQU.M65 0250 .ENDIF 0260 ICP = $3F 0270 SCNMEM = $9000 0280 PMB = $8000 0290 MYPMB = $8400 0300 P1MEM = MYPMB+$0100 0310 CHSET = PMB 0320 TXTWIN = $8B00 0330 CHRLN1 = TXTWIN+40 0340 CHRLN2 = TXTWIN 0350 TXLN = TXTWIN+120 0360 STSLN = TXTWIN+80 0370 SC2 = SCNMEM+128 0380 SC3 = SC2+128 0390 SC4 = SC3+128 0400 SC5 = SC4+128 0410 SC6 = SC5+128 0420 SC7 = SC6+128 0430 SC8 = SC7+128 0440 SC9 = SC8+128 0450 SC10 = SC9+128 0460 BCKUP = $7FC0 0470 ; 0480 *= $80 0490 X1 1 0500 X2 1 0510 X3 1 0520 PGT 1 0530 CREG 1 0540 PXP 2 0550 PYP 1 0560 NYP 1 0570 DRX 2 0580 DRY 2 0590 NPTS 1 0600 INITAB 0610 SPRT 1 0620 LRCRS 1 0630 LRSCRL 1 0640 UDSCRL 1 0650 UDCRS 1 0660 XPOS 1 0670 YPOS 1 0680 PCHR 1 0690 CXPOS 1 0700 LRADD 1 0710 UDADD 1 0720 XERXFLG 1 0730 KCHRS 10 0740 DBH 1 0750 DBV 1 0760 YH2 1 0770 YH3 1 0780 DLIDX 1 0790 IL 2 0800 JL 2 0810 ; 0820 ;Display List 0830 ; 0840 *= $7F80 0850 DL1 .BYTE $70,$70,$70 0860 .BYTE $45 0870 SL1 .WORD SCNMEM 0880 .BYTE $45 0890 .WORD SC2 0900 .BYTE $45 0910 .WORD SC3 0920 .BYTE $45 0930 .WORD SC4 0940 .BYTE $45 0950 .WORD SC5 0960 .BYTE $45 0970 .WORD SC6 0980 .BYTE $45 0990 .WORD SC7 1000 .BYTE $45 1010 .WORD SC8 1020 .BYTE $45 1030 .WORD SC9 1040 .BYTE $45 1050 .WORD SC10 1060 .BYTE $C4 1070 .WORD TXTWIN 1080 .BYTE $82,$82,$02,$41 1090 .WORD DL1 1100 .OPT LIST 1110 .OPT NO LIST 1120 ; 1130 ;Display List Interrupt 1140 ; 1150 *= $3000 1160 BEGIN JMP STRT 1170 DLI PHA 1180 LDA #$E0 1190 STA CHBASE 1200 LDA #$0A 1210 STA COLPF1 1220 TXA 1230 PHA 1240 LDX DLIDX 1250 LDA DLICL,X 1260 STA COLPF2 1270 LDA #0 1280 STA COLBK 1290 STA WSYNC 1300 INC DLIDX 1310 PLA 1320 TAX 1330 PLA 1340 RTI 1350 ; 1360 ;Start of Program 1370 ; 1380 STRT LDY #50 1390 MDL LDA DL1,Y 1400 STA BCKUP,Y 1410 DEY 1420 BPL MDL 1430 RSTRT JSR CLRSCN 1440 RBEG JSR CLRTXT 1450 JSR SETSTS 1460 JSR PLRMEM 1470 JSR SETPMG 1480 JSR CLRPM 1490 JSR DEFPLR 1500 LDA #6 1510 LDY # VBI 1530 JSR SETVBV 1540 ; 1550 LDA # >DL1 1560 STA SDLSTL+1 1570 LDA # CHSET 2100 STA CHBASE 2110 INY 2120 STY DLIDX 2130 JMP SYSVBV 2140 ; 2150 ;General Move Routine 2160 ; 2170 GENMOV CMP #7 ;right? 2180 BNE TLF 2190 JMP MVRT 2200 ; 2210 ;Timer 2220 ; 2230 TIME JSR DELAY 2240 JSR SHWXY 2250 LDA #0 2260 STA ATRACT 2270 RTS 2280 ; 2290 TLF CMP #11 ;left? 2300 BNE TUP 2310 JMP MVLF 2320 ; 2330 ;Move Up 2340 ; 2350 TUP CMP #14 2360 BNE TDN 2370 UP1 LDA UDCRS 2380 BEQ AA3 ;scrol? 2390 DEC UDCRS 2400 DEC YPOS 2410 LDA NYP 2420 SEC 2430 SBC #16 2440 STA NYP 2450 TU1 JMP UPDN 2460 AA3 LDA UDSCRL 2470 BEQ NOUD 2480 DEC UDSCRL 2490 DEC YPOS 2500 JSR SCRUP 2510 NOUD RTS 2520 ; 2530 ;Move Down 2540 ; 2550 TDN CMP #13 2560 BNE TUR 2570 DN1 LDA UDCRS 2580 CMP #9 2590 BEQ AA4 ;scroll? 2600 INC UDCRS 2610 INC YPOS 2620 LDA NYP 2630 CLC 2640 ADC #16 2650 STA NYP 2660 JMP TU1 2670 AA4 LDA UDSCRL 2680 CMP #9 2690 BEQ NOUD 2700 INC UDSCRL 2710 JSR SCRDN 2720 INC YPOS 2730 RTS 2740 ;Up-Right 2750 TUR CMP #6 2760 BNE TDR 2770 JSR MVRT 2780 JMP UP1 2790 ;Down-Right 2800 TDR CMP #5 2810 BNE TUL 2820 JSR MVRT 2830 JMP DN1 2840 ;Up-Left 2850 TUL CMP #10 2860 BNE TDL 2870 JSR MVLF 2880 JMP UP1 2890 ;Down-Left 2900 TDL CMP #9 2910 BNE NST 2920 JSR MVLF 2930 JSR DN1 2940 NST RTS 2950 ; 2960 ;Move Up and Down 2970 ; 2980 UPDN JSR PLRMEM 2990 JSR ERSPLR 3000 LDA NYP 3010 STA PYP 3020 JMP PUTPLR 3030 ; 3040 ;Erase Player 3050 ; 3060 ERSPLR LDA #0 3070 LDY PYP 3080 LDX #15 3090 EML STA (IL),Y 3100 INY 3110 DEX 3120 BPL EML 3130 RTS 3140 ; 3150 ;Set up Player Memory 3160 ; 3170 PLRMEM LDA # >MYPMB 3180 STA IL+1 3190 LDA #0 3200 STA IL 3210 RTS 3220 ; 3230 ;Move Right 3240 ; 3250 MVRT LDA LRCRS 3260 CMP #39 3270 BNE AA1 3280 LDA #1 3290 STA LRADD 3300 LDA LRSCRL 3310 CMP #88 ;end scrn 3320 BEQ NOLR 3330 INC LRSCRL 3340 INC XPOS 3350 JSR SCRLR 3360 NOLR RTS 3370 AA1 INC LRCRS 3380 INC XPOS 3390 LDA PXP 3400 CLC 3410 ADC #4 3420 STA PXP 3430 MV1 LDA PXP 3440 STA HPOSP0 3450 RTS 3460 ; 3470 ;Move Left 3480 ; 3490 MVLF LDA LRCRS 3500 BEQ AA2 3510 DEC LRCRS 3520 LDA PXP 3530 SEC 3540 SBC #4 3550 STA PXP 3560 DEC XPOS 3570 JMP MV1 3580 AA2 LDA LRSCRL 3590 BEQ NOLR 3600 DEC LRSCRL 3610 DEC XPOS 3620 LDA #$FF 3630 STA LRADD 3640 JMP SCRLR 3650 ; 3660 ;Close IOCB 3670 ; 3680 CLOSE STX X1 3690 LDA #12 3700 STA ICCOM,X 3710 JSR CIOV 3720 LDX X1 3730 RTS 3740 ; 3750 ;Set up PMG 3760 ; 3770 SETPMG LDA #62 3780 STA SDMCTL 3790 LDA #1 3800 STA GPRIOR 3810 LDA #3 3820 STA GRACTL 3830 LDA # >PMB 3840 STA PMBASE 3850 LDA #$6C 3860 STA PCOLR0 3870 LDA #0 3880 STA SIZEP0 3890 STA SIZEP1 3900 RTS 3910 ; 3920 ;Clear P/M area 3930 ; 3940 CLRPM LDA # >MYPMB 3950 STA IL+1 3960 LDA #0 3970 STA IL 3980 CA2 LDY #0 3990 CA1 STA (IL),Y 4000 INY 4010 BNE CA1 4020 RTS 4030 ; 4040 ;Define Players 4050 ; 4060 DEFPLR LDY #$20 4070 STY NYP 4080 STY PYP 4090 JSR PLRMEM 4100 JSR PUTPLR 4110 LDA #$2E 4120 STA HPOSP0 4130 STA PXP 4140 RTS 4150 ; 4160 ;Put Player on screen 4170 ; 4180 PUTPLR LDY PYP 4190 LDX #0 4200 DF1 LDA PL0DEF,X 4210 STA (IL),Y 4220 INX 4230 INY 4240 CPX #16 4250 BNE DF1 4260 RTS 4270 ; 4280 ;Delay Loop 4290 ; 4300 DELAY LDX #0 4310 STX RTCLOK 4320 YLP1 LDX RTCLOK 4330 CPX #4 4340 BNE YLP1 4350 RTS 4360 ; 4370 DLICL .BYTE $92,$42,$04 4380 NBF .BYTE "000 " 4390 A2I .BYTE $40,$00,$20,$60 4400 PL0DEF .BYTE $FF,$C3,$C3,$C3 4410 .BYTE $C3,$C3,$C3,$C3 4420 .BYTE $C3,$C3,$C3,$C3 4430 .BYTE $C3,$C3,$C3,$FF 4440 P1DEF .BYTE $FC,$C6,$C6,$C6 4450 .BYTE $C6,$C6,$C6,$FC 4460 ; 4470 ;Show Char Set 4480 ; 4490 SHWCRS LDX SPRT 4500 INX 4510 TXA 4520 ASL A 4530 ASL A 4540 ASL A 4550 ASL A 4560 ASL A 4570 TAX 4580 DEX 4590 TXA 4600 LDY #31 4610 SH1 STA CHRLN1+4,Y 4620 STA CHRLN2+4,Y 4630 DEX 4640 TXA 4650 DEY 4660 BPL SH1 4670 RTS 4680 ; 4690 ;Init Memory 4700 ; 4710 INIT LDY #25 4720 LDA #0 4730 INILP STA INITAB,Y 4740 DEY 4750 BPL INILP 4760 ;set up 128 4770 LDY #0 4780 TYA 4790 STA M128L 4800 LDA # >SCNMEM 4810 STA M128H 4820 TLP LDA M128L,Y 4830 CLC 4840 ADC #128 4850 STA M128L+1,Y 4860 LDA M128H,Y 4870 ADC #0 4880 STA M128H+1,Y 4890 INY 4900 CPY #33 4910 BNE TLP 4920 JSR OPNKEY 4930 LDA # >CHSET 4940 STA CHBAS 4950 LDA #192 4960 STA NMIEN 4970 LDA # >DLI 4980 STA VDSLST+1 4990 LDA # SL1 5160 STA JL+1 5170 LDA # SCNMEM 5800 STA IL+1 5810 LDA #0 5820 STA IL 5830 LDX #9 ;10 pages 5840 CS1 LDY #$FF 5850 CSLP STA (IL),Y 5860 DEY 5870 CPY #$FF 5880 BNE CSLP 5890 INC IL+1 5900 DEX 5910 BPL CS1 5920 RTS 5930 ; 5940 ;Character Cursor 5950 ; 5960 CHRCRS LDY #$FF ;erase 5970 LDA #0 5980 CR1 INY 5990 STA P1MEM,Y 6000 CPY #$FF 6010 BNE CR1 6020 ;define playr 6030 LDY #200 6040 LDX #0 6050 CR2 LDA P1DEF,X 6060 STA P1MEM,Y 6070 INY 6080 INX 6090 CPX #8 6100 BNE CR2 6110 LDA #ICP 6120 STA HPOSP0+1 6130 STA PXP+1 6140 LDA #$4D 6150 STA PCOLR1 6160 RTS 6170 ; 6180 ;Move Character Cursor 6190 ; 6200 KSELECT LDX # CHRMES 6220 JSR PRINT 6230 MVCRS LDA STICK0 6240 CMP #$0F 6250 BNE BH 6260 JMP CKTRG2 6270 BH CMP #7 ;rt? 6280 BNE ML 6290 LDA CXPOS 6300 CMP #31 6310 BEQ BB 6320 INC CXPOS 6330 LDA PXP+1 6340 CLC 6350 ADC #4 6360 JMP BF 6370 BB LDA #0 6380 STA CXPOS 6390 LDA #ICP 6400 BNE BF 6410 ; 6420 ML CMP #11 ;lef? 6430 BNE MU 6440 LDA CXPOS 6450 BEQ BE 6460 DEC CXPOS 6470 LDA PXP+1 6480 SEC 6490 SBC #4 6500 BF STA PXP+1 6510 STA HPOSP0+1 6520 JMP SLOW 6530 BE LDA #31 6540 STA CXPOS 6550 LDA #187 6560 BNE BF 6570 ;up 6580 MU CMP #14 6590 BNE MD 6600 LDA SPRT 6610 BEQ BC 6620 DEC SPRT 6630 DOC JSR SHWCRS 6640 JMP SLOW 6650 BC LDA #3 6660 STA SPRT 6670 BNE DOC 6680 ; 6690 MD CMP #13 6700 BNE CKTRG2 6710 INC SPRT 6720 LDA SPRT 6730 CMP #4 6740 BNE DOC 6750 LDA #0 6760 STA SPRT 6770 BEQ DOC 6780 ; 6790 CKTRG2 LDA STRIG0 6800 BNE SJ 6810 JSR CLICK 6820 JSR DELAY 6830 CTR LDA STRIG0 6840 BEQ CTR 6850 LDX SPRT 6860 INX 6870 TXA 6880 ASL A 6890 ASL A 6900 ASL A 6910 ASL A 6920 ASL A 6930 CLC 6940 ADC CXPOS 6950 SEC 6960 SBC #32 6970 STA PCHR 6980 JMP DELAY 6990 SLOW JSR DELAY 7000 SJ JMP MVCRS 7010 ; 7020 ;Print Text x=lo,a=hi 7030 ; 7040 PRINT STX IL 7050 STA IL+1 7060 LDY #$FF 7070 MLP INY 7080 LDA (IL),Y 7090 STA TXLN+2,Y 7100 BPL MLP 7110 AND #$7F 7120 STA TXLN+2,Y 7130 RTS 7140 ; 7150 CHRMES .SBYTE "Choose character" 7160 COLMES .SBYTE "Color register 0-4" 7170 DRWMES .SBYTE "Draw mode" 7180 BLKMES .SBYTE "Block fill" 7190 FNTMES .SBYTE "Loading font" 7200 DEFMES .SBYTE "Define block" 7210 STPMES .SBYTE "Copy block" 7220 ; 7230 ;clearline 7240 ; 7250 CLRLN1 LDY #39 7260 LDA #0 7270 CN1 STA TXLN,Y 7280 DEY 7290 BPL CN1 7300 RTS 7310 ; 7320 ;Clear Text Window 7330 ; 7340 CLRTXT LDY #160 7350 LDA #0 7360 CTLP STA TXTWIN,Y 7370 DEY 7380 CPY #$FF 7390 BNE CTLP 7400 RTS 7410 ; 7420 ;colors 7430 ; 7440 COLORS LDX # COLMES 7460 JSR PRINT 7470 CKEY LDA CH 7480 LDX #$FF 7490 CMP #$FF 7500 BEQ CKEY 7510 CMP #$1C ;out 7520 BEQ CA 7530 LDY #4 7540 CMS CMP CLRKEY,Y 7550 BEQ CCC 7560 DEY 7570 BPL CMS 7580 BMI CKEY 7590 CA STX CH 7600 RTS 7610 CCC LDA CLREG,Y ;offset 7620 STA CREG ;save it 7630 JSR CLRLN1 7640 ;Change Register 7650 LDX # REGMES 7670 JSR PRINT 7680 JSR DISREG 7690 LDY CREG 7700 LDA COLOR0,Y 7710 PHA 7720 AND #$F0 7730 STA X2 7740 PLA 7750 AND #$0F 7760 STA X3 7770 CSTK LDA STICK0 7780 CMP #7 ;rt 7790 BNE CLF 7800 LDA X2 7810 CLC 7820 ADC #16 7830 STA X2 7840 JMP SCOLR 7850 CLF CMP #11 7860 BNE CUP 7870 LDA X2 7880 SEC 7890 SBC #16 7900 STA X2 7910 JMP SCOLR 7920 CUP CMP #14 7930 BNE CDN 7940 INC X3 7950 INC X3 7960 LDA X3 7970 AND #$0F 7980 STA X3 7990 JMP SCOLR 8000 CDN CMP #13 8010 BNE CSTG 8020 DEC X3 8030 DEC X3 8040 LDA X3 8050 AND #$0F 8060 STA X3 8070 SCOLR LDA X2 8080 ORA X3 8090 LDY CREG 8100 STA COLOR0,Y 8110 JSR DISREG 8120 JSR DELAY 8130 CSTG LDA STRIG0 8140 BNE CSTK 8150 CC2 LDA STRIG0 8160 BNE CC2 8170 RTS 8180 ; 8190 CLRKEY .BYTE $32,$1F,$1E,$1A,$18 8200 CLREG .BYTE 0,1,2,3,4 8210 ; 8220 ;Show X/Y Position 8230 ; 8240 SHWXY LDA XPOS 8250 LDX #10 8260 JSR RJUST 8270 LDA YPOS 8280 LDX #16 8290 JSR RJUST 8300 ; 8310 ;Show character 8320 ; 8330 LDY YPOS 8340 JSR WHER 8350 LDY XPOS 8360 LDA (JL),Y 8370 STA STSLN+22 8380 ; 8390 NOERM LDY #3 8400 NLP LDA NOM,Y 8410 STA STSLN+31,Y 8420 DEY 8430 BPL NLP 8440 RTS 8450 ; 8460 ;Right justify a number 8470 ; 8480 RJUST STA FR0 8490 LDA #0 8500 STA FR0+1 8510 TXA 8520 PHA 8530 JSR IFP 8540 JSR FASC 8550 LDY #2 8560 LDA #'0 8570 RJ1 STA NBF,Y 8580 DEY 8590 BPL RJ1 8600 LDY #$FF 8610 RJ2 INY 8620 LDA (INBUFF),Y 8630 BPL RJ2 8640 AND #$7F 8650 STA (INBUFF),Y 8660 INY 8670 TYA 8680 EOR #3 8690 AND #3 8700 TAX 8710 LDY #0 8720 RJ3 LDA (INBUFF),Y 8730 STA NBF,X 8740 INY 8750 INX 8760 CPX #3 8770 BNE RJ3 8780 LDY #3 8790 PLA 8800 TAX 8810 RJ4 LDA NBF,Y 8820 AND #$1F 8830 STA STSLN,X 8840 DEX 8850 DEY 8860 BPL RJ4 8870 RTS 8880 ; 8890 ;Set up Status Line 8900 ; 8910 SETSTS LDY #39 8920 LDA #0 8930 STLP STA STSLN,Y 8940 DEY 8950 BPL STLP 8960 LDY #24 8970 STLX LDA SLD,Y 8980 STA STSLN+5,Y 8990 DEY 9000 BPL STLX 9010 JMP SHWXY 9020 SLD .SBYTE "X:000 Y:000 CHAR: " 9030 .SBYTE "Error:" 9040 ; 9050 WHER LDA M128L,Y 9060 STA JL 9070 LDA M128H,Y 9080 STA JL+1 9090 RTS 9100 ; 9110 DRAW LDA #$FF 9120 STA NPTS 9130 LDA # >DRWMES 9140 LDX # BLKMES 9880 LDX # FNTMES 010740 JSR PRINT 010750 JSR GTNAME 010760 BCC FAA 010770 RTS 010780 FAA LDX #$10 010790 JSR CLOSE 010800 LDA #3 010810 STA ICCOM,X 010820 LDA # >FNAME 010830 STA ICBAH,X 010840 LDA # CHSET 010970 STA ICBAH,X 010980 LDA #0 010990 STA ICBAL,X 011000 LDA #4 011010 STA ICBLH,X 011020 LDA #0 011030 STA ICBLL,X 011040 JSR CIOV 011050 STY X2 011060 BMI IOERR 011070 LDX #$10 011080 JSR CLOSE 011090 JMP NOERM 011100 ; 011110 IOERR LDX #$10 011120 JSR CLOSE 011130 JSR ZFR0 011140 LDA X2 011150 LDX #34 011160 JSR RJUST 011170 JMP GETKEY 011180 ; 011190 ;Open keyboard 011200 ; 011210 OPNKEY LDX #$20 011220 JSR CLOSE 011230 LDA #3 011240 STA ICCOM,X 011250 LDA # >KDEV 011260 STA ICBAH,X 011270 LDA # LODMES 012510 LDX # FNAME 012630 STA ICBAH,X 012640 LDA # SCNMEM 012740 STA ICBAH,X 012750 LDA # SAVMES 012970 LDX # QUTMES 013020 LDX # SYSVBV 013150 JSR SETVBV 013160 JMP WARMSV 013170 NOQ RTS 013180 ; 013190 ;Clear Map 013200 CLRMAP LDA # >SURMES 013210 LDX # DEFMES 013680 LDX # STPMES 014200 LDX # KEYMES 014820 LDX #