!!!Bug/65 Version 2.0 (C) 1982 McStuff Co. and Optimized Systems Software, Inc.
Powerful, individual adaptable debugger for Atari 8 bit computers
! Image:
[{Image src='Bug-65.jpg' width=439 height=269 }]
Bug/65 Version 2.0 (C) 1982 McStuff Company and Optimized Systems Software, Inc.\\
! BUG/65 Disassembly
* [Bug-65 Disassembly.txt]
! ATR-Images:
* [OSS_Bug-65_with_OSS_DOS_XL_2.30p_2000-9A00.atr] ; all versions, normal and relocatable, further with version 4 patch and the User Command Handler Example, please see below
* [OSS_Bug-65_with_OSS_DOS_XL_2.30p_2000-9000_and_3000_Color.atr] ; same as above, but with the 3000 color version instead of the 9A00 version
* [MAC-65_2.00_and_4.20_with_Bug-65_2.0_normal_and_V4_ready_and_DOS_XL_2.30.atr] ; normal and relocatable, further with already patched version 4 of BUG/65 and the User Command Handler Example, please see below
! Manuals:
* [BUG-65 Manual 1.pdf] ; size: 102 KB
* [BUG-65 Manual 2.pdf] ; size: 283 KB
* [BUG-65 Manual 3.pdf] ; size: 213 KB
* [BUG-65 Manual 4.pdf] ; size: 233 KB
* [BUG-65 Manual 5.pdf] ; size: 987 KB
* [BUG-65 Version 2.0 Manual with ERRATA|BUG-65 Version 2.0 manual-final with errorpage.pdf] ; size: 2.7 MB ; this manual contains as the only one an error page: 'ERRORS IN YOUR BUG/65 MANUAL' (page 4 in the pdf file). As of this moment, it is not understood, why the there mentioned commands: N, O, R', R", W' and W" do not work with the above version 2.0 of BUG/65. Either we have version 1.1 for real, while 2.0 is shown at start or something else is wrong here. Anyway, the mentioned pages on the error page do match with pages in the rest of the manual. Maybe the 'old boys club' from the golden age can solve this? Any help in that case is very welcome at any time. We really appreciate if you can help us.
\\
Please take into account, that in the manuals above version 1.1 is mentioned, while just version 2.0 is available up to now. If you own version 1.1, please let us know. We can make you an offer, you can't resist. ;-)
\\
! BUG/65 User Command Handler Example
{{{
;**************************************************
;  EQUATES INTO BUG/65:
;
LOADPOINT =  ????    ; to be determined by user!!
LP       =   LOADPOINT ; just an abbreviation
MCBEND   =   LP+$021F ; BUG/65 END CODE MSB
DISPV    =   LP+$0209 ; DISPLAY CHAR
USRCMD   =   LP+$0220 ; USER COMMAND VECTOR
GET2HX   =   LP+$022C ; GET 2 HEX PARAMS
HEXL     =   $FC     ; HEX PARAM 1 RESULT
HEX2     =   $FE     ; HEX PARAM 2 RESULT
ERRPAR   =   LP+$0235 ; REPORT PARAM ERROR
DHXBYT   =   LP+$0238 ; DISPLAY HEX BYTE
LSTPG0   =   LP+$0240 ; LAST BUG/65 P0 BYTE USED
EOL      =   $9B     ; END OF LINE CHAR
;
;**************************************************
         *=  USRCMD  ; PATCH US INTO BUG/65
         JMP USERC1
;
         *=  LP+$2000 ; RIGHT AFTER BUG/65 CODE
USERC1   CMP #'1     ; COMMAND "1" ?
         BEQ CMDOK   ; YES
         RTS         ; ELSE RTN EQUAL RESET - ERR
;
CMDOK    JSR GET2HX  ; GET START, END
         LDA HEX1    ; MAKE SURE BOTH SPECIFIED
         ORA HEX1+1
         BEQ PARMER  ; OR ELSE ERROR
         LDA HEX2
         ORA HEX2+1
         BNE PARMOK
;
PARMER   JMP ERRPAR  ; REPORT PARAM ERROR
;
PARMOK   LDX LSTPG0  ; LAST BUG/65 P0 BYTE
;                         (WE'LL USE THE NEXT
;                         FOR OUR ACCUMULATOR)
         LDA #0      ; CLEAR ACCUMULATOR
         STA 1,X
         TAY         ; INIT Y PTR INDEX
;
LOOP     LDA HEX2+1  ; PAST END ADDRESS ?
         CMP HEX1+1
         BCC DONE    ; YES
         BNE NXTEOR  ; NO
         LDA HEX2
         CMP HEX1
         BCC DONE    ; YES
;
NXTEOR   LDA (HEX1),Y ; CALC EOR CHKSUM
         EOR 1,X     ; EOR WITH ACCUM
         STA 1,X     ; AND SAVE IN ACCUM
         INC HEX1    ; BUMP PTR
         BNE LOOP
         INC HEX1+1
         JMP LOOP
;
DONE     LDA #EOL    ; TO NEXT SCREEN LINE
         JSR DISPV
         LDX LSTPG0  ; RESTORE ACCUM ADDRESS
         LDA 1,X     ; DISPLAY HEX RESULT
         JSR DHXBYT
         LDA #0      ; RTN OK (EQUAL SET)
         RTS 
;
         *=  MCBEND  ; CHANGE BUG/65 CODE
         .BYTE  >[*+$FF] ; END BYTE TO INCLUDE
         .END        ; THAT'S ALL FOLKS
}}}
The MAC/65 file of the 'User Command Handler Example': 'USRCOMHD.M65' is already on all of the atr-images above.
! BUG/65 does not print with XL/XE OS:
Device ID $3F instead $40. BUG/65 jumps indirect into the put-byte-routine of the OS ($E436 -> $FECA+1), therefore no IOCB-channel is opened and the device number is missing.\\
Patch (thank you ep for the solution!):\\
Load BUG/65 and change the following:\\
{{{
ORG+$068B LDX #36
          LDY #E4
          JMP 2777
}}}
=>
{{{
ORG+$068B JMP 0600
0600	  PHA
	  LDX #10
	  LDA #1
	  STA 341,X
	  PLA
	  JMP FECB
}}}
! BUG/65 version 4 patch:
The version 4 patch is available in two different kinds:
a) a short BASIC program in form of a BAS-file.
and
b) a short machine language program in form of a COM-file.

