LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 1
ALBUG.M65

     1	                    	;<HESS.ATARI>ALBUG.M65.71 12-Mar-82 15:25:26, Edit by HESS
     2	                    
     3	                    		.TITLE LBUG - 6502 DEBUGGER (ATARI VERSION)
     4	                    		; (C) Ted Hess, Hudson, Ma. 1977,1978,1979,1980,1981,1982 
     5	                    
     6	                    		.LIST	MB		;LIST BINARY IN MACROS
     7	                    		.NLIST	TOC		;NO TABLE OF CONTENTS
     8	                    		.ENABL	LC		;ALLOW LOWER CASE TEXT
     9	                    
    10	                    	; INVOKE SYSTEM MACROS FOR PARAMETER DEFINITIONS
    11	                    
    12	                    		.MCALL	ATARI
    13	                    		.MCALL	M6502
    14	0000                			ATARI
    15	0000                			M6502
    16	                    
    17	                    	;***** THINGS TO DO ******
    18	                    	;
    19	                    	; 1) Re-write parser for DDT syntax and better defaults
    20	                    	;	Make better use of ATARI keyboard!
    21	                    	;
    22	                    	;*************************
    23	                    
    24	                    	;LBUG STORAGE ASSIGNMENTS (PAGE 0)
    25	                    
    26	     00E0           	INBUF	=$E0		;INPUT BUFFER (2 BYTES)
    27	     00E2           	POINT	=$E2		;OPEN CELL ADDRS (2 BYTES)
    28	     00E4           	AC	=$E4		;ACCUMULATOR
    29	     00E5           	XREG	=$E5		;X INDEX
    30	     00E6           	YREG	=$E6		;Y INDEX
    31	     00E7           	PS	=$E7		;PROCESSOR STATUS REG
    32	     00E8           	SP	=$E8		;STACK POINTER
    33	                    
    34	                    	;RANDOM CONSTANTS AND PARAMETERS
    35	                    
    36	     0031           	DSKCOD	=$31		;DISK DEVICE CODE
    37	     0052           	DSKR	='R		;DISK READ COMMAND
    38	     0057           	DSKW	='W		;DISK WRITE COMMAND
    39	     0008           	MAXBP	=8		;EIGHT IS TRADITIONAL (BREAK POINTS)
    40	     0018           	LNSCR	=24		;# OF LINES ON SCREEN
    41	     0037           	LPP	=55		;LINES/PAGE ON PRINTER
    42	                    
    43	                    	.IIF NDF,LORG, LORG= $8000	;DEFAULT PROG ORIGIN
    44	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 2
ALBUG.M65

    46	                    	;MAIN ENTRY POINT - NORMAL START (LORG)
    47	                    	;RESET ENTRY - REMOVE BREAKPOINTS (LORG+3)
    48	                    
    49	0000                		SETPC PPC,LORG
    50	                    
    51	                    	;NORMAL START ENTRY
    52	                    
    53	8000   4C   73   80 	START:	JMP	STRT1
    54	8003   4C   70   80 		JMP	RST
    55	                    
    56	8006   7D   4C   61 	VERS:	.ASCII	<.ATCLR>"Lady Bug - V4.0, (C) Ted Hess 1981"<.ATEOL>
	8009   64   79   20 
	800C   42   75   67 
	800F   20   2D   20 
	8012   56   34   2E 
	8015   30   2C   20 
	8018   28   43   29 
	801B   20   54   65 
	801E   64   20   48 
	8021   65   73   73 
	8024   20   31   39 
	8027   38   31   9B 
    57	802A 0001           	ROF:	.BLKB	1	; REGISTER OPENED FLAG
    58	                    				;  0 = CLOSED
    59	                    				;  $1 = HEX/OCTAL
    60	                    				;  $FF = SYMBOLIC
    61	802B 0001           	CF:	.BLKB	1	;ADDRESS FLAG
    62	                    				;  $FF = NO ADDRESSES TYPED
    63	                    				;  $00 = ONE ADDRESS TYPED
    64	                    				;  $01 = COMMA TYPED
    65	802C 0002           	PRPC:	.BLKB	2	;PROGRAM COUNTER (AT BREAK)
    66	802E 0001           	LENGTH:	.BLKB	1	; LENGTH OF INSTR (0 := 1-BYTE)
    67	802F 0001           	PFRMT:	.BLKB	1	; PRINT FORMAT INDEX
    68	8030 0002           	VEB:	.BLKB	2	;4 BYTE PROGRAM BLOCK
    69	8032 0001           	LMNEM:	.BLKB	1	;(VEB+2) TEMP FOR MNEMONIC PRINT
    70	8033 0001           	RMNEM:	.BLKB	1	;(VEB+3) ...
    71	8034 0002           	STARTA:	.BLKB	2	;STARTING ADDRESS
    72	8036 0002           	ENDAD:	.BLKB	2	;ENDING ADDRESS
    73	8038 0001           	TEMPX:	.BLKB	1	;NEED TO SAVE X AROUND OS
    74	8039 0001           	TEMPY:	.BLKB	1	;TEMP SAVE Y
    75	803A 0001           	SNGLF:	.BLKB	1	;SINGLE STEP FLAG
    76	803B 0001           	BPN:	.BLKB	1	;BREAKPOINT NUMBER OR 0
    77	803C 0001           	DRVNO:	.BLKB	1	;DISK UNIT #
    78	803D 0001           	PIOCB:	.BLKB	1	;IOCB INDEX FOR PRINTER/EDITOR
    79	803E 0001           	PNTF:	.BLKB	1	; PRINTER FLAG
    80	                    
    81	803F 0001           	TABPT:	.BLKB	1	;INDEX INTO TAB RING
    82	8040 0008           	TABRNG:	.BLKW	8	;RING BUFFER FOR TAB/UNTAB
    83	                    
    84	                    	;BREAKPOINT TABLES
    85	                    
    86	8050 0008           	BPINS:	.BLKB	MAXBP		;SAVE INSTR
    87	8058 0008           	BPCNT:	.BLKB	MAXBP		;PROCEED COUNT
    88	8060 0008           	BPLOCL:	.BLKB	MAXBP		;LOCATION LOW
    89	8068 0008           	BPLOCH:	.BLKB	MAXBP		;LOCATION HIGH
    90	                    
    91	                    	;RESET ENTRY
    92	                    
    93	8070   20   3F   88 	RST:	CALL	REMB		;REMOVE BREAK POINTS
    94	                    	 
    95	                    	; NORMAL STARTUP JOINS HERE
    96	                    
    97	8073   20   A8   87 	STRT1:	CALL	INITS		;INITIALIZE THINGS
    98	8076                		TYPE	VERS		;OUTPUT HERALD
   (1)	8076   A2   06      
   (1)	8078   A0   80      
   (1)	807A   20   85   F3 
    99	807D                		CLR	<SNGLF,BPN,DRVNO,PS> ;CLEAR SS FLAG, ETC.
   (1)	807D   A9   00      
   (2)	807F   8D   3A   80 
   (2)	8082   8D   3B   80 
   (2)	8085   8D   3C   80 
   (2)	8088   85   E7      
   100	808A                		SET2	BREAK,VBREAK	;BREAK POINT ENTRY
   (1)	808A   A9   73      
   (1)	808C   8D   06   02 
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 2-1
ALBUG.M65

   (1)	808F   A9   88      
   (1)	8091   8D   07   02 
   101	8094   BA           		TSX			;SAVE CURRENT STACK POINTER
   102	8095   86   E8      		STX	SP
   103	8097   4C   BC   82 		JMP	RALL		;CLEAR ALL BREAK POINTS
   104	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 3
ALBUG.M65

   106	                    	;MAIN DECODER
   107	                    
   108	809A   20   DF   80 	ERR:	CALL	ERRFST		;PRINT <BELL>?
   109	                    
   110	809D   20   2E   88 	DCD:	CALL	CLOSEP		;CLOSE PRINTER IF OPEN
   111	80A0   20   85   87 		CALL	CRLFS		;PRINT CRLF
   112	80A3                	DCD4:	CLR	ROF		;CLOSE OPEN REG
   (1)	80A3   A9   00      
   (2)	80A5   8D   2A   80 
   113	80A8   A6   E8      		LDX	SP		;RESTORE STACK POINTER
   114	80AA   9A           		TXS
   115	                    
   116	80AB   A9   FF      	SCAN:	LDA	#$FF		;SET UP ADDRESS FLAG
   117	80AD   8D   2B   80 		STA	CF
   118	80B0   20   7C   86 		CALL	GETNUM		;INPUT SOMETHING
   119	80B3   AE   2B   80 		LDX	CF		;GET QUANITY TYPED FLAG
   120	80B6   30   0A      		BMI	CLGL		;DO NOT DESTROY OLD VALUE FOR ' AND =
   121	                    
   122	80B8                	SCAN1:	MOV2X	INBUF,STARTA	;SET UP STARTING ADDRESS
   (1)	80B8   A6   E0      
   (1)	80BA   8E   34   80 
   (1)	80BD   A6   E1      
   (1)	80BF   8E   35   80 
   123	                    	;FALL INTO SPECAIL CHARACTER DECODER
   124	                    
   125	                    
   126	                    	;HERE TO CHECK LEGAL CHARACTER
   127	                    
   128	80C2   A2   0C      	CLGL:	LDX	#MAXL		;INIT INDEX
   129	80C4   DD   EE   8A 	LGL1:	CMP	LGCH,X		;MATCH?
   130	80C7   F0   05      		BEQ	LGL2		;YES - PROCEED
   131	80C9   CA           		DEX			;NO - STEP TO NEXT
   132	80CA   10   F8      		BPL	LGL1		;BRANCH IF MORE TO GO
   133	80CC   30   CC      		BMI	ERR		;ERROR IF NONE
   134	                    
   135	                    	;FOUND MATCH - DISPATCH
   136	                    
   137	80CE   8A           	LGL2:	TXA			;GET INDEX
   138	80CF   0A           	LGL3:	ASL	A		; TIMES 2
   139	80D0   AA           		TAX			; BACK TO X
   140	80D1   BD   06   8B 		LDA	LDISP+1,X	;GET HIGH BYTE OF XFER
   141	80D4   48           		PHA			;PUT ON STACK
   142	80D5   BD   05   8B 		LDA	LDISP,X		;GET XFER LOW
   143	80D8   48           		PHA			;STACK NOW HAS XFER ADDRS
   144	80D9   AD   2B   80 		LDA	CF		;GET ARGUMENT FLAG IN AC
   145	80DC   C9   01      		CMP	#1		;SET FLAGS BASED ON ONE
   146	80DE   60           		RET			;DISPATCH
   147	                    
   148	80DF   A9   FD      	ERRFST:	LDA	#.ATBEL		;RING BELL
   149	80E1   20   6D   87 		CALL	OUTSCH
   150	80E4   A9   3F      		LDA	#'?		;THEN PRINT ?
   151	80E6   4C   6D   87 		JMP	OUTSCH
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 4
ALBUG.M65

   153	                    	;COMMA - SAVE INPUT AS STARTING ADDRESS
   154	                    
   155	80E9   AD   2B   80 	COMMA:	LDA	CF		;GET ARGUMENT FLAG IN AC
   156	80EC   D0   AC      		BNE	ERR		;MUST BE ONE AND ONLY ONE ARGUMENT TYPED SO FAR
   157	80EE   20   7C   86 		CALL	GETNUM		;GET ANOTHER ARGUMENT
   158	80F1                	COMMA1:	MOV2X	INBUF,ENDAD	;SET UP ENDING ADDRESS
   (1)	80F1   A6   E0      
   (1)	80F3   8E   36   80 
   (1)	80F6   A6   E1      
   (1)	80F8   8E   37   80 
   159	80FB   AE   2B   80 		LDX	CF		;GET ARGUMENT FLAG
   160	80FE   E0   02      		CPX	#2		;CHECK TO SEE IF IT IS OPEN
   161	8100   10   98      		BPL	ERR		;NO THEN IT IS AN ERROR
   162	8102   30   BE      		BMI	CLGL		;GO DISPATCH ON BREAK CHARACTER
   163	                    
   164	                    
   165	                    	;ESC SEEN (ECHO $)
   166	                    
   167	8104   A9   24      	ESC:	LDA	#'$
   168	8106   20   6D   87 		CALL	OUTSCH
   169	8109   20   F0   86 		CALL	GETSCH		;GET NEXT CHARACTER
   170	810C   38           		SEC			;CLEAR BORROW
   171	810D   E9   31      		SBC	#'1		;CHECK FOR NUMBER
   172	810F   30   89      		BMI	ERR		;IF LESS THAN THEN IT IS AN ERROR
   173	8111   C9   08      		CMP	#MAXBP		;IS IT LESS THAN MAXIMUM ALLOWABLE BREAKPOINT
   174	8113   30   24      		BMI	ESCB		;YES GO GET BREAKPOINT B
   175	8115   E9   10      		SBC	#@20		;CHECK FOR A
   176	8117   30   81      		BMI	ERR		;IF LESS THAN A IT IS AN ERROR
   177	8119   29   DF      		AND	#@337		;GET RID OF LOWERCASE BIT
   178	811B   C9   1A      		CMP	#'Z-@100	;IS IT GREATER THAN Z
   179	811D   10   49      		BPL	ERR1		;YES.  REPORT ERROR
   180	811F   AA           		TAX			;PUT IT IN THE X REGISTER
   181	8120   BD   53   8B 		LDA	ARGNUM,X	;GET NUMBER OF ARGUMENTS
   182	8123   CD   2B   80 		CMP	CF		;IS IT CORRECT
   183	8126   F0   0B      		BEQ	10$		;YES.  SKIP REST OF TEST
   184	8128   C9   80      		CMP	#$80		;IS IT ONE OR NONE FLAG
   185	812A   D0   3C      		BNE	ERR1		;NO GIVE ERROR
   186	812C   AD   2B   80 		LDA	CF		;GET FLAG
   187	812F   C9   01      		CMP	#1		;LESS THAN ONE
   188	8131   10   35      		BPL	ERR1		;NO. GO GIVE ERROR
   189	8133   8A           	10$:	TXA			;GET INDEX BACK TO A
   190	8134   18           		CLC
   191	8135   69   0D      		ADC	#<DISP-LDISP>/2	;CALC TABLE OFFSET
   192	8137   D0   96      		BNE	LGL3		;DISPATCH
   193	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 5
