225

Short explation The Windows NT 3.1 kernel is incompatible with enhanced 486 processors. Specifically, it is incompatible with 486 processors providing the CPUID instructions. Kernel debugging works fine with the 486DX-33 that was originally installed in the machine, and with the older non-enhanced core in a write-through Am486DX4-NV8T without SMM. If your ...


38

The "Basic Programming" cartridge for the Atari 2600 came out in 1980 and it supports all of those except the first one. It had windows for the program, stack, variables, and output which could individually switched on and off (the cartridge would vertically stack as many enabled windows as would fit, stopping when all enabled windows were shown or it ...


37

The early Apple Macintosh computers (original Mac, Mac 512K, Mac Plus) all came with a "Programmer's Switch" installed on the side. Yes and no. While the switch was there, it was on the inside, so, not really accessible. Only after being 'enhanced' with the so called 'Programmers Key Aid', a snap on after market piece of plastic, griping into the ...


29

In the early PC days, letter-writing was still common, and that was at first the main channel of communication to report issues. When CompuServe took off that became the preferred forum, at least in the US. Phone support was also always an option! Here's a typical contact section from a manual, in this case the 1987 Turbo C manual: How to Contact Borland ...


28

Without hardware support, there is no way for a debugger to protect itself from the program being debugged. A debugger needs to protect its code and working state, as well as any hooks it's set up for its debugging (e.g. single-stepping interrupts); but in typical "retro" systems (8-bit machines), a debugger would just insert itself into memory and hope for ...


24

The "programmer's switch" is more technically known as the NMI (Non Maskable Interrupt) switch. It is mapped to a priority 7 interrupt on the 68K CPU, which means it is capable of interrupting anything besides another priority 7 event. When pressed, the CPU saves all its state on the stack, switches to privileged mode, then looks at the interrupt ...


23

Next to every SBC/Kit computer, especially microprocessor systems could do so. Back then a system without this ability was something out of the norm. For the 8080/Z80, already the grandpa of all hobby computers, the Altair 8800, included that feature. Single step could be issued from the front panel and all cards I've ever seen follow that (hardware) ...


23

I worked for Borland in the UK doing support for Turbo C 1 to 1.5. Most contact was via mail or telephone in those days. Bugs were sent over to the US after we did some triage to check if they could be reproduced; I think it was all stored in Reflex (a Borland-produced database) and we got copies of the database periodically. We had Compuserve, MCI mail, ...


19

A debugger that runs inside the debugged machine is a program, so it does need memory. Sometimes the debugger is loaded as a ROM cartridge, usually with its own RAM, so it doesn't need to take any RAM from the running program. This is the case with, for example, the Action Replay modules for the Amiga. Sometimes, it's a regular program that takes some RAM, ...


15

The earliest innovator I know of was Manx. Manx made 'C' programming environments for early, low-cost computers like Apple ][, CP/M-80, MS-DOS, and Motorola 68000. Manx Aztec C v1.06 had symbolic (source code) debugging support when released in early 1984. Manx provided a utility "SIDSYM", which was used along with their linker's ability to generate symbol ...


12

Note all your references to changing values are below the stack pointer, actually a free space. You are not expected to care about this area (stack grows towards lower addresses), as this is of no concern to your application. Even if your computer is sitting at a debugger prompt and apparently is inactive, it isn't. It constantly runs through interrupt ...


11

This is less of a definitive answer than a musing about some seemingly underlying assumptions within the question. For the question itself Supercat has already given a near perfect answer. While it is of the typical kind where everyone know it's wrong, it does tick all boxes. I seriously would love to give it double points :) Different Computer Classes The ...


10

Microsoft Codeview shipped in 1985 and has most of the features you're asking about (its been a while so I can't be certain it has everything e.g. call stack walking), when I was doing Turbo C support for Borland in 87/88 support for it was possibly the most requested feature. You could do source level stepping with Turbo C & symdeb but it wasn't as ...


10

I'm including this answer in response to a couple of suggestions, although it does not meet some of the criteria laid out in the question. DDT for the DEC PDP-1 has to be recalled as probably the very first interactive debugger, and most interactive debuggers that came later were indirectly inspired by DDT. (see DDT Writeup). DDT was built in late 1961 or ...


10

MONS 3 in the ZX Spectrum, for example, changes the instruction at the break address by a CALL to an entry point in MONS. As MONS is executed, it replaces back the changed instruction with the original one (and of course store in memory the current state of all Z80 registers), so when the disassembler is invoked to give you a assembly listing, you see the ...


