S-C DocuMentor Applesoft
SAVE S.F5BA
1010 *--------------------------------
1020 * TABLE OF COS(90*X/16 DEGREES)*$100 - 1
1030 * WITH ONE BYTE PRECISION, X=0 TO 16:
1040 *--------------------------------
1050 COSINE.TABLE
F5BA- FF FE FA
F5BD- F4 EC E1
F5C0- D4 C5 1060 .HS FFFEFAF4ECE1D4C5
F5C2- B4 A1 8D
F5C5- 78 61 49
F5C8- 31 18 1070 .HS B4A18D7861493118
F5CA- FF 1080 .HS FF
1090 *--------------------------------
1100 * HFIND -- CALCULATES CURRENT POSITION OF HI-RES CURSOR
1110 * (NOT CALLED BY ANY APPLESOFT ROUTINE)
1120 *
1130 * CALCULATE Y-COORD FROM GBASL,H
1140 * AND X-COORD FROM HORIZ AND HMASK
1150 *--------------------------------
F5CB- A5 26 1160 HFIND LDA MON.GBASL GBASL = EABAB000
F5CD- 0A 1170 ASL E INTO CARRY
F5CE- A5 27 1180 LDA MON.GBASH GBASH = PPPFGHCD
F5D0- 29 03 1190 AND #3 000000CD
F5D2- 2A 1200 ROL 00000CDE
F5D3- 05 26 1210 ORA MON.GBASL EABABCDE
F5D5- 0A 1220 ASL ABABCDE0
F5D6- 0A 1230 ASL BABCDE00
F5D7- 0A 1240 ASL ABCDE000
F5D8- 85 E2 1250 STA HGR.Y ALL BUT FGH
F5DA- A5 27 1260 LDA MON.GBASH PPPFGHCD
F5DC- 4A 1270 LSR 0PPPFGHC
F5DD- 4A 1280 LSR 00PPPFGH
F5DE- 29 07 1290 AND #7 00000FGH
F5E0- 05 E2 1300 ORA HGR.Y ABCDEFGH
F5E2- 85 E2 1310 STA HGR.Y THAT TAKES CARE OF Y-COORDINATE!
F5E4- A5 E5 1320 LDA HGR.HORIZ X = 7*HORIZ + BIT POS. IN HMASK
F5E6- 0A 1330 ASL MULTIPLY BY 7
F5E7- 65 E5 1340 ADC HGR.HORIZ 3* SO FAR
F5E9- 0A 1350 ASL 6*
F5EA- AA 1360 TAX SINCE 7* MIGHT NOT FIT IN 1 BYTE,
1370 * WAIT TILL LATER FOR LAST ADD
F5EB- CA 1380 DEX
F5EC- A5 30 1390 LDA MON.HMASK NOW FIND BIT POSITION IN HMASK
F5EE- 29 7F 1400 AND #$7F ONLY LOOK AT LOW SEVEN
F5F0- E8 1410 .1 INX COUNT A SHIFT
F5F1- 4A 1420 LSR
F5F2- D0 FC 1430 BNE .1 STILL IN THERE
F5F4- 85 E1 1440 STA HGR.X+1 ZERO TO HI-BYTE
F5F6- 8A 1450 TXA 6*HORIZ+LOG2(HMASK)
F5F7- 18 1460 CLC ADD HORIZ ONE MORE TIME
F5F8- 65 E5 1470 ADC HGR.HORIZ 7*HORIZ+LOG2(HMASK)
F5FA- 90 02 1480 BCC .2 UPPER BYTE = 0
F5FC- E6 E1 1490 INC HGR.X+1 UPPER BYTE = 1
F5FE- 85 E0 1500 .2 STA HGR.X STORE LOWER BYTE
F600- 60 1510 RTS.22 RTS
1520 *--------------------------------
1530 * DRAW A SHAPE
1540 *
1550 * (Y,X) = SHAPE STARTING ADDRESS
1560 * (A) = ROTATION (0-3F)
1570 *--------------------------------
1580 * APPLESOFT DOES NOT CALL DRAW0
1590 *--------------------------------
F601- 86 1A 1600 DRAW0 STX HGR.SHAPE SAVE SHAPE ADDRESS
F603- 84 1B 1610 STY HGR.SHAPE+1
1620 *--------------------------------
1630 * APPLESOFT ENTERS HERE
1640 *--------------------------------
F605- AA 1650 DRAW1 TAX SAVE ROTATION (0-$3F)
F606- 4A 1660 LSR DIVIDE ROTATION BY 16 TO GET
F607- 4A 1670 LSR QUADRANT (0=UP, 1=RT, 2=DWN, 3=LFT)
F608- 4A 1680 LSR
F609- 4A 1690 LSR
F60A- 85 D3 1700 STA HGR.QUADRANT
F60C- 8A 1710 TXA USE LOW 4 BITS OF ROTATION TO INDEX
F60D- 29 0F 1720 AND #$0F THE TRIG TABLE
F60F- AA 1730 TAX
F610- BC BA F5 1740 LDY COSINE.TABLE,X SAVE COSINE IN HGR.DX
F613- 84 D0 1750 STY HGR.DX
F615- 49 0F 1760 EOR #$F AND SINE IN DY
F617- AA 1770 TAX
F618- BC BB F5 1780 LDY COSINE.TABLE+1,X
F61B- C8 1790 INY
F61C- 84 D2 1800 STY HGR.DY
F61E- A4 E5 1810 LDY HGR.HORIZ INDEX FROM GBASL,H TO BYTE WE'RE IN
F620- A2 00 1820 LDX #0
F622- 86 EA 1830 STX HGR.COLLISIONS CLEAR COLLISION COUNTER
F624- A1 1A 1840 LDA (HGR.SHAPE,X) GET FIRST BYTE OF SHAPE DEFN
F626- 85 D1 1850 .1 STA HGR.DX+1 KEEP SHAPE BYTE IN HGR.DX+1
F628- A2 80 1860 LDX #$80 INITIAL VALUES FOR FRACTIONAL VECTORS
F62A- 86 D4 1870 STX HGR.E .5 IN COSINE COMPONENT
F62C- 86 D5 1880 STX HGR.E+1 .5 IN SINE COMPONENT
F62E- A6 E7 1890 LDX HGR.SCALE SCALE FACTOR
F630- A5 D4 1900 .2 LDA HGR.E ADD COSINE VALUE TO X-VALUE
F632- 38 1910 SEC IF >= 1, THEN DRAW
F633- 65 D0 1920 ADC HGR.DX
F635- 85 D4 1930 STA HGR.E ONLY SAVE FRACTIONAL PART
F637- 90 04 1940 BCC .3 NO INTEGRAL PART
F639- 20 B3 F4 1950 JSR LRUD1 TIME TO PLOT COSINE COMPONENT
F63C- 18 1960 CLC
F63D- A5 D5 1970 .3 LDA HGR.E+1 ADD SINE VALUE TO Y-VALUE
F63F- 65 D2 1980 ADC HGR.DY IF >= 1, THEN DRAW
F641- 85 D5 1990 STA HGR.E+1 ONLY SAVE FRACTIONAL PART
F643- 90 03 2000 BCC .4 NO INTEGRAL PART
F645- 20 B4 F4 2010 JSR LRUD2 TIME TO PLOT SINE COMPONENT
F648- CA 2020 .4 DEX LOOP ON SCALE FACTOR.
F649- D0 E5 2030 BNE .2 STILL ON SAME SHAPE ITEM
F64B- A5 D1 2040 LDA HGR.DX+1 GET NEXT SHAPE ITEM
F64D- 4A 2050 LSR NEXT 3 BIT VECTOR
F64E- 4A 2060 LSR
F64F- 4A 2070 LSR
F650- D0 D4 2080 BNE .1 MORE IN THIS SHAPE BYTE
F652- E6 1A 2090 INC HGR.SHAPE GO TO NEXT SHAPE BYTE
F654- D0 02 2100 BNE .5
F656- E6 1B 2110 INC HGR.SHAPE+1
F658- A1 1A 2120 .5 LDA (HGR.SHAPE,X) NEXT BYTE OF SHAPE DEFINITION
F65A- D0 CA 2130 BNE .1 PROCESS IF NOT ZERO
F65C- 60 2140 RTS FINISHED
2150 *--------------------------------
2160 * XDRAW A SHAPE (SAME AS DRAW, EXCEPT TOGGLES SCREEN)
2170 *
2180 * (Y,X) = SHAPE STARTING ADDRESS
2190 * (A) = ROTATION (0-3F)
2200 *--------------------------------
2210 * APPLESOFT DOES NOT CALL XDRAW0
2220 *--------------------------------
F65D- 86 1A 2230 XDRAW0 STX HGR.SHAPE SAVE SHAPE ADDRESS
F65F- 84 1B 2240 STY HGR.SHAPE+1
2250 *--------------------------------
2260 * APPLESOFT ENTERS HERE
2270 *--------------------------------
F661- AA 2280 XDRAW1 TAX SAVE ROTATION (0-$3F)
F662- 4A 2290 LSR DIVIDE ROTATION BY 16 TO GET
F663- 4A 2300 LSR QUADRANT (0=UP, 1=RT, 2=DWN, 3=LFT)
F664- 4A 2310 LSR
F665- 4A 2320 LSR
F666- 85 D3 2330 STA HGR.QUADRANT
F668- 8A 2340 TXA USE LOW 4 BITS OF ROTATION TO INDEX
F669- 29 0F 2350 AND #$0F THE TRIG TABLE
F66B- AA 2360 TAX
F66C- BC BA F5 2370 LDY COSINE.TABLE,X SAVE COSINE IN HGR.DX
F66F- 84 D0 2380 STY HGR.DX
F671- 49 0F 2390 EOR #$F AND SINE IN DY
F673- AA 2400 TAX
F674- BC BB F5 2410 LDY COSINE.TABLE+1,X
F677- C8 2420 INY
F678- 84 D2 2430 STY HGR.DY
F67A- A4 E5 2440 LDY HGR.HORIZ INDEX FROM GBASL,H TO BYTE WE'RE IN
F67C- A2 00 2450 LDX #0
F67E- 86 EA 2460 STX HGR.COLLISIONS CLEAR COLLISION COUNTER
F680- A1 1A 2470 LDA (HGR.SHAPE,X) GET FIRST BYTE OF SHAPE DEFN
F682- 85 D1 2480 .1 STA HGR.DX+1 KEEP SHAPE BYTE IN HGR.DX+1
F684- A2 80 2490 LDX #$80 INITIAL VALUES FOR FRACTIONAL VECTORS
F686- 86 D4 2500 STX HGR.E .5 IN COSINE COMPONENT
F688- 86 D5 2510 STX HGR.E+1 .5 IN SINE COMPONENT
F68A- A6 E7 2520 LDX HGR.SCALE SCALE FACTOR
F68C- A5 D4 2530 .2 LDA HGR.E ADD COSINE VALUE TO X-VALUE
F68E- 38 2540 SEC IF >= 1, THEN DRAW
F68F- 65 D0 2550 ADC HGR.DX
F691- 85 D4 2560 STA HGR.E ONLY SAVE FRACTIONAL PART
F693- 90 04 2570 BCC .3 NO INTEGRAL PART
F695- 20 9C F4 2580 JSR LRUDX1 TIME TO PLOT COSINE COMPONENT
F698- 18 2590 CLC
F699- A5 D5 2600 .3 LDA HGR.E+1 ADD SINE VALUE TO Y-VALUE
F69B- 65 D2 2610 ADC HGR.DY IF >= 1, THEN DRAW
F69D- 85 D5 2620 STA HGR.E+1 ONLY SAVE FRACTIONAL PART
F69F- 90 03 2630 BCC .4 NO INTEGRAL PART
F6A1- 20 9D F4 2640 JSR LRUDX2 TIME TO PLOT SINE COMPONENT
F6A4- CA 2650 .4 DEX LOOP ON SCALE FACTOR.
F6A5- D0 E5 2660 BNE .2 STILL ON SAME SHAPE ITEM
F6A7- A5 D1 2670 LDA HGR.DX+1 GET NEXT SHAPE ITEM
F6A9- 4A 2680 LSR NEXT 3 BIT VECTOR
F6AA- 4A 2690 LSR
F6AB- 4A 2700 LSR
F6AC- D0 D4 2710 BNE .1 MORE IN THIS SHAPE BYTE
F6AE- E6 1A 2720 INC HGR.SHAPE GO TO NEXT SHAPE BYTE
F6B0- D0 02 2730 BNE .5
F6B2- E6 1B 2740 INC HGR.SHAPE+1
F6B4- A1 1A 2750 .5 LDA (HGR.SHAPE,X) NEXT BYTE OF SHAPE DEFINITION
F6B6- D0 CA 2760 BNE .1 PROCESS IF NOT ZERO
F6B8- 60 2770 RTS FINISHED
2780 *--------------------------------
2790 * GET HI-RES PLOTTING COORDINATES (0-279,0-191) FROM
2800 * TXTPTR. LEAVE REGISTERS SET UP FOR HPOSN:
2810 * (Y,X)=X-COORD
2820 * (A) =Y-COORD
2830 *--------------------------------
F6B9- 20 67 DD 2840 HFNS JSR FRMNUM EVALUATE EXPRESSION, MUST BE NUMERIC
F6BC- 20 52 E7 2850 JSR GETADR CONVERT TO 2-BYTE INTEGER IN LINNUM
F6BF- A4 51 2860 LDY LINNUM+1 GET HORIZ COOR IN X,Y
F6C1- A6 50 2870 LDX LINNUM
F6C3- C0 01 2880 CPY /280 MAKE SURE IT IS < 280
F6C5- 90 06 2890 BCC .1 IN RANGE
F6C7- D0 1D 2900 BNE GGERR
F6C9- E0 18 2910 CPX #280
F6CB- B0 19 2920 BCS GGERR
F6CD- 8A 2930 .1 TXA SAVE HORIZ COOR ON STACK
F6CE- 48 2940 PHA
F6CF- 98 2950 TYA
F6D0- 48 2960 PHA
F6D1- A9 2C 2970 LDA #',' REQUIRE A COMMA
F6D3- 20 C0 DE 2980 JSR SYNCHR
F6D6- 20 F8 E6 2990 JSR GETBYT EVAL EXP TO SINGLE BYTE IN X-REG
F6D9- E0 C0 3000 CPX #192 CHECK FOR RANGE
F6DB- B0 09 3010 BCS GGERR TOO BIG
F6DD- 86 9D 3020 STX FAC SAVE Y-COORD
F6DF- 68 3030 PLA RETRIEVE HORIZONTAL COORDINATE
F6E0- A8 3040 TAY
F6E1- 68 3050 PLA
F6E2- AA 3060 TAX
F6E3- A5 9D 3070 LDA FAC AND VERTICAL COORDINATE
F6E5- 60 3080 RTS
3090 *--------------------------------
F6E6- 4C 06 F2 3100 GGERR JMP GOERR ILLEGAL QUANTITY ERROR
3110 *--------------------------------
3120 * "HCOLOR=" STATEMENT
3130 *--------------------------------
F6E9- 20 F8 E6 3140 HCOLOR JSR GETBYT EVAL EXP TO SINGLE BYTE IN X
F6EC- E0 08 3150 CPX #8 VALUE MUST BE 0-7
F6EE- B0 F6 3160 BCS GGERR TOO BIG
F6F0- BD F6 F6 3170 LDA COLORTBL,X GET COLOR PATTERN
F6F3- 85 E4 3180 STA HGR.COLOR
F6F5- 60 3190 RTS.23 RTS
3200 *--------------------------------
F6F6- 00 2A 55
F6F9- 7F 80 AA
F6FC- D5 FF 3210 COLORTBL .HS 002A557F80AAD5FF
3220 *--------------------------------
3230 * "HPLOT" STATEMENT
3240 *
3250 * HPLOT X,Y
3260 * HPLOT TO X,Y
3270 * HPLOT X1,Y1 TO X2,Y2
3280 *--------------------------------
F6FE- C9 C1 3290 HPLOT CMP #TOKEN.TO "PLOT TO" FORM?
F700- F0 0D 3300 BEQ .2 YES, START FROM CURRENT LOCATION
F702- 20 B9 F6 3310 JSR HFNS NO, GET STARTING POINT OF LINE
F705- 20 57 F4 3320 JSR HPLOT0 PLOT THE POINT, AND SET UP FOR
3330 * DRAWING A LINE FROM THAT POINT
F708- 20 B7 00 3340 .1 JSR CHRGOT CHARACTER AT END OF EXPRESSION
F70B- C9 C1 3350 CMP #TOKEN.TO IS A LINE SPECIFIED?
F70D- D0 E6 3360 BNE RTS.23 NO, EXIT
F70F- 20 C0 DE 3370 .2 JSR SYNCHR YES. ADV. TXTPTR (WHY NOT CHRGET)
F712- 20 B9 F6 3380 JSR HFNS GET COORDINATES OF LINE END
F715- 84 9D 3390 STY DSCTMP SET UP FOR LINE
F717- A8 3400 TAY
F718- 8A 3410 TXA
F719- A6 9D 3420 LDX DSCTMP
F71B- 20 3A F5 3430 JSR HGLIN PLOT LINE
F71E- 4C 08 F7 3440 JMP .1 LOOP TILL NO MORE "TO" PHRASES
3450 *--------------------------------
3460 * "ROT=" STATEMENT
3470 *--------------------------------
F721- 20 F8 E6 3480 ROT JSR GETBYT EVAL EXP TO A BYTE IN X-REG
F724- 86 F9 3490 STX HGR.ROTATION
F726- 60 3500 RTS
3510 *--------------------------------
3520 * "SCALE=" STATEMENT
3530 *--------------------------------
F727- 20 F8 E6 3540 SCALE JSR GETBYT EVAL EXP TO A BYTE IN X-REG
F72A- 86 E7 3550 STX HGR.SCALE
F72C- 60 3560 RTS
3570 *--------------------------------
3580 * SET UP FOR DRAW AND XDRAW
3590 *--------------------------------
F72D- 20 F8 E6 3600 DRWPNT JSR GETBYT GET SHAPE NUMBER IN X-REG
F730- A5 E8 3610 LDA HGR.SHAPE.PNTR SEARCH FOR THAT SHAPE
F732- 85 1A 3620 STA HGR.SHAPE SET UP PNTR TO BEGINNING OF TABLE
F734- A5 E9 3630 LDA HGR.SHAPE.PNTR+1
F736- 85 1B 3640 STA HGR.SHAPE+1
F738- 8A 3650 TXA
F739- A2 00 3660 LDX #0
F73B- C1 1A 3670 CMP (HGR.SHAPE,X) COMPARE TO # OF SHAPES IN TABLE
F73D- F0 02 3680 BEQ .1 LAST SHAPE IN TABLE
F73F- B0 A5 3690 BCS GGERR SHAPE # TOO LARGE
F741- 0A 3700 .1 ASL DOUBLE SHAPE# TO MAKE AN INDEX
F742- 90 03 3710 BCC .2 ADD 256 IF SHAPE # > 127
F744- E6 1B 3720 INC HGR.SHAPE+1
F746- 18 3730 CLC
F747- A8 3740 .2 TAY USE INDEX TO LOOK UP OFFSET FOR SHAPE
F748- B1 1A 3750 LDA (HGR.SHAPE),Y IN OFFSET TABLE
F74A- 65 1A 3760 ADC HGR.SHAPE
F74C- AA 3770 TAX
F74D- C8 3780 INY
F74E- B1 1A 3790 LDA (HGR.SHAPE),Y
F750- 65 E9 3800 ADC HGR.SHAPE.PNTR+1
F752- 85 1B 3810 STA HGR.SHAPE+1 SAVE ADDRESS OF SHAPE
F754- 86 1A 3820 STX HGR.SHAPE
F756- 20 B7 00 3830 JSR CHRGOT IS THERE ANY "AT" PHRASE?
F759- C9 C5 3840 CMP #TOKEN.AT
F75B- D0 09 3850 BNE .3 NO, DRAW RIGHT WHERE WE ARE
F75D- 20 C0 DE 3860 JSR SYNCHR SCAN OVER "AT"
F760- 20 B9 F6 3870 JSR HFNS GET X- AND Y-COORDS TO START DRAWING AT
F763- 20 11 F4 3880 JSR HPOSN SET UP CURSOR THERE
F766- A5 F9 3890 .3 LDA HGR.ROTATION ROTATION VALUE
F768- 60 3900 RTS
3910 *--------------------------------
3920 * "DRAW" STATEMENT
3930 *--------------------------------
F769- 20 2D F7 3940 DRAW JSR DRWPNT
F76C- 4C 05 F6 3950 JMP DRAW1
3960 *--------------------------------
3970 * "XDRAW" STATEMENT
3980 *--------------------------------
F76F- 20 2D F7 3990 XDRAW JSR DRWPNT
F772- 4C 61 F6 4000 JMP XDRAW1
4010 *--------------------------------
4020 * "SHLOAD" STATEMENT
4030 *
4040 * READS A SHAPE TABLE FROM CASSETTE TAPE
4050 * TO A POSITION JUST BELOW HIMEM.
4060 * HIMEM IS THEN MOVED TO JUST BELOW THE TABLE
4070 *--------------------------------
F775- A9 00 4080 SHLOAD LDA /LINNUM SET UP TO READ TWO BYTES
F777- 85 3D 4090 STA MON.A1H INTO LINNUM,LINNUM+1
F779- 85 3F 4100 STA MON.A2H
F77B- A0 50 4110 LDY #LINNUM
F77D- 84 3C 4120 STY MON.A1L
F77F- C8 4130 INY LINNUM+1
F780- 84 3E 4140 STY MON.A2L
F782- 20 FD FE 4150 JSR MON.READ READ TAPE
F785- 18 4160 CLC SETUP TO READ (LINNUM) BYTES
F786- A5 73 4170 LDA MEMSIZ ENDING AT HIMEM-1
F788- AA 4180 TAX
F789- CA 4190 DEX FORMING HIMEM-1
F78A- 86 3E 4200 STX MON.A2L
F78C- E5 50 4210 SBC LINNUM FORMING HIMEM-(LINNUM)
F78E- 48 4220 PHA
F78F- A5 74 4230 LDA MEMSIZ+1
F791- A8 4240 TAY
F792- E8 4250 INX SEE IF HIMEM LOW-BYTE WAS ZERO
F793- D0 01 4260 BNE .1 NO
F795- 88 4270 DEY YES, HAVE TO DECREMENT HIGH BYTE
F796- 84 3F 4280 .1 STY MON.A2H
F798- E5 51 4290 SBC LINNUM+1
F79A- C5 6E 4300 CMP STREND+1 RUNNING INTO VARIABLES?
F79C- 90 02 4310 BCC .2 YES, OUT OF MEMORY
F79E- D0 03 4320 BNE .3 NO, STILL ROOM
F7A0- 4C 10 D4 4330 .2 JMP MEMERR MEM FULL ERR
F7A3- 85 74 4340 .3 STA MEMSIZ+1
F7A5- 85 70 4350 STA FRETOP+1 CLEAR STRING SPACE
F7A7- 85 3D 4360 STA MON.A1H (BUT NAMES ARE STILL IN VARTBL!)
F7A9- 85 E9 4370 STA HGR.SHAPE.PNTR+1
F7AB- 68 4380 PLA
F7AC- 85 E8 4390 STA HGR.SHAPE.PNTR
F7AE- 85 73 4400 STA MEMSIZ
F7B0- 85 6F 4410 STA FRETOP
F7B2- 85 3C 4420 STA MON.A1L
F7B4- 20 FA FC 4430 JSR MON.RD2BIT READ TO TAPE TRANSITIONS
F7B7- A9 03 4440 LDA #3 SHORT DELAY FOR INTERMEDIATE HEADER
F7B9- 4C 02 FF 4450 JMP MON.READ2 READ SHAPES
4460 *--------------------------------
4470 * CALLED FROM STORE AND RECALL
4480 *--------------------------------
4490 TAPEPNT
F7BC- 18 4500 CLC
F7BD- A5 9B 4510 LDA LOWTR
F7BF- 65 50 4520 ADC LINNUM
F7C1- 85 3E 4530 STA MON.A2L
F7C3- A5 9C 4540 LDA LOWTR+1
F7C5- 65 51 4550 ADC LINNUM+1
F7C7- 85 3F 4560 STA MON.A2H
F7C9- A0 04 4570 LDY #4
F7CB- B1 9B 4580 LDA (LOWTR),Y
F7CD- 20 EF E0 4590 JSR GETARY2
F7D0- A5 94 4600 LDA HIGHDS
F7D2- 85 3C 4610 STA MON.A1L
F7D4- A5 95 4620 LDA HIGHDS+1
F7D6- 85 3D 4630 STA MON.A1H
F7D8- 60 4640 RTS
4650 *--------------------------------
4660 * CALLED FROM STORE AND RECALL
4670 *--------------------------------
4680 GETARYPT
F7D9- A9 40 4681 LDA #$40
F7DB- 85 14 4690 STA SUBFLG
F7DD- 20 E3 DF 4700 JSR PTRGET
F7E0- A9 00 4710 LDA #0
F7E2- 85 14 4720 STA SUBFLG
F7E4- 4C F0 D8 4730 JMP VARTIO
4740 *--------------------------------
4750 * "HTAB" STATEMENT
4760 *
4770 * NOTE THAT IF WNDLEFT IS NOT 0, HTAB CAN PRINT
4780 * OUTSIDE THE SCREEN (EG., IN THE PROGRAM)
4790 *--------------------------------
F7E7- 20 F8 E6 4800 HTAB JSR GETBYT
F7EA- CA 4810 DEX
F7EB- 8A 4820 TXA
F7EC- C9 28 4830 .1 CMP #40
F7EE- 90 0A 4840 BCC .2
F7F0- E9 28 4850 SBC #40
F7F2- 48 4860 PHA
F7F3- 20 FB DA 4870 JSR CRDO
F7F6- 68 4880 PLA
F7F7- 4C EC F7 4890 JMP .1
F7FA- 85 24 4900 .2 STA MON.CH
F7FC- 60 4910 RTS
4920 *--------------------------------
F7FD- CB D2 D7 4930 .AS -/KRW/ SOMEONE'S INITIALS?