ALBUG.M65

   195	8139   AA           	ESCB:	TAX			;SAVE BP NUMBER IN X
   196	813A   20   F0   86 		CALL	GETSCH		;GET THE CHARACTER
   197	813D   29   DF      		AND	#@337		;GET RID OF CASE BIT
   198	813F   C9   42      		CMP	#'B		;IS IT A B
   199	8141   D0   25      		BNE	ERR1		;NO. THEN IT IS AN ERROR
   200	8143   4C   6D   82 		JMP	BKPT1		;YES. GO DO BREAKPOINT
   201	                    
   202	                    
   203	                    	;DOT (.) SEEN - SUBSTITUE CURRENT LOC
   204	                    
   205	8146                	DOT:	MOV2	POINT,INBUF	;PUT LOC INTO BUFFER
   (1)	8146   A5   E2      
   (1)	8148   85   E0      
   (1)	814A   A5   E3      
   (1)	814C   85   E1      
   206	814E   20   F0   86 	DOT1:	CALL	GETSCH		;GET ANOTHER CHARACTER
   207	8151   EE   2B   80 		INC	CF		;SAY QUANT TYPED
   208	8154   D0   9B      		BNE	COMMA1		;GO SET UP ENDING ADDRESS
   209	8156   4C   B8   80 		JMP	SCAN1		;BACK TO SCAN LOOP
   210	                    
   211	                    
   212	                    	;PERCENT SEEN - SPECIAL REGISTER
   213	                    
   214	8159   20   F0   86 	PERC:	CALL	GETSCH		;LOOK AT NEXT CHAR
   215	815C   29   DF      		AND	#@337		;GET RID OF CASE BIT
   216	815E   A2   04      		LDX	#MAXS		; AND CHECK FOR SPECIAL
   217	8160   DD   FB   8A 	PERC1:	CMP	LGPC,X		;MATCH?
   218	8163   F0   06      		BEQ	PERC2		;???
   219	8165   CA           		DEX			;NO - STEP TO NEXT
   220	8166   10   F8      		BPL	PERC1
   221	8168   4C   9A   80 	ERR1:	JMP	ERR		;ERROR IF NO MORE
   222	                    
   223	                    
   224	                    	;SETUP DESIRED REGISTER ADDRS AS INPUT TYPED
   225	                    
   226	816B   BD   00   8B 	PERC2:	LDA	PERAD,X		;GET ADDRS OF BYTE
   227	816E   85   E0      		STA	INBUF		;STORE AS INPUT
   228	8170                		CLR	INBUF+1
   (1)	8170   A9   00      
   (2)	8172   85   E1      
   229	8174   F0   D8      		BEQ	DOT1		;BACK TO INPUT LOOP
   230	                    
   231	                    
   232	                    	;CARRIAGE RETURN TYPED
   233	                    
   234	8176   20   27   86 	CRET:	CALL	CLSE		;CLOSE OPEN REG IF ANY
   235	8179   4C   9D   80 		JMP	DCD		;RE-INIT THINGS
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 6
ALBUG.M65

   237	                    	;SLASH TYPED - OPEN A REG IN SYMBOLIC
   238	                    
   239	817C   10   EA      	SLSH:	BPL	ERR1		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   240	817E   A9   FF      		LDA	#$FF		;SET ROF FLAG
   241	8180   D0   04      		BNE	SLSH1		;JOIN COMMON CODE
   242	                    
   243	                    	;SLASH TYPED - OPEN A REG (HEX)
   244	                    
   245	8182   10   E4      	BRAKET:	BPL	ERR1		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   246	8184   A9   01      		LDA	#1		;SET REG OPEN
   247	8186   8D   2A   80 	SLSH1:	STA	ROF
   248	8189   20   6B   87 		CALL	OUTSSP		;TYPE A SPACE
   249	818C   AD   2B   80 		LDA	CF		;ANYTHING TYPED
   250	818F   D0   03      		BNE	10$		; ??
   251	8191   20   41   86 		CALL	INTPT		;YES - OPEN IT
   252	8194   20   2F   87 	10$:	CALL	PRTSCN		;GO DO OUTPUT
   253	8197   4C   AB   80 		JMP	SCAN
   254	                    
   255	                    
   256	                    	;LINE FEED - OPEN NEXT REG
   257	                    
   258	819A   10   CC      	LFD:	BPL	ERR1		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   259	819C   20   85   87 		CALL	CRLFS		;OUTPUT <EOL>
   260	819F   AD   2A   80 	LFD0:	LDA	ROF		;CHECK TYPE
   261	81A2   30   11      		BMI	LFDS		;DO SYMBOLIC NEXT INSTR
   262	81A4   20   27   86 		CALL	CLSE		;CLOSE OPEN REG IF ANY
   263	81A7   20   D0   87 		CALL	INCPT		;STEP TO NEXT LOC
   264	81AA   EE   2A   80 	LFDC:	INC	ROF		;MARK OPEN HEX
   265	81AD   A2   5B      		LDX	#'[		;SLASH
   266	81AF   20   25   87 		CALL	PRTSLC		;GO PRINT THE CONTENTS
   267	81B2   4C   AB   80 		JMP	SCAN
   268	                    
   269	81B5   20   00   8A 	LFDS:	CALL	PCADJ		;STEP OVER INSTR
   270	81B8   85   E2      		STA	POINT		;SAVE NEW PC
   271	81BA   84   E3      		STY	POINT+1
   272	81BC   20   1E   87 	LFDS1:	CALL	PRTSLS		;GO PRINT LOCATION IN SYMBOLIC
   273	81BF   4C   AB   80 		JMP	SCAN		;BACK TO MAIN COMMAND DECODER
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 7
ALBUG.M65

   275	                    	;^ OR <BS> TYPED - OPEN PREVIOUS
   276	                    
   277	81C2   10   A4      	BACK:	BPL	ERR1		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   278	81C4   20   27   86 		CALL	CLSE		;CLOSE OPEN REG
   279	81C7   20   4C   86 		CALL	DECPT		;DECREMENT THE POINTER
   280	81CA   20   85   87 		CALL	CRLFS		;PUT OUT A CARRIAGE RETURN LINE FEED
   281	81CD   4C   AA   81 		JMP	LFDC		;COMMON CODE
   282	                    
   283	                    	;TAB  GO TO ADDRESS IF IN SYMBOLIC MODE
   284	                    
   285	81D0   10   96      	TAB:	BPL	ERR1		;ERROR IF MORE THAN 1 ARG
   286	81D2   AD   2A   80 		LDA	ROF		;GET OUTPUT MODE FLAG
   287	81D5   10   91      		BPL	ERR1		;ONLY GET EFFECTIVE ADDRESS IF SYMBOLIC
   288	81D7   AE   3F   80 		LDX	TABPT		;SAVE POINT
   289	81DA   A5   E2      		LDA	POINT
   290	81DC   9D   40   80 		STA	TABRNG,X	;IN RING BUFFER
   291	81DF   A5   E3      		LDA	POINT+1
   292	81E1   9D   48   80 		STA	TABRNG+8,X
   293	81E4   E8           		INX			;STEP INDEX
   294	81E5   8A           		TXA
   295	81E6   29   07      		AND	#$07		;MASK TO MOD 8 CNTR
   296	81E8   8D   3F   80 		STA	TABPT		;STORE IT BACK
   297	81EB   20   7E   89 		CALL	CALCAD		;CALCULATE EFFECTIVE ADDRESS
   298	81EE                		MOV2	INBUF,POINT	;GET JMP ADDRESS
   (1)	81EE   A5   E0      
   (1)	81F0   85   E2      
   (1)	81F2   A5   E1      
   (1)	81F4   85   E3      
   299	81F6   20   85   87 	TAB1:	CALL	CRLFS		;PUT OUT CARRIAGE RETURN LINE FEED
   300	81F9   4C   BC   81 		JMP	LFDS1		;GO TYPE OUT NEW ADDRESS
   301	                    
   302	                    	; UNTABIFY - POP RING THEN TAB
   303	                    
   304	81FC   10   03      	UNTAB:	BPL	5$		;ERROR IF ANYTHING TYPED
   305	81FE   AD   2A   80 		LDA	ROF		;REGISTER OPEN FLAG
   306	8201   10   7D      	5$:	BPL	ERR2		;ERROR IF NOT SYMBOLIC MODE
   307	8203   A9   07      		LDA	#$7		;MASK FOR MOD 8 SUBTRACT
   308	8205   CE   3F   80 		DEC	TABPT		;DECREMENT INDEX
   309	8208   2D   3F   80 		AND	TABPT		;MASK IT
   310	820B   8D   3F   80 		STA	TABPT		;STORE RESULT
   311	820E   AA           		TAX			;XFER TO INDEX
   312	820F   BD   40   80 		LDA	TABRNG,X	;FETCH SAVED VALUE
   313	8212   85   E2      		STA	POINT		;RESTORE TO POINT
   314	8214   BD   48   80 		LDA	TABRNG+8,X
   315	8217   85   E3      		STA	POINT+1
   316	8219   4C   F6   81 		JMP	TAB1		;FINISH THRU COMMON CODE
   317	                    
   318	                    	;EQUAL SIGN - TYPE IN OCTAL
   319	                    
   320	821C   10   62      	TOC:	BPL	ERR2		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   321	821E   AD   34   80 		LDA	STARTA		;GET CHARACTER IN A
   322	8221   8D   2F   80 		STA	PFRMT		;SAVE BYTE
   323	8224   A2   03      		LDX	#3		;TYPE 3 DIGITS
   324	8226   A0   03      		LDY	#3		; OF 3 BITS EACH
   325	8228   18           		CLC			;INIT CARRY BIT
   326	8229   90   03      		BCC	15$		;SKIP FIRST SHIFT
   327	822B   0E   2F   80 	10$:	ASL	PFRMT		;SHIFT LEFT
   328	822E   2A           	15$:	ROL	A		;GET BIT INTO AC
   329	822F   88           		DEY			;COUNT BITS
   330	8230   D0   F9      		BNE	10$		;CONTINUE FOR 3 BITS
   331	8232   29   07      		AND	#@7		;GRNTEE OIT
   332	8234   20   A3   87 		CALL	HEXST1		;TYPE OUT
   333	8237   A0   03      		LDY	#3		;RELOAD BIT COUNTER
   334	8239   CA           		DEX			;DECREMENT DIGIT COUNTER
   335	823A   D0   EF      		BNE	10$		;LOOP TILL DONE
   336	823C   20   6B   87 	TOCRET:	CALL	OUTSSP		;PRINT SPACE
   337	823F   4C   AB   80 		JMP	SCAN		;BACK TO MAIN LOOP
   338	                    
   339	                    
   340	                    	;QUOTE - TYPE OUT ASCII
   341	                    
   342	8242   10   3C      	QUOTE:	BPL	ERR2		;IF MORE THAN ONE ARGUMENT IT IS AN ERROR
   343	8244   AD   34   80 		LDA	STARTA		;GET CHARACTER IN A
   344	8247   20   6D   87 		CALL	OUTSCH		;PRINT THE CHARACTER IN ASCII
   345	824A   4C   3C   82 		JMP	TOCRET		;GO PRINT A SPACE AND RETURN
   346	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 8