10

Among the Borland Pascal 7 example programs, there is an OWL application called HeapSpy, which can inspect the list of memory blocks allocated by any running Windows module. The demo is pretty simplistic; the only thing it can do with memory dumps is display them in a built-in viewer. But since it comes with source code, it shouldn’t be too hard to expand ...


9

(This answers the question "Early architecture that distinguished code from data, here by having differing bank switching for code and data". I'm leaving this here because it's interesting, even if it doesn't meet the criteria of the modified question.) The PDP-1 had a Memory Field Control (Type 14) that was capable of distinguishing between an instruction ...


8

Hardware single-stepping the Z80 is nice and simple: when the processor asserts the M1 line (meaning it's executing the first machine cycle of an instruction), pull WAIT low until you're ready for it to continue. You could easily build an add on board to do this for just about any Z80 machine with an exposed bus (although in many cases you'd also need to ...


7

I developed Logo for the Commodore 64, based on work we did at MIT for the Apple ][ and TI 99/4. Apple debugging was done with the ROM, via assembled-in breakpoints. For the C64, Andy Finkelstein at Commodore ordered me a 6510 CPU with an extra pin that signalled the I/D line, and a clamp-on connector that led to a Nicolet-Paratronics logic analyzer, ...


7

I recall my old Z-80 based SD Systems Z80 Starter kit had single stepping in hardware. A programmable timer had its output attached to the Non-Maskable Interrupt (NMI) pin. The debugger firmware would setup the timer to trigger that interrupt just as the instruction in question was fetching its first byte. This would fire off that interrupt when the ...


7

The RCA 1802 microprocessor was implemented in fully static CMOS. You could stop and single step the clock to the processor. Perhaps using a debounced front panel switch, which could be done with a slight modification to a Cosmac Elf kit. A debugger only pretends to single step a program by inserting breakpoints or copying instructions, but the debugger ...


7

Back in the day, MacNosy was the go to disassembler tool to attack things like that. He also wrote a debugger. I can't speak to its status today. Apparently the web site still exists: https://www.jasik.com (We are talking 68K code, right?)


7

THINK Pascal had an integrated debugger that meets all your criteria. You could mark stop points in the editor and then debug your compiled code using them. The debugger supported stepping, a meaningful call stack display, and a good list of the variables as structured typed information.


6

Since the 8080 and Z80 don't do any memory protection, it's fairly easy to do single stepping with them. The hardest part is that a debugger that wants to do debuggging has to figure out where one instruction ends, and the next one starts. It then (for example) inserts a ret immediately after the next instruction to execute1. Do a call to execute that ...


6

Fax was another option. We were in contact with Borland in the early days of Object Vision. The poor thing wasn't able to do anything useful for us, and we exchanged issues and documentation with Borland via faxes. Software patches and some DLLs required to extend the functionality of the software were transfered via modem. This was on 1993.


6

You could easily say that having no proper forward channel to customers was the same problem as having no backwards channel to the software vendor. The internet has made a lot of things easier. For games and cheap software, you had to mainly live with the bug, work around it, or be lucky to find a patch in a magazine. The User Registration Card that came ...


6

It is possible, but not simple. The ordinary boot process which brings a working machine up from cold to the prompt for a Workbench disk doesn't offer an opportunity to drop into the debugger. A dodgy and potentially hardware-damaging approach is to cause an unexpected CPU exception by e.g. wiggling the trapdoor memory in an A500 -- execbase disappearing is ...


6

The extremely popular BBC Micro (1981-1986, still in retro use today) had an exceptionally powerful debugger, "Beebmon" by Watford Electronics, capable of breakpoints, IRQ trapping, code stepping, and so on. From a summary: BEEBMON A ROM based machine code monitor for BBC Micro. It enables machine code programs to be debugged and altered easily ...


6

You mentioned copying files into the %WINDIR%\SYSTEM\IOSUBSYS directory (including VMM.VXD), but nothing about the %WINDIR%\SYSTEM\VMM32 directory. The former, as the name suggests, contains only individual block device drivers (port drivers, VxDs for hard disks, CD-ROM drives, etc.). It’s the latter directory that is supposed to contain core VMM service ...


5

Db is a debugger for the Atari ST and TT series of 68000-family computers... Db can use any of the ST's character devices for its input and output, including the screen, the serial port, and the MIDI port... Db is capable of debugging programs running on one machine while the bulk of the debugger runs on another. It lets you view the state of the ...


Only top voted, non community-wiki answers of a minimum length are eligible