a):
BASIC program:
{{{
5 REM BUG/65 BUG -- VERSION 4 PATCH PROGRAM
10 XIO 36,#1,0,0,"D:BUG65.COM":REM UNPROTECT FILE
20 OPEN #1,12,0,"D:BUG65.COM"
30 FOR I=1 TO 2668:REM MOVE TO PROPER POSITION
40 GET #1,C
50 NEXT I
60 PUT #1,12
70 CLOSE #1
}}}

The above program named as "BUGV4FIX.BAS" is in form of a file already on all of the atr-images above.

To make the patch to BUG/65 do as follows:
1) Insert your BASIC cartridge or use BASIC A+ disk.
2) Place your BUG/65 disk into the disk drive.
3) Use this BASIC program above to apply the one byte patch so that BUG/65 will work with OS/A+ version 4.

b):
machine language program:

name of file: BUGV4FIX.COM

BUGV4FIX.COM ; we are still searching for that file, it seems to be lost. Any help, any hint in that case is very much appreciated. :-)

At the end of the BUG/65 manual we can read:\\ \\
1. Copy the files BUG65.COM and BUGV4FIX.COM to a version 4 disk using the COPY24 command (see the DOSXL manual for details on this command).\\
2. At the version 4 "D1:" prompt, type the command: BUGV4FIX (RETURN).\\
3. The file BUG65.COM on that disk is now compatible with version 4 of DOSXL.\\ \\
WARNING: Do NOT perform the BUGV4FIX command on your version 2 master disk!\\
\\
! Creating a non-relocatable version
\\
In order to allow itself to be relocated virtually anywhere in memory, BUG/65 as shipped includes a relocation bit map and relocation program. In addition, relocatable BUG/65 always loads in at locations $9800 through $BC00. If these addresses are "poison" to you (e.g., if you want to use BUG/65 with a cartridge plugged in), you may wish to produce a non-relocatable version designed to run within an address range you pick. If so, USING A 48K SYSTEM, simply specify the loadpoint, as shown in the preceding section (e.g., via BUG65 7000) and allow BUG/65 to load and relocate. Then exit to OS/A+ (via Quit) and use OS/A+ intrinsic command SAVE to save a non-relocatable version. The address range to be SAVEd may be calculated as follows:\\
\\
SAVE filename.com loadpoint+$200 loadpoint+$1FFF\\
\\
Thus, if you had specified "BUG65 7000", you could save the non-relocatable version via\\
\\
SAVE BUG7000.COM 7200 8FFF\\
\\
thus also giving it a name which will later remind you where it will load at. To execute this non-relocatable version, simply type in its name (BUG7000 in the example shown).\\
\\
! Summary of major features of BUG/65
• A full set of debugging commands - change memory, display memory, goto user program with break points, etc.\\
• Binary file read and write, including appended write\\
• A disassembler\\
• An instant assembler providing labelling capability\\
• Expanded command addressing capability: hex or decimal addresses, + and - operators supported, relocated addresses supported\\
• Read or write disk sector(s)\\
• Multiple commands permitted in a command line. Command lines can be repeated with a single keystroke or repeated forever with the special slash operator.\\
• Support for relocatable assemblers - the base of a module can be specified and then used to reference addresses in that module\\
• BUG/65 commands can be executed from a command file, and there is a command to create command files\\
• Hex to decimal and decimal to hex conversions provided\\
• Memory protection of BUG/65's code and data. BUG/65 won't allow you to use a BUG/65 command that will destroy any part of BUG/65 itself. For example, you can't use the Fill command to overwrite BUG/65's code.\\
• Page zero sharing. BUG/65 shares page zero with a user program by keeping two copies of the shared page zero locations - one for the user and one for BUG/65 itself.\\
\\
! Command Summary of BUG/65:
[{Image src='Command Summary 1.jpg' width=482 height=895 }]\\
[{Image src='Command Summary 2.jpg' width=502 height=953 }]\\
Command Summary of BUG/65 Version 2.0 (C) 1982 McStuff Company and Optimized Systems Software, Inc.\\
\\