ALBUG.M65

   348	                    	;$A - TYPE MEMORY OUT IN ASCII
   349	                    
   350	824D   20   41   86 	ASCII:	CALL	INTPT		;SET UP POINT FROM ADDRESS TYPED
   351	8250   20   F0   86 		CALL	GETSCH		;GET QUOTE CHARACTER
   352	8253   8D   2B   80 		STA	CF		;SAVE IT FOR COMPARE
   353	8256   20   F0   86 	10$:	CALL	GETSCH		;GET ANOTHER CHARACTER
   354	8259   CD   2B   80 		CMP	CF
   355	825C   F0   0A      		BEQ	20$		;IF QUOTE RETURN
   356	825E   A0   00      		LDY	#0		;SET UP FOR INDEXING
   357	8260   91   E2      		STA	(POINT),Y	;PUT THE CHARACTER IN  MEMORY
   358	8262   20   D0   87 		CALL	INCPT		;INCREMENT THE POINTER
   359	8265   4C   56   82 		JMP	10$		;GO DO ANOTHER CHARACTER
   360	                    
   361	8268   4C   9D   80 	20$:	JMP	DCD		;GO BACK TO MAIN SCANING LOOP
   362	                    
   363	                    
   364	                    	;$B - BREAKPOINT COMMAND
   365	                    
   366	826B   A2   FF      	BKPT:	LDX	#$FF		;SAY NO BREAKPOINT NUMBER GIVEN
   367	826D   AD   2B   80 	BKPT1:	LDA	CF		;GET ARGUMENT FLAG
   368	8270   30   46      		BMI	CLRALL		;POSSIBLE CLEAR ALL $B OR $NB/
   369	8272   E0   00      		CPX	#0		;SPECIFIC BREAK POINT
   370	8274   10   0D      		BPL	BKPT2		; IF QUANT AFTER $
   371	8276   A2   07      		LDX	#MAXBP-1	;LOOK FOR A FREE ONE
   372	8278   BD   50   80 	5$:	LDA	BPINS,X
   373	827B   F0   06      		BEQ	BKPT2		;FOUND IF ZERO
   374	827D   CA           		DEX			;STEP TO NEXT
   375	827E   10   F8      		BPL	5$		; AND TRY AGAIN
   376	8280   4C   9A   80 	ERR2:	JMP	ERR		;BRANCH TO HERE FOR ERROR
   377	                    
   378	                    	;X NOW CONTAINS AN INDEX INTO THE BP TABLES
   379	                    
   380	8283   AD   34   80 	BKPT2:	LDA	STARTA		;CHECK FOR 0$NB
   381	8286   D0   05      		BNE	SETBP		;IF NOT ZERO CONTINUE
   382	8288   AD   35   80 		LDA	STARTA+1	;GET HIGH BYTE
   383	828B   F0   23      		BEQ	CLRONE		;CLEAR JUST ONE
   384	                    
   385	                    	;NOW SET A BREAK POINT - ADDRS IN INTMP
   386	                    
   387	828D                	SETBP:	MOV2	STARTA,INBUF	;NEED IN PAGE 0 LOC
   (1)	828D   AD   34   80 
   (1)	8290   85   E0      
   (1)	8292   AD   35   80 
   (1)	8295   85   E1      
   388	8297   A0   00      		LDY	#0		;SET FOR INDIRECT
   389	8299   B1   E0      		LDA	(INBUF),Y	;FETCH INSTR
   390	829B   F0   E3      		BEQ	ERR2		;ERROR IF 00
   391	829D   9D   50   80 		STA	BPINS,X		;SAVE IN TABLE
   392	82A0   A5   E0      		LDA	INBUF		;SAVE ADDRS
   393	82A2   9D   60   80 		STA	BPLOCL,X	; LOW
   394	82A5   A5   E1      		LDA	INBUF+1		; AND HIGH
   395	82A7   9D   68   80 		STA	BPLOCH,X	;...
   396	                    	;	...
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 9
ALBUG.M65

   398	                    	;	...
   399	82AA   20   62   87 	BPXIT:	CALL	PRBLNK		;PRINT SOME SPACES
   400	82AD   4C   AB   80 		JMP	SCAN		;BACK TO DECODER
   401	                    
   402	                    
   403	                    	;ROUTINE TO CLEAR ONE BREAKPOINT
   404	                    	;C(X) - INDEX INTO BP TABLES, C(AC) := 0
   405	                    
   406	82B0   9D   50   80 	CLRONE:	STA	BPINS,X		;CLEAR BP
   407	82B3   9D   58   80 		STA	BPCNT,X		; AND PROCEED COUNT
   408	82B6   F0   F2      		BEQ	BPXIT		;RETURN
   409	                    
   410	                    	;ROUTINE TO CLEAR ALL BREAK POINTS
   411	                    
   412	82B8   E0   00      	CLRALL:	CPX	#0		;SPECIFIC BREAK POINT
   413	82BA   10   10      		BPL	SHONE		;SHOW ONE BP
   414	82BC   A2   07      	RALL:	LDX	#MAXBP-1	;INIT COUNT
   415	82BE   A9   00      		LDA	#0		;GET A ZERO
   416	82C0   9D   50   80 	5$:	STA	BPINS,X		;CLEAR BP
   417	82C3   9D   58   80 		STA	BPCNT,X		;...
   418	82C6   CA           		DEX
   419	82C7   10   F7      		BPL	5$		;LOOP TILL DONE
   420	82C9   4C   9D   80 		JMP	DCD		;RE-INIT THINGS
   421	                    
   422	                    
   423	                    	;ROUTINE TO SHOW LOC OF BP
   424	                    
   425	82CC   20   F0   86 	SHONE:	CALL	GETSCH		;LOOK AHEAD CHAR
   426	82CF   C9   2F      		CMP	#'/		;GAURNTEE SLASH
   427	82D1   D0   AD      		BNE	ERR2
   428	82D3   20   6B   87 		CALL	OUTSSP		;SPACE OVER
   429	82D6   BD   50   80 		LDA	BPINS,X		;SEE IF ACTIVE
   430	82D9   F0   A5      		BEQ	ERR2		;NO - SORRY
   431	82DB   BD   68   80 		LDA	BPLOCH,X	;GET LOC HIGH
   432	82DE   20   91   87 		CALL	PRTSBY		;PRINT IT
   433	82E1   BD   60   80 		LDA	BPLOCL,X	;GET LOC LOW
   434	82E4   20   91   87 		CALL	PRTSBY		;PRINT IT
   435	82E7   4C   9D   80 		JMP	DCD		;CLOSE REG, ETC.
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 10
ALBUG.M65

   437	                    	;$D - JUMP TO DOS
   438	                    
   439	82EA   6C   0A   00 	TODOS:	JMP	(DOSVEC)
   440	                    
   441	                    	;$U - SELECT DISK UNIT
   442	                    
   443	82ED   AD   34   80 	SETU:	LDA	STARTA		;GET UNIT #
   444	82F0   F0   8E      		BEQ	ERR2		;MUST BE 1-4
   445	82F2   C9   05      		CMP	#5		;VALID?
   446	82F4   90   8A      		BCC	ERR2		;TOO LARGE
   447	82F6   8D   3C   80 		STA	DRVNO		;STORE UNIT #
   448	82F9   4C   AA   82 		JMP	BPXIT		;RETURN
   449	                    
   450	                    	;$W - WRITE DISK SECTORS FROM MEMORY
   451	                    
   452	82FC   20   6A   86 	WRSECT:	CALL	GETVAL		;BUFFER
   453	82FF   A9   57      		LDA	#DSKW		;WRITE COMMAND
   454	8301   D0   05      		BNE	INIDSK		;DO IT
   455	                    
   456	                    	;$R - READ DISK SECTORS INTO MEMORY
   457	                    
   458	8303   20   6A   86 	RDSECT:	CALL	GETVAL		;GET BUFFER ADDRS
   459	8306   A9   52      		LDA	#DSKR		;READ COMMAND
   460	8308   8D   02   03 	INIDSK:	STA	DCOMND		;STORE
   461	830B                		MOV2	INBUF,DBUFLO	;SETUP BUFFER
   (1)	830B   A5   E0      
   (1)	830D   8D   04   03 
   (1)	8310   A5   E1      
   (1)	8312   8D   05   03 
   462	8315   20   3E   86 		CALL	INTPTC		;SET POINT := START SECTOR
   463	8318   A9   31      		LDA	#DSKCOD		;BUS I.D. FOR DISK
   464	831A   8D   00   03 		STA	DDEVIC
   465	831D   AD   3C   80 		LDA	DRVNO		;SETUP DRIVE #
   466	8320   8D   01   03 		STA	DUNIT
   467	8323   A9   80      		LDA	#128		;BYTE COUNT
   468	8325   8D   08   03 		STA	DBYTLO
   469	8328                		CLR	DBYTHI
   (1)	8328   A9   00      
   (2)	832A   8D   09   03 
   470	832D                	DSKLUP:	MOV2	POINT,DAUX1	;SETUP SECTOR ADDRS
   (1)	832D   A5   E2      
   (1)	832F   8D   0A   03 
   (1)	8332   A5   E3      
   (1)	8334   8D   0B   03 
   471	8337   20   53   E4 		CALL	DSKINV		;INVOKE DISK HANDLER
   472	833A   30   16      		BMI	IOCERR		;ERROR CODE IS .GE. $80
   473	833C   20   58   86 		CALL	ENDCHK		;CHECK END, INCR POINT
   474	833F   18           		CLC			;NOT END - STEP TO NEXT BUFFER
   475	8340   A9   80      		LDA	#128		;128 BYTE/BUFFER
   476	8342   6D   04   03 		ADC	DBUFLO
   477	8345   8D   04   03 		STA	DBUFLO
   478	8348   A9   00      		LDA	#0		;PROPAGATE CARRY
   479	834A   6D   05   03 		ADC	DBUFHI
   480	834D   8D   05   03 		STA	DBUFHI
   481	8350   D0   DB      		BNE	DSKLUP		;LOOP TILL DONE
   482	                    
   483	8352   20   DF   80 	IOCERR:	CALL	ERRFST		;OUT <BELL>?
   484	8355   20   6B   87 		CALL	OUTSSP
   485	8358   AD   03   03 		LDA	DSTATS		;GET STATUS
   486	835B   20   91   87 		CALL	PRTSBY		;PRINT ERROR CODE
   487	835E   20   62   87 		CALL	PRBLNK		;SOME BLANKS
   488	8361   20   8A   87 		CALL	PRTSPT		; THEN DISK ADDRS
   489	8364   4C   9D   80 		JMP	DCD		;RETURN
   490	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 11
ALBUG.M65

   492	                    	;$F - FIND A BYTE IN MEMORY
   493	                    
   494	8367   20   6A   86 	FIND:	CALL	GETVAL		;GET THE BYTE
   495	836A   20   3E   86 		CALL	INTPTC		;SET UP INDIRECT POINTER FROM START
   496	836D   A9   01      		LDA	#1
   497	836F   8D   2A   80 		STA	ROF		;SET THE MODE FLAG
   498	8372   A0   00      	10$:	LDY	#0		;SET UP INDEX
   499	8374   B1   E2      		LDA	(POINT),Y	;GET BYTE FROM MEMORY
   500	8376   C5   E0      		CMP	INBUF		;DOES IT MATCH
   501	8378   D0   08      		BNE	20$		;NO
   502	837A   A2   5B      		LDX	#'[		;SLASH
   503	837C   20   25   87 		CALL	PRTSLC		;GO PRINT THE CONTENTS
   504	837F   20   85   87 		CALL	CRLFS		;PUT OUT CARRIAGE RETURN LINE FEED
   505	8382   20   58   86 	20$:	CALL	ENDCHK		;ARE WE FINISHED
   506	8385   4C   72   83 		JMP	10$		;NO
   507	                    
   508	                    
   509	                    	;$G - START SOMEWHERE
   510	                    
   511	8388   20   3E   86 	GO:	CALL	INTPTC		;GO SETUP ADDRESS
   512	838B                		CLR	<BPN,SNGLF>	;CLEAR CURRENT BP
   (1)	838B   A9   00      
   (2)	838D   8D   3B   80 
   (2)	8390   8D   3A   80 
   513	8393   20   5C   88 	GO2:	CALL	INSB		;INSERT BP'S
   514	8396   A6   E8      	GO3:	LDX	SP		;RESTORE STACK
   515	8398   9A           		TXS
   516	8399   A5   E3      		LDA	POINT+1		;SETUP RETURN ADDRS
   517	839B   48           		PHA			; ON STACK FOR RTI
   518	839C   A5   E2      		LDA	POINT
   519	839E   48           		PHA			;...
   520	839F   A5   E7      		LDA	PS		;PROCESSOR STATUS
   521	83A1   48           		PHA
   522	83A2   A6   E5      		LDX	XREG		;RESTORE REGS
   523	83A4   A4   E6      		LDY	YREG
   524	83A6   A5   E4      		LDA	AC		;...
   525	83A8   40           		RTI			;GO BACK
   526	                    
   527	                    	;HERE IF SINGLE STEP - SETUP FOR RE-ENTER AFTER XCT
   528	                    
   529	83A9   AC   4F   85 	GO1:	LDY	IOPC		;CHECK FOR JUMPS
   530	83AC   C0   4C      		CPY	#$4C
   531	83AE   F0   0E      		BEQ	GOJMP		;VANILLA JUMP
   532	83B0   C0   6C      		CPY	#$6C		;MAYBE JUMP, INDIRECT
   533	83B2   F0   14      		BEQ	GOJMPI		; A LITTLE MORE HAIRY
   534	83B4   C0   60      		CPY	#$60		;"RTS"?
   535	83B6   F0   2A      		BEQ	IRTS		; INTERPRET SUBROUTINE RETURN
   536	83B8   C0   40      		CPY	#$40		;"RTI"
   537	83BA   F0   43      		BEQ	IRTI		; INTERPRET INTERRUPT RETURN
   538	83BC   D0   D8      		BNE	GO3		; AND GO EXECUTE
   539	                    
   540	83BE                	GOJMP:	SET2	XCTBR,POINT	;EXECUTE HERE
   (1)	83BE   A9   6C      
   (1)	83C0   85   E2      
   (1)	83C2   A9   85      
   (1)	83C4   85   E3      
   541	83C6   D0   CE      		BNE	GO3
   542	                    
   543	83C8                	GOJMPI:	MOV2	XBTARG,POINT	;NEED TO PICK UP ACTUAL TARGET
   (1)	83C8   AD   7B   85 
   (1)	83CB   85   E2      
   (1)	83CD   AD   7C   85 
   (1)	83D0   85   E3      
   544	83D2   A0   00      		LDY	#0
   545	83D4   B1   E2      		LDA	(POINT),Y
   546	83D6   8D   7B   85 		STA	XBTARG		;AND SET UP FOR "BRANCH" SIMULATION
   547	83D9   C8           		INY			;SET TO NEXT LOC
   548	83DA   B1   E2      		LDA	(POINT),Y
   549	83DC   8D   7C   85 		STA	XBTARG+1
   550	83DF   4C   BE   83 		JMP	GOJMP		;NO GO SIMULATE JMP (I)
   551	                    
   552	83E2   A6   E8      	IRTS:	LDX	SP		;GET STACK POINTER
   553	83E4   9A           		TXS			;SETUP FOR "RTS" SIMULATION
   554	83E5   68           	IRTS1:	PLA			;PCL
   555	83E6   8D   7B   85 		STA	XBTARG
   556	83E9   68           		PLA			;PCH
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 11-1
ALBUG.M65

   557	83EA   8D   7C   85 		STA	XBTARG+1
   558	83ED   C0   40      		CPY	#$40		;IS THIS SUBR OR INTERRUPT
   559	83EF   F0   08      		BEQ	10$		;DON'T INCREMENT PC IF "RTI"
   560	83F1   EE   7B   85 		INC	XBTARG		;"RTS" NEED PC + 1
   561	83F4   D0   03      		BNE	10$
   562	83F6   EE   7C   85 		INC	XBTARG+1
   563	83F9   BA           	10$:	TSX			;SAVE MODIFIED STACK PNTR
   564	83FA   86   E8      		STX	SP
   565	83FC   4C   BE   83 		JMP	GOJMP
   566	                    
   567	83FF   A6   E8      	IRTI:	LDX	SP		;SETUP STACK POINTER
   568	8401   9A           		TXS
   569	8402   68           		PLA			;GET PROCESSOR STATUS
   570	8403   85   E7      		STA	PS
   571	8405   4C   E5   83 		JMP	IRTS1		;GOIN COMMON CODE
   572	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 12
