0100 .OPT NO LIST 0110 ;------------------------ 0120 ; 0130 ;A Simple Text Editor 0140 ; 0150 ;By: Bryan Schappel 0160 ; 0170 ;Written for: DEEP BLUE C 0180 ; 0190 ;------------------------ 0200 EOLCHAR = 96 ;return char 0210 TCOMS = 31 ;# of commands-1 0220 ILEGS = 3 0230 TXTEND = $9F00 0240 ; 0250 *= 0 0260 PASS .= PASS+1 0270 .IF PASS=1 0280 .INCLUDE #D:SYSEQU.M65 0290 .ENDIF 0300 ; 0310 ;PRINT macro 0320 ; 0330 .MACRO PRINT 0340 LDA # <%1 0350 LDY # >%1 0360 JSR LNPRINT 0370 .ENDM 0380 ; 0390 ;BUMP macro 0400 ; 0410 .MACRO BUMP 0420 INC %1 0430 BNE @BMP 0440 INC %1+1 0450 @BMP 0460 .ENDM 0470 ; 0480 ;--------------- 0490 ;Zero Page Usage 0500 ;--------------- 0510 ; 0520 *= $80 0530 CURX 1 ;cursor Xpos 0540 CURY 1 ;cursor Ypos 0550 TEMP 2 0560 BOTSCR 2 0570 MEMPNT 2 0580 TEXTP 2 0590 CLOCK 1 0600 CURMEM 2 ;cur pos in mem 0610 FILE? 1 ;file flag 0620 MEMMAX 2 0630 MEMST 2 ;memory start 0640 OLDC 1 ;keycode 0650 OLDAC 1 ;ascii convert 0660 INVS 1 ;inverse flag 0670 CAPS 1 ;caps flag 0680 SAVXI 1 ;X save 0690 DLIDX 1 ;DLI index 0700 TOPLN 2 ;upper lft scr 0710 SCR 2 ;screen adr 0720 WLEN 1 ;word length 0730 LINES 1 ;# lines 0740 LO 1 ;Work Variables 0750 HI 1 ;for INTEGER to 0760 WORKL 1 ;BCD conversion 0770 WORKH 1 0780 BCD 4 0790 LO1 1 0800 HI1 1 0810 HNUM 2 ;hex buffer 0820 PAUSE? 1 ;VB pause 0830 CEND 1 ;input length 0840 IPUT 1 ;input flag 0850 IODIR 1 ;i/o direction 0860 CHARUNDR 1 ;char save 0870 INSMODE 1 0880 INSLEN 2 0890 FROM 2 0900 DEST 2 0910 MOVELEN 2 0920 ENDPOS 1 0930 INFLG 1 0940 CBAS 2 0950 GOBLEN 2 0960 CONFLAG 1 0970 SAVCUR 2 0980 SLEN 1 ;srch length 0990 FPOS 2 1000 PAGENUM 1 1010 LPLEN 1 1020 COLS 1 1030 .OPT LIST 1040 ENDZPG = * 1050 .OPT NO LIST 1060 ;---------------- 1070 ;Start of Program 1080 ;---------------- 1090 ; 1100 SCMEM = $BC00 1110 ; 1120 *= $9FFD ;start of code 1130 PSTART = * ;save addr. 1140 ; 1150 JMP INIT 1160 .INCLUDE #D:TEXT2.M65 1170 ;------------ 1180 ;Display List 1190 ;------------ 1200 ; 1210 DLIST .BYTE $70,$70,$70,$42 1220 .WORD SCMEM 1230 .BYTE $02,$02,$02,$02,$02 1240 .BYTE $02,$02,$02,$02,$02 1250 .BYTE $02,$02,$02,$02,$02 1260 .BYTE $02,$02,$02,$02,$B0 1270 .BYTE $C2 1280 .WORD MYMEM 1290 .BYTE $10,$02,$02,$41 1300 .WORD DLIST 1310 ;---------------- 1320 ;My Screen Memory 1330 ;---------------- 1340 ; 1350 MYMEM .SBYTE " COL: 02 ROW: 00 FREE: 00000 " 1360 LN1 .SBYTE " " 1370 LN2 .SBYTE " " 1380 COMLN = LN1+13 1390 ; 1400 ;Special Key Codes 1410 ; 1420 KEYS .BYTE $FF,$FE,$FD,$9F,$9E 1430 .BYTE $9D,$9C,$9B,$7F,$7E 1440 .BYTE $7D,$1F,$1E,$1D,$1C 1450 .BYTE $1B 1460 ; 1470 ;Convert Tables 1480 ; 1490 A2I .BYTE $40,$00,$20,$60 1500 I2A .BYTE $20,$40,$00,$60 1510 ; 1520 ;DLI Colors 1530 ; 1540 DLICL .BYTE $90,$02 1550 ; 1560 ;Text and Misc. Data 1570 ; 1580 LOADM .BYTE "LOAD FILE:",EOL 1590 SAVEM .BYTE "SAVE FILE:",EOL 1600 PRNTM .BYTE "PRINT DEV:",EOL 1610 FINDM .BYTE "FIND WHAT?",EOL 1620 REPLW .BYTE "REP. WITH:",EOL 1630 DIRMS .BYTE "DIRECTORY FOR DRIVE [1-2-3-4-8]?",EOL 1640 DIRPS .BYTE "DIRECTORY PAUSED - PRESS A KEY",EOL 1650 DIRFN .BYTE "DIRECTORY FINISHED - PRESS A KEY",EOL 1660 DIRER .BYTE "DIRECTORY ERROR",EOL 1670 REPLM .BYTE "REPLACE STRING - Y/N?",EOL 1680 QTEXT .BYTE "QUIT EDITOR",EOL 1690 ERASE .BYTE "ERASE MEMORY",EOL 1700 PTEXT .BYTE "PRINT TEXT",EOL 1710 SAVER .BYTE "SAVE I/O ERROR",EOL 1720 LOADR .BYTE "LOAD I/O ERROR",EOL 1730 PRTER .BYTE "PRINTER ERROR",EOL 1740 PAGEN .BYTE "Page # ",EOL 1750 SURE? .SBYTE "ARE YOU SURE - Y/N?" 1760 WORDTXT .BYTE "WORD COUNT: 00000",EOL 1770 EADR .BYTE "E:",EOL 1780 PDEV .BYTE "P:",EOL 1790 DIRNUMS .BYTE "12348" 1800 D1TXT .BYTE "D1:" 1810 DIRTXT .BYTE "D1:*.*",EOL 1820 ; 1830 ;Intro Text 1840 ; 1850 ITXT .BYTE 5,"T",26,"EDIT" 1860 .SBYTE " - a Program Text" 1870 .SBYTE " Editor" 1880 .BYTE $FF,$FF,14 1890 .SBYTE "Written By:" 1900 .BYTE $FF,$FF,11 1910 .SBYTE "Bryan P. Schappel" 1920 .BYTE $FF,$FF,7 1930 .SBYTE "(c) 1986 " 1940 .BYTE "ANALOG" 1950 .SBYTE " Computing" 1960 .BYTE $FF,$FF,12 1970 .SBYTE "- Press a Key -" 1980 .BYTE $FD ;end of text 1990 ; 2000 ;Illegal chars 2010 ; 2020 ILLEG .BYTE 0,96,123,125 2030 ; 2040 ;Command Text 2050 ; 2060 CMDTXT .BYTE 12,19,20,2,21,4 2070 .BYTE 3,16,17 2080 .BYTE $7E,28,29,30,31 2090 .BYTE $FE,$FF,1,23,26,18 2100 .BYTE 157,$7F,15,8,9,156 2110 .BYTE 5,6,11,24,14,13 2120 ; 2130 ;Command Addresses 2140 ; 2150 COMADR .WORD LOAD ;^L 2160 .WORD SAVE ;^S 2170 .WORD TOP ;^T 2180 .WORD BOTTOM ;^B 2190 .WORD UPSC ;^U 2200 .WORD DNSC ;^D 2210 .WORD CLEAR ;^C 2220 .WORD PRINT ;^P 2230 .WORD QUIT ;^Q 2240 .WORD CHRDEL ;DEL-BS 2250 .WORD UPLN ;^- 2260 .WORD DNLN ;^= 2270 .WORD GOLEFT ;^* 2280 .WORD GORIGHT ;^+ 2290 .WORD CTRLDEL ;^DEL-BS 2300 .WORD INSCHAR ;^INS 2310 .WORD BLINE ;^A 2320 .WORD UPWORD ;^W 2330 .WORD ENDLN ;^Z 2340 .WORD REVERSE ;^R 2350 .WORD ADD255 ;SH-INS 2360 .WORD ADDTAB ;TAB 2370 .WORD PARSE ;^O 2380 .WORD HOME ;^H 2390 .WORD IMODE ;^I 2400 .WORD DEL2CR ;SH-DEL 2410 .WORD KSPACE ;^E 2420 .WORD FIND ;^F 2430 .WORD CONVERT ;^K or ^CAPS 2440 .WORD DODIR ;^X 2450 .WORD CNTWORD ;^N 2460 .WORD MANUAL ;^M 2470 ; 2480 ;-------------------- 2490 ;Start of Subroutines 2500 ;-------------------- 2510 ; 2520 ;Clear Main Text Screen 2530 ; 2540 CLRSCR LDY #0 2550 TYA 2560 CLR1 STA SCMEM,Y 2570 STA SCMEM+$0100,Y 2580 STA SCMEM+$0200,Y 2590 INY 2600 BNE CLR1 2610 LDY #$1F 2620 CLR2 STA SCMEM+$0300,Y 2630 DEY 2640 BPL CLR2 2650 RTS 2660 ; 2670 ;Clear Entry Window 2680 ; 2690 CLRWIN LDY #79 2700 CLW LDA #0 2710 CLRW STA LN1,Y 2720 DEY 2730 BPL CLRW 2740 RTS 2750 ; 2760 ;Clear Other Line 2770 ; 2780 CLRW1 LDY #39 2790 BNE CLW 2800 ; 2810 ;Clear Qline 2820 ; 2830 CLRW2 LDY #39 2840 LDA #0 2850 CL2 STA LN2,Y 2860 DEY 2870 BPL CL2 2880 RTS 2890 ; 2900 ;Print line routine 2910 ; 2920 LNPRINT STA LNL+1 2930 STY LNL+2 2940 JSR CLRW1 2950 LDY #0 2960 LNL LDA $FFFF,Y 2970 CMP #EOL 2980 BEQ LNLV 2990 JSR ASC2IC 3000 STA LN1+2,Y 3010 INY 3020 BNE LNL 3030 LNLV RTS 3040 ; 3050 ;Get Key Routine 3060 ; 3070 GETKEY LDA CH 3080 CMP #$FF 3090 BEQ GETKEY 3100 GETKEY1 LDX #$FF 3110 STX CH 3120 STA OLDC 3130 LDX #$7E 3140 PHA 3150 CLKIT STX CONSOL 3160 LDA VCOUNT 3170 CLKWT CMP VCOUNT 3180 BEQ CLKWT 3190 DEX 3200 DEX 3210 BPL CLKIT 3220 PLA 3230 K0 TAY 3240 CPY #$C0 3250 BCC K1 3260 LDY #$9A 3270 K1 LDA (KEYDEF),Y 3280 STA OLDAC 3290 CMP #$80 3300 BEQ GETKEY 3310 CMP #$81 3320 BNE K2 3330 LDA INVS 3340 EOR #$80 3350 STA INVS 3360 JMP GETKEY 3370 K2 CMP #$82 3380 BNE K3 3390 LDA CAPS 3400 EOR #64 3410 STA CAPS 3420 JMP GETKEY 3430 K3 CMP #$83 3440 BNE K4 3450 LDA #64 3460 STA CAPS 3470 BNE GETKEY 3480 K4 CMP #$84 3490 BNE K5 3500 LDA #11 3510 STA OLDAC 3520 RTS 3530 K5 CMP #$85 3540 BEQ GETKEY 3550 LDA OLDC 3560 CMP #64 3570 BCS K6 3580 LDA OLDAC 3590 CMP #97 3600 BCC K6 3610 CMP #123 3620 BCS K6 3630 LDA CAPS 3640 BEQ K6 3650 ORA OLDC 3660 JMP K0 3670 K6 LDX #15 3680 K7 LDA KEYS,X 3690 CMP OLDAC 3700 BEQ K8 3710 DEX 3720 BPL K7 3730 K8 BEQ K9 3740 LDA OLDAC 3750 EOR INVS 3760 K9 STA OLDAC 3770 RTS 3780 ; 3790 ;Vertical Blank Cursor Handler 3800 ;Deferred Mode 3810 ; 3820 VBLANK1 LDY CURX 3830 INY 3840 STY LO 3850 JSR CALCNM 3860 LDA NBUF 3870 STA MYMEM+9 3880 LDA NBUF+1 3890 STA MYMEM+10 3900 LDA CURY 3910 STA LO 3920 JSR CALCNM 3930 LDA NBUF 3940 STA MYMEM+19 3950 LDA NBUF+1 3960 STA MYMEM+20 3970 VB1.X JMP XITVBV 3980 ; 3990 ;Display List Interrupt 4000 ; 4010 DLI PHA 4020 TXA 4030 PHA 4040 LDX DLIDX 4050 BNE GDLIC 4060 LDA INSMODE 4070 BEQ GDLIC 4080 LDA #$42 4090 BNE DLIAD 4100 GDLIC LDA DLICL,X 4110 DLIAD STA WSYNC 4120 STA COLPF2 4130 INC DLIDX 4140 PLA 4150 TAX 4160 PLA 4170 RTI 4180 ; 4190 ;Immediate Mode VBLANK 4200 ; 4210 VBLANK2 LDA #0 4220 STA DLIDX 4230 LDY #3 4240 VBL2.1 LDA COLOR0,Y 4250 STA COLPF0,Y 4260 DEY 4270 BPL VBL2.1 4280 LDA PAUSE? 4290 BNE VBL2.X 4300 INC CLOCK 4310 LDA CLOCK 4320 CMP #$10 4330 BNE VBI2.2 4340 LDA CURCHR+7 4350 EOR #$FF 4360 STA CURCHR+7 4370 LDA #0 4380 STA CLOCK 4390 VBI2.2 LDA IPUT 4400 BEQ VBL2.X 4410 LDY CEND 4420 LDA #63 4430 STA COMLN,Y 4440 VBL2.X JMP SYSVBV 4450 ; 4460 ;Erase File 4470 ; 4480 CLEAR LDA FILE? 4490 BEQ CLL 4500 PRINT ERASE 4510 JSR YESNO 4520 BCC CLEAR2 4530 CLL RTS 4540 CLEAR2 LDY #0 4550 STY FILE? 4560 STY MEMST 4570 INY 4580 STY CURY 4590 STY CURX 4600 JSR CLRSCR 4610 ; 4620 LDY MEMLO+1 4630 INY 4640 STY MEMST+1 4650 ; 4660 JSR ERASEMEM 4670 ; 4680 JMP CLRWIN 4690 ; 4700 ;YES/NO 4710 ; 4720 YESNO JSR CLRW2 4730 LDY #18 4740 YN1 LDA SURE?,Y 4750 STA LN2+2,Y 4760 DEY 4770 BPL YN1 4780 YN2 JSR GETKEY 4790 AND #$7F 4800 CMP #'[ 4810 BCC UPC 4820 SEC 4830 SBC #32 4840 UPC CMP #'Y 4850 BEQ GOTY 4860 JSR CLRWIN 4870 SEC 4880 RTS 4890 GOTY JSR CLRWIN 4900 CLC 4910 RTS 4920 ; 4930 ;Quit Editor 4940 ; 4950 QUIT PRINT QTEXT 4960 JSR YESNO 4970 BCC DOQUIT 4980 JMP CLRWIN 4990 DOQUIT PLA 5000 PLA 5010 LDA #7 5020 LDY # XITVBV 5040 JSR SETVBV 5050 LDA #6 5060 LDY # SYSVBV 5080 JSR SETVBV 5090 LDA #$40 5100 STA NMIEN 5110 LDX #$00 5120 LDA #12 5130 STA ICCOM 5140 JSR CIOV 5150 LDX #$00 5160 LDA #3 5170 STA ICCOM 5180 LDA #12 5190 STA AUX1 5200 STX AUX2 5210 LDA # EADR 5240 STA ICBAH 5250 JSR CIOV 5260 JMP (DOSVEC) 5270 ; 5280 ;Go To TOP of text 5290 ; 5300 TOP LDA MEMST 5310 STA CURMEM 5320 STA TOPLN 5330 LDA MEMST+1 5340 STA CURMEM+1 5350 STA TOPLN+1 5360 JMP SCRDRAW 5370 ; 5380 ;****************************** 5390 ;INCLUDE Subroutines 5400 ; 5410 .INCLUDE #D:TEXT3.M65 5420 .INCLUDE #D:TEXT4.M65 5430 ; 5440 ; 5450 ;Convert ATASCII to ICODE 5460 ; 5470 ASC2IC JSR BITER 5480 ORA A2I,X 5490 LDX SAVXI 5500 RTS 5510 ; 5520 ;Convert ICODE to ATASCII 5530 ; 5540 IC2ASC JSR BITER 5550 ORA I2A,X 5560 LDX SAVXI 5570 RTS 5580 ; 5590 ;Ready Character 5600 ; 5610 BITER PHA 5620 ROL A 5630 ROL A 5640 ROL A 5650 ROL A 5660 AND #3 5670 STX SAVXI 5680 TAX 5690 PLA 5700 AND #$9F 5710 RTS 5720 ; 5730 ;############################# 5740 ;Program Execution Starts Here 5750 ;############################# 5760 ; 5770 INIT CLD 5780 LDA #0 5790 STA CLOCK 5800 STA INSMODE 5810 STA INVS 5820 STA PAUSE? 5830 STA IPUT 5840 STA CAPS 5850 LDA #$22 5860 STA SDMCTL 5870 LDA #7 5880 LDY # VBLANK1 5900 JSR SETVBV 5910 LDA #6 5920 LDY # VBLANK2 5940 JSR SETVBV 5950 LDA # DLI 5980 STA VDSLST+1 5990 LDA #$C0 6000 STA NMIEN 6010 LDA #4 6020 STA COLOR2 6030 LDA # DLIST 6060 STA SDLSTL+1 6070 JSR CLEAR2 6080 LDA KEYDEF 6090 ORA KEYDEF+1 6100 BNE INSET 6110 LDA #$FE 6120 STA KEYDEF 6130 STA KEYDEF+1 6140 ; 6150 INSET LDA # >MYSET 6160 STA CHBAS 6170 GOINT JSR INTRO ;call intro 6180 ; 6190 MAIN LDY #0 6200 STY INFLG 6210 LDA (CURMEM),Y 6220 STA CHARUNDR 6230 BPL BLN 6240 DEC INFLG 6250 BLN AND #$7F 6260 STA CBAS 6270 STY CBAS+1 6280 ASL CBAS 6290 ROL CBAS+1 6300 ASL CBAS 6310 ROL CBAS+1 6320 ASL CBAS 6330 ROL CBAS+1 6340 LDA CBAS+1 6350 CLC 6360 ADC # >MYSET 6370 STA CBAS+1 6380 LDY #7 6390 CCHRM LDA (CBAS),Y 6400 EOR INFLG 6410 STA CURCHR,Y 6420 DEY 6430 BPL CCHRM 6440 MAIN2 JSR SHOFREE 6450 LDY #0 6460 LDA #$7F 6470 STA (CURMEM),Y 6480 JSR SCRDRAW 6490 WAITM LDA CH 6500 CMP #$FF 6510 BEQ MAIN2 6520 ; 6530 HAVKEY JSR GETKEY1 6540 TAX ;SAVE KEY 6550 LDY #0 6560 STY INFLG 6570 LDA CHARUNDR 6580 STA (CURMEM),Y 6590 TXA ;RESTORE KEY 6600 LDY #8 6610 STY CONSOL 6620 LDY CONSOL 6630 CPY #5 6640 BNE HAVK1 6650 TXA 6660 BPL CTRAND 6670 LDY #$80 6680 STY INFLG 6690 CTRAND AND #$7F 6700 CMP #'a 6710 BCC CHKRN 6720 CMP #'z+1 6730 BCS CHKRN 6740 SEC 6750 SBC #$20 6760 CHKRN CMP #'A 6770 BCC HAVK1 6780 CMP #'Z+1 6790 BCS HAVK1 6800 SEC 6810 SBC #$40 6820 EOR INFLG 6830 JMP NOTEOL 6840 HAVK1 LDY #TCOMS ;# COMMANDS 6850 TXA 6860 AND #$7F 6870 CMP #28 6880 BCC CMDCK 6890 TXA 6900 CMDCK CMP CMDTXT,Y 6910 BEQ GOTCOM 6920 DEY 6930 BPL CMDCK 6940 BMI JUSTCHR 6950 GOTCOM TYA 6960 ASL A 6970 TAY 6980 LDA COMADR,Y 6990 STA CMDJSR+1 7000 LDA COMADR+1,Y 7010 STA CMDJSR+2 7020 CMDJSR JSR $FFFF 7030 LDA #0 7040 STA IPUT 7050 JSR CLRWIN 7060 JSR SCRDRAW 7070 JMP MAIN 7080 ; 7090 JUSTCHR LDA FILE? 7100 BNE JCHAR 7110 INC FILE? 7120 JCHAR LDA OLDAC 7130 CMP #EOL 7140 BEQ JCH2 7150 AND #$7F 7160 LDY #ILEGS 7170 JCHT CMP ILLEG,Y 7180 BEQ JCHI 7190 DEY 7200 BPL JCHT 7210 BMI JCHTST 7220 JCHI JMP MAIN 7230 JCHTST CMP #$20 7240 BCC JCHI 7250 JCH2 LDA OLDAC 7260 CMP #EOL 7270 BNE NOTEOL 7280 LDA #EOLCHAR 7290 NOTEOL PHA 7300 LDY #0 7310 LDA (CURMEM),Y 7320 CMP #EOLCHAR 7330 BEQ DOINS 7340 LDA INSMODE 7350 BEQ NOTINS 7360 DOINS JSR INSCHAR 7370 NOTINS PLA 7380 JSR ASC2IC 7390 LDY #0 7400 STA (CURMEM),Y 7410 JSR SCRDRAW 7420 SEC 7430 LDA CURMEM 7440 SBC MEMPNT 7450 STA TEMP 7460 LDA CURMEM+1 7470 SBC MEMPNT+1 7480 ORA TEMP 7490 BCC INCCUR 7500 LDA CURMEM 7510 ADC #0 7520 STA MEMPNT 7530 LDA CURMEM+1 7540 ADC #0 7550 STA MEMPNT+1 7560 ; 7570 INCCUR BUMP CURMEM 7580 JSR CHECKMEM 7590 JMP MAIN 7600 ; 7610 ;Check Memory Routine 7620 ; 7630 CHECKMEM JSR CHECKM2 7640 SEC 7650 LDA CURMEM 7660 SBC TOPLN 7670 LDA CURMEM+1 7680 SBC TOPLN+1 7690 BCS OK1 7700 SEC 7710 LDA TOPLN 7720 SBC MEMST 7730 STA TEMP 7740 SBC MEMST+1 7750 ORA TEMP 7760 BEQ OK1 7770 LDA CURMEM 7780 STA TOPLN 7790 LDA CURMEM+1 7800 STA TOPLN+1 7810 JSR SCRDRAW 7820 OK1 SEC 7830 LDA BOTSCR 7840 SBC CURMEM 7850 STA TEXTP 7860 LDA BOTSCR+1 7870 SBC CURMEM+1 7880 STA TEXTP+1 7890 ORA TEXTP 7900 BEQ EQA 7910 BCS OK2 7920 EQA CLC 7930 LDA TOPLN 7940 ADC LENTABLE 7950 STA TOPLN 7960 LDA TOPLN+1 7970 ADC #0 7980 STA TOPLN+1 7990 REF JSR SCRDRAW 8000 JMP OK1 8010 OK2 RTS 8020 CHECKM2 SEC 8030 LDA MEMPNT 8040 SBC # TXTEND 8080 ORA TEMP 8090 BCC CK3 8100 LDA # TXTEND 8130 STA MEMPNT+1 8140 CK3 SEC 8150 LDA CURMEM 8160 SBC MEMST 8170 STA TEMP 8180 LDA CURMEM+1 8190 SBC MEMST+1 8200 ORA TEMP 8210 BCS INRANGE 8220 LDA MEMST 8230 STA CURMEM 8240 LDA MEMST+1 8250 STA CURMEM+1 8260 RTS 8270 INRANGE SEC 8280 LDA CURMEM 8290 SBC MEMPNT 8300 STA TEMP 8310 LDA CURMEM+1 8320 SBC MEMPNT+1 8330 ORA TEMP 8340 BCS OUTRANGE 8350 RTS 8360 OUTRANGE LDA MEMPNT 8370 STA CURMEM 8380 LDA MEMPNT+1 8390 STA CURMEM+1 8400 RTS 8410 ; 8420 ;Erase Buffer 8430 ; 8440 ERMYBF LDY #84 8450 LDA #$20 8460 ERMB STA MYBUF,Y 8470 DEY 8480 BPL ERMB 8490 RTS 8500 ; 8510 ;2 BYTE BINARY INTEGER TO A 8520 ;4 BYTE BINARY CODED DECIMAL 8530 ;NUMBER. 8540 ; 8550 INT2FP LDA LO1 8560 STA WORKL 8570 LDA HI1 8580 STA WORKH 8590 LDA #0 8600 STA BCD 8610 STA BCD+1 8620 STA BCD+2 8630 STA BCD+3 8640 SED 8650 LDY #$10 8660 IFP1 ASL WORKL 8670 ROL WORKH 8680 LDX #$03 8690 IFP2 LDA BCD,X 8700 ADC BCD,X 8710 STA BCD,X 8720 DEX 8730 BNE IFP2 8740 DEY 8750 BNE IFP1 8760 CLD 8770 RTS 8780 ; 8790 ;Convert BCD to Internal Code 8800 ; 8810 CONBCD JSR INT2FP 8820 LDY #0 8830 LDX #0 8840 CONB LDA BCD+1,Y 8850 JSR BIN2HEX 8860 LDA HNUM 8870 STA ABUF,X 8880 LDA HNUM+1 8890 STA ABUF+1,X 8900 INX 8910 INX 8920 INY 8930 CPY #3 8940 BNE CONB 8950 LDY #5 8960 CONB3 LDA ABUF,Y 8970 CLC 8980 ADC #16 8990 STA ABUF,Y 9000 DEY 9010 BPL CONB3 9020 RTS 9030 ; 9040 ;Convert BCD to 2 byte number 9050 ; 9060 BIN2HEX PHA 9070 AND #$0F 9080 STA HNUM+1 9090 PLA 9100 LSR A 9110 LSR A 9120 LSR A 9130 LSR A 9140 STA HNUM 9150 RTS 9160 ; 9170 ;Convert 1 byte binary number 9180 ;to internal code 9190 ; 9200 CALCNM LDA LO 9210 LDY #0 9220 STY HI 9230 STY NBUF+2 9240 CMP #200 9250 BCC TRY100 9260 LDY #2 9270 STA NBUF+2 9280 SEC 9290 SBC #200 9300 JMP CLC1 9310 TRY100 CMP #100 9320 BCC CLC1 9330 LDY #1 9340 STY NBUF+2 9350 SEC 9360 SBC #100 9370 CLC1 CMP #10 9380 BCC CLCDN 9390 SEC 9400 SBC #10 9410 INC HI 9420 BNE CLC1 9430 CLCDN CLC 9440 ADC #$10 9450 STA NBUF+1 9460 LDA HI 9470 CLC 9480 ADC #$10 9490 STA NBUF 9500 LDA NBUF+2 9510 CLC 9520 ADC #$10 9530 STA NBUF+2 9540 RTS 9550 ; 9560 ;Introduction 9570 ; 9580 INTRO LDX #2 9590 LDA #$EA ;a NOP 9600 INTRO1 STA GOINT,X 9610 DEX 9620 BPL INTRO1 9630 LDA # <[SCMEM+40] 9640 STA SCR 9650 LDA # >[SCMEM+40] 9660 STA SCR+1 9670 PTITL INX 9680 LDA ITXT,X 9690 TAY 9700 CMP #$FF 9710 BEQ IADD40 9720 P2 INX 9730 LDA ITXT,X 9740 CMP #$FF 9750 BEQ IADD40 9760 CMP #$FD 9770 BEQ IPDN 9780 STA (SCR),Y 9790 INY 9800 BNE P2 9810 IADD40 LDA SCR 9820 CLC 9830 ADC #40 9840 STA SCR 9850 LDA SCR+1 9860 ADC #0 9870 STA SCR+1 9880 BNE PTITL 9890 IPDN JMP GETKEY 9900 ; 9910 ;This routine shows the number 9920 ;of free bytes left in text 9930 ;memory, it puts the # of bytes 9940 ;on the MYMEM+30 line. 9950 ; 9960 SHOFREE LDA # TXTEND 010010 SBC MEMPNT+1 010020 STA HI1 010030 JSR CONBCD 010040 LDY #4 010050 SHOFREE1 LDA ABUF+1,Y 010060 STA MYMEM+30,Y 010070 DEY 010080 BPL SHOFREE1 010090 RTS 010100 ; 010110 ;Work Buffers 010120 ; 010130 .OPT LIST 010140 LENTABLE 25 010150 MYBUF 85 010160 ABUF 6 010170 NBUF 3 010180 SBUF 45 010190 FILNAM 30 010200 ENDMYPG = *-1 010210 .OPT NO LIST 010220 ; 010230 ;Set Run Address 010240 ; 010250 *= RUNAD 010260 .WORD PSTART 010270 .END