ALBUG.M65

   574	                    	;$H - HEX DUMP TO TTY
   575	                    
   576	8408   20   41   86 	HDUMP:	CALL	INTPT		;SET UP START AND END ADDRESS
   577	840B   A5   E2      		LDA	POINT		;GET LOW PART OF ADDRESS
   578	840D   29   F0      		AND	#$F0		;MAKE IT START ON A NICE BOUNDRY
   579	840F   85   E2      		STA	POINT
   580	8411   20   A4   85 	10$:	CALL	SETOUT		;SETUP OUTPUT DEVICE / GET LPP
   581	8414   8D   2E   80 		STA	LENGTH		; SAVE IT AWAY
   582	8417   20   85   87 	20$:	CALL	CRLFS		;PRINT OUT CARRAGE RETURN LINEFEED
   583	841A   20   8A   87 		CALL	PRTSPT		;PRINT OUT THE LOCATION
   584	841D   A9   10      		LDA	#$10		;NUMBER OF BYTES PER LINE
   585	841F   20   47   87 		CALL	DMPLIN		;PRINT A LINE OF DUMP
   586	8422   20   58   86 		CALL	ENDCHK		;CHECK TO SEE IF WE ARE FINISHED
   587	8425   CE   2E   80 		DEC	LENGTH		;COUNT LINE
   588	8428   D0   ED      		BNE	20$		;GO DO ANOTHER LINE
   589	842A   20   DB   86 		CALL	PAGEWT		;GO WAIT FOR CONTINUE
   590	842D   4C   11   84 		JMP	10$		;GO DO ANOTHER PAGE
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 13
ALBUG.M65

   592	                    	;$I - INITIALIZE MEMORY
   593	                    
   594	8430   20   6A   86 	INIT:	CALL	GETVAL		;GET VALUE
   595	8433   A6   E0      		LDX	INBUF		;GET BYTE INTO X
   596	8435   20   3E   86 	INITM1:	CALL	INTPTC		;SET UP ADDRESSES
   597	8438   8A           	10$:	TXA			;GET CHARACTER BACK
   598	8439   A0   00      		LDY	#0		;SET UP FOR INDEXING
   599	843B   91   E2      		STA	(POINT),Y	;SET MEMORY TO SPECIFIED VALUE
   600	843D   20   58   86 		CALL	ENDCHK		;CHECK TO SEE IF FINISHED
   601	8440   4C   38   84 		JMP	10$		;NO GO DO ANOTHER VALUE
   602	                    
   603	                    
   604	                    	;$Z - ZERO MEMORY
   605	                    
   606	8443   A2   00      	ZERO:	LDX	#0		;GET A ZERO
   607	8445   F0   EE      		BEQ	INITM1		;GO INITIALIZE MEMORY
   608	                    
   609	                    	;$M - MOVE A BLOCK OF STORE
   610	                    
   611	8447   A9   8D      	MOVE:	LDA	#$8D		;GET STORE OPCODE
   612	8449   20   BB   87 		CALL	INTIVB		;SET UP STORE AND RETURN IN VEB
   613	844C   20   6A   86 		CALL	GETVAL		;GET TO ADDRESS
   614	844F   20   41   86 		CALL	INTPT		;SET UP POINT FROM START
   615	8452                		MOV2	INBUF,VEB+1	;SET UP ADDRESS
   (1)	8452   A5   E0      
   (1)	8454   8D   31   80 
   (1)	8457   A5   E1      
   (1)	8459   8D   32   80 
   616	845C   A0   00      	10$:	LDY	#0		;SET UP FOR INDEXING
   617	845E   B1   E2      		LDA	(POINT),Y	;GET BYTE
   618	8460   20   30   80 		CALL	VEB		;STORE IT AT NEW ADDRESS
   619	8463   20   D7   87 		CALL	INCVEB		;BUMP THE VEB POINTER
   620	8466   20   58   86 		CALL	ENDCHK		;FINISHED?
   621	8469   4C   5C   84 		JMP	10$		;NO
   622	                    
   623	                    	;$L -  PRINTER SELECT TOGGLE
   624	                    
   625	846C   AD   34   80 	PNTSEL:	LDA	STARTA		;COMPLIMENT PRINTER FLAG
   626	846F   8D   3E   80 		STA	PNTF
   627	8472   4C   AA   82 		JMP	BPXIT		;RETURN TO MAIN LOOP
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 14
ALBUG.M65

   629	                    	;$O - CALCULATE BRANCH OFFSET
   630	                    
   631	8475   20   62   87 	OFFSET:	CALL	PRBLNK		;PUT OUT SOME BLANKS
   632	8478   18           		CLC			;MAKE FROM BE ONE MORE
   633	8479   AD   36   80 		LDA	ENDAD		;GET FIRST OF TO ADDRESS
   634	847C   ED   34   80 		SBC	STARTA		;SUBTRACT FROM ADDRESS
   635	847F   AA           		TAX			;SAVE LOW ORDER PART OF ADDRESS
   636	8480   AD   37   80 		LDA	ENDAD+1		;GET HIGH PART OF TO ADDRESS
   637	8483   ED   35   80 		SBC	STARTA+1	;SUBTRACT FROM ADDRESS
   638	8486   A8           		TAY			;SAVE HIGH ORDER BYTE
   639	8487   D0   05      		BNE	10$		;IF IT IS ZERO MAY BE LEGAL ADDRESS
   640	8489   8A           		TXA			;GET LOW PART BACK
   641	848A   10   0D      		BPL	30$		;VALID ADDRESS
   642	848C   30   07      		BMI	20$		;ELSE ILLEGAL ADDRESS
   643	848E   C9   FF      	10$:	CMP	#$FF		;OR $FF IS LEGAL
   644	8490   D0   03      		BNE	20$
   645	8492   8A           		TXA			;GET LOW PART BACK
   646	8493   30   04      		BMI	30$		;VALID ADDRESS
   647	8495   98           	20$:	TYA			;GET HIGH ORDER BYTE
   648	8496   20   91   87 		CALL	PRTSBY		;GO PRINT HIGH ORDER BYTE
   649	8499   8A           	30$:	TXA			;GET LOW ORDER BYTE
   650	849A   20   91   87 		CALL	PRTSBY		;PRINT LOW BYTE
   651	849D   20   85   87 		CALL	CRLFS		;AND CARRIAGE RETURN LINE FEED
   652	84A0   4C   AB   80 		JMP	SCAN		;GO BACK TO MAIN LOOP
   653	                    
   654	                    	;$P - PROCEED FROM BREAKPOINT
   655	                    
   656	84A3   20   85   87 	PROC:	CALL	CRLFS		;SIGNAL START
   657	84A6                		CLR	SNGLF		;NOT SINGLE STEP
   (1)	84A6   A9   00      
   (2)	84A8   8D   3A   80 
   658	84AB   AD   2B   80 		LDA	CF		;QUANT TYPED
   659	84AE   30   07      		BMI	PROC1		;NO - PROCEED ONCE
   660	84B0   AD   34   80 		LDA	STARTA		;GET LOW BYTE OF COUNT
   661	84B3   F0   0E      		BEQ	PERR		;DON'T ALLOW 0$P
   662	84B5   D0   02      		BNE	PROC2		;PROCEED COUNT IN AC
   663	                    
   664	84B7   A9   01      	PROC1:	LDA	#1		;PRELOAD A ONE
   665	84B9   AE   3B   80 	PROC2:	LDX	BPN		;ACTUAL BP #
   666	84BC   F0   10      		BEQ	IXCT		;COULD BE FROM PANIC INT
   667	84BE   9D   57   80 		STA	BPCNT-1,X	;STORE COUNT
   668	84C1   D0   0B      		BNE	IXCT		;JOIN SS CODE
   669	                    
   670	84C3   4C   9A   80 	PERR:	JMP	ERR		;HANDY BRANCH LOC
   671	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 15
ALBUG.M65

   673	                    	;$X - SINGLE STEP
   674	                    
   675	84C6                	EXEC:	CLR	BPN		;NO BREAKS IN PROGRESS
   (1)	84C6   A9   00      
   (2)	84C8   8D   3B   80 
   676	84CB   EE   3A   80 		INC	SNGLF		;SET FLAG
   677	                    
   678	84CE                	IXCT:	MOV2	PRPC,POINT	;SET START ADDRESS
   (1)	84CE   AD   2C   80 
   (1)	84D1   85   E2      
   (1)	84D3   AD   2D   80 
   (1)	84D6   85   E3      
   679	84D8   20   7E   89 		CALL	CALCAD		;GET LENGHT, EA, FORMAT
   680	84DB                		MOV2	INBUF,XBTARG	;SET EA TO BRANCH TARGET
   (1)	84DB   A5   E0      
   (1)	84DD   8D   7B   85 
   (1)	84E0   A5   E1      
   (1)	84E2   8D   7C   85 
   681	84E5   A2   EA      		LDX	#$EA		;GET NOP
   682	84E7   8E   50   85 		STX	IOPC+1		;INIT FOR 1 BYTE INSTR
   683	84EA   8E   51   85 		STX	IOPC+2
   684	84ED   B1   E2      		LDA	(POINT),Y	;GET OPCODE
   685	84EF   D0   01      		BNE	5$		;CONVERT "BRK" INTO "NOP"
   686	84F1   8A           		TXA
   687	84F2   8D   4F   85 	5$:	STA	IOPC
   688	84F5   AD   2E   80 		LDA	LENGTH		;LENGTH OF INSTR
   689	84F8   F0   3D      		BEQ	IXCT1		;1 BYTE - GO NOW
   690	84FA   20   D0   87 		CALL	INCPT		;MOVE TO NEXT BYTE
   691	84FD   AD   2F   80 		LDA	PFRMT		;CHECK FOR BRANCH
   692	8500   C9   1D      		CMP	#$1D		; INSTR
   693	8502   D0   07      		BNE	IXCT3		;NOT BRANCH
   694	8504   A9   1B      		LDA	#XCTBR-IOPC-2	;BRANCH - SET UP DISPLACEMENT
   695	8506   8D   50   85 		STA	IOPC+1		;STORE IN OFFSET BYTE
   696	8509   D0   2C      		BNE	IXCT1		;JOIN COMMON EXIT
   697	                    
   698	850B   B1   E2      	IXCT3:	LDA	(POINT),Y	;GET NEXT BYTE
   699	850D   8D   50   85 		STA	IOPC+1		;STORE IN XCT BLOCK
   700	8510   AD   2E   80 		LDA	LENGTH
   701	8513   C9   02      		CMP	#2		;CHECK FOR 1 OR 2 EXTRA BYTES
   702	8515   D0   20      		BNE	IXCT1		;ONLY 1 BYTE
   703	8517   20   D0   87 		CALL	INCPT		;MOVE TO NEXT
   704	851A   B1   E2      		LDA	(POINT),Y	;GET 3RD AND LAST
   705	851C   8D   51   85 		STA	IOPC+2
   706	851F   AD   4F   85 		LDA	IOPC		;GET OPCODE BYTE
   707	8522   C9   20      		CMP	#$20		;IS IT "JSR"?
   708	8524   D0   11      		BNE	IXCT1		;BRANCH IF NOT
   709	8526   A6   E8      		LDX	SP		;GET SAVED STACK POINTER
   710	8528   9A           		TXS			;SET STACK
   711	8529   A5   E3      		LDA	POINT+1		;YES - SETUP RETURN PC
   712	852B   48           		PHA
   713	852C   A5   E2      		LDA	POINT
   714	852E   48           		PHA
   715	852F   BA           		TSX			;SAVE UPDATED POINTER
   716	8530   86   E8      		STX	SP		; FOR PROCEED
   717	8532   A9   4C      		LDA	#$4C		;CHANGE INTO "JMP"
   718	8534   8D   4F   85 		STA	IOPC
   719	8537   20   D0   87 	IXCT1:	CALL	INCPT		;STEP TO INSTR AFTER THIS ONE
   720	853A                		MOV2	POINT,XNOBR	;SETUP NO BRANCH LOC
   (1)	853A   A5   E2      
   (1)	853C   8D   79   85 
   (1)	853F   A5   E3      
   (1)	8541   8D   7A   85 
   721	8544                		SET2	IOPC,POINT	;SET START ADDR TO IOPC BLOCK
   (1)	8544   A9   4F      
   (1)	8546   85   E2      
   (1)	8548   A9   85      
   (1)	854A   85   E3      
   722	854C   4C   A9   83 		JMP	GO1		;AND START UP
   723	                    
   724	                    	;EXECUTE BLOCK FOR INSTR XCT SIMULATOR
   725	                    
   726	854F   F0   1B      	IOPC:	BEQ	XCTBR
   727	8551   EA           		.BYTE	$EA		;NOP
   728	8552   84   E6      		STY	YREG		;SAVE NEW STATE AFTER $X
   729	8554   86   E5      		STX	XREG
   730	8556   85   E4      		STA	AC
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 15-1
ALBUG.M65

   731	8558   08           		PHP
   732	8559   68           		PLA
   733	855A   85   E7      		STA	PS		;PROCESSOR STATUS
   734	855C   BA           		TSX
   735	855D   86   E8      		STX	SP		;STACK POINTER
   736	855F                	XCTNB:	MOV2	XNOBR,POINT	;NO BRANCH OCCURED
   (1)	855F   AD   79   85 
   (1)	8562   85   E2      
   (1)	8564   AD   7A   85 
   (1)	8567   85   E3      
   737	8569   4C   F3   88 		JMP	BRKY
   738	                    
   739	856C                	XCTBR:	MOV2	XBTARG,POINT	;BRANCH OCCURED
   (1)	856C   AD   7B   85 
   (1)	856F   85   E2      
   (1)	8571   AD   7C   85 
   (1)	8574   85   E3      
   740	8576   4C   F3   88 		JMP	BRKY
   741	                    
   742	8579 0001           	XNOBR:	.BLKW	1		;SAVED POINTERS FOR SINGLE STEP
   743	857B 0001           	XBTARG:	.BLKW	1
   744	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 16
ALBUG.M65

   746	                    	;$Q - DISASSEMBLE CODE
   747	                    
   748	857D   20   41   86 	DISASS:	CALL	INTPT		;SET UP POINT
   749	8580   20   A4   85 	10$:	CALL	SETOUT		;SET OUTPUT DEVICE
   750	8583   8D   2B   80 		STA	CF		; RETURNS LINES/PAGE
   751	8586   20   85   87 	20$:	CALL	CRLFS		;PUT OUT CARRIAGE RETURN LINE FEED
   752	8589   20   1E   87 		CALL	PRTSLS		;GO PRINT A LINE
   753	858C   20   58   86 		CALL	ENDCHK		;CHECK TO SEE IF FINISHED
   754	858F   AD   2E   80 		LDA	LENGTH		;GET LENGTH OF INSTRUCTION
   755	8592   18           		CLC			;ONE ALREADY ADDED AT ENDCHK
   756	8593   20   04   8A 		CALL	PCADJ3		;POINT TO NEXT INSTRUCTION
   757	8596   85   E2      		STA	POINT		;SAVE UPDATED ADDRESS
   758	8598   84   E3      		STY	POINT+1
   759	859A   CE   2B   80 		DEC	CF		;ACCOUNT FOR LINE
   760	859D   D0   E7      		BNE	20$		;GO DO ANOTHER INSTRUCTION
   761	859F   20   DB   86 		CALL	PAGEWT		;GO WAIT FOR GO AHEAD
   762	85A2   D0   DC      		BNE	10$		;GO DO ANOTHER PAGE
   763	                    
   764	                    	;ROUTINE TO SETUP FOR OUTPUT - CHECK PNTF FOR PRINTER
   765	                    
   766	85A4   AD   3E   80 	SETOUT:	LDA	PNTF		;WANT PRINTER?
   767	85A7   F0   06      		BEQ	10$
   768	85A9   20   E0   87 		CALL	OPENP		;YES - OPEN IT IF NOT OPEN ALREADY
   769	85AC   A9   37      		LDA	#LPP		;RETURN LINES/PAGE
   770	85AE   60           		RET
   771	                    
   772	85AF   A9   18      	10$:	LDA	#LNSCR		;LINE/SCREEN (EDITOR)
   773	85B1   60           		RET
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 17
ALBUG.M65

   775	                    	;$S - SEARCH FOR ADDRESS
   776	                    
   777	85B2   20   6A   86 	SEARCH:	CALL	GETVAL		;GET A WORD
   778	85B5                		MOV2	INBUF,VEB	;SAVE VALUE SEARCHING FOR
   (1)	85B5   A5   E0      
   (1)	85B7   8D   30   80 
   (1)	85BA   A5   E1      
   (1)	85BC   8D   31   80 
   779	85BF   20   3E   86 		CALL	INTPTC		;SET UP ADDRESSES
   780	85C2   20   4C   86 		CALL	DECPT		;DECREMENT IT BY ONE
   781	85C5   A0   00      	10$:	LDY	#0		;SET UP INDEX
   782	85C7   B1   E2      		LDA	(POINT),Y	;GET FIRST BYTE
   783	85C9   CD   30   80 		CMP	VEB		;DOES IT MATCH
   784	85CC   D0   22      		BNE	20$		;NO
   785	85CE   C8           		INY			;BUMP POINTER
   786	85CF   B1   E2      		LDA	(POINT),Y	;GET SECOND BYTE
   787	85D1   CD   31   80 		CMP	VEB+1		;DOES IT MATCH
   788	85D4   D0   1A      		BNE	20$		;NO
   789	85D6   20   8A   87 		CALL	PRTSPT		;PRINT THE ADDRESS
   790	85D9   A9   2F      		LDA	#'/		;PRINT SEPERATOR
   791	85DB   20   6D   87 		CALL	OUTSCH		;PRINT IT
   792	85DE   20   6B   87 		CALL	OUTSSP		;PUT OUT A SPACE
   793	85E1   AD   31   80 		LDA	VEB+1		;GET HIGH BYTE
   794	85E4   20   91   87 		CALL	PRTSBY		;PRINT THE BYTE
   795	85E7   AD   30   80 		LDA	VEB		;GET LOW BYTE
   796	85EA   20   91   87 		CALL	PRTSBY		;PRINT IT
   797	85ED   4C   0E   86 		JMP	30$		;GO DO CARRIAGE RETURN LINE FEED
   798	                    
   799	85F0   20   7E   89 	20$:	CALL	CALCAD		;GET EFFECTIVE ADDRESS OF INSTRUCTION
   800	85F3   A5   E0      		LDA	INBUF		;GET LOW BYTE
   801	85F5   CD   30   80 		CMP	VEB		;DOES IT MATCH
   802	85F8   D0   17      		BNE	40$		;NO
   803	85FA   A5   E1      		LDA	INBUF+1		;GET HIGH BYTE
   804	85FC   CD   31   80 		CMP	VEB+1		;DOES IT MATCH
   805	85FF   D0   10      		BNE	40$		;NO
   806	8601   20   1E   87 		CALL	PRTSLS		;GO PRINT THE CONTENTS
   807	8604   AD   2F   80 		LDA	PFRMT		;
   808	8607   C9   1D      		CMP	#$1D		;CHECK TO SEE IF IT WAS A BRANCH
   809	8609   F0   03      		BEQ	30$		;YES.  NO NEED TO BUMP TWO
   810	860B   20   D0   87 		CALL	INCPT		;BUMP POINTER SO WE DO NOT GET ADDRESS AGAIN
   811	860E   20   85   87 	30$:	CALL	CRLFS		;PUT OUT CARRIAGE RETURN LINE FEED
   812	8611   20   58   86 	40$:	CALL	ENDCHK		;ARE WE FINISHED
   813	8614   4C   C5   85 		JMP	10$		;NO
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 18
ALBUG.M65

   815	                    	;$T - TYPE OUT MEMORY IN ASCII
   816	                    
   817	8617   20   3E   86 	TYPE:	CALL	INTPTC		;SET UP ADDRESSES
   818	861A   A0   00      	10$:	LDY	#0		;SET UP FOR INDEXING
   819	861C   B1   E2      		LDA	(POINT),Y	;GET A CHARACTER
   820	861E   20   6D   87 		CALL	OUTSCH		;PRINT THE CHARACTER
   821	8621   20   58   86 		CALL	ENDCHK		;FINISHED?
   822	8624   4C   1A   86 		JMP	10$		;NO
   823	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 19
ALBUG.M65

   825	                    	;ROUTINES DEALING WITH POINT
   826	                    
   827	                    	;REGISTER CLOSE ROUTINE
   828	                    	;CLOSE LOCATION AND UPDATE IF NECESSARY
   829	                    
   830	8627   A0   00      	CLSE:	LDY	#0		;PREPARE TO MODIFY
   831	8629   AD   2A   80 		LDA	ROF		;GET FLAG
   832	862C   F0   0C      		BEQ	CLSEX		;XFER IF NONE OPEN
   833	862E   30   0A      		BMI	CLSEX		; OR SYMBOLIC
   834	8630   AD   2B   80 		LDA	CF		;ANYTHING TYPED?
   835	8633   30   05      		BMI	CLSEX		;NO - DO NOTHING
   836	8635   AD   34   80 		LDA	STARTA		; CURRENT OPEN REG
   837	8638   91   E2      		STA	(POINT),Y	; WITH INPUT VALUE
   838	863A   8C   2A   80 	CLSEX:	STY	ROF		;SET REGISTER CLOSED
   839	863D   60           		RET			;RETURN
   840	                    
   841	                    
   842	                    	;SET UP POINT FROM THE STARTING ADDRESS
   843	                    
   844	863E   20   85   87 	INTPTC:	CALL	CRLFS		;PUT OUT CARRIAGE RETURN LINE FEED FIRST
   845	8641                	INTPT:	MOV2	STARTA,POINT
   (1)	8641   AD   34   80 
   (1)	8644   85   E2      
   (1)	8646   AD   35   80 
   (1)	8649   85   E3      
   846	864B   60           		RET
   847	                    
   848	                    
   849	                    	;DECREMENT THE PC
   850	                    
   851	864C   38           	DECPT:	SEC			;PREPARE TO DECREMENT POINT
   852	864D   A5   E2      		LDA	POINT
   853	864F   E9   01      		SBC	#1
   854	8651   85   E2      		STA	POINT
   855	8653   B0   02      		BCS	10$
   856	8655   C6   E3      		DEC	POINT+1		;HANDLE BORROW
   857	8657   60           	10$:	RET
   858	                    
   859	                    
   860	                    	;CHECK TO SEE IF POINT IS AT END YET
   861	                    
   862	8658   A5   E2      	ENDCHK:	LDA	POINT		;CHECK TO SEE IF FINISHED
   863	865A   CD   36   80 		CMP	ENDAD
   864	865D   A5   E3      		LDA	POINT+1
   865	865F   ED   37   80 		SBC	ENDAD+1
   866	8662   B0   03      		BCS	20$		;IF GREATER THAN, FINISHED
   867	8664   4C   D0   87 		JMP	INCPT		;INCREMENT THE POINTER
   868	                    
   869	8667   4C   9D   80 	20$:	JMP	DCD		;FINISHED GO BACK TO MAIN LOOP
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 20
ALBUG.M65

   871	                    	;ROUTINES TO PICK UP VALUES
   872	                    
   873	                    	; GET ADDITIONAL VALUE, PROMPT FOR INPUT, ERROR IF NOT
   874	                    	;   TERMINATED BY <EOL>
   875	                    
   876	866A   20   6B   87 	GETVAL:	CALL	OUTSSP		;OUTPUT SPACE
   877	866D   A9   3A      		LDA	#':		; AND PROMPT
   878	866F   20   6D   87 		CALL	OUTSCH
   879	8672   20   7C   86 		CALL	GETNUM
   880	8675   C9   9B      		CMP	#.ATEOL		;TERMINATED PROPERLY?
   881	8677   F0   1E      		BEQ	ABTRET		;YES - RETURN
   882	8679   4C   9A   80 		JMP	ERR		;NOPE -ERROR
   883	                    
   884	                    	;GET A NUMBER RETURN WITH TERMINATOR IN A
   885	                    
   886	867C                	GETNUM:	CLR2	INBUF		;CLEAR THE BUFFER
   (1)	867C   A9   00      
   (2)	867E   85   E0      
   (2)	8680   85   E1      
   887	8682   20   A8   86 		CALL	PACKCH		;GET A CHARACTER
   888	8685   D0   08      		BNE	ABTCHK		;IF NOT HEX RETURN WITH CHARACTER IN A
   889	8687   EE   2B   80 		INC	CF		;SAY WE HAVE A NUMBER
   890	868A   20   A8   86 	10$:	CALL	PACKCH		;GO GET ANOTHER CHARACTER
   891	868D   F0   FB      		BEQ	10$		;IF HEX GO GET ANOTHER CHARACTER
   892	                    		;;;	...		; FALL INTO ABTCHK
   893	                    
   894	                    	;CHECK FOR RUBOUT OR BREAK. IF FOUND RETURN TO COMMAND DECODER
   895	                    
   896	868F   C9   7E      	ABTCHK:	CMP	#.ATRUB		;RUBOUT
   897	8691   F0   05      		BEQ	ABORT		;ABORT COMMAND
   898	8693   C9   80      		CMP	#BRKABT		;BREAK TYPED
   899	8695   F0   01      		BEQ	ABORT
   900	8697   60           	ABTRET:	RET
   901	                    
   902	8698                	ABORT:	TYPE	EXES		;PUT OUT XXX
   (1)	8698   A2   A2      
   (1)	869A   A0   86      
   (1)	869C   20   85   F3 
   903	869F   4C   A3   80 		JMP	DCD4
   904	                    
   905	86A2   20   20   58 	EXES:	.ASCII	"  XXX"<.ATEOL>
	86A5   58   58   9B 
   906	                    
   907	                    	;GET A CHARACTER AND PACK IT
   908	                    
   909	86A8   20   F0   86 	PACKCH:	CALL	GETSCH		;GET THE CHARACTER
   910	86AB   C9   3A      		CMP	#'9+1		;CAN IT BE A NUMBER
   911	86AD   30   10      		BMI	PACK		;YES GO TRY TO PACK IT
   912	86AF   C9   41      		CMP	#'A		;IS IT A CHARACTER
   913	86B1   30   0A      		BMI	10$		;NO.  INVALID CHARACTER RETURN
   914	86B3   C9   7E      		CMP	#.ATRUB		;RUBOUT
   915	86B5   F0   06      		BEQ	10$		;YES.  INVALID CHARACTER RETURN
   916	86B7   29   DF      		AND	#@337		;GET RID OF LOWERCASE BIT
   917	86B9   C9   47      		CMP	#'F+1		;IS IT G OR LARGER
   918	86BB   30   02      		BMI	PACK		;NO.  GO PACK IT
   919	86BD   A8           	10$:	TAY			;SIGNAL ILLEGAL CHARACTER
   920	86BE   60           		RET
   921	                    
   922	86BF   C9   30      	PACK:	CMP	#'0		;CHECK FOR HEX
   923	86C1   30   17      		BMI	PACKX
   924	86C3   C9   40      		CMP	#'A-1		;ADJUST FOR A-F
   925	86C5   30   03      		BMI	10$
   926	86C7   18           		CLC			;BY ADDING OFFSET
   927	86C8   69   09      		ADC	#$09
   928	86CA   2A           	10$:	ROL	A		;SHIFT IN
   929	86CB   2A           		ROL	A
   930	86CC   2A           		ROL	A
   931	86CD   2A           		ROL	A
   932	86CE   A0   04      		LDY	#$04		;4 MORE SHIFTS THRU CARRY
   933	86D0   2A           	20$:	ROL	A		; TO MOVE INTO INBUF
   934	86D1   26   E0      		ROL	INBUF
   935	86D3   26   E1      		ROL	INBUF+1		;RIPPLE BIT THROUGH
   936	86D5   88           		DEY			;COUNT LOOP
   937	86D6   D0   F8      		BNE	20$
   938	86D8   A9   00      		LDA	#$00		;RETURN A = 0 IF OK NUMBER
   939	86DA   60           	PACKX:	RET
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 20-1
ALBUG.M65

   940	                    
   941	                    	;WAIT FOR A CHARACTER TO BE TYPED IF IT IS A RUBOUT RETURN TO COMMAND 
   942	                    	;DECODER
   943	                    
   944	86DB   AD   3D   80 	PAGEWT:	LDA	PIOCB		;ARE WE PRINTING?
   945	86DE   F0   05      		BEQ	10$
   946	86E0   A9   0C      		LDA	#@14		;OUTPUT FF
   947	86E2   4C   6D   87 		JMP	OUTSCH
   948	                    
   949	86E5   A9   FD      	10$:	LDA	#.ATBEL		;GET BELL
   950	86E7   20   6D   87 		CALL	OUTSCH		;RING IT
   951	86EA   20   F0   86 		CALL	GETSCH		;WAIT FOR CHARACTER
   952	86ED   4C   8F   86 		JMP	ABTCHK		;CHECK FOR ABORT OR PROCEED
   953	                    
   954	                    	;ROUTINE TO GET A CARACTER
   955	                    	;	RETURNS CHARACTER IN A
   956	                    	;	USES Y
   957	                    
   958	86F0   8E   38   80 	GETSCH:	STX	TEMPX		;SAVE X
   959	86F3   8C   39   80 		STY	TEMPY		; AND Y AROUND O/S
   960	86F6   A9   00      		LDA	#0
   961	86F8   85   2A      		STA	ICAX1Z		;CLEAR FLAG
   962	86FA   20   E2   F6 		CALL	KGETCH		;RETURNS STATUS IN Y, CHAR IN A
   963	86FD   30   0A      		BMI	20$		;DON'T ECHO SPECIAL CHARS
   964	86FF   C9   7E      		CMP	#.ATRUB		;CHECK BS/DEL KEY
   965	8701   F0   0B      		BEQ	30$		; RUBOUT DOESN'T ECHO
   966	8703   C9   20      		CMP	#.CHSP		;CHECK FOR CONTROLS
   967	8705   B0   6C      		BCS	OUTSCN		; ECHO IF NOT
   968	8707   90   05      		BCC	30$		;RETURN CHAR - NO ECHO
   969	                    
   970	8709   C0   80      	20$:	CPY	#BRKABT		;BREAK KEY TYPED?
   971	870B   D0   01      		BNE	30$
   972	870D   98           		TYA			;YES - RETURN BREAK FLAG
   973	870E   AE   38   80 	30$:	LDX	TEMPX		;RESTORE
   974	8711   AC   39   80 		LDY	TEMPY
   975	8714   60           		RET			; ELSE RETURN
   976	                    
   977	                    	;ROUTINE TO GET TWO HEX CARACTERS INTO AC
   978	                    	;	RETURNS CHARACTER IN A
   979	                    	;	X PRESERVED Y RETURNED = 0
   980	                    
   981	8715   20   A8   86 	GETSBY:	CALL	PACKCH		;GET A CHARACTER
   982	8718   20   A8   86 		CALL	PACKCH		;GET ANOTHER CHARACTER
   983	871B   A5   E0      		LDA	INBUF		;LOAD UP BYTE
   984	871D   60           		RET
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 21
ALBUG.M65

   986	                    	;GENERAL PURPOSE PRINTING ROUTIMES
   987	                    
   988	                    	;PRINT LOCATION AND IT'S CONTENETS IF FORM SPECIFIED BY ROF
   989	                    
   990	871E   A9   FF      	PRTSLS:	LDA	#$FF		;SET THE TYPEOUT MODE BACK
   991	8720   8D   2A   80 		STA	ROF
   992	8723   A2   2F      		LDX	#'/		;SLASH
   993	8725   20   8A   87 	PRTSLC:	CALL	PRTSPT		;PRINT CONTENTS OF POINT
   994	8728   8A           		TXA			;GET CHAR BACK
   995	8729   20   6D   87 		CALL	OUTSCH
   996	872C   20   6B   87 		CALL	OUTSSP		; AND A SPACE
   997	                    		;;;	...		; FALL INTO PRTSCN
   998	                    
   999	                    	;PRINT OUT CONTENTS OF CURRENT LOCATION IN FORM SPECIFIED BY ROF
  1000	                    
  1001	872F   A0   00      	PRTSCN:	LDY	#0		;SET FOR GLOBAL INDEX
  1002	8731   B1   E2      		LDA	(POINT),Y	;GET CURRENT LOCATION IN A
  1003	8733   8D   34   80 		STA	STARTA		;SAVE FOR QUOTE OR EQUAL
  1004	8736   AE   2A   80 		LDX	ROF		;SEE WHAT KIND
  1005	8739   30   06      		BMI	20$		;BR IF SYMBOLIC
  1006	873B   20   91   87 		CALL	PRTSBY		;PRINT CONTENTS
  1007	873E   4C   6B   87 	10$:	JMP	OUTSSP		;AWAIT NEXT REQUEST
  1008	                    
  1009	8741   20   05   89 	20$:	CALL	DSMBL		;PRINT SYMBOLIC
  1010	8744   4C   3E   87 		JMP	10$		; AND RETURN TO CMD LOOP
  1011	                    
  1012	                    	;DUMP NUMBER OF LOCATIONS IN A TO SCREEN
  1013	                    
  1014	8747   8D   2F   80 	DMPLIN:	STA	PFRMT		;SAVE IT
  1015	874A   20   62   87 		CALL	PRBLNK		;SPACE OVER 2
  1016	874D   F0   06      		BEQ	20$		;DO NOT INCREMENT POINTER FIRST TIME
  1017	                    
  1018	874F   20   D0   87 	10$:	CALL	INCPT		;INCREMENT THE POINTER
  1019	8752   20   6B   87 		CALL	OUTSSP		;PRINT BLANK
  1020	8755   A0   00      	20$:	LDY	#0		;SET UP FOR INDEXING
  1021	8757   B1   E2      		LDA	(POINT),Y	;GET LOCATION
  1022	8759   20   91   87 		CALL	PRTSBY		;PRINT IT
  1023	875C   CE   2F   80 		DEC	PFRMT		;ACCOUNT FOR CHARACTER
  1024	875F   D0   EE      		BNE	10$		;NOT FINISHED GO DO MORE
  1025	8761   60           		RET
  1026	                    
  1027	                    	;OUTPUT NUMBER OF BLANKS IN X
  1028	                    
  1029	8762   A2   02      	PRBLNK:	LDX	#$2
  1030	8764   20   6B   87 	PRBL2:	CALL	OUTSSP
  1031	8767   CA           		DEX
  1032	8768   D0   FA      		BNE	PRBL2		;LOOP TILL COUNT = 0
  1033	876A   60           		RET
  1034	                    
  1035	                    
  1036	                    	;ROUTINE TO OUTPUT CHARACTER TO OUTPUT PORT
  1037	                    	;	CHARACTER IN A
  1038	                    
  1039	                    	;	USES Y AND RETURNS CHARACTER IN A
  1040	                    
  1041	876B   A9   20      	OUTSSP:	LDA	#.CHSP		;LOAD UP A BLANK
  1042	876D   8E   38   80 	OUTSCH:	STX	TEMPX		;SAVE X & Y AROUND O/S CALLS
  1043	8770   8C   39   80 		STY	TEMPY
  1044	8773   48           	OUTSCN:	PHA			;SAVE THE CHARACTER
  1045	8774   A8           		TAY			; AND MOVE TO Y
  1046	8775   AE   3D   80 		LDX	PIOCB		;GET IOCB INDEX
  1047	8778   A9   0B      		LDA	#PUTCHR		;1 CHAR OUTPUT
  1048	877A   20   10   88 		CALL	CIOC		;OUTPUT TO EDITOR/PRINTER
  1049	877D   AE   38   80 		LDX	TEMPX		;RESTORE X
  1050	8780   AC   39   80 		LDY	TEMPY		;RESTORE Y
  1051	8783   68           		PLA
  1052	8784   60           		RET
  1053	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 22
ALBUG.M65

  1055	                    	;ROUTINE TO WRITE OUT CARRIAGE RETURN LINE FEED
  1056	                    	;	USES A AND Y
  1057	                    
  1058	8785   A9   9B      	CRLFS:	LDA	#.ATEOL
  1059	8787   4C   6D   87 		JMP	OUTSCH		;WRITE IT OUT AND RETURN
  1060	                    
  1061	                    	;ROUTINE TO PRINT CURRENT LOCATION
  1062	                    	;	PRINTS POINT
  1063	                    	;	USES A AND Y
  1064	                    
  1065	878A   A5   E3      	PRTSPT:	LDA	POINT+1		;GET HIGH ORDER BYTE
  1066	878C   20   91   87 		CALL	PRTSBY
  1067	878F   A5   E2      		LDA	POINT		;GET LOW ORDER BYTE 
  1068	                    		;;;	...		;FALL INTO PRTSBY
  1069	                    
  1070	                    	;ROUTINE TO PRINT BYTE AS TWO HEX DIGITS
  1071	                    	;	BYTE IS IN A
  1072	                    
  1073	8791   48           	PRTSBY:	PHA			;SAVE THE BYTE
  1074	8792   4A           		LSR	A		;GET HIGH ORDER FOUR BITS
  1075	8793   4A           		LSR	A
  1076	8794   4A           		LSR	A
  1077	8795   4A           		LSR	A
  1078	8796   20   9A   87 		CALL	HEXSTA		;GO CONVERT IT TO HEX
  1079	8799   68           		PLA			;GET THE ORGINAL BYTE BACK
  1080	                    		;;;	...		; FALL INTO HEXSTA
  1081	                    
  1082	                    
  1083	                    	;ROUTINE TO CONVERT A HEX DIGIT TO ASCII
  1084	                    	;	DIGIT IS IN A
  1085	                    
  1086	879A   29   0F      	HEXSTA:	AND	#$0F		;GET JUST ONE DIGIT
  1087	879C   C9   0A      		CMP	#$0A		;IS IT A DECIMAL DIGIT
  1088	879E   18           		CLC			;CLEAR THE CARRY
  1089	879F   30   02      		BMI	HEXST1		;IF NEGATIVE IT IS A DECIMAL DIGIT
  1090	87A1   69   07      		ADC	#$07		;ADD IN OFFSET TO GET A-F
  1091	87A3   69   30      	HEXST1:	ADC	#$30		;CONVERT TO ASCII
  1092	87A5   4C   6D   87 		JMP	OUTSCH		;GOT WRITE CHARACTER AND RETURN
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 23
ALBUG.M65

  1094	                    	; MISC ROUTINES
  1095	                    
  1096	87A8   D8           	INITS:	CLD			;CLEAR DECIMAL MODE
  1097	87A9   A9   02      		LDA	#LEDGE		;SET DEFAULT MARGINS
  1098	87AB   85   52      		STA	LMARGN
  1099	87AD   A9   27      		LDA	#REDGE
  1100	87AF   85   53      		STA	RMARGN
  1101	87B1   A9   94      		LDA	#$94		;SETUP BACKGROUND COLOR
  1102	87B3   8D   C8   02 		STA	COLOR4		;TO BE SAME AS FOREGROUND
  1103	87B6   4C   2E   88 		JMP	CLOSEP		;CLOSE PRINTER IF OPEN
  1104	                    
  1105	                    	;SET UP VEB AREA
  1106	                    
  1107	87B9   A9   AD      	INTSVB:	LDA	#$AD		;LDA OP CODE
  1108	87BB   8D   30   80 	INTIVB:	STA	VEB
  1109	87BE   AD   34   80 	INTVEB:	LDA	STARTA		;SET UP SUB
  1110	87C1   8D   31   80 		STA	VEB+1
  1111	87C4   AD   35   80 		LDA	STARTA+1
  1112	87C7   8D   32   80 		STA	VEB+2
  1113	87CA   A9   60      		LDA	#$60		;"RTS"
  1114	87CC   8D   33   80 		STA	VEB+3
  1115	87CF   60           		RET
  1116	                    
  1117	                    	;ROUTINE TO INCRENT POINT
  1118	                    
  1119	87D0                	INCPT:	INC2	POINT
   (1)	87D0   E6   E2      
   (1)	87D2   D0   02      
   (1)	87D4   E6   E3      
  1120	87D6   60           		RET
  1121	                    
  1122	                    	;ROUTINE TO INCREMENT ADDRS IN VEB
  1123	                    
  1124	87D7                	INCVEB:	INC2	VEB+1
   (1)	87D7   EE   31   80 
   (1)	87DA   D0   03      
   (1)	87DC   EE   32   80 
  1125	87DF   60           	INCRET:	RET
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 24
ALBUG.M65

  1127	                    	;PRINTER ROUTINES
  1128	                    
  1129	87E0   AD   3D   80 	OPENP:	LDA	PIOCB		;CHECK IF ALREADY OPEN
  1130	87E3   D0   FA      		BNE	INCRET		;YES - DON'T REOPEN
  1131	87E5   A2   10      		LDX	#$10		;START AT IOCB#1
  1132	87E7   BD   40   03 	5$:	LDA	ICHID,X		;GET ID
  1133	87EA   C9   FF      		CMP	#$FF		;FREE?
  1134	87EC   F0   0E      		BEQ	THSONE
  1135	87EE   E0   70      		CPX	#$70		;LAST ONE?
  1136	87F0   F0   07      		BEQ	PNONE
  1137	87F2   8A           		TXA			;STEP INDEX TO NEXT
  1138	87F3   18           		CLC
  1139	87F4   69   10      		ADC	#$10
  1140	87F6   AA           		TAX			;BACK TO X
  1141	87F7   D0   EE      		BNE	5$
  1142	                    
  1143	87F9   4C   9A   80 	PNONE:	JMP	ERR		;NO FREE IOCB'S
  1144	                    
  1145	                    	;FOUND FREE IOCB (INDEX IN X)
  1146	                    
  1147	87FC   8E   3D   80 	THSONE:	STX	PIOCB		;SAVE IOCB INDEX
  1148	87FF   A9   08      		LDA	#OPNOT		;OPEN FOR OUTPUT
  1149	8801   9D   4A   03 		STA	ICAX1,X
  1150	8804                		SET2	PDEV,ICBAL,X	;POINT TO DEVICE TEXT
   (1)	8804   A9   3C      
   (1)	8806   9D   44   03 
   (1)	8809   A9   88      
   (1)	880B   9D   45   03 
  1151	880E   A9   03      		LDA	#OPEN		;OPEN COMMAND
  1152	8810   9D   42   03 	CIOC:	STA	ICCOM,X		;STORE COMMAND
  1153	8813   A9   00      		LDA	#0		;SET LENGTH TO ZERO
  1154	8815   9D   48   03 		STA	ICBLL,X
  1155	8818   9D   49   03 		STA	ICBLH,X
  1156	881B   98           		TYA			;MIGHT HAVE CHARACTER
  1157	881C   20   56   E4 		CALL	CIOV		;INVOKE O/S
  1158	881F   8C   03   03 		STY	DSTATS		;PUT COMPLETION CODE HERE
  1159	8822   10   BB      		BPL	INCRET		;RETURN IF NO ERROR
  1160	8824   C0   80      		CPY	#BRKABT		;BREAK TYPED?
  1161	8826   F0   03      		BEQ	10$
  1162	8828   4C   52   83 		JMP	IOCERR		;COMMON ERROR HANDLER
  1163	                    
  1164	882B   4C   98   86 	10$:	JMP	ABORT		;ABORT I/O - RETURN TO TOP LEVEL
  1165	                    
  1166	                    	; CLOSE PRINTER IOCB
  1167	                    
  1168	882E   AE   3D   80 	CLOSEP:	LDX	PIOCB		;SETUP IOCB INDEX
  1169	8831   F0   AC      		BEQ	INCRET		;RETURN IF NONE
  1170	8833                		CLR	PIOCB		;FLAG NO PRINTER
   (1)	8833   A9   00      
   (2)	8835   8D   3D   80 
  1171	8838   A9   0C      		LDA	#CLOSE		;CLOSE COMMAND
  1172	883A   D0   D4      		BNE	CIOC		; INVOKE CIO
  1173	                    
  1174	883C   50   3A   9B 	PDEV:	.ASCII	"P:"<.ATEOL>
  1175	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 25
ALBUG.M65

  1177	                    	;GENERAL BREAKPOINT ROUTINES
  1178	                    
  1179	                    	;ROUTINE TO REMOVE BREAKPOINTS
  1180	                    
  1181	883F   A2   07      	REMB:	LDX	#MAXBP-1	;COUNT OF THINGS TO DO
  1182	8841   BD   50   80 	5$:	LDA	BPINS,X		;GET INSTR OR ZERO
  1183	8844   F0   05      		BEQ	10$		;NO BP IF ZERO
  1184	8846   20   4F   88 		CALL	SETA		;SET UP ADDRS
  1185	8849   91   E0      		STA	(INBUF),Y	;STORE INSTR
  1186	884B   CA           	10$:	DEX
  1187	884C   10   F3      		BPL	5$		;LOOP OVER ALL
  1188	884E   60           		RET			;RETURN
  1189	                    
  1190	                    	;SETUP ADDRS OF GIVEN BREAKPOINT FOR INDIRECT
  1191	                    	;RETURNS INBUF WITH BPLOC,X , Y := 0
  1192	                    	;PRESERVES AC
  1193	                    
  1194	884F   BC   60   80 	SETA:	LDY	BPLOCL,X	;GET LOW ADDRS BYTE
  1195	8852   84   E0      		STY	INBUF		;USE THIS AS TEMP
  1196	8854   BC   68   80 		LDY	BPLOCH,X	;GET HIGH ADDRS BYTE
  1197	8857   84   E1      		STY	INBUF+1
  1198	8859   A0   00      		LDY	#0		;SET FOR GLOBAL INDIRECT
  1199	885B   60           		RET			;RETURN
  1200	                    
  1201	                    	;ROUTINE TO INSERT BREAKPOINTS
  1202	                    
  1203	885C   A2   07      	INSB:	LDX	#MAXBP-1	;DO ALL
  1204	885E   BD   50   80 	5$:	LDA	BPINS,X		;SEE IF ACTIVE
  1205	8861   F0   0C      		BEQ	10$		;SKIP IF NO BP
  1206	8863   20   4F   88 		CALL	SETA		;SET UP ADDRS
  1207	8866   B1   E0      		LDA	(INBUF),Y	;GET OLD INSTR
  1208	8868   9D   50   80 		STA	BPINS,X		;SAVE OLD INSTR
  1209	886B   A9   00      		LDA	#0		;PUT BREAK IN PLACE
  1210	886D   91   E0      		STA	(INBUF),Y	;...
  1211	886F   CA           	10$:	DEX
  1212	8870   10   EC      		BPL	5$		;LOOP TILL DONE
  1213	8872   60           		RET			;RETURN
  1214	                    
  1215	                    	;INTERUPT SERVICES
  1216	                    
  1217	                    	;IRQ - <BRK> INSTRUCTION OR ACTUAL APPLICATION INT.
  1218	                    
  1219	8873   68           	BREAK:	PLA			;AC IS ON STACK
  1220	8874   85   E4      		STA	AC		;SAVE ACCUM
  1221	8876   68           		PLA			;PROCESSOR STATUS
  1222	8877   85   E7      		STA	PS
  1223	8879   84   E6      		STY	YREG		;SAVE INDEX REGS
  1224	887B   86   E5      		STX	XREG
  1225	887D   68           		PLA			;PC LOW
  1226	887E   38           		SEC			;DECREMENT PC TO REAL LOC
  1227	887F   E9   02      		SBC	#2		;ADJUST PC FOR ACTUAL BP LOC
  1228	8881   8D   2C   80 	10$:	STA	PRPC		;SAVE HERE FOR $P
  1229	8884   85   E2      		STA	POINT		;SAVE HERE FOR EXAMINE
  1230	8886   68           		PLA			;PC HIGH
  1231	8887   B0   02      		BCS	20$		;CHECK BORROW
  1232	8889   E9   00      		SBC	#0		;ADJUST BY 1
  1233	888B   8D   2D   80 	20$:	STA	PRPC+1
  1234	888E   85   E3      		STA	POINT+1
  1235	8890   BA           		TSX			;GET STACK PNTR
  1236	8891   86   E8      		STX	SP		; SAVE IT AWAY
  1237	8893   20   3F   88 		CALL	REMB		;REMOVE BREAKPOINTS NOW
  1238	8896   A2   08      		LDX	#MAXBP		;SEARCH FOR BPN
  1239	8898   BD   4F   80 	25$:	LDA	BPINS-1,X	;ACTIVE BP?
  1240	889B   F0   08      		BEQ	30$		;NO - SKIP TO NEXT
  1241	889D   AD   2D   80 		LDA	PRPC+1		;GET PC HIGH
  1242	88A0   DD   67   80 		CMP	BPLOCH-1,X	;MATCH?
  1243	88A3   F0   08      		BEQ	35$		;YES - TRY FOR LOW
  1244	88A5   CA           	30$:	DEX			;STEP TO NEXT
  1245	88A6   D0   F0      		BNE	25$		; MORE TO DO
  1246	88A8   8E   3B   80 		STX	BPN		;SIGNAL NO B.P.
  1247	88AB   F0   25      		BEQ	BRKX		;NONE FOUND (MAYBE PANIC)
  1248	                    		;..
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 26
ALBUG.M65

  1250	                    		;..
  1251	                    
  1252	88AD   AD   2C   80 	35$:	LDA	PRPC		;GET PC LOW
  1253	88B0   DD   5F   80 		CMP	BPLOCL-1,X	;MATCH?
  1254	88B3   D0   F0      		BNE	30$		;NO - KEEP LOOKING
  1255	                    
  1256	                    	;ACTUAL BPN IN X
  1257	                    
  1258	88B5   8E   3B   80 		STX	BPN		;SAVE BPN
  1259	88B8   BD   57   80 		LDA	BPCNT-1,X	;BREAT THIS TIME? (0)
  1260	88BB   F0   15      		BEQ	BRKX		;BREAK IF ZERO
  1261	88BD   DE   57   80 		DEC	BPCNT-1,X	;COUNT THIS TIME
  1262	88C0   F0   10      		BEQ	BRKX		; AND DO AUTO PROC (IF .NE. 0)
  1263	88C2                		CLR	SNGLF		; NOT SINGLE STEP
   (1)	88C2   A9   00      
   (2)	88C4   8D   3A   80 
  1264	88C7                		SETXA	IXCT		;EXIT THROUGH HERE
   (1)	88C7   A2   CE      
   (1)	88C9   A9   84      
  1265	88CB   48           	BRKRTI:	PHA			;SAVE HIGH PC
  1266	88CC   8A           		TXA			;GET LOW
  1267	88CD   48           		PHA			;SAVE IT TOO
  1268	88CE   A5   E7      		LDA	PS
  1269	88D0   48           		PHA			;CURRENT PROCESSOR STATUS
  1270	88D1   40           		RTI			;DISMISS TO ROUTINE
  1271	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 27
ALBUG.M65

  1273	                    	;HERE TO ENTER BREAKPOINT - CLEAR SINGLE STEP FLAG
  1274	                    
  1275	88D2                	BRKX:	CLR	SNGLF		; CLEAR SS FLAG
   (1)	88D2   A9   00      
   (2)	88D4   8D   3A   80 
  1276	88D7                		SETXA	DOBRK
   (1)	88D7   A2   DD      
   (1)	88D9   A9   88      
  1277	88DB   D0   EE      		BNE	BRKRTI		;EXIT INT TO DOBRK
  1278	                    
  1279	88DD   20   85   87 	DOBRK:	CALL	CRLFS		;PUT OUT A CR/LF
  1280	88E0   A9   42      		LDA	#'B		;PRINT BN;ADDRS
  1281	88E2   20   6D   87 		CALL	OUTSCH
  1282	88E5   AD   3B   80 		LDA	BPN		;MAYBE 0
  1283	88E8   20   9A   87 		CALL	HEXSTA		;TYPE LOW 4 BITS
  1284	88EB   A9   3B      		LDA	#';
  1285	88ED   20   6D   87 		CALL	OUTSCH
  1286	88F0   4C   BC   81 		JMP	LFDS1		;GO PRINT OUT ADDRESS AND INSTR.
  1287	                    
  1288	88F3                	BRKY:	MOV2	POINT,PRPC	;SINGLE STEP ENTRY - POINT HAS PC
   (1)	88F3   A5   E2      
   (1)	88F5   8D   2C   80 
   (1)	88F8   A5   E3      
   (1)	88FA   8D   2D   80 
  1289	88FD   AD   3A   80 		LDA	SNGLF		;WAS THIS SINGLE STEP?
  1290	8900   D0   DB      		BNE	DOBRK		; SIMULATE BREAK IF $X
  1291	8902   4C   93   83 		JMP	GO2		;ELSE - JUST PROCEED
  1292	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 28
ALBUG.M65	6502 DISASSEMBLER

  1294	                    		.SBTTL	6502 DISASSEMBLER
  1295	                    
  1296	                    
  1297	8905   20   7E   89 	DSMBL:	CALL	CALCAD		;CALCULATE EFFECTIVE ADDRESS
  1298	8908   48           		PHA			;SAVE MNEMONIC TABLE INDEX
  1299	8909   B1   E2      	PROP:	LDA	(POINT),Y	;GET OP AND PRINT IT
  1300	890B   20   91   87 		CALL	PRTSBY
  1301	890E   A2   01      		LDX	#$1		;ONE SPACE
  1302	8910   20   64   87 	10$:	CALL	PRBL2
  1303	8913   CC   2E   80 		CPY	LENGTH		;PRINT INSTR (1 TO 3 BYTES)
  1304	8916   C8           		INY			; IN A 12-CHAR FIELD
  1305	8917   90   F0      		BCC	PROP
  1306	8919   A2   03      		LDX	#$3		;CHAR COUNT FOR MNEMONIC PRINT
  1307	891B   C0   04      		CPY	#$4
  1308	891D   90   F1      		BCC	10$
  1309	891F   68           		PLA			;RECOVER MNEMONIC INDEX
  1310	8920   A8           		TAY
  1311	8921   B9   6E   8A 		LDA	MNEML,Y
  1312	8924   8D   32   80 		STA	LMNEM		;FETCH 3-CHAR MNEMONIC
  1313	8927   B9   AE   8A 		LDA	MNEMR,Y		; (PACKED IN 2 BYTES)
  1314	892A   8D   33   80 		STA	RMNEM
  1315	892D   A9   00      	PRMN1:	LDA	#$0
  1316	892F   A0   05      		LDY	#$5
  1317	8931   0E   33   80 	PRMN2:	ASL	RMNEM
  1318	8934   2E   32   80 		ROL	LMNEM		;SHIFT 5 BITS OF CHAR INTO A
  1319	8937   2A           		ROL	A		; (CLEARS CARRY)
  1320	8938   88           		DEY
  1321	8939   D0   F6      		BNE	PRMN2
  1322	893B   69   3F      		ADC	#$3F		;ADD '?' OFFSET
  1323	893D   20   6D   87 		CALL	OUTSCH
  1324	8940   CA           		DEX
  1325	8941   D0   EA      		BNE	PRMN1
  1326	8943   20   62   87 		CALL	PRBLNK		;PRINT 3 BLANKS
  1327	8946   A2   06      		LDX	#$6		;COUNT FOR 6 PRINT FORMAT BITS
  1328	8948   E0   03      	PRADR1:	CPX	#$3
  1329	894A   D0   1B      		BNE	PRADR3		;IF X=3 THEN PRINT ADDRESS VAL
  1330	894C   AC   2E   80 		LDY	LENGTH
  1331	894F   F0   16      		BEQ	PRADR3		;NO PRINT IF LENGTH=0
  1332	8951   AD   2F   80 		LDA	PFRMT
  1333	8954   C9   E8      		CMP	#$E8		;HANDLE REL ADDRESSING MODE
  1334	8956   D0   06      		BNE	PRADR2		;IF NOT DO NOT ADJUST NUMBER OF BYTES
  1335	8958   C8           		INY			;IF RELATIVE BRANCH PRINT 2 BYTES
  1336	8959                		CLR	PFRMT		;CLEAR PFRMT
   (1)	8959   A9   00      
   (2)	895B   8D   2F   80 
  1337	895E   B9   DF   00 	PRADR2:	LDA	INBUF-1,Y	;SPECIAL (PRINT TARGET ADDRS)
  1338	8961   20   91   87 		CALL	PRTSBY		;OUTPUT 1 OR 2 BYTE ADDRS
  1339	8964   88           		DEY			; MSB FIRST
  1340	8965   D0   F7      		BNE	PRADR2
  1341	8967   0E   2F   80 	PRADR3:	ASL	PFRMT		;TEST NEXT PRINT FORMAT BIT
  1342	896A   90   0E      		BCC	PRADR4		;IF 0, DON'T PRINT
  1343	896C   BD   61   8A 		LDA	CHAR1-1,X	; CORRESPONDING CHARS
  1344	896F   20   6D   87 		CALL	OUTSCH		;OUTPUT 1 OR 2 CHARS
  1345	8972   BD   67   8A 		LDA	CHAR2-1,X	; (IF CHAR FROM CHAR2 IS 0,
  1346	8975   F0   03      		BEQ	PRADR4		;  DON'T OUTPUT IT)
  1347	8977   20   6D   87 		CALL	OUTSCH
  1348	897A   CA           	PRADR4:	DEX
  1349	897B   D0   CB      		BNE	PRADR1
  1350	897D   60           		RET
  1351	                    
  1352	                    
  1353	                    	;SET UP LENGTH, PFRMT AND EFFECTIV ADDRESS
  1354	                    	;	RETURNS INDEX INTO MNEMONIC TABLES IN A AND 0 IN Y
  1355	                    
  1356	897E   A0   00      	CALCAD:	LDY	#0		;SET UP FOR INDEXING
  1357	8980   84   E1      		STY	INBUF+1		;ZERO HIGH BYTE OF ADDRESS IN CASE ONLY ONE BYTE
  1358	8982   B1   E2      		LDA	(POINT),Y	;GET OPCODE
  1359	8984   A8           		TAY			;SAVE IN Y
  1360	8985   4A           		LSR	A		; EVEN/ODD TEST
  1361	8986   90   0B      		BCC	IEVEN
  1362	8988   4A           		LSR	A		; TEST B1
  1363	8989   B0   17      		BCS	IERR		; XXXXXX11 INSTR INVALID
  1364	898B   C9   22      		CMP	#$22
  1365	898D   F0   13      		BEQ	IERR		; 10001001 INSTR INVALID
  1366	898F   29   07      		AND	#$7		;MASK 3 BITS FOR ADDRS MODE
  1367	8991   09   80      		ORA	#$80		; ADD INDEXING OFFSET.
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 28-1
ALBUG.M65	6502 DISASSEMBLER

  1368	8993   4A           	IEVEN:	LSR	A		;LSB INTO CARRY FOR
  1369	8994   AA           		TAX			; LEFT/RIGHT TEST BELOW.
  1370	8995   BD   10   8A 		LDA	MODE1,X		;INDEX INTO ADDRS MODE TABLE
  1371	8998   B0   04      		BCS	RTMODE		;IF CARRY SET USE LSD FOR
  1372	899A   4A           		LSR	A		; PRINT FORMAT INDEX.
  1373	899B   4A           		LSR	A
  1374	899C   4A           		LSR	A
  1375	899D   4A           		LSR	A		; IF CARRY CLEAR, USE MSD
  1376	899E   29   0F      	RTMODE:	AND	#$F		;MASK FOR 4-BIT INDEX
  1377	89A0   D0   04      		BNE	GETFMT		; 0 FOR INVALID OPCODES
  1378	89A2   A0   80      	IERR:	LDY	#$80		;SUBSTITUTE $80 FOR INVALID OP.
  1379	89A4   A9   00      		LDA	#$0		;SET PRINT FORMAT TO 0
  1380	89A6   AA           	GETFMT:	TAX
  1381	89A7   BD   54   8A 		LDA	MODE2,X		;INDEX INTO PRINT FORMAT TABLE
  1382	89AA   8D   2F   80 		STA	PFRMT		;SAVE FOR ADDRESS FIELD FORMAT
  1383	89AD   29   03      		AND	#$3		;MASK 2-BIT LENGTH 0 = 1-BYTE,
  1384	89AF   8D   2E   80 		STA	LENGTH		; 1 = 2-BYTE, 2 = 3-BYTE.
  1385	89B2   98           		TYA			;RESTORE OP CODE
  1386	89B3   48           		PHA			;SAVE OPCODE ON STACK
  1387	89B4   AC   2E   80 		LDY	LENGTH		;GET LENGTH
  1388	89B7   F0   13      		BEQ	10$		;IF ZERO SET CURRENT ADDRESS IN INBUF FOR TAB
  1389	89B9   B1   E2      		LDA	(POINT),Y	;GET FIRST BYTE OF ADDRESS
  1390	89BB   C0   01      		CPY	#1		;IS IT A 2 BYTE INSTRUCTION
  1391	89BD   D0   16      		BNE	20$		;NO GO PRINT BOTH BYTES
  1392	89BF   E0   0D      		CPX	#13		;WAS INDEX TO MODE2 FOR RELATIVE
  1393	89C1   D0   17      		BNE	30$		;NO GO DO JUST ONE BYTE
  1394	89C3   20   F7   89 		CALL	RELADR		;GO CALCULATE RELATIVE ADDRESS
  1395	89C6   84   E1      		STY	INBUF+1		;SAVE HIGH ORDER BYTE
  1396	89C8   8A           		TXA			;GET LOW ORDER BYTE BACK
  1397	89C9   4C   DA   89 		JMP	30$		;GO FINISH UP
  1398	                    
  1399	89CC   A5   E3      	10$:	LDA	POINT+1		;GET HIGH ORDER BYTE OF ADDRESS
  1400	89CE   85   E1      		STA	INBUF+1		;AND SAVE IT
  1401	89D0   A5   E2      		LDA	POINT		;GET LOW BYTE
  1402	89D2   4C   DA   89 		JMP	30$		;GO SAVE IT AND FINISH
  1403	                    
  1404	89D5   85   E1      	20$:	STA	INBUF+1		;SAVE HIGH BYTE OF ADDRESS
  1405	89D7   88           		DEY			;SET TO GET LOW ORDER BYTE
  1406	89D8   B1   E2      		LDA	(POINT),Y	;GET LOW BYTE
  1407	89DA   85   E0      	30$:	STA	INBUF		;SAVE LOW BYTE OF ADDRESS
  1408	89DC   68           		PLA			;GET OPCODE BACK
  1409	89DD   A8           		TAY			;AND SAVE IT IN Y
  1410	89DE   29   8F      		AND	#$8F		;MASK IT FOR 1XXX1010 TEST
  1411	89E0   AA           		TAX			; AND SAVE IT.
  1412	89E1   98           		TYA			;OPCODE AGAIN
  1413	89E2   A0   03      		LDY	#$3
  1414	89E4   E0   8A      		CPX	#$8A
  1415	89E6   F0   0B      		BEQ	60$
  1416	89E8   4A           	40$:	LSR	A
  1417	89E9   90   08      		BCC	60$		;FORM INDEX INTO MNEMONIC TABLE
  1418	89EB   4A           		LSR	A
  1419	89EC   4A           	50$:	LSR	A		; 1XXX1010 -> 00101XXX
  1420	89ED   09   20      		ORA	#$20		; XXXYYY01 -> 00111XXX
  1421	89EF   88           		DEY			; XXXYYY10 -> 00110XXX
  1422	89F0   D0   FA      		BNE	50$		; XXXYY100 -> 00100XXX
  1423	89F2   C8           		INY			; XXXXX000 -> 000XXXXX
  1424	89F3   88           	60$:	DEY
  1425	89F4   D0   F2      		BNE	40$
  1426	89F6   60           		RET
  1427	                    
  1428	                    
  1429	                    	;HERE TO HANDLE RELATIVE BRANCH ADDRS
  1430	                    
  1431	89F7   20   04   8A 	RELADR:	CALL	PCADJ3		;PCL,H + DISPL + 1 TO A,Y
  1432	89FA   AA           		TAX
  1433	89FB   E8           		INX
  1434	89FC   D0   01      		BNE	10$		;	+1 TO X,Y
  1435	89FE   C8           		INY
  1436	89FF   60           	10$:	RET
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 29
ALBUG.M65	6502 DISASSEMBLER

  1438	                    	;ADD LENGTH TO POINT
  1439	                    
  1440	8A00   AD   2E   80 	PCADJ:	LDA	LENGTH		;0=1-BYTE, 1=2-BYTE, 2=3-BYTE
  1441	8A03   38           		SEC
  1442	8A04   A4   E3      	PCADJ3:	LDY	POINT+1
  1443	8A06   AA           		TAX			;TEST DISPL SIGN (FOR REL
  1444	8A07   10   01      		BPL	10$		; BRANCH). EXTEND NEG
  1445	8A09   88           		DEY			; BY DECREMENTING PCH.
  1446	8A0A   65   E2      	10$:	ADC	POINT
  1447	8A0C   90   01      		BCC	20$		;PCL+LENGTH (OR DISPL) +1 TO A.
  1448	8A0E   C8           		INY			;CARRY INTO Y (PCH)
  1449	8A0F   60           	20$:	RET
  1450	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 30
ALBUG.M65	6502 DISASSEMBLER

  1452	                    	;TABLES
  1453	                    
  1454	8A10   40           	MODE1:	.BYTE	$40
  1455	8A11   02           		.BYTE	$2
  1456	8A12   45           		.BYTE	$45
  1457	8A13   03           		.BYTE	$3
  1458	8A14   D0           		.BYTE	$D0
  1459	8A15   08           		.BYTE	$8
  1460	8A16   40           		.BYTE	$40
  1461	8A17   09           		.BYTE	$9
  1462	8A18   30           		.BYTE	$30	;XXXXXXZ0 INSTRS.
  1463	8A19   22           		.BYTE	$22
  1464	8A1A   45           		.BYTE	$45	; Z=0, LEFT HALF-BYTE
  1465	8A1B   33           		.BYTE	$33	; Z=1, RIGHT HALF-BYTE
  1466	8A1C   D0           		.BYTE	$D0
  1467	8A1D   08           		.BYTE	$8
  1468	8A1E   40           		.BYTE	$40
  1469	8A1F   09           		.BYTE	$9
  1470	8A20   40           		.BYTE	$40
  1471	8A21   02           		.BYTE	$2
  1472	8A22   45           		.BYTE	$45
  1473	8A23   33           		.BYTE	$33
  1474	8A24   D0           		.BYTE	$D0
  1475	8A25   08           		.BYTE	$8
  1476	8A26   40           		.BYTE	$40
  1477	8A27   09           		.BYTE	$9
  1478	8A28   40           		.BYTE	$40
  1479	8A29   02           		.BYTE	$2	;(WAS 0)
  1480	8A2A   45           		.BYTE	$45	;(WAS 40)
  1481	8A2B   B3           		.BYTE	$B3	;(WAS B0)
  1482	8A2C   D0           		.BYTE	$D0
  1483	8A2D   08           		.BYTE	$8	;(WAS 0)
  1484	8A2E   40           		.BYTE	$40
  1485	8A2F   09           		.BYTE	$9	;(WAS 0)
  1486	8A30   00           		.BYTE	$0
  1487	8A31   22           		.BYTE	$22
  1488	8A32   44           		.BYTE	$44
  1489	8A33   33           		.BYTE	$33
  1490	8A34   D0           		.BYTE	$D0
  1491	8A35   8C           		.BYTE	$8C
  1492	8A36   44           		.BYTE	$44
  1493	8A37   00           		.BYTE	$0
  1494	8A38   11           		.BYTE	$11
  1495	8A39   22           		.BYTE	$22
  1496	8A3A   44           		.BYTE	$44
  1497	8A3B   33           		.BYTE	$33
  1498	8A3C   D0           		.BYTE	$D0
  1499	8A3D   8C           		.BYTE	$8C
  1500	8A3E   44           		.BYTE	$44
  1501	8A3F   9A           		.BYTE	$9A
  1502	8A40   10           		.BYTE	$10
  1503	8A41   22           		.BYTE	$22
  1504	8A42   44           		.BYTE	$44
  1505	8A43   33           		.BYTE	$33
  1506	8A44   D0           		.BYTE	$D0
  1507	8A45   08           		.BYTE	$8
  1508	8A46   40           		.BYTE	$40
  1509	8A47   09           		.BYTE	$9
  1510	8A48   10           		.BYTE	$10
  1511	8A49   22           		.BYTE	$22
  1512	8A4A   44           		.BYTE	$44
  1513	8A4B   33           		.BYTE	$33
  1514	8A4C   D0           		.BYTE	$D0
  1515	8A4D   08           		.BYTE	$8
  1516	8A4E   40           		.BYTE	$40
  1517	8A4F   09           		.BYTE	$9
  1518	8A50   62           		.BYTE	$62
  1519	8A51   13           		.BYTE	$13	;YYXXXZ01 INSTRS.
  1520	8A52   78           		.BYTE	$78
  1521	8A53   A9           		.BYTE	$A9
  1522	                    
  1523	8A54   00           	MODE2:	.BYTE	$0	;ERR
  1524	8A55   21           		.BYTE	$21	;IMM
  1525	8A56   01           		.BYTE	$1	;Z-PAG (WAS 81)
  1526	8A57   02           		.BYTE	$2	;ABS (WAS 82)
  1527	8A58   00           		.BYTE	$0	;IMPL
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 30-1
ALBUG.M65	6502 DISASSEMBLER

  1528	8A59   80           		.BYTE	$80	;ACC (WAS 0)
  1529	8A5A   59           		.BYTE	$59	;(Z-PAG,X)
  1530	8A5B   4D           		.BYTE	$4D	;(Z-PAG),Y
  1531	8A5C   11           		.BYTE	$11	;Z-PAG,X (WAS 91)
  1532	8A5D   12           		.BYTE	$12	;ABS,X (WAS 92)
  1533	8A5E   06           		.BYTE	$6	;ABS,Y (WAS 86)
  1534	8A5F   4A           		.BYTE	$4A	;(ABS)
  1535	8A60   05           		.BYTE	$5	;Z-PAG,Y (WAS 85)
  1536	8A61   1D           		.BYTE	$1D	;REL (WAS 9D)
  1537	                    
  1538	8A62   2C           	CHAR1:	.BYTE	',	;COMMA
  1539	8A63   29           		.BYTE	')	;RPAREN
  1540	8A64   2C           		.BYTE	',	;COMMA
  1541	8A65   23           		.BYTE	'#	;SHARP
  1542	8A66   28           		.BYTE	'(	;LPAREN
  1543	8A67   41           		.BYTE	'A	;(WAS '$)
  1544	                    
  1545	8A68   59           	CHAR2:	.BYTE	'Y
  1546	8A69   00           		.BYTE	0	;NULL
  1547	8A6A   58           		.BYTE	'X
  1548	8A6B   00           		.BYTE	0	;(WAS '$)
  1549	8A6C   00           		.BYTE	0	;(WAS '$)
  1550	8A6D   00           		.BYTE	0
  1551	                    
  1552	8A6E   1C           	MNEML:	.BYTE	$1C	;XXXXX000 INSTRS.
  1553	8A6F   8A           		.BYTE	$8A
  1554	8A70   1C           		.BYTE	$1C
  1555	8A71   23           		.BYTE	$23
  1556	8A72   5D           		.BYTE	$5D
  1557	8A73   8B           		.BYTE	$8B
  1558	8A74   1B           		.BYTE	$1B
  1559	8A75   A1           		.BYTE	$A1
  1560	8A76   9D           		.BYTE	$9D
  1561	8A77   8A           		.BYTE	$8A
  1562	8A78   1D           		.BYTE	$1D
  1563	8A79   23           		.BYTE	$23
  1564	8A7A   9D           		.BYTE	$9D
  1565	8A7B   8B           		.BYTE	$8B
  1566	8A7C   1D           		.BYTE	$1D
  1567	8A7D   A1           		.BYTE	$A1
  1568	8A7E   00           		.BYTE	$0
  1569	8A7F   29           		.BYTE	$29
  1570	8A80   19           		.BYTE	$19
  1571	8A81   AE           		.BYTE	$AE
  1572	8A82   69           		.BYTE	$69
  1573	8A83   A8           		.BYTE	$A8
  1574	8A84   19           		.BYTE	$19
  1575	8A85   23           		.BYTE	$23
  1576	8A86   24           		.BYTE	$24
  1577	8A87   53           		.BYTE	$53
  1578	8A88   1B           		.BYTE	$1B
  1579	8A89   23           		.BYTE	$23
  1580	8A8A   24           		.BYTE	$24
  1581	8A8B   53           		.BYTE	$53
  1582	8A8C   19           		.BYTE	$19
  1583	8A8D   A1           		.BYTE	$A1
  1584	8A8E   00           		.BYTE	$0	;XXXYY100 INSTRS
  1585	8A8F   1A           		.BYTE	$1A
  1586	8A90   5B           		.BYTE	$5B
  1587	8A91   5B           		.BYTE	$5B
  1588	8A92   A5           		.BYTE	$A5
  1589	8A93   69           		.BYTE	$69
  1590	8A94   24           		.BYTE	$24
  1591	8A95   24           		.BYTE	$24
  1592	8A96   AE           		.BYTE	$AE	;1XXX1010 INSTRS.
  1593	8A97   AE           		.BYTE	$AE
  1594	8A98   A8           		.BYTE	$A8
  1595	8A99   AD           		.BYTE	$AD
  1596	8A9A   29           		.BYTE	$29
  1597	8A9B   00           		.BYTE	$0
  1598	8A9C   7C           		.BYTE	$7C
  1599	8A9D   00           		.BYTE	$0
  1600	8A9E   15           		.BYTE	$15	;XXXYYY10 INSTRS.
  1601	8A9F   9C           		.BYTE	$9C
  1602	8AA0   6D           		.BYTE	$6D
  1603	8AA1   9C           		.BYTE	$9C	;(WAS 0)
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 30-2
ALBUG.M65	6502 DISASSEMBLER

  1604	8AA2   A5           		.BYTE	$A5
  1605	8AA3   69           		.BYTE	$69
  1606	8AA4   29           		.BYTE	$29
  1607	8AA5   53           		.BYTE	$53
  1608	8AA6   84           		.BYTE	$84	;XXXYYY01 INSTRS.
  1609	8AA7   13           		.BYTE	$13
  1610	8AA8   34           		.BYTE	$34
  1611	8AA9   11           		.BYTE	$11
  1612	8AAA   A5           		.BYTE	$A5
  1613	8AAB   69           		.BYTE	$69
  1614	8AAC   23           		.BYTE	$23
  1615	8AAD   A0           		.BYTE	$A0
  1616	                    
  1617	8AAE   D8           	MNEMR:	.BYTE	$D8	;XXXXX000 INSTRS.
  1618	8AAF   62           		.BYTE	$62
  1619	8AB0   5A           		.BYTE	$5A
  1620	8AB1   48           		.BYTE	$48
  1621	8AB2   26           		.BYTE	$26
  1622	8AB3   62           		.BYTE	$62
  1623	8AB4   94           		.BYTE	$94
  1624	8AB5   88           		.BYTE	$88
  1625	8AB6   54           		.BYTE	$54
  1626	8AB7   44           		.BYTE	$44
  1627	8AB8   C8           		.BYTE	$C8
  1628	8AB9   54           		.BYTE	$54
  1629	8ABA   68           		.BYTE	$68
  1630	8ABB   44           		.BYTE	$44
  1631	8ABC   E8           		.BYTE	$E8
  1632	8ABD   94           		.BYTE	$94
  1633	8ABE   00           		.BYTE	$0
  1634	8ABF   B4           		.BYTE	$B4
  1635	8AC0   08           		.BYTE	$8
  1636	8AC1   84           		.BYTE	$84
  1637	8AC2   74           		.BYTE	$74
  1638	8AC3   B4           		.BYTE	$B4
  1639	8AC4   28           		.BYTE	$28
  1640	8AC5   6E           		.BYTE	$6E
  1641	8AC6   74           		.BYTE	$74
  1642	8AC7   F4           		.BYTE	$F4
  1643	8AC8   CC           		.BYTE	$CC
  1644	8AC9   4A           		.BYTE	$4A
  1645	8ACA   72           		.BYTE	$72
  1646	8ACB   F2           		.BYTE	$F2
  1647	8ACC   A4           		.BYTE	$A4
  1648	8ACD   8A           		.BYTE	$8A
  1649	8ACE   00           		.BYTE	$0	;XXXYY100 INSTRS.
  1650	8ACF   AA           		.BYTE	$AA
  1651	8AD0   A2           		.BYTE	$A2
  1652	8AD1   A2           		.BYTE	$A2
  1653	8AD2   74           		.BYTE	$74
  1654	8AD3   74           		.BYTE	$74
  1655	8AD4   74           		.BYTE	$74
  1656	8AD5   72           		.BYTE	$72
  1657	8AD6   44           		.BYTE	$44	;1XXX1010 INSTRS.
  1658	8AD7   68           		.BYTE	$68
  1659	8AD8   B2           		.BYTE	$B2
  1660	8AD9   32           		.BYTE	$32
  1661	8ADA   B2           		.BYTE	$B2
  1662	8ADB   00           		.BYTE	$0
  1663	8ADC   22           		.BYTE	$22
  1664	8ADD   00           		.BYTE	$0
  1665	8ADE   1A           		.BYTE	$1A	;XXXYYY10 INSTRS.
  1666	8ADF   1A           		.BYTE	$1A
  1667	8AE0   26           		.BYTE	$26
  1668	8AE1   26           		.BYTE	$26	;(WAS 0)
  1669	8AE2   72           		.BYTE	$72
  1670	8AE3   72           		.BYTE	$72
  1671	8AE4   88           		.BYTE	$88
  1672	8AE5   C8           		.BYTE	$C8
  1673	8AE6   C4           		.BYTE	$C4
  1674	8AE7   CA           		.BYTE	$CA
  1675	8AE8   26           		.BYTE	$26
  1676	8AE9   48           		.BYTE	$48
  1677	8AEA   44           		.BYTE	$44
  1678	8AEB   44           		.BYTE	$44
  1679	8AEC   A2           		.BYTE	$A2
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 30-3
ALBUG.M65	6502 DISASSEMBLER

  1680	8AED   C8           		.BYTE	$C8
  1681	                    
LBUG - 6502 DEBUGGER (ATARI VERSION)	CROSS 6(54)  17-OCT-83  15:59  Page 31
ALBUG.M65	6502 DISASSEMBLER

  1683	                    	;SPECIAL SYMBOL TABLE
  1684	                    
  1685	8AEE   2F         
